Merge pull request #4259 from MrPetovan/task/4116-remove-vendor-from-git
Remove vendor from git
This commit is contained in:
commit
a13ad278ef
4
.gitignore
vendored
4
.gitignore
vendored
|
@ -52,8 +52,8 @@ nbproject
|
||||||
#ignore things from transifex-client
|
#ignore things from transifex-client
|
||||||
venv/
|
venv/
|
||||||
|
|
||||||
#ignore git projects in vendor
|
#ignore Composer dependencies
|
||||||
vendor/**/.git
|
vendor
|
||||||
|
|
||||||
#ignore config files from JetBrains
|
#ignore config files from JetBrains
|
||||||
/.idea
|
/.idea
|
144
INSTALL.txt
144
INSTALL.txt
|
@ -1,40 +1,40 @@
|
||||||
|
|
||||||
Friendica Installation
|
Friendica Installation
|
||||||
|
|
||||||
We've tried very hard to ensure that Friendica will run on commodity hosting
|
We've tried very hard to ensure that Friendica will run on commodity hosting
|
||||||
platforms - such as those used to host Wordpress blogs and Drupal websites.
|
platforms - such as those used to host Wordpress blogs and Drupal websites.
|
||||||
But be aware that Friendica is more than a simple web application. It is a
|
But be aware that Friendica is more than a simple web application. It is a
|
||||||
complex communications system which more closely resembles an email server
|
complex communications system which more closely resembles an email server
|
||||||
than a web server. For reliability and performance, messages are delivered in
|
than a web server. For reliability and performance, messages are delivered in
|
||||||
the background and are queued for later delivery when sites are down. This
|
the background and are queued for later delivery when sites are down. This
|
||||||
kind of functionality requires a bit more of the host system than the typical
|
kind of functionality requires a bit more of the host system than the typical
|
||||||
blog. Not every PHP/MySQL hosting provider will be able to support Friendica.
|
blog. Not every PHP/MySQL hosting provider will be able to support Friendica.
|
||||||
Many will. But please review the requirements and confirm these with your
|
Many will. But please review the requirements and confirm these with your
|
||||||
hosting provider prior to installation.
|
hosting provider prior to installation.
|
||||||
|
|
||||||
Before you begin: Choose a domain name or subdomain name for your server.
|
Before you begin: Choose a domain name or subdomain name for your server.
|
||||||
Put some thought into this - because changing it is currently not-supported.
|
Put some thought into this - because changing it is currently not-supported.
|
||||||
Things will break, and some of your friends may have difficulty communicating
|
Things will break, and some of your friends may have difficulty communicating
|
||||||
with you. We plan to address this limitation in a future release. Also decide
|
with you. We plan to address this limitation in a future release. Also decide
|
||||||
if you wish to connect with members of the Diaspora network, as this will
|
if you wish to connect with members of the Diaspora network, as this will
|
||||||
impact the installation requirements.
|
impact the installation requirements.
|
||||||
|
|
||||||
Decide if you will use SSL and obtain an SSL cert. Communications with the
|
Decide if you will use SSL and obtain an SSL cert. Communications with the
|
||||||
Diaspora network MAY require both SSL AND an SSL cert signed by a CA which is
|
Diaspora network MAY require both SSL AND an SSL cert signed by a CA which is
|
||||||
recognised by the major browsers. Friendica will work with self-signed certs
|
recognised by the major browsers. Friendica will work with self-signed certs
|
||||||
but Diaspora communication may not. For best results, install your cert PRIOR
|
but Diaspora communication may not. For best results, install your cert PRIOR
|
||||||
to installing Friendica and when visiting your site for the initial
|
to installing Friendica and when visiting your site for the initial
|
||||||
installation in step 5, please use the https: link. (Use the http: or non-SSL
|
installation in step 5, please use the https: link. (Use the http: or non-SSL
|
||||||
link if your cert is self-signed).
|
link if your cert is self-signed).
|
||||||
|
|
||||||
|
|
||||||
1. Requirements
|
1. Requirements
|
||||||
- Apache with mod-rewrite enabled and "Options All" so you can use a
|
- Apache with mod-rewrite enabled and "Options All" so you can use a
|
||||||
local .htaccess file
|
local .htaccess file
|
||||||
|
|
||||||
- PHP 5.4+.
|
- PHP 5.6+ (PHP 7 recommended for performance).
|
||||||
|
|
||||||
- PHP *command line* access with register_argc_argv set to true in the
|
- PHP *command line* access with register_argc_argv set to true in the
|
||||||
php.ini file [or see 'poormancron' in section 8]
|
php.ini file [or see 'poormancron' in section 8]
|
||||||
|
|
||||||
- curl, gd (with at least jpeg support), mysql, mbstring, xml and openssl extensions
|
- curl, gd (with at least jpeg support), mysql, mbstring, xml and openssl extensions
|
||||||
|
@ -46,31 +46,39 @@ php.ini file [or see 'poormancron' in section 8]
|
||||||
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
|
- ability to schedule jobs with cron (Linux/Mac) or Scheduled Tasks
|
||||||
(Windows) [Note: other options are presented in Section 8 of this document]
|
(Windows) [Note: other options are presented in Section 8 of this document]
|
||||||
|
|
||||||
- Installation into a top-level domain or sub-domain (without a
|
- Installation into a top-level domain or sub-domain (without a
|
||||||
directory/path component in the URL) is preferred. This is REQUIRED if
|
directory/path component in the URL) is preferred. This is REQUIRED if
|
||||||
you wish to communicate with the Diaspora network.
|
you wish to communicate with the Diaspora network.
|
||||||
|
|
||||||
|
|
||||||
- For alternative server configurations (such as Nginx server and MariaDB
|
- For alternative server configurations (such as Nginx server and MariaDB
|
||||||
database engine), refer to the wiki at https://github.com/friendica/friendica/wiki
|
database engine), refer to the wiki at https://github.com/friendica/friendica/wiki
|
||||||
|
|
||||||
2. Unpack the Friendica files into the root of your web server document area.
|
2. Unpack the Friendica files into the root of your web server document area.
|
||||||
|
|
||||||
- If you copy the directory tree to your webserver, make sure
|
- If you copy the directory tree to your webserver, make sure
|
||||||
that you also copy .htaccess - as "dot" files are often hidden
|
that you also copy .htaccess - as "dot" files are often hidden
|
||||||
and aren't normally copied.
|
and aren't normally copied.
|
||||||
|
|
||||||
3. Create an empty database and note the access details (hostname, username,
|
OR
|
||||||
|
|
||||||
|
2b. Clone the friendica/friendica GitHub repository and import dependencies
|
||||||
|
|
||||||
|
git clone https://github.com/friendica/friendica [web server folder]
|
||||||
|
cd [web server folder]
|
||||||
|
php util/composer.phar install
|
||||||
|
|
||||||
|
3. Create an empty database and note the access details (hostname, username,
|
||||||
password, database name).
|
password, database name).
|
||||||
|
|
||||||
- Friendica needs the permission to create and delete fields and tables in its own database.
|
- Friendica needs the permission to create and delete fields and tables in its own database.
|
||||||
- Please check the additional notes if running on MySQ 5.7.17 or newer
|
- Please check the additional notes if running on MySQ 5.7.17 or newer
|
||||||
|
|
||||||
4. If you know in advance that it will be impossible for the web server to
|
4. If you know in advance that it will be impossible for the web server to
|
||||||
write or create files in your web directory, create an empty file called
|
write or create files in your web directory, create an empty file called
|
||||||
.htconfig.php and make it writable by the web server.
|
.htconfig.php and make it writable by the web server.
|
||||||
|
|
||||||
5. Visit your website with a web browser and follow the instructions. Please
|
5. Visit your website with a web browser and follow the instructions. Please
|
||||||
note any error messages and correct these before continuing.
|
note any error messages and correct these before continuing.
|
||||||
|
|
||||||
If you are using SSL with a known signature authority (recommended), use the
|
If you are using SSL with a known signature authority (recommended), use the
|
||||||
|
@ -82,19 +90,19 @@ so in the host name setting for the database.
|
||||||
|
|
||||||
6. *If* the automated installation fails for any reason, check the following:
|
6. *If* the automated installation fails for any reason, check the following:
|
||||||
|
|
||||||
- ".htconfig.php" exists
|
- ".htconfig.php" exists
|
||||||
If not, edit htconfig.php and change system settings. Rename
|
If not, edit htconfig.php and change system settings. Rename
|
||||||
to .htconfig.php
|
to .htconfig.php
|
||||||
- Database is populated.
|
- Database is populated.
|
||||||
If not, import the contents of "database.sql" with phpmyadmin
|
If not, import the contents of "database.sql" with phpmyadmin
|
||||||
or mysql command line
|
or mysql command line
|
||||||
|
|
||||||
7. At this point visit your website again, and register your personal account.
|
7. At this point visit your website again, and register your personal account.
|
||||||
Registration errors should all be recoverable automatically.
|
Registration errors should all be recoverable automatically.
|
||||||
If you get any *critical* failure at this point, it generally indicates the
|
If you get any *critical* failure at this point, it generally indicates the
|
||||||
database was not installed correctly. You might wish to move/rename
|
database was not installed correctly. You might wish to move/rename
|
||||||
.htconfig.php to another name and empty (called 'dropping') the database
|
.htconfig.php to another name and empty (called 'dropping') the database
|
||||||
tables, so that you can start fresh.
|
tables, so that you can start fresh.
|
||||||
|
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
@ -102,38 +110,38 @@ tables, so that you can start fresh.
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
****************************************************************************
|
****************************************************************************
|
||||||
|
|
||||||
8. Set up a cron job or scheduled task to run the worker once every 5-10
|
8. Set up a cron job or scheduled task to run the worker once every 5-10
|
||||||
minutes to pick up the recent "public" postings of your friends. Example:
|
minutes to pick up the recent "public" postings of your friends. Example:
|
||||||
|
|
||||||
cd /base/directory; /path/to/php scripts/worker.php
|
cd /base/directory; /path/to/php scripts/worker.php
|
||||||
|
|
||||||
Change "/base/directory", and "/path/to/php" as appropriate for your situation.
|
Change "/base/directory", and "/path/to/php" as appropriate for your situation.
|
||||||
|
|
||||||
If you are using a Linux server, run "crontab -e" and add a line like the
|
If you are using a Linux server, run "crontab -e" and add a line like the
|
||||||
one shown, substituting for your unique paths and settings:
|
one shown, substituting for your unique paths and settings:
|
||||||
|
|
||||||
*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php scripts/worker.php
|
*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php scripts/worker.php
|
||||||
|
|
||||||
You can generally find the location of PHP by executing "which php". If you
|
You can generally find the location of PHP by executing "which php". If you
|
||||||
have troubles with this section please contact your hosting provider for
|
have troubles with this section please contact your hosting provider for
|
||||||
assistance. Friendica will not work correctly if you cannot perform this step.
|
assistance. Friendica will not work correctly if you cannot perform this step.
|
||||||
|
|
||||||
You should also be sure that $a->config['php_path'] is set correctly, it should
|
You should also be sure that $a->config['php_path'] is set correctly, it should
|
||||||
look like (changing it to the correct PHP location)
|
look like (changing it to the correct PHP location)
|
||||||
|
|
||||||
$a->config['php_path'] = '/usr/local/php53/bin/php'
|
$a->config['php_path'] = '/usr/local/php53/bin/php'
|
||||||
|
|
||||||
Alternative: You may be able to use the 'poormancron' plugin to perform this
|
Alternative: You may be able to use the 'poormancron' plugin to perform this
|
||||||
step if you are using a recent Friendica release. 'poormancron' may result in
|
step if you are using a recent Friendica release. 'poormancron' may result in
|
||||||
perfomance and memory issues and is only suitable for small sites with one or
|
perfomance and memory issues and is only suitable for small sites with one or
|
||||||
two users and a handful of contacts. To do this, edit the file
|
two users and a handful of contacts. To do this, edit the file
|
||||||
".htconfig.php" and look for a line describing your plugins. On a fresh
|
".htconfig.php" and look for a line describing your plugins. On a fresh
|
||||||
installation, it will look like
|
installation, it will look like
|
||||||
|
|
||||||
$a->config['system']['addon'] = 'js_upload';
|
$a->config['system']['addon'] = 'js_upload';
|
||||||
|
|
||||||
This indicates the "js_upload" addon module is enabled. You may add additional
|
This indicates the "js_upload" addon module is enabled. You may add additional
|
||||||
addons/plugins using this same line in the configuration file. Change it to
|
addons/plugins using this same line in the configuration file. Change it to
|
||||||
read
|
read
|
||||||
|
|
||||||
$a->config['system']['addon'] = 'js_upload,poormancron';
|
$a->config['system']['addon'] = 'js_upload,poormancron';
|
||||||
|
@ -177,40 +185,40 @@ It is however preferable to use the standard approach if configuring a new serve
|
||||||
|
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
- If you get the message
|
- If you get the message
|
||||||
"System is currently unavailable. Please try again later"
|
"System is currently unavailable. Please try again later"
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
Check your database settings. It usually means your database could not
|
Check your database settings. It usually means your database could not
|
||||||
be opened or accessed. If the database resides on the same machine, check that
|
be opened or accessed. If the database resides on the same machine, check that
|
||||||
the database server name is "localhost".
|
the database server name is "localhost".
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
- 500 Internal Error
|
- 500 Internal Error
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
This could be the result of one of our Apache directives not being
|
This could be the result of one of our Apache directives not being
|
||||||
supported by your version of Apache. Examine your apache server logs.
|
supported by your version of Apache. Examine your apache server logs.
|
||||||
You might remove the line "Options -Indexes" from the .htaccess file if
|
You might remove the line "Options -Indexes" from the .htaccess file if
|
||||||
you are using a Windows server as this has been known to cause problems.
|
you are using a Windows server as this has been known to cause problems.
|
||||||
Also check your file permissions. Your website and all contents must generally
|
Also check your file permissions. Your website and all contents must generally
|
||||||
be world-readable.
|
be world-readable.
|
||||||
|
|
||||||
It is likely that your web server reported the source of the problem in
|
It is likely that your web server reported the source of the problem in
|
||||||
its error log files. Please review these system error logs to determine what
|
its error log files. Please review these system error logs to determine what
|
||||||
caused the problem. Often this will need to be resolved with your hosting
|
caused the problem. Often this will need to be resolved with your hosting
|
||||||
provider or (if self-hosted) your web server configuration.
|
provider or (if self-hosted) your web server configuration.
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
- 400 and 4xx "File not found" errors
|
- 400 and 4xx "File not found" errors
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
First check your file permissions. Your website and all contents must
|
First check your file permissions. Your website and all contents must
|
||||||
generally be world-readable.
|
generally be world-readable.
|
||||||
|
|
||||||
Ensure that mod-rewite is installed and working, and that your
|
Ensure that mod-rewite is installed and working, and that your
|
||||||
.htaccess file is being used. To verify the latter, create a file test.out
|
.htaccess file is being used. To verify the latter, create a file test.out
|
||||||
containing the word "test" in the top directory of Friendica, make it world
|
containing the word "test" in the top directory of Friendica, make it world
|
||||||
readable and point your web browser to
|
readable and point your web browser to
|
||||||
|
|
||||||
http://yoursitenamehere.com/test.out
|
http://yoursitenamehere.com/test.out
|
||||||
|
@ -221,12 +229,12 @@ http://yoursitenamehere.com/test.out
|
||||||
your .htaccess file to be used (there are rules in this file to block access
|
your .htaccess file to be used (there are rules in this file to block access
|
||||||
to any file with .out at the end, as these are typically used for system logs).
|
to any file with .out at the end, as these are typically used for system logs).
|
||||||
|
|
||||||
Make certain the .htaccess file exists and is readable by everybody, then
|
Make certain the .htaccess file exists and is readable by everybody, then
|
||||||
look for the existence of "AllowOverride None" in the Apache server
|
look for the existence of "AllowOverride None" in the Apache server
|
||||||
configuration for your site. This will need to be changed to
|
configuration for your site. This will need to be changed to
|
||||||
"AllowOverride All".
|
"AllowOverride All".
|
||||||
|
|
||||||
If you do not see the word "test", your .htaccess is working, but it is
|
If you do not see the word "test", your .htaccess is working, but it is
|
||||||
likely that mod-rewrite is not installed in your web server or is not working.
|
likely that mod-rewrite is not installed in your web server or is not working.
|
||||||
|
|
||||||
On most flavour of Linux,
|
On most flavour of Linux,
|
||||||
|
@ -234,16 +242,16 @@ likely that mod-rewrite is not installed in your web server or is not working.
|
||||||
% a2enmod rewrite
|
% a2enmod rewrite
|
||||||
% /etc/init.d/apache2 restart
|
% /etc/init.d/apache2 restart
|
||||||
|
|
||||||
Consult your hosting provider, experts on your particular Linux
|
Consult your hosting provider, experts on your particular Linux
|
||||||
distribution or (if Windows) the provider of your Apache server software if
|
distribution or (if Windows) the provider of your Apache server software if
|
||||||
you need to change either of these and can not figure out how. There is
|
you need to change either of these and can not figure out how. There is
|
||||||
a lot of help available on the web. Google "mod-rewrite" along with the
|
a lot of help available on the web. Google "mod-rewrite" along with the
|
||||||
name of your operating system distribution or Apache package (if using
|
name of your operating system distribution or Apache package (if using
|
||||||
Windows).
|
Windows).
|
||||||
|
|
||||||
|
|
||||||
#####################################################################
|
#####################################################################
|
||||||
- If you are unable to write the file .htconfig.php during installation
|
- If you are unable to write the file .htconfig.php during installation
|
||||||
due to permissions issues:
|
due to permissions issues:
|
||||||
#####################################################################
|
#####################################################################
|
||||||
|
|
||||||
|
@ -253,7 +261,7 @@ For Linux:
|
||||||
% touch .htconfig.php
|
% touch .htconfig.php
|
||||||
% chmod 777 .htconfig.php
|
% chmod 777 .htconfig.php
|
||||||
|
|
||||||
Retry the installation. As soon as the database has been created,
|
Retry the installation. As soon as the database has been created,
|
||||||
|
|
||||||
******* this is important *********
|
******* this is important *********
|
||||||
|
|
||||||
|
@ -312,15 +320,15 @@ Unable to create all mysql tables on MySQL 5.7.17 or newer
|
||||||
#######################################################################
|
#######################################################################
|
||||||
|
|
||||||
If the setup fails to create all the database tables and/or manual
|
If the setup fails to create all the database tables and/or manual
|
||||||
creation from the command line fails, with this error:
|
creation from the command line fails, with this error:
|
||||||
|
|
||||||
ERROR 1067 (42000) at line XX: Invalid default value for 'created'
|
ERROR 1067 (42000) at line XX: Invalid default value for 'created'
|
||||||
|
|
||||||
You need to adjust your my.cnf and add the following setting under
|
You need to adjust your my.cnf and add the following setting under
|
||||||
the [mysqld] section :
|
the [mysqld] section :
|
||||||
|
|
||||||
sql_mode = '';
|
sql_mode = '';
|
||||||
|
|
||||||
After that, restart mysql and try again.
|
After that, restart mysql and try again.
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -13,20 +13,23 @@
|
||||||
"issues": "https://github.com/friendica/friendica/issues"
|
"issues": "https://github.com/friendica/friendica/issues"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
"php": ">5.6",
|
||||||
|
"ext-xml": "*",
|
||||||
"ezyang/htmlpurifier": "~4.7.0",
|
"ezyang/htmlpurifier": "~4.7.0",
|
||||||
"mobiledetect/mobiledetectlib": "2.8.*",
|
"mobiledetect/mobiledetectlib": "2.8.*",
|
||||||
"league/html-to-markdown": "~4.4.1",
|
"league/html-to-markdown": "~4.4.1",
|
||||||
"defuse/php-encryption": "1.*",
|
"defuse/php-encryption": "1.*",
|
||||||
"pear/Text_LanguageDetect": "1.*",
|
"pear/Text_LanguageDetect": "1.*",
|
||||||
"pear-pear.php.net/Text_Highlighter": "*",
|
"pear/Text_Highlighter": "dev-master",
|
||||||
"paragonie/random_compat": "^2.0",
|
"paragonie/random_compat": "^2.0",
|
||||||
"smarty/smarty": "^3.1",
|
"smarty/smarty": "^3.1",
|
||||||
"michelf/php-markdown": "^1.7"
|
"michelf/php-markdown": "^1.7",
|
||||||
|
"fxp/composer-asset-plugin": "~1.3"
|
||||||
},
|
},
|
||||||
"repositories": [
|
"repositories": [
|
||||||
{
|
{
|
||||||
"type": "pear",
|
"type": "vcs",
|
||||||
"url": "https://pear.php.net"
|
"url": "https://github.com/pear/Text_Highlighter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -37,7 +40,13 @@
|
||||||
"config": {
|
"config": {
|
||||||
"autoloader-suffix": "Friendica",
|
"autoloader-suffix": "Friendica",
|
||||||
"optimize-autoloader": true,
|
"optimize-autoloader": true,
|
||||||
"preferred-install": "dist"
|
"preferred-install": "dist",
|
||||||
|
"fxp-asset": {
|
||||||
|
"installer-paths": {
|
||||||
|
"npm-asset-library": "vendor/asset",
|
||||||
|
"bower-asset-library": "vendor/asset"
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"archive": {
|
"archive": {
|
||||||
"exclude": [
|
"exclude": [
|
||||||
|
|
378
composer.lock
generated
378
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "9eeabb43bd9f244c3e293ae6f4a33ffc",
|
"content-hash": "7a5d27cfcae62b1d9d10a10a343c0c96",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "defuse/php-encryption",
|
"name": "defuse/php-encryption",
|
||||||
|
@ -95,6 +95,65 @@
|
||||||
],
|
],
|
||||||
"time": "2015-08-05T01:03:42+00:00"
|
"time": "2015-08-05T01:03:42+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "fxp/composer-asset-plugin",
|
||||||
|
"version": "v1.4.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/fxpio/composer-asset-plugin.git",
|
||||||
|
"reference": "61352d99940d2b2392a5d2db83b8c0ef5faf222a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/fxpio/composer-asset-plugin/zipball/61352d99940d2b2392a5d2db83b8c0ef5faf222a",
|
||||||
|
"reference": "61352d99940d2b2392a5d2db83b8c0ef5faf222a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-plugin-api": "^1.0",
|
||||||
|
"php": ">=5.3.3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/composer": "^1.4.0"
|
||||||
|
},
|
||||||
|
"type": "composer-plugin",
|
||||||
|
"extra": {
|
||||||
|
"class": "Fxp\\Composer\\AssetPlugin\\FxpAssetPlugin",
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.4-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Fxp\\Composer\\AssetPlugin\\": ""
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"/Tests/"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "François Pluchino",
|
||||||
|
"email": "francois.pluchino@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "NPM/Bower Dependency Manager for Composer",
|
||||||
|
"homepage": "https://github.com/fxpio/composer-asset-plugin",
|
||||||
|
"keywords": [
|
||||||
|
"asset",
|
||||||
|
"bower",
|
||||||
|
"composer",
|
||||||
|
"dependency manager",
|
||||||
|
"nodejs",
|
||||||
|
"npm",
|
||||||
|
"package"
|
||||||
|
],
|
||||||
|
"time": "2017-10-20T06:53:56+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "league/html-to-markdown",
|
"name": "league/html-to-markdown",
|
||||||
"version": "4.4.1",
|
"version": "4.4.1",
|
||||||
|
@ -306,222 +365,202 @@
|
||||||
"time": "2017-09-27T21:40:39+00:00"
|
"time": "2017-09-27T21:40:39+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pear-pear.php.net/Archive_Tar",
|
"name": "pear/console_getopt",
|
||||||
"version": "1.4.3",
|
"version": "v1.4.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/pear/Console_Getopt.git",
|
||||||
|
"reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f"
|
||||||
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "file",
|
"type": "zip",
|
||||||
"url": "https://pear.php.net/get/Archive_Tar-1.4.3.tgz",
|
"url": "https://api.github.com/repos/pear/Console_Getopt/zipball/82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
|
||||||
"reference": null,
|
"reference": "82f05cd1aa3edf34e19aa7c8ca312ce13a6a577f",
|
||||||
"shasum": null
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"type": "library",
|
||||||
"php": ">=5.2.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/archive_tar": "== 1.4.3.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"psr-0": {
|
||||||
""
|
"Console": "./"
|
||||||
]
|
}
|
||||||
},
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"include-path": [
|
"include-path": [
|
||||||
"/"
|
"./"
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"New BSD License"
|
|
||||||
],
|
|
||||||
"description": "This class provides handling of tar files in PHP.\nIt supports creating, listing, extracting and adding to tar files.\nGzip support is available if PHP has the zlib extension built-in or\nloaded. Bz2 compression is also supported with the bz2 extension loaded."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/Console_Getopt",
|
|
||||||
"version": "1.4.1",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/Console_Getopt-1.4.1.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/console_getopt": "== 1.4.1.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
],
|
||||||
"license": [
|
"license": [
|
||||||
"BSD-2-Clause"
|
"BSD-2-Clause"
|
||||||
],
|
],
|
||||||
"description": "This is a PHP implementation of "getopt" supporting both\nshort and long options."
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Greg Beaver",
|
||||||
|
"email": "cellog@php.net",
|
||||||
|
"role": "Helper"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Andrei Zmievski",
|
||||||
|
"email": "andrei@php.net",
|
||||||
|
"role": "Lead"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Stig Bakken",
|
||||||
|
"email": "stig@php.net",
|
||||||
|
"role": "Developer"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "More info available on: http://pear.php.net/package/Console_Getopt",
|
||||||
|
"time": "2015-07-20T20:28:12+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pear-pear.php.net/PEAR",
|
"name": "pear/pear-core-minimal",
|
||||||
"version": "1.10.5",
|
"version": "v1.10.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/pear/pear-core-minimal.git",
|
||||||
|
"reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115"
|
||||||
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "file",
|
"type": "zip",
|
||||||
"url": "https://pear.php.net/get/PEAR-1.10.5.tgz",
|
"url": "https://api.github.com/repos/pear/pear-core-minimal/zipball/070f0b600b2caca2501e2c9b7e553016e4b0d115",
|
||||||
"reference": null,
|
"reference": "070f0b600b2caca2501e2c9b7e553016e4b0d115",
|
||||||
"shasum": null
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-pcre": "*",
|
"pear/console_getopt": "~1.4",
|
||||||
"ext-xml": "*",
|
"pear/pear_exception": "~1.0"
|
||||||
"pear-pear.php.net/archive_tar": ">=1.4.0.0",
|
|
||||||
"pear-pear.php.net/console_getopt": ">=1.4.1.0",
|
|
||||||
"pear-pear.php.net/structures_graph": ">=1.1.0.0",
|
|
||||||
"pear-pear.php.net/xml_util": ">=1.3.0.0",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
|
|
||||||
"pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
|
|
||||||
},
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
"pear-pear/pear": "== 1.10.5.0"
|
"rsky/pear-core-min": "self.version"
|
||||||
},
|
},
|
||||||
"type": "pear-library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"psr-0": {
|
||||||
""
|
"": "src/"
|
||||||
]
|
}
|
||||||
},
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"include-path": [
|
"include-path": [
|
||||||
"/"
|
"src/"
|
||||||
],
|
],
|
||||||
"license": [
|
"license": [
|
||||||
"New BSD License"
|
"BSD-3-Clause"
|
||||||
],
|
],
|
||||||
"description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n where PHP is running on\n * the System class for quick handling of common operations\n with files and directories\n * the PEAR base class\n Features in a nutshell:\n * full support for channels\n * pre-download dependency validation\n * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n * support for optional dependency groups and limited support for sub-packaging\n * robust dependency support\n * full dependency validation on uninstall\n * remote install for hosts with only ftp access - no more problems with\n restricted host installation\n * full support for mirroring\n * support for bundling several packages into a single tarball\n * support for static dependencies on a url-based package\n * support for custom file roles and installation tasks"
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Christian Weiske",
|
||||||
|
"email": "cweiske@php.net",
|
||||||
|
"role": "Lead"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Minimal set of PEAR core files to be used as composer dependency",
|
||||||
|
"time": "2017-02-28T16:46:11+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pear-pear.php.net/Structures_Graph",
|
"name": "pear/pear_exception",
|
||||||
"version": "1.1.1",
|
"version": "v1.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/pear/PEAR_Exception.git",
|
||||||
|
"reference": "8c18719fdae000b690e3912be401c76e406dd13b"
|
||||||
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "file",
|
"type": "zip",
|
||||||
"url": "https://pear.php.net/get/Structures_Graph-1.1.1.tgz",
|
"url": "https://api.github.com/repos/pear/PEAR_Exception/zipball/8c18719fdae000b690e3912be401c76e406dd13b",
|
||||||
"reference": null,
|
"reference": "8c18719fdae000b690e3912be401c76e406dd13b",
|
||||||
"shasum": null
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.3.0.0"
|
"php": ">=4.4.0"
|
||||||
},
|
},
|
||||||
"replace": {
|
"require-dev": {
|
||||||
"pear-pear/structures_graph": "== 1.1.1.0"
|
"phpunit/phpunit": "*"
|
||||||
|
},
|
||||||
|
"type": "class",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"type": "pear-library",
|
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"psr-0": {
|
||||||
""
|
"PEAR": ""
|
||||||
]
|
}
|
||||||
},
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"include-path": [
|
"include-path": [
|
||||||
"/"
|
"."
|
||||||
],
|
],
|
||||||
"license": [
|
"license": [
|
||||||
"LGPL-3.0+"
|
"BSD-2-Clause"
|
||||||
],
|
],
|
||||||
"description": "Structures_Graph is a package for creating and manipulating graph datastructures. It allows building of directed\nand undirected graphs, with data and metadata stored in nodes. The library provides functions for graph traversing\nas well as for characteristic extraction from the graph topology."
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Helgi Thormar",
|
||||||
|
"email": "dufuz@php.net"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Greg Beaver",
|
||||||
|
"email": "cellog@php.net"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "The PEAR Exception base class.",
|
||||||
|
"homepage": "https://github.com/pear/PEAR_Exception",
|
||||||
|
"keywords": [
|
||||||
|
"exception"
|
||||||
|
],
|
||||||
|
"time": "2015-02-10T20:07:52+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pear-pear.php.net/Text_Highlighter",
|
"name": "pear/text_highlighter",
|
||||||
"version": "0.8.0",
|
"version": "dev-master",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/pear/Text_Highlighter.git",
|
||||||
|
"reference": "4178158d6fef4729bb08654fce8796a123ad0abd"
|
||||||
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "file",
|
"type": "zip",
|
||||||
"url": "https://pear.php.net/get/Text_Highlighter-0.8.0.tgz",
|
"url": "https://api.github.com/repos/pear/Text_Highlighter/zipball/4178158d6fef4729bb08654fce8796a123ad0abd",
|
||||||
"reference": null,
|
"reference": "4178158d6fef4729bb08654fce8796a123ad0abd",
|
||||||
"shasum": null
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"pear-pear.php.net/console_getopt": ">=1.4.1.0",
|
"pear/pear-core-minimal": "@stable",
|
||||||
"pear-pear.php.net/pear": ">=1.10.3.0",
|
"php": ">=5.4.0"
|
||||||
"pear-pear.php.net/xml_parser": ">=1.3.7.0",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
},
|
||||||
"replace": {
|
"require-dev": {
|
||||||
"pear-pear/text_highlighter": "== 0.8.0.0"
|
"phpunit/phpunit": "@stable"
|
||||||
},
|
},
|
||||||
"type": "pear-library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"classmap": [
|
"psr-0": {
|
||||||
""
|
"Text": "./"
|
||||||
]
|
}
|
||||||
},
|
},
|
||||||
"include-path": [
|
"include-path": [
|
||||||
"/"
|
"./"
|
||||||
],
|
],
|
||||||
"license": [
|
"license": [
|
||||||
"PHP License"
|
"PHP License"
|
||||||
],
|
],
|
||||||
"description": "Text_Highlighter is a package for syntax highlighting.\n\nIt provides a base class provining all the functionality,\nand a descendent classes geneator class.\n\nThe main idea is to simplify creation of subclasses\nimplementing syntax highlighting for particular language.\nSubclasses do not implement any new functioanality,\nthey just provide syntax highlighting rules.\nThe rules sources are in XML format.\n\nTo create a highlighter for a language, there is no need\nto code a new class manually. Simply describe the rules\nin XML file and use Text_Highlighter_Generator to create\na new class."
|
"authors": [
|
||||||
},
|
{
|
||||||
{
|
"email": "ssttoo@gmail.com",
|
||||||
"name": "pear-pear.php.net/XML_Parser",
|
"name": "Stoyan Stefanov",
|
||||||
"version": "1.3.7",
|
"role": "Lead"
|
||||||
"dist": {
|
},
|
||||||
"type": "file",
|
{
|
||||||
"url": "https://pear.php.net/get/XML_Parser-1.3.7.tgz",
|
"email": "demenev@gmail.com",
|
||||||
"reference": null,
|
"name": "Andrey Demenev",
|
||||||
"shasum": null
|
"role": "Lead"
|
||||||
},
|
}
|
||||||
"require": {
|
|
||||||
"pear-pear.php.net/pear": "*",
|
|
||||||
"php": ">=4.2.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/xml_parser": "== 1.3.7.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
],
|
||||||
"license": [
|
"description": "More info available on: http://pear.php.net/package/Text_Highlighter",
|
||||||
"BSD License"
|
"support": {
|
||||||
],
|
"issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=Text_Highlighter",
|
||||||
"description": "This is an XML parser based on PHPs built-in xml extension.\nIt supports two basic modes of operation: \"func\" and \"event\". In \"func\" mode, it will look for a function named after each element (xmltag_ELEMENT for start tags and xmltag_ELEMENT_ for end tags), and in \"event\" mode it uses a set of generic callbacks.\n\nSince version 1.2.0 there's a new XML_Parser_Simple class that makes parsing of most XML documents easier, by automatically providing a stack for the elements.\nFurthermore its now possible to split the parser from the handler object, so you do not have to extend XML_Parser anymore in order to parse a document with it."
|
"source": "https://github.com/pear/Text_Highlighter"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/XML_Util",
|
|
||||||
"version": "1.4.3",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/XML_Util-1.4.3.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
},
|
||||||
"require": {
|
"time": "2017-03-07T21:20:30+00:00"
|
||||||
"ext-pcre": "*",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/xml_util": "== 1.4.3.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"BSD License"
|
|
||||||
],
|
|
||||||
"description": "Selection of methods that are often needed when working with XML documents. Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pear/text_languagedetect",
|
"name": "pear/text_languagedetect",
|
||||||
|
@ -624,9 +663,14 @@
|
||||||
"packages-dev": [],
|
"packages-dev": [],
|
||||||
"aliases": [],
|
"aliases": [],
|
||||||
"minimum-stability": "stable",
|
"minimum-stability": "stable",
|
||||||
"stability-flags": [],
|
"stability-flags": {
|
||||||
|
"pear/text_highlighter": 20
|
||||||
|
},
|
||||||
"prefer-stable": false,
|
"prefer-stable": false,
|
||||||
"prefer-lowest": false,
|
"prefer-lowest": false,
|
||||||
"platform": [],
|
"platform": {
|
||||||
|
"php": ">5.6",
|
||||||
|
"ext-xml": "*"
|
||||||
|
},
|
||||||
"platform-dev": []
|
"platform-dev": []
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,7 @@ Here's a few primers if you are new to Friendica or to the PSR-2 coding standard
|
||||||
* Boolean operators are `&&` and `||` for PHP conditions, `AND` and `OR` for SQL queries
|
* Boolean operators are `&&` and `||` for PHP conditions, `AND` and `OR` for SQL queries
|
||||||
* No closing PHP tag
|
* No closing PHP tag
|
||||||
* No trailing spaces
|
* No trailing spaces
|
||||||
|
* Array declarations use the new square brackets syntax
|
||||||
|
|
||||||
Don't worry, you don't have to know by heart the PSR-2 coding standards to start contributing to Friendica.
|
Don't worry, you don't have to know by heart the PSR-2 coding standards to start contributing to Friendica.
|
||||||
There are a few tools you can use to check or fix your files before you commit.
|
There are a few tools you can use to check or fix your files before you commit.
|
||||||
|
|
|
@ -1,25 +1,26 @@
|
||||||
Friendica on Github
|
Friendica on GitHub
|
||||||
===================
|
===================
|
||||||
|
|
||||||
* [Home](help)
|
* [Home](help)
|
||||||
|
|
||||||
Here is how you can work on the code with us. If you have any questions please write to the Friendica developers' forum.
|
Here is how you can work on the code with us. If you have any questions please write to the Friendica developers' forum.
|
||||||
|
|
||||||
Introduction to the workflow with our Github repository
|
Introduction to the workflow with our GitHub repository
|
||||||
-------------------------------------------------------
|
-------------------------------------------------------
|
||||||
|
|
||||||
1. Install git on the system you will be developing on.
|
1. Install git on the system you will be developing on.
|
||||||
2. Create your own [github](https://github.com) account.
|
2. Create your own [GitHub](https://github.com) account.
|
||||||
3. Fork the Friendica repository from [https://github.com/friendica/friendica.git](https://github.com/friendica/friendica.git).
|
3. Fork the Friendica repository from [https://github.com/friendica/friendica.git](https://github.com/friendica/friendica.git).
|
||||||
4. Clone your fork from your Github account to your machine.
|
4. Clone your fork from your GitHub account to your machine.
|
||||||
Follow the instructions provided here: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/) to create and use your own tracking fork on github
|
Follow the instructions provided here: [http://help.github.com/fork-a-repo/](http://help.github.com/fork-a-repo/) to create and use your own tracking fork on GitHub
|
||||||
5. Commit your changes to your fork.
|
5. Run `util/composer.phar install` in Friendica's folder.
|
||||||
Then go to your github page and create a "Pull request" to notify us to merge your work.
|
6. Commit your changes to your fork.
|
||||||
|
Then go to your GitHub page and create a "Pull request" to notify us to merge your work.
|
||||||
|
|
||||||
Our Git Branches
|
Our Git Branches
|
||||||
----------------
|
----------------
|
||||||
|
|
||||||
There are two relevant branches in the main repo on Github:
|
There are two relevant branches in the main repo on GitHub:
|
||||||
|
|
||||||
1. master: This branch contains stable releases only.
|
1. master: This branch contains stable releases only.
|
||||||
2. develop: This branch contains the latest code.
|
2. develop: This branch contains the latest code.
|
||||||
|
|
|
@ -27,6 +27,7 @@ Friendica Documentation and Resources
|
||||||
**Admin Manual**
|
**Admin Manual**
|
||||||
|
|
||||||
* [Install](help/Install)
|
* [Install](help/Install)
|
||||||
|
* [Update](help/Update)
|
||||||
* [Settings & Admin Panel](help/Settings)
|
* [Settings & Admin Panel](help/Settings)
|
||||||
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
|
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
|
||||||
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
|
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
|
||||||
|
|
|
@ -26,7 +26,7 @@ Requirements
|
||||||
---
|
---
|
||||||
|
|
||||||
* Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
|
* Apache with mod-rewrite enabled and "Options All" so you can use a local .htaccess file
|
||||||
* PHP 5.4+.
|
* PHP 5.6+ (PHP 7 is recommended for performance)
|
||||||
* PHP *command line* access with register_argc_argv set to true in the php.ini file
|
* PHP *command line* access with register_argc_argv set to true in the php.ini file
|
||||||
* Curl, GD, PDO, MySQLi, hash, xml and OpenSSL extensions
|
* Curl, GD, PDO, MySQLi, hash, xml and OpenSSL extensions
|
||||||
* some form of email server or email gateway such that PHP mail() works
|
* some form of email server or email gateway such that PHP mail() works
|
||||||
|
@ -43,9 +43,11 @@ Installation procedure
|
||||||
Unpack the Friendica files into the root of your web server document area.
|
Unpack the Friendica files into the root of your web server document area.
|
||||||
If you are able to do so, we recommend using git to clone the source repository rather than to use a packaged tar or zip file.
|
If you are able to do so, we recommend using git to clone the source repository rather than to use a packaged tar or zip file.
|
||||||
This makes the software much easier to update.
|
This makes the software much easier to update.
|
||||||
The Linux command to clone the repository into a directory "mywebsite" would be
|
The Linux commands to clone the repository into a directory "mywebsite" would be
|
||||||
|
|
||||||
git clone https://github.com/friendica/friendica.git mywebsite
|
git clone https://github.com/friendica/friendica.git mywebsite
|
||||||
|
cd mywebsite
|
||||||
|
util/composer.phar install
|
||||||
|
|
||||||
Make sure the folder *view/smarty3* exists and is writable by the webserver user
|
Make sure the folder *view/smarty3* exists and is writable by the webserver user
|
||||||
|
|
||||||
|
@ -116,27 +118,10 @@ If it is not possible to set up a cron job then please activate the "frontend wo
|
||||||
|
|
||||||
Once you have installed Friendica and created an admin account as part of the process, you can access the admin panel of your installation and do most of the server wide configuration from there
|
Once you have installed Friendica and created an admin account as part of the process, you can access the admin panel of your installation and do most of the server wide configuration from there
|
||||||
|
|
||||||
Updating your installation with git
|
|
||||||
---
|
|
||||||
|
|
||||||
You can get the latest changes at any time with
|
|
||||||
|
|
||||||
cd mywebsite
|
|
||||||
git pull
|
|
||||||
|
|
||||||
The default branch to use it the ``master`` branch, which is the stable version of Friendica.
|
|
||||||
If you want to use and test bleeding edge code please checkout the ``develop`` branch.
|
|
||||||
The new features and fixes will be merged from ``develop`` into ``master`` when they are stable approx four times a year.
|
|
||||||
|
|
||||||
The addon tree has to be updated separately like so:
|
|
||||||
|
|
||||||
cd mywebsite/addon
|
|
||||||
git pull
|
|
||||||
|
|
||||||
###Set up a backup plan
|
###Set up a backup plan
|
||||||
Bad things will happen.
|
Bad things will happen.
|
||||||
Let there be a hardware failure, a corrupted database or whatever you can think of.
|
Let there be a hardware failure, a corrupted database or whatever you can think of.
|
||||||
So once the installation of your Friendica node is done, you should make yoursef a backup plan.
|
So once the installation of your Friendica node is done, you should make yourself a backup plan.
|
||||||
|
|
||||||
The most important file is the `.htconfig.php` file in the base directory.
|
The most important file is the `.htconfig.php` file in the base directory.
|
||||||
As it stores all your data, you should also have a recent dump of your Friendica database at hand, should you have to recover your node.
|
As it stores all your data, you should also have a recent dump of your Friendica database at hand, should you have to recover your node.
|
||||||
|
|
72
doc/Update.md
Normal file
72
doc/Update.md
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
Updating Friendica
|
||||||
|
===============
|
||||||
|
|
||||||
|
* [Home](help)
|
||||||
|
|
||||||
|
## Using a Friendica archive
|
||||||
|
|
||||||
|
If you installed Friendica in the ``path/to/friendica`` folder:
|
||||||
|
1. Unpack the new Friendica archive in ``path/to/friendica_new``.
|
||||||
|
2. Copy ``.htconfig.php``, ``photo/`` and ``proxy/`` from ``path/to/friendica`` to ``path/to/friendica_new``.
|
||||||
|
3. Rename the ``path/to/friendica`` folder to ``path/to/friendica_old``.
|
||||||
|
4. Rename the ``path/to/friendica_new`` folder to ``path/to/friendica``.
|
||||||
|
5. Check your site. Note: it may go into maintenance mode to update the database schema.
|
||||||
|
6. If everything works, just delete the ``path/to/friendica_old`` folder.
|
||||||
|
|
||||||
|
To update Addons from an archive, simply delete the ``path/to/friendica/addon`` and replace it with the provided archive.
|
||||||
|
|
||||||
|
## Using Git
|
||||||
|
|
||||||
|
You can get the latest changes at any time with
|
||||||
|
|
||||||
|
cd path/to/friendica
|
||||||
|
git pull
|
||||||
|
util/composer.phar install
|
||||||
|
|
||||||
|
The addon tree has to be updated separately like so:
|
||||||
|
|
||||||
|
cd path/to/friendica/addon
|
||||||
|
git pull
|
||||||
|
|
||||||
|
For both repositories:
|
||||||
|
The default branch to use is the ``master`` branch, which is the stable version of Friendica.
|
||||||
|
It is updated about four times a year on a fixed schedule.
|
||||||
|
|
||||||
|
If you want to use and test bleeding edge code please checkout the ``develop`` branch.
|
||||||
|
The new features and fixes will be merged from ``develop`` into ``master`` after a release candidate period before each release.
|
||||||
|
|
||||||
|
Warning: The ``develop`` branch is unstable, and breaks on average once a month for at most 24 hours until a patch is submitted and merged.
|
||||||
|
Be sure to pull frequently if you choose the ``develop`` branch.
|
||||||
|
|
||||||
|
### Considerations before upgrading Friendica
|
||||||
|
|
||||||
|
#### MySQL >= 5.7.4
|
||||||
|
|
||||||
|
Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored.
|
||||||
|
This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure.
|
||||||
|
If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.
|
||||||
|
|
||||||
|
#### Manual deduplication
|
||||||
|
|
||||||
|
There are two main ways of doing it, either by manually removing the duplicates or by recreating the table.
|
||||||
|
Manually removing the duplicates is usually faster if they're not too numerous.
|
||||||
|
To manually remove the duplicates, you need to know the UNIQUE index columns available in `database.sql`.
|
||||||
|
|
||||||
|
```SQL
|
||||||
|
SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
|
||||||
|
GROUP BY <index columns> HAVING count >= 2;
|
||||||
|
|
||||||
|
/* delete or merge duplicate from above query */;
|
||||||
|
```
|
||||||
|
|
||||||
|
If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE.
|
||||||
|
To recreate the table you need to know the table structure available in `database.sql`.
|
||||||
|
|
||||||
|
```SQL
|
||||||
|
CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
|
||||||
|
INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
|
||||||
|
DROP TABLE <table_name>;
|
||||||
|
RENAME TABLE <table_name>_new TO <table_name>;
|
||||||
|
```
|
||||||
|
|
||||||
|
This method is slower overall, but it is better suited for large numbers of duplicates.
|
|
@ -1,38 +1,38 @@
|
||||||
Friendica Installation
|
Friendica Installation
|
||||||
==========
|
==========
|
||||||
|
|
||||||
* [Zur Startseite der Hilfe](help)
|
* [Zur Startseite der Hilfe](help)
|
||||||
|
|
||||||
Wir haben hart daran gearbeitet, um Friendica auf vorgefertigten Hosting-Plattformen zum Laufen zu bringen - solche, auf denen auch Wordpress Blogs und Drupal-Installationen laufen.
|
Wir haben hart daran gearbeitet, um Friendica auf vorgefertigten Hosting-Plattformen zum Laufen zu bringen - solche, auf denen auch Wordpress Blogs und Drupal-Installationen laufen.
|
||||||
Aber bedenke, dass Friendica mehr als eine einfache Webanwendung ist.
|
Aber bedenke, dass Friendica mehr als eine einfache Webanwendung ist.
|
||||||
Es handelt sich um ein komplexes Kommunikationssystem, das eher an einen Email-Server erinnert als an einen Webserver.
|
Es handelt sich um ein komplexes Kommunikationssystem, das eher an einen Email-Server erinnert als an einen Webserver.
|
||||||
Um die Verfügbarkeit und Performance zu gewährleisten, werden Nachrichten im Hintergrund verschickt und gespeichert, um sie später zu verschicken, wenn eine Webseite gerade nicht erreichbar ist.
|
Um die Verfügbarkeit und Performance zu gewährleisten, werden Nachrichten im Hintergrund verschickt und gespeichert, um sie später zu verschicken, wenn eine Webseite gerade nicht erreichbar ist.
|
||||||
Diese Funktionalität benötigt ein wenig mehr als die normalen Blogs.
|
Diese Funktionalität benötigt ein wenig mehr als die normalen Blogs.
|
||||||
Nicht jeder PHP/MySQL-Hosting-Anbieter kann Friendica unterstützen.
|
Nicht jeder PHP/MySQL-Hosting-Anbieter kann Friendica unterstützen.
|
||||||
Viele hingegen können es. Aber **bitte** prüfe die Voraussetzungen deines Servers vor der Installation.
|
Viele hingegen können es. Aber **bitte** prüfe die Voraussetzungen deines Servers vor der Installation.
|
||||||
|
|
||||||
Wenn dir Fehler während der Installation auffallen, sag uns bitte über [github](https://github.com/friendica/issues) Bescheid.
|
Wenn dir Fehler während der Installation auffallen, sag uns bitte über [github](https://github.com/friendica/issues) Bescheid.
|
||||||
Gib uns bitte so viele Infos zu deinem System, wie du kannst, und beschreibe den Fehler mit allen Details und Fehlermeldungen, so dass wir den Fehler zukünftig verhindern können.
|
Gib uns bitte so viele Infos zu deinem System, wie du kannst, und beschreibe den Fehler mit allen Details und Fehlermeldungen, so dass wir den Fehler zukünftig verhindern können.
|
||||||
Aufgrund der großen Anzahl an verschiedenen Betriebssystemen und PHP-Plattformen haben wir nur geringe Kapazitäten, um deine PHP-Installation zu debuggen oder fehlende Module zu ersetzen, aber wir tun unser Bestes, um allgemeine Code-Fehler zu beheben.
|
Aufgrund der großen Anzahl an verschiedenen Betriebssystemen und PHP-Plattformen haben wir nur geringe Kapazitäten, um deine PHP-Installation zu debuggen oder fehlende Module zu ersetzen, aber wir tun unser Bestes, um allgemeine Code-Fehler zu beheben.
|
||||||
|
|
||||||
Bevor du anfängst: suche dir einen Domain- oder Subdomainnamen für deinen Server.
|
Bevor du anfängst: suche dir einen Domain- oder Subdomainnamen für deinen Server.
|
||||||
Dinge verändern sich und einige deiner Freunde haben möglicherweise Probleme, mit dir zu kommunizieren.
|
Dinge verändern sich und einige deiner Freunde haben möglicherweise Probleme, mit dir zu kommunizieren.
|
||||||
Wir planen, diese Einschränkung in einer zukünftigen Version zu beheben.
|
Wir planen, diese Einschränkung in einer zukünftigen Version zu beheben.
|
||||||
|
|
||||||
|
|
||||||
1. Voraussetzungen
|
1. Voraussetzungen
|
||||||
- Apache mit einer aktiverten mod-rewrite-Funktion und dem Eintrag "Options All", so dass du die lokale .htaccess-Datei nutzen kannst
|
- Apache mit einer aktiverten mod-rewrite-Funktion und dem Eintrag "Options All", so dass du die lokale .htaccess-Datei nutzen kannst
|
||||||
- PHP 5.4+. Je neuer, desto besser.
|
- PHP 5.6+. Je neuer, desto besser.
|
||||||
- PHP *Kommandozeilen*-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei
|
- PHP *Kommandozeilen*-Zugang mit register_argc_argv auf "true" gesetzt in der php.ini-Datei
|
||||||
- Curl, GD, PDO, MySQLi, xml und OpenSSL-Erweiterung
|
- Curl, GD, PDO, MySQLi, xml und OpenSSL-Erweiterung
|
||||||
- etwas in der Art eines Email-Servers oder eines Gateways wie PHP mail()
|
- etwas in der Art eines Email-Servers oder eines Gateways wie PHP mail()
|
||||||
- Mysql 5.5.3+
|
- Mysql 5.5.3+
|
||||||
- die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden]
|
- die Möglichkeit, wiederkehrende Aufgaben mit cron (Linux/Mac) oder "Scheduled Tasks" einzustellen (Windows) [Beachte: andere Optionen sind in Abschnitt 7 dieser Dokumentation zu finden]
|
||||||
- Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet.
|
- Installation in einer Top-Level-Domain oder Subdomain (ohne eine Verzeichnis/Pfad-Komponente in der URL) wird bevorzugt. Verzeichnispfade sind für diesen Zweck nicht so günstig und wurden auch nicht ausführlich getestet.
|
||||||
|
|
||||||
|
|
||||||
[Dreamhost.com bietet ein ausreichendes Hosting-Paket mit den nötigen Features zu einem annehmbaren Preis. Wenn dein Hosting-Anbieter keinen Unix-Zugriff erlaubt, kannst du Schwierigkeiten mit der Einrichtung der Webseite haben.
|
[Dreamhost.com bietet ein ausreichendes Hosting-Paket mit den nötigen Features zu einem annehmbaren Preis. Wenn dein Hosting-Anbieter keinen Unix-Zugriff erlaubt, kannst du Schwierigkeiten mit der Einrichtung der Webseite haben.
|
||||||
|
|
||||||
1.1. APT-Pakete
|
1.1. APT-Pakete
|
||||||
- Apache: sudo apt-get install apache2
|
- Apache: sudo apt-get install apache2
|
||||||
- PHP5: sudo apt-get install php5
|
- PHP5: sudo apt-get install php5
|
||||||
|
@ -42,29 +42,31 @@ Wir planen, diese Einschränkung in einer zukünftigen Version zu beheben.
|
||||||
2. Entpacke die Friendica-Daten in das Quellverzeichnis (root) des Dokumentenbereichs deines Webservers.
|
2. Entpacke die Friendica-Daten in das Quellverzeichnis (root) des Dokumentenbereichs deines Webservers.
|
||||||
|
|
||||||
- Wenn du die Möglichkeit hierzu hast, empfehlen wir dir "git" zu nutzen, um die Daten direkt von der Quelle zu klonen, statt die gepackte .tar- oder .zip-Datei zu nutzen. Das macht die Aktualisierung wesentlich einfacher. Der Linux-Code, mit dem man die Dateien direkt in ein Verzeichnis wie "meinewebseite" kopiert, ist
|
- Wenn du die Möglichkeit hierzu hast, empfehlen wir dir "git" zu nutzen, um die Daten direkt von der Quelle zu klonen, statt die gepackte .tar- oder .zip-Datei zu nutzen. Das macht die Aktualisierung wesentlich einfacher. Der Linux-Code, mit dem man die Dateien direkt in ein Verzeichnis wie "meinewebseite" kopiert, ist
|
||||||
|
|
||||||
`git clone https://github.com/friendica/friendica.git meinewebseite`
|
`git clone https://github.com/friendica/friendica.git meinewebseite`
|
||||||
|
|
||||||
- und dann kannst du die letzten Änderungen immer mit dem folgenden Code holen
|
- und dann kannst du die letzten Änderungen immer mit dem folgenden Code holen
|
||||||
|
|
||||||
|
`cd meinewebseite`
|
||||||
`git pull`
|
`git pull`
|
||||||
|
`util/composer.phar install`
|
||||||
- Addons installieren
|
|
||||||
|
- Addons installieren
|
||||||
- zunächst solltest du **in** deinem Webseitenordner sein
|
- zunächst solltest du **in** deinem Webseitenordner sein
|
||||||
|
|
||||||
`cd meinewebseite`
|
`cd meinewebseite`
|
||||||
|
|
||||||
- dann kannst du das Addon-Verzeichnis seperat kopieren
|
- dann kannst du das Addon-Verzeichnis seperat kopieren
|
||||||
|
|
||||||
`git clone https://github.com/friendica/friendica-addons.git addon`
|
`git clone https://github.com/friendica/friendica-addons.git addon`
|
||||||
|
|
||||||
- Um das Addon-Verzeichnis aktuell zu halten, solltest du in diesem Pfad ein "git pull"-Befehl eintragen
|
- Um das Addon-Verzeichnis aktuell zu halten, solltest du in diesem Pfad ein "git pull"-Befehl eintragen
|
||||||
|
|
||||||
`cd meinewebseite/addon`
|
`cd meinewebseite/addon`
|
||||||
|
|
||||||
`git pull`
|
`git pull`
|
||||||
|
|
||||||
- Wenn du den Verzeichnispfad auf deinen Webserver kopierst, dann stelle sicher, dass du auch die .htaccess kopierst, da "Punkt"-Dateien oft versteckt sind und normalerweise nicht direkt kopiert werden.
|
- Wenn du den Verzeichnispfad auf deinen Webserver kopierst, dann stelle sicher, dass du auch die .htaccess kopierst, da "Punkt"-Dateien oft versteckt sind und normalerweise nicht direkt kopiert werden.
|
||||||
|
|
||||||
|
|
||||||
3. Erstelle eine leere Datenbank und notiere alle Zugangsdaten (Adresse der Datenbank, Nutzername, Passwort, Datenbankname).
|
3. Erstelle eine leere Datenbank und notiere alle Zugangsdaten (Adresse der Datenbank, Nutzername, Passwort, Datenbankname).
|
||||||
|
@ -79,7 +81,7 @@ Friendica benötigt die Berechtigungen um neue Felder in dieser Datenbank zu ert
|
||||||
“
|
“
|
||||||
- die Datenbank beinhaltet Daten. ... wenn nicht, importiere den Inhalt der Datei "database.sql" mit phpmyadmin oder per mysql-Kommandozeile.
|
- die Datenbank beinhaltet Daten. ... wenn nicht, importiere den Inhalt der Datei "database.sql" mit phpmyadmin oder per mysql-Kommandozeile.
|
||||||
|
|
||||||
6. Besuche deine Seite an diesem Punkt wieder und registriere deinen persönlichen Account. Alle Registrierungsprobleme sollten automatisch behebbar sein.
|
6. Besuche deine Seite an diesem Punkt wieder und registriere deinen persönlichen Account. Alle Registrierungsprobleme sollten automatisch behebbar sein.
|
||||||
Wenn du irgendwelche **kritischen** Fehler zu diesen Zeitpunkt erhalten solltest, deutet das darauf hin, dass die Datenbank nicht korrekt installiert wurde. Du kannst bei Bedarf die Datei .htconfig.php verschieben/umbenennen und die Datenbank leeren (als „Dropping“ bezeichnet), so dass du mit einem sauberen System neu starten kannst.
|
Wenn du irgendwelche **kritischen** Fehler zu diesen Zeitpunkt erhalten solltest, deutet das darauf hin, dass die Datenbank nicht korrekt installiert wurde. Du kannst bei Bedarf die Datei .htconfig.php verschieben/umbenennen und die Datenbank leeren (als „Dropping“ bezeichnet), so dass du mit einem sauberen System neu starten kannst.
|
||||||
|
|
||||||
7. Erstelle einen Cron job oder einen regelmäßigen Task, um den Poller alle 5-10 Minuten im Hintergrund ablaufen zu lassen. Beispiel:
|
7. Erstelle einen Cron job oder einen regelmäßigen Task, um den Poller alle 5-10 Minuten im Hintergrund ablaufen zu lassen. Beispiel:
|
||||||
|
@ -92,8 +94,8 @@ Wenn du einen Linux-Server nutzt, benutze den Befehl "crontab -e" und ergänze e
|
||||||
|
|
||||||
`*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php scripts/worker.php`
|
`*/10 * * * * cd /home/myname/mywebsite; /usr/bin/php scripts/worker.php`
|
||||||
|
|
||||||
Du kannst den PHP-Pfad finden, indem du den Befehl „which php“ ausführst.
|
Du kannst den PHP-Pfad finden, indem du den Befehl „which php“ ausführst.
|
||||||
Wenn du Schwierigkeiten mit diesem Schritt hast, kannst du deinen Hosting-Anbieter kontaktieren.
|
Wenn du Schwierigkeiten mit diesem Schritt hast, kannst du deinen Hosting-Anbieter kontaktieren.
|
||||||
Friendica wird nicht korrekt laufen, wenn dieser Schritt nicht erfolgreich abgeschlossen werden kann.
|
Friendica wird nicht korrekt laufen, wenn dieser Schritt nicht erfolgreich abgeschlossen werden kann.
|
||||||
|
|
||||||
Falls das Einrichten des cron nicht möglich ist, kannst Du alternativ den "frontend worker" vom Administrationsinterface aus aktivieren.
|
Falls das Einrichten des cron nicht möglich ist, kannst Du alternativ den "frontend worker" vom Administrationsinterface aus aktivieren.
|
||||||
|
|
|
@ -1,49 +0,0 @@
|
||||||
Friendica Documentation and Resources
|
|
||||||
=====================================
|
|
||||||
|
|
||||||
**Contents**
|
|
||||||
|
|
||||||
* General functions - first steps
|
|
||||||
* [Account Basics](help/Account-Basics)
|
|
||||||
* [New User Quick Start](help/Quick-Start-guide)
|
|
||||||
* [Creating posts](help/Text_editor)
|
|
||||||
* [BBCode tag reference](help/BBCode)
|
|
||||||
* [Comment, sort and delete posts](help/Text_comment)
|
|
||||||
* [Profiles](help/Profiles)
|
|
||||||
* You and other user
|
|
||||||
* [Connectors](help/Connectors)
|
|
||||||
* [Making Friends](help/Making-Friends)
|
|
||||||
* [Groups and Privacy](help/Groups-and-Privacy)
|
|
||||||
* [Tags and Mentions](help/Tags-and-Mentions)
|
|
||||||
* [Community Forums](help/Forums)
|
|
||||||
* [Chats](help/Chats)
|
|
||||||
* Further information
|
|
||||||
* [Improve Performance](help/Improve-Performance)
|
|
||||||
* [Move Account](help/Move-Account)
|
|
||||||
* [Remove Account](help/Remove-Account)
|
|
||||||
* [Bugs and Issues](help/Bugs-and-Issues)
|
|
||||||
* [Frequently asked questions (FAQ)](help/FAQ)
|
|
||||||
|
|
||||||
**Technical Documentation**
|
|
||||||
|
|
||||||
* [Install](help/Install)
|
|
||||||
* [Settings & Admin Panel](help/Settings)
|
|
||||||
* [Plugins](help/Plugins)
|
|
||||||
* [Installing Connectors (Twitter/GNU Social)](help/Installing-Connectors)
|
|
||||||
* [Install an ejabberd server (XMPP chat) with synchronized credentials](help/install-ejabberd)
|
|
||||||
* [Message Flow](help/Message-Flow)
|
|
||||||
* [Using SSL with Friendica](help/SSL)
|
|
||||||
* [Developers](help/Developers)
|
|
||||||
* [Twitter/GNU Social API Functions](help/api)
|
|
||||||
* [Translation of Friendica](help/translations)
|
|
||||||
|
|
||||||
|
|
||||||
**External Resources**
|
|
||||||
|
|
||||||
* [Main Website](https://friendi.ca)
|
|
||||||
* [Mailing List Archive](http://librelist.com/browser/friendica/)
|
|
||||||
|
|
||||||
**About**
|
|
||||||
|
|
||||||
* [Site/Version Info](friendica)
|
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
# Considerations before upgrading Friendica
|
|
||||||
|
|
||||||
* [Home](help)
|
|
||||||
|
|
||||||
## MySQL >= 5.7.4
|
|
||||||
|
|
||||||
Starting from MySQL version 5.7.4, the IGNORE keyword in ALTER TABLE statements is ignored.
|
|
||||||
This prevents automatic table deduplication if a UNIQUE index is added to a Friendica table's structure.
|
|
||||||
If a DB update fails for you while creating a UNIQUE index, make sure to manually deduplicate the table before trying the update again.
|
|
||||||
|
|
||||||
### Manual deduplication
|
|
||||||
|
|
||||||
There are two main ways of doing it, either by manually removing the duplicates or by recreating the table.
|
|
||||||
Manually removing the duplicates is usually faster if they're not too numerous.
|
|
||||||
To manually remove the duplicates, you need to know the UNIQUE index columns available in `database.sql`.
|
|
||||||
|
|
||||||
```SQL
|
|
||||||
SELECT GROUP_CONCAT(id), <index columns>, count(*) as count FROM users
|
|
||||||
GROUP BY <index columns> HAVING count >= 2;
|
|
||||||
|
|
||||||
/* delete or merge duplicate from above query */;
|
|
||||||
```
|
|
||||||
|
|
||||||
If there are too many rows to handle manually, you can create a new table with the same structure as the table with duplicates and insert the existing content with INSERT IGNORE.
|
|
||||||
To recreate the table you need to know the table structure available in `database.sql`.
|
|
||||||
|
|
||||||
```SQL
|
|
||||||
CREATE TABLE <table_name>_new <rest of the CREATE TABLE>;
|
|
||||||
INSERT IGNORE INTO <table_name>_new SELECT * FROM <table_name>;
|
|
||||||
DROP TABLE <table_name>;
|
|
||||||
RENAME TABLE <table_name>_new TO <table_name>;
|
|
||||||
```
|
|
||||||
|
|
||||||
This method is slower overall, but it is better suited for large numbers of duplicates.
|
|
7
vendor/autoload.php
vendored
7
vendor/autoload.php
vendored
|
@ -1,7 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload.php @generated by Composer
|
|
||||||
|
|
||||||
require_once __DIR__ . '/composer/autoload_real.php';
|
|
||||||
|
|
||||||
return ComposerAutoloaderInitFriendica::getLoader();
|
|
15
vendor/bin/composer-php
vendored
15
vendor/bin/composer-php
vendored
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
SRC_DIR=`pwd`
|
|
||||||
BIN_DIR=`dirname $0`
|
|
||||||
VENDOR_DIR=$BIN_DIR/"../"
|
|
||||||
DIRS=""
|
|
||||||
for vendor in $VENDOR_DIR/*; do
|
|
||||||
if [ -d "$vendor" ]; then
|
|
||||||
for package in $vendor/*; do
|
|
||||||
if [ -d "$package" ]; then
|
|
||||||
DIRS="${DIRS}:${package}"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
php -d include_path=".$DIRS" $@
|
|
11
vendor/bin/composer-php.bat
vendored
11
vendor/bin/composer-php.bat
vendored
|
@ -1,11 +0,0 @@
|
||||||
@echo off
|
|
||||||
setlocal enabledelayedexpansion
|
|
||||||
set BIN_DIR=%~dp0
|
|
||||||
set VENDOR_DIR=%BIN_DIR%\../
|
|
||||||
set DIRS=.
|
|
||||||
FOR /D %%V IN (%VENDOR_DIR%\*) DO (
|
|
||||||
FOR /D %%P IN (%%V\*) DO (
|
|
||||||
set DIRS=!DIRS!;%%~fP
|
|
||||||
)
|
|
||||||
)
|
|
||||||
php.exe -d include_path=!DIRS! %*
|
|
17
vendor/bin/generate
vendored
17
vendor/bin/generate
vendored
|
@ -1,17 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
dir=$(d=${0%[/\\]*}; cd "$d"; cd "../pear-pear.php.net/Text_Highlighter/bin" && pwd)
|
|
||||||
|
|
||||||
# See if we are running in Cygwin by checking for cygpath program
|
|
||||||
if command -v 'cygpath' >/dev/null 2>&1; then
|
|
||||||
# Cygwin paths start with /cygdrive/ which will break windows PHP,
|
|
||||||
# so we need to translate the dir path to windows format. However
|
|
||||||
# we could be using cygwin PHP which does not require this, so we
|
|
||||||
# test if the path to PHP starts with /cygdrive/ rather than /usr/bin
|
|
||||||
if [[ $(which php) == /cygdrive/* ]]; then
|
|
||||||
dir=$(cygpath -m "$dir");
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir=$(echo $dir | sed 's/ /\ /g')
|
|
||||||
"${dir}/generate" "$@"
|
|
7
vendor/bin/generate.bat
vendored
7
vendor/bin/generate.bat
vendored
|
@ -1,7 +0,0 @@
|
||||||
@echo off
|
|
||||||
pushd .
|
|
||||||
cd %~dp0
|
|
||||||
cd "../pear-pear.php.net/Text_Highlighter/bin"
|
|
||||||
set BIN_TARGET=%CD%\generate
|
|
||||||
popd
|
|
||||||
composer-php "%BIN_TARGET%" %*
|
|
17
vendor/bin/html-to-markdown
vendored
17
vendor/bin/html-to-markdown
vendored
|
@ -1,17 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
dir=$(d=${0%[/\\]*}; cd "$d"; cd "../league/html-to-markdown/bin" && pwd)
|
|
||||||
|
|
||||||
# See if we are running in Cygwin by checking for cygpath program
|
|
||||||
if command -v 'cygpath' >/dev/null 2>&1; then
|
|
||||||
# Cygwin paths start with /cygdrive/ which will break windows PHP,
|
|
||||||
# so we need to translate the dir path to windows format. However
|
|
||||||
# we could be using cygwin PHP which does not require this, so we
|
|
||||||
# test if the path to PHP starts with /cygdrive/ rather than /usr/bin
|
|
||||||
if [[ $(which php) == /cygdrive/* ]]; then
|
|
||||||
dir=$(cygpath -m "$dir");
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
dir=$(echo $dir | sed 's/ /\ /g')
|
|
||||||
"${dir}/html-to-markdown" "$@"
|
|
4
vendor/bin/html-to-markdown.bat
vendored
4
vendor/bin/html-to-markdown.bat
vendored
|
@ -1,4 +0,0 @@
|
||||||
@ECHO OFF
|
|
||||||
setlocal DISABLEDELAYEDEXPANSION
|
|
||||||
SET BIN_TARGET=%~dp0/../league/html-to-markdown/bin/html-to-markdown
|
|
||||||
php "%BIN_TARGET%" %*
|
|
7
vendor/bin/pear.bat
vendored
7
vendor/bin/pear.bat
vendored
|
@ -1,7 +0,0 @@
|
||||||
@echo off
|
|
||||||
pushd .
|
|
||||||
cd %~dp0
|
|
||||||
cd "../pear-pear.php.net/PEAR/bin"
|
|
||||||
set BIN_TARGET=%CD%\pear.bat
|
|
||||||
popd
|
|
||||||
call "%BIN_TARGET%" %*
|
|
7
vendor/bin/peardev.bat
vendored
7
vendor/bin/peardev.bat
vendored
|
@ -1,7 +0,0 @@
|
||||||
@echo off
|
|
||||||
pushd .
|
|
||||||
cd %~dp0
|
|
||||||
cd "../pear-pear.php.net/PEAR/bin"
|
|
||||||
set BIN_TARGET=%CD%\peardev.bat
|
|
||||||
popd
|
|
||||||
call "%BIN_TARGET%" %*
|
|
7
vendor/bin/pecl.bat
vendored
7
vendor/bin/pecl.bat
vendored
|
@ -1,7 +0,0 @@
|
||||||
@echo off
|
|
||||||
pushd .
|
|
||||||
cd %~dp0
|
|
||||||
cd "../pear-pear.php.net/PEAR/bin"
|
|
||||||
set BIN_TARGET=%CD%\pecl.bat
|
|
||||||
popd
|
|
||||||
call "%BIN_TARGET%" %*
|
|
445
vendor/composer/ClassLoader.php
vendored
445
vendor/composer/ClassLoader.php
vendored
|
@ -1,445 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of Composer.
|
|
||||||
*
|
|
||||||
* (c) Nils Adermann <naderman@naderman.de>
|
|
||||||
* Jordi Boggiano <j.boggiano@seld.be>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Composer\Autoload;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
|
||||||
*
|
|
||||||
* $loader = new \Composer\Autoload\ClassLoader();
|
|
||||||
*
|
|
||||||
* // register classes with namespaces
|
|
||||||
* $loader->add('Symfony\Component', __DIR__.'/component');
|
|
||||||
* $loader->add('Symfony', __DIR__.'/framework');
|
|
||||||
*
|
|
||||||
* // activate the autoloader
|
|
||||||
* $loader->register();
|
|
||||||
*
|
|
||||||
* // to enable searching the include path (eg. for PEAR packages)
|
|
||||||
* $loader->setUseIncludePath(true);
|
|
||||||
*
|
|
||||||
* In this example, if you try to use a class in the Symfony\Component
|
|
||||||
* namespace or one of its children (Symfony\Component\Console for instance),
|
|
||||||
* the autoloader will first look for the class under the component/
|
|
||||||
* directory, and it will then fallback to the framework/ directory if not
|
|
||||||
* found before giving up.
|
|
||||||
*
|
|
||||||
* This class is loosely based on the Symfony UniversalClassLoader.
|
|
||||||
*
|
|
||||||
* @author Fabien Potencier <fabien@symfony.com>
|
|
||||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
|
||||||
* @see http://www.php-fig.org/psr/psr-0/
|
|
||||||
* @see http://www.php-fig.org/psr/psr-4/
|
|
||||||
*/
|
|
||||||
class ClassLoader
|
|
||||||
{
|
|
||||||
// PSR-4
|
|
||||||
private $prefixLengthsPsr4 = array();
|
|
||||||
private $prefixDirsPsr4 = array();
|
|
||||||
private $fallbackDirsPsr4 = array();
|
|
||||||
|
|
||||||
// PSR-0
|
|
||||||
private $prefixesPsr0 = array();
|
|
||||||
private $fallbackDirsPsr0 = array();
|
|
||||||
|
|
||||||
private $useIncludePath = false;
|
|
||||||
private $classMap = array();
|
|
||||||
private $classMapAuthoritative = false;
|
|
||||||
private $missingClasses = array();
|
|
||||||
private $apcuPrefix;
|
|
||||||
|
|
||||||
public function getPrefixes()
|
|
||||||
{
|
|
||||||
if (!empty($this->prefixesPsr0)) {
|
|
||||||
return call_user_func_array('array_merge', $this->prefixesPsr0);
|
|
||||||
}
|
|
||||||
|
|
||||||
return array();
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getPrefixesPsr4()
|
|
||||||
{
|
|
||||||
return $this->prefixDirsPsr4;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFallbackDirs()
|
|
||||||
{
|
|
||||||
return $this->fallbackDirsPsr0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getFallbackDirsPsr4()
|
|
||||||
{
|
|
||||||
return $this->fallbackDirsPsr4;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function getClassMap()
|
|
||||||
{
|
|
||||||
return $this->classMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $classMap Class to filename map
|
|
||||||
*/
|
|
||||||
public function addClassMap(array $classMap)
|
|
||||||
{
|
|
||||||
if ($this->classMap) {
|
|
||||||
$this->classMap = array_merge($this->classMap, $classMap);
|
|
||||||
} else {
|
|
||||||
$this->classMap = $classMap;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a set of PSR-0 directories for a given prefix, either
|
|
||||||
* appending or prepending to the ones previously set for this prefix.
|
|
||||||
*
|
|
||||||
* @param string $prefix The prefix
|
|
||||||
* @param array|string $paths The PSR-0 root directories
|
|
||||||
* @param bool $prepend Whether to prepend the directories
|
|
||||||
*/
|
|
||||||
public function add($prefix, $paths, $prepend = false)
|
|
||||||
{
|
|
||||||
if (!$prefix) {
|
|
||||||
if ($prepend) {
|
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
|
||||||
(array) $paths,
|
|
||||||
$this->fallbackDirsPsr0
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$this->fallbackDirsPsr0 = array_merge(
|
|
||||||
$this->fallbackDirsPsr0,
|
|
||||||
(array) $paths
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$first = $prefix[0];
|
|
||||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
|
||||||
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ($prepend) {
|
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
||||||
(array) $paths,
|
|
||||||
$this->prefixesPsr0[$first][$prefix]
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
|
||||||
$this->prefixesPsr0[$first][$prefix],
|
|
||||||
(array) $paths
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a set of PSR-4 directories for a given namespace, either
|
|
||||||
* appending or prepending to the ones previously set for this namespace.
|
|
||||||
*
|
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
|
||||||
* @param array|string $paths The PSR-4 base directories
|
|
||||||
* @param bool $prepend Whether to prepend the directories
|
|
||||||
*
|
|
||||||
* @throws \InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function addPsr4($prefix, $paths, $prepend = false)
|
|
||||||
{
|
|
||||||
if (!$prefix) {
|
|
||||||
// Register directories for the root namespace.
|
|
||||||
if ($prepend) {
|
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
|
||||||
(array) $paths,
|
|
||||||
$this->fallbackDirsPsr4
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$this->fallbackDirsPsr4 = array_merge(
|
|
||||||
$this->fallbackDirsPsr4,
|
|
||||||
(array) $paths
|
|
||||||
);
|
|
||||||
}
|
|
||||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
|
||||||
// Register directories for a new namespace.
|
|
||||||
$length = strlen($prefix);
|
|
||||||
if ('\\' !== $prefix[$length - 1]) {
|
|
||||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
|
||||||
}
|
|
||||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
|
||||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
|
||||||
} elseif ($prepend) {
|
|
||||||
// Prepend directories for an already registered namespace.
|
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
||||||
(array) $paths,
|
|
||||||
$this->prefixDirsPsr4[$prefix]
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// Append directories for an already registered namespace.
|
|
||||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
|
||||||
$this->prefixDirsPsr4[$prefix],
|
|
||||||
(array) $paths
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a set of PSR-0 directories for a given prefix,
|
|
||||||
* replacing any others previously set for this prefix.
|
|
||||||
*
|
|
||||||
* @param string $prefix The prefix
|
|
||||||
* @param array|string $paths The PSR-0 base directories
|
|
||||||
*/
|
|
||||||
public function set($prefix, $paths)
|
|
||||||
{
|
|
||||||
if (!$prefix) {
|
|
||||||
$this->fallbackDirsPsr0 = (array) $paths;
|
|
||||||
} else {
|
|
||||||
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers a set of PSR-4 directories for a given namespace,
|
|
||||||
* replacing any others previously set for this namespace.
|
|
||||||
*
|
|
||||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
|
||||||
* @param array|string $paths The PSR-4 base directories
|
|
||||||
*
|
|
||||||
* @throws \InvalidArgumentException
|
|
||||||
*/
|
|
||||||
public function setPsr4($prefix, $paths)
|
|
||||||
{
|
|
||||||
if (!$prefix) {
|
|
||||||
$this->fallbackDirsPsr4 = (array) $paths;
|
|
||||||
} else {
|
|
||||||
$length = strlen($prefix);
|
|
||||||
if ('\\' !== $prefix[$length - 1]) {
|
|
||||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
|
||||||
}
|
|
||||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
|
||||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Turns on searching the include path for class files.
|
|
||||||
*
|
|
||||||
* @param bool $useIncludePath
|
|
||||||
*/
|
|
||||||
public function setUseIncludePath($useIncludePath)
|
|
||||||
{
|
|
||||||
$this->useIncludePath = $useIncludePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Can be used to check if the autoloader uses the include path to check
|
|
||||||
* for classes.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function getUseIncludePath()
|
|
||||||
{
|
|
||||||
return $this->useIncludePath;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Turns off searching the prefix and fallback directories for classes
|
|
||||||
* that have not been registered with the class map.
|
|
||||||
*
|
|
||||||
* @param bool $classMapAuthoritative
|
|
||||||
*/
|
|
||||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
|
||||||
{
|
|
||||||
$this->classMapAuthoritative = $classMapAuthoritative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Should class lookup fail if not found in the current class map?
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function isClassMapAuthoritative()
|
|
||||||
{
|
|
||||||
return $this->classMapAuthoritative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
|
||||||
*
|
|
||||||
* @param string|null $apcuPrefix
|
|
||||||
*/
|
|
||||||
public function setApcuPrefix($apcuPrefix)
|
|
||||||
{
|
|
||||||
$this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* The APCu prefix in use, or null if APCu caching is not enabled.
|
|
||||||
*
|
|
||||||
* @return string|null
|
|
||||||
*/
|
|
||||||
public function getApcuPrefix()
|
|
||||||
{
|
|
||||||
return $this->apcuPrefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Registers this instance as an autoloader.
|
|
||||||
*
|
|
||||||
* @param bool $prepend Whether to prepend the autoloader or not
|
|
||||||
*/
|
|
||||||
public function register($prepend = false)
|
|
||||||
{
|
|
||||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Unregisters this instance as an autoloader.
|
|
||||||
*/
|
|
||||||
public function unregister()
|
|
||||||
{
|
|
||||||
spl_autoload_unregister(array($this, 'loadClass'));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Loads the given class or interface.
|
|
||||||
*
|
|
||||||
* @param string $class The name of the class
|
|
||||||
* @return bool|null True if loaded, null otherwise
|
|
||||||
*/
|
|
||||||
public function loadClass($class)
|
|
||||||
{
|
|
||||||
if ($file = $this->findFile($class)) {
|
|
||||||
includeFile($file);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finds the path to the file where the class is defined.
|
|
||||||
*
|
|
||||||
* @param string $class The name of the class
|
|
||||||
*
|
|
||||||
* @return string|false The path if found, false otherwise
|
|
||||||
*/
|
|
||||||
public function findFile($class)
|
|
||||||
{
|
|
||||||
// class map lookup
|
|
||||||
if (isset($this->classMap[$class])) {
|
|
||||||
return $this->classMap[$class];
|
|
||||||
}
|
|
||||||
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (null !== $this->apcuPrefix) {
|
|
||||||
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
|
||||||
if ($hit) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$file = $this->findFileWithExtension($class, '.php');
|
|
||||||
|
|
||||||
// Search for Hack files if we are running on HHVM
|
|
||||||
if (false === $file && defined('HHVM_VERSION')) {
|
|
||||||
$file = $this->findFileWithExtension($class, '.hh');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (null !== $this->apcuPrefix) {
|
|
||||||
apcu_add($this->apcuPrefix.$class, $file);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (false === $file) {
|
|
||||||
// Remember that this class does not exist.
|
|
||||||
$this->missingClasses[$class] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function findFileWithExtension($class, $ext)
|
|
||||||
{
|
|
||||||
// PSR-4 lookup
|
|
||||||
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
|
||||||
|
|
||||||
$first = $class[0];
|
|
||||||
if (isset($this->prefixLengthsPsr4[$first])) {
|
|
||||||
$subPath = $class;
|
|
||||||
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
|
||||||
$subPath = substr($subPath, 0, $lastPos);
|
|
||||||
$search = $subPath.'\\';
|
|
||||||
if (isset($this->prefixDirsPsr4[$search])) {
|
|
||||||
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
|
||||||
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
|
||||||
if (file_exists($file = $dir . $pathEnd)) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PSR-4 fallback dirs
|
|
||||||
foreach ($this->fallbackDirsPsr4 as $dir) {
|
|
||||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PSR-0 lookup
|
|
||||||
if (false !== $pos = strrpos($class, '\\')) {
|
|
||||||
// namespaced class name
|
|
||||||
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
|
||||||
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
|
||||||
} else {
|
|
||||||
// PEAR-like class name
|
|
||||||
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($this->prefixesPsr0[$first])) {
|
|
||||||
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
|
||||||
if (0 === strpos($class, $prefix)) {
|
|
||||||
foreach ($dirs as $dir) {
|
|
||||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PSR-0 fallback dirs
|
|
||||||
foreach ($this->fallbackDirsPsr0 as $dir) {
|
|
||||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// PSR-0 include paths.
|
|
||||||
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
|
||||||
return $file;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Scope isolated include.
|
|
||||||
*
|
|
||||||
* Prevents access to $this/self from included files.
|
|
||||||
*/
|
|
||||||
function includeFile($file)
|
|
||||||
{
|
|
||||||
include $file;
|
|
||||||
}
|
|
21
vendor/composer/LICENSE
vendored
21
vendor/composer/LICENSE
vendored
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is furnished
|
|
||||||
to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
||||||
THE SOFTWARE.
|
|
||||||
|
|
477
vendor/composer/autoload_classmap.php
vendored
477
vendor/composer/autoload_classmap.php
vendored
|
@ -1,477 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_classmap.php @generated by Composer
|
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
|
||||||
$baseDir = dirname($vendorDir);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'Archive_Tar' => $vendorDir . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
|
|
||||||
'Console_Getopt' => $vendorDir . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
|
|
||||||
'Detection\\MobileDetect' => $vendorDir . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
|
|
||||||
'Friendica\\App' => $baseDir . '/src/App.php',
|
|
||||||
'Friendica\\BaseModule' => $baseDir . '/src/BaseModule.php',
|
|
||||||
'Friendica\\BaseObject' => $baseDir . '/src/BaseObject.php',
|
|
||||||
'Friendica\\Content\\ContactSelector' => $baseDir . '/src/Content/ContactSelector.php',
|
|
||||||
'Friendica\\Content\\Feature' => $baseDir . '/src/Content/Feature.php',
|
|
||||||
'Friendica\\Content\\ForumManager' => $baseDir . '/src/Content/ForumManager.php',
|
|
||||||
'Friendica\\Content\\OEmbed' => $baseDir . '/src/Content/OEmbed.php',
|
|
||||||
'Friendica\\Content\\Smilies' => $baseDir . '/src/Content/Smilies.php',
|
|
||||||
'Friendica\\Content\\Text\\Markdown' => $baseDir . '/src/Content/Text/Markdown.php',
|
|
||||||
'Friendica\\Core\\Cache' => $baseDir . '/src/Core/Cache.php',
|
|
||||||
'Friendica\\Core\\Config' => $baseDir . '/src/Core/Config.php',
|
|
||||||
'Friendica\\Core\\NotificationsManager' => $baseDir . '/src/Core/NotificationsManager.php',
|
|
||||||
'Friendica\\Core\\PConfig' => $baseDir . '/src/Core/PConfig.php',
|
|
||||||
'Friendica\\Core\\System' => $baseDir . '/src/Core/System.php',
|
|
||||||
'Friendica\\Core\\UserImport' => $baseDir . '/src/Core/UserImport.php',
|
|
||||||
'Friendica\\Core\\Worker' => $baseDir . '/src/Core/Worker.php',
|
|
||||||
'Friendica\\Database\\DBM' => $baseDir . '/src/Database/DBM.php',
|
|
||||||
'Friendica\\Database\\DBStructure' => $baseDir . '/src/Database/DBStructure.php',
|
|
||||||
'Friendica\\Model\\Contact' => $baseDir . '/src/Model/Contact.php',
|
|
||||||
'Friendica\\Model\\GContact' => $baseDir . '/src/Model/GContact.php',
|
|
||||||
'Friendica\\Model\\Group' => $baseDir . '/src/Model/Group.php',
|
|
||||||
'Friendica\\Model\\Item' => $baseDir . '/src/Model/Item.php',
|
|
||||||
'Friendica\\Model\\Photo' => $baseDir . '/src/Model/Photo.php',
|
|
||||||
'Friendica\\Model\\Profile' => $baseDir . '/src/Model/Profile.php',
|
|
||||||
'Friendica\\Model\\Term' => $baseDir . '/src/Model/Term.php',
|
|
||||||
'Friendica\\Model\\User' => $baseDir . '/src/Model/User.php',
|
|
||||||
'Friendica\\Module\\Feed' => $baseDir . '/src/Module/Feed.php',
|
|
||||||
'Friendica\\Module\\Login' => $baseDir . '/src/Module/Login.php',
|
|
||||||
'Friendica\\Module\\Logout' => $baseDir . '/src/Module/Logout.php',
|
|
||||||
'Friendica\\Module\\Oembed' => $baseDir . '/src/Module/Oembed.php',
|
|
||||||
'Friendica\\Network\\FKOAuth1' => $baseDir . '/src/Network/FKOAuth1.php',
|
|
||||||
'Friendica\\Network\\FKOAuthDataStore' => $baseDir . '/src/Network/FKOAuthDataStore.php',
|
|
||||||
'Friendica\\Network\\HTTPException' => $baseDir . '/src/Network/HTTPException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\BadGatewayException' => $baseDir . '/src/Network/HTTPException/BadGatewayException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\BadRequestException' => $baseDir . '/src/Network/HTTPException/BadRequestException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ConflictException' => $baseDir . '/src/Network/HTTPException/ConflictException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ExpectationFailedException' => $baseDir . '/src/Network/HTTPException/ExpectationFailedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ForbiddenException' => $baseDir . '/src/Network/HTTPException/ForbiddenException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\GatewayTimeoutException' => $baseDir . '/src/Network/HTTPException/GatewayTimeoutException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\GoneException' => $baseDir . '/src/Network/HTTPException/GoneException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ImATeapotException' => $baseDir . '/src/Network/HTTPException/ImATeapotException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\InternalServerErrorException' => $baseDir . '/src/Network/HTTPException/InternalServerErrorException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\LenghtRequiredException' => $baseDir . '/src/Network/HTTPException/LenghtRequiredException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\MethodNotAllowedException' => $baseDir . '/src/Network/HTTPException/MethodNotAllowedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NonAcceptableException' => $baseDir . '/src/Network/HTTPException/NonAcceptableException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NotFoundException' => $baseDir . '/src/Network/HTTPException/NotFoundException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NotImplementedException' => $baseDir . '/src/Network/HTTPException/NotImplementedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\PreconditionFailedException' => $baseDir . '/src/Network/HTTPException/PreconditionFailedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ServiceUnavaiableException' => $baseDir . '/src/Network/HTTPException/ServiceUnavaiableException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\TooManyRequestsException' => $baseDir . '/src/Network/HTTPException/TooManyRequestsException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnauthorizedException' => $baseDir . '/src/Network/HTTPException/UnauthorizedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnprocessableEntityException' => $baseDir . '/src/Network/HTTPException/UnprocessableEntityException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnsupportedMediaTypeException' => $baseDir . '/src/Network/HTTPException/UnsupportedMediaTypeException.php',
|
|
||||||
'Friendica\\Network\\Probe' => $baseDir . '/src/Network/Probe.php',
|
|
||||||
'Friendica\\Object\\Image' => $baseDir . '/src/Object/Image.php',
|
|
||||||
'Friendica\\Object\\Post' => $baseDir . '/src/Object/Post.php',
|
|
||||||
'Friendica\\Object\\Thread' => $baseDir . '/src/Object/Thread.php',
|
|
||||||
'Friendica\\Protocol\\DFRN' => $baseDir . '/src/Protocol/DFRN.php',
|
|
||||||
'Friendica\\Protocol\\Diaspora' => $baseDir . '/src/Protocol/Diaspora.php',
|
|
||||||
'Friendica\\Protocol\\Email' => $baseDir . '/src/Protocol/Email.php',
|
|
||||||
'Friendica\\Protocol\\Feed' => $baseDir . '/src/Protocol/Feed.php',
|
|
||||||
'Friendica\\Protocol\\OStatus' => $baseDir . '/src/Protocol/OStatus.php',
|
|
||||||
'Friendica\\Protocol\\PortableContact' => $baseDir . '/src/Protocol/PortableContact.php',
|
|
||||||
'Friendica\\Protocol\\Salmon' => $baseDir . '/src/Protocol/Salmon.php',
|
|
||||||
'Friendica\\Render\\ITemplateEngine' => $baseDir . '/src/Render/ITemplateEngine.php',
|
|
||||||
'Friendica\\Util\\Crypto' => $baseDir . '/src/Util/Crypto.php',
|
|
||||||
'Friendica\\Util\\Emailer' => $baseDir . '/src/Util/Emailer.php',
|
|
||||||
'Friendica\\Util\\ExAuth' => $baseDir . '/src/Util/ExAuth.php',
|
|
||||||
'Friendica\\Util\\Lock' => $baseDir . '/src/Util/Lock.php',
|
|
||||||
'Friendica\\Util\\Map' => $baseDir . '/src/Util/Map.php',
|
|
||||||
'Friendica\\Util\\ParseUrl' => $baseDir . '/src/Util/ParseUrl.php',
|
|
||||||
'Friendica\\Util\\PidFile' => $baseDir . '/src/Util/Pidfile.php',
|
|
||||||
'Friendica\\Util\\XML' => $baseDir . '/src/Util/XML.php',
|
|
||||||
'Friendica\\Worker\\CheckVersion' => $baseDir . '/src/Worker/CheckVersion.php',
|
|
||||||
'Friendica\\Worker\\CreateShadowEntry' => $baseDir . '/src/Worker/CreateShadowEntry.php',
|
|
||||||
'Friendica\\Worker\\Cron' => $baseDir . '/src/Worker/Cron.php',
|
|
||||||
'Friendica\\Worker\\CronHooks' => $baseDir . '/src/Worker/CronHooks.php',
|
|
||||||
'Friendica\\Worker\\CronJobs' => $baseDir . '/src/Worker/CronJobs.php',
|
|
||||||
'Friendica\\Worker\\DBClean' => $baseDir . '/src/Worker/DBClean.php',
|
|
||||||
'Friendica\\Worker\\DBUpdate' => $baseDir . '/src/Worker/DBUpdate.php',
|
|
||||||
'Friendica\\Worker\\Delivery' => $baseDir . '/src/Worker/Delivery.php',
|
|
||||||
'Friendica\\Worker\\Directory' => $baseDir . '/src/Worker/Directory.php',
|
|
||||||
'Friendica\\Worker\\DiscoverPoCo' => $baseDir . '/src/Worker/DiscoverPoCo.php',
|
|
||||||
'Friendica\\Worker\\Expire' => $baseDir . '/src/Worker/Expire.php',
|
|
||||||
'Friendica\\Worker\\GProbe' => $baseDir . '/src/Worker/GProbe.php',
|
|
||||||
'Friendica\\Worker\\Notifier' => $baseDir . '/src/Worker/Notifier.php',
|
|
||||||
'Friendica\\Worker\\OnePoll' => $baseDir . '/src/Worker/OnePoll.php',
|
|
||||||
'Friendica\\Worker\\ProfileUpdate' => $baseDir . '/src/Worker/ProfileUpdate.php',
|
|
||||||
'Friendica\\Worker\\PubSubPublish' => $baseDir . '/src/Worker/PubSubPublish.php',
|
|
||||||
'Friendica\\Worker\\Queue' => $baseDir . '/src/Worker/Queue.php',
|
|
||||||
'Friendica\\Worker\\RemoveContact' => $baseDir . '/src/Worker/RemoveContact.php',
|
|
||||||
'Friendica\\Worker\\SpoolPost' => $baseDir . '/src/Worker/SpoolPost.php',
|
|
||||||
'Friendica\\Worker\\TagUpdate' => $baseDir . '/src/Worker/TagUpdate.php',
|
|
||||||
'Friendica\\Worker\\ThreadUpdate' => $baseDir . '/src/Worker/ThreadUpdate.php',
|
|
||||||
'Friendica\\Worker\\UpdateGContact' => $baseDir . '/src/Worker/UpdateGContact.php',
|
|
||||||
'HTMLPurifier' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.php',
|
|
||||||
'HTMLPurifier_Arborize' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php',
|
|
||||||
'HTMLPurifier_AttrCollections' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrCollections.php',
|
|
||||||
'HTMLPurifier_AttrDef' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_AlphaValue' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Background' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_BackgroundPosition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Border' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Border.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Color' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Composite' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Composite.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_DenyElementDecorator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Filter' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Filter.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Font' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Font.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_FontFamily' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/FontFamily.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Ident' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ident.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_ImportantDecorator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Length' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Length.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_ListStyle' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ListStyle.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Multiple' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Number' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Percentage' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_TextDecoration' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_URI' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php',
|
|
||||||
'HTMLPurifier_AttrDef_Clone' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php',
|
|
||||||
'HTMLPurifier_AttrDef_Enum' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Enum.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Bool' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Bool.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Class' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Class.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Color' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Color.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_FrameTarget' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_ID' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/ID.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Length' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Length.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_LinkTypes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_MultiLength' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/MultiLength.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Nmtokens' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Pixels' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Pixels.php',
|
|
||||||
'HTMLPurifier_AttrDef_Integer' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Integer.php',
|
|
||||||
'HTMLPurifier_AttrDef_Lang' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Lang.php',
|
|
||||||
'HTMLPurifier_AttrDef_Switch' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Switch.php',
|
|
||||||
'HTMLPurifier_AttrDef_Text' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Text.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Email' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Email_SimpleCheck' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Host' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_IPv4' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv4.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_IPv6' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv6.php',
|
|
||||||
'HTMLPurifier_AttrTransform' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Background' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Background.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BdoDir' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BdoDir.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BgColor' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BgColor.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BoolToCSS' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BoolToCSS.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Border' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Border.php',
|
|
||||||
'HTMLPurifier_AttrTransform_EnumToCSS' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/EnumToCSS.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ImgRequired' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgRequired.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ImgSpace' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgSpace.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Input' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Input.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Lang' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Lang.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Length' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Length.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Name' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Name.php',
|
|
||||||
'HTMLPurifier_AttrTransform_NameSync' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/NameSync.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Nofollow' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Nofollow.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeEmbed' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeEmbed.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeObject' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeObject.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeParam' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeParam.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ScriptRequired' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ScriptRequired.php',
|
|
||||||
'HTMLPurifier_AttrTransform_TargetBlank' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/TargetBlank.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Textarea' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Textarea.php',
|
|
||||||
'HTMLPurifier_AttrTypes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTypes.php',
|
|
||||||
'HTMLPurifier_AttrValidator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrValidator.php',
|
|
||||||
'HTMLPurifier_Bootstrap' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Bootstrap.php',
|
|
||||||
'HTMLPurifier_CSSDefinition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php',
|
|
||||||
'HTMLPurifier_ChildDef' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef.php',
|
|
||||||
'HTMLPurifier_ChildDef_Chameleon' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Chameleon.php',
|
|
||||||
'HTMLPurifier_ChildDef_Custom' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Custom.php',
|
|
||||||
'HTMLPurifier_ChildDef_Empty' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Empty.php',
|
|
||||||
'HTMLPurifier_ChildDef_List' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/List.php',
|
|
||||||
'HTMLPurifier_ChildDef_Optional' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Optional.php',
|
|
||||||
'HTMLPurifier_ChildDef_Required' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Required.php',
|
|
||||||
'HTMLPurifier_ChildDef_StrictBlockquote' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/StrictBlockquote.php',
|
|
||||||
'HTMLPurifier_ChildDef_Table' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php',
|
|
||||||
'HTMLPurifier_Config' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Config.php',
|
|
||||||
'HTMLPurifier_ConfigSchema' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Builder_ConfigSchema' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Builder_Xml' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/Xml.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Exception' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Exception.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_InterchangeBuilder' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange_Directive' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange_Id' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Id.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Validator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Validator.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_ValidatorAtom' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php',
|
|
||||||
'HTMLPurifier_ContentSets' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ContentSets.php',
|
|
||||||
'HTMLPurifier_Context' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Context.php',
|
|
||||||
'HTMLPurifier_Definition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Definition.php',
|
|
||||||
'HTMLPurifier_DefinitionCache' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache.php',
|
|
||||||
'HTMLPurifier_DefinitionCacheFactory' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCacheFactory.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator_Cleanup' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator_Memory' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Null' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Null.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Serializer' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php',
|
|
||||||
'HTMLPurifier_Doctype' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Doctype.php',
|
|
||||||
'HTMLPurifier_DoctypeRegistry' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/DoctypeRegistry.php',
|
|
||||||
'HTMLPurifier_ElementDef' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ElementDef.php',
|
|
||||||
'HTMLPurifier_Encoder' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Encoder.php',
|
|
||||||
'HTMLPurifier_EntityLookup' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/EntityLookup.php',
|
|
||||||
'HTMLPurifier_EntityParser' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php',
|
|
||||||
'HTMLPurifier_ErrorCollector' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ErrorCollector.php',
|
|
||||||
'HTMLPurifier_ErrorStruct' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/ErrorStruct.php',
|
|
||||||
'HTMLPurifier_Exception' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Exception.php',
|
|
||||||
'HTMLPurifier_Filter' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter.php',
|
|
||||||
'HTMLPurifier_Filter_ExtractStyleBlocks' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php',
|
|
||||||
'HTMLPurifier_Filter_YouTube' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter/YouTube.php',
|
|
||||||
'HTMLPurifier_Generator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Generator.php',
|
|
||||||
'HTMLPurifier_HTMLDefinition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLDefinition.php',
|
|
||||||
'HTMLPurifier_HTMLModule' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php',
|
|
||||||
'HTMLPurifier_HTMLModuleManager' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModuleManager.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Bdo' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Bdo.php',
|
|
||||||
'HTMLPurifier_HTMLModule_CommonAttributes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/CommonAttributes.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Edit' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Edit.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Forms' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Forms.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Hypertext' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Hypertext.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Iframe' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Image' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Image.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Legacy' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Legacy.php',
|
|
||||||
'HTMLPurifier_HTMLModule_List' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/List.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Name' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Name.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Nofollow' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Nofollow.php',
|
|
||||||
'HTMLPurifier_HTMLModule_NonXMLCommonAttributes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Object' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Object.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Presentation' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Presentation.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Proprietary' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Proprietary.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Ruby' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Ruby.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeEmbed' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeEmbed.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeObject' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeObject.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeScripting' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeScripting.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Scripting' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Scripting.php',
|
|
||||||
'HTMLPurifier_HTMLModule_StyleAttribute' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/StyleAttribute.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tables' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tables.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Target' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Target.php',
|
|
||||||
'HTMLPurifier_HTMLModule_TargetBlank' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/TargetBlank.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Text' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Text.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Name' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Name.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Proprietary' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Strict' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Strict.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Transitional' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_XHTML' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php',
|
|
||||||
'HTMLPurifier_HTMLModule_XMLCommonAttributes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php',
|
|
||||||
'HTMLPurifier_IDAccumulator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/IDAccumulator.php',
|
|
||||||
'HTMLPurifier_Injector' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector.php',
|
|
||||||
'HTMLPurifier_Injector_AutoParagraph' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/AutoParagraph.php',
|
|
||||||
'HTMLPurifier_Injector_DisplayLinkURI' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/DisplayLinkURI.php',
|
|
||||||
'HTMLPurifier_Injector_Linkify' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php',
|
|
||||||
'HTMLPurifier_Injector_PurifierLinkify' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/PurifierLinkify.php',
|
|
||||||
'HTMLPurifier_Injector_RemoveEmpty' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveEmpty.php',
|
|
||||||
'HTMLPurifier_Injector_RemoveSpansWithoutAttributes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php',
|
|
||||||
'HTMLPurifier_Injector_SafeObject' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/SafeObject.php',
|
|
||||||
'HTMLPurifier_Language' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Language.php',
|
|
||||||
'HTMLPurifier_LanguageFactory' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/LanguageFactory.php',
|
|
||||||
'HTMLPurifier_Language_en_x_test' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Language/classes/en-x-test.php',
|
|
||||||
'HTMLPurifier_Length' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Length.php',
|
|
||||||
'HTMLPurifier_Lexer' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php',
|
|
||||||
'HTMLPurifier_Lexer_DOMLex' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php',
|
|
||||||
'HTMLPurifier_Lexer_DirectLex' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DirectLex.php',
|
|
||||||
'HTMLPurifier_Lexer_PH5P' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/PH5P.php',
|
|
||||||
'HTMLPurifier_Node' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Node.php',
|
|
||||||
'HTMLPurifier_Node_Comment' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Comment.php',
|
|
||||||
'HTMLPurifier_Node_Element' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Element.php',
|
|
||||||
'HTMLPurifier_Node_Text' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Text.php',
|
|
||||||
'HTMLPurifier_PercentEncoder' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/PercentEncoder.php',
|
|
||||||
'HTMLPurifier_Printer' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer.php',
|
|
||||||
'HTMLPurifier_Printer_CSSDefinition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/CSSDefinition.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_NullDecorator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_bool' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_default' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_HTMLDefinition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/HTMLDefinition.php',
|
|
||||||
'HTMLPurifier_PropertyList' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/PropertyList.php',
|
|
||||||
'HTMLPurifier_PropertyListIterator' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/PropertyListIterator.php',
|
|
||||||
'HTMLPurifier_Queue' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Queue.php',
|
|
||||||
'HTMLPurifier_Strategy' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy.php',
|
|
||||||
'HTMLPurifier_Strategy_Composite' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Composite.php',
|
|
||||||
'HTMLPurifier_Strategy_Core' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Core.php',
|
|
||||||
'HTMLPurifier_Strategy_FixNesting' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/FixNesting.php',
|
|
||||||
'HTMLPurifier_Strategy_MakeWellFormed' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/MakeWellFormed.php',
|
|
||||||
'HTMLPurifier_Strategy_RemoveForeignElements' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/RemoveForeignElements.php',
|
|
||||||
'HTMLPurifier_Strategy_ValidateAttributes' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/ValidateAttributes.php',
|
|
||||||
'HTMLPurifier_StringHash' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/StringHash.php',
|
|
||||||
'HTMLPurifier_StringHashParser' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/StringHashParser.php',
|
|
||||||
'HTMLPurifier_TagTransform' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform.php',
|
|
||||||
'HTMLPurifier_TagTransform_Font' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Font.php',
|
|
||||||
'HTMLPurifier_TagTransform_Simple' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Simple.php',
|
|
||||||
'HTMLPurifier_Token' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token.php',
|
|
||||||
'HTMLPurifier_TokenFactory' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/TokenFactory.php',
|
|
||||||
'HTMLPurifier_Token_Comment' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Comment.php',
|
|
||||||
'HTMLPurifier_Token_Empty' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Empty.php',
|
|
||||||
'HTMLPurifier_Token_End' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/End.php',
|
|
||||||
'HTMLPurifier_Token_Start' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Start.php',
|
|
||||||
'HTMLPurifier_Token_Tag' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php',
|
|
||||||
'HTMLPurifier_Token_Text' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Text.php',
|
|
||||||
'HTMLPurifier_URI' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URI.php',
|
|
||||||
'HTMLPurifier_URIDefinition' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIDefinition.php',
|
|
||||||
'HTMLPurifier_URIFilter' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableExternal' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternal.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableExternalResources' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternalResources.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableResources' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableResources.php',
|
|
||||||
'HTMLPurifier_URIFilter_HostBlacklist' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/HostBlacklist.php',
|
|
||||||
'HTMLPurifier_URIFilter_MakeAbsolute' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/MakeAbsolute.php',
|
|
||||||
'HTMLPurifier_URIFilter_Munge' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/Munge.php',
|
|
||||||
'HTMLPurifier_URIFilter_SafeIframe' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/SafeIframe.php',
|
|
||||||
'HTMLPurifier_URIParser' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIParser.php',
|
|
||||||
'HTMLPurifier_URIScheme' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme.php',
|
|
||||||
'HTMLPurifier_URISchemeRegistry' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URISchemeRegistry.php',
|
|
||||||
'HTMLPurifier_URIScheme_data' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/data.php',
|
|
||||||
'HTMLPurifier_URIScheme_file' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/file.php',
|
|
||||||
'HTMLPurifier_URIScheme_ftp' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/ftp.php',
|
|
||||||
'HTMLPurifier_URIScheme_http' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/http.php',
|
|
||||||
'HTMLPurifier_URIScheme_https' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/https.php',
|
|
||||||
'HTMLPurifier_URIScheme_mailto' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/mailto.php',
|
|
||||||
'HTMLPurifier_URIScheme_news' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/news.php',
|
|
||||||
'HTMLPurifier_URIScheme_nntp' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/nntp.php',
|
|
||||||
'HTMLPurifier_UnitConverter' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/UnitConverter.php',
|
|
||||||
'HTMLPurifier_VarParser' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser.php',
|
|
||||||
'HTMLPurifier_VarParserException' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParserException.php',
|
|
||||||
'HTMLPurifier_VarParser_Flexible' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Flexible.php',
|
|
||||||
'HTMLPurifier_VarParser_Native' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Native.php',
|
|
||||||
'HTMLPurifier_Zipper' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier/Zipper.php',
|
|
||||||
'League\\HTMLToMarkdown\\Configuration' => $vendorDir . '/league/html-to-markdown/src/Configuration.php',
|
|
||||||
'League\\HTMLToMarkdown\\ConfigurationAwareInterface' => $vendorDir . '/league/html-to-markdown/src/ConfigurationAwareInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\BlockquoteConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/BlockquoteConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\CodeConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/CodeConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\CommentConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/CommentConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ConverterInterface' => $vendorDir . '/league/html-to-markdown/src/Converter/ConverterInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\DefaultConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/DefaultConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\DivConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/DivConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\EmphasisConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/EmphasisConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HardBreakConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/HardBreakConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HeaderConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/HeaderConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HorizontalRuleConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ImageConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/ImageConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\LinkConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/LinkConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ListBlockConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/ListBlockConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ListItemConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/ListItemConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ParagraphConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/ParagraphConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\PreformattedConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/PreformattedConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\TextConverter' => $vendorDir . '/league/html-to-markdown/src/Converter/TextConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Element' => $vendorDir . '/league/html-to-markdown/src/Element.php',
|
|
||||||
'League\\HTMLToMarkdown\\ElementInterface' => $vendorDir . '/league/html-to-markdown/src/ElementInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Environment' => $vendorDir . '/league/html-to-markdown/src/Environment.php',
|
|
||||||
'League\\HTMLToMarkdown\\HtmlConverter' => $vendorDir . '/league/html-to-markdown/src/HtmlConverter.php',
|
|
||||||
'Michelf\\Markdown' => $vendorDir . '/michelf/php-markdown/Michelf/Markdown.php',
|
|
||||||
'Michelf\\MarkdownExtra' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownExtra.php',
|
|
||||||
'Michelf\\MarkdownInterface' => $vendorDir . '/michelf/php-markdown/Michelf/MarkdownInterface.php',
|
|
||||||
'Mobile_Detect' => $vendorDir . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
|
||||||
'OS_Guess' => $vendorDir . '/pear-pear.php.net/PEAR/OS/Guess.php',
|
|
||||||
'PEAR' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR.php',
|
|
||||||
'PEAR_Builder' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Builder.php',
|
|
||||||
'PEAR_ChannelFile' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ChannelFile.php',
|
|
||||||
'PEAR_ChannelFile_Parser' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php',
|
|
||||||
'PEAR_Command' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command.php',
|
|
||||||
'PEAR_Command_Auth' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Auth.php',
|
|
||||||
'PEAR_Command_Build' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Build.php',
|
|
||||||
'PEAR_Command_Channels' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Channels.php',
|
|
||||||
'PEAR_Command_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Common.php',
|
|
||||||
'PEAR_Command_Config' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Config.php',
|
|
||||||
'PEAR_Command_Install' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Install.php',
|
|
||||||
'PEAR_Command_Mirror' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php',
|
|
||||||
'PEAR_Command_Package' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Package.php',
|
|
||||||
'PEAR_Command_Pickle' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php',
|
|
||||||
'PEAR_Command_Registry' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Registry.php',
|
|
||||||
'PEAR_Command_Remote' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Remote.php',
|
|
||||||
'PEAR_Command_Test' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Command/Test.php',
|
|
||||||
'PEAR_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Common.php',
|
|
||||||
'PEAR_Config' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Config.php',
|
|
||||||
'PEAR_Dependency2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Dependency2.php',
|
|
||||||
'PEAR_DependencyDB' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/DependencyDB.php',
|
|
||||||
'PEAR_Downloader' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Downloader.php',
|
|
||||||
'PEAR_Downloader_Package' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php',
|
|
||||||
'PEAR_Error' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR.php',
|
|
||||||
'PEAR_ErrorStack' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/ErrorStack.php',
|
|
||||||
'PEAR_Exception' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Exception.php',
|
|
||||||
'PEAR_Frontend' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Frontend.php',
|
|
||||||
'PEAR_Frontend_CLI' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php',
|
|
||||||
'PEAR_Installer' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer.php',
|
|
||||||
'PEAR_Installer_Role' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role.php',
|
|
||||||
'PEAR_Installer_Role_Cfg' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php',
|
|
||||||
'PEAR_Installer_Role_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php',
|
|
||||||
'PEAR_Installer_Role_Data' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php',
|
|
||||||
'PEAR_Installer_Role_Doc' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php',
|
|
||||||
'PEAR_Installer_Role_Ext' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php',
|
|
||||||
'PEAR_Installer_Role_Man' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php',
|
|
||||||
'PEAR_Installer_Role_Php' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php',
|
|
||||||
'PEAR_Installer_Role_Script' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php',
|
|
||||||
'PEAR_Installer_Role_Src' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php',
|
|
||||||
'PEAR_Installer_Role_Test' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php',
|
|
||||||
'PEAR_Installer_Role_Www' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php',
|
|
||||||
'PEAR_PackageFile' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile.php',
|
|
||||||
'PEAR_PackageFile_Generator_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php',
|
|
||||||
'PEAR_PackageFile_Generator_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php',
|
|
||||||
'PEAR_PackageFile_Parser_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v1.php',
|
|
||||||
'PEAR_PackageFile_Parser_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v2.php',
|
|
||||||
'PEAR_PackageFile_v1' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php',
|
|
||||||
'PEAR_PackageFile_v2' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php',
|
|
||||||
'PEAR_PackageFile_v2_Validator' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php',
|
|
||||||
'PEAR_PackageFile_v2_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php',
|
|
||||||
'PEAR_Packager' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Packager.php',
|
|
||||||
'PEAR_Proxy' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Proxy.php',
|
|
||||||
'PEAR_REST' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST.php',
|
|
||||||
'PEAR_REST_10' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/10.php',
|
|
||||||
'PEAR_REST_11' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/11.php',
|
|
||||||
'PEAR_REST_13' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/REST/13.php',
|
|
||||||
'PEAR_Registry' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Registry.php',
|
|
||||||
'PEAR_RunTest' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/RunTest.php',
|
|
||||||
'PEAR_Task_Common' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Common.php',
|
|
||||||
'PEAR_Task_Postinstallscript' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php',
|
|
||||||
'PEAR_Task_Postinstallscript_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php',
|
|
||||||
'PEAR_Task_Replace' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Replace.php',
|
|
||||||
'PEAR_Task_Replace_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php',
|
|
||||||
'PEAR_Task_Unixeol' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php',
|
|
||||||
'PEAR_Task_Unixeol_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php',
|
|
||||||
'PEAR_Task_Windowseol' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php',
|
|
||||||
'PEAR_Task_Windowseol_rw' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php',
|
|
||||||
'PEAR_Validate' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Validate.php',
|
|
||||||
'PEAR_Validator_PECL' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php',
|
|
||||||
'PEAR_XMLParser' => $vendorDir . '/pear-pear.php.net/PEAR/PEAR/XMLParser.php',
|
|
||||||
'Structures_Graph' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph.php',
|
|
||||||
'Structures_Graph_Manipulator_AcyclicTest' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.php',
|
|
||||||
'Structures_Graph_Manipulator_TopologicalSorter' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php',
|
|
||||||
'Structures_Graph_Node' => $vendorDir . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Node.php',
|
|
||||||
'System' => $vendorDir . '/pear-pear.php.net/PEAR/System.php',
|
|
||||||
'Text_Highlighter' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter.php',
|
|
||||||
'Text_Highlighter_ABAP' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/ABAP.php',
|
|
||||||
'Text_Highlighter_AVRC' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/AVRC.php',
|
|
||||||
'Text_Highlighter_CPP' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/CPP.php',
|
|
||||||
'Text_Highlighter_CSS' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/CSS.php',
|
|
||||||
'Text_Highlighter_DIFF' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/DIFF.php',
|
|
||||||
'Text_Highlighter_DTD' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/DTD.php',
|
|
||||||
'Text_Highlighter_Generator' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Generator.php',
|
|
||||||
'Text_Highlighter_HTML' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/HTML.php',
|
|
||||||
'Text_Highlighter_JAVA' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/JAVA.php',
|
|
||||||
'Text_Highlighter_JAVASCRIPT' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php',
|
|
||||||
'Text_Highlighter_MYSQL' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/MYSQL.php',
|
|
||||||
'Text_Highlighter_PERL' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PERL.php',
|
|
||||||
'Text_Highlighter_PHP' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PHP.php',
|
|
||||||
'Text_Highlighter_PYTHON' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PYTHON.php',
|
|
||||||
'Text_Highlighter_RUBY' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/RUBY.php',
|
|
||||||
'Text_Highlighter_Renderer' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer.php',
|
|
||||||
'Text_Highlighter_Renderer_Array' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Array.php',
|
|
||||||
'Text_Highlighter_Renderer_BB' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/BB.php',
|
|
||||||
'Text_Highlighter_Renderer_Console' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Console.php',
|
|
||||||
'Text_Highlighter_Renderer_Html' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Html.php',
|
|
||||||
'Text_Highlighter_Renderer_HtmlTags' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php',
|
|
||||||
'Text_Highlighter_Renderer_JSON' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/JSON.php',
|
|
||||||
'Text_Highlighter_Renderer_XML' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/XML.php',
|
|
||||||
'Text_Highlighter_SH' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/SH.php',
|
|
||||||
'Text_Highlighter_SQL' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/SQL.php',
|
|
||||||
'Text_Highlighter_VBSCRIPT' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/VBSCRIPT.php',
|
|
||||||
'Text_Highlighter_XML' => $vendorDir . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/XML.php',
|
|
||||||
'Text_LanguageDetect' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect.php',
|
|
||||||
'Text_LanguageDetectTest' => $vendorDir . '/pear/text_languagedetect/tests/Text_LanguageDetectTest.php',
|
|
||||||
'Text_LanguageDetect_Exception' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php',
|
|
||||||
'Text_LanguageDetect_ISO639' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php',
|
|
||||||
'Text_LanguageDetect_ISO639Test' => $vendorDir . '/pear/text_languagedetect/tests/Text_LanguageDetect_ISO639Test.php',
|
|
||||||
'Text_LanguageDetect_Parser' => $vendorDir . '/pear/text_languagedetect/Text/LanguageDetect/Parser.php',
|
|
||||||
'XML_Parser' => $vendorDir . '/pear-pear.php.net/XML_Parser/XML/Parser.php',
|
|
||||||
'XML_Parser_Error' => $vendorDir . '/pear-pear.php.net/XML_Parser/XML/Parser.php',
|
|
||||||
'XML_Parser_Simple' => $vendorDir . '/pear-pear.php.net/XML_Parser/XML/Parser/Simple.php',
|
|
||||||
'XML_Util' => $vendorDir . '/pear-pear.php.net/XML_Util/XML/Util.php',
|
|
||||||
);
|
|
13
vendor/composer/autoload_files.php
vendored
13
vendor/composer/autoload_files.php
vendored
|
@ -1,13 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_files.php @generated by Composer
|
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
|
||||||
$baseDir = dirname($vendorDir);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'8170285c807a9f24f165f37b15bc9a36' => $vendorDir . '/defuse/php-encryption/Crypto.php',
|
|
||||||
'2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
|
||||||
'5255c38a0faeba867671b61dfda6d864' => $vendorDir . '/paragonie/random_compat/lib/random.php',
|
|
||||||
'f084d01b0a599f67676cffef638aa95b' => $vendorDir . '/smarty/smarty/libs/bootstrap.php',
|
|
||||||
);
|
|
12
vendor/composer/autoload_namespaces.php
vendored
12
vendor/composer/autoload_namespaces.php
vendored
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_namespaces.php @generated by Composer
|
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
|
||||||
$baseDir = dirname($vendorDir);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'Text' => array($vendorDir . '/pear/text_languagedetect'),
|
|
||||||
'HTMLPurifier' => array($vendorDir . '/ezyang/htmlpurifier/library'),
|
|
||||||
'Detection' => array($vendorDir . '/mobiledetect/mobiledetectlib/namespaced'),
|
|
||||||
);
|
|
12
vendor/composer/autoload_psr4.php
vendored
12
vendor/composer/autoload_psr4.php
vendored
|
@ -1,12 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_psr4.php @generated by Composer
|
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
|
||||||
$baseDir = dirname($vendorDir);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
'Michelf\\' => array($vendorDir . '/michelf/php-markdown/Michelf'),
|
|
||||||
'League\\HTMLToMarkdown\\' => array($vendorDir . '/league/html-to-markdown/src'),
|
|
||||||
'Friendica\\' => array($baseDir . '/src'),
|
|
||||||
);
|
|
74
vendor/composer/autoload_real.php
vendored
74
vendor/composer/autoload_real.php
vendored
|
@ -1,74 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_real.php @generated by Composer
|
|
||||||
|
|
||||||
class ComposerAutoloaderInitFriendica
|
|
||||||
{
|
|
||||||
private static $loader;
|
|
||||||
|
|
||||||
public static function loadClassLoader($class)
|
|
||||||
{
|
|
||||||
if ('Composer\Autoload\ClassLoader' === $class) {
|
|
||||||
require __DIR__ . '/ClassLoader.php';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getLoader()
|
|
||||||
{
|
|
||||||
if (null !== self::$loader) {
|
|
||||||
return self::$loader;
|
|
||||||
}
|
|
||||||
|
|
||||||
spl_autoload_register(array('ComposerAutoloaderInitFriendica', 'loadClassLoader'), true, true);
|
|
||||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
|
||||||
spl_autoload_unregister(array('ComposerAutoloaderInitFriendica', 'loadClassLoader'));
|
|
||||||
|
|
||||||
$includePaths = require __DIR__ . '/include_paths.php';
|
|
||||||
$includePaths[] = get_include_path();
|
|
||||||
set_include_path(implode(PATH_SEPARATOR, $includePaths));
|
|
||||||
|
|
||||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
|
||||||
if ($useStaticLoader) {
|
|
||||||
require_once __DIR__ . '/autoload_static.php';
|
|
||||||
|
|
||||||
call_user_func(\Composer\Autoload\ComposerStaticInitFriendica::getInitializer($loader));
|
|
||||||
} else {
|
|
||||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
|
||||||
foreach ($map as $namespace => $path) {
|
|
||||||
$loader->set($namespace, $path);
|
|
||||||
}
|
|
||||||
|
|
||||||
$map = require __DIR__ . '/autoload_psr4.php';
|
|
||||||
foreach ($map as $namespace => $path) {
|
|
||||||
$loader->setPsr4($namespace, $path);
|
|
||||||
}
|
|
||||||
|
|
||||||
$classMap = require __DIR__ . '/autoload_classmap.php';
|
|
||||||
if ($classMap) {
|
|
||||||
$loader->addClassMap($classMap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$loader->register(true);
|
|
||||||
|
|
||||||
if ($useStaticLoader) {
|
|
||||||
$includeFiles = Composer\Autoload\ComposerStaticInitFriendica::$files;
|
|
||||||
} else {
|
|
||||||
$includeFiles = require __DIR__ . '/autoload_files.php';
|
|
||||||
}
|
|
||||||
foreach ($includeFiles as $fileIdentifier => $file) {
|
|
||||||
composerRequireFriendica($fileIdentifier, $file);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $loader;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function composerRequireFriendica($fileIdentifier, $file)
|
|
||||||
{
|
|
||||||
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
|
|
||||||
require $file;
|
|
||||||
|
|
||||||
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
|
|
||||||
}
|
|
||||||
}
|
|
551
vendor/composer/autoload_static.php
vendored
551
vendor/composer/autoload_static.php
vendored
|
@ -1,551 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// autoload_static.php @generated by Composer
|
|
||||||
|
|
||||||
namespace Composer\Autoload;
|
|
||||||
|
|
||||||
class ComposerStaticInitFriendica
|
|
||||||
{
|
|
||||||
public static $files = array (
|
|
||||||
'8170285c807a9f24f165f37b15bc9a36' => __DIR__ . '/..' . '/defuse/php-encryption/Crypto.php',
|
|
||||||
'2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
|
|
||||||
'5255c38a0faeba867671b61dfda6d864' => __DIR__ . '/..' . '/paragonie/random_compat/lib/random.php',
|
|
||||||
'f084d01b0a599f67676cffef638aa95b' => __DIR__ . '/..' . '/smarty/smarty/libs/bootstrap.php',
|
|
||||||
);
|
|
||||||
|
|
||||||
public static $prefixLengthsPsr4 = array (
|
|
||||||
'M' =>
|
|
||||||
array (
|
|
||||||
'Michelf\\' => 8,
|
|
||||||
),
|
|
||||||
'L' =>
|
|
||||||
array (
|
|
||||||
'League\\HTMLToMarkdown\\' => 22,
|
|
||||||
),
|
|
||||||
'F' =>
|
|
||||||
array (
|
|
||||||
'Friendica\\' => 10,
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
public static $prefixDirsPsr4 = array (
|
|
||||||
'Michelf\\' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/michelf/php-markdown/Michelf',
|
|
||||||
),
|
|
||||||
'League\\HTMLToMarkdown\\' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/league/html-to-markdown/src',
|
|
||||||
),
|
|
||||||
'Friendica\\' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/../..' . '/src',
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
public static $prefixesPsr0 = array (
|
|
||||||
'T' =>
|
|
||||||
array (
|
|
||||||
'Text' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/pear/text_languagedetect',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'H' =>
|
|
||||||
array (
|
|
||||||
'HTMLPurifier' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/ezyang/htmlpurifier/library',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
'D' =>
|
|
||||||
array (
|
|
||||||
'Detection' =>
|
|
||||||
array (
|
|
||||||
0 => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced',
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
|
|
||||||
public static $classMap = array (
|
|
||||||
'Archive_Tar' => __DIR__ . '/..' . '/pear-pear.php.net/Archive_Tar/Archive/Tar.php',
|
|
||||||
'Console_Getopt' => __DIR__ . '/..' . '/pear-pear.php.net/Console_Getopt/Console/Getopt.php',
|
|
||||||
'Detection\\MobileDetect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/namespaced/Detection/MobileDetect.php',
|
|
||||||
'Friendica\\App' => __DIR__ . '/../..' . '/src/App.php',
|
|
||||||
'Friendica\\BaseModule' => __DIR__ . '/../..' . '/src/BaseModule.php',
|
|
||||||
'Friendica\\BaseObject' => __DIR__ . '/../..' . '/src/BaseObject.php',
|
|
||||||
'Friendica\\Content\\ContactSelector' => __DIR__ . '/../..' . '/src/Content/ContactSelector.php',
|
|
||||||
'Friendica\\Content\\Feature' => __DIR__ . '/../..' . '/src/Content/Feature.php',
|
|
||||||
'Friendica\\Content\\ForumManager' => __DIR__ . '/../..' . '/src/Content/ForumManager.php',
|
|
||||||
'Friendica\\Content\\OEmbed' => __DIR__ . '/../..' . '/src/Content/OEmbed.php',
|
|
||||||
'Friendica\\Content\\Smilies' => __DIR__ . '/../..' . '/src/Content/Smilies.php',
|
|
||||||
'Friendica\\Content\\Text\\Markdown' => __DIR__ . '/../..' . '/src/Content/Text/Markdown.php',
|
|
||||||
'Friendica\\Core\\Cache' => __DIR__ . '/../..' . '/src/Core/Cache.php',
|
|
||||||
'Friendica\\Core\\Config' => __DIR__ . '/../..' . '/src/Core/Config.php',
|
|
||||||
'Friendica\\Core\\NotificationsManager' => __DIR__ . '/../..' . '/src/Core/NotificationsManager.php',
|
|
||||||
'Friendica\\Core\\PConfig' => __DIR__ . '/../..' . '/src/Core/PConfig.php',
|
|
||||||
'Friendica\\Core\\System' => __DIR__ . '/../..' . '/src/Core/System.php',
|
|
||||||
'Friendica\\Core\\UserImport' => __DIR__ . '/../..' . '/src/Core/UserImport.php',
|
|
||||||
'Friendica\\Core\\Worker' => __DIR__ . '/../..' . '/src/Core/Worker.php',
|
|
||||||
'Friendica\\Database\\DBM' => __DIR__ . '/../..' . '/src/Database/DBM.php',
|
|
||||||
'Friendica\\Database\\DBStructure' => __DIR__ . '/../..' . '/src/Database/DBStructure.php',
|
|
||||||
'Friendica\\Model\\Contact' => __DIR__ . '/../..' . '/src/Model/Contact.php',
|
|
||||||
'Friendica\\Model\\GContact' => __DIR__ . '/../..' . '/src/Model/GContact.php',
|
|
||||||
'Friendica\\Model\\Group' => __DIR__ . '/../..' . '/src/Model/Group.php',
|
|
||||||
'Friendica\\Model\\Item' => __DIR__ . '/../..' . '/src/Model/Item.php',
|
|
||||||
'Friendica\\Model\\Photo' => __DIR__ . '/../..' . '/src/Model/Photo.php',
|
|
||||||
'Friendica\\Model\\Profile' => __DIR__ . '/../..' . '/src/Model/Profile.php',
|
|
||||||
'Friendica\\Model\\Term' => __DIR__ . '/../..' . '/src/Model/Term.php',
|
|
||||||
'Friendica\\Model\\User' => __DIR__ . '/../..' . '/src/Model/User.php',
|
|
||||||
'Friendica\\Module\\Feed' => __DIR__ . '/../..' . '/src/Module/Feed.php',
|
|
||||||
'Friendica\\Module\\Login' => __DIR__ . '/../..' . '/src/Module/Login.php',
|
|
||||||
'Friendica\\Module\\Logout' => __DIR__ . '/../..' . '/src/Module/Logout.php',
|
|
||||||
'Friendica\\Module\\Oembed' => __DIR__ . '/../..' . '/src/Module/Oembed.php',
|
|
||||||
'Friendica\\Network\\FKOAuth1' => __DIR__ . '/../..' . '/src/Network/FKOAuth1.php',
|
|
||||||
'Friendica\\Network\\FKOAuthDataStore' => __DIR__ . '/../..' . '/src/Network/FKOAuthDataStore.php',
|
|
||||||
'Friendica\\Network\\HTTPException' => __DIR__ . '/../..' . '/src/Network/HTTPException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\BadGatewayException' => __DIR__ . '/../..' . '/src/Network/HTTPException/BadGatewayException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\BadRequestException' => __DIR__ . '/../..' . '/src/Network/HTTPException/BadRequestException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ConflictException' => __DIR__ . '/../..' . '/src/Network/HTTPException/ConflictException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ExpectationFailedException' => __DIR__ . '/../..' . '/src/Network/HTTPException/ExpectationFailedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ForbiddenException' => __DIR__ . '/../..' . '/src/Network/HTTPException/ForbiddenException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\GatewayTimeoutException' => __DIR__ . '/../..' . '/src/Network/HTTPException/GatewayTimeoutException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\GoneException' => __DIR__ . '/../..' . '/src/Network/HTTPException/GoneException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ImATeapotException' => __DIR__ . '/../..' . '/src/Network/HTTPException/ImATeapotException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\InternalServerErrorException' => __DIR__ . '/../..' . '/src/Network/HTTPException/InternalServerErrorException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\LenghtRequiredException' => __DIR__ . '/../..' . '/src/Network/HTTPException/LenghtRequiredException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\MethodNotAllowedException' => __DIR__ . '/../..' . '/src/Network/HTTPException/MethodNotAllowedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NonAcceptableException' => __DIR__ . '/../..' . '/src/Network/HTTPException/NonAcceptableException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NotFoundException' => __DIR__ . '/../..' . '/src/Network/HTTPException/NotFoundException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\NotImplementedException' => __DIR__ . '/../..' . '/src/Network/HTTPException/NotImplementedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\PreconditionFailedException' => __DIR__ . '/../..' . '/src/Network/HTTPException/PreconditionFailedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\ServiceUnavaiableException' => __DIR__ . '/../..' . '/src/Network/HTTPException/ServiceUnavaiableException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\TooManyRequestsException' => __DIR__ . '/../..' . '/src/Network/HTTPException/TooManyRequestsException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnauthorizedException' => __DIR__ . '/../..' . '/src/Network/HTTPException/UnauthorizedException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnprocessableEntityException' => __DIR__ . '/../..' . '/src/Network/HTTPException/UnprocessableEntityException.php',
|
|
||||||
'Friendica\\Network\\HTTPException\\UnsupportedMediaTypeException' => __DIR__ . '/../..' . '/src/Network/HTTPException/UnsupportedMediaTypeException.php',
|
|
||||||
'Friendica\\Network\\Probe' => __DIR__ . '/../..' . '/src/Network/Probe.php',
|
|
||||||
'Friendica\\Object\\Image' => __DIR__ . '/../..' . '/src/Object/Image.php',
|
|
||||||
'Friendica\\Object\\Post' => __DIR__ . '/../..' . '/src/Object/Post.php',
|
|
||||||
'Friendica\\Object\\Thread' => __DIR__ . '/../..' . '/src/Object/Thread.php',
|
|
||||||
'Friendica\\Protocol\\DFRN' => __DIR__ . '/../..' . '/src/Protocol/DFRN.php',
|
|
||||||
'Friendica\\Protocol\\Diaspora' => __DIR__ . '/../..' . '/src/Protocol/Diaspora.php',
|
|
||||||
'Friendica\\Protocol\\Email' => __DIR__ . '/../..' . '/src/Protocol/Email.php',
|
|
||||||
'Friendica\\Protocol\\Feed' => __DIR__ . '/../..' . '/src/Protocol/Feed.php',
|
|
||||||
'Friendica\\Protocol\\OStatus' => __DIR__ . '/../..' . '/src/Protocol/OStatus.php',
|
|
||||||
'Friendica\\Protocol\\PortableContact' => __DIR__ . '/../..' . '/src/Protocol/PortableContact.php',
|
|
||||||
'Friendica\\Protocol\\Salmon' => __DIR__ . '/../..' . '/src/Protocol/Salmon.php',
|
|
||||||
'Friendica\\Render\\ITemplateEngine' => __DIR__ . '/../..' . '/src/Render/ITemplateEngine.php',
|
|
||||||
'Friendica\\Util\\Crypto' => __DIR__ . '/../..' . '/src/Util/Crypto.php',
|
|
||||||
'Friendica\\Util\\Emailer' => __DIR__ . '/../..' . '/src/Util/Emailer.php',
|
|
||||||
'Friendica\\Util\\ExAuth' => __DIR__ . '/../..' . '/src/Util/ExAuth.php',
|
|
||||||
'Friendica\\Util\\Lock' => __DIR__ . '/../..' . '/src/Util/Lock.php',
|
|
||||||
'Friendica\\Util\\Map' => __DIR__ . '/../..' . '/src/Util/Map.php',
|
|
||||||
'Friendica\\Util\\ParseUrl' => __DIR__ . '/../..' . '/src/Util/ParseUrl.php',
|
|
||||||
'Friendica\\Util\\PidFile' => __DIR__ . '/../..' . '/src/Util/Pidfile.php',
|
|
||||||
'Friendica\\Util\\XML' => __DIR__ . '/../..' . '/src/Util/XML.php',
|
|
||||||
'Friendica\\Worker\\CheckVersion' => __DIR__ . '/../..' . '/src/Worker/CheckVersion.php',
|
|
||||||
'Friendica\\Worker\\CreateShadowEntry' => __DIR__ . '/../..' . '/src/Worker/CreateShadowEntry.php',
|
|
||||||
'Friendica\\Worker\\Cron' => __DIR__ . '/../..' . '/src/Worker/Cron.php',
|
|
||||||
'Friendica\\Worker\\CronHooks' => __DIR__ . '/../..' . '/src/Worker/CronHooks.php',
|
|
||||||
'Friendica\\Worker\\CronJobs' => __DIR__ . '/../..' . '/src/Worker/CronJobs.php',
|
|
||||||
'Friendica\\Worker\\DBClean' => __DIR__ . '/../..' . '/src/Worker/DBClean.php',
|
|
||||||
'Friendica\\Worker\\DBUpdate' => __DIR__ . '/../..' . '/src/Worker/DBUpdate.php',
|
|
||||||
'Friendica\\Worker\\Delivery' => __DIR__ . '/../..' . '/src/Worker/Delivery.php',
|
|
||||||
'Friendica\\Worker\\Directory' => __DIR__ . '/../..' . '/src/Worker/Directory.php',
|
|
||||||
'Friendica\\Worker\\DiscoverPoCo' => __DIR__ . '/../..' . '/src/Worker/DiscoverPoCo.php',
|
|
||||||
'Friendica\\Worker\\Expire' => __DIR__ . '/../..' . '/src/Worker/Expire.php',
|
|
||||||
'Friendica\\Worker\\GProbe' => __DIR__ . '/../..' . '/src/Worker/GProbe.php',
|
|
||||||
'Friendica\\Worker\\Notifier' => __DIR__ . '/../..' . '/src/Worker/Notifier.php',
|
|
||||||
'Friendica\\Worker\\OnePoll' => __DIR__ . '/../..' . '/src/Worker/OnePoll.php',
|
|
||||||
'Friendica\\Worker\\ProfileUpdate' => __DIR__ . '/../..' . '/src/Worker/ProfileUpdate.php',
|
|
||||||
'Friendica\\Worker\\PubSubPublish' => __DIR__ . '/../..' . '/src/Worker/PubSubPublish.php',
|
|
||||||
'Friendica\\Worker\\Queue' => __DIR__ . '/../..' . '/src/Worker/Queue.php',
|
|
||||||
'Friendica\\Worker\\RemoveContact' => __DIR__ . '/../..' . '/src/Worker/RemoveContact.php',
|
|
||||||
'Friendica\\Worker\\SpoolPost' => __DIR__ . '/../..' . '/src/Worker/SpoolPost.php',
|
|
||||||
'Friendica\\Worker\\TagUpdate' => __DIR__ . '/../..' . '/src/Worker/TagUpdate.php',
|
|
||||||
'Friendica\\Worker\\ThreadUpdate' => __DIR__ . '/../..' . '/src/Worker/ThreadUpdate.php',
|
|
||||||
'Friendica\\Worker\\UpdateGContact' => __DIR__ . '/../..' . '/src/Worker/UpdateGContact.php',
|
|
||||||
'HTMLPurifier' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.php',
|
|
||||||
'HTMLPurifier_Arborize' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Arborize.php',
|
|
||||||
'HTMLPurifier_AttrCollections' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrCollections.php',
|
|
||||||
'HTMLPurifier_AttrDef' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_AlphaValue' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/AlphaValue.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Background' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_BackgroundPosition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Border' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Border.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Color' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Color.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Composite' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Composite.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_DenyElementDecorator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Filter' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Filter.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Font' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Font.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_FontFamily' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/FontFamily.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Ident' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Ident.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_ImportantDecorator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Length' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Length.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_ListStyle' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/ListStyle.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Multiple' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Multiple.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Number' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Number.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_Percentage' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Percentage.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_TextDecoration' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/TextDecoration.php',
|
|
||||||
'HTMLPurifier_AttrDef_CSS_URI' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/URI.php',
|
|
||||||
'HTMLPurifier_AttrDef_Clone' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Clone.php',
|
|
||||||
'HTMLPurifier_AttrDef_Enum' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Enum.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Bool' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Bool.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Class' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Class.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Color' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Color.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_FrameTarget' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/FrameTarget.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_ID' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/ID.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Length' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Length.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_LinkTypes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/LinkTypes.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_MultiLength' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/MultiLength.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Nmtokens' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Nmtokens.php',
|
|
||||||
'HTMLPurifier_AttrDef_HTML_Pixels' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/HTML/Pixels.php',
|
|
||||||
'HTMLPurifier_AttrDef_Integer' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Integer.php',
|
|
||||||
'HTMLPurifier_AttrDef_Lang' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Lang.php',
|
|
||||||
'HTMLPurifier_AttrDef_Switch' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Switch.php',
|
|
||||||
'HTMLPurifier_AttrDef_Text' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/Text.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Email' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Email_SimpleCheck' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_Host' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/Host.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_IPv4' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv4.php',
|
|
||||||
'HTMLPurifier_AttrDef_URI_IPv6' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/URI/IPv6.php',
|
|
||||||
'HTMLPurifier_AttrTransform' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Background' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Background.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BdoDir' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BdoDir.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BgColor' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BgColor.php',
|
|
||||||
'HTMLPurifier_AttrTransform_BoolToCSS' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/BoolToCSS.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Border' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Border.php',
|
|
||||||
'HTMLPurifier_AttrTransform_EnumToCSS' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/EnumToCSS.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ImgRequired' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgRequired.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ImgSpace' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ImgSpace.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Input' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Input.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Lang' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Lang.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Length' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Length.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Name' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Name.php',
|
|
||||||
'HTMLPurifier_AttrTransform_NameSync' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/NameSync.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Nofollow' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Nofollow.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeEmbed' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeEmbed.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeObject' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeObject.php',
|
|
||||||
'HTMLPurifier_AttrTransform_SafeParam' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/SafeParam.php',
|
|
||||||
'HTMLPurifier_AttrTransform_ScriptRequired' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/ScriptRequired.php',
|
|
||||||
'HTMLPurifier_AttrTransform_TargetBlank' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/TargetBlank.php',
|
|
||||||
'HTMLPurifier_AttrTransform_Textarea' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTransform/Textarea.php',
|
|
||||||
'HTMLPurifier_AttrTypes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrTypes.php',
|
|
||||||
'HTMLPurifier_AttrValidator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/AttrValidator.php',
|
|
||||||
'HTMLPurifier_Bootstrap' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Bootstrap.php',
|
|
||||||
'HTMLPurifier_CSSDefinition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php',
|
|
||||||
'HTMLPurifier_ChildDef' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef.php',
|
|
||||||
'HTMLPurifier_ChildDef_Chameleon' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Chameleon.php',
|
|
||||||
'HTMLPurifier_ChildDef_Custom' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Custom.php',
|
|
||||||
'HTMLPurifier_ChildDef_Empty' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Empty.php',
|
|
||||||
'HTMLPurifier_ChildDef_List' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/List.php',
|
|
||||||
'HTMLPurifier_ChildDef_Optional' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Optional.php',
|
|
||||||
'HTMLPurifier_ChildDef_Required' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Required.php',
|
|
||||||
'HTMLPurifier_ChildDef_StrictBlockquote' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/StrictBlockquote.php',
|
|
||||||
'HTMLPurifier_ChildDef_Table' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php',
|
|
||||||
'HTMLPurifier_Config' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Config.php',
|
|
||||||
'HTMLPurifier_ConfigSchema' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Builder_ConfigSchema' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/ConfigSchema.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Builder_Xml' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Builder/Xml.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Exception' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Exception.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_InterchangeBuilder' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/InterchangeBuilder.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange_Directive' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Directive.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Interchange_Id' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Interchange/Id.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_Validator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/Validator.php',
|
|
||||||
'HTMLPurifier_ConfigSchema_ValidatorAtom' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ConfigSchema/ValidatorAtom.php',
|
|
||||||
'HTMLPurifier_ContentSets' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ContentSets.php',
|
|
||||||
'HTMLPurifier_Context' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Context.php',
|
|
||||||
'HTMLPurifier_Definition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Definition.php',
|
|
||||||
'HTMLPurifier_DefinitionCache' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache.php',
|
|
||||||
'HTMLPurifier_DefinitionCacheFactory' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCacheFactory.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator_Cleanup' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Decorator_Memory' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Decorator/Memory.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Null' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Null.php',
|
|
||||||
'HTMLPurifier_DefinitionCache_Serializer' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer.php',
|
|
||||||
'HTMLPurifier_Doctype' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Doctype.php',
|
|
||||||
'HTMLPurifier_DoctypeRegistry' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/DoctypeRegistry.php',
|
|
||||||
'HTMLPurifier_ElementDef' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ElementDef.php',
|
|
||||||
'HTMLPurifier_Encoder' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Encoder.php',
|
|
||||||
'HTMLPurifier_EntityLookup' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/EntityLookup.php',
|
|
||||||
'HTMLPurifier_EntityParser' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/EntityParser.php',
|
|
||||||
'HTMLPurifier_ErrorCollector' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ErrorCollector.php',
|
|
||||||
'HTMLPurifier_ErrorStruct' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/ErrorStruct.php',
|
|
||||||
'HTMLPurifier_Exception' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Exception.php',
|
|
||||||
'HTMLPurifier_Filter' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter.php',
|
|
||||||
'HTMLPurifier_Filter_ExtractStyleBlocks' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter/ExtractStyleBlocks.php',
|
|
||||||
'HTMLPurifier_Filter_YouTube' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Filter/YouTube.php',
|
|
||||||
'HTMLPurifier_Generator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Generator.php',
|
|
||||||
'HTMLPurifier_HTMLDefinition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLDefinition.php',
|
|
||||||
'HTMLPurifier_HTMLModule' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php',
|
|
||||||
'HTMLPurifier_HTMLModuleManager' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModuleManager.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Bdo' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Bdo.php',
|
|
||||||
'HTMLPurifier_HTMLModule_CommonAttributes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/CommonAttributes.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Edit' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Edit.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Forms' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Forms.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Hypertext' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Hypertext.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Iframe' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Iframe.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Image' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Image.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Legacy' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Legacy.php',
|
|
||||||
'HTMLPurifier_HTMLModule_List' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/List.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Name' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Name.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Nofollow' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Nofollow.php',
|
|
||||||
'HTMLPurifier_HTMLModule_NonXMLCommonAttributes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Object' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Object.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Presentation' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Presentation.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Proprietary' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Proprietary.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Ruby' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Ruby.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeEmbed' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeEmbed.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeObject' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeObject.php',
|
|
||||||
'HTMLPurifier_HTMLModule_SafeScripting' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/SafeScripting.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Scripting' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Scripting.php',
|
|
||||||
'HTMLPurifier_HTMLModule_StyleAttribute' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/StyleAttribute.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tables' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tables.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Target' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Target.php',
|
|
||||||
'HTMLPurifier_HTMLModule_TargetBlank' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/TargetBlank.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Text' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Text.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Name' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Name.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Proprietary' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Proprietary.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Strict' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Strict.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_Transitional' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/Transitional.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_XHTML' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTML.php',
|
|
||||||
'HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php',
|
|
||||||
'HTMLPurifier_HTMLModule_XMLCommonAttributes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/XMLCommonAttributes.php',
|
|
||||||
'HTMLPurifier_IDAccumulator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/IDAccumulator.php',
|
|
||||||
'HTMLPurifier_Injector' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector.php',
|
|
||||||
'HTMLPurifier_Injector_AutoParagraph' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/AutoParagraph.php',
|
|
||||||
'HTMLPurifier_Injector_DisplayLinkURI' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/DisplayLinkURI.php',
|
|
||||||
'HTMLPurifier_Injector_Linkify' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php',
|
|
||||||
'HTMLPurifier_Injector_PurifierLinkify' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/PurifierLinkify.php',
|
|
||||||
'HTMLPurifier_Injector_RemoveEmpty' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveEmpty.php',
|
|
||||||
'HTMLPurifier_Injector_RemoveSpansWithoutAttributes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php',
|
|
||||||
'HTMLPurifier_Injector_SafeObject' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Injector/SafeObject.php',
|
|
||||||
'HTMLPurifier_Language' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Language.php',
|
|
||||||
'HTMLPurifier_LanguageFactory' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/LanguageFactory.php',
|
|
||||||
'HTMLPurifier_Language_en_x_test' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Language/classes/en-x-test.php',
|
|
||||||
'HTMLPurifier_Length' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Length.php',
|
|
||||||
'HTMLPurifier_Lexer' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer.php',
|
|
||||||
'HTMLPurifier_Lexer_DOMLex' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DOMLex.php',
|
|
||||||
'HTMLPurifier_Lexer_DirectLex' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/DirectLex.php',
|
|
||||||
'HTMLPurifier_Lexer_PH5P' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Lexer/PH5P.php',
|
|
||||||
'HTMLPurifier_Node' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Node.php',
|
|
||||||
'HTMLPurifier_Node_Comment' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Comment.php',
|
|
||||||
'HTMLPurifier_Node_Element' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Element.php',
|
|
||||||
'HTMLPurifier_Node_Text' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Node/Text.php',
|
|
||||||
'HTMLPurifier_PercentEncoder' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/PercentEncoder.php',
|
|
||||||
'HTMLPurifier_Printer' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer.php',
|
|
||||||
'HTMLPurifier_Printer_CSSDefinition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/CSSDefinition.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_NullDecorator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_bool' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_ConfigForm_default' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.php',
|
|
||||||
'HTMLPurifier_Printer_HTMLDefinition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Printer/HTMLDefinition.php',
|
|
||||||
'HTMLPurifier_PropertyList' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/PropertyList.php',
|
|
||||||
'HTMLPurifier_PropertyListIterator' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/PropertyListIterator.php',
|
|
||||||
'HTMLPurifier_Queue' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Queue.php',
|
|
||||||
'HTMLPurifier_Strategy' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy.php',
|
|
||||||
'HTMLPurifier_Strategy_Composite' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Composite.php',
|
|
||||||
'HTMLPurifier_Strategy_Core' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/Core.php',
|
|
||||||
'HTMLPurifier_Strategy_FixNesting' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/FixNesting.php',
|
|
||||||
'HTMLPurifier_Strategy_MakeWellFormed' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/MakeWellFormed.php',
|
|
||||||
'HTMLPurifier_Strategy_RemoveForeignElements' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/RemoveForeignElements.php',
|
|
||||||
'HTMLPurifier_Strategy_ValidateAttributes' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Strategy/ValidateAttributes.php',
|
|
||||||
'HTMLPurifier_StringHash' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/StringHash.php',
|
|
||||||
'HTMLPurifier_StringHashParser' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/StringHashParser.php',
|
|
||||||
'HTMLPurifier_TagTransform' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform.php',
|
|
||||||
'HTMLPurifier_TagTransform_Font' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Font.php',
|
|
||||||
'HTMLPurifier_TagTransform_Simple' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/TagTransform/Simple.php',
|
|
||||||
'HTMLPurifier_Token' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token.php',
|
|
||||||
'HTMLPurifier_TokenFactory' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/TokenFactory.php',
|
|
||||||
'HTMLPurifier_Token_Comment' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Comment.php',
|
|
||||||
'HTMLPurifier_Token_Empty' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Empty.php',
|
|
||||||
'HTMLPurifier_Token_End' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/End.php',
|
|
||||||
'HTMLPurifier_Token_Start' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Start.php',
|
|
||||||
'HTMLPurifier_Token_Tag' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Tag.php',
|
|
||||||
'HTMLPurifier_Token_Text' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Token/Text.php',
|
|
||||||
'HTMLPurifier_URI' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URI.php',
|
|
||||||
'HTMLPurifier_URIDefinition' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIDefinition.php',
|
|
||||||
'HTMLPurifier_URIFilter' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableExternal' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternal.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableExternalResources' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableExternalResources.php',
|
|
||||||
'HTMLPurifier_URIFilter_DisableResources' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/DisableResources.php',
|
|
||||||
'HTMLPurifier_URIFilter_HostBlacklist' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/HostBlacklist.php',
|
|
||||||
'HTMLPurifier_URIFilter_MakeAbsolute' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/MakeAbsolute.php',
|
|
||||||
'HTMLPurifier_URIFilter_Munge' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/Munge.php',
|
|
||||||
'HTMLPurifier_URIFilter_SafeIframe' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIFilter/SafeIframe.php',
|
|
||||||
'HTMLPurifier_URIParser' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIParser.php',
|
|
||||||
'HTMLPurifier_URIScheme' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme.php',
|
|
||||||
'HTMLPurifier_URISchemeRegistry' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URISchemeRegistry.php',
|
|
||||||
'HTMLPurifier_URIScheme_data' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/data.php',
|
|
||||||
'HTMLPurifier_URIScheme_file' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/file.php',
|
|
||||||
'HTMLPurifier_URIScheme_ftp' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/ftp.php',
|
|
||||||
'HTMLPurifier_URIScheme_http' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/http.php',
|
|
||||||
'HTMLPurifier_URIScheme_https' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/https.php',
|
|
||||||
'HTMLPurifier_URIScheme_mailto' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/mailto.php',
|
|
||||||
'HTMLPurifier_URIScheme_news' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/news.php',
|
|
||||||
'HTMLPurifier_URIScheme_nntp' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/URIScheme/nntp.php',
|
|
||||||
'HTMLPurifier_UnitConverter' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/UnitConverter.php',
|
|
||||||
'HTMLPurifier_VarParser' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser.php',
|
|
||||||
'HTMLPurifier_VarParserException' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParserException.php',
|
|
||||||
'HTMLPurifier_VarParser_Flexible' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Flexible.php',
|
|
||||||
'HTMLPurifier_VarParser_Native' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/VarParser/Native.php',
|
|
||||||
'HTMLPurifier_Zipper' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier/Zipper.php',
|
|
||||||
'League\\HTMLToMarkdown\\Configuration' => __DIR__ . '/..' . '/league/html-to-markdown/src/Configuration.php',
|
|
||||||
'League\\HTMLToMarkdown\\ConfigurationAwareInterface' => __DIR__ . '/..' . '/league/html-to-markdown/src/ConfigurationAwareInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\BlockquoteConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/BlockquoteConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\CodeConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/CodeConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\CommentConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/CommentConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ConverterInterface' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/ConverterInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\DefaultConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/DefaultConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\DivConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/DivConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\EmphasisConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/EmphasisConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HardBreakConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/HardBreakConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HeaderConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/HeaderConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\HorizontalRuleConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/HorizontalRuleConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ImageConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/ImageConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\LinkConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/LinkConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ListBlockConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/ListBlockConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ListItemConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/ListItemConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\ParagraphConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/ParagraphConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\PreformattedConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/PreformattedConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Converter\\TextConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/Converter/TextConverter.php',
|
|
||||||
'League\\HTMLToMarkdown\\Element' => __DIR__ . '/..' . '/league/html-to-markdown/src/Element.php',
|
|
||||||
'League\\HTMLToMarkdown\\ElementInterface' => __DIR__ . '/..' . '/league/html-to-markdown/src/ElementInterface.php',
|
|
||||||
'League\\HTMLToMarkdown\\Environment' => __DIR__ . '/..' . '/league/html-to-markdown/src/Environment.php',
|
|
||||||
'League\\HTMLToMarkdown\\HtmlConverter' => __DIR__ . '/..' . '/league/html-to-markdown/src/HtmlConverter.php',
|
|
||||||
'Michelf\\Markdown' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/Markdown.php',
|
|
||||||
'Michelf\\MarkdownExtra' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownExtra.php',
|
|
||||||
'Michelf\\MarkdownInterface' => __DIR__ . '/..' . '/michelf/php-markdown/Michelf/MarkdownInterface.php',
|
|
||||||
'Mobile_Detect' => __DIR__ . '/..' . '/mobiledetect/mobiledetectlib/Mobile_Detect.php',
|
|
||||||
'OS_Guess' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/OS/Guess.php',
|
|
||||||
'PEAR' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR.php',
|
|
||||||
'PEAR_Builder' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Builder.php',
|
|
||||||
'PEAR_ChannelFile' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ChannelFile.php',
|
|
||||||
'PEAR_ChannelFile_Parser' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ChannelFile/Parser.php',
|
|
||||||
'PEAR_Command' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command.php',
|
|
||||||
'PEAR_Command_Auth' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Auth.php',
|
|
||||||
'PEAR_Command_Build' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Build.php',
|
|
||||||
'PEAR_Command_Channels' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Channels.php',
|
|
||||||
'PEAR_Command_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Common.php',
|
|
||||||
'PEAR_Command_Config' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Config.php',
|
|
||||||
'PEAR_Command_Install' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Install.php',
|
|
||||||
'PEAR_Command_Mirror' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Mirror.php',
|
|
||||||
'PEAR_Command_Package' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Package.php',
|
|
||||||
'PEAR_Command_Pickle' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Pickle.php',
|
|
||||||
'PEAR_Command_Registry' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Registry.php',
|
|
||||||
'PEAR_Command_Remote' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Remote.php',
|
|
||||||
'PEAR_Command_Test' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Command/Test.php',
|
|
||||||
'PEAR_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Common.php',
|
|
||||||
'PEAR_Config' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Config.php',
|
|
||||||
'PEAR_Dependency2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Dependency2.php',
|
|
||||||
'PEAR_DependencyDB' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/DependencyDB.php',
|
|
||||||
'PEAR_Downloader' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Downloader.php',
|
|
||||||
'PEAR_Downloader_Package' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Downloader/Package.php',
|
|
||||||
'PEAR_Error' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR.php',
|
|
||||||
'PEAR_ErrorStack' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/ErrorStack.php',
|
|
||||||
'PEAR_Exception' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Exception.php',
|
|
||||||
'PEAR_Frontend' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Frontend.php',
|
|
||||||
'PEAR_Frontend_CLI' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Frontend/CLI.php',
|
|
||||||
'PEAR_Installer' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer.php',
|
|
||||||
'PEAR_Installer_Role' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role.php',
|
|
||||||
'PEAR_Installer_Role_Cfg' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Cfg.php',
|
|
||||||
'PEAR_Installer_Role_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Common.php',
|
|
||||||
'PEAR_Installer_Role_Data' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Data.php',
|
|
||||||
'PEAR_Installer_Role_Doc' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Doc.php',
|
|
||||||
'PEAR_Installer_Role_Ext' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Ext.php',
|
|
||||||
'PEAR_Installer_Role_Man' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Man.php',
|
|
||||||
'PEAR_Installer_Role_Php' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Php.php',
|
|
||||||
'PEAR_Installer_Role_Script' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Script.php',
|
|
||||||
'PEAR_Installer_Role_Src' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Src.php',
|
|
||||||
'PEAR_Installer_Role_Test' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Test.php',
|
|
||||||
'PEAR_Installer_Role_Www' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Installer/Role/Www.php',
|
|
||||||
'PEAR_PackageFile' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile.php',
|
|
||||||
'PEAR_PackageFile_Generator_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v1.php',
|
|
||||||
'PEAR_PackageFile_Generator_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Generator/v2.php',
|
|
||||||
'PEAR_PackageFile_Parser_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v1.php',
|
|
||||||
'PEAR_PackageFile_Parser_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/Parser/v2.php',
|
|
||||||
'PEAR_PackageFile_v1' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v1.php',
|
|
||||||
'PEAR_PackageFile_v2' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2.php',
|
|
||||||
'PEAR_PackageFile_v2_Validator' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/Validator.php',
|
|
||||||
'PEAR_PackageFile_v2_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/PackageFile/v2/rw.php',
|
|
||||||
'PEAR_Packager' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Packager.php',
|
|
||||||
'PEAR_Proxy' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Proxy.php',
|
|
||||||
'PEAR_REST' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST.php',
|
|
||||||
'PEAR_REST_10' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/10.php',
|
|
||||||
'PEAR_REST_11' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/11.php',
|
|
||||||
'PEAR_REST_13' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/REST/13.php',
|
|
||||||
'PEAR_Registry' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Registry.php',
|
|
||||||
'PEAR_RunTest' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/RunTest.php',
|
|
||||||
'PEAR_Task_Common' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Common.php',
|
|
||||||
'PEAR_Task_Postinstallscript' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript.php',
|
|
||||||
'PEAR_Task_Postinstallscript_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Postinstallscript/rw.php',
|
|
||||||
'PEAR_Task_Replace' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Replace.php',
|
|
||||||
'PEAR_Task_Replace_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Replace/rw.php',
|
|
||||||
'PEAR_Task_Unixeol' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol.php',
|
|
||||||
'PEAR_Task_Unixeol_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Unixeol/rw.php',
|
|
||||||
'PEAR_Task_Windowseol' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol.php',
|
|
||||||
'PEAR_Task_Windowseol_rw' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Task/Windowseol/rw.php',
|
|
||||||
'PEAR_Validate' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Validate.php',
|
|
||||||
'PEAR_Validator_PECL' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/Validator/PECL.php',
|
|
||||||
'PEAR_XMLParser' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/PEAR/XMLParser.php',
|
|
||||||
'Structures_Graph' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph.php',
|
|
||||||
'Structures_Graph_Manipulator_AcyclicTest' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/AcyclicTest.php',
|
|
||||||
'Structures_Graph_Manipulator_TopologicalSorter' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Manipulator/TopologicalSorter.php',
|
|
||||||
'Structures_Graph_Node' => __DIR__ . '/..' . '/pear-pear.php.net/Structures_Graph/Structures/Graph/Node.php',
|
|
||||||
'System' => __DIR__ . '/..' . '/pear-pear.php.net/PEAR/System.php',
|
|
||||||
'Text_Highlighter' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter.php',
|
|
||||||
'Text_Highlighter_ABAP' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/ABAP.php',
|
|
||||||
'Text_Highlighter_AVRC' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/AVRC.php',
|
|
||||||
'Text_Highlighter_CPP' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/CPP.php',
|
|
||||||
'Text_Highlighter_CSS' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/CSS.php',
|
|
||||||
'Text_Highlighter_DIFF' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/DIFF.php',
|
|
||||||
'Text_Highlighter_DTD' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/DTD.php',
|
|
||||||
'Text_Highlighter_Generator' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Generator.php',
|
|
||||||
'Text_Highlighter_HTML' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/HTML.php',
|
|
||||||
'Text_Highlighter_JAVA' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/JAVA.php',
|
|
||||||
'Text_Highlighter_JAVASCRIPT' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/JAVASCRIPT.php',
|
|
||||||
'Text_Highlighter_MYSQL' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/MYSQL.php',
|
|
||||||
'Text_Highlighter_PERL' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PERL.php',
|
|
||||||
'Text_Highlighter_PHP' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PHP.php',
|
|
||||||
'Text_Highlighter_PYTHON' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/PYTHON.php',
|
|
||||||
'Text_Highlighter_RUBY' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/RUBY.php',
|
|
||||||
'Text_Highlighter_Renderer' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer.php',
|
|
||||||
'Text_Highlighter_Renderer_Array' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Array.php',
|
|
||||||
'Text_Highlighter_Renderer_BB' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/BB.php',
|
|
||||||
'Text_Highlighter_Renderer_Console' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Console.php',
|
|
||||||
'Text_Highlighter_Renderer_Html' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/Html.php',
|
|
||||||
'Text_Highlighter_Renderer_HtmlTags' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/HtmlTags.php',
|
|
||||||
'Text_Highlighter_Renderer_JSON' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/JSON.php',
|
|
||||||
'Text_Highlighter_Renderer_XML' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/Renderer/XML.php',
|
|
||||||
'Text_Highlighter_SH' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/SH.php',
|
|
||||||
'Text_Highlighter_SQL' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/SQL.php',
|
|
||||||
'Text_Highlighter_VBSCRIPT' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/VBSCRIPT.php',
|
|
||||||
'Text_Highlighter_XML' => __DIR__ . '/..' . '/pear-pear.php.net/Text_Highlighter/Text/Highlighter/XML.php',
|
|
||||||
'Text_LanguageDetect' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect.php',
|
|
||||||
'Text_LanguageDetectTest' => __DIR__ . '/..' . '/pear/text_languagedetect/tests/Text_LanguageDetectTest.php',
|
|
||||||
'Text_LanguageDetect_Exception' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Exception.php',
|
|
||||||
'Text_LanguageDetect_ISO639' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/ISO639.php',
|
|
||||||
'Text_LanguageDetect_ISO639Test' => __DIR__ . '/..' . '/pear/text_languagedetect/tests/Text_LanguageDetect_ISO639Test.php',
|
|
||||||
'Text_LanguageDetect_Parser' => __DIR__ . '/..' . '/pear/text_languagedetect/Text/LanguageDetect/Parser.php',
|
|
||||||
'XML_Parser' => __DIR__ . '/..' . '/pear-pear.php.net/XML_Parser/XML/Parser.php',
|
|
||||||
'XML_Parser_Error' => __DIR__ . '/..' . '/pear-pear.php.net/XML_Parser/XML/Parser.php',
|
|
||||||
'XML_Parser_Simple' => __DIR__ . '/..' . '/pear-pear.php.net/XML_Parser/XML/Parser/Simple.php',
|
|
||||||
'XML_Util' => __DIR__ . '/..' . '/pear-pear.php.net/XML_Util/XML/Util.php',
|
|
||||||
);
|
|
||||||
|
|
||||||
public static function getInitializer(ClassLoader $loader)
|
|
||||||
{
|
|
||||||
return \Closure::bind(function () use ($loader) {
|
|
||||||
$loader->prefixLengthsPsr4 = ComposerStaticInitFriendica::$prefixLengthsPsr4;
|
|
||||||
$loader->prefixDirsPsr4 = ComposerStaticInitFriendica::$prefixDirsPsr4;
|
|
||||||
$loader->prefixesPsr0 = ComposerStaticInitFriendica::$prefixesPsr0;
|
|
||||||
$loader->classMap = ComposerStaticInitFriendica::$classMap;
|
|
||||||
|
|
||||||
}, null, ClassLoader::class);
|
|
||||||
}
|
|
||||||
}
|
|
17
vendor/composer/include_paths.php
vendored
17
vendor/composer/include_paths.php
vendored
|
@ -1,17 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// include_paths.php @generated by Composer
|
|
||||||
|
|
||||||
$vendorDir = dirname(dirname(__FILE__));
|
|
||||||
$baseDir = dirname($vendorDir);
|
|
||||||
|
|
||||||
return array(
|
|
||||||
$vendorDir . '/pear-pear.php.net/Archive_Tar',
|
|
||||||
$vendorDir . '/pear-pear.php.net/Console_Getopt',
|
|
||||||
$vendorDir . '/pear-pear.php.net/PEAR',
|
|
||||||
$vendorDir . '/pear-pear.php.net/Structures_Graph',
|
|
||||||
$vendorDir . '/pear-pear.php.net/Text_Highlighter',
|
|
||||||
$vendorDir . '/pear-pear.php.net/XML_Parser',
|
|
||||||
$vendorDir . '/pear-pear.php.net/XML_Util',
|
|
||||||
$vendorDir . '/pear/text_languagedetect',
|
|
||||||
);
|
|
646
vendor/composer/installed.json
vendored
646
vendor/composer/installed.json
vendored
|
@ -1,646 +0,0 @@
|
||||||
[
|
|
||||||
{
|
|
||||||
"name": "defuse/php-encryption",
|
|
||||||
"version": "v1.2.1",
|
|
||||||
"version_normalized": "1.2.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/defuse/php-encryption.git",
|
|
||||||
"reference": "b87737b2eec06b13f025cabea847338fa203d1b4"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/defuse/php-encryption/zipball/b87737b2eec06b13f025cabea847338fa203d1b4",
|
|
||||||
"reference": "b87737b2eec06b13f025cabea847338fa203d1b4",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-mcrypt": "*",
|
|
||||||
"ext-openssl": "*",
|
|
||||||
"php": ">=5.4.0"
|
|
||||||
},
|
|
||||||
"time": "2015-03-14T20:27:45+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"Crypto.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Hornby",
|
|
||||||
"email": "havoc@defuse.ca"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Secure PHP Encryption Library",
|
|
||||||
"keywords": [
|
|
||||||
"aes",
|
|
||||||
"cipher",
|
|
||||||
"encryption",
|
|
||||||
"mcrypt",
|
|
||||||
"security"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "ezyang/htmlpurifier",
|
|
||||||
"version": "v4.7.0",
|
|
||||||
"version_normalized": "4.7.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/ezyang/htmlpurifier.git",
|
|
||||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/ae1828d955112356f7677c465f94f7deb7d27a40",
|
|
||||||
"reference": "ae1828d955112356f7677c465f94f7deb7d27a40",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2"
|
|
||||||
},
|
|
||||||
"time": "2015-08-05T01:03:42+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"HTMLPurifier": "library/"
|
|
||||||
},
|
|
||||||
"files": [
|
|
||||||
"library/HTMLPurifier.composer.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"LGPL"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Edward Z. Yang",
|
|
||||||
"email": "admin@htmlpurifier.org",
|
|
||||||
"homepage": "http://ezyang.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Standards compliant HTML filter written in PHP",
|
|
||||||
"homepage": "http://htmlpurifier.org/",
|
|
||||||
"keywords": [
|
|
||||||
"html"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "league/html-to-markdown",
|
|
||||||
"version": "4.4.1",
|
|
||||||
"version_normalized": "4.4.1.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/thephpleague/html-to-markdown.git",
|
|
||||||
"reference": "82ea375b5b2b1da1da222644c0565c695bf88186"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/thephpleague/html-to-markdown/zipball/82ea375b5b2b1da1da222644c0565c695bf88186",
|
|
||||||
"reference": "82ea375b5b2b1da1da222644c0565c695bf88186",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-dom": "*",
|
|
||||||
"ext-xml": "*",
|
|
||||||
"php": ">=5.3.3"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"mikehaertl/php-shellcommand": "~1.1.0",
|
|
||||||
"phpunit/phpunit": "4.*",
|
|
||||||
"scrutinizer/ocular": "~1.1"
|
|
||||||
},
|
|
||||||
"time": "2017-03-16T00:45:59+00:00",
|
|
||||||
"bin": [
|
|
||||||
"bin/html-to-markdown"
|
|
||||||
],
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "4.5-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"League\\HTMLToMarkdown\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Colin O'Dell",
|
|
||||||
"email": "colinodell@gmail.com",
|
|
||||||
"homepage": "http://www.colinodell.com",
|
|
||||||
"role": "Lead Developer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Nick Cernis",
|
|
||||||
"email": "nick@cern.is",
|
|
||||||
"homepage": "http://modernnerd.net",
|
|
||||||
"role": "Original Author"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "An HTML-to-markdown conversion helper for PHP",
|
|
||||||
"homepage": "https://github.com/thephpleague/html-to-markdown",
|
|
||||||
"keywords": [
|
|
||||||
"html",
|
|
||||||
"markdown"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "michelf/php-markdown",
|
|
||||||
"version": "1.8.0",
|
|
||||||
"version_normalized": "1.8.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/michelf/php-markdown.git",
|
|
||||||
"reference": "01ab082b355bf188d907b9929cd99b2923053495"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/michelf/php-markdown/zipball/01ab082b355bf188d907b9929cd99b2923053495",
|
|
||||||
"reference": "01ab082b355bf188d907b9929cd99b2923053495",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0"
|
|
||||||
},
|
|
||||||
"time": "2018-01-15T00:49:33+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"Michelf\\": "Michelf/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"BSD-3-Clause"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Michel Fortin",
|
|
||||||
"email": "michel.fortin@michelf.ca",
|
|
||||||
"homepage": "https://michelf.ca/",
|
|
||||||
"role": "Developer"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "John Gruber",
|
|
||||||
"homepage": "https://daringfireball.net/"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP Markdown",
|
|
||||||
"homepage": "https://michelf.ca/projects/php-markdown/",
|
|
||||||
"keywords": [
|
|
||||||
"markdown"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "mobiledetect/mobiledetectlib",
|
|
||||||
"version": "2.8.30",
|
|
||||||
"version_normalized": "2.8.30.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/serbanghita/Mobile-Detect.git",
|
|
||||||
"reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/serbanghita/Mobile-Detect/zipball/5500bbbf312fe77ef0c7223858dad84fe49ee0c3",
|
|
||||||
"reference": "5500bbbf312fe77ef0c7223858dad84fe49ee0c3",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.0.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "~4.8.35||~5.7"
|
|
||||||
},
|
|
||||||
"time": "2017-12-18T10:38:51+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
"Mobile_Detect.php"
|
|
||||||
],
|
|
||||||
"psr-0": {
|
|
||||||
"Detection": "namespaced/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Serban Ghita",
|
|
||||||
"email": "serbanghita@gmail.com",
|
|
||||||
"homepage": "http://mobiledetect.net",
|
|
||||||
"role": "Developer"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Mobile_Detect is a lightweight PHP class for detecting mobile devices. It uses the User-Agent string combined with specific HTTP headers to detect the mobile environment.",
|
|
||||||
"homepage": "https://github.com/serbanghita/Mobile-Detect",
|
|
||||||
"keywords": [
|
|
||||||
"detect mobile devices",
|
|
||||||
"mobile",
|
|
||||||
"mobile detect",
|
|
||||||
"mobile detector",
|
|
||||||
"php mobile detect"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "paragonie/random_compat",
|
|
||||||
"version": "v2.0.11",
|
|
||||||
"version_normalized": "2.0.11.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/paragonie/random_compat.git",
|
|
||||||
"reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8",
|
|
||||||
"reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2.0"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "4.*|5.*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
|
|
||||||
},
|
|
||||||
"time": "2017-09-27T21:40:39+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"lib/random.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Paragon Initiative Enterprises",
|
|
||||||
"email": "security@paragonie.com",
|
|
||||||
"homepage": "https://paragonie.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
|
|
||||||
"keywords": [
|
|
||||||
"csprng",
|
|
||||||
"pseudorandom",
|
|
||||||
"random"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/Archive_Tar",
|
|
||||||
"version": "1.4.3",
|
|
||||||
"version_normalized": "1.4.3.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/Archive_Tar-1.4.3.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/archive_tar": "== 1.4.3.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"New BSD License"
|
|
||||||
],
|
|
||||||
"description": "This class provides handling of tar files in PHP.\nIt supports creating, listing, extracting and adding to tar files.\nGzip support is available if PHP has the zlib extension built-in or\nloaded. Bz2 compression is also supported with the bz2 extension loaded."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/Console_Getopt",
|
|
||||||
"version": "1.4.1",
|
|
||||||
"version_normalized": "1.4.1.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/Console_Getopt-1.4.1.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/console_getopt": "== 1.4.1.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"BSD-2-Clause"
|
|
||||||
],
|
|
||||||
"description": "This is a PHP implementation of "getopt" supporting both\nshort and long options."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/PEAR",
|
|
||||||
"version": "1.10.5",
|
|
||||||
"version_normalized": "1.10.5.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/PEAR-1.10.5.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-pcre": "*",
|
|
||||||
"ext-xml": "*",
|
|
||||||
"pear-pear.php.net/archive_tar": ">=1.4.0.0",
|
|
||||||
"pear-pear.php.net/console_getopt": ">=1.4.1.0",
|
|
||||||
"pear-pear.php.net/structures_graph": ">=1.1.0.0",
|
|
||||||
"pear-pear.php.net/xml_util": ">=1.3.0.0",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"conflict": {
|
|
||||||
"pear-pear.php.net/pear_frontend_gtk": "<0.4.0.0",
|
|
||||||
"pear-pear.php.net/pear_frontend_web": "<=0.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/pear": "== 1.10.5.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"New BSD License"
|
|
||||||
],
|
|
||||||
"description": "The PEAR package contains:\n * the PEAR installer, for creating, distributing\n and installing packages\n * the PEAR_Exception PHP5 error handling mechanism\n * the PEAR_ErrorStack advanced error handling mechanism\n * the PEAR_Error error handling mechanism\n * the OS_Guess class for retrieving info about the OS\n where PHP is running on\n * the System class for quick handling of common operations\n with files and directories\n * the PEAR base class\n Features in a nutshell:\n * full support for channels\n * pre-download dependency validation\n * new package.xml 2.0 format allows tremendous flexibility while maintaining BC\n * support for optional dependency groups and limited support for sub-packaging\n * robust dependency support\n * full dependency validation on uninstall\n * remote install for hosts with only ftp access - no more problems with\n restricted host installation\n * full support for mirroring\n * support for bundling several packages into a single tarball\n * support for static dependencies on a url-based package\n * support for custom file roles and installation tasks"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/Structures_Graph",
|
|
||||||
"version": "1.1.1",
|
|
||||||
"version_normalized": "1.1.1.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/Structures_Graph-1.1.1.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.3.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/structures_graph": "== 1.1.1.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"LGPL-3.0+"
|
|
||||||
],
|
|
||||||
"description": "Structures_Graph is a package for creating and manipulating graph datastructures. It allows building of directed\nand undirected graphs, with data and metadata stored in nodes. The library provides functions for graph traversing\nas well as for characteristic extraction from the graph topology."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/Text_Highlighter",
|
|
||||||
"version": "0.8.0",
|
|
||||||
"version_normalized": "0.8.0.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/Text_Highlighter-0.8.0.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"pear-pear.php.net/console_getopt": ">=1.4.1.0",
|
|
||||||
"pear-pear.php.net/pear": ">=1.10.3.0",
|
|
||||||
"pear-pear.php.net/xml_parser": ">=1.3.7.0",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/text_highlighter": "== 0.8.0.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"PHP License"
|
|
||||||
],
|
|
||||||
"description": "Text_Highlighter is a package for syntax highlighting.\n\nIt provides a base class provining all the functionality,\nand a descendent classes geneator class.\n\nThe main idea is to simplify creation of subclasses\nimplementing syntax highlighting for particular language.\nSubclasses do not implement any new functioanality,\nthey just provide syntax highlighting rules.\nThe rules sources are in XML format.\n\nTo create a highlighter for a language, there is no need\nto code a new class manually. Simply describe the rules\nin XML file and use Text_Highlighter_Generator to create\na new class."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/XML_Parser",
|
|
||||||
"version": "1.3.7",
|
|
||||||
"version_normalized": "1.3.7.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/XML_Parser-1.3.7.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"pear-pear.php.net/pear": "*",
|
|
||||||
"php": ">=4.2.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/xml_parser": "== 1.3.7.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"BSD License"
|
|
||||||
],
|
|
||||||
"description": "This is an XML parser based on PHPs built-in xml extension.\nIt supports two basic modes of operation: \"func\" and \"event\". In \"func\" mode, it will look for a function named after each element (xmltag_ELEMENT for start tags and xmltag_ELEMENT_ for end tags), and in \"event\" mode it uses a set of generic callbacks.\n\nSince version 1.2.0 there's a new XML_Parser_Simple class that makes parsing of most XML documents easier, by automatically providing a stack for the elements.\nFurthermore its now possible to split the parser from the handler object, so you do not have to extend XML_Parser anymore in order to parse a document with it."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear-pear.php.net/XML_Util",
|
|
||||||
"version": "1.4.3",
|
|
||||||
"version_normalized": "1.4.3.0",
|
|
||||||
"dist": {
|
|
||||||
"type": "file",
|
|
||||||
"url": "https://pear.php.net/get/XML_Util-1.4.3.tgz",
|
|
||||||
"reference": null,
|
|
||||||
"shasum": null
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"ext-pcre": "*",
|
|
||||||
"php": ">=5.4.0.0"
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"pear-pear/xml_util": "== 1.4.3.0"
|
|
||||||
},
|
|
||||||
"type": "pear-library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"classmap": [
|
|
||||||
""
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"include-path": [
|
|
||||||
"/"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"BSD License"
|
|
||||||
],
|
|
||||||
"description": "Selection of methods that are often needed when working with XML documents. Functionality includes creating of attribute lists from arrays, creation of tags, validation of XML names and more."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "pear/text_languagedetect",
|
|
||||||
"version": "v1.0.0",
|
|
||||||
"version_normalized": "1.0.0.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/pear/Text_LanguageDetect.git",
|
|
||||||
"reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/pear/Text_LanguageDetect/zipball/bb9ff6f4970f686fac59081e916b456021fe7ba6",
|
|
||||||
"reference": "bb9ff6f4970f686fac59081e916b456021fe7ba6",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpunit/phpunit": "*"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-mbstring": "May require the mbstring PHP extension"
|
|
||||||
},
|
|
||||||
"time": "2017-03-02T16:14:08+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": {
|
|
||||||
"Text": "./"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"include-path": [
|
|
||||||
"./"
|
|
||||||
],
|
|
||||||
"license": [
|
|
||||||
"BSD-2-Clause"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicholas Pisarro",
|
|
||||||
"email": "taak@php.net",
|
|
||||||
"role": "Lead"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Identify human languages from text samples",
|
|
||||||
"homepage": "http://pear.php.net/package/Text_LanguageDetect"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "smarty/smarty",
|
|
||||||
"version": "v3.1.31",
|
|
||||||
"version_normalized": "3.1.31.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/smarty-php/smarty.git",
|
|
||||||
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/smarty-php/smarty/zipball/c7d42e4a327c402897dd587871434888fde1e7a9",
|
|
||||||
"reference": "c7d42e4a327c402897dd587871434888fde1e7a9",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2"
|
|
||||||
},
|
|
||||||
"time": "2016-12-14T21:57:25+00:00",
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "3.1.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"installation-source": "dist",
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"libs/bootstrap.php"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"LGPL-3.0"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Monte Ohrt",
|
|
||||||
"email": "monte@ohrt.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Uwe Tews",
|
|
||||||
"email": "uwe.tews@googlemail.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Rodney Rehm",
|
|
||||||
"email": "rodney.rehm@medialize.de"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Smarty - the compiling PHP template engine",
|
|
||||||
"homepage": "http://www.smarty.net",
|
|
||||||
"keywords": [
|
|
||||||
"templating"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
]
|
|
22
vendor/defuse/php-encryption/.travis.yml
vendored
22
vendor/defuse/php-encryption/.travis.yml
vendored
|
@ -1,22 +0,0 @@
|
||||||
language: php
|
|
||||||
php:
|
|
||||||
- "5.6"
|
|
||||||
- "5.5"
|
|
||||||
- "5.4"
|
|
||||||
- "5.3"
|
|
||||||
- "5.2"
|
|
||||||
# Versions below here are not installed on travis-ci
|
|
||||||
# - "5.1"
|
|
||||||
# - "5.0"
|
|
||||||
# - "4.4"
|
|
||||||
# - "4.3"
|
|
||||||
# - "4.2"
|
|
||||||
# - "4.1"
|
|
||||||
# - "4.0"
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
allow_failures:
|
|
||||||
- php: "5.3"
|
|
||||||
- php: "5.2"
|
|
||||||
|
|
||||||
script: ./test.sh
|
|
677
vendor/defuse/php-encryption/Crypto.php
vendored
677
vendor/defuse/php-encryption/Crypto.php
vendored
|
@ -1,677 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* PHP Encryption Library
|
|
||||||
* Copyright (c) 2014, Taylor Hornby
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted provided that the following conditions are met:
|
|
||||||
*
|
|
||||||
* 1. Redistributions of source code must retain the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer.
|
|
||||||
*
|
|
||||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
|
||||||
* this list of conditions and the following disclaimer in the documentation
|
|
||||||
* and/or other materials provided with the distribution.
|
|
||||||
*
|
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
||||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
|
||||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
|
|
||||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
|
||||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
|
||||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
|
||||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
|
||||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
|
||||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
* POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Web: https://defuse.ca/secure-php-encryption.htm
|
|
||||||
* GitHub: https://github.com/defuse/php-encryption
|
|
||||||
*
|
|
||||||
* WARNING: This encryption library is not a silver bullet. It only provides
|
|
||||||
* symmetric encryption given a uniformly random key. This means you MUST NOT
|
|
||||||
* use an ASCII string like a password as the key parameter, it MUST be
|
|
||||||
* a uniformly random key generated by CreateNewRandomKey(). If you want to
|
|
||||||
* encrypt something with a password, apply a password key derivation function
|
|
||||||
* like PBKDF2 or scrypt with a random salt to generate a key.
|
|
||||||
*
|
|
||||||
* WARNING: Error handling is very important, especially for crypto code!
|
|
||||||
*
|
|
||||||
* How to use this code:
|
|
||||||
*
|
|
||||||
* Generating a Key
|
|
||||||
* ----------------
|
|
||||||
* try {
|
|
||||||
* $key = self::CreateNewRandomKey();
|
|
||||||
* // WARNING: Do NOT encode $key with bin2hex() or base64_encode(),
|
|
||||||
* // they may leak the key to the attacker through side channels.
|
|
||||||
* } catch (CryptoTestFailedException $ex) {
|
|
||||||
* die('Cannot safely create a key');
|
|
||||||
* } catch (CannotPerformOperationException $ex) {
|
|
||||||
* die('Cannot safely create a key');
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Encrypting a Message
|
|
||||||
* --------------------
|
|
||||||
* $message = "ATTACK AT DAWN";
|
|
||||||
* try {
|
|
||||||
* $ciphertext = self::Encrypt($message, $key);
|
|
||||||
* } catch (CryptoTestFailedException $ex) {
|
|
||||||
* die('Cannot safely perform encryption');
|
|
||||||
* } catch (CannotPerformOperationException $ex) {
|
|
||||||
* die('Cannot safely perform decryption');
|
|
||||||
* }
|
|
||||||
*
|
|
||||||
* Decrypting a Message
|
|
||||||
* --------------------
|
|
||||||
* try {
|
|
||||||
* $decrypted = self::Decrypt($ciphertext, $key);
|
|
||||||
* } catch (InvalidCiphertextException $ex) { // VERY IMPORTANT
|
|
||||||
* // Either:
|
|
||||||
* // 1. The ciphertext was modified by the attacker,
|
|
||||||
* // 2. The key is wrong, or
|
|
||||||
* // 3. $ciphertext is not a valid ciphertext or was corrupted.
|
|
||||||
* // Assume the worst.
|
|
||||||
* die('DANGER! DANGER! The ciphertext has been tampered with!');
|
|
||||||
* } catch (CryptoTestFailedException $ex) {
|
|
||||||
* die('Cannot safely perform encryption');
|
|
||||||
* } catch (CannotPerformOperationException $ex) {
|
|
||||||
* die('Cannot safely perform decryption');
|
|
||||||
* }
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Raised by Decrypt() when one of the following conditions are met:
|
|
||||||
* - The key is wrong.
|
|
||||||
* - The ciphertext is invalid or not in the correct format.
|
|
||||||
* - The attacker modified the ciphertext.
|
|
||||||
*/
|
|
||||||
class InvalidCiphertextException extends Exception {}
|
|
||||||
/* If you see these, it means it is NOT SAFE to do encryption on your system. */
|
|
||||||
class CannotPerformOperationException extends Exception {}
|
|
||||||
class CryptoTestFailedException extends Exception {}
|
|
||||||
|
|
||||||
final class Crypto
|
|
||||||
{
|
|
||||||
// Ciphertext format: [____HMAC____][____IV____][____CIPHERTEXT____].
|
|
||||||
|
|
||||||
/* DO NOT CHANGE THESE CONSTANTS!
|
|
||||||
*
|
|
||||||
* We spent *weeks* testing this code, making sure it is as perfect and
|
|
||||||
* correct as possible. Are you going to do the same after making your
|
|
||||||
* changes? Probably not. Besides, any change to these constants will break
|
|
||||||
* the runtime tests, which are extremely important for your security.
|
|
||||||
* You're literally millions of times more likely to screw up your own
|
|
||||||
* security by changing something here than you are to fall victim to an
|
|
||||||
* 128-bit key brute-force attack. You're also breaking your own
|
|
||||||
* compatibility with future updates to this library, so you'll be left
|
|
||||||
* vulnerable if we ever find a security bug and release a fix.
|
|
||||||
*
|
|
||||||
* So, PLEASE, do not change these constants.
|
|
||||||
*/
|
|
||||||
const CIPHER = 'aes-128';
|
|
||||||
const KEY_BYTE_SIZE = 16;
|
|
||||||
const CIPHER_MODE = 'cbc';
|
|
||||||
const HASH_FUNCTION = 'sha256';
|
|
||||||
const MAC_BYTE_SIZE = 32;
|
|
||||||
const ENCRYPTION_INFO = 'DefusePHP|KeyForEncryption';
|
|
||||||
const AUTHENTICATION_INFO = 'DefusePHP|KeyForAuthentication';
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Use this to generate a random encryption key.
|
|
||||||
*/
|
|
||||||
public static function CreateNewRandomKey()
|
|
||||||
{
|
|
||||||
self::RuntimeTest();
|
|
||||||
return self::SecureRandom(self::KEY_BYTE_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Encrypts a message.
|
|
||||||
* $plaintext is the message to encrypt.
|
|
||||||
* $key is the encryption key, a value generated by CreateNewRandomKey().
|
|
||||||
* You MUST catch exceptions thrown by this function. See docs above.
|
|
||||||
*/
|
|
||||||
public static function Encrypt($plaintext, $key)
|
|
||||||
{
|
|
||||||
self::RuntimeTest();
|
|
||||||
|
|
||||||
if (self::our_strlen($key) !== self::KEY_BYTE_SIZE)
|
|
||||||
{
|
|
||||||
throw new CannotPerformOperationException("Bad key.");
|
|
||||||
}
|
|
||||||
|
|
||||||
$method = self::CIPHER.'-'.self::CIPHER_MODE;
|
|
||||||
|
|
||||||
self::EnsureFunctionExists('openssl_get_cipher_methods');
|
|
||||||
if (in_array($method, openssl_get_cipher_methods()) === FALSE) {
|
|
||||||
throw new CannotPerformOperationException("Cipher method not supported.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Generate a sub-key for encryption.
|
|
||||||
$keysize = self::KEY_BYTE_SIZE;
|
|
||||||
$ekey = self::HKDF(self::HASH_FUNCTION, $key, $keysize, self::ENCRYPTION_INFO);
|
|
||||||
|
|
||||||
// Generate a random initialization vector.
|
|
||||||
self::EnsureFunctionExists("openssl_cipher_iv_length");
|
|
||||||
$ivsize = openssl_cipher_iv_length($method);
|
|
||||||
if ($ivsize === FALSE || $ivsize <= 0) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
$iv = self::SecureRandom($ivsize);
|
|
||||||
|
|
||||||
$ciphertext = $iv . self::PlainEncrypt($plaintext, $ekey, $iv);
|
|
||||||
|
|
||||||
// Generate a sub-key for authentication and apply the HMAC.
|
|
||||||
$akey = self::HKDF(self::HASH_FUNCTION, $key, self::KEY_BYTE_SIZE, self::AUTHENTICATION_INFO);
|
|
||||||
$auth = hash_hmac(self::HASH_FUNCTION, $ciphertext, $akey, true);
|
|
||||||
$ciphertext = $auth . $ciphertext;
|
|
||||||
|
|
||||||
return $ciphertext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Decrypts a ciphertext.
|
|
||||||
* $ciphertext is the ciphertext to decrypt.
|
|
||||||
* $key is the key that the ciphertext was encrypted with.
|
|
||||||
* You MUST catch exceptions thrown by this function. See docs above.
|
|
||||||
*/
|
|
||||||
public static function Decrypt($ciphertext, $key)
|
|
||||||
{
|
|
||||||
self::RuntimeTest();
|
|
||||||
|
|
||||||
$method = self::CIPHER.'-'.self::CIPHER_MODE;
|
|
||||||
|
|
||||||
self::EnsureFunctionExists('openssl_get_cipher_methods');
|
|
||||||
if (in_array($method, openssl_get_cipher_methods()) === FALSE) {
|
|
||||||
throw new CannotPerformOperationException("Cipher method not supported.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Extract the HMAC from the front of the ciphertext.
|
|
||||||
if (self::our_strlen($ciphertext) <= self::MAC_BYTE_SIZE) {
|
|
||||||
throw new InvalidCiphertextException();
|
|
||||||
}
|
|
||||||
$hmac = self::our_substr($ciphertext, 0, self::MAC_BYTE_SIZE);
|
|
||||||
if ($hmac === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
$ciphertext = self::our_substr($ciphertext, self::MAC_BYTE_SIZE);
|
|
||||||
if ($ciphertext === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Regenerate the same authentication sub-key.
|
|
||||||
$akey = self::HKDF(self::HASH_FUNCTION, $key, self::KEY_BYTE_SIZE, self::AUTHENTICATION_INFO);
|
|
||||||
|
|
||||||
if (self::VerifyHMAC($hmac, $ciphertext, $akey))
|
|
||||||
{
|
|
||||||
// Regenerate the same encryption sub-key.
|
|
||||||
$keysize = self::KEY_BYTE_SIZE;
|
|
||||||
$ekey = self::HKDF(self::HASH_FUNCTION, $key, $keysize, self::ENCRYPTION_INFO);
|
|
||||||
|
|
||||||
// Extract the initialization vector from the ciphertext.
|
|
||||||
self::EnsureFunctionExists("openssl_cipher_iv_length");
|
|
||||||
$ivsize = openssl_cipher_iv_length($method);
|
|
||||||
if ($ivsize === FALSE || $ivsize <= 0) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
if (self::our_strlen($ciphertext) <= $ivsize) {
|
|
||||||
throw new InvalidCiphertextException();
|
|
||||||
}
|
|
||||||
$iv = self::our_substr($ciphertext, 0, $ivsize);
|
|
||||||
if ($iv === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
$ciphertext = self::our_substr($ciphertext, $ivsize);
|
|
||||||
if ($ciphertext === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
$plaintext = self::PlainDecrypt($ciphertext, $ekey, $iv);
|
|
||||||
|
|
||||||
return $plaintext;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* We throw an exception instead of returning FALSE because we want
|
|
||||||
* a script that doesn't handle this condition to CRASH, instead
|
|
||||||
* of thinking the ciphertext decrypted to the value FALSE.
|
|
||||||
*/
|
|
||||||
throw new InvalidCiphertextException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Runs tests.
|
|
||||||
* Raises CannotPerformOperationException or CryptoTestFailedException if
|
|
||||||
* one of the tests fail. If any tests fails, your system is not capable of
|
|
||||||
* performing encryption, so make sure you fail safe in that case.
|
|
||||||
*/
|
|
||||||
public static function RuntimeTest()
|
|
||||||
{
|
|
||||||
// 0: Tests haven't been run yet.
|
|
||||||
// 1: Tests have passed.
|
|
||||||
// 2: Tests are running right now.
|
|
||||||
// 3: Tests have failed.
|
|
||||||
static $test_state = 0;
|
|
||||||
|
|
||||||
if ($test_state === 1 || $test_state === 2) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$test_state = 2;
|
|
||||||
self::AESTestVector();
|
|
||||||
self::HMACTestVector();
|
|
||||||
self::HKDFTestVector();
|
|
||||||
|
|
||||||
self::TestEncryptDecrypt();
|
|
||||||
if (self::our_strlen(self::CreateNewRandomKey()) != self::KEY_BYTE_SIZE) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (self::ENCRYPTION_INFO == self::AUTHENTICATION_INFO) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
} catch (CryptoTestFailedException $ex) {
|
|
||||||
// Do this, otherwise it will stay in the "tests are running" state.
|
|
||||||
$test_state = 3;
|
|
||||||
throw $ex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Change this to '0' make the tests always re-run (for benchmarking).
|
|
||||||
$test_state = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Never call this method directly!
|
|
||||||
*/
|
|
||||||
private static function PlainEncrypt($plaintext, $key, $iv)
|
|
||||||
{
|
|
||||||
|
|
||||||
$method = self::CIPHER.'-'.self::CIPHER_MODE;
|
|
||||||
|
|
||||||
self::EnsureConstantExists("OPENSSL_RAW_DATA");
|
|
||||||
self::EnsureFunctionExists("openssl_encrypt");
|
|
||||||
$ciphertext = openssl_encrypt(
|
|
||||||
$plaintext,
|
|
||||||
$method,
|
|
||||||
$key,
|
|
||||||
OPENSSL_RAW_DATA,
|
|
||||||
$iv
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($ciphertext === false) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $ciphertext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Never call this method directly!
|
|
||||||
*/
|
|
||||||
private static function PlainDecrypt($ciphertext, $key, $iv)
|
|
||||||
{
|
|
||||||
|
|
||||||
$method = self::CIPHER.'-'.self::CIPHER_MODE;
|
|
||||||
|
|
||||||
self::EnsureConstantExists("OPENSSL_RAW_DATA");
|
|
||||||
self::EnsureFunctionExists("openssl_encrypt");
|
|
||||||
$plaintext = openssl_decrypt(
|
|
||||||
$ciphertext,
|
|
||||||
$method,
|
|
||||||
$key,
|
|
||||||
OPENSSL_RAW_DATA,
|
|
||||||
$iv
|
|
||||||
);
|
|
||||||
if ($plaintext === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
return $plaintext;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Returns a random binary string of length $octets bytes.
|
|
||||||
*/
|
|
||||||
private static function SecureRandom($octets)
|
|
||||||
{
|
|
||||||
self::EnsureFunctionExists("mcrypt_create_iv");
|
|
||||||
$random = mcrypt_create_iv($octets, MCRYPT_DEV_URANDOM);
|
|
||||||
if ($random === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
} else {
|
|
||||||
return $random;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Use HKDF to derive multiple keys from one.
|
|
||||||
* http://tools.ietf.org/html/rfc5869
|
|
||||||
*/
|
|
||||||
private static function HKDF($hash, $ikm, $length, $info = '', $salt = NULL)
|
|
||||||
{
|
|
||||||
// Find the correct digest length as quickly as we can.
|
|
||||||
$digest_length = self::MAC_BYTE_SIZE;
|
|
||||||
if ($hash != self::HASH_FUNCTION) {
|
|
||||||
$digest_length = self::our_strlen(hash_hmac($hash, '', '', true));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sanity-check the desired output length.
|
|
||||||
if (empty($length) || !is_int($length) ||
|
|
||||||
$length < 0 || $length > 255 * $digest_length) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// "if [salt] not provided, is set to a string of HashLen zeroes."
|
|
||||||
if (is_null($salt)) {
|
|
||||||
$salt = str_repeat("\x00", $digest_length);
|
|
||||||
}
|
|
||||||
|
|
||||||
// HKDF-Extract:
|
|
||||||
// PRK = HMAC-Hash(salt, IKM)
|
|
||||||
// The salt is the HMAC key.
|
|
||||||
$prk = hash_hmac($hash, $ikm, $salt, true);
|
|
||||||
|
|
||||||
// HKDF-Expand:
|
|
||||||
|
|
||||||
// This check is useless, but it serves as a reminder to the spec.
|
|
||||||
if (self::our_strlen($prk) < $digest_length) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// T(0) = ''
|
|
||||||
$t = '';
|
|
||||||
$last_block = '';
|
|
||||||
for ($block_index = 1; self::our_strlen($t) < $length; $block_index++) {
|
|
||||||
// T(i) = HMAC-Hash(PRK, T(i-1) | info | 0x??)
|
|
||||||
$last_block = hash_hmac(
|
|
||||||
$hash,
|
|
||||||
$last_block . $info . chr($block_index),
|
|
||||||
$prk,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
// T = T(1) | T(2) | T(3) | ... | T(N)
|
|
||||||
$t .= $last_block;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ORM = first L octets of T
|
|
||||||
$orm = self::our_substr($t, 0, $length);
|
|
||||||
if ($orm === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
return $orm;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function VerifyHMAC($correct_hmac, $message, $key)
|
|
||||||
{
|
|
||||||
$message_hmac = hash_hmac(self::HASH_FUNCTION, $message, $key, true);
|
|
||||||
|
|
||||||
// We can't just compare the strings with '==', since it would make
|
|
||||||
// timing attacks possible. We could use the XOR-OR constant-time
|
|
||||||
// comparison algorithm, but I'm not sure if that's good enough way up
|
|
||||||
// here in an interpreted language. So we use the method of HMACing the
|
|
||||||
// strings we want to compare with a random key, then comparing those.
|
|
||||||
|
|
||||||
// NOTE: This leaks information when the strings are not the same
|
|
||||||
// length, but they should always be the same length here. Enforce it:
|
|
||||||
if (self::our_strlen($correct_hmac) !== self::our_strlen($message_hmac)) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
$blind = self::CreateNewRandomKey();
|
|
||||||
$message_compare = hash_hmac(self::HASH_FUNCTION, $message_hmac, $blind);
|
|
||||||
$correct_compare = hash_hmac(self::HASH_FUNCTION, $correct_hmac, $blind);
|
|
||||||
return $correct_compare === $message_compare;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function TestEncryptDecrypt()
|
|
||||||
{
|
|
||||||
$key = self::CreateNewRandomKey();
|
|
||||||
$data = "EnCrYpT EvErYThInG\x00\x00";
|
|
||||||
|
|
||||||
// Make sure encrypting then decrypting doesn't change the message.
|
|
||||||
$ciphertext = self::Encrypt($data, $key);
|
|
||||||
try {
|
|
||||||
$decrypted = self::Decrypt($ciphertext, $key);
|
|
||||||
} catch (InvalidCiphertextException $ex) {
|
|
||||||
// It's important to catch this and change it into a
|
|
||||||
// CryptoTestFailedException, otherwise a test failure could trick
|
|
||||||
// the user into thinking it's just an invalid ciphertext!
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
if($decrypted !== $data)
|
|
||||||
{
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Modifying the ciphertext: Appending a string.
|
|
||||||
try {
|
|
||||||
self::Decrypt($ciphertext . "a", $key);
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
} catch (InvalidCiphertextException $e) { /* expected */ }
|
|
||||||
|
|
||||||
// Modifying the ciphertext: Changing an IV byte.
|
|
||||||
try {
|
|
||||||
$ciphertext[0] = chr((ord($ciphertext[0]) + 1) % 256);
|
|
||||||
self::Decrypt($ciphertext, $key);
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
} catch (InvalidCiphertextException $e) { /* expected */ }
|
|
||||||
|
|
||||||
// Decrypting with the wrong key.
|
|
||||||
$key = self::CreateNewRandomKey();
|
|
||||||
$data = "abcdef";
|
|
||||||
$ciphertext = self::Encrypt($data, $key);
|
|
||||||
$wrong_key = self::CreateNewRandomKey();
|
|
||||||
try {
|
|
||||||
self::Decrypt($ciphertext, $wrong_key);
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
} catch (InvalidCiphertextException $e) { /* expected */ }
|
|
||||||
|
|
||||||
// Ciphertext too small (shorter than HMAC).
|
|
||||||
$key = self::CreateNewRandomKey();
|
|
||||||
$ciphertext = str_repeat("A", self::MAC_BYTE_SIZE - 1);
|
|
||||||
try {
|
|
||||||
self::Decrypt($ciphertext, $key);
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
} catch (InvalidCiphertextException $e) { /* expected */ }
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function HKDFTestVector()
|
|
||||||
{
|
|
||||||
// HKDF test vectors from RFC 5869
|
|
||||||
|
|
||||||
// Test Case 1
|
|
||||||
$ikm = str_repeat("\x0b", 22);
|
|
||||||
$salt = self::hexToBytes("000102030405060708090a0b0c");
|
|
||||||
$info = self::hexToBytes("f0f1f2f3f4f5f6f7f8f9");
|
|
||||||
$length = 42;
|
|
||||||
$okm = self::hexToBytes(
|
|
||||||
"3cb25f25faacd57a90434f64d0362f2a" .
|
|
||||||
"2d2d0a90cf1a5a4c5db02d56ecc4c5bf" .
|
|
||||||
"34007208d5b887185865"
|
|
||||||
);
|
|
||||||
$computed_okm = self::HKDF("sha256", $ikm, $length, $info, $salt);
|
|
||||||
if ($computed_okm !== $okm) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Test Case 7
|
|
||||||
$ikm = str_repeat("\x0c", 22);
|
|
||||||
$length = 42;
|
|
||||||
$okm = self::hexToBytes(
|
|
||||||
"2c91117204d745f3500d636a62f64f0a" .
|
|
||||||
"b3bae548aa53d423b0d1f27ebba6f5e5" .
|
|
||||||
"673a081d70cce7acfc48"
|
|
||||||
);
|
|
||||||
$computed_okm = self::HKDF("sha1", $ikm, $length);
|
|
||||||
if ($computed_okm !== $okm) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function HMACTestVector()
|
|
||||||
{
|
|
||||||
// HMAC test vector From RFC 4231 (Test Case 1)
|
|
||||||
$key = str_repeat("\x0b", 20);
|
|
||||||
$data = "Hi There";
|
|
||||||
$correct = "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7";
|
|
||||||
if (hash_hmac(self::HASH_FUNCTION, $data, $key) != $correct) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function AESTestVector()
|
|
||||||
{
|
|
||||||
// AES CBC mode test vector from NIST SP 800-38A
|
|
||||||
$key = self::hexToBytes("2b7e151628aed2a6abf7158809cf4f3c");
|
|
||||||
$iv = self::hexToBytes("000102030405060708090a0b0c0d0e0f");
|
|
||||||
$plaintext = self::hexToBytes(
|
|
||||||
"6bc1bee22e409f96e93d7e117393172a" .
|
|
||||||
"ae2d8a571e03ac9c9eb76fac45af8e51" .
|
|
||||||
"30c81c46a35ce411e5fbc1191a0a52ef" .
|
|
||||||
"f69f2445df4f9b17ad2b417be66c3710"
|
|
||||||
);
|
|
||||||
$ciphertext = self::hexToBytes(
|
|
||||||
"7649abac8119b246cee98e9b12e9197d" .
|
|
||||||
"5086cb9b507219ee95db113a917678b2" .
|
|
||||||
"73bed6b8e3c1743b7116e69e22229516" .
|
|
||||||
"3ff1caa1681fac09120eca307586e1a7" .
|
|
||||||
/* Block due to padding. Not from NIST test vector.
|
|
||||||
Padding Block: 10101010101010101010101010101010
|
|
||||||
Ciphertext: 3ff1caa1681fac09120eca307586e1a7
|
|
||||||
(+) 2fe1dab1780fbc19021eda206596f1b7
|
|
||||||
AES 8cb82807230e1321d3fae00d18cc2012
|
|
||||||
|
|
||||||
*/
|
|
||||||
"8cb82807230e1321d3fae00d18cc2012"
|
|
||||||
);
|
|
||||||
|
|
||||||
$computed_ciphertext = self::PlainEncrypt($plaintext, $key, $iv);
|
|
||||||
if ($computed_ciphertext !== $ciphertext) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
|
|
||||||
$computed_plaintext = self::PlainDecrypt($ciphertext, $key, $iv);
|
|
||||||
if ($computed_plaintext !== $plaintext) {
|
|
||||||
throw new CryptoTestFailedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* WARNING: Do not call this function on secrets. It creates side channels. */
|
|
||||||
private static function hexToBytes($hex_string)
|
|
||||||
{
|
|
||||||
return pack("H*", $hex_string);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function EnsureConstantExists($name)
|
|
||||||
{
|
|
||||||
if (!defined($name)) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function EnsureFunctionExists($name)
|
|
||||||
{
|
|
||||||
if (!function_exists($name)) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We need these strlen() and substr() functions because when
|
|
||||||
* 'mbstring.func_overload' is set in php.ini, the standard strlen() and
|
|
||||||
* substr() are replaced by mb_strlen() and mb_substr().
|
|
||||||
*/
|
|
||||||
|
|
||||||
private static function our_strlen($str)
|
|
||||||
{
|
|
||||||
if (function_exists('mb_strlen')) {
|
|
||||||
$length = mb_strlen($str, '8bit');
|
|
||||||
if ($length === FALSE) {
|
|
||||||
throw new CannotPerformOperationException();
|
|
||||||
}
|
|
||||||
return $length;
|
|
||||||
} else {
|
|
||||||
return strlen($str);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static function our_substr($str, $start, $length = NULL)
|
|
||||||
{
|
|
||||||
if (function_exists('mb_substr'))
|
|
||||||
{
|
|
||||||
// mb_substr($str, 0, NULL, '8bit') returns an empty string on PHP
|
|
||||||
// 5.3, so we have to find the length ourselves.
|
|
||||||
if (!isset($length)) {
|
|
||||||
if ($start >= 0) {
|
|
||||||
$length = self::our_strlen($str) - $start;
|
|
||||||
} else {
|
|
||||||
$length = -$start;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return mb_substr($str, $start, $length, '8bit');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Unlike mb_substr(), substr() doesn't accept NULL for length
|
|
||||||
if (isset($length)) {
|
|
||||||
return substr($str, $start, $length);
|
|
||||||
} else {
|
|
||||||
return substr($str, $start);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We want to catch all uncaught exceptions that come from the Crypto class,
|
|
||||||
* since by default, PHP will leak the key in the stack trace from an uncaught
|
|
||||||
* exception. This is a really ugly hack, but I think it's justified.
|
|
||||||
*
|
|
||||||
* Everything up to handler() getting called should be reliable, so this should
|
|
||||||
* reliably suppress the stack traces. The rest is just a bonus so that we don't
|
|
||||||
* make it impossible to debug other exceptions.
|
|
||||||
*
|
|
||||||
* This bit of code was adapted from: http://stackoverflow.com/a/7939492
|
|
||||||
*/
|
|
||||||
|
|
||||||
class CryptoExceptionHandler
|
|
||||||
{
|
|
||||||
private $rethrow = NULL;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
set_exception_handler(array($this, "handler"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public function handler($ex)
|
|
||||||
{
|
|
||||||
if (
|
|
||||||
$ex instanceof InvalidCiphertextException ||
|
|
||||||
$ex instanceof CannotPerformOperationException ||
|
|
||||||
$ex instanceof CryptoTestFailedException
|
|
||||||
) {
|
|
||||||
echo "FATAL ERROR: Uncaught crypto exception. Suppresssing output.\n";
|
|
||||||
} else {
|
|
||||||
/* Re-throw the exception in the destructor. */
|
|
||||||
$this->rethrow = $ex;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __destruct() {
|
|
||||||
if ($this->rethrow) {
|
|
||||||
throw $this->rethrow;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$crypto_exception_handler_object_dont_touch_me = new CryptoExceptionHandler();
|
|
||||||
|
|
79
vendor/defuse/php-encryption/README.md
vendored
79
vendor/defuse/php-encryption/README.md
vendored
|
@ -1,79 +0,0 @@
|
||||||
php-encryption
|
|
||||||
===============
|
|
||||||
|
|
||||||
This is a class for doing symmetric encryption in PHP. **Requires PHP 5.4 or newer.**
|
|
||||||
|
|
||||||
[![Build Status](https://travis-ci.org/defuse/php-encryption.svg?branch=master)](https://travis-ci.org/defuse/php-encryption)
|
|
||||||
|
|
||||||
Implementation
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Messages are encrypted with AES-128 in CBC mode and are authenticated with
|
|
||||||
HMAC-SHA256 (Encrypt-then-Mac). PKCS7 padding is used to pad the message to
|
|
||||||
a multiple of the block size. HKDF is used to split the user-provided key into
|
|
||||||
two keys: one for encryption, and the other for authentication. It is
|
|
||||||
implemented using the `openssl_` and `hash_hmac` functions.
|
|
||||||
|
|
||||||
Warning
|
|
||||||
--------
|
|
||||||
|
|
||||||
This is new code, and it hasn't received much review by experts. I have spent
|
|
||||||
many hours making it as secure as possible (extensive runtime tests, secure
|
|
||||||
coding practices), and auditing it for problems, but I may have missed some
|
|
||||||
issues. So be careful. Don't trust it with your life. Check out the open GitHub
|
|
||||||
issues for a list of known issues. If you find a problem with this library,
|
|
||||||
please report it by opening a GitHub issue.
|
|
||||||
|
|
||||||
That said, you're probably much better off using this library than any other
|
|
||||||
encryption library written in PHP.
|
|
||||||
|
|
||||||
Philosophy
|
|
||||||
-----------
|
|
||||||
|
|
||||||
This library was created after noticing how much insecure PHP encryption code
|
|
||||||
there is. I once did a Google search for "php encryption" and found insecure
|
|
||||||
code or advice on 9 of the top 10 results.
|
|
||||||
|
|
||||||
Encryption is becoming an essential component of modern websites. This library
|
|
||||||
aims to fulfil a subset of that need: Authenticated symmetric encryption of
|
|
||||||
short strings, given a random key.
|
|
||||||
|
|
||||||
This library is developed around several core values:
|
|
||||||
|
|
||||||
- Rule #1: Security is prioritized over everything else.
|
|
||||||
|
|
||||||
> Whenever there is a conflict between security and some other property,
|
|
||||||
> security will be favored. For example, the library has runtime tests,
|
|
||||||
> which make it slower, but will hopefully stop it from encrypting stuff
|
|
||||||
> if the platform it's running on is broken.
|
|
||||||
|
|
||||||
- Rule #2: It should be difficult to misuse the library.
|
|
||||||
|
|
||||||
> We assume the developers using this library have no experience with
|
|
||||||
> cryptography. We only assume that they know that the "key" is something
|
|
||||||
> you need to encrypt and decrypt the messages, and that it must be
|
|
||||||
> protected. Whenever possible, the library should refuse to encrypt or
|
|
||||||
> decrypt messages when it is not being used correctly.
|
|
||||||
|
|
||||||
- Rule #3: The library aims only to be compatible with itself.
|
|
||||||
|
|
||||||
> Other PHP encryption libraries try to support every possible type of
|
|
||||||
> encryption, even the insecure ones (e.g. ECB mode). Because there are so
|
|
||||||
> many options, inexperienced developers must make decisions between
|
|
||||||
> things like "CBC" mode and "ECB" mode, knowing nothing about either one,
|
|
||||||
> which inevitably creates vulnerabilities.
|
|
||||||
|
|
||||||
> This library will only support one secure mode. A developer using this
|
|
||||||
> library will call "encrypt" and "decrypt" not caring about how they are
|
|
||||||
> implemented.
|
|
||||||
|
|
||||||
- Rule #4: The library should consist of a single PHP file and nothing more.
|
|
||||||
|
|
||||||
> Some PHP encryption libraries, like libsodium-php [1], are not
|
|
||||||
> straightforward to install and cannot packaged with "just download and
|
|
||||||
> extract" applications. This library will always be just one PHP file
|
|
||||||
> that you can put in your source tree and require().
|
|
||||||
|
|
||||||
References:
|
|
||||||
|
|
||||||
[1] https://github.com/jedisct1/libsodium-php
|
|
42
vendor/defuse/php-encryption/benchmark.php
vendored
42
vendor/defuse/php-encryption/benchmark.php
vendored
|
@ -1,42 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
require_once('Crypto.php');
|
|
||||||
|
|
||||||
// Note: By default, the runtime tests are "cached" and not re-executed for
|
|
||||||
// every call. To disable this, look at the RuntimeTest() function.
|
|
||||||
|
|
||||||
$start = microtime(true);
|
|
||||||
for ($i = 0; $i < 1000; $i++) {
|
|
||||||
$key = Crypto::CreateNewRandomKey();
|
|
||||||
}
|
|
||||||
$end = microtime(true);
|
|
||||||
showResults("CreateNewRandomKey()", $start, $end, 1000);
|
|
||||||
|
|
||||||
$start = microtime(true);
|
|
||||||
for ($i = 0; $i < 100; $i++) {
|
|
||||||
$ciphertext = Crypto::Encrypt(
|
|
||||||
str_repeat("A", 1024*1024),
|
|
||||||
str_repeat("B", 16)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$end = microtime(true);
|
|
||||||
showResults("Encrypt(1MB)", $start, $end, 100);
|
|
||||||
|
|
||||||
$start = microtime(true);
|
|
||||||
for ($i = 0; $i < 1000; $i++) {
|
|
||||||
$ciphertext = Crypto::Encrypt(
|
|
||||||
str_repeat("A", 1024),
|
|
||||||
str_repeat("B", 16)
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$end = microtime(true);
|
|
||||||
showResults("Encrypt(1KB)", $start, $end, 1000);
|
|
||||||
|
|
||||||
function showResults($type, $start, $end, $count)
|
|
||||||
{
|
|
||||||
$time = $end - $start;
|
|
||||||
$rate = $count / $time;
|
|
||||||
echo "$type: $rate calls/s\n";
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
20
vendor/defuse/php-encryption/composer.json
vendored
20
vendor/defuse/php-encryption/composer.json
vendored
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"name": "defuse/php-encryption",
|
|
||||||
"description": "Secure PHP Encryption Library",
|
|
||||||
"license": "MIT",
|
|
||||||
"keywords": ["security", "encryption", "AES", "mcrypt", "cipher"],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Hornby",
|
|
||||||
"email": "havoc@defuse.ca"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"autoload": {
|
|
||||||
"files": ["Crypto.php"]
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.4.0",
|
|
||||||
"ext-openssl": "*",
|
|
||||||
"ext-mcrypt": "*"
|
|
||||||
}
|
|
||||||
}
|
|
36
vendor/defuse/php-encryption/example.php
vendored
36
vendor/defuse/php-encryption/example.php
vendored
|
@ -1,36 +0,0 @@
|
||||||
<?php
|
|
||||||
require_once('Crypto.php');
|
|
||||||
try {
|
|
||||||
$key = Crypto::CreateNewRandomKey();
|
|
||||||
// WARNING: Do NOT encode $key with bin2hex() or base64_encode(),
|
|
||||||
// they may leak the key to the attacker through side channels.
|
|
||||||
} catch (CryptoTestFailedException $ex) {
|
|
||||||
die('Cannot safely create a key');
|
|
||||||
} catch (CannotPerformOperationException $ex) {
|
|
||||||
die('Cannot safely create a key');
|
|
||||||
}
|
|
||||||
|
|
||||||
$message = "ATTACK AT DAWN";
|
|
||||||
try {
|
|
||||||
$ciphertext = Crypto::Encrypt($message, $key);
|
|
||||||
} catch (CryptoTestFailedException $ex) {
|
|
||||||
die('Cannot safely perform encryption');
|
|
||||||
} catch (CannotPerformOperationException $ex) {
|
|
||||||
die('Cannot safely perform decryption');
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
$decrypted = Crypto::Decrypt($ciphertext, $key);
|
|
||||||
} catch (InvalidCiphertextException $ex) { // VERY IMPORTANT
|
|
||||||
// Either:
|
|
||||||
// 1. The ciphertext was modified by the attacker,
|
|
||||||
// 2. The key is wrong, or
|
|
||||||
// 3. $ciphertext is not a valid ciphertext or was corrupted.
|
|
||||||
// Assume the worst.
|
|
||||||
die('DANGER! DANGER! The ciphertext has been tampered with!');
|
|
||||||
} catch (CryptoTestFailedException $ex) {
|
|
||||||
die('Cannot safely perform encryption');
|
|
||||||
} catch (CannotPerformOperationException $ex) {
|
|
||||||
die('Cannot safely perform decryption');
|
|
||||||
}
|
|
||||||
?>
|
|
30
vendor/defuse/php-encryption/test.sh
vendored
30
vendor/defuse/php-encryption/test.sh
vendored
|
@ -1,30 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
echo "Normal"
|
|
||||||
echo "--------------------------------------------------"
|
|
||||||
php -d mbstring.func_overload=0 tests/runtime.php
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "FAIL."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "--------------------------------------------------"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
echo "Multibyte"
|
|
||||||
echo "--------------------------------------------------"
|
|
||||||
php -d mbstring.func_overload=7 tests/runtime.php
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "FAIL."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
echo "--------------------------------------------------"
|
|
||||||
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
if [ -z "$(php Crypto.php)" ]; then
|
|
||||||
echo "PASS: Crypto.php output is empty."
|
|
||||||
else
|
|
||||||
echo "FAIL: Crypto.php output is not empty."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
32
vendor/defuse/php-encryption/tests/runtime.php
vendored
32
vendor/defuse/php-encryption/tests/runtime.php
vendored
|
@ -1,32 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// Set the encoding to something more "challenging."
|
|
||||||
$ret = mb_internal_encoding('UTF-8');
|
|
||||||
if ($ret === FALSE) {
|
|
||||||
echo "Couldn't set encoding.";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Dump out the settings / encoding for future reference.
|
|
||||||
$val = ini_get("mbstring.func_overload");
|
|
||||||
echo "Settings: \n";
|
|
||||||
echo " func_overload: " . $val . "\n";
|
|
||||||
echo " mb_internal_encoding(): " . mb_internal_encoding() . "\n";
|
|
||||||
|
|
||||||
// Perform the tests.
|
|
||||||
require_once('Crypto.php');
|
|
||||||
try {
|
|
||||||
Crypto::RuntimeTest();
|
|
||||||
echo "TEST PASSED!\n";
|
|
||||||
exit(0);
|
|
||||||
} catch (CryptoTestFailedException $ex) {
|
|
||||||
echo "TEST FAILED!\n";
|
|
||||||
var_dump($ex);
|
|
||||||
exit(1);
|
|
||||||
} catch (CannotPerformOperationException $ex) {
|
|
||||||
echo "TEST FAILED\n";
|
|
||||||
var_dump($ex);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
9
vendor/ezyang/htmlpurifier/CREDITS
vendored
|
@ -1,9 +0,0 @@
|
||||||
|
|
||||||
CREDITS
|
|
||||||
|
|
||||||
Almost everything written by Edward Z. Yang (Ambush Commander). Lots of thanks
|
|
||||||
to the DevNetwork Community for their help (see docs/ref-devnetwork.html for
|
|
||||||
more details), Feyd especially (namely IPv6 and optimization). Thanks to RSnake
|
|
||||||
for letting me package his fantastic XSS cheatsheet for a smoketest.
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
374
vendor/ezyang/htmlpurifier/INSTALL
vendored
374
vendor/ezyang/htmlpurifier/INSTALL
vendored
|
@ -1,374 +0,0 @@
|
||||||
|
|
||||||
Install
|
|
||||||
How to install HTML Purifier
|
|
||||||
|
|
||||||
HTML Purifier is designed to run out of the box, so actually using the
|
|
||||||
library is extremely easy. (Although... if you were looking for a
|
|
||||||
step-by-step installation GUI, you've downloaded the wrong software!)
|
|
||||||
|
|
||||||
While the impatient can get going immediately with some of the sample
|
|
||||||
code at the bottom of this library, it's well worth reading this entire
|
|
||||||
document--most of the other documentation assumes that you are familiar
|
|
||||||
with these contents.
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
1. Compatibility
|
|
||||||
|
|
||||||
HTML Purifier is PHP 5 only, and is actively tested from PHP 5.0.5 and
|
|
||||||
up. It has no core dependencies with other libraries. PHP
|
|
||||||
4 support was deprecated on December 31, 2007 with HTML Purifier 3.0.0.
|
|
||||||
HTML Purifier is not compatible with zend.ze1_compatibility_mode.
|
|
||||||
|
|
||||||
These optional extensions can enhance the capabilities of HTML Purifier:
|
|
||||||
|
|
||||||
* iconv : Converts text to and from non-UTF-8 encodings
|
|
||||||
* bcmath : Used for unit conversion and imagecrash protection
|
|
||||||
* tidy : Used for pretty-printing HTML
|
|
||||||
|
|
||||||
These optional libraries can enhance the capabilities of HTML Purifier:
|
|
||||||
|
|
||||||
* CSSTidy : Clean CSS stylesheets using %Core.ExtractStyleBlocks
|
|
||||||
* Net_IDNA2 (PEAR) : IRI support using %Core.EnableIDNA
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
2. Reconnaissance
|
|
||||||
|
|
||||||
A big plus of HTML Purifier is its inerrant support of standards, so
|
|
||||||
your web-pages should be standards-compliant. (They should also use
|
|
||||||
semantic markup, but that's another issue altogether, one HTML Purifier
|
|
||||||
cannot fix without reading your mind.)
|
|
||||||
|
|
||||||
HTML Purifier can process these doctypes:
|
|
||||||
|
|
||||||
* XHTML 1.0 Transitional (default)
|
|
||||||
* XHTML 1.0 Strict
|
|
||||||
* HTML 4.01 Transitional
|
|
||||||
* HTML 4.01 Strict
|
|
||||||
* XHTML 1.1
|
|
||||||
|
|
||||||
...and these character encodings:
|
|
||||||
|
|
||||||
* UTF-8 (default)
|
|
||||||
* Any encoding iconv supports (with crippled internationalization support)
|
|
||||||
|
|
||||||
These defaults reflect what my choices would be if I were authoring an
|
|
||||||
HTML document, however, what you choose depends on the nature of your
|
|
||||||
codebase. If you don't know what doctype you are using, you can determine
|
|
||||||
the doctype from this identifier at the top of your source code:
|
|
||||||
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
|
||||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
|
|
||||||
...and the character encoding from this code:
|
|
||||||
|
|
||||||
<meta http-equiv="Content-type" content="text/html;charset=ENCODING">
|
|
||||||
|
|
||||||
If the character encoding declaration is missing, STOP NOW, and
|
|
||||||
read 'docs/enduser-utf8.html' (web accessible at
|
|
||||||
http://htmlpurifier.org/docs/enduser-utf8.html). In fact, even if it is
|
|
||||||
present, read this document anyway, as many websites specify their
|
|
||||||
document's character encoding incorrectly.
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
3. Including the library
|
|
||||||
|
|
||||||
The procedure is quite simple:
|
|
||||||
|
|
||||||
require_once '/path/to/library/HTMLPurifier.auto.php';
|
|
||||||
|
|
||||||
This will setup an autoloader, so the library's files are only included
|
|
||||||
when you use them.
|
|
||||||
|
|
||||||
Only the contents in the library/ folder are necessary, so you can remove
|
|
||||||
everything else when using HTML Purifier in a production environment.
|
|
||||||
|
|
||||||
If you installed HTML Purifier via PEAR, all you need to do is:
|
|
||||||
|
|
||||||
require_once 'HTMLPurifier.auto.php';
|
|
||||||
|
|
||||||
Please note that the usual PEAR practice of including just the classes you
|
|
||||||
want will not work with HTML Purifier's autoloading scheme.
|
|
||||||
|
|
||||||
Advanced users, read on; other users can skip to section 4.
|
|
||||||
|
|
||||||
Autoload compatibility
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
HTML Purifier attempts to be as smart as possible when registering an
|
|
||||||
autoloader, but there are some cases where you will need to change
|
|
||||||
your own code to accomodate HTML Purifier. These are those cases:
|
|
||||||
|
|
||||||
PHP VERSION IS LESS THAN 5.1.2, AND YOU'VE DEFINED __autoload
|
|
||||||
Because spl_autoload_register() doesn't exist in early versions
|
|
||||||
of PHP 5, HTML Purifier has no way of adding itself to the autoload
|
|
||||||
stack. Modify your __autoload function to test
|
|
||||||
HTMLPurifier_Bootstrap::autoload($class)
|
|
||||||
|
|
||||||
For example, suppose your autoload function looks like this:
|
|
||||||
|
|
||||||
function __autoload($class) {
|
|
||||||
require str_replace('_', '/', $class) . '.php';
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
A modified version with HTML Purifier would look like this:
|
|
||||||
|
|
||||||
function __autoload($class) {
|
|
||||||
if (HTMLPurifier_Bootstrap::autoload($class)) return true;
|
|
||||||
require str_replace('_', '/', $class) . '.php';
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Note that there *is* some custom behavior in our autoloader; the
|
|
||||||
original autoloader in our example would work for 99% of the time,
|
|
||||||
but would fail when including language files.
|
|
||||||
|
|
||||||
AN __autoload FUNCTION IS DECLARED AFTER OUR AUTOLOADER IS REGISTERED
|
|
||||||
spl_autoload_register() has the curious behavior of disabling
|
|
||||||
the existing __autoload() handler. Users need to explicitly
|
|
||||||
spl_autoload_register('__autoload'). Because we use SPL when it
|
|
||||||
is available, __autoload() will ALWAYS be disabled. If __autoload()
|
|
||||||
is declared before HTML Purifier is loaded, this is not a problem:
|
|
||||||
HTML Purifier will register the function for you. But if it is
|
|
||||||
declared afterwards, it will mysteriously not work. This
|
|
||||||
snippet of code (after your autoloader is defined) will fix it:
|
|
||||||
|
|
||||||
spl_autoload_register('__autoload')
|
|
||||||
|
|
||||||
Users should also be on guard if they use a version of PHP previous
|
|
||||||
to 5.1.2 without an autoloader--HTML Purifier will define __autoload()
|
|
||||||
for you, which can collide with an autoloader that was added by *you*
|
|
||||||
later.
|
|
||||||
|
|
||||||
|
|
||||||
For better performance
|
|
||||||
----------------------
|
|
||||||
|
|
||||||
Opcode caches, which greatly speed up PHP initialization for scripts
|
|
||||||
with large amounts of code (HTML Purifier included), don't like
|
|
||||||
autoloaders. We offer an include file that includes all of HTML Purifier's
|
|
||||||
files in one go in an opcode cache friendly manner:
|
|
||||||
|
|
||||||
// If /path/to/library isn't already in your include path, uncomment
|
|
||||||
// the below line:
|
|
||||||
// require '/path/to/library/HTMLPurifier.path.php';
|
|
||||||
|
|
||||||
require 'HTMLPurifier.includes.php';
|
|
||||||
|
|
||||||
Optional components still need to be included--you'll know if you try to
|
|
||||||
use a feature and you get a class doesn't exists error! The autoloader
|
|
||||||
can be used in conjunction with this approach to catch classes that are
|
|
||||||
missing. Simply add this afterwards:
|
|
||||||
|
|
||||||
require 'HTMLPurifier.autoload.php';
|
|
||||||
|
|
||||||
Standalone version
|
|
||||||
------------------
|
|
||||||
|
|
||||||
HTML Purifier has a standalone distribution; you can also generate
|
|
||||||
a standalone file from the full version by running the script
|
|
||||||
maintenance/generate-standalone.php . The standalone version has the
|
|
||||||
benefit of having most of its code in one file, so parsing is much
|
|
||||||
faster and the library is easier to manage.
|
|
||||||
|
|
||||||
If HTMLPurifier.standalone.php exists in the library directory, you
|
|
||||||
can use it like this:
|
|
||||||
|
|
||||||
require '/path/to/HTMLPurifier.standalone.php';
|
|
||||||
|
|
||||||
This is equivalent to including HTMLPurifier.includes.php, except that
|
|
||||||
the contents of standalone/ will be added to your path. To override this
|
|
||||||
behavior, specify a new HTMLPURIFIER_PREFIX where standalone files can
|
|
||||||
be found (usually, this will be one directory up, the "true" library
|
|
||||||
directory in full distributions). Don't forget to set your path too!
|
|
||||||
|
|
||||||
The autoloader can be added to the end to ensure the classes are
|
|
||||||
loaded when necessary; otherwise you can manually include them.
|
|
||||||
To use the autoloader, use this:
|
|
||||||
|
|
||||||
require 'HTMLPurifier.autoload.php';
|
|
||||||
|
|
||||||
For advanced users
|
|
||||||
------------------
|
|
||||||
|
|
||||||
HTMLPurifier.auto.php performs a number of operations that can be done
|
|
||||||
individually. These are:
|
|
||||||
|
|
||||||
HTMLPurifier.path.php
|
|
||||||
Puts /path/to/library in the include path. For high performance,
|
|
||||||
this should be done in php.ini.
|
|
||||||
|
|
||||||
HTMLPurifier.autoload.php
|
|
||||||
Registers our autoload handler HTMLPurifier_Bootstrap::autoload($class).
|
|
||||||
|
|
||||||
You can do these operations by yourself--in fact, you must modify your own
|
|
||||||
autoload handler if you are using a version of PHP earlier than PHP 5.1.2
|
|
||||||
(See "Autoload compatibility" above).
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
4. Configuration
|
|
||||||
|
|
||||||
HTML Purifier is designed to run out-of-the-box, but occasionally HTML
|
|
||||||
Purifier needs to be told what to do. If you answer no to any of these
|
|
||||||
questions, read on; otherwise, you can skip to the next section (or, if you're
|
|
||||||
into configuring things just for the heck of it, skip to 4.3).
|
|
||||||
|
|
||||||
* Am I using UTF-8?
|
|
||||||
* Am I using XHTML 1.0 Transitional?
|
|
||||||
|
|
||||||
If you answered no to any of these questions, instantiate a configuration
|
|
||||||
object and read on:
|
|
||||||
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
|
|
||||||
|
|
||||||
4.1. Setting a different character encoding
|
|
||||||
|
|
||||||
You really shouldn't use any other encoding except UTF-8, especially if you
|
|
||||||
plan to support multilingual websites (read section three for more details).
|
|
||||||
However, switching to UTF-8 is not always immediately feasible, so we can
|
|
||||||
adapt.
|
|
||||||
|
|
||||||
HTML Purifier uses iconv to support other character encodings, as such,
|
|
||||||
any encoding that iconv supports <http://www.gnu.org/software/libiconv/>
|
|
||||||
HTML Purifier supports with this code:
|
|
||||||
|
|
||||||
$config->set('Core.Encoding', /* put your encoding here */);
|
|
||||||
|
|
||||||
An example usage for Latin-1 websites (the most common encoding for English
|
|
||||||
websites):
|
|
||||||
|
|
||||||
$config->set('Core.Encoding', 'ISO-8859-1');
|
|
||||||
|
|
||||||
Note that HTML Purifier's support for non-Unicode encodings is crippled by the
|
|
||||||
fact that any character not supported by that encoding will be silently
|
|
||||||
dropped, EVEN if it is ampersand escaped. If you want to work around
|
|
||||||
this, you are welcome to read docs/enduser-utf8.html for a fix,
|
|
||||||
but please be cognizant of the issues the "solution" creates (for this
|
|
||||||
reason, I do not include the solution in this document).
|
|
||||||
|
|
||||||
|
|
||||||
4.2. Setting a different doctype
|
|
||||||
|
|
||||||
For those of you using HTML 4.01 Transitional, you can disable
|
|
||||||
XHTML output like this:
|
|
||||||
|
|
||||||
$config->set('HTML.Doctype', 'HTML 4.01 Transitional');
|
|
||||||
|
|
||||||
Other supported doctypes include:
|
|
||||||
|
|
||||||
* HTML 4.01 Strict
|
|
||||||
* HTML 4.01 Transitional
|
|
||||||
* XHTML 1.0 Strict
|
|
||||||
* XHTML 1.0 Transitional
|
|
||||||
* XHTML 1.1
|
|
||||||
|
|
||||||
|
|
||||||
4.3. Other settings
|
|
||||||
|
|
||||||
There are more configuration directives which can be read about
|
|
||||||
here: <http://htmlpurifier.org/live/configdoc/plain.html> They're a bit boring,
|
|
||||||
but they can help out for those of you who like to exert maximum control over
|
|
||||||
your code. Some of the more interesting ones are configurable at the
|
|
||||||
demo <http://htmlpurifier.org/demo.php> and are well worth looking into
|
|
||||||
for your own system.
|
|
||||||
|
|
||||||
For example, you can fine tune allowed elements and attributes, convert
|
|
||||||
relative URLs to absolute ones, and even autoparagraph input text! These
|
|
||||||
are, respectively, %HTML.Allowed, %URI.MakeAbsolute and %URI.Base, and
|
|
||||||
%AutoFormat.AutoParagraph. The %Namespace.Directive naming convention
|
|
||||||
translates to:
|
|
||||||
|
|
||||||
$config->set('Namespace.Directive', $value);
|
|
||||||
|
|
||||||
E.g.
|
|
||||||
|
|
||||||
$config->set('HTML.Allowed', 'p,b,a[href],i');
|
|
||||||
$config->set('URI.Base', 'http://www.example.com');
|
|
||||||
$config->set('URI.MakeAbsolute', true);
|
|
||||||
$config->set('AutoFormat.AutoParagraph', true);
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
5. Caching
|
|
||||||
|
|
||||||
HTML Purifier generates some cache files (generally one or two) to speed up
|
|
||||||
its execution. For maximum performance, make sure that
|
|
||||||
library/HTMLPurifier/DefinitionCache/Serializer is writeable by the webserver.
|
|
||||||
|
|
||||||
If you are in the library/ folder of HTML Purifier, you can set the
|
|
||||||
appropriate permissions using:
|
|
||||||
|
|
||||||
chmod -R 0755 HTMLPurifier/DefinitionCache/Serializer
|
|
||||||
|
|
||||||
If the above command doesn't work, you may need to assign write permissions
|
|
||||||
to all. This may be necessary if your webserver runs as nobody, but is
|
|
||||||
not recommended since it means any other user can write files in the
|
|
||||||
directory. Use:
|
|
||||||
|
|
||||||
chmod -R 0777 HTMLPurifier/DefinitionCache/Serializer
|
|
||||||
|
|
||||||
You can also chmod files via your FTP client; this option
|
|
||||||
is usually accessible by right clicking the corresponding directory and
|
|
||||||
then selecting "chmod" or "file permissions".
|
|
||||||
|
|
||||||
Starting with 2.0.1, HTML Purifier will generate friendly error messages
|
|
||||||
that will tell you exactly what you have to chmod the directory to, if in doubt,
|
|
||||||
follow its advice.
|
|
||||||
|
|
||||||
If you are unable or unwilling to give write permissions to the cache
|
|
||||||
directory, you can either disable the cache (and suffer a performance
|
|
||||||
hit):
|
|
||||||
|
|
||||||
$config->set('Core.DefinitionCache', null);
|
|
||||||
|
|
||||||
Or move the cache directory somewhere else (no trailing slash):
|
|
||||||
|
|
||||||
$config->set('Cache.SerializerPath', '/home/user/absolute/path');
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
6. Using the code
|
|
||||||
|
|
||||||
The interface is mind-numbingly simple:
|
|
||||||
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
$clean_html = $purifier->purify( $dirty_html );
|
|
||||||
|
|
||||||
That's it! For more examples, check out docs/examples/ (they aren't very
|
|
||||||
different though). Also, docs/enduser-slow.html gives advice on what to
|
|
||||||
do if HTML Purifier is slowing down your application.
|
|
||||||
|
|
||||||
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
7. Quick install
|
|
||||||
|
|
||||||
First, make sure library/HTMLPurifier/DefinitionCache/Serializer is
|
|
||||||
writable by the webserver (see Section 5: Caching above for details).
|
|
||||||
If your website is in UTF-8 and XHTML Transitional, use this code:
|
|
||||||
|
|
||||||
<?php
|
|
||||||
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
|
|
||||||
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
$clean_html = $purifier->purify($dirty_html);
|
|
||||||
?>
|
|
||||||
|
|
||||||
If your website is in a different encoding or doctype, use this code:
|
|
||||||
|
|
||||||
<?php
|
|
||||||
require_once '/path/to/htmlpurifier/library/HTMLPurifier.auto.php';
|
|
||||||
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$config->set('Core.Encoding', 'ISO-8859-1'); // replace with your encoding
|
|
||||||
$config->set('HTML.Doctype', 'HTML 4.01 Transitional'); // replace with your doctype
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
|
|
||||||
$clean_html = $purifier->purify($dirty_html);
|
|
||||||
?>
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
60
vendor/ezyang/htmlpurifier/INSTALL.fr.utf8
vendored
60
vendor/ezyang/htmlpurifier/INSTALL.fr.utf8
vendored
|
@ -1,60 +0,0 @@
|
||||||
|
|
||||||
Installation
|
|
||||||
Comment installer HTML Purifier
|
|
||||||
|
|
||||||
Attention : Ce document est encodé en UTF-8, si les lettres avec des accents
|
|
||||||
ne s'affichent pas, prenez un meilleur éditeur de texte.
|
|
||||||
|
|
||||||
L'installation de HTML Purifier est très simple, parce qu'il n'a pas besoin
|
|
||||||
de configuration. Pour les utilisateurs impatients, le code se trouve dans le
|
|
||||||
pied de page, mais je recommande de lire le document.
|
|
||||||
|
|
||||||
1. Compatibilité
|
|
||||||
|
|
||||||
HTML Purifier fonctionne avec PHP 5. PHP 5.0.5 est la dernière version testée.
|
|
||||||
Il ne dépend pas d'autres librairies.
|
|
||||||
|
|
||||||
Les extensions optionnelles sont iconv (généralement déjà installée) et tidy
|
|
||||||
(répendue aussi). Si vous utilisez UTF-8 et que vous ne voulez pas l'indentation,
|
|
||||||
vous pouvez utiliser HTML Purifier sans ces extensions.
|
|
||||||
|
|
||||||
|
|
||||||
2. Inclure la librairie
|
|
||||||
|
|
||||||
Quand vous devez l'utilisez, incluez le :
|
|
||||||
|
|
||||||
require_once('/path/to/library/HTMLPurifier.auto.php');
|
|
||||||
|
|
||||||
Ne pas l'inclure si ce n'est pas nécessaire, car HTML Purifier est lourd.
|
|
||||||
|
|
||||||
HTML Purifier utilise "autoload". Si vous avez défini la fonction __autoload,
|
|
||||||
vous devez ajouter cette fonction :
|
|
||||||
|
|
||||||
spl_autoload_register('__autoload')
|
|
||||||
|
|
||||||
Plus d'informations dans le document "INSTALL".
|
|
||||||
|
|
||||||
3. Installation rapide
|
|
||||||
|
|
||||||
Si votre site Web est en UTF-8 et XHTML Transitional, utilisez :
|
|
||||||
|
|
||||||
<?php
|
|
||||||
require_once('/path/to/htmlpurifier/library/HTMLPurifier.auto.php');
|
|
||||||
$purificateur = new HTMLPurifier();
|
|
||||||
$html_propre = $purificateur->purify($html_a_purifier);
|
|
||||||
?>
|
|
||||||
|
|
||||||
Sinon, utilisez :
|
|
||||||
|
|
||||||
<?php
|
|
||||||
require_once('/path/to/html/purifier/library/HTMLPurifier.auto.load');
|
|
||||||
$config = $HTMLPurifier_Config::createDefault();
|
|
||||||
$config->set('Core', 'Encoding', 'ISO-8859-1'); //Remplacez par votre
|
|
||||||
encodage
|
|
||||||
$config->set('Core', 'XHTML', true); //Remplacer par false si HTML 4.01
|
|
||||||
$purificateur = new HTMLPurifier($config);
|
|
||||||
$html_propre = $purificateur->purify($html_a_purifier);
|
|
||||||
?>
|
|
||||||
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
504
vendor/ezyang/htmlpurifier/LICENSE
vendored
504
vendor/ezyang/htmlpurifier/LICENSE
vendored
|
@ -1,504 +0,0 @@
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
Version 2.1, February 1999
|
|
||||||
|
|
||||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
|
||||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
Everyone is permitted to copy and distribute verbatim copies
|
|
||||||
of this license document, but changing it is not allowed.
|
|
||||||
|
|
||||||
[This is the first released version of the Lesser GPL. It also counts
|
|
||||||
as the successor of the GNU Library Public License, version 2, hence
|
|
||||||
the version number 2.1.]
|
|
||||||
|
|
||||||
Preamble
|
|
||||||
|
|
||||||
The licenses for most software are designed to take away your
|
|
||||||
freedom to share and change it. By contrast, the GNU General Public
|
|
||||||
Licenses are intended to guarantee your freedom to share and change
|
|
||||||
free software--to make sure the software is free for all its users.
|
|
||||||
|
|
||||||
This license, the Lesser General Public License, applies to some
|
|
||||||
specially designated software packages--typically libraries--of the
|
|
||||||
Free Software Foundation and other authors who decide to use it. You
|
|
||||||
can use it too, but we suggest you first think carefully about whether
|
|
||||||
this license or the ordinary General Public License is the better
|
|
||||||
strategy to use in any particular case, based on the explanations below.
|
|
||||||
|
|
||||||
When we speak of free software, we are referring to freedom of use,
|
|
||||||
not price. Our General Public Licenses are designed to make sure that
|
|
||||||
you have the freedom to distribute copies of free software (and charge
|
|
||||||
for this service if you wish); that you receive source code or can get
|
|
||||||
it if you want it; that you can change the software and use pieces of
|
|
||||||
it in new free programs; and that you are informed that you can do
|
|
||||||
these things.
|
|
||||||
|
|
||||||
To protect your rights, we need to make restrictions that forbid
|
|
||||||
distributors to deny you these rights or to ask you to surrender these
|
|
||||||
rights. These restrictions translate to certain responsibilities for
|
|
||||||
you if you distribute copies of the library or if you modify it.
|
|
||||||
|
|
||||||
For example, if you distribute copies of the library, whether gratis
|
|
||||||
or for a fee, you must give the recipients all the rights that we gave
|
|
||||||
you. You must make sure that they, too, receive or can get the source
|
|
||||||
code. If you link other code with the library, you must provide
|
|
||||||
complete object files to the recipients, so that they can relink them
|
|
||||||
with the library after making changes to the library and recompiling
|
|
||||||
it. And you must show them these terms so they know their rights.
|
|
||||||
|
|
||||||
We protect your rights with a two-step method: (1) we copyright the
|
|
||||||
library, and (2) we offer you this license, which gives you legal
|
|
||||||
permission to copy, distribute and/or modify the library.
|
|
||||||
|
|
||||||
To protect each distributor, we want to make it very clear that
|
|
||||||
there is no warranty for the free library. Also, if the library is
|
|
||||||
modified by someone else and passed on, the recipients should know
|
|
||||||
that what they have is not the original version, so that the original
|
|
||||||
author's reputation will not be affected by problems that might be
|
|
||||||
introduced by others.
|
|
||||||
|
|
||||||
Finally, software patents pose a constant threat to the existence of
|
|
||||||
any free program. We wish to make sure that a company cannot
|
|
||||||
effectively restrict the users of a free program by obtaining a
|
|
||||||
restrictive license from a patent holder. Therefore, we insist that
|
|
||||||
any patent license obtained for a version of the library must be
|
|
||||||
consistent with the full freedom of use specified in this license.
|
|
||||||
|
|
||||||
Most GNU software, including some libraries, is covered by the
|
|
||||||
ordinary GNU General Public License. This license, the GNU Lesser
|
|
||||||
General Public License, applies to certain designated libraries, and
|
|
||||||
is quite different from the ordinary General Public License. We use
|
|
||||||
this license for certain libraries in order to permit linking those
|
|
||||||
libraries into non-free programs.
|
|
||||||
|
|
||||||
When a program is linked with a library, whether statically or using
|
|
||||||
a shared library, the combination of the two is legally speaking a
|
|
||||||
combined work, a derivative of the original library. The ordinary
|
|
||||||
General Public License therefore permits such linking only if the
|
|
||||||
entire combination fits its criteria of freedom. The Lesser General
|
|
||||||
Public License permits more lax criteria for linking other code with
|
|
||||||
the library.
|
|
||||||
|
|
||||||
We call this license the "Lesser" General Public License because it
|
|
||||||
does Less to protect the user's freedom than the ordinary General
|
|
||||||
Public License. It also provides other free software developers Less
|
|
||||||
of an advantage over competing non-free programs. These disadvantages
|
|
||||||
are the reason we use the ordinary General Public License for many
|
|
||||||
libraries. However, the Lesser license provides advantages in certain
|
|
||||||
special circumstances.
|
|
||||||
|
|
||||||
For example, on rare occasions, there may be a special need to
|
|
||||||
encourage the widest possible use of a certain library, so that it becomes
|
|
||||||
a de-facto standard. To achieve this, non-free programs must be
|
|
||||||
allowed to use the library. A more frequent case is that a free
|
|
||||||
library does the same job as widely used non-free libraries. In this
|
|
||||||
case, there is little to gain by limiting the free library to free
|
|
||||||
software only, so we use the Lesser General Public License.
|
|
||||||
|
|
||||||
In other cases, permission to use a particular library in non-free
|
|
||||||
programs enables a greater number of people to use a large body of
|
|
||||||
free software. For example, permission to use the GNU C Library in
|
|
||||||
non-free programs enables many more people to use the whole GNU
|
|
||||||
operating system, as well as its variant, the GNU/Linux operating
|
|
||||||
system.
|
|
||||||
|
|
||||||
Although the Lesser General Public License is Less protective of the
|
|
||||||
users' freedom, it does ensure that the user of a program that is
|
|
||||||
linked with the Library has the freedom and the wherewithal to run
|
|
||||||
that program using a modified version of the Library.
|
|
||||||
|
|
||||||
The precise terms and conditions for copying, distribution and
|
|
||||||
modification follow. Pay close attention to the difference between a
|
|
||||||
"work based on the library" and a "work that uses the library". The
|
|
||||||
former contains code derived from the library, whereas the latter must
|
|
||||||
be combined with the library in order to run.
|
|
||||||
|
|
||||||
GNU LESSER GENERAL PUBLIC LICENSE
|
|
||||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
|
||||||
|
|
||||||
0. This License Agreement applies to any software library or other
|
|
||||||
program which contains a notice placed by the copyright holder or
|
|
||||||
other authorized party saying it may be distributed under the terms of
|
|
||||||
this Lesser General Public License (also called "this License").
|
|
||||||
Each licensee is addressed as "you".
|
|
||||||
|
|
||||||
A "library" means a collection of software functions and/or data
|
|
||||||
prepared so as to be conveniently linked with application programs
|
|
||||||
(which use some of those functions and data) to form executables.
|
|
||||||
|
|
||||||
The "Library", below, refers to any such software library or work
|
|
||||||
which has been distributed under these terms. A "work based on the
|
|
||||||
Library" means either the Library or any derivative work under
|
|
||||||
copyright law: that is to say, a work containing the Library or a
|
|
||||||
portion of it, either verbatim or with modifications and/or translated
|
|
||||||
straightforwardly into another language. (Hereinafter, translation is
|
|
||||||
included without limitation in the term "modification".)
|
|
||||||
|
|
||||||
"Source code" for a work means the preferred form of the work for
|
|
||||||
making modifications to it. For a library, complete source code means
|
|
||||||
all the source code for all modules it contains, plus any associated
|
|
||||||
interface definition files, plus the scripts used to control compilation
|
|
||||||
and installation of the library.
|
|
||||||
|
|
||||||
Activities other than copying, distribution and modification are not
|
|
||||||
covered by this License; they are outside its scope. The act of
|
|
||||||
running a program using the Library is not restricted, and output from
|
|
||||||
such a program is covered only if its contents constitute a work based
|
|
||||||
on the Library (independent of the use of the Library in a tool for
|
|
||||||
writing it). Whether that is true depends on what the Library does
|
|
||||||
and what the program that uses the Library does.
|
|
||||||
|
|
||||||
1. You may copy and distribute verbatim copies of the Library's
|
|
||||||
complete source code as you receive it, in any medium, provided that
|
|
||||||
you conspicuously and appropriately publish on each copy an
|
|
||||||
appropriate copyright notice and disclaimer of warranty; keep intact
|
|
||||||
all the notices that refer to this License and to the absence of any
|
|
||||||
warranty; and distribute a copy of this License along with the
|
|
||||||
Library.
|
|
||||||
|
|
||||||
You may charge a fee for the physical act of transferring a copy,
|
|
||||||
and you may at your option offer warranty protection in exchange for a
|
|
||||||
fee.
|
|
||||||
|
|
||||||
2. You may modify your copy or copies of the Library or any portion
|
|
||||||
of it, thus forming a work based on the Library, and copy and
|
|
||||||
distribute such modifications or work under the terms of Section 1
|
|
||||||
above, provided that you also meet all of these conditions:
|
|
||||||
|
|
||||||
a) The modified work must itself be a software library.
|
|
||||||
|
|
||||||
b) You must cause the files modified to carry prominent notices
|
|
||||||
stating that you changed the files and the date of any change.
|
|
||||||
|
|
||||||
c) You must cause the whole of the work to be licensed at no
|
|
||||||
charge to all third parties under the terms of this License.
|
|
||||||
|
|
||||||
d) If a facility in the modified Library refers to a function or a
|
|
||||||
table of data to be supplied by an application program that uses
|
|
||||||
the facility, other than as an argument passed when the facility
|
|
||||||
is invoked, then you must make a good faith effort to ensure that,
|
|
||||||
in the event an application does not supply such function or
|
|
||||||
table, the facility still operates, and performs whatever part of
|
|
||||||
its purpose remains meaningful.
|
|
||||||
|
|
||||||
(For example, a function in a library to compute square roots has
|
|
||||||
a purpose that is entirely well-defined independent of the
|
|
||||||
application. Therefore, Subsection 2d requires that any
|
|
||||||
application-supplied function or table used by this function must
|
|
||||||
be optional: if the application does not supply it, the square
|
|
||||||
root function must still compute square roots.)
|
|
||||||
|
|
||||||
These requirements apply to the modified work as a whole. If
|
|
||||||
identifiable sections of that work are not derived from the Library,
|
|
||||||
and can be reasonably considered independent and separate works in
|
|
||||||
themselves, then this License, and its terms, do not apply to those
|
|
||||||
sections when you distribute them as separate works. But when you
|
|
||||||
distribute the same sections as part of a whole which is a work based
|
|
||||||
on the Library, the distribution of the whole must be on the terms of
|
|
||||||
this License, whose permissions for other licensees extend to the
|
|
||||||
entire whole, and thus to each and every part regardless of who wrote
|
|
||||||
it.
|
|
||||||
|
|
||||||
Thus, it is not the intent of this section to claim rights or contest
|
|
||||||
your rights to work written entirely by you; rather, the intent is to
|
|
||||||
exercise the right to control the distribution of derivative or
|
|
||||||
collective works based on the Library.
|
|
||||||
|
|
||||||
In addition, mere aggregation of another work not based on the Library
|
|
||||||
with the Library (or with a work based on the Library) on a volume of
|
|
||||||
a storage or distribution medium does not bring the other work under
|
|
||||||
the scope of this License.
|
|
||||||
|
|
||||||
3. You may opt to apply the terms of the ordinary GNU General Public
|
|
||||||
License instead of this License to a given copy of the Library. To do
|
|
||||||
this, you must alter all the notices that refer to this License, so
|
|
||||||
that they refer to the ordinary GNU General Public License, version 2,
|
|
||||||
instead of to this License. (If a newer version than version 2 of the
|
|
||||||
ordinary GNU General Public License has appeared, then you can specify
|
|
||||||
that version instead if you wish.) Do not make any other change in
|
|
||||||
these notices.
|
|
||||||
|
|
||||||
Once this change is made in a given copy, it is irreversible for
|
|
||||||
that copy, so the ordinary GNU General Public License applies to all
|
|
||||||
subsequent copies and derivative works made from that copy.
|
|
||||||
|
|
||||||
This option is useful when you wish to copy part of the code of
|
|
||||||
the Library into a program that is not a library.
|
|
||||||
|
|
||||||
4. You may copy and distribute the Library (or a portion or
|
|
||||||
derivative of it, under Section 2) in object code or executable form
|
|
||||||
under the terms of Sections 1 and 2 above provided that you accompany
|
|
||||||
it with the complete corresponding machine-readable source code, which
|
|
||||||
must be distributed under the terms of Sections 1 and 2 above on a
|
|
||||||
medium customarily used for software interchange.
|
|
||||||
|
|
||||||
If distribution of object code is made by offering access to copy
|
|
||||||
from a designated place, then offering equivalent access to copy the
|
|
||||||
source code from the same place satisfies the requirement to
|
|
||||||
distribute the source code, even though third parties are not
|
|
||||||
compelled to copy the source along with the object code.
|
|
||||||
|
|
||||||
5. A program that contains no derivative of any portion of the
|
|
||||||
Library, but is designed to work with the Library by being compiled or
|
|
||||||
linked with it, is called a "work that uses the Library". Such a
|
|
||||||
work, in isolation, is not a derivative work of the Library, and
|
|
||||||
therefore falls outside the scope of this License.
|
|
||||||
|
|
||||||
However, linking a "work that uses the Library" with the Library
|
|
||||||
creates an executable that is a derivative of the Library (because it
|
|
||||||
contains portions of the Library), rather than a "work that uses the
|
|
||||||
library". The executable is therefore covered by this License.
|
|
||||||
Section 6 states terms for distribution of such executables.
|
|
||||||
|
|
||||||
When a "work that uses the Library" uses material from a header file
|
|
||||||
that is part of the Library, the object code for the work may be a
|
|
||||||
derivative work of the Library even though the source code is not.
|
|
||||||
Whether this is true is especially significant if the work can be
|
|
||||||
linked without the Library, or if the work is itself a library. The
|
|
||||||
threshold for this to be true is not precisely defined by law.
|
|
||||||
|
|
||||||
If such an object file uses only numerical parameters, data
|
|
||||||
structure layouts and accessors, and small macros and small inline
|
|
||||||
functions (ten lines or less in length), then the use of the object
|
|
||||||
file is unrestricted, regardless of whether it is legally a derivative
|
|
||||||
work. (Executables containing this object code plus portions of the
|
|
||||||
Library will still fall under Section 6.)
|
|
||||||
|
|
||||||
Otherwise, if the work is a derivative of the Library, you may
|
|
||||||
distribute the object code for the work under the terms of Section 6.
|
|
||||||
Any executables containing that work also fall under Section 6,
|
|
||||||
whether or not they are linked directly with the Library itself.
|
|
||||||
|
|
||||||
6. As an exception to the Sections above, you may also combine or
|
|
||||||
link a "work that uses the Library" with the Library to produce a
|
|
||||||
work containing portions of the Library, and distribute that work
|
|
||||||
under terms of your choice, provided that the terms permit
|
|
||||||
modification of the work for the customer's own use and reverse
|
|
||||||
engineering for debugging such modifications.
|
|
||||||
|
|
||||||
You must give prominent notice with each copy of the work that the
|
|
||||||
Library is used in it and that the Library and its use are covered by
|
|
||||||
this License. You must supply a copy of this License. If the work
|
|
||||||
during execution displays copyright notices, you must include the
|
|
||||||
copyright notice for the Library among them, as well as a reference
|
|
||||||
directing the user to the copy of this License. Also, you must do one
|
|
||||||
of these things:
|
|
||||||
|
|
||||||
a) Accompany the work with the complete corresponding
|
|
||||||
machine-readable source code for the Library including whatever
|
|
||||||
changes were used in the work (which must be distributed under
|
|
||||||
Sections 1 and 2 above); and, if the work is an executable linked
|
|
||||||
with the Library, with the complete machine-readable "work that
|
|
||||||
uses the Library", as object code and/or source code, so that the
|
|
||||||
user can modify the Library and then relink to produce a modified
|
|
||||||
executable containing the modified Library. (It is understood
|
|
||||||
that the user who changes the contents of definitions files in the
|
|
||||||
Library will not necessarily be able to recompile the application
|
|
||||||
to use the modified definitions.)
|
|
||||||
|
|
||||||
b) Use a suitable shared library mechanism for linking with the
|
|
||||||
Library. A suitable mechanism is one that (1) uses at run time a
|
|
||||||
copy of the library already present on the user's computer system,
|
|
||||||
rather than copying library functions into the executable, and (2)
|
|
||||||
will operate properly with a modified version of the library, if
|
|
||||||
the user installs one, as long as the modified version is
|
|
||||||
interface-compatible with the version that the work was made with.
|
|
||||||
|
|
||||||
c) Accompany the work with a written offer, valid for at
|
|
||||||
least three years, to give the same user the materials
|
|
||||||
specified in Subsection 6a, above, for a charge no more
|
|
||||||
than the cost of performing this distribution.
|
|
||||||
|
|
||||||
d) If distribution of the work is made by offering access to copy
|
|
||||||
from a designated place, offer equivalent access to copy the above
|
|
||||||
specified materials from the same place.
|
|
||||||
|
|
||||||
e) Verify that the user has already received a copy of these
|
|
||||||
materials or that you have already sent this user a copy.
|
|
||||||
|
|
||||||
For an executable, the required form of the "work that uses the
|
|
||||||
Library" must include any data and utility programs needed for
|
|
||||||
reproducing the executable from it. However, as a special exception,
|
|
||||||
the materials to be distributed need not include anything that is
|
|
||||||
normally distributed (in either source or binary form) with the major
|
|
||||||
components (compiler, kernel, and so on) of the operating system on
|
|
||||||
which the executable runs, unless that component itself accompanies
|
|
||||||
the executable.
|
|
||||||
|
|
||||||
It may happen that this requirement contradicts the license
|
|
||||||
restrictions of other proprietary libraries that do not normally
|
|
||||||
accompany the operating system. Such a contradiction means you cannot
|
|
||||||
use both them and the Library together in an executable that you
|
|
||||||
distribute.
|
|
||||||
|
|
||||||
7. You may place library facilities that are a work based on the
|
|
||||||
Library side-by-side in a single library together with other library
|
|
||||||
facilities not covered by this License, and distribute such a combined
|
|
||||||
library, provided that the separate distribution of the work based on
|
|
||||||
the Library and of the other library facilities is otherwise
|
|
||||||
permitted, and provided that you do these two things:
|
|
||||||
|
|
||||||
a) Accompany the combined library with a copy of the same work
|
|
||||||
based on the Library, uncombined with any other library
|
|
||||||
facilities. This must be distributed under the terms of the
|
|
||||||
Sections above.
|
|
||||||
|
|
||||||
b) Give prominent notice with the combined library of the fact
|
|
||||||
that part of it is a work based on the Library, and explaining
|
|
||||||
where to find the accompanying uncombined form of the same work.
|
|
||||||
|
|
||||||
8. You may not copy, modify, sublicense, link with, or distribute
|
|
||||||
the Library except as expressly provided under this License. Any
|
|
||||||
attempt otherwise to copy, modify, sublicense, link with, or
|
|
||||||
distribute the Library is void, and will automatically terminate your
|
|
||||||
rights under this License. However, parties who have received copies,
|
|
||||||
or rights, from you under this License will not have their licenses
|
|
||||||
terminated so long as such parties remain in full compliance.
|
|
||||||
|
|
||||||
9. You are not required to accept this License, since you have not
|
|
||||||
signed it. However, nothing else grants you permission to modify or
|
|
||||||
distribute the Library or its derivative works. These actions are
|
|
||||||
prohibited by law if you do not accept this License. Therefore, by
|
|
||||||
modifying or distributing the Library (or any work based on the
|
|
||||||
Library), you indicate your acceptance of this License to do so, and
|
|
||||||
all its terms and conditions for copying, distributing or modifying
|
|
||||||
the Library or works based on it.
|
|
||||||
|
|
||||||
10. Each time you redistribute the Library (or any work based on the
|
|
||||||
Library), the recipient automatically receives a license from the
|
|
||||||
original licensor to copy, distribute, link with or modify the Library
|
|
||||||
subject to these terms and conditions. You may not impose any further
|
|
||||||
restrictions on the recipients' exercise of the rights granted herein.
|
|
||||||
You are not responsible for enforcing compliance by third parties with
|
|
||||||
this License.
|
|
||||||
|
|
||||||
11. If, as a consequence of a court judgment or allegation of patent
|
|
||||||
infringement or for any other reason (not limited to patent issues),
|
|
||||||
conditions are imposed on you (whether by court order, agreement or
|
|
||||||
otherwise) that contradict the conditions of this License, they do not
|
|
||||||
excuse you from the conditions of this License. If you cannot
|
|
||||||
distribute so as to satisfy simultaneously your obligations under this
|
|
||||||
License and any other pertinent obligations, then as a consequence you
|
|
||||||
may not distribute the Library at all. For example, if a patent
|
|
||||||
license would not permit royalty-free redistribution of the Library by
|
|
||||||
all those who receive copies directly or indirectly through you, then
|
|
||||||
the only way you could satisfy both it and this License would be to
|
|
||||||
refrain entirely from distribution of the Library.
|
|
||||||
|
|
||||||
If any portion of this section is held invalid or unenforceable under any
|
|
||||||
particular circumstance, the balance of the section is intended to apply,
|
|
||||||
and the section as a whole is intended to apply in other circumstances.
|
|
||||||
|
|
||||||
It is not the purpose of this section to induce you to infringe any
|
|
||||||
patents or other property right claims or to contest validity of any
|
|
||||||
such claims; this section has the sole purpose of protecting the
|
|
||||||
integrity of the free software distribution system which is
|
|
||||||
implemented by public license practices. Many people have made
|
|
||||||
generous contributions to the wide range of software distributed
|
|
||||||
through that system in reliance on consistent application of that
|
|
||||||
system; it is up to the author/donor to decide if he or she is willing
|
|
||||||
to distribute software through any other system and a licensee cannot
|
|
||||||
impose that choice.
|
|
||||||
|
|
||||||
This section is intended to make thoroughly clear what is believed to
|
|
||||||
be a consequence of the rest of this License.
|
|
||||||
|
|
||||||
12. If the distribution and/or use of the Library is restricted in
|
|
||||||
certain countries either by patents or by copyrighted interfaces, the
|
|
||||||
original copyright holder who places the Library under this License may add
|
|
||||||
an explicit geographical distribution limitation excluding those countries,
|
|
||||||
so that distribution is permitted only in or among countries not thus
|
|
||||||
excluded. In such case, this License incorporates the limitation as if
|
|
||||||
written in the body of this License.
|
|
||||||
|
|
||||||
13. The Free Software Foundation may publish revised and/or new
|
|
||||||
versions of the Lesser General Public License from time to time.
|
|
||||||
Such new versions will be similar in spirit to the present version,
|
|
||||||
but may differ in detail to address new problems or concerns.
|
|
||||||
|
|
||||||
Each version is given a distinguishing version number. If the Library
|
|
||||||
specifies a version number of this License which applies to it and
|
|
||||||
"any later version", you have the option of following the terms and
|
|
||||||
conditions either of that version or of any later version published by
|
|
||||||
the Free Software Foundation. If the Library does not specify a
|
|
||||||
license version number, you may choose any version ever published by
|
|
||||||
the Free Software Foundation.
|
|
||||||
|
|
||||||
14. If you wish to incorporate parts of the Library into other free
|
|
||||||
programs whose distribution conditions are incompatible with these,
|
|
||||||
write to the author to ask for permission. For software which is
|
|
||||||
copyrighted by the Free Software Foundation, write to the Free
|
|
||||||
Software Foundation; we sometimes make exceptions for this. Our
|
|
||||||
decision will be guided by the two goals of preserving the free status
|
|
||||||
of all derivatives of our free software and of promoting the sharing
|
|
||||||
and reuse of software generally.
|
|
||||||
|
|
||||||
NO WARRANTY
|
|
||||||
|
|
||||||
15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
|
|
||||||
WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
|
|
||||||
EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
|
|
||||||
OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
|
|
||||||
KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
|
|
||||||
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
|
||||||
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
|
|
||||||
LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
|
|
||||||
THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
|
|
||||||
|
|
||||||
16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
|
|
||||||
WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
|
|
||||||
AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
|
|
||||||
FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
|
|
||||||
CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
|
|
||||||
LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
|
|
||||||
RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
|
|
||||||
FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
|
|
||||||
SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|
||||||
DAMAGES.
|
|
||||||
|
|
||||||
END OF TERMS AND CONDITIONS
|
|
||||||
|
|
||||||
How to Apply These Terms to Your New Libraries
|
|
||||||
|
|
||||||
If you develop a new library, and you want it to be of the greatest
|
|
||||||
possible use to the public, we recommend making it free software that
|
|
||||||
everyone can redistribute and change. You can do so by permitting
|
|
||||||
redistribution under these terms (or, alternatively, under the terms of the
|
|
||||||
ordinary General Public License).
|
|
||||||
|
|
||||||
To apply these terms, attach the following notices to the library. It is
|
|
||||||
safest to attach them to the start of each source file to most effectively
|
|
||||||
convey the exclusion of warranty; and each file should have at least the
|
|
||||||
"copyright" line and a pointer to where the full notice is found.
|
|
||||||
|
|
||||||
<one line to give the library's name and a brief idea of what it does.>
|
|
||||||
Copyright (C) <year> <name of author>
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
|
|
||||||
Also add information on how to contact you by electronic and paper mail.
|
|
||||||
|
|
||||||
You should also get your employer (if you work as a programmer) or your
|
|
||||||
school, if any, to sign a "copyright disclaimer" for the library, if
|
|
||||||
necessary. Here is a sample; alter the names:
|
|
||||||
|
|
||||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the
|
|
||||||
library `Frob' (a library for tweaking knobs) written by James Random Hacker.
|
|
||||||
|
|
||||||
<signature of Ty Coon>, 1 April 1990
|
|
||||||
Ty Coon, President of Vice
|
|
||||||
|
|
||||||
That's all there is to it!
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
1094
vendor/ezyang/htmlpurifier/NEWS
vendored
1094
vendor/ezyang/htmlpurifier/NEWS
vendored
File diff suppressed because it is too large
Load diff
24
vendor/ezyang/htmlpurifier/README
vendored
24
vendor/ezyang/htmlpurifier/README
vendored
|
@ -1,24 +0,0 @@
|
||||||
|
|
||||||
README
|
|
||||||
All about HTML Purifier
|
|
||||||
|
|
||||||
HTML Purifier is an HTML filtering solution that uses a unique combination
|
|
||||||
of robust whitelists and agressive parsing to ensure that not only are
|
|
||||||
XSS attacks thwarted, but the resulting HTML is standards compliant.
|
|
||||||
|
|
||||||
HTML Purifier is oriented towards richly formatted documents from
|
|
||||||
untrusted sources that require CSS and a full tag-set. This library can
|
|
||||||
be configured to accept a more restrictive set of tags, but it won't be
|
|
||||||
as efficient as more bare-bones parsers. It will, however, do the job
|
|
||||||
right, which may be more important.
|
|
||||||
|
|
||||||
Places to go:
|
|
||||||
|
|
||||||
* See INSTALL for a quick installation guide
|
|
||||||
* See docs/ for developer-oriented documentation, code examples and
|
|
||||||
an in-depth installation guide.
|
|
||||||
* See WYSIWYG for information on editors like TinyMCE and FCKeditor
|
|
||||||
|
|
||||||
HTML Purifier can be found on the web at: http://htmlpurifier.org/
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
150
vendor/ezyang/htmlpurifier/TODO
vendored
150
vendor/ezyang/htmlpurifier/TODO
vendored
|
@ -1,150 +0,0 @@
|
||||||
|
|
||||||
TODO List
|
|
||||||
|
|
||||||
= KEY ====================
|
|
||||||
# Flagship
|
|
||||||
- Regular
|
|
||||||
? Maybe I'll Do It
|
|
||||||
==========================
|
|
||||||
|
|
||||||
If no interest is expressed for a feature that may require a considerable
|
|
||||||
amount of effort to implement, it may get endlessly delayed. Do not be
|
|
||||||
afraid to cast your vote for the next feature to be implemented!
|
|
||||||
|
|
||||||
Things to do as soon as possible:
|
|
||||||
|
|
||||||
- http://htmlpurifier.org/phorum/read.php?3,5560,6307#msg-6307
|
|
||||||
- Think about allowing explicit order of operations hooks for transforms
|
|
||||||
- Fix "<.<" bug (trailing < is removed if not EOD)
|
|
||||||
- Build in better internal state dumps and debugging tools for remote
|
|
||||||
debugging
|
|
||||||
- Allowed/Allowed* have strange interactions when both set
|
|
||||||
? Transform lone embeds into object tags
|
|
||||||
- Deprecated config options that emit warnings when you set them (with'
|
|
||||||
a way of muting the warning if you really want to)
|
|
||||||
- Make HTML.Trusted work with Output.FlashCompat
|
|
||||||
- HTML.Trusted and HTML.SafeObject have funny interaction; general
|
|
||||||
problem is what to do when a module "supersedes" another
|
|
||||||
(see also tables and basic tables.) This is a little dicier
|
|
||||||
because HTML.SafeObject has some extra functionality that
|
|
||||||
trusted might find useful. See http://htmlpurifier.org/phorum/read.php?3,5762,6100
|
|
||||||
|
|
||||||
FUTURE VERSIONS
|
|
||||||
---------------
|
|
||||||
|
|
||||||
4.8 release [OMG CONFIG PONIES]
|
|
||||||
! Fix Printer. It's from the old days when we didn't have decent XML classes
|
|
||||||
! Factor demo.php into a set of Printer classes, and then create a stub
|
|
||||||
file for users here (inside the actual HTML Purifier library)
|
|
||||||
- Fix error handling with form construction
|
|
||||||
- Do encoding validation in Printers, or at least, where user data comes in
|
|
||||||
- Config: Add examples to everything (make built-in which also automatically
|
|
||||||
gives output)
|
|
||||||
- Add "register" field to config schemas to eliminate dependence on
|
|
||||||
naming conventions (try to remember why we ultimately decided on tihs)
|
|
||||||
|
|
||||||
5.0 release [HTML 5]
|
|
||||||
# Swap out code to use html5lib tokenizer and tree-builder
|
|
||||||
! Allow turning off of FixNesting and required attribute insertion
|
|
||||||
|
|
||||||
5.1 release [It's All About Trust] (floating)
|
|
||||||
# Implement untrusted, dangerous elements/attributes
|
|
||||||
# Implement IDREF support (harder than it seems, since you cannot have
|
|
||||||
IDREFs to non-existent IDs)
|
|
||||||
- Implement <area> (client and server side image maps are blocking
|
|
||||||
on IDREF support)
|
|
||||||
# Frameset XHTML 1.0 and HTML 4.01 doctypes
|
|
||||||
- Figure out how to simultaneously set %CSS.Trusted and %HTML.Trusted (?)
|
|
||||||
|
|
||||||
5.2 release [Error'ed]
|
|
||||||
# Error logging for filtering/cleanup procedures
|
|
||||||
# Additional support for poorly written HTML
|
|
||||||
- Microsoft Word HTML cleaning (i.e. MsoNormal, but research essential!)
|
|
||||||
- Friendly strict handling of <address> (block -> <br>)
|
|
||||||
- XSS-attempt detection--certain errors are flagged XSS-like
|
|
||||||
- Append something to duplicate IDs so they're still usable (impl. note: the
|
|
||||||
dupe detector would also need to detect the suffix as well)
|
|
||||||
|
|
||||||
6.0 release [Beyond HTML]
|
|
||||||
# Legit token based CSS parsing (will require revamping almost every
|
|
||||||
AttrDef class). Probably will use CSSTidy
|
|
||||||
# More control over allowed CSS properties using a modularization
|
|
||||||
# IRI support (this includes IDN)
|
|
||||||
- Standardize token armor for all areas of processing
|
|
||||||
|
|
||||||
7.0 release [To XML and Beyond]
|
|
||||||
- Extended HTML capabilities based on namespacing and tag transforms (COMPLEX)
|
|
||||||
- Hooks for adding custom processors to custom namespaced tags and
|
|
||||||
attributes, offer default implementation
|
|
||||||
- Lots of documentation and samples
|
|
||||||
|
|
||||||
Ongoing
|
|
||||||
- More refactoring to take advantage of PHP5's facilities
|
|
||||||
- Refactor unit tests into lots of test methods
|
|
||||||
- Plugins for major CMSes (COMPLEX)
|
|
||||||
- phpBB
|
|
||||||
- Also, a FAQ for extension writers with HTML Purifier
|
|
||||||
|
|
||||||
AutoFormat
|
|
||||||
- Smileys
|
|
||||||
- Syntax highlighting (with GeSHi) with <pre> and possibly <?php
|
|
||||||
- Look at http://drupal.org/project/Modules/category/63 for ideas
|
|
||||||
|
|
||||||
Neat feature related
|
|
||||||
! Support exporting configuration, so users can easily tweak settings
|
|
||||||
in the demo, and then copy-paste into their own setup
|
|
||||||
- Advanced URI filtering schemes (see docs/proposal-new-directives.txt)
|
|
||||||
- Allow scoped="scoped" attribute in <style> tags; may be troublesome
|
|
||||||
because regular CSS has no way of uniquely identifying nodes, so we'd
|
|
||||||
have to generate IDs
|
|
||||||
- Explain how to use HTML Purifier in non-PHP languages / create
|
|
||||||
a simple command line stub (or complicated?)
|
|
||||||
- Fixes for Firefox's inability to handle COL alignment props (Bug 915)
|
|
||||||
- Automatically add non-breaking spaces to empty table cells when
|
|
||||||
empty-cells:show is applied to have compatibility with Internet Explorer
|
|
||||||
- Table of Contents generation (XHTML Compiler might be reusable). May also
|
|
||||||
be out-of-band information.
|
|
||||||
- Full set of color keywords. Also, a way to add onto them without
|
|
||||||
finalizing the configuration object.
|
|
||||||
- Write a var_export and memcached DefinitionCache - Denis
|
|
||||||
- Built-in support for target="_blank" on all external links
|
|
||||||
- Convert RTL/LTR override characters to <bdo> tags, or vice versa on demand.
|
|
||||||
Also, enable disabling of directionality
|
|
||||||
? Externalize inline CSS to promote clean HTML, proposed by Sander Tekelenburg
|
|
||||||
? Remove redundant tags, ex. <u><u>Underlined</u></u>. Implementation notes:
|
|
||||||
1. Analyzing which tags to remove duplicants
|
|
||||||
2. Ensure attributes are merged into the parent tag
|
|
||||||
3. Extend the tag exclusion system to specify whether or not the
|
|
||||||
contents should be dropped or not (currently, there's code that could do
|
|
||||||
something like this if it didn't drop the inner text too.)
|
|
||||||
? Make AutoParagraph also support paragraph-izing double <br> tags, and not
|
|
||||||
just double newlines. This is kind of tough to do in the current framework,
|
|
||||||
though, and might be reasonably approximated by search replacing double <br>s
|
|
||||||
with newlines before running it through HTML Purifier.
|
|
||||||
|
|
||||||
Maintenance related (slightly boring)
|
|
||||||
# CHMOD install script for PEAR installs
|
|
||||||
! Factor out command line parser into its own class, and unit test it
|
|
||||||
- Reduce size of internal data-structures (esp. HTMLDefinition)
|
|
||||||
- Allow merging configurations. Thus,
|
|
||||||
a -> b -> default
|
|
||||||
c -> d -> default
|
|
||||||
becomes
|
|
||||||
a -> b -> c -> d -> default
|
|
||||||
Maybe allow more fine-grained tuning of this behavior. Alternatively,
|
|
||||||
encourage people to use short plist depths before building them up.
|
|
||||||
- Time PHPT tests
|
|
||||||
|
|
||||||
ChildDef related (very boring)
|
|
||||||
- Abstract ChildDef_BlockQuote to work with all elements that only
|
|
||||||
allow blocks in them, required or optional
|
|
||||||
- Implement lenient <ruby> child validation
|
|
||||||
|
|
||||||
Wontfix
|
|
||||||
- Non-lossy smart alternate character encoding transformations (unless
|
|
||||||
patch provided)
|
|
||||||
- Pretty-printing HTML: users can use Tidy on the output on entire page
|
|
||||||
- Native content compression, whitespace stripping: use gzip if this is
|
|
||||||
really important
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
1
vendor/ezyang/htmlpurifier/VERSION
vendored
1
vendor/ezyang/htmlpurifier/VERSION
vendored
|
@ -1 +0,0 @@
|
||||||
4.7.0
|
|
4
vendor/ezyang/htmlpurifier/WHATSNEW
vendored
4
vendor/ezyang/htmlpurifier/WHATSNEW
vendored
|
@ -1,4 +0,0 @@
|
||||||
HTML Purifier 4.7.0 is a bugfix release, collecting two years
|
|
||||||
worth of accumulated bug fixes. Highlighted bugfixes are updated
|
|
||||||
YouTube filter code, corrected rgb() CSS parsing, and one new
|
|
||||||
configuration option, %AutoFormat.RemoveEmpty.Predicate.
|
|
20
vendor/ezyang/htmlpurifier/WYSIWYG
vendored
20
vendor/ezyang/htmlpurifier/WYSIWYG
vendored
|
@ -1,20 +0,0 @@
|
||||||
|
|
||||||
WYSIWYG - What You See Is What You Get
|
|
||||||
HTML Purifier: A Pretty Good Fit for TinyMCE and FCKeditor
|
|
||||||
|
|
||||||
Javascript-based WYSIWYG editors, simply stated, are quite amazing. But I've
|
|
||||||
always been wary about using them due to security issues: they handle the
|
|
||||||
client-side magic, but once you've been served a piping hot load of unfiltered
|
|
||||||
HTML, what should be done then? In some situations, you can serve it uncleaned,
|
|
||||||
since you only offer these facilities to trusted(?) authors.
|
|
||||||
|
|
||||||
Unfortunantely, for blog comments and anonymous input, BBCode, Textile and
|
|
||||||
other markup languages still reign supreme. Put simply: filtering HTML is
|
|
||||||
hard work, and these WYSIWYG authors don't offer anything to alleviate that
|
|
||||||
trouble. Therein lies the solution:
|
|
||||||
|
|
||||||
HTML Purifier is perfect for filtering pure-HTML input from WYSIWYG editors.
|
|
||||||
|
|
||||||
Enough said.
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
22
vendor/ezyang/htmlpurifier/composer.json
vendored
22
vendor/ezyang/htmlpurifier/composer.json
vendored
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"name": "ezyang/htmlpurifier",
|
|
||||||
"description": "Standards compliant HTML filter written in PHP",
|
|
||||||
"type": "library",
|
|
||||||
"keywords": ["html"],
|
|
||||||
"homepage": "http://htmlpurifier.org/",
|
|
||||||
"license": "LGPL",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Edward Z. Yang",
|
|
||||||
"email": "admin@htmlpurifier.org",
|
|
||||||
"homepage": "http://ezyang.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"php": ">=5.2"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-0": { "HTMLPurifier": "library/" },
|
|
||||||
"files": ["library/HTMLPurifier.composer.php"]
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,91 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decorator/extender XSLT processor specifically for HTML documents.
|
|
||||||
*/
|
|
||||||
class ConfigDoc_HTMLXSLTProcessor
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instance of XSLTProcessor
|
|
||||||
*/
|
|
||||||
protected $xsltProcessor;
|
|
||||||
|
|
||||||
public function __construct($proc = false)
|
|
||||||
{
|
|
||||||
if ($proc === false) $proc = new XSLTProcessor();
|
|
||||||
$this->xsltProcessor = $proc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @note Allows a string $xsl filename to be passed
|
|
||||||
*/
|
|
||||||
public function importStylesheet($xsl)
|
|
||||||
{
|
|
||||||
if (is_string($xsl)) {
|
|
||||||
$xsl_file = $xsl;
|
|
||||||
$xsl = new DOMDocument();
|
|
||||||
$xsl->load($xsl_file);
|
|
||||||
}
|
|
||||||
return $this->xsltProcessor->importStylesheet($xsl);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Transforms an XML file into compatible XHTML based on the stylesheet
|
|
||||||
* @param $xml XML DOM tree, or string filename
|
|
||||||
* @return string HTML output
|
|
||||||
* @todo Rename to transformToXHTML, as transformToHTML is misleading
|
|
||||||
*/
|
|
||||||
public function transformToHTML($xml)
|
|
||||||
{
|
|
||||||
if (is_string($xml)) {
|
|
||||||
$dom = new DOMDocument();
|
|
||||||
$dom->load($xml);
|
|
||||||
} else {
|
|
||||||
$dom = $xml;
|
|
||||||
}
|
|
||||||
$out = $this->xsltProcessor->transformToXML($dom);
|
|
||||||
|
|
||||||
// fudges for HTML backwards compatibility
|
|
||||||
// assumes that document is XHTML
|
|
||||||
$out = str_replace('/>', ' />', $out); // <br /> not <br/>
|
|
||||||
$out = str_replace(' xmlns=""', '', $out); // rm unnecessary xmlns
|
|
||||||
|
|
||||||
if (class_exists('Tidy')) {
|
|
||||||
// cleanup output
|
|
||||||
$config = array(
|
|
||||||
'indent' => true,
|
|
||||||
'output-xhtml' => true,
|
|
||||||
'wrap' => 80
|
|
||||||
);
|
|
||||||
$tidy = new Tidy;
|
|
||||||
$tidy->parseString($out, $config, 'utf8');
|
|
||||||
$tidy->cleanRepair();
|
|
||||||
$out = (string) $tidy;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $out;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bulk sets parameters for the XSL stylesheet
|
|
||||||
* @param array $options Associative array of options to set
|
|
||||||
*/
|
|
||||||
public function setParameters($options)
|
|
||||||
{
|
|
||||||
foreach ($options as $name => $value) {
|
|
||||||
$this->xsltProcessor->setParameter('', $name, $value);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Forward any other calls to the XSLT processor
|
|
||||||
*/
|
|
||||||
public function __call($name, $arguments)
|
|
||||||
{
|
|
||||||
call_user_func_array(array($this->xsltProcessor, $name), $arguments);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
164
vendor/ezyang/htmlpurifier/extras/FSTools.php
vendored
164
vendor/ezyang/htmlpurifier/extras/FSTools.php
vendored
|
@ -1,164 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filesystem tools not provided by default; can recursively create, copy
|
|
||||||
* and delete folders. Some template methods are provided for extensibility.
|
|
||||||
*
|
|
||||||
* @note This class must be instantiated to be used, although it does
|
|
||||||
* not maintain state.
|
|
||||||
*/
|
|
||||||
class FSTools
|
|
||||||
{
|
|
||||||
|
|
||||||
private static $singleton;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a global instance of FSTools
|
|
||||||
*/
|
|
||||||
public static function singleton()
|
|
||||||
{
|
|
||||||
if (empty(FSTools::$singleton)) FSTools::$singleton = new FSTools();
|
|
||||||
return FSTools::$singleton;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets our global singleton to something else; useful for overloading
|
|
||||||
* functions.
|
|
||||||
*/
|
|
||||||
public static function setSingleton($singleton)
|
|
||||||
{
|
|
||||||
FSTools::$singleton = $singleton;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively creates a directory
|
|
||||||
* @param string $folder Name of folder to create
|
|
||||||
* @note Adapted from the PHP manual comment 76612
|
|
||||||
*/
|
|
||||||
public function mkdirr($folder)
|
|
||||||
{
|
|
||||||
$folders = preg_split("#[\\\\/]#", $folder);
|
|
||||||
$base = '';
|
|
||||||
for($i = 0, $c = count($folders); $i < $c; $i++) {
|
|
||||||
if(empty($folders[$i])) {
|
|
||||||
if (!$i) {
|
|
||||||
// special case for root level
|
|
||||||
$base .= DIRECTORY_SEPARATOR;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$base .= $folders[$i];
|
|
||||||
if(!is_dir($base)){
|
|
||||||
$this->mkdir($base);
|
|
||||||
}
|
|
||||||
$base .= DIRECTORY_SEPARATOR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copy a file, or recursively copy a folder and its contents; modified
|
|
||||||
* so that copied files, if PHP, have includes removed
|
|
||||||
* @note Adapted from http://aidanlister.com/repos/v/function.copyr.php
|
|
||||||
*/
|
|
||||||
public function copyr($source, $dest)
|
|
||||||
{
|
|
||||||
// Simple copy for a file
|
|
||||||
if (is_file($source)) {
|
|
||||||
return $this->copy($source, $dest);
|
|
||||||
}
|
|
||||||
// Make destination directory
|
|
||||||
if (!is_dir($dest)) {
|
|
||||||
$this->mkdir($dest);
|
|
||||||
}
|
|
||||||
// Loop through the folder
|
|
||||||
$dir = $this->dir($source);
|
|
||||||
while ( false !== ($entry = $dir->read()) ) {
|
|
||||||
// Skip pointers
|
|
||||||
if ($entry == '.' || $entry == '..') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!$this->copyable($entry)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Deep copy directories
|
|
||||||
if ($dest !== "$source/$entry") {
|
|
||||||
$this->copyr("$source/$entry", "$dest/$entry");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Clean up
|
|
||||||
$dir->close();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Overloadable function that tests a filename for copyability. By
|
|
||||||
* default, everything should be copied; you can restrict things to
|
|
||||||
* ignore hidden files, unreadable files, etc. This function
|
|
||||||
* applies to copyr().
|
|
||||||
*/
|
|
||||||
public function copyable($file)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Delete a file, or a folder and its contents
|
|
||||||
* @note Adapted from http://aidanlister.com/repos/v/function.rmdirr.php
|
|
||||||
*/
|
|
||||||
public function rmdirr($dirname)
|
|
||||||
{
|
|
||||||
// Sanity check
|
|
||||||
if (!$this->file_exists($dirname)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Simple delete for a file
|
|
||||||
if ($this->is_file($dirname) || $this->is_link($dirname)) {
|
|
||||||
return $this->unlink($dirname);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Loop through the folder
|
|
||||||
$dir = $this->dir($dirname);
|
|
||||||
while (false !== $entry = $dir->read()) {
|
|
||||||
// Skip pointers
|
|
||||||
if ($entry == '.' || $entry == '..') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// Recurse
|
|
||||||
$this->rmdirr($dirname . DIRECTORY_SEPARATOR . $entry);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clean up
|
|
||||||
$dir->close();
|
|
||||||
return $this->rmdir($dirname);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Recursively globs a directory.
|
|
||||||
*/
|
|
||||||
public function globr($dir, $pattern, $flags = NULL)
|
|
||||||
{
|
|
||||||
$files = $this->glob("$dir/$pattern", $flags);
|
|
||||||
if ($files === false) $files = array();
|
|
||||||
$sub_dirs = $this->glob("$dir/*", GLOB_ONLYDIR);
|
|
||||||
if ($sub_dirs === false) $sub_dirs = array();
|
|
||||||
foreach ($sub_dirs as $sub_dir) {
|
|
||||||
$sub_files = $this->globr($sub_dir, $pattern, $flags);
|
|
||||||
$files = array_merge($files, $sub_files);
|
|
||||||
}
|
|
||||||
return $files;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows for PHP functions to be called and be stubbed.
|
|
||||||
* @warning This function will not work for functions that need
|
|
||||||
* to pass references; manually define a stub function for those.
|
|
||||||
*/
|
|
||||||
public function __call($name, $args)
|
|
||||||
{
|
|
||||||
return call_user_func_array($name, $args);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
141
vendor/ezyang/htmlpurifier/extras/FSTools/File.php
vendored
141
vendor/ezyang/htmlpurifier/extras/FSTools/File.php
vendored
|
@ -1,141 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a file in the filesystem
|
|
||||||
*
|
|
||||||
* @warning Be sure to distinguish between get() and write() versus
|
|
||||||
* read() and put(), the former operates on the entire file, while
|
|
||||||
* the latter operates on a handle.
|
|
||||||
*/
|
|
||||||
class FSTools_File
|
|
||||||
{
|
|
||||||
|
|
||||||
/** Filename of file this object represents */
|
|
||||||
protected $name;
|
|
||||||
|
|
||||||
/** Handle for the file */
|
|
||||||
protected $handle = false;
|
|
||||||
|
|
||||||
/** Instance of FSTools for interfacing with filesystem */
|
|
||||||
protected $fs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filename of file you wish to instantiate.
|
|
||||||
* @note This file need not exist
|
|
||||||
*/
|
|
||||||
public function __construct($name, $fs = false)
|
|
||||||
{
|
|
||||||
$this->name = $name;
|
|
||||||
$this->fs = $fs ? $fs : FSTools::singleton();
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns the filename of the file. */
|
|
||||||
public function getName() {return $this->name;}
|
|
||||||
|
|
||||||
/** Returns directory of the file without trailing slash */
|
|
||||||
public function getDirectory() {return $this->fs->dirname($this->name);}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Retrieves the contents of a file
|
|
||||||
* @todo Throw an exception if file doesn't exist
|
|
||||||
*/
|
|
||||||
public function get()
|
|
||||||
{
|
|
||||||
return $this->fs->file_get_contents($this->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Writes contents to a file, creates new file if necessary */
|
|
||||||
public function write($contents)
|
|
||||||
{
|
|
||||||
return $this->fs->file_put_contents($this->name, $contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Deletes the file */
|
|
||||||
public function delete()
|
|
||||||
{
|
|
||||||
return $this->fs->unlink($this->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns true if file exists and is a file. */
|
|
||||||
public function exists()
|
|
||||||
{
|
|
||||||
return $this->fs->is_file($this->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns last file modification time */
|
|
||||||
public function getMTime()
|
|
||||||
{
|
|
||||||
return $this->fs->filemtime($this->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Chmod a file
|
|
||||||
* @note We ignore errors because of some weird owner trickery due
|
|
||||||
* to SVN duality
|
|
||||||
*/
|
|
||||||
public function chmod($octal_code)
|
|
||||||
{
|
|
||||||
return @$this->fs->chmod($this->name, $octal_code);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Opens file's handle */
|
|
||||||
public function open($mode)
|
|
||||||
{
|
|
||||||
if ($this->handle) $this->close();
|
|
||||||
$this->handle = $this->fs->fopen($this->name, $mode);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Closes file's handle */
|
|
||||||
public function close()
|
|
||||||
{
|
|
||||||
if (!$this->handle) return false;
|
|
||||||
$status = $this->fs->fclose($this->handle);
|
|
||||||
$this->handle = false;
|
|
||||||
return $status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Retrieves a line from an open file, with optional max length $length */
|
|
||||||
public function getLine($length = null)
|
|
||||||
{
|
|
||||||
if (!$this->handle) $this->open('r');
|
|
||||||
if ($length === null) return $this->fs->fgets($this->handle);
|
|
||||||
else return $this->fs->fgets($this->handle, $length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Retrieves a character from an open file */
|
|
||||||
public function getChar()
|
|
||||||
{
|
|
||||||
if (!$this->handle) $this->open('r');
|
|
||||||
return $this->fs->fgetc($this->handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Retrieves an $length bytes of data from an open data */
|
|
||||||
public function read($length)
|
|
||||||
{
|
|
||||||
if (!$this->handle) $this->open('r');
|
|
||||||
return $this->fs->fread($this->handle, $length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Writes to an open file */
|
|
||||||
public function put($string)
|
|
||||||
{
|
|
||||||
if (!$this->handle) $this->open('a');
|
|
||||||
return $this->fs->fwrite($this->handle, $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Returns TRUE if the end of the file has been reached */
|
|
||||||
public function eof()
|
|
||||||
{
|
|
||||||
if (!$this->handle) return true;
|
|
||||||
return $this->fs->feof($this->handle);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __destruct()
|
|
||||||
{
|
|
||||||
if ($this->handle) $this->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a stub include that automatically configures the include path.
|
|
||||||
*/
|
|
||||||
|
|
||||||
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
|
|
||||||
require_once 'HTMLPurifierExtras.php';
|
|
||||||
require_once 'HTMLPurifierExtras.autoload.php';
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Convenience file that registers autoload handler for HTML Purifier.
|
|
||||||
*
|
|
||||||
* @warning
|
|
||||||
* This autoloader does not contain the compatibility code seen in
|
|
||||||
* HTMLPurifier_Bootstrap; the user is expected to make any necessary
|
|
||||||
* changes to use this library.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (function_exists('spl_autoload_register')) {
|
|
||||||
spl_autoload_register(array('HTMLPurifierExtras', 'autoload'));
|
|
||||||
if (function_exists('__autoload')) {
|
|
||||||
// Be polite and ensure that userland autoload gets retained
|
|
||||||
spl_autoload_register('__autoload');
|
|
||||||
}
|
|
||||||
} elseif (!function_exists('__autoload')) {
|
|
||||||
function __autoload($class)
|
|
||||||
{
|
|
||||||
return HTMLPurifierExtras::autoload($class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,31 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Meta-class for HTML Purifier's extra class hierarchies, similar to
|
|
||||||
* HTMLPurifier_Bootstrap.
|
|
||||||
*/
|
|
||||||
class HTMLPurifierExtras
|
|
||||||
{
|
|
||||||
|
|
||||||
public static function autoload($class)
|
|
||||||
{
|
|
||||||
$path = HTMLPurifierExtras::getPath($class);
|
|
||||||
if (!$path) return false;
|
|
||||||
require $path;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function getPath($class)
|
|
||||||
{
|
|
||||||
if (
|
|
||||||
strncmp('FSTools', $class, 7) !== 0 &&
|
|
||||||
strncmp('ConfigDoc', $class, 9) !== 0
|
|
||||||
) return false;
|
|
||||||
// Custom implementations can go here
|
|
||||||
// Standard implementation:
|
|
||||||
return str_replace('_', '/', $class) . '.php';
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
32
vendor/ezyang/htmlpurifier/extras/README
vendored
32
vendor/ezyang/htmlpurifier/extras/README
vendored
|
@ -1,32 +0,0 @@
|
||||||
|
|
||||||
HTML Purifier Extras
|
|
||||||
The Method Behind The Madness!
|
|
||||||
|
|
||||||
The extras/ folder in HTML Purifier contains--you guessed it--extra things
|
|
||||||
for HTML Purifier. Specifically, these are two extra libraries called
|
|
||||||
FSTools and ConfigSchema. They're extra for a reason: you don't need them
|
|
||||||
if you're using HTML Purifier for normal usage: filtering HTML. However,
|
|
||||||
if you're a developer, and would like to test HTML Purifier, or need to
|
|
||||||
use one of HTML Purifier's maintenance scripts, chances are they'll need
|
|
||||||
these libraries. Who knows: maybe you'll find them useful too!
|
|
||||||
|
|
||||||
Here are the libraries:
|
|
||||||
|
|
||||||
|
|
||||||
FSTools
|
|
||||||
-------
|
|
||||||
|
|
||||||
Short for File System Tools, this is a poor-man's object-oriented wrapper for
|
|
||||||
the filesystem. It currently consists of two classes:
|
|
||||||
|
|
||||||
- FSTools: This is a singleton that contains a manner of useful functions
|
|
||||||
such as recursive glob, directory removal, etc, as well as the ability
|
|
||||||
to call arbitrary native PHP functions through it like $FS->fopen(...).
|
|
||||||
This makes it a lot simpler to mock these filesystem calls for unit testing.
|
|
||||||
|
|
||||||
- FSTools_File: This object represents a single file, and has almost any
|
|
||||||
method imaginable one would need.
|
|
||||||
|
|
||||||
Check the files themselves for more information.
|
|
||||||
|
|
||||||
vim: et sw=4 sts=4
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This is a stub include that automatically configures the include path.
|
|
||||||
*/
|
|
||||||
|
|
||||||
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
|
|
||||||
require_once 'HTMLPurifier/Bootstrap.php';
|
|
||||||
require_once 'HTMLPurifier.autoload.php';
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,27 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Convenience file that registers autoload handler for HTML Purifier.
|
|
||||||
* It also does some sanity checks.
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (function_exists('spl_autoload_register') && function_exists('spl_autoload_unregister')) {
|
|
||||||
// We need unregister for our pre-registering functionality
|
|
||||||
HTMLPurifier_Bootstrap::registerAutoload();
|
|
||||||
if (function_exists('__autoload')) {
|
|
||||||
// Be polite and ensure that userland autoload gets retained
|
|
||||||
spl_autoload_register('__autoload');
|
|
||||||
}
|
|
||||||
} elseif (!function_exists('__autoload')) {
|
|
||||||
function __autoload($class)
|
|
||||||
{
|
|
||||||
return HTMLPurifier_Bootstrap::autoload($class);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ini_get('zend.ze1_compatibility_mode')) {
|
|
||||||
trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,4 +0,0 @@
|
||||||
<?php
|
|
||||||
if (!defined('HTMLPURIFIER_PREFIX')) {
|
|
||||||
define('HTMLPURIFIER_PREFIX', dirname(__FILE__));
|
|
||||||
}
|
|
|
@ -1,25 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Defines a function wrapper for HTML Purifier for quick use.
|
|
||||||
* @note ''HTMLPurifier()'' is NOT the same as ''new HTMLPurifier()''
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Purify HTML.
|
|
||||||
* @param string $html String HTML to purify
|
|
||||||
* @param mixed $config Configuration to use, can be any value accepted by
|
|
||||||
* HTMLPurifier_Config::create()
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
function HTMLPurifier($html, $config = null)
|
|
||||||
{
|
|
||||||
static $purifier = false;
|
|
||||||
if (!$purifier) {
|
|
||||||
$purifier = new HTMLPurifier();
|
|
||||||
}
|
|
||||||
return $purifier->purify($html, $config);
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,229 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* This file was auto-generated by generate-includes.php and includes all of
|
|
||||||
* the core files required by HTML Purifier. Use this if performance is a
|
|
||||||
* primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
|
|
||||||
* FILE, changes will be overwritten the next time the script is run.
|
|
||||||
*
|
|
||||||
* @version 4.7.0
|
|
||||||
*
|
|
||||||
* @warning
|
|
||||||
* You must *not* include any other HTML Purifier files before this file,
|
|
||||||
* because 'require' not 'require_once' is used.
|
|
||||||
*
|
|
||||||
* @warning
|
|
||||||
* This file requires that the include path contains the HTML Purifier
|
|
||||||
* library directory; this is not auto-set.
|
|
||||||
*/
|
|
||||||
|
|
||||||
require 'HTMLPurifier.php';
|
|
||||||
require 'HTMLPurifier/Arborize.php';
|
|
||||||
require 'HTMLPurifier/AttrCollections.php';
|
|
||||||
require 'HTMLPurifier/AttrDef.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform.php';
|
|
||||||
require 'HTMLPurifier/AttrTypes.php';
|
|
||||||
require 'HTMLPurifier/AttrValidator.php';
|
|
||||||
require 'HTMLPurifier/Bootstrap.php';
|
|
||||||
require 'HTMLPurifier/Definition.php';
|
|
||||||
require 'HTMLPurifier/CSSDefinition.php';
|
|
||||||
require 'HTMLPurifier/ChildDef.php';
|
|
||||||
require 'HTMLPurifier/Config.php';
|
|
||||||
require 'HTMLPurifier/ConfigSchema.php';
|
|
||||||
require 'HTMLPurifier/ContentSets.php';
|
|
||||||
require 'HTMLPurifier/Context.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCacheFactory.php';
|
|
||||||
require 'HTMLPurifier/Doctype.php';
|
|
||||||
require 'HTMLPurifier/DoctypeRegistry.php';
|
|
||||||
require 'HTMLPurifier/ElementDef.php';
|
|
||||||
require 'HTMLPurifier/Encoder.php';
|
|
||||||
require 'HTMLPurifier/EntityLookup.php';
|
|
||||||
require 'HTMLPurifier/EntityParser.php';
|
|
||||||
require 'HTMLPurifier/ErrorCollector.php';
|
|
||||||
require 'HTMLPurifier/ErrorStruct.php';
|
|
||||||
require 'HTMLPurifier/Exception.php';
|
|
||||||
require 'HTMLPurifier/Filter.php';
|
|
||||||
require 'HTMLPurifier/Generator.php';
|
|
||||||
require 'HTMLPurifier/HTMLDefinition.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule.php';
|
|
||||||
require 'HTMLPurifier/HTMLModuleManager.php';
|
|
||||||
require 'HTMLPurifier/IDAccumulator.php';
|
|
||||||
require 'HTMLPurifier/Injector.php';
|
|
||||||
require 'HTMLPurifier/Language.php';
|
|
||||||
require 'HTMLPurifier/LanguageFactory.php';
|
|
||||||
require 'HTMLPurifier/Length.php';
|
|
||||||
require 'HTMLPurifier/Lexer.php';
|
|
||||||
require 'HTMLPurifier/Node.php';
|
|
||||||
require 'HTMLPurifier/PercentEncoder.php';
|
|
||||||
require 'HTMLPurifier/PropertyList.php';
|
|
||||||
require 'HTMLPurifier/PropertyListIterator.php';
|
|
||||||
require 'HTMLPurifier/Queue.php';
|
|
||||||
require 'HTMLPurifier/Strategy.php';
|
|
||||||
require 'HTMLPurifier/StringHash.php';
|
|
||||||
require 'HTMLPurifier/StringHashParser.php';
|
|
||||||
require 'HTMLPurifier/TagTransform.php';
|
|
||||||
require 'HTMLPurifier/Token.php';
|
|
||||||
require 'HTMLPurifier/TokenFactory.php';
|
|
||||||
require 'HTMLPurifier/URI.php';
|
|
||||||
require 'HTMLPurifier/URIDefinition.php';
|
|
||||||
require 'HTMLPurifier/URIFilter.php';
|
|
||||||
require 'HTMLPurifier/URIParser.php';
|
|
||||||
require 'HTMLPurifier/URIScheme.php';
|
|
||||||
require 'HTMLPurifier/URISchemeRegistry.php';
|
|
||||||
require 'HTMLPurifier/UnitConverter.php';
|
|
||||||
require 'HTMLPurifier/VarParser.php';
|
|
||||||
require 'HTMLPurifier/VarParserException.php';
|
|
||||||
require 'HTMLPurifier/Zipper.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Clone.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Enum.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Integer.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Lang.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Switch.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/Text.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Number.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/AlphaValue.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Background.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/BackgroundPosition.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Border.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Color.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Composite.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Filter.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Font.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/FontFamily.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Ident.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Length.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/ListStyle.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Multiple.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/Percentage.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/TextDecoration.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/CSS/URI.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Bool.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Nmtokens.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Class.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Color.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/FrameTarget.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/ID.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Pixels.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/Length.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/LinkTypes.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/HTML/MultiLength.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI/Email.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI/Host.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI/IPv4.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI/IPv6.php';
|
|
||||||
require 'HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Background.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/BdoDir.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/BgColor.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/BoolToCSS.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Border.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/EnumToCSS.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/ImgRequired.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/ImgSpace.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Input.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Lang.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Length.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Name.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/NameSync.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Nofollow.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/SafeEmbed.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/SafeObject.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/SafeParam.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/ScriptRequired.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/TargetBlank.php';
|
|
||||||
require 'HTMLPurifier/AttrTransform/Textarea.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Chameleon.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Custom.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Empty.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/List.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Required.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Optional.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/StrictBlockquote.php';
|
|
||||||
require 'HTMLPurifier/ChildDef/Table.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache/Decorator.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache/Null.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache/Serializer.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache/Decorator/Cleanup.php';
|
|
||||||
require 'HTMLPurifier/DefinitionCache/Decorator/Memory.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Bdo.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/CommonAttributes.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Edit.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Forms.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Hypertext.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Iframe.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Image.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Legacy.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/List.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Name.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Nofollow.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Object.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Presentation.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Proprietary.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Ruby.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/SafeEmbed.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/SafeObject.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/SafeScripting.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Scripting.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/StyleAttribute.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tables.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Target.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/TargetBlank.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Text.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/Name.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/Proprietary.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/Strict.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/Transitional.php';
|
|
||||||
require 'HTMLPurifier/HTMLModule/Tidy/XHTML.php';
|
|
||||||
require 'HTMLPurifier/Injector/AutoParagraph.php';
|
|
||||||
require 'HTMLPurifier/Injector/DisplayLinkURI.php';
|
|
||||||
require 'HTMLPurifier/Injector/Linkify.php';
|
|
||||||
require 'HTMLPurifier/Injector/PurifierLinkify.php';
|
|
||||||
require 'HTMLPurifier/Injector/RemoveEmpty.php';
|
|
||||||
require 'HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
|
|
||||||
require 'HTMLPurifier/Injector/SafeObject.php';
|
|
||||||
require 'HTMLPurifier/Lexer/DOMLex.php';
|
|
||||||
require 'HTMLPurifier/Lexer/DirectLex.php';
|
|
||||||
require 'HTMLPurifier/Node/Comment.php';
|
|
||||||
require 'HTMLPurifier/Node/Element.php';
|
|
||||||
require 'HTMLPurifier/Node/Text.php';
|
|
||||||
require 'HTMLPurifier/Strategy/Composite.php';
|
|
||||||
require 'HTMLPurifier/Strategy/Core.php';
|
|
||||||
require 'HTMLPurifier/Strategy/FixNesting.php';
|
|
||||||
require 'HTMLPurifier/Strategy/MakeWellFormed.php';
|
|
||||||
require 'HTMLPurifier/Strategy/RemoveForeignElements.php';
|
|
||||||
require 'HTMLPurifier/Strategy/ValidateAttributes.php';
|
|
||||||
require 'HTMLPurifier/TagTransform/Font.php';
|
|
||||||
require 'HTMLPurifier/TagTransform/Simple.php';
|
|
||||||
require 'HTMLPurifier/Token/Comment.php';
|
|
||||||
require 'HTMLPurifier/Token/Tag.php';
|
|
||||||
require 'HTMLPurifier/Token/Empty.php';
|
|
||||||
require 'HTMLPurifier/Token/End.php';
|
|
||||||
require 'HTMLPurifier/Token/Start.php';
|
|
||||||
require 'HTMLPurifier/Token/Text.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/DisableExternal.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/DisableExternalResources.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/DisableResources.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/HostBlacklist.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/MakeAbsolute.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/Munge.php';
|
|
||||||
require 'HTMLPurifier/URIFilter/SafeIframe.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/data.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/file.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/ftp.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/http.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/https.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/mailto.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/news.php';
|
|
||||||
require 'HTMLPurifier/URIScheme/nntp.php';
|
|
||||||
require 'HTMLPurifier/VarParser/Flexible.php';
|
|
||||||
require 'HTMLPurifier/VarParser/Native.php';
|
|
|
@ -1,30 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Emulation layer for code that used kses(), substituting in HTML Purifier.
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once dirname(__FILE__) . '/HTMLPurifier.auto.php';
|
|
||||||
|
|
||||||
function kses($string, $allowed_html, $allowed_protocols = null)
|
|
||||||
{
|
|
||||||
$config = HTMLPurifier_Config::createDefault();
|
|
||||||
$allowed_elements = array();
|
|
||||||
$allowed_attributes = array();
|
|
||||||
foreach ($allowed_html as $element => $attributes) {
|
|
||||||
$allowed_elements[$element] = true;
|
|
||||||
foreach ($attributes as $attribute => $x) {
|
|
||||||
$allowed_attributes["$element.$attribute"] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$config->set('HTML.AllowedElements', $allowed_elements);
|
|
||||||
$config->set('HTML.AllowedAttributes', $allowed_attributes);
|
|
||||||
if ($allowed_protocols !== null) {
|
|
||||||
$config->set('URI.AllowedSchemes', $allowed_protocols);
|
|
||||||
}
|
|
||||||
$purifier = new HTMLPurifier($config);
|
|
||||||
return $purifier->purify($string);
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* Convenience stub file that adds HTML Purifier's library file to the path
|
|
||||||
* without any other side-effects.
|
|
||||||
*/
|
|
||||||
|
|
||||||
set_include_path(dirname(__FILE__) . PATH_SEPARATOR . get_include_path() );
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
292
vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
vendored
292
vendor/ezyang/htmlpurifier/library/HTMLPurifier.php
vendored
|
@ -1,292 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/*! @mainpage
|
|
||||||
*
|
|
||||||
* HTML Purifier is an HTML filter that will take an arbitrary snippet of
|
|
||||||
* HTML and rigorously test, validate and filter it into a version that
|
|
||||||
* is safe for output onto webpages. It achieves this by:
|
|
||||||
*
|
|
||||||
* -# Lexing (parsing into tokens) the document,
|
|
||||||
* -# Executing various strategies on the tokens:
|
|
||||||
* -# Removing all elements not in the whitelist,
|
|
||||||
* -# Making the tokens well-formed,
|
|
||||||
* -# Fixing the nesting of the nodes, and
|
|
||||||
* -# Validating attributes of the nodes; and
|
|
||||||
* -# Generating HTML from the purified tokens.
|
|
||||||
*
|
|
||||||
* However, most users will only need to interface with the HTMLPurifier
|
|
||||||
* and HTMLPurifier_Config.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
HTML Purifier 4.7.0 - Standards Compliant HTML Filtering
|
|
||||||
Copyright (C) 2006-2008 Edward Z. Yang
|
|
||||||
|
|
||||||
This library is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU Lesser General Public
|
|
||||||
License as published by the Free Software Foundation; either
|
|
||||||
version 2.1 of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This library is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
||||||
Lesser General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU Lesser General Public
|
|
||||||
License along with this library; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Facade that coordinates HTML Purifier's subsystems in order to purify HTML.
|
|
||||||
*
|
|
||||||
* @note There are several points in which configuration can be specified
|
|
||||||
* for HTML Purifier. The precedence of these (from lowest to
|
|
||||||
* highest) is as follows:
|
|
||||||
* -# Instance: new HTMLPurifier($config)
|
|
||||||
* -# Invocation: purify($html, $config)
|
|
||||||
* These configurations are entirely independent of each other and
|
|
||||||
* are *not* merged (this behavior may change in the future).
|
|
||||||
*
|
|
||||||
* @todo We need an easier way to inject strategies using the configuration
|
|
||||||
* object.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Version of HTML Purifier.
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
public $version = '4.7.0';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Constant with version of HTML Purifier.
|
|
||||||
*/
|
|
||||||
const VERSION = '4.7.0';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Global configuration object.
|
|
||||||
* @type HTMLPurifier_Config
|
|
||||||
*/
|
|
||||||
public $config;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Array of extra filter objects to run on HTML,
|
|
||||||
* for backwards compatibility.
|
|
||||||
* @type HTMLPurifier_Filter[]
|
|
||||||
*/
|
|
||||||
private $filters = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Single instance of HTML Purifier.
|
|
||||||
* @type HTMLPurifier
|
|
||||||
*/
|
|
||||||
private static $instance;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_Strategy_Core
|
|
||||||
*/
|
|
||||||
protected $strategy;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_Generator
|
|
||||||
*/
|
|
||||||
protected $generator;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Resultant context of last run purification.
|
|
||||||
* Is an array of contexts if the last called method was purifyArray().
|
|
||||||
* @type HTMLPurifier_Context
|
|
||||||
*/
|
|
||||||
public $context;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Initializes the purifier.
|
|
||||||
*
|
|
||||||
* @param HTMLPurifier_Config $config Optional HTMLPurifier_Config object
|
|
||||||
* for all instances of the purifier, if omitted, a default
|
|
||||||
* configuration is supplied (which can be overridden on a
|
|
||||||
* per-use basis).
|
|
||||||
* The parameter can also be any type that
|
|
||||||
* HTMLPurifier_Config::create() supports.
|
|
||||||
*/
|
|
||||||
public function __construct($config = null)
|
|
||||||
{
|
|
||||||
$this->config = HTMLPurifier_Config::create($config);
|
|
||||||
$this->strategy = new HTMLPurifier_Strategy_Core();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a filter to process the output. First come first serve
|
|
||||||
*
|
|
||||||
* @param HTMLPurifier_Filter $filter HTMLPurifier_Filter object
|
|
||||||
*/
|
|
||||||
public function addFilter($filter)
|
|
||||||
{
|
|
||||||
trigger_error(
|
|
||||||
'HTMLPurifier->addFilter() is deprecated, use configuration directives' .
|
|
||||||
' in the Filter namespace or Filter.Custom',
|
|
||||||
E_USER_WARNING
|
|
||||||
);
|
|
||||||
$this->filters[] = $filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters an HTML snippet/document to be XSS-free and standards-compliant.
|
|
||||||
*
|
|
||||||
* @param string $html String of HTML to purify
|
|
||||||
* @param HTMLPurifier_Config $config Config object for this operation,
|
|
||||||
* if omitted, defaults to the config object specified during this
|
|
||||||
* object's construction. The parameter can also be any type
|
|
||||||
* that HTMLPurifier_Config::create() supports.
|
|
||||||
*
|
|
||||||
* @return string Purified HTML
|
|
||||||
*/
|
|
||||||
public function purify($html, $config = null)
|
|
||||||
{
|
|
||||||
// :TODO: make the config merge in, instead of replace
|
|
||||||
$config = $config ? HTMLPurifier_Config::create($config) : $this->config;
|
|
||||||
|
|
||||||
// implementation is partially environment dependant, partially
|
|
||||||
// configuration dependant
|
|
||||||
$lexer = HTMLPurifier_Lexer::create($config);
|
|
||||||
|
|
||||||
$context = new HTMLPurifier_Context();
|
|
||||||
|
|
||||||
// setup HTML generator
|
|
||||||
$this->generator = new HTMLPurifier_Generator($config, $context);
|
|
||||||
$context->register('Generator', $this->generator);
|
|
||||||
|
|
||||||
// set up global context variables
|
|
||||||
if ($config->get('Core.CollectErrors')) {
|
|
||||||
// may get moved out if other facilities use it
|
|
||||||
$language_factory = HTMLPurifier_LanguageFactory::instance();
|
|
||||||
$language = $language_factory->create($config, $context);
|
|
||||||
$context->register('Locale', $language);
|
|
||||||
|
|
||||||
$error_collector = new HTMLPurifier_ErrorCollector($context);
|
|
||||||
$context->register('ErrorCollector', $error_collector);
|
|
||||||
}
|
|
||||||
|
|
||||||
// setup id_accumulator context, necessary due to the fact that
|
|
||||||
// AttrValidator can be called from many places
|
|
||||||
$id_accumulator = HTMLPurifier_IDAccumulator::build($config, $context);
|
|
||||||
$context->register('IDAccumulator', $id_accumulator);
|
|
||||||
|
|
||||||
$html = HTMLPurifier_Encoder::convertToUTF8($html, $config, $context);
|
|
||||||
|
|
||||||
// setup filters
|
|
||||||
$filter_flags = $config->getBatch('Filter');
|
|
||||||
$custom_filters = $filter_flags['Custom'];
|
|
||||||
unset($filter_flags['Custom']);
|
|
||||||
$filters = array();
|
|
||||||
foreach ($filter_flags as $filter => $flag) {
|
|
||||||
if (!$flag) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (strpos($filter, '.') !== false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$class = "HTMLPurifier_Filter_$filter";
|
|
||||||
$filters[] = new $class;
|
|
||||||
}
|
|
||||||
foreach ($custom_filters as $filter) {
|
|
||||||
// maybe "HTMLPurifier_Filter_$filter", but be consistent with AutoFormat
|
|
||||||
$filters[] = $filter;
|
|
||||||
}
|
|
||||||
$filters = array_merge($filters, $this->filters);
|
|
||||||
// maybe prepare(), but later
|
|
||||||
|
|
||||||
for ($i = 0, $filter_size = count($filters); $i < $filter_size; $i++) {
|
|
||||||
$html = $filters[$i]->preFilter($html, $config, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
// purified HTML
|
|
||||||
$html =
|
|
||||||
$this->generator->generateFromTokens(
|
|
||||||
// list of tokens
|
|
||||||
$this->strategy->execute(
|
|
||||||
// list of un-purified tokens
|
|
||||||
$lexer->tokenizeHTML(
|
|
||||||
// un-purified HTML
|
|
||||||
$html,
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
),
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
for ($i = $filter_size - 1; $i >= 0; $i--) {
|
|
||||||
$html = $filters[$i]->postFilter($html, $config, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
$html = HTMLPurifier_Encoder::convertFromUTF8($html, $config, $context);
|
|
||||||
$this->context =& $context;
|
|
||||||
return $html;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Filters an array of HTML snippets
|
|
||||||
*
|
|
||||||
* @param string[] $array_of_html Array of html snippets
|
|
||||||
* @param HTMLPurifier_Config $config Optional config object for this operation.
|
|
||||||
* See HTMLPurifier::purify() for more details.
|
|
||||||
*
|
|
||||||
* @return string[] Array of purified HTML
|
|
||||||
*/
|
|
||||||
public function purifyArray($array_of_html, $config = null)
|
|
||||||
{
|
|
||||||
$context_array = array();
|
|
||||||
foreach ($array_of_html as $key => $html) {
|
|
||||||
$array_of_html[$key] = $this->purify($html, $config);
|
|
||||||
$context_array[$key] = $this->context;
|
|
||||||
}
|
|
||||||
$this->context = $context_array;
|
|
||||||
return $array_of_html;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Singleton for enforcing just one HTML Purifier in your system
|
|
||||||
*
|
|
||||||
* @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
|
|
||||||
* HTMLPurifier instance to overload singleton with,
|
|
||||||
* or HTMLPurifier_Config instance to configure the
|
|
||||||
* generated version with.
|
|
||||||
*
|
|
||||||
* @return HTMLPurifier
|
|
||||||
*/
|
|
||||||
public static function instance($prototype = null)
|
|
||||||
{
|
|
||||||
if (!self::$instance || $prototype) {
|
|
||||||
if ($prototype instanceof HTMLPurifier) {
|
|
||||||
self::$instance = $prototype;
|
|
||||||
} elseif ($prototype) {
|
|
||||||
self::$instance = new HTMLPurifier($prototype);
|
|
||||||
} else {
|
|
||||||
self::$instance = new HTMLPurifier();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return self::$instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Singleton for enforcing just one HTML Purifier in your system
|
|
||||||
*
|
|
||||||
* @param HTMLPurifier|HTMLPurifier_Config $prototype Optional prototype
|
|
||||||
* HTMLPurifier instance to overload singleton with,
|
|
||||||
* or HTMLPurifier_Config instance to configure the
|
|
||||||
* generated version with.
|
|
||||||
*
|
|
||||||
* @return HTMLPurifier
|
|
||||||
* @note Backwards compatibility, see instance()
|
|
||||||
*/
|
|
||||||
public static function getInstance($prototype = null)
|
|
||||||
{
|
|
||||||
return HTMLPurifier::instance($prototype);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,223 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @file
|
|
||||||
* This file was auto-generated by generate-includes.php and includes all of
|
|
||||||
* the core files required by HTML Purifier. This is a convenience stub that
|
|
||||||
* includes all files using dirname(__FILE__) and require_once. PLEASE DO NOT
|
|
||||||
* EDIT THIS FILE, changes will be overwritten the next time the script is run.
|
|
||||||
*
|
|
||||||
* Changes to include_path are not necessary.
|
|
||||||
*/
|
|
||||||
|
|
||||||
$__dir = dirname(__FILE__);
|
|
||||||
|
|
||||||
require_once $__dir . '/HTMLPurifier.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Arborize.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrCollections.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTypes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrValidator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Bootstrap.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Definition.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/CSSDefinition.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Config.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ConfigSchema.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ContentSets.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Context.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCacheFactory.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Doctype.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DoctypeRegistry.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ElementDef.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Encoder.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/EntityLookup.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/EntityParser.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ErrorCollector.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ErrorStruct.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Exception.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Filter.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Generator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLDefinition.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModuleManager.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/IDAccumulator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Language.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/LanguageFactory.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Length.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Lexer.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Node.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/PercentEncoder.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/PropertyList.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/PropertyListIterator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Queue.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/StringHash.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/StringHashParser.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/TagTransform.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/TokenFactory.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URI.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIDefinition.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIParser.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URISchemeRegistry.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/UnitConverter.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/VarParser.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/VarParserException.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Zipper.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Clone.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Enum.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Integer.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Lang.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Switch.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/Text.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Number.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/AlphaValue.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Background.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/BackgroundPosition.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Border.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Color.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Composite.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/DenyElementDecorator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Filter.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Font.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/FontFamily.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Ident.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ImportantDecorator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Length.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/ListStyle.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Multiple.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/Percentage.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/TextDecoration.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/CSS/URI.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Bool.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Nmtokens.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Class.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Color.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/FrameTarget.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/ID.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Pixels.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/Length.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/LinkTypes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/HTML/MultiLength.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI/Email.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI/Host.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv4.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI/IPv6.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrDef/URI/Email/SimpleCheck.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Background.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/BdoDir.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/BgColor.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/BoolToCSS.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Border.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/EnumToCSS.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/ImgRequired.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/ImgSpace.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Input.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Lang.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Length.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Name.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/NameSync.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Nofollow.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeEmbed.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeObject.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/SafeParam.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/ScriptRequired.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/TargetBlank.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/AttrTransform/Textarea.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Chameleon.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Custom.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Empty.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/List.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Required.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Optional.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/StrictBlockquote.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/ChildDef/Table.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache/Null.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache/Serializer.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator/Cleanup.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/DefinitionCache/Decorator/Memory.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Bdo.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/CommonAttributes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Edit.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Forms.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Hypertext.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Iframe.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Image.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Legacy.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/List.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Name.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Nofollow.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/NonXMLCommonAttributes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Object.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Presentation.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Proprietary.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Ruby.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/SafeEmbed.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/SafeObject.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/SafeScripting.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Scripting.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/StyleAttribute.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tables.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Target.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/TargetBlank.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Text.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/XMLCommonAttributes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Name.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Proprietary.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Strict.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/Transitional.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/HTMLModule/Tidy/XHTML.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/AutoParagraph.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/DisplayLinkURI.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/Linkify.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/PurifierLinkify.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/RemoveEmpty.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/RemoveSpansWithoutAttributes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Injector/SafeObject.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Lexer/DOMLex.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Lexer/DirectLex.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Node/Comment.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Node/Element.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Node/Text.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/Composite.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/Core.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/FixNesting.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/MakeWellFormed.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/RemoveForeignElements.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Strategy/ValidateAttributes.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/TagTransform/Font.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/TagTransform/Simple.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/Comment.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/Tag.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/Empty.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/End.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/Start.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/Token/Text.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternal.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/DisableExternalResources.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/DisableResources.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/HostBlacklist.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/MakeAbsolute.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/Munge.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIFilter/SafeIframe.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/data.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/file.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/ftp.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/http.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/https.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/mailto.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/news.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/URIScheme/nntp.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/VarParser/Flexible.php';
|
|
||||||
require_once $__dir . '/HTMLPurifier/VarParser/Native.php';
|
|
|
@ -1,71 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a stream of HTMLPurifier_Token into an HTMLPurifier_Node,
|
|
||||||
* and back again.
|
|
||||||
*
|
|
||||||
* @note This transformation is not an equivalence. We mutate the input
|
|
||||||
* token stream to make it so; see all [MUT] markers in code.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_Arborize
|
|
||||||
{
|
|
||||||
public static function arborize($tokens, $config, $context) {
|
|
||||||
$definition = $config->getHTMLDefinition();
|
|
||||||
$parent = new HTMLPurifier_Token_Start($definition->info_parent);
|
|
||||||
$stack = array($parent->toNode());
|
|
||||||
foreach ($tokens as $token) {
|
|
||||||
$token->skip = null; // [MUT]
|
|
||||||
$token->carryover = null; // [MUT]
|
|
||||||
if ($token instanceof HTMLPurifier_Token_End) {
|
|
||||||
$token->start = null; // [MUT]
|
|
||||||
$r = array_pop($stack);
|
|
||||||
assert($r->name === $token->name);
|
|
||||||
assert(empty($token->attr));
|
|
||||||
$r->endCol = $token->col;
|
|
||||||
$r->endLine = $token->line;
|
|
||||||
$r->endArmor = $token->armor;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$node = $token->toNode();
|
|
||||||
$stack[count($stack)-1]->children[] = $node;
|
|
||||||
if ($token instanceof HTMLPurifier_Token_Start) {
|
|
||||||
$stack[] = $node;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert(count($stack) == 1);
|
|
||||||
return $stack[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function flatten($node, $config, $context) {
|
|
||||||
$level = 0;
|
|
||||||
$nodes = array($level => new HTMLPurifier_Queue(array($node)));
|
|
||||||
$closingTokens = array();
|
|
||||||
$tokens = array();
|
|
||||||
do {
|
|
||||||
while (!$nodes[$level]->isEmpty()) {
|
|
||||||
$node = $nodes[$level]->shift(); // FIFO
|
|
||||||
list($start, $end) = $node->toTokenPair();
|
|
||||||
if ($level > 0) {
|
|
||||||
$tokens[] = $start;
|
|
||||||
}
|
|
||||||
if ($end !== NULL) {
|
|
||||||
$closingTokens[$level][] = $end;
|
|
||||||
}
|
|
||||||
if ($node instanceof HTMLPurifier_Node_Element) {
|
|
||||||
$level++;
|
|
||||||
$nodes[$level] = new HTMLPurifier_Queue();
|
|
||||||
foreach ($node->children as $childNode) {
|
|
||||||
$nodes[$level]->push($childNode);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$level--;
|
|
||||||
if ($level && isset($closingTokens[$level])) {
|
|
||||||
while ($token = array_pop($closingTokens[$level])) {
|
|
||||||
$tokens[] = $token;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} while ($level > 0);
|
|
||||||
return $tokens;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,143 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Defines common attribute collections that modules reference
|
|
||||||
*/
|
|
||||||
|
|
||||||
class HTMLPurifier_AttrCollections
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Associative array of attribute collections, indexed by name.
|
|
||||||
* @type array
|
|
||||||
*/
|
|
||||||
public $info = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Performs all expansions on internal data for use by other inclusions
|
|
||||||
* It also collects all attribute collection extensions from
|
|
||||||
* modules
|
|
||||||
* @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
|
|
||||||
* @param HTMLPurifier_HTMLModule[] $modules Hash array of HTMLPurifier_HTMLModule members
|
|
||||||
*/
|
|
||||||
public function __construct($attr_types, $modules)
|
|
||||||
{
|
|
||||||
// load extensions from the modules
|
|
||||||
foreach ($modules as $module) {
|
|
||||||
foreach ($module->attr_collections as $coll_i => $coll) {
|
|
||||||
if (!isset($this->info[$coll_i])) {
|
|
||||||
$this->info[$coll_i] = array();
|
|
||||||
}
|
|
||||||
foreach ($coll as $attr_i => $attr) {
|
|
||||||
if ($attr_i === 0 && isset($this->info[$coll_i][$attr_i])) {
|
|
||||||
// merge in includes
|
|
||||||
$this->info[$coll_i][$attr_i] = array_merge(
|
|
||||||
$this->info[$coll_i][$attr_i],
|
|
||||||
$attr
|
|
||||||
);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$this->info[$coll_i][$attr_i] = $attr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// perform internal expansions and inclusions
|
|
||||||
foreach ($this->info as $name => $attr) {
|
|
||||||
// merge attribute collections that include others
|
|
||||||
$this->performInclusions($this->info[$name]);
|
|
||||||
// replace string identifiers with actual attribute objects
|
|
||||||
$this->expandIdentifiers($this->info[$name], $attr_types);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Takes a reference to an attribute associative array and performs
|
|
||||||
* all inclusions specified by the zero index.
|
|
||||||
* @param array &$attr Reference to attribute array
|
|
||||||
*/
|
|
||||||
public function performInclusions(&$attr)
|
|
||||||
{
|
|
||||||
if (!isset($attr[0])) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$merge = $attr[0];
|
|
||||||
$seen = array(); // recursion guard
|
|
||||||
// loop through all the inclusions
|
|
||||||
for ($i = 0; isset($merge[$i]); $i++) {
|
|
||||||
if (isset($seen[$merge[$i]])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$seen[$merge[$i]] = true;
|
|
||||||
// foreach attribute of the inclusion, copy it over
|
|
||||||
if (!isset($this->info[$merge[$i]])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
foreach ($this->info[$merge[$i]] as $key => $value) {
|
|
||||||
if (isset($attr[$key])) {
|
|
||||||
continue;
|
|
||||||
} // also catches more inclusions
|
|
||||||
$attr[$key] = $value;
|
|
||||||
}
|
|
||||||
if (isset($this->info[$merge[$i]][0])) {
|
|
||||||
// recursion
|
|
||||||
$merge = array_merge($merge, $this->info[$merge[$i]][0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
unset($attr[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Expands all string identifiers in an attribute array by replacing
|
|
||||||
* them with the appropriate values inside HTMLPurifier_AttrTypes
|
|
||||||
* @param array &$attr Reference to attribute array
|
|
||||||
* @param HTMLPurifier_AttrTypes $attr_types HTMLPurifier_AttrTypes instance
|
|
||||||
*/
|
|
||||||
public function expandIdentifiers(&$attr, $attr_types)
|
|
||||||
{
|
|
||||||
// because foreach will process new elements we add, make sure we
|
|
||||||
// skip duplicates
|
|
||||||
$processed = array();
|
|
||||||
|
|
||||||
foreach ($attr as $def_i => $def) {
|
|
||||||
// skip inclusions
|
|
||||||
if ($def_i === 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($processed[$def_i])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// determine whether or not attribute is required
|
|
||||||
if ($required = (strpos($def_i, '*') !== false)) {
|
|
||||||
// rename the definition
|
|
||||||
unset($attr[$def_i]);
|
|
||||||
$def_i = trim($def_i, '*');
|
|
||||||
$attr[$def_i] = $def;
|
|
||||||
}
|
|
||||||
|
|
||||||
$processed[$def_i] = true;
|
|
||||||
|
|
||||||
// if we've already got a literal object, move on
|
|
||||||
if (is_object($def)) {
|
|
||||||
// preserve previous required
|
|
||||||
$attr[$def_i]->required = ($required || $attr[$def_i]->required);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($def === false) {
|
|
||||||
unset($attr[$def_i]);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($t = $attr_types->get($def)) {
|
|
||||||
$attr[$def_i] = $t;
|
|
||||||
$attr[$def_i]->required = $required;
|
|
||||||
} else {
|
|
||||||
unset($attr[$def_i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,138 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Base class for all validating attribute definitions.
|
|
||||||
*
|
|
||||||
* This family of classes forms the core for not only HTML attribute validation,
|
|
||||||
* but also any sort of string that needs to be validated or cleaned (which
|
|
||||||
* means CSS properties and composite definitions are defined here too).
|
|
||||||
* Besides defining (through code) what precisely makes the string valid,
|
|
||||||
* subclasses are also responsible for cleaning the code if possible.
|
|
||||||
*/
|
|
||||||
|
|
||||||
abstract class HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells us whether or not an HTML attribute is minimized.
|
|
||||||
* Has no meaning in other contexts.
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
public $minimized = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tells us whether or not an HTML attribute is required.
|
|
||||||
* Has no meaning in other contexts
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
public $required = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates and cleans passed string according to a definition.
|
|
||||||
*
|
|
||||||
* @param string $string String to be validated and cleaned.
|
|
||||||
* @param HTMLPurifier_Config $config Mandatory HTMLPurifier_Config object.
|
|
||||||
* @param HTMLPurifier_Context $context Mandatory HTMLPurifier_Context object.
|
|
||||||
*/
|
|
||||||
abstract public function validate($string, $config, $context);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Convenience method that parses a string as if it were CDATA.
|
|
||||||
*
|
|
||||||
* This method process a string in the manner specified at
|
|
||||||
* <http://www.w3.org/TR/html4/types.html#h-6.2> by removing
|
|
||||||
* leading and trailing whitespace, ignoring line feeds, and replacing
|
|
||||||
* carriage returns and tabs with spaces. While most useful for HTML
|
|
||||||
* attributes specified as CDATA, it can also be applied to most CSS
|
|
||||||
* values.
|
|
||||||
*
|
|
||||||
* @note This method is not entirely standards compliant, as trim() removes
|
|
||||||
* more types of whitespace than specified in the spec. In practice,
|
|
||||||
* this is rarely a problem, as those extra characters usually have
|
|
||||||
* already been removed by HTMLPurifier_Encoder.
|
|
||||||
*
|
|
||||||
* @warning This processing is inconsistent with XML's whitespace handling
|
|
||||||
* as specified by section 3.3.3 and referenced XHTML 1.0 section
|
|
||||||
* 4.7. However, note that we are NOT necessarily
|
|
||||||
* parsing XML, thus, this behavior may still be correct. We
|
|
||||||
* assume that newlines have been normalized.
|
|
||||||
*/
|
|
||||||
public function parseCDATA($string)
|
|
||||||
{
|
|
||||||
$string = trim($string);
|
|
||||||
$string = str_replace(array("\n", "\t", "\r"), ' ', $string);
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Factory method for creating this class from a string.
|
|
||||||
* @param string $string String construction info
|
|
||||||
* @return HTMLPurifier_AttrDef Created AttrDef object corresponding to $string
|
|
||||||
*/
|
|
||||||
public function make($string)
|
|
||||||
{
|
|
||||||
// default implementation, return a flyweight of this object.
|
|
||||||
// If $string has an effect on the returned object (i.e. you
|
|
||||||
// need to overload this method), it is best
|
|
||||||
// to clone or instantiate new copies. (Instantiation is safer.)
|
|
||||||
return $this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Removes spaces from rgb(0, 0, 0) so that shorthand CSS properties work
|
|
||||||
* properly. THIS IS A HACK!
|
|
||||||
* @param string $string a CSS colour definition
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
protected function mungeRgb($string)
|
|
||||||
{
|
|
||||||
return preg_replace('/rgb\((\d+)\s*,\s*(\d+)\s*,\s*(\d+)\)/', 'rgb(\1,\2,\3)', $string);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Parses a possibly escaped CSS string and returns the "pure"
|
|
||||||
* version of it.
|
|
||||||
*/
|
|
||||||
protected function expandCSSEscape($string)
|
|
||||||
{
|
|
||||||
// flexibly parse it
|
|
||||||
$ret = '';
|
|
||||||
for ($i = 0, $c = strlen($string); $i < $c; $i++) {
|
|
||||||
if ($string[$i] === '\\') {
|
|
||||||
$i++;
|
|
||||||
if ($i >= $c) {
|
|
||||||
$ret .= '\\';
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ctype_xdigit($string[$i])) {
|
|
||||||
$code = $string[$i];
|
|
||||||
for ($a = 1, $i++; $i < $c && $a < 6; $i++, $a++) {
|
|
||||||
if (!ctype_xdigit($string[$i])) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$code .= $string[$i];
|
|
||||||
}
|
|
||||||
// We have to be extremely careful when adding
|
|
||||||
// new characters, to make sure we're not breaking
|
|
||||||
// the encoding.
|
|
||||||
$char = HTMLPurifier_Encoder::unichr(hexdec($code));
|
|
||||||
if (HTMLPurifier_Encoder::cleanUTF8($char) === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$ret .= $char;
|
|
||||||
if ($i < $c && trim($string[$i]) !== '') {
|
|
||||||
$i--;
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($string[$i] === "\n") {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$ret .= $string[$i];
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,106 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the HTML attribute style, otherwise known as CSS.
|
|
||||||
* @note We don't implement the whole CSS specification, so it might be
|
|
||||||
* difficult to reuse this component in the context of validating
|
|
||||||
* actual stylesheet declarations.
|
|
||||||
* @note If we were really serious about validating the CSS, we would
|
|
||||||
* tokenize the styles and then parse the tokens. Obviously, we
|
|
||||||
* are not doing that. Doing that could seriously harm performance,
|
|
||||||
* but would make these components a lot more viable for a CSS
|
|
||||||
* filtering solution.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $css
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($css, $config, $context)
|
|
||||||
{
|
|
||||||
$css = $this->parseCDATA($css);
|
|
||||||
|
|
||||||
$definition = $config->getCSSDefinition();
|
|
||||||
|
|
||||||
// we're going to break the spec and explode by semicolons.
|
|
||||||
// This is because semicolon rarely appears in escaped form
|
|
||||||
// Doing this is generally flaky but fast
|
|
||||||
// IT MIGHT APPEAR IN URIs, see HTMLPurifier_AttrDef_CSSURI
|
|
||||||
// for details
|
|
||||||
|
|
||||||
$declarations = explode(';', $css);
|
|
||||||
$propvalues = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name of the current CSS property being validated.
|
|
||||||
*/
|
|
||||||
$property = false;
|
|
||||||
$context->register('CurrentCSSProperty', $property);
|
|
||||||
|
|
||||||
foreach ($declarations as $declaration) {
|
|
||||||
if (!$declaration) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!strpos($declaration, ':')) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
list($property, $value) = explode(':', $declaration, 2);
|
|
||||||
$property = trim($property);
|
|
||||||
$value = trim($value);
|
|
||||||
$ok = false;
|
|
||||||
do {
|
|
||||||
if (isset($definition->info[$property])) {
|
|
||||||
$ok = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (ctype_lower($property)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
$property = strtolower($property);
|
|
||||||
if (isset($definition->info[$property])) {
|
|
||||||
$ok = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} while (0);
|
|
||||||
if (!$ok) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// inefficient call, since the validator will do this again
|
|
||||||
if (strtolower(trim($value)) !== 'inherit') {
|
|
||||||
// inherit works for everything (but only on the base property)
|
|
||||||
$result = $definition->info[$property]->validate(
|
|
||||||
$value,
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$result = 'inherit';
|
|
||||||
}
|
|
||||||
if ($result === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$propvalues[$property] = $result;
|
|
||||||
}
|
|
||||||
|
|
||||||
$context->destroy('CurrentCSSProperty');
|
|
||||||
|
|
||||||
// procedure does not write the new CSS simultaneously, so it's
|
|
||||||
// slightly inefficient, but it's the only way of getting rid of
|
|
||||||
// duplicates. Perhaps config to optimize it, but not now.
|
|
||||||
|
|
||||||
$new_declarations = '';
|
|
||||||
foreach ($propvalues as $prop => $value) {
|
|
||||||
$new_declarations .= "$prop:$value;";
|
|
||||||
}
|
|
||||||
|
|
||||||
return $new_declarations ? $new_declarations : false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,34 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
class HTMLPurifier_AttrDef_CSS_AlphaValue extends HTMLPurifier_AttrDef_CSS_Number
|
|
||||||
{
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(false); // opacity is non-negative, but we will clamp it
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $number
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function validate($number, $config, $context)
|
|
||||||
{
|
|
||||||
$result = parent::validate($number, $config, $context);
|
|
||||||
if ($result === false) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
$float = (float)$result;
|
|
||||||
if ($float < 0.0) {
|
|
||||||
$result = '0';
|
|
||||||
}
|
|
||||||
if ($float > 1.0) {
|
|
||||||
$result = '1';
|
|
||||||
}
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,111 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates shorthand CSS property background.
|
|
||||||
* @warning Does not support url tokens that have internal spaces.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Local copy of component validators.
|
|
||||||
* @type HTMLPurifier_AttrDef[]
|
|
||||||
* @note See HTMLPurifier_AttrDef_Font::$info for a similar impl.
|
|
||||||
*/
|
|
||||||
protected $info;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
*/
|
|
||||||
public function __construct($config)
|
|
||||||
{
|
|
||||||
$def = $config->getCSSDefinition();
|
|
||||||
$this->info['background-color'] = $def->info['background-color'];
|
|
||||||
$this->info['background-image'] = $def->info['background-image'];
|
|
||||||
$this->info['background-repeat'] = $def->info['background-repeat'];
|
|
||||||
$this->info['background-attachment'] = $def->info['background-attachment'];
|
|
||||||
$this->info['background-position'] = $def->info['background-position'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
// regular pre-processing
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// munge rgb() decl if necessary
|
|
||||||
$string = $this->mungeRgb($string);
|
|
||||||
|
|
||||||
// assumes URI doesn't have spaces in it
|
|
||||||
$bits = explode(' ', $string); // bits to process
|
|
||||||
|
|
||||||
$caught = array();
|
|
||||||
$caught['color'] = false;
|
|
||||||
$caught['image'] = false;
|
|
||||||
$caught['repeat'] = false;
|
|
||||||
$caught['attachment'] = false;
|
|
||||||
$caught['position'] = false;
|
|
||||||
|
|
||||||
$i = 0; // number of catches
|
|
||||||
|
|
||||||
foreach ($bits as $bit) {
|
|
||||||
if ($bit === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
foreach ($caught as $key => $status) {
|
|
||||||
if ($key != 'position') {
|
|
||||||
if ($status !== false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$r = $this->info['background-' . $key]->validate($bit, $config, $context);
|
|
||||||
} else {
|
|
||||||
$r = $bit;
|
|
||||||
}
|
|
||||||
if ($r === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($key == 'position') {
|
|
||||||
if ($caught[$key] === false) {
|
|
||||||
$caught[$key] = '';
|
|
||||||
}
|
|
||||||
$caught[$key] .= $r . ' ';
|
|
||||||
} else {
|
|
||||||
$caught[$key] = $r;
|
|
||||||
}
|
|
||||||
$i++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$i) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($caught['position'] !== false) {
|
|
||||||
$caught['position'] = $this->info['background-position']->
|
|
||||||
validate($caught['position'], $config, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
$ret = array();
|
|
||||||
foreach ($caught as $value) {
|
|
||||||
if ($value === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$ret[] = $value;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($ret)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return implode(' ', $ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,157 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/* W3C says:
|
|
||||||
[ // adjective and number must be in correct order, even if
|
|
||||||
// you could switch them without introducing ambiguity.
|
|
||||||
// some browsers support that syntax
|
|
||||||
[
|
|
||||||
<percentage> | <length> | left | center | right
|
|
||||||
]
|
|
||||||
[
|
|
||||||
<percentage> | <length> | top | center | bottom
|
|
||||||
]?
|
|
||||||
] |
|
|
||||||
[ // this signifies that the vertical and horizontal adjectives
|
|
||||||
// can be arbitrarily ordered, however, there can only be two,
|
|
||||||
// one of each, or none at all
|
|
||||||
[
|
|
||||||
left | center | right
|
|
||||||
] ||
|
|
||||||
[
|
|
||||||
top | center | bottom
|
|
||||||
]
|
|
||||||
]
|
|
||||||
top, left = 0%
|
|
||||||
center, (none) = 50%
|
|
||||||
bottom, right = 100%
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* QuirksMode says:
|
|
||||||
keyword + length/percentage must be ordered correctly, as per W3C
|
|
||||||
|
|
||||||
Internet Explorer and Opera, however, support arbitrary ordering. We
|
|
||||||
should fix it up.
|
|
||||||
|
|
||||||
Minor issue though, not strictly necessary.
|
|
||||||
*/
|
|
||||||
|
|
||||||
// control freaks may appreciate the ability to convert these to
|
|
||||||
// percentages or something, but it's not necessary
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the value of background-position.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_BackgroundPosition extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_AttrDef_CSS_Length
|
|
||||||
*/
|
|
||||||
protected $length;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_AttrDef_CSS_Percentage
|
|
||||||
*/
|
|
||||||
protected $percentage;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->length = new HTMLPurifier_AttrDef_CSS_Length();
|
|
||||||
$this->percentage = new HTMLPurifier_AttrDef_CSS_Percentage();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
$bits = explode(' ', $string);
|
|
||||||
|
|
||||||
$keywords = array();
|
|
||||||
$keywords['h'] = false; // left, right
|
|
||||||
$keywords['v'] = false; // top, bottom
|
|
||||||
$keywords['ch'] = false; // center (first word)
|
|
||||||
$keywords['cv'] = false; // center (second word)
|
|
||||||
$measures = array();
|
|
||||||
|
|
||||||
$i = 0;
|
|
||||||
|
|
||||||
$lookup = array(
|
|
||||||
'top' => 'v',
|
|
||||||
'bottom' => 'v',
|
|
||||||
'left' => 'h',
|
|
||||||
'right' => 'h',
|
|
||||||
'center' => 'c'
|
|
||||||
);
|
|
||||||
|
|
||||||
foreach ($bits as $bit) {
|
|
||||||
if ($bit === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// test for keyword
|
|
||||||
$lbit = ctype_lower($bit) ? $bit : strtolower($bit);
|
|
||||||
if (isset($lookup[$lbit])) {
|
|
||||||
$status = $lookup[$lbit];
|
|
||||||
if ($status == 'c') {
|
|
||||||
if ($i == 0) {
|
|
||||||
$status = 'ch';
|
|
||||||
} else {
|
|
||||||
$status = 'cv';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$keywords[$status] = $lbit;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// test for length
|
|
||||||
$r = $this->length->validate($bit, $config, $context);
|
|
||||||
if ($r !== false) {
|
|
||||||
$measures[] = $r;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// test for percentage
|
|
||||||
$r = $this->percentage->validate($bit, $config, $context);
|
|
||||||
if ($r !== false) {
|
|
||||||
$measures[] = $r;
|
|
||||||
$i++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$i) {
|
|
||||||
return false;
|
|
||||||
} // no valid values were caught
|
|
||||||
|
|
||||||
$ret = array();
|
|
||||||
|
|
||||||
// first keyword
|
|
||||||
if ($keywords['h']) {
|
|
||||||
$ret[] = $keywords['h'];
|
|
||||||
} elseif ($keywords['ch']) {
|
|
||||||
$ret[] = $keywords['ch'];
|
|
||||||
$keywords['cv'] = false; // prevent re-use: center = center center
|
|
||||||
} elseif (count($measures)) {
|
|
||||||
$ret[] = array_shift($measures);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($keywords['v']) {
|
|
||||||
$ret[] = $keywords['v'];
|
|
||||||
} elseif ($keywords['cv']) {
|
|
||||||
$ret[] = $keywords['cv'];
|
|
||||||
} elseif (count($measures)) {
|
|
||||||
$ret[] = array_shift($measures);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($ret)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return implode(' ', $ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,56 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the border property as defined by CSS.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Border extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Local copy of properties this property is shorthand for.
|
|
||||||
* @type HTMLPurifier_AttrDef[]
|
|
||||||
*/
|
|
||||||
protected $info = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
*/
|
|
||||||
public function __construct($config)
|
|
||||||
{
|
|
||||||
$def = $config->getCSSDefinition();
|
|
||||||
$this->info['border-width'] = $def->info['border-width'];
|
|
||||||
$this->info['border-style'] = $def->info['border-style'];
|
|
||||||
$this->info['border-top-color'] = $def->info['border-top-color'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
$string = $this->mungeRgb($string);
|
|
||||||
$bits = explode(' ', $string);
|
|
||||||
$done = array(); // segments we've finished
|
|
||||||
$ret = ''; // return value
|
|
||||||
foreach ($bits as $bit) {
|
|
||||||
foreach ($this->info as $propname => $validator) {
|
|
||||||
if (isset($done[$propname])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$r = $validator->validate($bit, $config, $context);
|
|
||||||
if ($r !== false) {
|
|
||||||
$ret .= $r . ' ';
|
|
||||||
$done[$propname] = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rtrim($ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,105 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates Color as defined by CSS.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Color extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $color
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($color, $config, $context)
|
|
||||||
{
|
|
||||||
static $colors = null;
|
|
||||||
if ($colors === null) {
|
|
||||||
$colors = $config->get('Core.ColorKeywords');
|
|
||||||
}
|
|
||||||
|
|
||||||
$color = trim($color);
|
|
||||||
if ($color === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$lower = strtolower($color);
|
|
||||||
if (isset($colors[$lower])) {
|
|
||||||
return $colors[$lower];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strpos($color, 'rgb(') !== false) {
|
|
||||||
// rgb literal handling
|
|
||||||
$length = strlen($color);
|
|
||||||
if (strpos($color, ')') !== $length - 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$triad = substr($color, 4, $length - 4 - 1);
|
|
||||||
$parts = explode(',', $triad);
|
|
||||||
if (count($parts) !== 3) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$type = false; // to ensure that they're all the same type
|
|
||||||
$new_parts = array();
|
|
||||||
foreach ($parts as $part) {
|
|
||||||
$part = trim($part);
|
|
||||||
if ($part === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$length = strlen($part);
|
|
||||||
if ($part[$length - 1] === '%') {
|
|
||||||
// handle percents
|
|
||||||
if (!$type) {
|
|
||||||
$type = 'percentage';
|
|
||||||
} elseif ($type !== 'percentage') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$num = (float)substr($part, 0, $length - 1);
|
|
||||||
if ($num < 0) {
|
|
||||||
$num = 0;
|
|
||||||
}
|
|
||||||
if ($num > 100) {
|
|
||||||
$num = 100;
|
|
||||||
}
|
|
||||||
$new_parts[] = "$num%";
|
|
||||||
} else {
|
|
||||||
// handle integers
|
|
||||||
if (!$type) {
|
|
||||||
$type = 'integer';
|
|
||||||
} elseif ($type !== 'integer') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$num = (int)$part;
|
|
||||||
if ($num < 0) {
|
|
||||||
$num = 0;
|
|
||||||
}
|
|
||||||
if ($num > 255) {
|
|
||||||
$num = 255;
|
|
||||||
}
|
|
||||||
$new_parts[] = (string)$num;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$new_triad = implode(',', $new_parts);
|
|
||||||
$color = "rgb($new_triad)";
|
|
||||||
} else {
|
|
||||||
// hexadecimal handling
|
|
||||||
if ($color[0] === '#') {
|
|
||||||
$hex = substr($color, 1);
|
|
||||||
} else {
|
|
||||||
$hex = $color;
|
|
||||||
$color = '#' . $color;
|
|
||||||
}
|
|
||||||
$length = strlen($hex);
|
|
||||||
if ($length !== 3 && $length !== 6) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!ctype_xdigit($hex)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,48 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Allows multiple validators to attempt to validate attribute.
|
|
||||||
*
|
|
||||||
* Composite is just what it sounds like: a composite of many validators.
|
|
||||||
* This means that multiple HTMLPurifier_AttrDef objects will have a whack
|
|
||||||
* at the string. If one of them passes, that's what is returned. This is
|
|
||||||
* especially useful for CSS values, which often are a choice between
|
|
||||||
* an enumerated set of predefined values or a flexible data type.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Composite extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* List of objects that may process strings.
|
|
||||||
* @type HTMLPurifier_AttrDef[]
|
|
||||||
* @todo Make protected
|
|
||||||
*/
|
|
||||||
public $defs;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_AttrDef[] $defs List of HTMLPurifier_AttrDef objects
|
|
||||||
*/
|
|
||||||
public function __construct($defs)
|
|
||||||
{
|
|
||||||
$this->defs = $defs;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
foreach ($this->defs as $i => $def) {
|
|
||||||
$result = $this->defs[$i]->validate($string, $config, $context);
|
|
||||||
if ($result !== false) {
|
|
||||||
return $result;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,44 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decorator which enables CSS properties to be disabled for specific elements.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_DenyElementDecorator extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_AttrDef
|
|
||||||
*/
|
|
||||||
public $def;
|
|
||||||
/**
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
public $element;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_AttrDef $def Definition to wrap
|
|
||||||
* @param string $element Element to deny
|
|
||||||
*/
|
|
||||||
public function __construct($def, $element)
|
|
||||||
{
|
|
||||||
$this->def = $def;
|
|
||||||
$this->element = $element;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if CurrentToken is set and equal to $this->element
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$token = $context->get('CurrentToken', true);
|
|
||||||
if ($token && $token->name == $this->element) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $this->def->validate($string, $config, $context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,77 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Microsoft's proprietary filter: CSS property
|
|
||||||
* @note Currently supports the alpha filter. In the future, this will
|
|
||||||
* probably need an extensible framework
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Filter extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_AttrDef_Integer
|
|
||||||
*/
|
|
||||||
protected $intValidator;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->intValidator = new HTMLPurifier_AttrDef_Integer();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $value
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($value, $config, $context)
|
|
||||||
{
|
|
||||||
$value = $this->parseCDATA($value);
|
|
||||||
if ($value === 'none') {
|
|
||||||
return $value;
|
|
||||||
}
|
|
||||||
// if we looped this we could support multiple filters
|
|
||||||
$function_length = strcspn($value, '(');
|
|
||||||
$function = trim(substr($value, 0, $function_length));
|
|
||||||
if ($function !== 'alpha' &&
|
|
||||||
$function !== 'Alpha' &&
|
|
||||||
$function !== 'progid:DXImageTransform.Microsoft.Alpha'
|
|
||||||
) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$cursor = $function_length + 1;
|
|
||||||
$parameters_length = strcspn($value, ')', $cursor);
|
|
||||||
$parameters = substr($value, $cursor, $parameters_length);
|
|
||||||
$params = explode(',', $parameters);
|
|
||||||
$ret_params = array();
|
|
||||||
$lookup = array();
|
|
||||||
foreach ($params as $param) {
|
|
||||||
list($key, $value) = explode('=', $param);
|
|
||||||
$key = trim($key);
|
|
||||||
$value = trim($value);
|
|
||||||
if (isset($lookup[$key])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($key !== 'opacity') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$value = $this->intValidator->validate($value, $config, $context);
|
|
||||||
if ($value === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$int = (int)$value;
|
|
||||||
if ($int > 100) {
|
|
||||||
$value = '100';
|
|
||||||
}
|
|
||||||
if ($int < 0) {
|
|
||||||
$value = '0';
|
|
||||||
}
|
|
||||||
$ret_params[] = "$key=$value";
|
|
||||||
$lookup[$key] = true;
|
|
||||||
}
|
|
||||||
$ret_parameters = implode(',', $ret_params);
|
|
||||||
$ret_function = "$function($ret_parameters)";
|
|
||||||
return $ret_function;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,176 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates shorthand CSS property font.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Font extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Local copy of validators
|
|
||||||
* @type HTMLPurifier_AttrDef[]
|
|
||||||
* @note If we moved specific CSS property definitions to their own
|
|
||||||
* classes instead of having them be assembled at run time by
|
|
||||||
* CSSDefinition, this wouldn't be necessary. We'd instantiate
|
|
||||||
* our own copies.
|
|
||||||
*/
|
|
||||||
protected $info = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
*/
|
|
||||||
public function __construct($config)
|
|
||||||
{
|
|
||||||
$def = $config->getCSSDefinition();
|
|
||||||
$this->info['font-style'] = $def->info['font-style'];
|
|
||||||
$this->info['font-variant'] = $def->info['font-variant'];
|
|
||||||
$this->info['font-weight'] = $def->info['font-weight'];
|
|
||||||
$this->info['font-size'] = $def->info['font-size'];
|
|
||||||
$this->info['line-height'] = $def->info['line-height'];
|
|
||||||
$this->info['font-family'] = $def->info['font-family'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
static $system_fonts = array(
|
|
||||||
'caption' => true,
|
|
||||||
'icon' => true,
|
|
||||||
'menu' => true,
|
|
||||||
'message-box' => true,
|
|
||||||
'small-caption' => true,
|
|
||||||
'status-bar' => true
|
|
||||||
);
|
|
||||||
|
|
||||||
// regular pre-processing
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// check if it's one of the keywords
|
|
||||||
$lowercase_string = strtolower($string);
|
|
||||||
if (isset($system_fonts[$lowercase_string])) {
|
|
||||||
return $lowercase_string;
|
|
||||||
}
|
|
||||||
|
|
||||||
$bits = explode(' ', $string); // bits to process
|
|
||||||
$stage = 0; // this indicates what we're looking for
|
|
||||||
$caught = array(); // which stage 0 properties have we caught?
|
|
||||||
$stage_1 = array('font-style', 'font-variant', 'font-weight');
|
|
||||||
$final = ''; // output
|
|
||||||
|
|
||||||
for ($i = 0, $size = count($bits); $i < $size; $i++) {
|
|
||||||
if ($bits[$i] === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
switch ($stage) {
|
|
||||||
case 0: // attempting to catch font-style, font-variant or font-weight
|
|
||||||
foreach ($stage_1 as $validator_name) {
|
|
||||||
if (isset($caught[$validator_name])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$r = $this->info[$validator_name]->validate(
|
|
||||||
$bits[$i],
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
);
|
|
||||||
if ($r !== false) {
|
|
||||||
$final .= $r . ' ';
|
|
||||||
$caught[$validator_name] = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// all three caught, continue on
|
|
||||||
if (count($caught) >= 3) {
|
|
||||||
$stage = 1;
|
|
||||||
}
|
|
||||||
if ($r !== false) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case 1: // attempting to catch font-size and perhaps line-height
|
|
||||||
$found_slash = false;
|
|
||||||
if (strpos($bits[$i], '/') !== false) {
|
|
||||||
list($font_size, $line_height) =
|
|
||||||
explode('/', $bits[$i]);
|
|
||||||
if ($line_height === '') {
|
|
||||||
// ooh, there's a space after the slash!
|
|
||||||
$line_height = false;
|
|
||||||
$found_slash = true;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
$font_size = $bits[$i];
|
|
||||||
$line_height = false;
|
|
||||||
}
|
|
||||||
$r = $this->info['font-size']->validate(
|
|
||||||
$font_size,
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
);
|
|
||||||
if ($r !== false) {
|
|
||||||
$final .= $r;
|
|
||||||
// attempt to catch line-height
|
|
||||||
if ($line_height === false) {
|
|
||||||
// we need to scroll forward
|
|
||||||
for ($j = $i + 1; $j < $size; $j++) {
|
|
||||||
if ($bits[$j] === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($bits[$j] === '/') {
|
|
||||||
if ($found_slash) {
|
|
||||||
return false;
|
|
||||||
} else {
|
|
||||||
$found_slash = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$line_height = $bits[$j];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// slash already found
|
|
||||||
$found_slash = true;
|
|
||||||
$j = $i;
|
|
||||||
}
|
|
||||||
if ($found_slash) {
|
|
||||||
$i = $j;
|
|
||||||
$r = $this->info['line-height']->validate(
|
|
||||||
$line_height,
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
);
|
|
||||||
if ($r !== false) {
|
|
||||||
$final .= '/' . $r;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$final .= ' ';
|
|
||||||
$stage = 2;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
case 2: // attempting to catch font-family
|
|
||||||
$font_family =
|
|
||||||
implode(' ', array_slice($bits, $i, $size - $i));
|
|
||||||
$r = $this->info['font-family']->validate(
|
|
||||||
$font_family,
|
|
||||||
$config,
|
|
||||||
$context
|
|
||||||
);
|
|
||||||
if ($r !== false) {
|
|
||||||
$final .= $r . ' ';
|
|
||||||
// processing completed successfully
|
|
||||||
return rtrim($final);
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,219 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a font family list according to CSS spec
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_FontFamily extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
protected $mask = null;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->mask = '_- ';
|
|
||||||
for ($c = 'a'; $c <= 'z'; $c++) {
|
|
||||||
$this->mask .= $c;
|
|
||||||
}
|
|
||||||
for ($c = 'A'; $c <= 'Z'; $c++) {
|
|
||||||
$this->mask .= $c;
|
|
||||||
}
|
|
||||||
for ($c = '0'; $c <= '9'; $c++) {
|
|
||||||
$this->mask .= $c;
|
|
||||||
} // cast-y, but should be fine
|
|
||||||
// special bytes used by UTF-8
|
|
||||||
for ($i = 0x80; $i <= 0xFF; $i++) {
|
|
||||||
// We don't bother excluding invalid bytes in this range,
|
|
||||||
// because the our restriction of well-formed UTF-8 will
|
|
||||||
// prevent these from ever occurring.
|
|
||||||
$this->mask .= chr($i);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
PHP's internal strcspn implementation is
|
|
||||||
O(length of string * length of mask), making it inefficient
|
|
||||||
for large masks. However, it's still faster than
|
|
||||||
preg_match 8)
|
|
||||||
for (p = s1;;) {
|
|
||||||
spanp = s2;
|
|
||||||
do {
|
|
||||||
if (*spanp == c || p == s1_end) {
|
|
||||||
return p - s1;
|
|
||||||
}
|
|
||||||
} while (spanp++ < (s2_end - 1));
|
|
||||||
c = *++p;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
// possible optimization: invert the mask.
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
static $generic_names = array(
|
|
||||||
'serif' => true,
|
|
||||||
'sans-serif' => true,
|
|
||||||
'monospace' => true,
|
|
||||||
'fantasy' => true,
|
|
||||||
'cursive' => true
|
|
||||||
);
|
|
||||||
$allowed_fonts = $config->get('CSS.AllowedFonts');
|
|
||||||
|
|
||||||
// assume that no font names contain commas in them
|
|
||||||
$fonts = explode(',', $string);
|
|
||||||
$final = '';
|
|
||||||
foreach ($fonts as $font) {
|
|
||||||
$font = trim($font);
|
|
||||||
if ($font === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// match a generic name
|
|
||||||
if (isset($generic_names[$font])) {
|
|
||||||
if ($allowed_fonts === null || isset($allowed_fonts[$font])) {
|
|
||||||
$final .= $font . ', ';
|
|
||||||
}
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
// match a quoted name
|
|
||||||
if ($font[0] === '"' || $font[0] === "'") {
|
|
||||||
$length = strlen($font);
|
|
||||||
if ($length <= 2) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$quote = $font[0];
|
|
||||||
if ($font[$length - 1] !== $quote) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$font = substr($font, 1, $length - 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
$font = $this->expandCSSEscape($font);
|
|
||||||
|
|
||||||
// $font is a pure representation of the font name
|
|
||||||
|
|
||||||
if ($allowed_fonts !== null && !isset($allowed_fonts[$font])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctype_alnum($font) && $font !== '') {
|
|
||||||
// very simple font, allow it in unharmed
|
|
||||||
$final .= $font . ', ';
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// bugger out on whitespace. form feed (0C) really
|
|
||||||
// shouldn't show up regardless
|
|
||||||
$font = str_replace(array("\n", "\t", "\r", "\x0C"), ' ', $font);
|
|
||||||
|
|
||||||
// Here, there are various classes of characters which need
|
|
||||||
// to be treated differently:
|
|
||||||
// - Alphanumeric characters are essentially safe. We
|
|
||||||
// handled these above.
|
|
||||||
// - Spaces require quoting, though most parsers will do
|
|
||||||
// the right thing if there aren't any characters that
|
|
||||||
// can be misinterpreted
|
|
||||||
// - Dashes rarely occur, but they fairly unproblematic
|
|
||||||
// for parsing/rendering purposes.
|
|
||||||
// The above characters cover the majority of Western font
|
|
||||||
// names.
|
|
||||||
// - Arbitrary Unicode characters not in ASCII. Because
|
|
||||||
// most parsers give little thought to Unicode, treatment
|
|
||||||
// of these codepoints is basically uniform, even for
|
|
||||||
// punctuation-like codepoints. These characters can
|
|
||||||
// show up in non-Western pages and are supported by most
|
|
||||||
// major browsers, for example: "MS 明朝" is a
|
|
||||||
// legitimate font-name
|
|
||||||
// <http://ja.wikipedia.org/wiki/MS_明朝>. See
|
|
||||||
// the CSS3 spec for more examples:
|
|
||||||
// <http://www.w3.org/TR/2011/WD-css3-fonts-20110324/localizedfamilynames.png>
|
|
||||||
// You can see live samples of these on the Internet:
|
|
||||||
// <http://www.google.co.jp/search?q=font-family+MS+明朝|ゴシック>
|
|
||||||
// However, most of these fonts have ASCII equivalents:
|
|
||||||
// for example, 'MS Mincho', and it's considered
|
|
||||||
// professional to use ASCII font names instead of
|
|
||||||
// Unicode font names. Thanks Takeshi Terada for
|
|
||||||
// providing this information.
|
|
||||||
// The following characters, to my knowledge, have not been
|
|
||||||
// used to name font names.
|
|
||||||
// - Single quote. While theoretically you might find a
|
|
||||||
// font name that has a single quote in its name (serving
|
|
||||||
// as an apostrophe, e.g. Dave's Scribble), I haven't
|
|
||||||
// been able to find any actual examples of this.
|
|
||||||
// Internet Explorer's cssText translation (which I
|
|
||||||
// believe is invoked by innerHTML) normalizes any
|
|
||||||
// quoting to single quotes, and fails to escape single
|
|
||||||
// quotes. (Note that this is not IE's behavior for all
|
|
||||||
// CSS properties, just some sort of special casing for
|
|
||||||
// font-family). So a single quote *cannot* be used
|
|
||||||
// safely in the font-family context if there will be an
|
|
||||||
// innerHTML/cssText translation. Note that Firefox 3.x
|
|
||||||
// does this too.
|
|
||||||
// - Double quote. In IE, these get normalized to
|
|
||||||
// single-quotes, no matter what the encoding. (Fun
|
|
||||||
// fact, in IE8, the 'content' CSS property gained
|
|
||||||
// support, where they special cased to preserve encoded
|
|
||||||
// double quotes, but still translate unadorned double
|
|
||||||
// quotes into single quotes.) So, because their
|
|
||||||
// fixpoint behavior is identical to single quotes, they
|
|
||||||
// cannot be allowed either. Firefox 3.x displays
|
|
||||||
// single-quote style behavior.
|
|
||||||
// - Backslashes are reduced by one (so \\ -> \) every
|
|
||||||
// iteration, so they cannot be used safely. This shows
|
|
||||||
// up in IE7, IE8 and FF3
|
|
||||||
// - Semicolons, commas and backticks are handled properly.
|
|
||||||
// - The rest of the ASCII punctuation is handled properly.
|
|
||||||
// We haven't checked what browsers do to unadorned
|
|
||||||
// versions, but this is not important as long as the
|
|
||||||
// browser doesn't /remove/ surrounding quotes (as IE does
|
|
||||||
// for HTML).
|
|
||||||
//
|
|
||||||
// With these results in hand, we conclude that there are
|
|
||||||
// various levels of safety:
|
|
||||||
// - Paranoid: alphanumeric, spaces and dashes(?)
|
|
||||||
// - International: Paranoid + non-ASCII Unicode
|
|
||||||
// - Edgy: Everything except quotes, backslashes
|
|
||||||
// - NoJS: Standards compliance, e.g. sod IE. Note that
|
|
||||||
// with some judicious character escaping (since certain
|
|
||||||
// types of escaping doesn't work) this is theoretically
|
|
||||||
// OK as long as innerHTML/cssText is not called.
|
|
||||||
// We believe that international is a reasonable default
|
|
||||||
// (that we will implement now), and once we do more
|
|
||||||
// extensive research, we may feel comfortable with dropping
|
|
||||||
// it down to edgy.
|
|
||||||
|
|
||||||
// Edgy: alphanumeric, spaces, dashes, underscores and Unicode. Use of
|
|
||||||
// str(c)spn assumes that the string was already well formed
|
|
||||||
// Unicode (which of course it is).
|
|
||||||
if (strspn($font, $this->mask) !== strlen($font)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Historical:
|
|
||||||
// In the absence of innerHTML/cssText, these ugly
|
|
||||||
// transforms don't pose a security risk (as \\ and \"
|
|
||||||
// might--these escapes are not supported by most browsers).
|
|
||||||
// We could try to be clever and use single-quote wrapping
|
|
||||||
// when there is a double quote present, but I have choosen
|
|
||||||
// not to implement that. (NOTE: you can reduce the amount
|
|
||||||
// of escapes by one depending on what quoting style you use)
|
|
||||||
// $font = str_replace('\\', '\\5C ', $font);
|
|
||||||
// $font = str_replace('"', '\\22 ', $font);
|
|
||||||
// $font = str_replace("'", '\\27 ', $font);
|
|
||||||
|
|
||||||
// font possibly with spaces, requires quoting
|
|
||||||
$final .= "'$font', ";
|
|
||||||
}
|
|
||||||
$final = rtrim($final, ', ');
|
|
||||||
if ($final === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $final;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,32 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates based on {ident} CSS grammar production
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Ident extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = trim($string);
|
|
||||||
|
|
||||||
// early abort: '' and '0' (strings that convert to false) are invalid
|
|
||||||
if (!$string) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$pattern = '/^(-?[A-Za-z_][A-Za-z_\-0-9]*)$/';
|
|
||||||
if (!preg_match($pattern, $string)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,56 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Decorator which enables !important to be used in CSS values.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_ImportantDecorator extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_AttrDef
|
|
||||||
*/
|
|
||||||
public $def;
|
|
||||||
/**
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
public $allow;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_AttrDef $def Definition to wrap
|
|
||||||
* @param bool $allow Whether or not to allow !important
|
|
||||||
*/
|
|
||||||
public function __construct($def, $allow = false)
|
|
||||||
{
|
|
||||||
$this->def = $def;
|
|
||||||
$this->allow = $allow;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Intercepts and removes !important if necessary
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
// test for ! and important tokens
|
|
||||||
$string = trim($string);
|
|
||||||
$is_important = false;
|
|
||||||
// :TODO: optimization: test directly for !important and ! important
|
|
||||||
if (strlen($string) >= 9 && substr($string, -9) === 'important') {
|
|
||||||
$temp = rtrim(substr($string, 0, -9));
|
|
||||||
// use a temp, because we might want to restore important
|
|
||||||
if (strlen($temp) >= 1 && substr($temp, -1) === '!') {
|
|
||||||
$string = rtrim(substr($temp, 0, -1));
|
|
||||||
$is_important = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$string = $this->def->validate($string, $config, $context);
|
|
||||||
if ($this->allow && $is_important) {
|
|
||||||
$string .= ' !important';
|
|
||||||
}
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,77 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Represents a Length as defined by CSS.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Length extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_Length|string
|
|
||||||
*/
|
|
||||||
protected $min;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type HTMLPurifier_Length|string
|
|
||||||
*/
|
|
||||||
protected $max;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_Length|string $min Minimum length, or null for no bound. String is also acceptable.
|
|
||||||
* @param HTMLPurifier_Length|string $max Maximum length, or null for no bound. String is also acceptable.
|
|
||||||
*/
|
|
||||||
public function __construct($min = null, $max = null)
|
|
||||||
{
|
|
||||||
$this->min = $min !== null ? HTMLPurifier_Length::make($min) : null;
|
|
||||||
$this->max = $max !== null ? HTMLPurifier_Length::make($max) : null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
|
|
||||||
// Optimizations
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($string === '0') {
|
|
||||||
return '0';
|
|
||||||
}
|
|
||||||
if (strlen($string) === 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$length = HTMLPurifier_Length::make($string);
|
|
||||||
if (!$length->isValid()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($this->min) {
|
|
||||||
$c = $length->compareTo($this->min);
|
|
||||||
if ($c === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($c < 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($this->max) {
|
|
||||||
$c = $length->compareTo($this->max);
|
|
||||||
if ($c === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($c > 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $length->toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,112 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates shorthand CSS property list-style.
|
|
||||||
* @warning Does not support url tokens that have internal spaces.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_ListStyle extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Local copy of validators.
|
|
||||||
* @type HTMLPurifier_AttrDef[]
|
|
||||||
* @note See HTMLPurifier_AttrDef_CSS_Font::$info for a similar impl.
|
|
||||||
*/
|
|
||||||
protected $info;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
*/
|
|
||||||
public function __construct($config)
|
|
||||||
{
|
|
||||||
$def = $config->getCSSDefinition();
|
|
||||||
$this->info['list-style-type'] = $def->info['list-style-type'];
|
|
||||||
$this->info['list-style-position'] = $def->info['list-style-position'];
|
|
||||||
$this->info['list-style-image'] = $def->info['list-style-image'];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
// regular pre-processing
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// assumes URI doesn't have spaces in it
|
|
||||||
$bits = explode(' ', strtolower($string)); // bits to process
|
|
||||||
|
|
||||||
$caught = array();
|
|
||||||
$caught['type'] = false;
|
|
||||||
$caught['position'] = false;
|
|
||||||
$caught['image'] = false;
|
|
||||||
|
|
||||||
$i = 0; // number of catches
|
|
||||||
$none = false;
|
|
||||||
|
|
||||||
foreach ($bits as $bit) {
|
|
||||||
if ($i >= 3) {
|
|
||||||
return;
|
|
||||||
} // optimization bit
|
|
||||||
if ($bit === '') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
foreach ($caught as $key => $status) {
|
|
||||||
if ($status !== false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$r = $this->info['list-style-' . $key]->validate($bit, $config, $context);
|
|
||||||
if ($r === false) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if ($r === 'none') {
|
|
||||||
if ($none) {
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
$none = true;
|
|
||||||
}
|
|
||||||
if ($key == 'image') {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$caught[$key] = $r;
|
|
||||||
$i++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$i) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$ret = array();
|
|
||||||
|
|
||||||
// construct type
|
|
||||||
if ($caught['type']) {
|
|
||||||
$ret[] = $caught['type'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// construct image
|
|
||||||
if ($caught['image']) {
|
|
||||||
$ret[] = $caught['image'];
|
|
||||||
}
|
|
||||||
|
|
||||||
// construct position
|
|
||||||
if ($caught['position']) {
|
|
||||||
$ret[] = $caught['position'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($ret)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return implode(' ', $ret);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,71 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Framework class for strings that involve multiple values.
|
|
||||||
*
|
|
||||||
* Certain CSS properties such as border-width and margin allow multiple
|
|
||||||
* lengths to be specified. This class can take a vanilla border-width
|
|
||||||
* definition and multiply it, usually into a max of four.
|
|
||||||
*
|
|
||||||
* @note Even though the CSS specification isn't clear about it, inherit
|
|
||||||
* can only be used alone: it will never manifest as part of a multi
|
|
||||||
* shorthand declaration. Thus, this class does not allow inherit.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Multiple extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Instance of component definition to defer validation to.
|
|
||||||
* @type HTMLPurifier_AttrDef
|
|
||||||
* @todo Make protected
|
|
||||||
*/
|
|
||||||
public $single;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Max number of values allowed.
|
|
||||||
* @todo Make protected
|
|
||||||
*/
|
|
||||||
public $max;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_AttrDef $single HTMLPurifier_AttrDef to multiply
|
|
||||||
* @param int $max Max number of values allowed (usually four)
|
|
||||||
*/
|
|
||||||
public function __construct($single, $max = 4)
|
|
||||||
{
|
|
||||||
$this->single = $single;
|
|
||||||
$this->max = $max;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = $this->mungeRgb($this->parseCDATA($string));
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$parts = explode(' ', $string); // parseCDATA replaced \r, \t and \n
|
|
||||||
$length = count($parts);
|
|
||||||
$final = '';
|
|
||||||
for ($i = 0, $num = 0; $i < $length && $num < $this->max; $i++) {
|
|
||||||
if (ctype_space($parts[$i])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$result = $this->single->validate($parts[$i], $config, $context);
|
|
||||||
if ($result !== false) {
|
|
||||||
$final .= $result . ' ';
|
|
||||||
$num++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ($final === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return rtrim($final);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,84 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a number as defined by the CSS spec.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Number extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Indicates whether or not only positive values are allowed.
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
protected $non_negative = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $non_negative indicates whether negatives are forbidden
|
|
||||||
*/
|
|
||||||
public function __construct($non_negative = false)
|
|
||||||
{
|
|
||||||
$this->non_negative = $non_negative;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $number
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return string|bool
|
|
||||||
* @warning Some contexts do not pass $config, $context. These
|
|
||||||
* variables should not be used without checking HTMLPurifier_Length
|
|
||||||
*/
|
|
||||||
public function validate($number, $config, $context)
|
|
||||||
{
|
|
||||||
$number = $this->parseCDATA($number);
|
|
||||||
|
|
||||||
if ($number === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($number === '0') {
|
|
||||||
return '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
$sign = '';
|
|
||||||
switch ($number[0]) {
|
|
||||||
case '-':
|
|
||||||
if ($this->non_negative) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$sign = '-';
|
|
||||||
case '+':
|
|
||||||
$number = substr($number, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (ctype_digit($number)) {
|
|
||||||
$number = ltrim($number, '0');
|
|
||||||
return $number ? $sign . $number : '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Period is the only non-numeric character allowed
|
|
||||||
if (strpos($number, '.') === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
list($left, $right) = explode('.', $number, 2);
|
|
||||||
|
|
||||||
if ($left === '' && $right === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($left !== '' && !ctype_digit($left)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$left = ltrim($left, '0');
|
|
||||||
$right = rtrim($right, '0');
|
|
||||||
|
|
||||||
if ($right === '') {
|
|
||||||
return $left ? $sign . $left : '0';
|
|
||||||
} elseif (!ctype_digit($right)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $sign . $left . '.' . $right;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,54 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a Percentage as defined by the CSS spec.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_Percentage extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Instance to defer number validation to.
|
|
||||||
* @type HTMLPurifier_AttrDef_CSS_Number
|
|
||||||
*/
|
|
||||||
protected $number_def;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $non_negative Whether to forbid negative values
|
|
||||||
*/
|
|
||||||
public function __construct($non_negative = false)
|
|
||||||
{
|
|
||||||
$this->number_def = new HTMLPurifier_AttrDef_CSS_Number($non_negative);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$length = strlen($string);
|
|
||||||
if ($length === 1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($string[$length - 1] !== '%') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$number = substr($string, 0, $length - 1);
|
|
||||||
$number = $this->number_def->validate($number, $config, $context);
|
|
||||||
|
|
||||||
if ($number === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return "$number%";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,46 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the value for the CSS property text-decoration
|
|
||||||
* @note This class could be generalized into a version that acts sort of
|
|
||||||
* like Enum except you can compound the allowed values.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_TextDecoration extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
static $allowed_values = array(
|
|
||||||
'line-through' => true,
|
|
||||||
'overline' => true,
|
|
||||||
'underline' => true,
|
|
||||||
);
|
|
||||||
|
|
||||||
$string = strtolower($this->parseCDATA($string));
|
|
||||||
|
|
||||||
if ($string === 'none') {
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parts = explode(' ', $string);
|
|
||||||
$final = '';
|
|
||||||
foreach ($parts as $part) {
|
|
||||||
if (isset($allowed_values[$part])) {
|
|
||||||
$final .= $part . ' ';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
$final = rtrim($final);
|
|
||||||
if ($final === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return $final;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,74 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a URI in CSS syntax, which uses url('http://example.com')
|
|
||||||
* @note While theoretically speaking a URI in a CSS document could
|
|
||||||
* be non-embedded, as of CSS2 there is no such usage so we're
|
|
||||||
* generalizing it. This may need to be changed in the future.
|
|
||||||
* @warning Since HTMLPurifier_AttrDef_CSS blindly uses semicolons as
|
|
||||||
* the separator, you cannot put a literal semicolon in
|
|
||||||
* in the URI. Try percent encoding it, in that case.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_CSS_URI extends HTMLPurifier_AttrDef_URI
|
|
||||||
{
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
parent::__construct(true); // always embedded
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $uri_string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($uri_string, $config, $context)
|
|
||||||
{
|
|
||||||
// parse the URI out of the string and then pass it onto
|
|
||||||
// the parent object
|
|
||||||
|
|
||||||
$uri_string = $this->parseCDATA($uri_string);
|
|
||||||
if (strpos($uri_string, 'url(') !== 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$uri_string = substr($uri_string, 4);
|
|
||||||
$new_length = strlen($uri_string) - 1;
|
|
||||||
if ($uri_string[$new_length] != ')') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$uri = trim(substr($uri_string, 0, $new_length));
|
|
||||||
|
|
||||||
if (!empty($uri) && ($uri[0] == "'" || $uri[0] == '"')) {
|
|
||||||
$quote = $uri[0];
|
|
||||||
$new_length = strlen($uri) - 1;
|
|
||||||
if ($uri[$new_length] !== $quote) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$uri = substr($uri, 1, $new_length - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$uri = $this->expandCSSEscape($uri);
|
|
||||||
|
|
||||||
$result = parent::validate($uri, $config, $context);
|
|
||||||
|
|
||||||
if ($result === false) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// extra sanity check; should have been done by URI
|
|
||||||
$result = str_replace(array('"', "\\", "\n", "\x0c", "\r"), "", $result);
|
|
||||||
|
|
||||||
// suspicious characters are ()'; we're going to percent encode
|
|
||||||
// them for safety.
|
|
||||||
$result = str_replace(array('(', ')', "'"), array('%28', '%29', '%27'), $result);
|
|
||||||
|
|
||||||
// there's an extra bug where ampersands lose their escaping on
|
|
||||||
// an innerHTML cycle, so a very unlucky query parameter could
|
|
||||||
// then change the meaning of the URL. Unfortunately, there's
|
|
||||||
// not much we can do about that...
|
|
||||||
return "url(\"$result\")";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,44 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dummy AttrDef that mimics another AttrDef, BUT it generates clones
|
|
||||||
* with make.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_Clone extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* What we're cloning.
|
|
||||||
* @type HTMLPurifier_AttrDef
|
|
||||||
*/
|
|
||||||
protected $clone;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param HTMLPurifier_AttrDef $clone
|
|
||||||
*/
|
|
||||||
public function __construct($clone)
|
|
||||||
{
|
|
||||||
$this->clone = $clone;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $v
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($v, $config, $context)
|
|
||||||
{
|
|
||||||
return $this->clone->validate($v, $config, $context);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @return HTMLPurifier_AttrDef
|
|
||||||
*/
|
|
||||||
public function make($string)
|
|
||||||
{
|
|
||||||
return clone $this->clone;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,73 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
// Enum = Enumerated
|
|
||||||
/**
|
|
||||||
* Validates a keyword against a list of valid values.
|
|
||||||
* @warning The case-insensitive compare of this function uses PHP's
|
|
||||||
* built-in strtolower and ctype_lower functions, which may
|
|
||||||
* cause problems with international comparisons
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_Enum extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Lookup table of valid values.
|
|
||||||
* @type array
|
|
||||||
* @todo Make protected
|
|
||||||
*/
|
|
||||||
public $valid_values = array();
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bool indicating whether or not enumeration is case sensitive.
|
|
||||||
* @note In general this is always case insensitive.
|
|
||||||
*/
|
|
||||||
protected $case_sensitive = false; // values according to W3C spec
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $valid_values List of valid values
|
|
||||||
* @param bool $case_sensitive Whether or not case sensitive
|
|
||||||
*/
|
|
||||||
public function __construct($valid_values = array(), $case_sensitive = false)
|
|
||||||
{
|
|
||||||
$this->valid_values = array_flip($valid_values);
|
|
||||||
$this->case_sensitive = $case_sensitive;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = trim($string);
|
|
||||||
if (!$this->case_sensitive) {
|
|
||||||
// we may want to do full case-insensitive libraries
|
|
||||||
$string = ctype_lower($string) ? $string : strtolower($string);
|
|
||||||
}
|
|
||||||
$result = isset($this->valid_values[$string]);
|
|
||||||
|
|
||||||
return $result ? $string : false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string In form of comma-delimited list of case-insensitive
|
|
||||||
* valid values. Example: "foo,bar,baz". Prepend "s:" to make
|
|
||||||
* case sensitive
|
|
||||||
* @return HTMLPurifier_AttrDef_Enum
|
|
||||||
*/
|
|
||||||
public function make($string)
|
|
||||||
{
|
|
||||||
if (strlen($string) > 2 && $string[0] == 's' && $string[1] == ':') {
|
|
||||||
$string = substr($string, 2);
|
|
||||||
$sensitive = true;
|
|
||||||
} else {
|
|
||||||
$sensitive = false;
|
|
||||||
}
|
|
||||||
$values = explode(',', $string);
|
|
||||||
return new HTMLPurifier_AttrDef_Enum($values, $sensitive);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,48 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a boolean attribute
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_Bool extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
protected $name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
public $minimized = true;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $name
|
|
||||||
*/
|
|
||||||
public function __construct($name = false)
|
|
||||||
{
|
|
||||||
$this->name = $name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
return $this->name;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string Name of attribute
|
|
||||||
* @return HTMLPurifier_AttrDef_HTML_Bool
|
|
||||||
*/
|
|
||||||
public function make($string)
|
|
||||||
{
|
|
||||||
return new HTMLPurifier_AttrDef_HTML_Bool($string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,48 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Implements special behavior for class attribute (normally NMTOKENS)
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_Class extends HTMLPurifier_AttrDef_HTML_Nmtokens
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
protected function split($string, $config, $context)
|
|
||||||
{
|
|
||||||
// really, this twiddle should be lazy loaded
|
|
||||||
$name = $config->getDefinition('HTML')->doctype->name;
|
|
||||||
if ($name == "XHTML 1.1" || $name == "XHTML 2.0") {
|
|
||||||
return parent::split($string, $config, $context);
|
|
||||||
} else {
|
|
||||||
return preg_split('/\s+/', $string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param array $tokens
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return array
|
|
||||||
*/
|
|
||||||
protected function filter($tokens, $config, $context)
|
|
||||||
{
|
|
||||||
$allowed = $config->get('Attr.AllowedClasses');
|
|
||||||
$forbidden = $config->get('Attr.ForbiddenClasses');
|
|
||||||
$ret = array();
|
|
||||||
foreach ($tokens as $token) {
|
|
||||||
if (($allowed === null || isset($allowed[$token])) &&
|
|
||||||
!isset($forbidden[$token]) &&
|
|
||||||
// We need this O(n) check because of PHP's array
|
|
||||||
// implementation that casts -0 to 0.
|
|
||||||
!in_array($token, $ret, true)
|
|
||||||
) {
|
|
||||||
$ret[] = $token;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return $ret;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a color according to the HTML spec.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_Color extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
static $colors = null;
|
|
||||||
if ($colors === null) {
|
|
||||||
$colors = $config->get('Core.ColorKeywords');
|
|
||||||
}
|
|
||||||
|
|
||||||
$string = trim($string);
|
|
||||||
|
|
||||||
if (empty($string)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$lower = strtolower($string);
|
|
||||||
if (isset($colors[$lower])) {
|
|
||||||
return $colors[$lower];
|
|
||||||
}
|
|
||||||
if ($string[0] === '#') {
|
|
||||||
$hex = substr($string, 1);
|
|
||||||
} else {
|
|
||||||
$hex = $string;
|
|
||||||
}
|
|
||||||
|
|
||||||
$length = strlen($hex);
|
|
||||||
if ($length !== 3 && $length !== 6) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!ctype_xdigit($hex)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($length === 3) {
|
|
||||||
$hex = $hex[0] . $hex[0] . $hex[1] . $hex[1] . $hex[2] . $hex[2];
|
|
||||||
}
|
|
||||||
return "#$hex";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,38 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Special-case enum attribute definition that lazy loads allowed frame targets
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_FrameTarget extends HTMLPurifier_AttrDef_Enum
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type array
|
|
||||||
*/
|
|
||||||
public $valid_values = false; // uninitialized value
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
protected $case_sensitive = false;
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
if ($this->valid_values === false) {
|
|
||||||
$this->valid_values = $config->get('Attr.AllowedFrameTargets');
|
|
||||||
}
|
|
||||||
return parent::validate($string, $config, $context);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,105 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the HTML attribute ID.
|
|
||||||
* @warning Even though this is the id processor, it
|
|
||||||
* will ignore the directive Attr:IDBlacklist, since it will only
|
|
||||||
* go according to the ID accumulator. Since the accumulator is
|
|
||||||
* automatically generated, it will have already absorbed the
|
|
||||||
* blacklist. If you're hacking around, make sure you use load()!
|
|
||||||
*/
|
|
||||||
|
|
||||||
class HTMLPurifier_AttrDef_HTML_ID extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
// selector is NOT a valid thing to use for IDREFs, because IDREFs
|
|
||||||
// *must* target IDs that exist, whereas selector #ids do not.
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Determines whether or not we're validating an ID in a CSS
|
|
||||||
* selector context.
|
|
||||||
* @type bool
|
|
||||||
*/
|
|
||||||
protected $selector;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param bool $selector
|
|
||||||
*/
|
|
||||||
public function __construct($selector = false)
|
|
||||||
{
|
|
||||||
$this->selector = $selector;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $id
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($id, $config, $context)
|
|
||||||
{
|
|
||||||
if (!$this->selector && !$config->get('Attr.EnableID')) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$id = trim($id); // trim it first
|
|
||||||
|
|
||||||
if ($id === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$prefix = $config->get('Attr.IDPrefix');
|
|
||||||
if ($prefix !== '') {
|
|
||||||
$prefix .= $config->get('Attr.IDPrefixLocal');
|
|
||||||
// prevent re-appending the prefix
|
|
||||||
if (strpos($id, $prefix) !== 0) {
|
|
||||||
$id = $prefix . $id;
|
|
||||||
}
|
|
||||||
} elseif ($config->get('Attr.IDPrefixLocal') !== '') {
|
|
||||||
trigger_error(
|
|
||||||
'%Attr.IDPrefixLocal cannot be used unless ' .
|
|
||||||
'%Attr.IDPrefix is set',
|
|
||||||
E_USER_WARNING
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$this->selector) {
|
|
||||||
$id_accumulator =& $context->get('IDAccumulator');
|
|
||||||
if (isset($id_accumulator->ids[$id])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// we purposely avoid using regex, hopefully this is faster
|
|
||||||
|
|
||||||
if (ctype_alpha($id)) {
|
|
||||||
$result = true;
|
|
||||||
} else {
|
|
||||||
if (!ctype_alpha(@$id[0])) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
// primitive style of regexps, I suppose
|
|
||||||
$trim = trim(
|
|
||||||
$id,
|
|
||||||
'A..Za..z0..9:-._'
|
|
||||||
);
|
|
||||||
$result = ($trim === '');
|
|
||||||
}
|
|
||||||
|
|
||||||
$regexp = $config->get('Attr.IDBlacklistRegexp');
|
|
||||||
if ($regexp && preg_match($regexp, $id)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!$this->selector && $result) {
|
|
||||||
$id_accumulator->add($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
// if no change was made to the ID, return the result
|
|
||||||
// else, return the new id if stripping whitespace made it
|
|
||||||
// valid, or return false.
|
|
||||||
return $result ? $id : false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,56 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates the HTML type length (not to be confused with CSS's length).
|
|
||||||
*
|
|
||||||
* This accepts integer pixels or percentages as lengths for certain
|
|
||||||
* HTML attributes.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class HTMLPurifier_AttrDef_HTML_Length extends HTMLPurifier_AttrDef_HTML_Pixels
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = trim($string);
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parent_result = parent::validate($string, $config, $context);
|
|
||||||
if ($parent_result !== false) {
|
|
||||||
return $parent_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
$length = strlen($string);
|
|
||||||
$last_char = $string[$length - 1];
|
|
||||||
|
|
||||||
if ($last_char !== '%') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$points = substr($string, 0, $length - 1);
|
|
||||||
|
|
||||||
if (!is_numeric($points)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$points = (int)$points;
|
|
||||||
|
|
||||||
if ($points < 0) {
|
|
||||||
return '0%';
|
|
||||||
}
|
|
||||||
if ($points > 100) {
|
|
||||||
return '100%';
|
|
||||||
}
|
|
||||||
return ((string)$points) . '%';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,72 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a rel/rev link attribute against a directive of allowed values
|
|
||||||
* @note We cannot use Enum because link types allow multiple
|
|
||||||
* values.
|
|
||||||
* @note Assumes link types are ASCII text
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_LinkTypes extends HTMLPurifier_AttrDef
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Name config attribute to pull.
|
|
||||||
* @type string
|
|
||||||
*/
|
|
||||||
protected $name;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $name
|
|
||||||
*/
|
|
||||||
public function __construct($name)
|
|
||||||
{
|
|
||||||
$configLookup = array(
|
|
||||||
'rel' => 'AllowedRel',
|
|
||||||
'rev' => 'AllowedRev'
|
|
||||||
);
|
|
||||||
if (!isset($configLookup[$name])) {
|
|
||||||
trigger_error(
|
|
||||||
'Unrecognized attribute name for link ' .
|
|
||||||
'relationship.',
|
|
||||||
E_USER_ERROR
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
$this->name = $configLookup[$name];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$allowed = $config->get('Attr.' . $this->name);
|
|
||||||
if (empty($allowed)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$string = $this->parseCDATA($string);
|
|
||||||
$parts = explode(' ', $string);
|
|
||||||
|
|
||||||
// lookup to prevent duplicates
|
|
||||||
$ret_lookup = array();
|
|
||||||
foreach ($parts as $part) {
|
|
||||||
$part = strtolower(trim($part));
|
|
||||||
if (!isset($allowed[$part])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
$ret_lookup[$part] = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (empty($ret_lookup)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
$string = implode(' ', array_keys($ret_lookup));
|
|
||||||
return $string;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
|
@ -1,60 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Validates a MultiLength as defined by the HTML spec.
|
|
||||||
*
|
|
||||||
* A multilength is either a integer (pixel count), a percentage, or
|
|
||||||
* a relative number.
|
|
||||||
*/
|
|
||||||
class HTMLPurifier_AttrDef_HTML_MultiLength extends HTMLPurifier_AttrDef_HTML_Length
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string $string
|
|
||||||
* @param HTMLPurifier_Config $config
|
|
||||||
* @param HTMLPurifier_Context $context
|
|
||||||
* @return bool|string
|
|
||||||
*/
|
|
||||||
public function validate($string, $config, $context)
|
|
||||||
{
|
|
||||||
$string = trim($string);
|
|
||||||
if ($string === '') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$parent_result = parent::validate($string, $config, $context);
|
|
||||||
if ($parent_result !== false) {
|
|
||||||
return $parent_result;
|
|
||||||
}
|
|
||||||
|
|
||||||
$length = strlen($string);
|
|
||||||
$last_char = $string[$length - 1];
|
|
||||||
|
|
||||||
if ($last_char !== '*') {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$int = substr($string, 0, $length - 1);
|
|
||||||
|
|
||||||
if ($int == '') {
|
|
||||||
return '*';
|
|
||||||
}
|
|
||||||
if (!is_numeric($int)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
$int = (int)$int;
|
|
||||||
if ($int < 0) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if ($int == 0) {
|
|
||||||
return '0';
|
|
||||||
}
|
|
||||||
if ($int == 1) {
|
|
||||||
return '*';
|
|
||||||
}
|
|
||||||
return ((string)$int) . '*';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: et sw=4 sts=4
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue