diff --git a/.gitignore b/.gitignore index 4e85ecda9..ca6bf5c3a 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ node_modules/ # ignore composer dependency directories vendor/ !forked-plugins/ninja-forms-uploads/vendor/ +!forked-plugins/bp-rbe-inbound-forum-attachments/vendor/ !themes/dahd-tainacan/** # ignore log files and databases diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/autoload.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/autoload.php new file mode 100644 index 000000000..6531c84fe --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/autoload.php @@ -0,0 +1,7 @@ +textHtml(); + +$message->getParts(); +$message->getAttachments(); +``` + +## Settings + +There are settings available. + +- `charset` - character set to use. Should be specified in uppercase only. + Default is `UTF-8`. + + ```php + \bashkarev\email\Parser::$charset = "WINDOWS-1251"; + ``` + +- `buffer` - read buffer size in bytes. Default is `500000`. + + ```php + \bashkarev\email\Parser::$buffer = 4096; + ``` + +## Attachments + +There is attachments parsing support. + +### Saving attachments to files + +Saving to files could be done as follows: + +```php +$file = fopen('path/to/file.eml', 'rb'); +$message = \bashkarev\email\Parser::email($file); +foreach ($message->getAttachments() as $attachment) { + $attachment->save('dir/' . $attachment->getFileName('undefined')); +} +``` + +### Streaming attachment to output + +In order to stream attachment to output directly you need to do the following: + +```php +$file = fopen('path/to/file.eml', 'rb'); +$message = \bashkarev\email\Parser::email($file); +$attachment = $message->getAttachments()[0]; +header("Content-Type: {$attachment->getMimeType()};"); +header("Content-Disposition: attachment; filename=\"{$attachment->getFileName('undefined')}\""); +$attachment->getStream()->copy(fopen('php://output', 'c')); +``` + +## message/partial + +```php +$block = \bashkarev\email\Parser::email([ + fopen('path/to/part.1.eml', 'rb'), + fopen('path/to/part.2.eml', 'rb'), +]); +$block->getMessage(); +``` + +## message/rfc822 + +```php +$file = fopen('path/to/file.eml', 'rb'); +$container = \bashkarev\email\Parser::email($file); +$message = $container->getAttachments()[0]->getMessage(); +``` + +## message/feedback-report +```php +$file = fopen('path/to/file.eml', 'rb'); +$container = \bashkarev\email\Parser::email($file); +foreach ($container->getAttachments() as $attachment) { + if ($attachment->getMimeType() === 'message/feedback-report') { + /** + * @var \bashkarev\email\messages\Feedback $feedback + */ + $feedback = $attachment->getMessage(); + $feedback->getType(); // Feedback::TYPE_ABUSE ... + } +} + +``` + +## message/external-body + +Supported types: url, local-file, ftp. + +### FTP auth +```php +$file = fopen('path/to/file.eml', 'rb'); +$container = \bashkarev\email\Parser::email($file); +foreach ($container->getAttachments() as $attachment) { + if ($attachment->getStream() instanceof \bashkarev\email\transports\Ftp) { + /** + * @var \bashkarev\email\transports\Ftp $transport + */ + $transport = $attachment->getStream(); + $transport->username = 'username'; + $transport->password = '******'; + $attachment->save('dir/' . $attachment->getFileName('undefined')); + } +} +``` \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.json b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.json new file mode 100644 index 000000000..41750e4ad --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.json @@ -0,0 +1,29 @@ +{ + "name": "bashkarev/email", + "description": "Faster MIME Mail Parser could be used to parse emails in MIME format.", + "keywords": ["mime", "mail", "mailparse", "email", "mime-parser", "FBL", "ARF"], + "license": "MIT", + "authors": [ + { + "name": "bashkarev", + "email": "dmitriy@bashkarev.com" + } + ], + "require": { + "php": ">=5.4", + "ext-mbstring": "*" + }, + "autoload": { + "psr-4": { + "bashkarev\\email\\": "src/" + } + }, + "autoload-dev": { + "psr-4": { + "bashkarev\\email\\tests\\": "tests/" + } + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.lock b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.lock new file mode 100644 index 000000000..21a7de41e --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/composer.lock @@ -0,0 +1,980 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", + "This file is @generated automatically" + ], + "hash": "e7bfeb7cf18a1d0203c9e7eb7933e298", + "content-hash": "518998b58451cabad10c0869bf65ed9e", + "packages": [], + "packages-dev": [ + { + "name": "doctrine/instantiator", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d", + "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d", + "shasum": "" + }, + "require": { + "php": ">=5.3,<8.0-DEV" + }, + "require-dev": { + "athletic/athletic": "~0.1.8", + "ext-pdo": "*", + "ext-phar": "*", + "phpunit/phpunit": "~4.0", + "squizlabs/php_codesniffer": "~2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "http://ocramius.github.com/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://github.com/doctrine/instantiator", + "keywords": [ + "constructor", + "instantiate" + ], + "time": "2015-06-14 21:17:01" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", + "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "dflydev/markdown": "~1.0", + "erusev/parsedown": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-0": { + "phpDocumentor": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "mike.vanriel@naenius.com" + } + ], + "time": "2015-02-03 12:10:50" + }, + { + "name": "phpspec/prophecy", + "version": "v1.6.2", + "source": { + "type": "git", + "url": "https://github.com/phpspec/prophecy.git", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/6c52c2722f8460122f96f86346600e1077ce22cb", + "reference": "6c52c2722f8460122f96f86346600e1077ce22cb", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": "^5.3|^7.0", + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0|^2.0" + }, + "require-dev": { + "phpspec/phpspec": "^2.0", + "phpunit/phpunit": "^4.8 || ^5.6.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6.x-dev" + } + }, + "autoload": { + "psr-0": { + "Prophecy\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + }, + { + "name": "Marcello Duarte", + "email": "marcello.duarte@gmail.com" + } + ], + "description": "Highly opinionated mocking framework for PHP 5.3+", + "homepage": "https://github.com/phpspec/prophecy", + "keywords": [ + "Double", + "Dummy", + "fake", + "mock", + "spy", + "stub" + ], + "time": "2016-11-21 14:58:47" + }, + { + "name": "phpunit/php-code-coverage", + "version": "2.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "phpunit/php-file-iterator": "~1.3", + "phpunit/php-text-template": "~1.2", + "phpunit/php-token-stream": "~1.3", + "sebastian/environment": "^1.3.2", + "sebastian/version": "~1.0" + }, + "require-dev": { + "ext-xdebug": ">=2.1.4", + "phpunit/phpunit": "~4" + }, + "suggest": { + "ext-dom": "*", + "ext-xdebug": ">=2.2.1", + "ext-xmlwriter": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "time": "2015-10-06 15:47:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "1.4.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "time": "2016-10-03 07:40:28" + }, + { + "name": "phpunit/php-text-template", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "time": "2015-06-21 13:50:34" + }, + { + "name": "phpunit/php-timer", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/38e9124049cf1a164f1e4537caf19c99bf1eb260", + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4|~5" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "time": "2016-05-12 18:03:57" + }, + { + "name": "phpunit/php-token-stream", + "version": "1.4.9", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-token-stream.git", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/3b402f65a4cc90abf6e1104e388b896ce209631b", + "reference": "3b402f65a4cc90abf6e1104e388b896ce209631b", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Wrapper around PHP's tokenizer extension.", + "homepage": "https://github.com/sebastianbergmann/php-token-stream/", + "keywords": [ + "tokenizer" + ], + "time": "2016-11-15 14:06:22" + }, + { + "name": "phpunit/phpunit", + "version": "4.8.35", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87", + "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-json": "*", + "ext-pcre": "*", + "ext-reflection": "*", + "ext-spl": "*", + "php": ">=5.3.3", + "phpspec/prophecy": "^1.3.1", + "phpunit/php-code-coverage": "~2.1", + "phpunit/php-file-iterator": "~1.4", + "phpunit/php-text-template": "~1.2", + "phpunit/php-timer": "^1.0.6", + "phpunit/phpunit-mock-objects": "~2.3", + "sebastian/comparator": "~1.2.2", + "sebastian/diff": "~1.2", + "sebastian/environment": "~1.3", + "sebastian/exporter": "~1.2", + "sebastian/global-state": "~1.0", + "sebastian/version": "~1.0", + "symfony/yaml": "~2.1|~3.0" + }, + "suggest": { + "phpunit/php-invoker": "~1.1" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.8.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "time": "2017-02-06 05:18:07" + }, + { + "name": "phpunit/phpunit-mock-objects", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.0.2", + "php": ">=5.3.3", + "phpunit/php-text-template": "~1.2", + "sebastian/exporter": "~1.2" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "suggest": { + "ext-soap": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sb@sebastian-bergmann.de", + "role": "lead" + } + ], + "description": "Mock Object library for PHPUnit", + "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/", + "keywords": [ + "mock", + "xunit" + ], + "time": "2015-10-02 06:51:40" + }, + { + "name": "sebastian/comparator", + "version": "1.2.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/diff": "~1.2", + "sebastian/exporter": "~1.2 || ~2.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "http://www.github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "time": "2017-01-29 09:50:25" + }, + { + "name": "sebastian/diff", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e", + "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.8" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff" + ], + "time": "2015-12-08 07:14:41" + }, + { + "name": "sebastian/environment", + "version": "1.3.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "shasum": "" + }, + "require": { + "php": "^5.3.3 || ^7.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8 || ^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "time": "2016-08-18 05:49:44" + }, + { + "name": "sebastian/exporter", + "version": "1.2.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "sebastian/recursion-context": "~1.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.3.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "homepage": "http://www.github.com/sebastianbergmann/exporter", + "keywords": [ + "export", + "exporter" + ], + "time": "2016-06-17 09:04:28" + }, + { + "name": "sebastian/global-state", + "version": "1.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4", + "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.2" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "time": "2015-10-12 03:26:01" + }, + { + "name": "sebastian/recursion-context", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/913401df809e99e4f47b27cdd781f4a258d58791", + "reference": "913401df809e99e4f47b27cdd781f4a258d58791", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "time": "2015-11-11 19:50:13" + }, + { + "name": "sebastian/version", + "version": "1.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6", + "shasum": "" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "time": "2015-06-21 13:59:46" + }, + { + "name": "symfony/yaml", + "version": "v2.8.17", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "322a8c2dfbca15ad6b1b27e182899f98ec0e0153" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/322a8c2dfbca15ad6b1b27e182899f98ec0e0153", + "reference": "322a8c2dfbca15ad6b1b27e182899f98ec0e0153", + "shasum": "" + }, + "require": { + "php": ">=5.3.9" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.8-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Yaml Component", + "homepage": "https://symfony.com", + "time": "2017-01-21 16:40:50" + } + ], + "aliases": [], + "minimum-stability": "stable", + "stability-flags": [], + "prefer-stable": false, + "prefer-lowest": false, + "platform": { + "php": ">=5.4", + "ext-mbstring": "*" + }, + "platform-dev": [] +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/phpunit.xml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/phpunit.xml new file mode 100644 index 000000000..29a15e520 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/phpunit.xml @@ -0,0 +1,18 @@ + + + + + ./tests/ + + + \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Address.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Address.php new file mode 100644 index 000000000..0c5a5ed62 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Address.php @@ -0,0 +1,32 @@ + + */ +class Address +{ + /** + * @var string + */ + public $name; + /** + * @var string + */ + public $email; + + /** + * @return string + */ + public function display() + { + return ($this->name === null) ? $this->email : $this->name; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/HeadersTrait.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/HeadersTrait.php new file mode 100644 index 000000000..b779658ca --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/HeadersTrait.php @@ -0,0 +1,178 @@ + + */ +trait HeadersTrait +{ + /** + * @var array Map of all registered headers, as original name => array of values + */ + private $headers = []; + /** + * @var array Map of lowercase header name => original name at registration + */ + private $headerNames = []; + + /** + * @return bool + */ + public function hasHeaders() + { + return $this->headers !== []; + } + + /** + * @param string $header + * @param string $value + */ + public function setHeader($header, $value) + { + $value = $this->trimHeaderValues(explode(';', $value)); + $normalized = strtolower($header); + if (isset($this->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $this->headers[$header] = array_merge($this->headers[$header], $value); + } else { + $this->headerNames[$normalized] = $header; + $this->headers[$header] = $value; + } + } + + /** + * @return array + */ + public function getHeaders() + { + return $this->headers; + } + + /** + * @param string $header + * @return bool + */ + public function hasHeader($header) + { + return isset($this->headerNames[strtolower($header)]); + } + + /** + * @param string $header + * @return array + */ + public function getHeader($header) + { + $header = strtolower($header); + if (!isset($this->headerNames[$header])) { + return []; + } + $header = $this->headerNames[$header]; + return $this->headers[$header]; + } + + /** + * @param string $header + * @param string $type + * @param mixed $default + * @return mixed + */ + public function findInHeader($header, $type, $default = null) + { + if ($this->headers === []) { + return $default; + } + $len = strlen($type); + foreach ($this->getHeader($header) as $head) { + if (strncasecmp($head, $type, $len) === 0) { + return trim(ltrim(substr($head, $len), " \t="), " \t\"'"); + } + } + return $default; + } + + /** + * @param string $header + * @param string $glue + * @return string + */ + public function getHeaderLine($header, $glue = ', ') + { + return implode($glue, $this->getHeader($header)); + } + + /** + * @return string|null + */ + public function getMimeType() + { + if ($this->hasHeader('content-type')) { + return mb_strtolower($this->getHeader('content-type')[0]); + } + return null; + } + + /** + * @param string $data + */ + protected function parseHeader($data) + { + $data = str_replace(["\r\n", "\n\r", "\r"], "\n", $data); + $lines = explode("\n", $data); + for ($i = 0, $count = count($lines); $i < $count; $i++) { + $i = $this->parseBlockHeader($lines, $count, $i); + if ($i === false) { + break; + } + } + } + + /** + * @param array $lines + * @param int $count + * @param int $current + * @return mixed + */ + protected function parseBlockHeader($lines, $count, $current) + { + $line = $lines[$current]; + if (strpos($line, ':') === false) { + return false; + } + list($header, $value) = HeaderHelper::parse($line); + for ($i = $current + 1; $i < $count; $i++) { + $line = $line[$i]; + if ($line[0] !== "\t" && $line[0] !== ' ') { + break; + } + $value .= ' ' . ltrim($line); + } + $this->setHeader($header, $value); + return --$i; + } + + /** + * @param array $values + * @return array + */ + private function trimHeaderValues($values) + { + $data = []; + foreach ($values as $value) { + $item = trim($value); + if ($item !== '') { + $data[] = $item; + } + } + return $data; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Message.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Message.php new file mode 100644 index 000000000..46736c1e0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Message.php @@ -0,0 +1,240 @@ + + */ +class Message extends Mime +{ + /** + * @var Part[] + */ + protected $attachments = []; + /** + * @var Part[] + */ + protected $parts = []; + + /** + * @return DateTime|null + */ + public function getDate() + { + $value = $this->getHeaderLine('date'); + if ($value === '') { + return null; + } + try { + $date = new DateTime($value); + } catch (\Exception $e) { + return null; + } + return $date; + } + + /** + * @return \bashkarev\email\Address|null + */ + public function getFrom() + { + $from = Address::parse($this->getHeaderLine('from'), $this->getCharset()); + if ($from === []) { + return null; + } + return $from[0]; + } + + /** + * @return \bashkarev\email\Address|null + */ + public function getSender() + { + $from = Address::parse($this->getHeaderLine('sender'), $this->getCharset()); + if ($from === []) { + return null; + } + return $from[0]; + } + + /** + * @return \bashkarev\email\Address[] + */ + public function getTo() + { + return Address::parse($this->getHeaderLine('to'), $this->getCharset()); + } + + /** + * @return string|null + */ + public function getSubject() + { + if ($this->hasHeader('subject') === false) { + return null; + } + $str = $this->getHeaderLine('subject'); + $charset = $this->getCharset(); + if ($charset !== Parser::$charset) { + $str = mb_convert_encoding($str, Parser::$charset, $charset); + } + return $str; + } + + /** + * @param bool $cid + * @return string + */ + public function textHtml($cid = true) + { + $parts = $this->findTextParts('text/html'); + if ($parts === []) { + $parts = $this->findTextParts('text/plain'); + } + + if ($parts === []) { + return ''; + } + + $html = ''; + foreach ($parts as $part) { + $data = $part->getStream()->getContents(); + if ($part->getMimeType() === 'text/plain') { + $data = nl2br($data); + } + $html .= $data; + } + + if ($cid === true) { + $html = $this->replaceCid($html); + } + + return $html; + } + + /** + * @return string + */ + public function textPlain() + { + $text = ''; + foreach ($this->findTextParts('text/plain') as $part) { + $text .= $part->getStream()->getContents(); + } + return $text; + } + + /** + * @return bool + */ + public function hasAttachments() + { + return ($this->attachments !== [] || $this->isAttachment()); + } + + /** + * @return Part[]|Message[] + */ + public function getAttachments() + { + if ($this->attachments === []) { + return $this->isAttachment() ? [$this] : []; + } + return $this->attachments; + } + + /** + * @param Part $attachment + * @return $this + */ + public function setAttachment(Part $attachment) + { + $this->attachments[] = $attachment; + return $this; + } + + /** + * @return Part[] + */ + public function getParts() + { + return $this->parts; + } + + /** + * @param Part $part + * @return $this + */ + public function setPart(Part $part) + { + $this->parts[] = $part; + return $this; + } + + /** + * @param string $mime text/html or text/plain + * @return Part[] + */ + protected function findTextParts($mime = 'text/html') + { + $parts = []; + if ( + $this->getMimeType() === $mime + || ($this->getStream()->hasHeaders() && $this->getStream()->getMimeType() === $mime) + ) { + $parts[] = $this; + } + if (($boundary = $this->getBoundary()) === null) { + return $parts; + } + $boundaries = [$boundary]; + foreach ($this->parts as $part) { + if (in_array($part->getParentBoundary(), $boundaries) && ($type = $part->getMimeType()) !== null) { + if ($type === 'multipart/alternative' || $type === 'multipart/related') { + if (($boundary = $part->getBoundary()) !== null) { + $boundaries[] = $boundary; + } + continue; + } + if ( + $type === $mime + || ($part->getStream()->hasHeaders() && $part->getStream()->getMimeType() === $mime) + ) { + $parts[] = $part; + } + } + } + return $parts; + } + + /** + * @param string $html + * @return string + */ + protected function replaceCid($html) + { + foreach (array_reverse($this->attachments) as $attachment) { + /** + * @var Part $attachment + */ + if ( + ($id = $attachment->getID()) !== null + && ($mime = $attachment->getMimeType()) !== null + && strncasecmp($mime, 'image/', 6) === 0 + && strpos($html, "cid:{$id}") !== false + ) { + $html = str_replace("cid:{$id}", "data:{$mime};base64," . $attachment->getStream()->getBase64(), $html); + } + } + return $html; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Mime.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Mime.php new file mode 100644 index 000000000..90f26ad2f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Mime.php @@ -0,0 +1,186 @@ + + */ +class Mime +{ + use HeadersTrait; + + /** + * @var Stream + */ + private $stream; + /** + * @var Message + */ + private $message; + + /** + * @return Message|null + */ + public function getMessage() + { + if ( + $this->message === null + && $this->stream !== null + && ($mime = $this->getMimeType()) !== null + && strncmp($mime, 'message/', 8) === 0 + ) { + $this->message = (new Email($mime))->parse($this->stream->getHandle(), false); + } + return $this->message; + } + + /** + * @return bool + */ + public function isAttachment() + { + foreach ($this->getHeader('content-disposition') as $head) { + if (strncasecmp($head, 'attachment', 10) === 0) { + return true; + } + } + $mime = $this->getMimeType(); + return !($mime === null + || $mime === 'text/plain' + || $mime === 'text/html' + || strncmp($mime, 'multipart/', 10) === 0); + } + + /** + * @return Transport|null + * @throws \Exception + */ + public function getStream() + { + if ($this->stream === null) { + if ($this->getMimeType() === 'message/external-body') { + if ( + ($type = $this->getAccessType()) === null + || !isset(Parser::$transport[$type]) + ) { + throw new \Exception("Not Supported transport: {$type}"); + } + $this->stream = new Parser::$transport[$type]($this); + } else { + $this->stream = new Stream($this); + } + } + return $this->stream; + } + + /** + * @return null|string + */ + public function getAccessType() + { + $type = $this->findInHeader('content-type', 'access-type'); + if ($type !== null) { + return mb_strtolower($type); + } + return null; + } + + /** + * @return null|string + */ + public function getID() + { + if ($this->hasHeader('content-id')) { + return trim($this->getHeader('content-id')[0], " <>\t\n\r\0\x0B"); + } + return null; + } + + /** + * @return null|string + */ + public function getBoundary() + { + return $this->findInHeader('content-type', 'boundary'); + } + + /** + * @return null|string + */ + public function getEncoding() + { + if ($this->hasHeader('content-transfer-encoding')) { + return mb_strtolower(trim($this->getHeader('content-transfer-encoding')[0])); + } + return null; + } + + /** + * @return string + */ + public function getCharset() + { + return mb_strtoupper($this->findInHeader('content-type', 'charset', 'UTF-8')); + } + + /** + * @return null|string + */ + public function getName() + { + $name = $this->findInHeader('content-type', 'name'); + if ( + $name !== null + && ($charset = $this->getCharset()) !== Parser::$charset + ) { + return mb_convert_encoding($name, Parser::$charset, $charset); + } + return $name; + } + + /** + * @param null|string $default + * @return null|string + */ + public function getFileName($default = null) + { + $name = RFC5987::filename($this->getHeader('content-disposition')); + if ($name === null) { + $name = $this->getName(); + } + + if ($name === null && $default !== null) { + $name = $default; + } + + if ( + $name !== null + && ($mime = $this->getMimeType()) !== null + && isset(MimeHelper::$types[$mime]) + && !preg_match('/\.\w+$/', $name) + ) { + //unless file extension + $name .= '.' . MimeHelper::$types[$mime]; + } + + return $name; + } + + /** + * @param $filename + * @return bool + */ + public function save($filename) + { + return (bool)$this->getStream()->copy(fopen($filename, 'wb')); + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Parser.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Parser.php new file mode 100644 index 000000000..481ef8167 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Parser.php @@ -0,0 +1,46 @@ + + */ +class Parser +{ + public static $buffer = 500000; + public static $charset = 'UTF-8'; + + /** + * @var array MIME message class map + */ + public static $map = [ + 'message/feedback-report' => 'bashkarev\email\messages\Feedback' + ]; + /** + * @var array transport class map + */ + public static $transport = [ + 'url' => 'bashkarev\email\transports\Url', + 'local-file' => 'bashkarev\email\transports\Local', + 'anon-ftp' => 'bashkarev\email\transports\Ftp', + 'ftp' => 'bashkarev\email\transports\Ftp' + ]; + + /** + * @param mixed $handles + * @return Message + */ + public static function email($handles) + { + $parser = new Email(); + return $parser->parse($handles); + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Part.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Part.php new file mode 100644 index 000000000..bdba35c1a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Part.php @@ -0,0 +1,37 @@ + + */ +class Part extends Mime +{ + /** + * @var string + */ + private $_parentBoundary; + + /** + * Part constructor. + * @param string $parentBoundary + */ + public function __construct($parentBoundary) + { + $this->_parentBoundary = $parentBoundary; + } + + /** + * @return null|string + */ + public function getParentBoundary() + { + return $this->_parentBoundary; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Stream.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Stream.php new file mode 100644 index 000000000..54ace73aa --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Stream.php @@ -0,0 +1,106 @@ + + */ +class Stream extends Transport +{ + /** + * @var string + */ + protected $encoded; + /** + * @var string + */ + protected $charset; + /** + * @var resource + */ + protected $handle; + + /** + * @param Mime $mime + */ + public function __construct(Mime $mime) + { + $this->encoded = $mime->getEncoding(); + $this->charset = $mime->getCharset(); + $this->handle = fopen('php://temp', 'rb+'); + } + + /** + * @inheritdoc + */ + public function close() + { + if (is_resource($this->handle)) { + fclose($this->handle); + } + } + + /** + * @inheritdoc + */ + public function getHandle() + { + return $this->handle; + } + + /** + * @inheritdoc + */ + public function write($data) + { + fwrite($this->handle, $data); + return $this; + } + + /** + * @inheritdoc + */ + public function copy($handle, $length = null) + { + switch ($this->encoded) { + case 'base64': + stream_filter_append($handle, 'convert.base64-decode'); + break; + case 'quoted-printable': + stream_filter_append($handle, 'convert.quoted-printable-decode'); + break; + } + return parent::copy($handle, $length); + } + + /** + * @inheritdoc + */ + public function getContents() + { + $contents = parent::getContents(); + if ($this->charset !== Parser::$charset) { + $contents = mb_convert_encoding($contents, Parser::$charset, $this->charset); + } + return $contents; + } + + /** + * @inheritdoc + */ + public function getBase64() + { + if ($this->encoded === 'base64') { + rewind($this->handle); + return stream_get_contents($this->handle); + } else { + return base64_encode($this->getContents()); + } + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Transport.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Transport.php new file mode 100644 index 000000000..77a73bdd6 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/Transport.php @@ -0,0 +1,78 @@ + + */ +abstract class Transport +{ + use HeadersTrait; + + /** + * Transport constructor. + * @param Mime $mime + */ + abstract public function __construct(Mime $mime); + + /** + * @return resource + */ + abstract public function getHandle(); + + /** + * Close handle + */ + abstract public function close(); + + /** + * @param $data + * @return $this + */ + abstract public function write($data); + + /** + * @param resource $handle + * @param null|int $length + * @return int + */ + public function copy($handle, $length = null) + { + if ($length === null) { + $length = Parser::$buffer; + } + $mainHandle = $this->getHandle(); + rewind($mainHandle); + while (feof($mainHandle) === false) { + fwrite($handle, fread($mainHandle, $length)); + } + $i = ftell($handle); + fclose($handle); + return $i; + } + + /** + * @return string + */ + public function getContents() + { + ob_start(); + ob_implicit_flush(false); + $this->copy(fopen('php://output', 'cb')); + return ob_get_clean(); + } + + /** + * @return string + */ + public function getBase64() + { + return base64_encode($this->getContents()); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/Address.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/Address.php new file mode 100644 index 000000000..4afe0ae18 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/Address.php @@ -0,0 +1,61 @@ + + */ +class Address +{ + /** + * @param $text + * @param $charset + * @return \bashkarev\email\Address[] + */ + public static function parse($text, $charset) + { + $addresses = []; + $values = explode(',', $text); + foreach ($values as $value) { + $address = self::item($value); + if ($address->email === null) { + continue; + } + if ($address->name !== null && $charset !== Parser::$charset) { + $address->name = mb_convert_encoding($address->name, Parser::$charset, $charset); + } + $addresses[] = $address; + + } + return $addresses; + } + + /** + * @param $string + * @return \bashkarev\email\Address + */ + private static function item($string) + { + $address = new \bashkarev\email\Address(); + foreach (explode(' ', $string) as $value) { + $value = ltrim($value, " \t\"<'("); + $value = rtrim($value, " \t\">')"); + if ($address->email === null && filter_var($value, FILTER_VALIDATE_EMAIL)) { + $address->email = $value; + } else { + if ($address->name !== null) { + $address->name .= ' '; + } + $address->name .= $value; + } + } + return $address; + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/HeaderHelper.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/HeaderHelper.php new file mode 100644 index 000000000..00e47d184 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/HeaderHelper.php @@ -0,0 +1,34 @@ + + */ +class HeaderHelper +{ + + /** + * parsing string from Content-type: text/html to ['Content-type','text/html'] + * @param string $line + * @return array + */ + public static function parse($line) + { + $data = explode(':', $line); + $filed = $data[0]; + if (isset($data[2])) { + unset($data[0]); + $value = implode(':', $data); + } else { + $value = $data[1]; + } + return [rtrim($filed), ltrim($value)]; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/MimeHelper.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/MimeHelper.php new file mode 100644 index 000000000..f6ad6b442 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/MimeHelper.php @@ -0,0 +1,787 @@ + + */ +class MimeHelper +{ + + /** + * MIME types. + * @see http://svn.apache.org/viewvc/httpd/httpd/trunk/docs/conf/mime.types?view=markup + * @var array + */ + public static $types = [ + 'application/andrew-inset' => 'ez', + 'application/applixware' => 'aw', + 'application/atom+xml' => 'atom', + 'application/atomcat+xml' => 'atomcat', + 'application/atomsvc+xml' => 'atomsvc', + 'application/ccxml+xml' => 'ccxml', + 'application/cdmi-capability' => 'cdmia', + 'application/cdmi-container' => 'cdmic', + 'application/cdmi-domain' => 'cdmid', + 'application/cdmi-object' => 'cdmio', + 'application/cdmi-queue' => 'cdmiq', + 'application/cu-seeme' => 'cu', + 'application/davmount+xml' => 'davmount', + 'application/docbook+xml' => 'dbk', + 'application/dssc+der' => 'dssc', + 'application/dssc+xml' => 'xdssc', + 'application/ecmascript' => 'ecma', + 'application/emma+xml' => 'emma', + 'application/epub+zip' => 'epub', + 'application/exi' => 'exi', + 'application/font-tdpfr' => 'pfr', + 'application/font-woff' => 'woff', + 'application/gml+xml' => 'gml', + 'application/gpx+xml' => 'gpx', + 'application/gxf' => 'gxf', + 'application/hyperstudio' => 'stk', + 'application/inkml+xml' => 'inkml', + 'application/ipfix' => 'ipfix', + 'application/java-archive' => 'jar', + 'application/java-serialized-object' => 'ser', + 'application/java-vm' => 'class', + 'application/javascript' => 'js', + 'application/json' => 'json', + 'application/jsonml+json' => 'jsonml', + 'application/lost+xml' => 'lostxml', + 'application/mac-binhex40' => 'hqx', + 'application/mac-compactpro' => 'cpt', + 'application/mads+xml' => 'mads', + 'application/marc' => 'mrc', + 'application/marcxml+xml' => 'mrcx', + 'application/mathematica' => 'nb', + 'application/mathml+xml' => 'mathml', + 'application/mbox' => 'mbox', + 'application/mediaservercontrol+xml' => 'mscml', + 'application/metalink+xml' => 'metalink', + 'application/metalink4+xml' => 'meta4', + 'application/mets+xml' => 'mets', + 'application/mods+xml' => 'mods', + 'application/mp21' => 'mp21', + 'application/mp4' => 'mp4s', + 'application/msword' => 'dot', + 'application/mxf' => 'mxf', + 'application/octet-stream' => 'bin', + 'application/oda' => 'oda', + 'application/oebps-package+xml' => 'opf', + 'application/ogg' => 'ogx', + 'application/omdoc+xml' => 'omdoc', + 'application/onenote' => 'onetoc2', + 'application/oxps' => 'oxps', + 'application/patch-ops-error+xml' => 'xer', + 'application/pdf' => 'pdf', + 'application/pgp-encrypted' => 'pgp', + 'application/pgp-signature' => 'sig', + 'application/pics-rules' => 'prf', + 'application/pkcs10' => 'p10', + 'application/pkcs7-mime' => 'p7m', + 'application/pkcs7-signature' => 'p7s', + 'application/pkcs8' => 'p8', + 'application/pkix-attr-cert' => 'ac', + 'application/pkix-cert' => 'cer', + 'application/pkix-crl' => 'crl', + 'application/pkix-pkipath' => 'pkipath', + 'application/pkixcmp' => 'pki', + 'application/pls+xml' => 'pls', + 'application/postscript' => 'ps', + 'application/prs.cww' => 'cww', + 'application/pskc+xml' => 'pskcxml', + 'application/rdf+xml' => 'rdf', + 'application/reginfo+xml' => 'rif', + 'application/relax-ng-compact-syntax' => 'rnc', + 'application/resource-lists+xml' => 'rl', + 'application/resource-lists-diff+xml' => 'rld', + 'application/rls-services+xml' => 'rs', + 'application/rpki-ghostbusters' => 'gbr', + 'application/rpki-manifest' => 'mft', + 'application/rpki-roa' => 'roa', + 'application/rsd+xml' => 'rsd', + 'application/rss+xml' => 'rss', + 'application/rtf' => 'rtf', + 'application/sbml+xml' => 'sbml', + 'application/scvp-cv-request' => 'scq', + 'application/scvp-cv-response' => 'scs', + 'application/scvp-vp-request' => 'spq', + 'application/scvp-vp-response' => 'spp', + 'application/sdp' => 'sdp', + 'application/set-payment-initiation' => 'setpay', + 'application/set-registration-initiation' => 'setreg', + 'application/shf+xml' => 'shf', + 'application/smil+xml' => 'smil', + 'application/sparql-query' => 'rq', + 'application/sparql-results+xml' => 'srx', + 'application/srgs' => 'gram', + 'application/srgs+xml' => 'grxml', + 'application/sru+xml' => 'sru', + 'application/ssdl+xml' => 'ssdl', + 'application/ssml+xml' => 'ssml', + 'application/tei+xml' => 'teicorpus', + 'application/thraud+xml' => 'tfi', + 'application/timestamped-data' => 'tsd', + 'application/vnd.3gpp.pic-bw-large' => 'plb', + 'application/vnd.3gpp.pic-bw-small' => 'psb', + 'application/vnd.3gpp.pic-bw-var' => 'pvb', + 'application/vnd.3gpp2.tcap' => 'tcap', + 'application/vnd.3m.post-it-notes' => 'pwn', + 'application/vnd.accpac.simply.aso' => 'aso', + 'application/vnd.accpac.simply.imp' => 'imp', + 'application/vnd.acucobol' => 'acu', + 'application/vnd.acucorp' => 'atc', + 'application/vnd.adobe.air-application-installer-package+zip' => 'air', + 'application/vnd.adobe.formscentral.fcdt' => 'fcdt', + 'application/vnd.adobe.fxp' => 'fxpl', + 'application/vnd.adobe.xdp+xml' => 'xdp', + 'application/vnd.adobe.xfdf' => 'xfdf', + 'application/vnd.ahead.space' => 'ahead', + 'application/vnd.airzip.filesecure.azf' => 'azf', + 'application/vnd.airzip.filesecure.azs' => 'azs', + 'application/vnd.amazon.ebook' => 'azw', + 'application/vnd.americandynamics.acc' => 'acc', + 'application/vnd.amiga.ami' => 'ami', + 'application/vnd.android.package-archive' => 'apk', + 'application/vnd.anser-web-certificate-issue-initiation' => 'cii', + 'application/vnd.anser-web-funds-transfer-initiation' => 'fti', + 'application/vnd.antix.game-component' => 'atx', + 'application/vnd.apple.installer+xml' => 'mpkg', + 'application/vnd.apple.mpegurl' => 'm3u8', + 'application/vnd.aristanetworks.swi' => 'swi', + 'application/vnd.astraea-software.iota' => 'iota', + 'application/vnd.audiograph' => 'aep', + 'application/vnd.blueice.multipass' => 'mpm', + 'application/vnd.bmi' => 'bmi', + 'application/vnd.businessobjects' => 'rep', + 'application/vnd.chemdraw+xml' => 'cdxml', + 'application/vnd.chipnuts.karaoke-mmd' => 'mmd', + 'application/vnd.cinderella' => 'cdy', + 'application/vnd.claymore' => 'cla', + 'application/vnd.cloanto.rp9' => 'rp9', + 'application/vnd.clonk.c4group' => 'c4u', + 'application/vnd.cluetrust.cartomobile-config' => 'c11amc', + 'application/vnd.cluetrust.cartomobile-config-pkg' => 'c11amz', + 'application/vnd.commonspace' => 'csp', + 'application/vnd.contact.cmsg' => 'cdbcmsg', + 'application/vnd.cosmocaller' => 'cmc', + 'application/vnd.crick.clicker' => 'clkx', + 'application/vnd.crick.clicker.keyboard' => 'clkk', + 'application/vnd.crick.clicker.palette' => 'clkp', + 'application/vnd.crick.clicker.template' => 'clkt', + 'application/vnd.crick.clicker.wordbank' => 'clkw', + 'application/vnd.criticaltools.wbs+xml' => 'wbs', + 'application/vnd.ctc-posml' => 'pml', + 'application/vnd.cups-ppd' => 'ppd', + 'application/vnd.curl.car' => 'car', + 'application/vnd.curl.pcurl' => 'pcurl', + 'application/vnd.dart' => 'dart', + 'application/vnd.data-vision.rdz' => 'rdz', + 'application/vnd.dece.data' => 'uvvf', + 'application/vnd.dece.ttml+xml' => 'uvvt', + 'application/vnd.dece.unspecified' => 'uvx', + 'application/vnd.dece.zip' => 'uvz', + 'application/vnd.denovo.fcselayout-link' => 'fe_launch', + 'application/vnd.dna' => 'dna', + 'application/vnd.dolby.mlp' => 'mlp', + 'application/vnd.dpgraph' => 'dpg', + 'application/vnd.dreamfactory' => 'dfac', + 'application/vnd.ds-keypoint' => 'kpxx', + 'application/vnd.dvb.ait' => 'ait', + 'application/vnd.dvb.service' => 'svc', + 'application/vnd.dynageo' => 'geo', + 'application/vnd.ecowin.chart' => 'mag', + 'application/vnd.enliven' => 'nml', + 'application/vnd.epson.esf' => 'esf', + 'application/vnd.epson.msf' => 'msf', + 'application/vnd.epson.quickanime' => 'qam', + 'application/vnd.epson.salt' => 'slt', + 'application/vnd.epson.ssf' => 'ssf', + 'application/vnd.eszigno3+xml' => 'et3', + 'application/vnd.ezpix-album' => 'ez2', + 'application/vnd.ezpix-package' => 'ez3', + 'application/vnd.fdf' => 'fdf', + 'application/vnd.fdsn.mseed' => 'mseed', + 'application/vnd.fdsn.seed' => 'seed', + 'application/vnd.flographit' => 'gph', + 'application/vnd.fluxtime.clip' => 'ftc', + 'application/vnd.framemaker' => 'maker', + 'application/vnd.frogans.fnc' => 'fnc', + 'application/vnd.frogans.ltf' => 'ltf', + 'application/vnd.fsc.weblaunch' => 'fsc', + 'application/vnd.fujitsu.oasys' => 'oas', + 'application/vnd.fujitsu.oasys2' => 'oa2', + 'application/vnd.fujitsu.oasys3' => 'oa3', + 'application/vnd.fujitsu.oasysgp' => 'fg5', + 'application/vnd.fujitsu.oasysprs' => 'bh2', + 'application/vnd.fujixerox.ddd' => 'ddd', + 'application/vnd.fujixerox.docuworks' => 'xdw', + 'application/vnd.fujixerox.docuworks.binder' => 'xbd', + 'application/vnd.fuzzysheet' => 'fzs', + 'application/vnd.genomatix.tuxedo' => 'txd', + 'application/vnd.geogebra.file' => 'ggb', + 'application/vnd.geogebra.tool' => 'ggt', + 'application/vnd.geometry-explorer' => 'gre', + 'application/vnd.geonext' => 'gxt', + 'application/vnd.geoplan' => 'g2w', + 'application/vnd.geospace' => 'g3w', + 'application/vnd.gmx' => 'gmx', + 'application/vnd.google-earth.kml+xml' => 'kml', + 'application/vnd.google-earth.kmz' => 'kmz', + 'application/vnd.grafeq' => 'gqs', + 'application/vnd.groove-account' => 'gac', + 'application/vnd.groove-help' => 'ghf', + 'application/vnd.groove-identity-message' => 'gim', + 'application/vnd.groove-injector' => 'grv', + 'application/vnd.groove-tool-message' => 'gtm', + 'application/vnd.groove-tool-template' => 'tpl', + 'application/vnd.groove-vcard' => 'vcg', + 'application/vnd.hal+xml' => 'hal', + 'application/vnd.handheld-entertainment+xml' => 'zmm', + 'application/vnd.hbci' => 'hbci', + 'application/vnd.hhe.lesson-player' => 'les', + 'application/vnd.hp-hpgl' => 'hpgl', + 'application/vnd.hp-hpid' => 'hpid', + 'application/vnd.hp-hps' => 'hps', + 'application/vnd.hp-jlyt' => 'jlt', + 'application/vnd.hp-pcl' => 'pcl', + 'application/vnd.hp-pclxl' => 'pclxl', + 'application/vnd.hydrostatix.sof-data' => 'sfd-hdstx', + 'application/vnd.ibm.minipay' => 'mpy', + 'application/vnd.ibm.modcap' => 'listafp', + 'application/vnd.ibm.rights-management' => 'irm', + 'application/vnd.ibm.secure-container' => 'sc', + 'application/vnd.iccprofile' => 'icm', + 'application/vnd.igloader' => 'igl', + 'application/vnd.immervision-ivp' => 'ivp', + 'application/vnd.immervision-ivu' => 'ivu', + 'application/vnd.insors.igm' => 'igm', + 'application/vnd.intercon.formnet' => 'xpx', + 'application/vnd.intergeo' => 'i2g', + 'application/vnd.intu.qbo' => 'qbo', + 'application/vnd.intu.qfx' => 'qfx', + 'application/vnd.ipunplugged.rcprofile' => 'rcprofile', + 'application/vnd.irepository.package+xml' => 'irp', + 'application/vnd.is-xpr' => 'xpr', + 'application/vnd.isac.fcs' => 'fcs', + 'application/vnd.jam' => 'jam', + 'application/vnd.jcp.javame.midlet-rms' => 'rms', + 'application/vnd.jisp' => 'jisp', + 'application/vnd.joost.joda-archive' => 'joda', + 'application/vnd.kahootz' => 'ktz', + 'application/vnd.kde.karbon' => 'karbon', + 'application/vnd.kde.kchart' => 'chrt', + 'application/vnd.kde.kformula' => 'kfo', + 'application/vnd.kde.kivio' => 'flw', + 'application/vnd.kde.kontour' => 'kon', + 'application/vnd.kde.kpresenter' => 'kpt', + 'application/vnd.kde.kspread' => 'ksp', + 'application/vnd.kde.kword' => 'kwt', + 'application/vnd.kenameaapp' => 'htke', + 'application/vnd.kidspiration' => 'kia', + 'application/vnd.kinar' => 'knp', + 'application/vnd.koan' => 'skt', + 'application/vnd.kodak-descriptor' => 'sse', + 'application/vnd.las.las+xml' => 'lasxml', + 'application/vnd.llamagraphics.life-balance.desktop' => 'lbd', + 'application/vnd.llamagraphics.life-balance.exchange+xml' => 'lbe', + 'application/vnd.lotus-1-2-3' => '123', + 'application/vnd.lotus-approach' => 'apr', + 'application/vnd.lotus-freelance' => 'pre', + 'application/vnd.lotus-notes' => 'nsf', + 'application/vnd.lotus-organizer' => 'org', + 'application/vnd.lotus-screencam' => 'scm', + 'application/vnd.lotus-wordpro' => 'lwp', + 'application/vnd.macports.portpkg' => 'portpkg', + 'application/vnd.mcd' => 'mcd', + 'application/vnd.medcalcdata' => 'mc1', + 'application/vnd.mediastation.cdkey' => 'cdkey', + 'application/vnd.mfer' => 'mwf', + 'application/vnd.mfmp' => 'mfm', + 'application/vnd.micrografx.flo' => 'flo', + 'application/vnd.micrografx.igx' => 'igx', + 'application/vnd.mif' => 'mif', + 'application/vnd.mobius.daf' => 'daf', + 'application/vnd.mobius.dis' => 'dis', + 'application/vnd.mobius.mbk' => 'mbk', + 'application/vnd.mobius.mqy' => 'mqy', + 'application/vnd.mobius.msl' => 'msl', + 'application/vnd.mobius.plc' => 'plc', + 'application/vnd.mobius.txf' => 'txf', + 'application/vnd.mophun.application' => 'mpn', + 'application/vnd.mophun.certificate' => 'mpc', + 'application/vnd.mozilla.xul+xml' => 'xul', + 'application/vnd.ms-artgalry' => 'cil', + 'application/vnd.ms-cab-compressed' => 'cab', + 'application/vnd.ms-excel' => 'xlw', + 'application/vnd.ms-excel.addin.macroenabled.12' => 'xlam', + 'application/vnd.ms-excel.sheet.binary.macroenabled.12' => 'xlsb', + 'application/vnd.ms-excel.sheet.macroenabled.12' => 'xlsm', + 'application/vnd.ms-excel.template.macroenabled.12' => 'xltm', + 'application/vnd.ms-fontobject' => 'eot', + 'application/vnd.ms-htmlhelp' => 'chm', + 'application/vnd.ms-ims' => 'ims', + 'application/vnd.ms-lrm' => 'lrm', + 'application/vnd.ms-officetheme' => 'thmx', + 'application/vnd.ms-pki.seccat' => 'cat', + 'application/vnd.ms-pki.stl' => 'stl', + 'application/vnd.ms-powerpoint' => 'ppt', + 'application/vnd.ms-powerpoint.addin.macroenabled.12' => 'ppam', + 'application/vnd.ms-powerpoint.presentation.macroenabled.12' => 'pptm', + 'application/vnd.ms-powerpoint.slide.macroenabled.12' => 'sldm', + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12' => 'ppsm', + 'application/vnd.ms-powerpoint.template.macroenabled.12' => 'potm', + 'application/vnd.ms-project' => 'mpt', + 'application/vnd.ms-word.document.macroenabled.12' => 'docm', + 'application/vnd.ms-word.template.macroenabled.12' => 'dotm', + 'application/vnd.ms-works' => 'wps', + 'application/vnd.ms-wpl' => 'wpl', + 'application/vnd.ms-xpsdocument' => 'xps', + 'application/vnd.mseq' => 'mseq', + 'application/vnd.musician' => 'mus', + 'application/vnd.muvee.style' => 'msty', + 'application/vnd.mynfc' => 'taglet', + 'application/vnd.neurolanguage.nlu' => 'nlu', + 'application/vnd.nitf' => 'ntf', + 'application/vnd.noblenet-directory' => 'nnd', + 'application/vnd.noblenet-sealer' => 'nns', + 'application/vnd.noblenet-web' => 'nnw', + 'application/vnd.nokia.n-gage.data' => 'ngdat', + 'application/vnd.nokia.n-gage.symbian.install' => 'n-gage', + 'application/vnd.nokia.radio-preset' => 'rpst', + 'application/vnd.nokia.radio-presets' => 'rpss', + 'application/vnd.novadigm.edm' => 'edm', + 'application/vnd.novadigm.edx' => 'edx', + 'application/vnd.novadigm.ext' => 'ext', + 'application/vnd.oasis.opendocument.chart' => 'odc', + 'application/vnd.oasis.opendocument.chart-template' => 'otc', + 'application/vnd.oasis.opendocument.database' => 'odb', + 'application/vnd.oasis.opendocument.formula' => 'odf', + 'application/vnd.oasis.opendocument.formula-template' => 'odft', + 'application/vnd.oasis.opendocument.graphics' => 'odg', + 'application/vnd.oasis.opendocument.graphics-template' => 'otg', + 'application/vnd.oasis.opendocument.image' => 'odi', + 'application/vnd.oasis.opendocument.image-template' => 'oti', + 'application/vnd.oasis.opendocument.presentation' => 'odp', + 'application/vnd.oasis.opendocument.presentation-template' => 'otp', + 'application/vnd.oasis.opendocument.spreadsheet' => 'ods', + 'application/vnd.oasis.opendocument.spreadsheet-template' => 'ots', + 'application/vnd.oasis.opendocument.text' => 'odt', + 'application/vnd.oasis.opendocument.text-master' => 'odm', + 'application/vnd.oasis.opendocument.text-template' => 'ott', + 'application/vnd.oasis.opendocument.text-web' => 'oth', + 'application/vnd.olpc-sugar' => 'xo', + 'application/vnd.oma.dd2+xml' => 'dd2', + 'application/vnd.openofficeorg.extension' => 'oxt', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx', + 'application/vnd.openxmlformats-officedocument.presentationml.slide' => 'sldx', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'ppsx', + 'application/vnd.openxmlformats-officedocument.presentationml.template' => 'potx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => 'xltx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'dotx', + 'application/vnd.osgeo.mapguide.package' => 'mgp', + 'application/vnd.osgi.dp' => 'dp', + 'application/vnd.osgi.subsystem' => 'esa', + 'application/vnd.palm' => 'pqa', + 'application/vnd.pawaafile' => 'paw', + 'application/vnd.pg.format' => 'str', + 'application/vnd.pg.osasli' => 'ei6', + 'application/vnd.picsel' => 'efif', + 'application/vnd.pmi.widget' => 'wg', + 'application/vnd.pocketlearn' => 'plf', + 'application/vnd.powerbuilder6' => 'pbd', + 'application/vnd.previewsystems.box' => 'box', + 'application/vnd.proteus.magazine' => 'mgz', + 'application/vnd.publishare-delta-tree' => 'qps', + 'application/vnd.pvi.ptid1' => 'ptid', + 'application/vnd.quark.quarkxpress' => 'qxt', + 'application/vnd.realvnc.bed' => 'bed', + 'application/vnd.recordare.musicxml' => 'mxl', + 'application/vnd.recordare.musicxml+xml' => 'musicxml', + 'application/vnd.rig.cryptonote' => 'cryptonote', + 'application/vnd.rim.cod' => 'cod', + 'application/vnd.rn-realmedia' => 'rm', + 'application/vnd.rn-realmedia-vbr' => 'rmvb', + 'application/vnd.route66.link66+xml' => 'link66', + 'application/vnd.sailingtracker.track' => 'st', + 'application/vnd.seemail' => 'see', + 'application/vnd.sema' => 'sema', + 'application/vnd.semd' => 'semd', + 'application/vnd.semf' => 'semf', + 'application/vnd.shana.informed.formdata' => 'ifm', + 'application/vnd.shana.informed.formtemplate' => 'itp', + 'application/vnd.shana.informed.interchange' => 'iif', + 'application/vnd.shana.informed.package' => 'ipk', + 'application/vnd.simtech-mindmapper' => 'twds', + 'application/vnd.smaf' => 'mmf', + 'application/vnd.smart.teacher' => 'teacher', + 'application/vnd.solent.sdkm+xml' => 'sdkm', + 'application/vnd.spotfire.dxp' => 'dxp', + 'application/vnd.spotfire.sfs' => 'sfs', + 'application/vnd.stardivision.calc' => 'sdc', + 'application/vnd.stardivision.draw' => 'sda', + 'application/vnd.stardivision.impress' => 'sdd', + 'application/vnd.stardivision.math' => 'smf', + 'application/vnd.stardivision.writer' => 'vor', + 'application/vnd.stardivision.writer-global' => 'sgl', + 'application/vnd.stepmania.package' => 'smzip', + 'application/vnd.stepmania.stepchart' => 'sm', + 'application/vnd.sun.xml.calc' => 'sxc', + 'application/vnd.sun.xml.calc.template' => 'stc', + 'application/vnd.sun.xml.draw' => 'sxd', + 'application/vnd.sun.xml.draw.template' => 'std', + 'application/vnd.sun.xml.impress' => 'sxi', + 'application/vnd.sun.xml.impress.template' => 'sti', + 'application/vnd.sun.xml.math' => 'sxm', + 'application/vnd.sun.xml.writer' => 'sxw', + 'application/vnd.sun.xml.writer.global' => 'sxg', + 'application/vnd.sun.xml.writer.template' => 'stw', + 'application/vnd.sus-calendar' => 'susp', + 'application/vnd.svd' => 'svd', + 'application/vnd.symbian.install' => 'sisx', + 'application/vnd.syncml+xml' => 'xsm', + 'application/vnd.syncml.dm+wbxml' => 'bdm', + 'application/vnd.syncml.dm+xml' => 'xdm', + 'application/vnd.tao.intent-module-archive' => 'tao', + 'application/vnd.tcpdump.pcap' => 'pcap', + 'application/vnd.tmobile-livetv' => 'tmo', + 'application/vnd.trid.tpt' => 'tpt', + 'application/vnd.triscape.mxs' => 'mxs', + 'application/vnd.trueapp' => 'tra', + 'application/vnd.ufdl' => 'ufdl', + 'application/vnd.uiq.theme' => 'utz', + 'application/vnd.umajin' => 'umj', + 'application/vnd.unity' => 'unityweb', + 'application/vnd.uoml+xml' => 'uoml', + 'application/vnd.vcx' => 'vcx', + 'application/vnd.visio' => 'vsw', + 'application/vnd.visionary' => 'vis', + 'application/vnd.vsf' => 'vsf', + 'application/vnd.wap.wbxml' => 'wbxml', + 'application/vnd.wap.wmlc' => 'wmlc', + 'application/vnd.wap.wmlscriptc' => 'wmlsc', + 'application/vnd.webturbo' => 'wtb', + 'application/vnd.wolfram.player' => 'nbp', + 'application/vnd.wordperfect' => 'wpd', + 'application/vnd.wqd' => 'wqd', + 'application/vnd.wt.stf' => 'stf', + 'application/vnd.xara' => 'xar', + 'application/vnd.xfdl' => 'xfdl', + 'application/vnd.yamaha.hv-dic' => 'hvd', + 'application/vnd.yamaha.hv-script' => 'hvs', + 'application/vnd.yamaha.hv-voice' => 'hvp', + 'application/vnd.yamaha.openscoreformat' => 'osf', + 'application/vnd.yamaha.openscoreformat.osfpvg+xml' => 'osfpvg', + 'application/vnd.yamaha.smaf-audio' => 'saf', + 'application/vnd.yamaha.smaf-phrase' => 'spf', + 'application/vnd.yellowriver-custom-menu' => 'cmp', + 'application/vnd.zul' => 'zirz', + 'application/vnd.zzazz.deck+xml' => 'zaz', + 'application/voicexml+xml' => 'vxml', + 'application/widget' => 'wgt', + 'application/winhlp' => 'hlp', + 'application/wsdl+xml' => 'wsdl', + 'application/wspolicy+xml' => 'wspolicy', + 'application/x-7z-compressed' => '7z', + 'application/x-abiword' => 'abw', + 'application/x-ace-compressed' => 'ace', + 'application/x-apple-diskimage' => 'dmg', + 'application/x-authorware-bin' => 'x32', + 'application/x-authorware-map' => 'aam', + 'application/x-authorware-seg' => 'aas', + 'application/x-bcpio' => 'bcpio', + 'application/x-bittorrent' => 'torrent', + 'application/x-blorb' => 'blorb', + 'application/x-bzip' => 'bz', + 'application/x-bzip2' => 'bz2', + 'application/x-cbr' => 'cbz', + 'application/x-cdlink' => 'vcd', + 'application/x-cfs-compressed' => 'cfs', + 'application/x-chat' => 'chat', + 'application/x-chess-pgn' => 'pgn', + 'application/x-conference' => 'nsc', + 'application/x-cpio' => 'cpio', + 'application/x-csh' => 'csh', + 'application/x-debian-package' => 'udeb', + 'application/x-dgc-compressed' => 'dgc', + 'application/x-director' => 'w3d', + 'application/x-doom' => 'wad', + 'application/x-dtbncx+xml' => 'ncx', + 'application/x-dtbook+xml' => 'dtb', + 'application/x-dtbresource+xml' => 'res', + 'application/x-dvi' => 'dvi', + 'application/x-envoy' => 'evy', + 'application/x-eva' => 'eva', + 'application/x-font-bdf' => 'bdf', + 'application/x-font-ghostscript' => 'gsf', + 'application/x-font-linux-psf' => 'psf', + 'application/x-font-otf' => 'otf', + 'application/x-font-pcf' => 'pcf', + 'application/x-font-snf' => 'snf', + 'application/x-font-ttf' => 'ttf', + 'application/x-font-type1' => 'pfm', + 'application/x-freearc' => 'arc', + 'application/x-futuresplash' => 'spl', + 'application/x-gca-compressed' => 'gca', + 'application/x-glulx' => 'ulx', + 'application/x-gnumeric' => 'gnumeric', + 'application/x-gramps-xml' => 'gramps', + 'application/x-gtar' => 'gtar', + 'application/x-hdf' => 'hdf', + 'application/x-install-instructions' => 'install', + 'application/x-iso9660-image' => 'iso', + 'application/x-java-jnlp-file' => 'jnlp', + 'application/x-latex' => 'latex', + 'application/x-lzh-compressed' => 'lzh', + 'application/x-mie' => 'mie', + 'application/x-mobipocket-ebook' => 'prc', + 'application/x-ms-application' => 'application', + 'application/x-ms-shortcut' => 'lnk', + 'application/x-ms-wmd' => 'wmd', + 'application/x-ms-xbap' => 'xbap', + 'application/x-msaccess' => 'mdb', + 'application/x-msbinder' => 'obd', + 'application/x-mscardfile' => 'crd', + 'application/x-msclip' => 'clp', + 'application/x-msdownload' => 'msi', + 'application/x-msmediaview' => 'mvb', + 'application/x-msmetafile' => 'wmz', + 'application/x-msmoney' => 'mny', + 'application/x-mspublisher' => 'pub', + 'application/x-msschedule' => 'scd', + 'application/x-msterminal' => 'trm', + 'application/x-mswrite' => 'wri', + 'application/x-netcdf' => 'nc', + 'application/x-nzb' => 'nzb', + 'application/x-pkcs12' => 'pfx', + 'application/x-pkcs7-certificates' => 'spc', + 'application/x-pkcs7-certreqresp' => 'p7r', + 'application/x-rar-compressed' => 'rar', + 'application/x-research-info-systems' => 'ris', + 'application/x-sh' => 'sh', + 'application/x-shar' => 'shar', + 'application/x-shockwave-flash' => 'swf', + 'application/x-silverlight-app' => 'xap', + 'application/x-sql' => 'sql', + 'application/x-stuffit' => 'sit', + 'application/x-stuffitx' => 'sitx', + 'application/x-subrip' => 'srt', + 'application/x-sv4cpio' => 'sv4cpio', + 'application/x-sv4crc' => 'sv4crc', + 'application/x-t3vm-image' => 't3', + 'application/x-tads' => 'gam', + 'application/x-tar' => 'tar', + 'application/x-tcl' => 'tcl', + 'application/x-tex' => 'tex', + 'application/x-tex-tfm' => 'tfm', + 'application/x-texinfo' => 'texinfo', + 'application/x-tgif' => 'obj', + 'application/x-ustar' => 'ustar', + 'application/x-wais-source' => 'src', + 'application/x-x509-ca-cert' => 'der', + 'application/x-xfig' => 'fig', + 'application/x-xliff+xml' => 'xlf', + 'application/x-xpinstall' => 'xpi', + 'application/x-xz' => 'xz', + 'application/x-zmachine' => 'z8', + 'application/xaml+xml' => 'xaml', + 'application/xcap-diff+xml' => 'xdf', + 'application/xenc+xml' => 'xenc', + 'application/xhtml+xml' => 'xhtml', + 'application/xml' => 'xsl', + 'application/xml-dtd' => 'dtd', + 'application/xop+xml' => 'xop', + 'application/xproc+xml' => 'xpl', + 'application/xslt+xml' => 'xslt', + 'application/xspf+xml' => 'xspf', + 'application/xv+xml' => 'xvml', + 'application/yang' => 'yang', + 'application/yin+xml' => 'yin', + 'application/zip' => 'zip', + 'audio/adpcm' => 'adp', + 'audio/basic' => 'snd', + 'audio/midi' => 'rmi', + 'audio/mp4' => 'mp4a', + 'audio/mpeg' => 'mpga', + 'audio/ogg' => 'spx', + 'audio/s3m' => 's3m', + 'audio/silk' => 'sil', + 'audio/vnd.dece.audio' => 'uvva', + 'audio/vnd.digital-winds' => 'eol', + 'audio/vnd.dra' => 'dra', + 'audio/vnd.dts' => 'dts', + 'audio/vnd.dts.hd' => 'dtshd', + 'audio/vnd.lucent.voice' => 'lvp', + 'audio/vnd.ms-playready.media.pya' => 'pya', + 'audio/vnd.nuera.ecelp4800' => 'ecelp4800', + 'audio/vnd.nuera.ecelp7470' => 'ecelp7470', + 'audio/vnd.nuera.ecelp9600' => 'ecelp9600', + 'audio/vnd.rip' => 'rip', + 'audio/webm' => 'weba', + 'audio/x-aac' => 'aac', + 'audio/x-aiff' => 'aiff', + 'audio/x-caf' => 'caf', + 'audio/x-flac' => 'flac', + 'audio/x-matroska' => 'mka', + 'audio/x-mpegurl' => 'm3u', + 'audio/x-ms-wax' => 'wax', + 'audio/x-ms-wma' => 'wma', + 'audio/x-pn-realaudio' => 'ram', + 'audio/x-pn-realaudio-plugin' => 'rmp', + 'audio/x-wav' => 'wav', + 'audio/xm' => 'xm', + 'chemical/x-cdx' => 'cdx', + 'chemical/x-cif' => 'cif', + 'chemical/x-cmdf' => 'cmdf', + 'chemical/x-cml' => 'cml', + 'chemical/x-csml' => 'csml', + 'chemical/x-xyz' => 'xyz', + 'image/bmp' => 'bmp', + 'image/cgm' => 'cgm', + 'image/g3fax' => 'g3', + 'image/gif' => 'gif', + 'image/ief' => 'ief', + 'image/jpeg' => 'jpg', + 'image/ktx' => 'ktx', + 'image/png' => 'png', + 'image/prs.btif' => 'btif', + 'image/sgi' => 'sgi', + 'image/svg+xml' => 'svgz', + 'image/tiff' => 'tiff', + 'image/vnd.adobe.photoshop' => 'psd', + 'image/vnd.dece.graphic' => 'uvvi', + 'image/vnd.djvu' => 'djvu', + 'image/vnd.dwg' => 'dwg', + 'image/vnd.dxf' => 'dxf', + 'image/vnd.fastbidsheet' => 'fbs', + 'image/vnd.fpx' => 'fpx', + 'image/vnd.fst' => 'fst', + 'image/vnd.fujixerox.edmics-mmr' => 'mmr', + 'image/vnd.fujixerox.edmics-rlc' => 'rlc', + 'image/vnd.ms-modi' => 'mdi', + 'image/vnd.ms-photo' => 'wdp', + 'image/vnd.net-fpx' => 'npx', + 'image/vnd.wap.wbmp' => 'wbmp', + 'image/vnd.xiff' => 'xif', + 'image/webp' => 'webp', + 'image/x-3ds' => '3ds', + 'image/x-cmu-raster' => 'ras', + 'image/x-cmx' => 'cmx', + 'image/x-freehand' => 'fhc', + 'image/x-icon' => 'ico', + 'image/x-mrsid-image' => 'sid', + 'image/x-pcx' => 'pcx', + 'image/x-pict' => 'pic', + 'image/x-portable-anymap' => 'pnm', + 'image/x-portable-bitmap' => 'pbm', + 'image/x-portable-graymap' => 'pgm', + 'image/x-portable-pixmap' => 'ppm', + 'image/x-rgb' => 'rgb', + 'image/x-tga' => 'tga', + 'image/x-xbitmap' => 'xbm', + 'image/x-xpixmap' => 'xpm', + 'image/x-xwindowdump' => 'xwd', + 'message/rfc822' => 'eml', + 'model/iges' => 'igs', + 'model/mesh' => 'silo', + 'model/vnd.collada+xml' => 'dae', + 'model/vnd.dwf' => 'dwf', + 'model/vnd.gdl' => 'gdl', + 'model/vnd.gtw' => 'gtw', + 'model/vnd.mts' => 'mts', + 'model/vnd.vtu' => 'vtu', + 'model/vrml' => 'wrl', + 'model/x3d+binary' => 'x3dbz', + 'model/x3d+vrml' => 'x3dvz', + 'model/x3d+xml' => 'x3dz', + 'text/cache-manifest' => 'appcache', + 'text/calendar' => 'ifb', + 'text/css' => 'css', + 'text/csv' => 'csv', + 'text/html' => 'html', + 'text/n3' => 'n3', + 'text/plain' => 'txt', + 'text/prs.lines.tag' => 'dsc', + 'text/richtext' => 'rtx', + 'text/sgml' => 'sgml', + 'text/tab-separated-values' => 'tsv', + 'text/troff' => 'tr', + 'text/turtle' => 'ttl', + 'text/uri-list' => 'urls', + 'text/vcard' => 'vcard', + 'text/vnd.curl' => 'curl', + 'text/vnd.curl.dcurl' => 'dcurl', + 'text/vnd.curl.mcurl' => 'mcurl', + 'text/vnd.curl.scurl' => 'scurl', + 'text/vnd.dvb.subtitle' => 'sub', + 'text/vnd.fly' => 'fly', + 'text/vnd.fmi.flexstor' => 'flx', + 'text/vnd.graphviz' => 'gv', + 'text/vnd.in3d.3dml' => '3dml', + 'text/vnd.in3d.spot' => 'spot', + 'text/vnd.sun.j2me.app-descriptor' => 'jad', + 'text/vnd.wap.wml' => 'wml', + 'text/vnd.wap.wmlscript' => 'wmls', + 'text/x-asm' => 's', + 'text/x-c' => 'hh', + 'text/x-fortran' => 'for', + 'text/x-java-source' => 'java', + 'text/x-nfo' => 'nfo', + 'text/x-opml' => 'opml', + 'text/x-pascal' => 'pas', + 'text/x-setext' => 'etx', + 'text/x-sfv' => 'sfv', + 'text/x-uuencode' => 'uu', + 'text/x-vcalendar' => 'vcs', + 'text/x-vcard' => 'vcf', + 'video/3gpp' => '3gp', + 'video/3gpp2' => '3g2', + 'video/h261' => 'h261', + 'video/h263' => 'h263', + 'video/h264' => 'h264', + 'video/jpeg' => 'jpgv', + 'video/jpm' => 'jpm', + 'video/mj2' => 'mjp2', + 'video/mp4' => 'mpg4', + 'video/mpeg' => 'mpg', + 'video/ogg' => 'ogv', + 'video/quicktime' => 'qt', + 'video/vnd.dece.hd' => 'uvvh', + 'video/vnd.dece.mobile' => 'uvvm', + 'video/vnd.dece.pd' => 'uvvp', + 'video/vnd.dece.sd' => 'uvvs', + 'video/vnd.dece.video' => 'uvvv', + 'video/vnd.dvb.file' => 'dvb', + 'video/vnd.fvt' => 'fvt', + 'video/vnd.mpegurl' => 'mxu', + 'video/vnd.ms-playready.media.pyv' => 'pyv', + 'video/vnd.uvvu.mp4' => 'uvvu', + 'video/vnd.vivo' => 'viv', + 'video/webm' => 'webm', + 'video/x-f4v' => 'f4v', + 'video/x-fli' => 'fli', + 'video/x-flv' => 'flv', + 'video/x-m4v' => 'm4v', + 'video/x-matroska' => 'mkv', + 'video/x-mng' => 'mng', + 'video/x-ms-asf' => 'asx', + 'video/x-ms-vob' => 'vob', + 'video/x-ms-wm' => 'wm', + 'video/x-ms-wmv' => 'wmv', + 'video/x-ms-wmx' => 'wmx', + 'video/x-ms-wvx' => 'wvx', + 'video/x-msvideo' => 'avi', + 'video/x-sgi-movie' => 'movie', + 'video/x-smv' => 'smv', + 'x-conference/x-cooltalk' => 'ice' + ]; + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/RFC5987.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/RFC5987.php new file mode 100644 index 000000000..c5843338c --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/helpers/RFC5987.php @@ -0,0 +1,56 @@ + + */ +class RFC5987 +{ + + /** + * @param array $headers + * @return null|string + */ + public static function filename($headers) + { + if ($headers === []) { + return null; + } + $name = null; + $charset = null; + $encode = null; + foreach ($headers as $head) { + if (strncasecmp($head, 'filename', 8) !== 0) { + continue; + } + if ($head[8] === '*') { + if (preg_match('/filename\*(0\*|)=([^\']+)\'\'(.*)/', $head, $out)) { + $charset = mb_strtoupper($out[2]); + $encode = $out[3]; + } else { + $encode .= preg_replace('/filename\*\d+\*\=/', '', $head); + } + } else { + $name = str_replace(['filename', '"', ' ', '='], '', $head); + } + } + + if ($encode !== null) { + $name = urldecode($encode); + if ($charset !== Parser::$charset) { + $name = mb_convert_encoding($name, Parser::$charset, $charset); + } + } + return $name; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/messages/Feedback.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/messages/Feedback.php new file mode 100644 index 000000000..791bccd34 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/messages/Feedback.php @@ -0,0 +1,144 @@ + + */ +class Feedback extends Message +{ + /** + * Spam or some other kind of email abuse; + */ + const TYPE_ABUSE = 'abuse'; + /** + * Indicates some kind of fraud or phishing activity; + */ + const TYPE_FRAUD = 'fraud'; + /** + * Report of a virus found in the originating message; + */ + const TYPE_VIRUS = 'virus'; + /** + * Any other feedback that doesn't fit into other types; + */ + const TYPE_OTHER = 'other'; + /** + * Can be used to report an email message that was mistakenly marked as spam + */ + const TYPE_NOT_SPAM = 'not-spam'; + + /** + * @return null|string + */ + public function getType() + { + if (!$this->hasHeader('feedback-type')) { + return null; + } + return $this->getHeaderLine('feedback-type'); + } + + /** + * @return null|string + */ + public function getUserAgent() + { + if (!$this->hasHeader('user-agent')) { + return null; + } + return $this->getHeaderLine('user-agent'); + } + + /** + * @return null|string + */ + public function getVersion() + { + if (!$this->hasHeader('version')) { + return null; + } + return $this->getHeaderLine('version'); + } + + /** + * @return null|string + */ + public function getOriginalEnvelopeId() + { + if (!$this->hasHeader('original-envelope-id')) { + return null; + } + return $this->getHeaderLine('Original-Envelope-Id'); + } + + /** + * @return \bashkarev\email\Address|null + */ + public function getOriginalMailFrom() + { + $from = Address::parse($this->getHeaderLine('Original-Mail-From'), $this->getCharset()); + if ($from === []) { + return null; + } + return $from[0]; + } + + /** + * @return \DateTime|null + */ + public function getArrivalDate() + { + if (!$this->hasHeader('arrival-date')) { + return null; + } + + try { + $date = new \DateTime($this->getHeaderLine('arrival-date')); + } catch (\Exception $e) { + return null; + } + return $date; + } + + /** + * @return array + */ + public function getReportingMTA() + { + return $this->getHeader('reporting-mta'); + } + + /** + * @return null|string + */ + public function getSourceIP() + { + if (!$this->hasHeader('source-ip')) { + return null; + } + return $this->getHeaderLine('source-ip'); + } + + /** + * @return int|null + */ + public function getIncidents() + { + if (!$this->hasHeader('incidents')) { + return null; + } + return (int)$this->getHeader('incidents'); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/parser/Email.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/parser/Email.php new file mode 100644 index 000000000..79c682a28 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/parser/Email.php @@ -0,0 +1,272 @@ + + */ +class Email +{ + const T_UNDEFINED = 0x00; + const T_START_BOUNDARY = 0x01; + const T_END_BOUNDARY = 0x02; + const T_HEADER = 0x03; + + /** + * @var Message + */ + protected $message; + /** + * @var Part + */ + protected $part; + /** + * @var resource + */ + protected $handle; + /** + * @var string + */ + protected $line; + /** + * @var array + */ + protected $boundary = []; + /** + * @var bool + */ + protected $allowedHeader = true; + + public function __construct($mime = null) + { + $class = ($mime !== null && isset(Parser::$map[$mime])) ? Parser::$map[$mime] : 'bashkarev\email\Message'; + $this->message = new $class(); + } + + /** + * @param resource|string|array $handles + * @param boolean $afterClose + * @return Message + */ + public function parse($handles, $afterClose = true) + { + $handles = (array)$handles; + foreach ($handles as $handle) { + if (!is_resource($handle)) { + $this->handle = fopen('php://memory', 'rb+'); + fwrite($this->handle, $handle); + } else { + $this->handle = $handle; + } + rewind($this->handle); + while (feof($this->handle) === false) { + $this->read(); + } + if ($afterClose) { + fclose($this->handle); + } + $this->handle = null; + $this->allowedHeader = true; + } + $this->insertPart(); + + return $this->message; + } + + /** + * read line + */ + protected function read() + { + $line = $this->nextLine(); + if ( + $this->parseBoundary($line) === true + || $this->parseHeader($line) === true + ) { + return; + } + $this->parseContent($line); + } + + /** + * @param int $type + * @param $value + */ + protected function setToken($type, $value) + { + $this->bindHeader($type, $value); + $this->bindBoundary($type, $value); + } + + /** + * @return string + */ + protected function nextLine() + { + $this->line = fgets($this->handle); + return rtrim($this->line, "\n\r"); + } + + /** + * @param $line + * @return bool + */ + protected function parseBoundary($line) + { + if (!isset($line[0]) || $line[0] !== '-') { + return false; + } + $line = rtrim($line); + if (!isset($this->boundary[$line])) { + return false; + } + $boundary = $this->boundary[$line]; + $this->setToken($boundary[0], $boundary[1]); + return true; + } + + /** + * @param int $type + * @param mixed $value + */ + protected function bindBoundary($type, $value) + { + if ( + $type === self::T_HEADER + && strcasecmp($value[0], 'Content-Type') === 0 + && preg_match('/boundary(?:=|\s=)([^;]+)/i', $value[1], $out) + ) { + $id = trim($out[1], " \t\"'"); + $this->boundary['--' . $id] = [self::T_START_BOUNDARY, $id]; + $this->boundary['--' . $id . '--'] = [self::T_END_BOUNDARY, $id]; + } else if ($type === self::T_START_BOUNDARY) { + $this->allowedHeader = true; + $this->insertPart(); + $this->part = new Part($value); + } + } + + /** + * @param string $line + * @return bool + */ + protected function parseContent($line) + { + if ($this->allowedHeader === true) { + return false; + } + + /** + * @var $stream \bashkarev\email\Transport + */ + $stream = $this->context()->getStream(); + if ($line !== '') { // start EOL + $stream->write($this->line); + } + + $offset = ftell($this->handle); + $foundSeparator = false; + while (feof($this->handle) === false) { + $before = ftell($this->handle); + $buff = stream_get_line($this->handle, Parser::$buffer, "\n-"); + $after = ftell($this->handle); + if (isset($buff[0]) && $buff[0] === '-') { + $stream->write("\n"); + fseek($this->handle, $offset); + break 1; + } + if ($foundSeparator) { + $stream->write("\n-"); + } + $stream->write($buff); + $foundSeparator = $after - $before - strlen($buff) === 2; + $offset = $after - 1; + } + return true; + } + + /** + * @param string $line + * @return bool + */ + protected function parseHeader($line) + { + if ( + $this->allowedHeader === false + || strpos($line, ':') === false + ) { + return false; + } + list($field, $value) = HeaderHelper::parse($line); + $i = ftell($this->handle); + while (feof($this->handle) === false) { + $line = $this->nextLine(); + if ( + ($this->allowedHeader = ($line !== '')) === false + || ($line[0] !== "\t" && $line[0] !== ' ') + ) { + break 1; + } + $i = ftell($this->handle); + $value .= ' ' . ltrim($line); + } + fseek($this->handle, $i); + $value = $this->decodeMimeHeader($value); + $this->setToken(self::T_HEADER, [$field, $value]); + return true; + } + + /** + * @param int $type + * @param mixed $value + */ + protected function bindHeader($type, $value) + { + if ($type === self::T_HEADER) { + $this->context()->setHeader($value[0], $value[1]); + } + } + + /** + * @param $str + * @return string + */ + protected function decodeMimeHeader($str) + { + if (strpos($str, '=?') === false) { + return $str; + } + $value = mb_decode_mimeheader($str); + if (strpos($str, '?Q') !== false) { + $value = str_replace('_', ' ', $value); + } + return $value; + } + + /** + * @return Message|Part + */ + private function context() + { + return ($this->part === null) ? $this->message : $this->part; + } + + private function insertPart() + { + if ($this->part !== null) { + $this->part->isAttachment() ? $this->message->setAttachment($this->part) : $this->message->setPart($this->part); + $this->part = null; + } + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Ftp.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Ftp.php new file mode 100644 index 000000000..ddfc411fc --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Ftp.php @@ -0,0 +1,94 @@ + + */ +class Ftp extends Transport +{ + /** + * @var string + */ + public $username = 'anonymous'; + /** + * @var string + */ + public $password; + /** + * @var string + */ + protected $path; + /** + * @var resource + */ + protected $handle; + /** + * @var string + */ + protected $site; + + /** + * @inheritdoc + */ + public function __construct(Mime $mime) + { + $this->path = $mime->findInHeader('content-type', 'directory', ''); + $this->path = '/' . $mime->findInHeader('content-type', 'name', ''); + $this->site = $mime->findInHeader('content-type', 'site'); + } + + /** + * @inheritdoc + */ + public function getHandle() + { + if ($this->handle === null) { + $this->handle = fopen('php://temp', 'wb+'); + $this->download(); + } + return $this->handle; + } + + /** + * @inheritdoc + */ + public function write($data) + { + $this->parseHeader($data); + return $this; + } + + /** + * @inheritdoc + */ + public function close() + { + if (is_resource($this->handle)) { + fclose($this->handle); + } + } + + /** + * @throws \Exception + */ + protected function download() + { + if (!extension_loaded('ftp')) { + throw new \Exception('PHP extension FTP is not loaded.'); + } + $stream = ftp_connect($this->site); + ftp_login($stream, $this->username, $this->password); + ftp_pasv($stream, true); + ftp_fget($stream, $this->handle, $this->path, FTP_BINARY); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Local.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Local.php new file mode 100644 index 000000000..df3070e75 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Local.php @@ -0,0 +1,69 @@ + + */ +class Local extends Transport +{ + /** + * @var string + */ + protected $name; + /** + * @var resource + */ + protected $handle; + + /** + * @inheritdoc + */ + public function __construct(Mime $mime) + { + $this->name = $mime->findInHeader('content-type', 'name'); + if ($this->name === null) { + throw new \Exception('Required option name not found'); + } + } + + /** + * @inheritdoc + */ + public function getHandle() + { + if ($this->handle === null) { + $this->handle = fopen($this->name, 'rb+'); + } + return $this->handle; + } + + /** + * @inheritdoc + */ + public function write($data) + { + $this->parseHeader($data); + return $this; + } + + /** + * @inheritdoc + */ + public function close() + { + if (is_resource($this->handle)) { + fclose($this->handle); + } + } + + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Url.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Url.php new file mode 100644 index 000000000..509175603 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/src/transports/Url.php @@ -0,0 +1,99 @@ + + */ +class Url extends Transport +{ + /** + * @var string + */ + protected $url; + /** + * @var resource + */ + protected $handle; + + /** + * @inheritdoc + */ + public function __construct(Mime $mime) + { + $this->url = $mime->findInHeader('content-type', 'url'); + if ($this->url === null) { + throw new \Exception('Required option URL not found'); + } + } + + /** + * @inheritdoc + */ + public function getHandle() + { + if ($this->handle === null) { + $this->handle = fopen('php://temp', 'wb+'); + $this->download(); + } + return $this->handle; + } + + /** + * @inheritdoc + */ + public function write($data) + { + $this->parseHeader($data); + return $this; + } + + /** + * @inheritdoc + */ + public function close() + { + if (is_resource($this->handle)) { + fclose($this->handle); + } + } + + /** + * @throws \Exception + */ + protected function download() + { + if (!extension_loaded('curl')) { + throw new \Exception('extension curl not found'); + } + + $ch = curl_init($this->url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); + + curl_setopt($ch, CURLOPT_FILE, $this->handle); + curl_setopt($ch, CURLOPT_HEADER, 0); + + curl_exec($ch); + + // check cURL error + $error = curl_errno($ch); + $message = curl_error($ch); + + if ($error > 0) { + throw new \Exception("Curl error: #{$error}: {$message}"); + } + + curl_close($ch); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/BoundaryTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/BoundaryTest.php new file mode 100644 index 000000000..00c619df8 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/BoundaryTest.php @@ -0,0 +1,70 @@ + + */ +class BoundaryTest extends TestCase +{ + + public function testParse() + { + $expected = [ + '--te st' => [Email::T_START_BOUNDARY, 'te st'], + '--te st--' => [Email::T_END_BOUNDARY, 'te st'], + ]; + + foreach ([ + ["Content-Type: multipart/mixed;\n\tboundary=te st", 'normal'], + ["CONTENT-TYPE: MULTIPART/MIXED;\n\tBOUNDARY=te st", 'uppercase'], + ["content-type: multipart/mixed;\n\tboundary=te st", 'lowercase'], + ["Content-Type: multipart/mixed;\n\tboundary=te st\t", 'right tab'], + ["Content-Type: multipart/mixed;\n\tboundary=te st ", 'right spaces'], + ["Content-type: multipart/mixed; boundary=\"te\n st\"", 'new line'], + ['Content-Type: "multipart/mixed"; boundary="te st"', '>"<'], + ["Content-Type: 'multipart/mixed'; boundary='te st'", ">'<"], + ['Content-Type: "multipart/mixed"; boundary = "te st"', "with spaces"], + ["Content-Type: \"multipart/mixed\"; boundary\t=\t\"te st\"", "with tab"], + ] as $eml) { + $parser = new Email(); + $parser->parse($eml[0]); + $this->assertEquals($expected, $this->getProperty('bashkarev\email\parser\Email', 'boundary')->getValue($parser), $eml[1]); + } + + $parser = new Email(); + $parser->parse('Content-Type: multipart/alternative; boundary="=felis-alternative=20170125210403=141032"'); + $this->assertEquals([ + '--=felis-alternative=20170125210403=141032' => [Email::T_START_BOUNDARY, '=felis-alternative=20170125210403=141032'], + '--=felis-alternative=20170125210403=141032--' => [Email::T_END_BOUNDARY, '=felis-alternative=20170125210403=141032'], + ], $this->getProperty('bashkarev\email\parser\Email', 'boundary')->getValue($parser)); + + } + + public function testMultipartAlternative() + { + $parser = new Email(); + $parser->parse('Content-Type: multipart/alternative; boundary=boundary42 '); + $this->assertEquals([ + '--boundary42' => [Email::T_START_BOUNDARY, 'boundary42'], + '--boundary42--' => [Email::T_END_BOUNDARY, 'boundary42'], + ], $this->getProperty('bashkarev\email\parser\Email', 'boundary')->getValue($parser)); + } + + public function testMultipartMixed() + { + $parser = new Email(); + $parser->parse('Content-Type: multipart/mixed; boundary=gc0pJq0M:08jU534c0p'); + $this->assertEquals([ + '--gc0pJq0M:08jU534c0p' => [Email::T_START_BOUNDARY, 'gc0pJq0M:08jU534c0p'], + '--gc0pJq0M:08jU534c0p--' => [Email::T_END_BOUNDARY, 'gc0pJq0M:08jU534c0p'], + ], $this->getProperty('bashkarev\email\parser\Email', 'boundary')->getValue($parser)); + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/ContentTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/ContentTest.php new file mode 100644 index 000000000..2b7ce7307 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/ContentTest.php @@ -0,0 +1,58 @@ + + */ +class ContentTest extends TestCase +{ + + public function testEOL() + { + // \r\n - WIN + // \n - other + $eml = "Content-Type: multipart/mixed;\n\tboundary=test\n--test\nContent-Type: text/plain;\n\ntext"; + $this->field($eml, function (Message $message) { + $this->assertEquals('text', $message->textPlain()); + }); + + $eml = "Content-Type: multipart/mixed;\n\tboundary=test\n--test\nContent-Type: text/plain;\n\ntext\n--not-boundary"; + $this->field($eml, function (Message $message) { + $this->assertEquals("text\n--not-boundary", $message->textPlain()); + }); + + $eml = "Content-Type: multipart/mixed;\r\n\tboundary=test\r\n--test\r\nContent-Type: text/plain;\r\n\r\ntext"; + $this->field($eml, function (Message $message) { + $this->assertEquals('text', $message->textPlain()); + }); + + $eml = "Content-Type: multipart/mixed;\r\n\tboundary=test\r\n--test\r\nContent-Type: text/plain;\r\n\r\ntext\r\n--not-boundary"; + $this->field($eml, function (Message $message) { + $this->assertEquals("text\r\n--not-boundary", $message->textPlain()); + }); + + } + + public function testSeparator() + { + $this + ->field('/parser/content-separator-1.eml', function (Message $message) { + $this->assertEquals("http://test-local.ru", $message->textPlain()); + }) + ->field('/parser/content-separator-2.eml', function (Message $message) { + $this->assertContains("-", $message->textPlain()); + }) + ->field('/parser/content-separator-3.eml', function (Message $message) { + $this->assertContains("-", $message->textPlain()); + }); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/HeaderTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/HeaderTest.php new file mode 100644 index 000000000..8d083ca6c --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/HeaderTest.php @@ -0,0 +1,67 @@ + + */ +class HeaderTest extends TestCase +{ + + public function testConcatenating() + { + $this + ->field('Subject: This is a test', 'This is a test', 'subject') + ->field('Subject : Saying Hello', 'Saying Hello', 'subject') + ->field("Subject: This\r\n is a test\r\n temp ", 'This is a test temp', 'subject') + ->field("Subject: This \r\nFri, 21 Nov 1997 09", 'This', 'subject') + ->field("Subject: This \r\n\tFri, 21 Nov 1997 09(comment): 55 : 06 -0600\r\nUndefined:test", 'This Fri, 21 Nov 1997 09(comment): 55 : 06 -0600', 'subject'); + } + + public function testEncode() + { + if (PHP_VERSION_ID < 50600) { + return; + } + $this + ->field('Subject: =?ISO-2022-JP?B?GyRCRnxLXDhsGyhC?=', '日本語', 'subject') + ->field("Subject: =?ISO-2022-JP?B?GyRCRDkkJEQ5JCREOSQkGyhCU3ViamVjdBskQiROPmw5ZyRPGyhCZm9s?=\r\n\t=?ISO-2022-JP?B?ZGluZxskQiQ5JGskTiQsQDUkNyQkJHMkQCQxJEkkJCRDJD8kJCRJGyhC?=\r\n\t=?ISO-2022-JP?B?GyRCJCYkSiRrJHMkQCRtJCYhKRsoQg==?=", 'é•·ã„é•·ã„é•·ã„Subjectã®å ´åˆã¯foldingã™ã‚‹ã®ãŒæ­£ã—ã„ã‚“ã ã‘ã©ã„ã£ãŸã„ã©ã†ãªã‚‹ã‚“ã ã‚ã†ï¼Ÿ', 'subject') + ->field('Subject: =?ISO-8859-1?Q?Mail_avec_fichier_attach=E9_de_1ko?=', 'Mail avec fichier attaché de 1ko', 'subject') + ->field('Subject: =?ISO-8859-1?Q?Informaci=F3n_Apartamento_a_la_Venta?= =?ISO-8859-1?Q?_en_Benasque(Demandas:_0442_______)?=,', 'Información Apartamento a la Venta en Benasque(Demandas: 0442 ),', 'subject') + ->field("Subject: =?UTF-8?B?4p2E77iP77iPINCh0LDQvNGL0LUg0Y/RgNC60LjQtSDQsNC70YzQsdC+0Lw=?=\r\n\t=?UTF-8?B?0Ysg0Lgg0L/Qu9C10LnQu9C40YHRgtGLINGP0L3QstCw0YDRjyA=?=", 'â„ï¸ï¸ Самые Ñркие альбомы и плейлиÑÑ‚Ñ‹ ÑнварÑ', 'subject') + ->field("Subject: \r\n\t=?GB2312?B?zeLDs8jL1LG1xMD7xvejrMO/zOyw79b6xPrL0cv3xPqy+sa30NDStbXEyc/N?=\r\n\t=?GB2312?B?8snP087Ev7Hqv827p9fK1LSjoQ==?=", '外贸人员的利器,æ¯å¤©å¸®åŠ©æ‚¨æœç´¢æ‚¨äº§å“行业的上è›å«Œæ–‡å‹˜æ˜•çªÑ‘试矗', 'subject') + //->field('Subject: =?iso-2022-jp?B?GyRCJygnJS1iGyhCNDEgGyRCJ2AnZBsoQiAyOC4wOS4yMDE2?=', 'ЖД№41 от 28.09.2016', 'subject') // Failed test + ->field("To: =?UTF-8?Q?=D0=A1=D0=B5=D0=BB=D1=8E=D0=BA_=D0=A1=D1=82?=\n =?UTF-8?Q?=D0=B5=D0=BF=D0=B0=D0=BD_=D0=90=D0=BD=D0=B4?=\n =?UTF-8?Q?=D1=80=D0=B5=D0=B5=D0=B2=D0=B8=D1=87?= ", '', 'subject') + ->field('/m0066.eml', 'Окончание Ñрока региÑтрации домена - 2017-02-16', function (Message $message) { + return $message->getSubject(); + }); + + } + + public function testFindInHeader() + { + foreach ([ + ['Content-Type', 'text/plain;charset="utf-8"', 'utf-8', 'normal'], + ['CONTENT-TYPE', 'TEXT/PLAIN;CHARSET="UTF-8"', 'UTF-8', 'uppercase'], + ['Content-Type', 'text/plain;charset=utf-8', 'utf-8', 'without quotes'], + ['Content-Type', "text/plain;charset='utf-8'", 'utf-8', 'quotes'], + ['Content-Type', 'text/plain;charset = utf-8 ', 'utf-8', 'with spaces'], + ['Content-Type', 'text/plain;charset = utf-8 ', 'utf-8', 'with spaces 2'], + ['Content-Type', "text/plain;charset\t=\tutf-8\t", 'utf-8', 'with tab'], + ] as $item) { + list($header, $value, $expected, $message) = $item; + $mime = new Mime(); + $mime->setHeader($header, $value); + $this->assertEquals($expected, $mime->findInHeader('Content-Type', 'charset'), $message); + } + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MessageTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MessageTest.php new file mode 100644 index 000000000..71d00b9ac --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MessageTest.php @@ -0,0 +1,53 @@ + + */ +class MessageTest extends TestCase +{ + + public function testDate() + { + $this + ->field('Date: 26 Aug 76 1429 EDT','Thu, 26 Aug 1976 14:29:00 -0400', function (Message $message) { + return $message->getDate()->format(DateTime::RFC2822); + },'valid rfc822') + ->field('Date: Thu, 2 Feb 2017 10:46:57 +0100 (CET)', 'Thu, 02 Feb 2017 10:46:57 +0100', function (Message $message) { + return $message->getDate()->format(DateTime::RFC2822); + },'valid rfc2822') + ->field('Date: This is not a date', function (Message $message) { + $this->assertNull($message->getDate()); + }, 'invalid') + ->field('Date: ', function (Message $message) { + $this->assertNull($message->getDate()); + }, 'empty') + ->field('Date: Sun, 16 Jun 2013 17:50:12 +0200', 'Sun, 16 Jun 2013 17:50:12 +0200', function (Message $message) { + return $message->getDate()->format(DateTime::RFC2822); + }); + } + + public function testHtml() + { + $this + ->field('/nested.eml', function (Message $message) { + $this->assertStringEqualsFile(__DIR__.'/fixtures/text/nested.txt',$message->textHtml()); + }) + ->field('/non-unique-cid.eml', function (Message $message) { + $this->assertContains( + 'data:image/gif;base64,/9j/4AAQSkZJRgABAQEASABIAAD//gAeaHR0cDovL3RpbGVkLWJnLmJsb2dzcG90LmNvbf', + $message->textHtml(true) + ); + }); + + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MimeTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MimeTest.php new file mode 100644 index 000000000..ff512af48 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/MimeTest.php @@ -0,0 +1,133 @@ + + */ +class MimeTest extends TestCase +{ + + public function testIsAttachment() + { + $this->field('/outlook-express.eml', function (Message $message) { + $this->assertTrue($message->isAttachment()); + $this->assertCount(1, $message->getAttachments()); + }); + + $this->assertFalse((new Mime())->isAttachment()); + foreach ([ + 'multipart/alternative', + 'multipart/related', + 'multipart/mixed', + 'text/plain', + 'text/html' + ] as $mime) { + $part = new Mime(); + $part->setHeader('Content-Type', $mime); + $this->assertFalse($part->isAttachment()); + } + } + + public function testFileName() + { + $part = new Mime(); + $part->setHeader('Content-Disposition', 'attachment;filename*=utf-8\'\'%D1%80%D0%B5%D0%BA%D0%B2%D0%B8%D0%B7%D0%B8%D1%82%D1%8B%2D%D0%9A%D0%BE%D0%BD%D1%81%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D0%BD%D1%82%20%D0%98%D0%A2%20%2D%20new.doc'); + $this->assertEquals('реквизиты-КонÑультант ИТ - new.doc', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', "attachment; filename=\"EURO rates\"; filename*=utf-8''%e2%82%ac%20rates"); + $this->assertEquals('€ rates', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', "attachment; filename*0*=utf-8''nyan%20cat%20%E2%9C%94.gif"); + $this->assertEquals('nyan cat ✔.gif', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', "attachment; filename*0*=UTF-8''long%20name%20with%20spaces,%20very%20very%20very%20very;filename*1*=%20long%20long%20long%20long.txt"); + $this->assertEquals('long name with spaces, very very very very long long long long.txt', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', 'attachment; filename=simple.txt'); + $this->assertEquals('simple.txt', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', 'attachment; filename="simple.txt"'); + $this->assertEquals('simple.txt', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Disposition', 'attachment; filename="simple.txt"'); + $this->assertEquals('simple.txt', $part->getFileName()); + + $part = new Mime(); + $part->setHeader('Content-Type', 'image/gif; name="logo.jpg"'); + $this->assertEquals('logo.jpg', $part->getFileName()); + + } + + public function testName() + { + $part = new Mime(); + $part->setHeader('Content-Type', 'image/gif; name="logo.jpg"'); + $this->assertEquals('logo.jpg', $part->getName()); + } + + public function testMessagePartial() + { + $block = Parser::email([ + fopen(__DIR__ . '/fixtures/message-partial.1.msg.eml', 'rb'), + fopen(__DIR__ . '/fixtures/message-partial.2.msg.eml', 'rb'), + ]); + $message = $block->getMessage(); + $this->assertTrue($message->hasAttachments()); + $this->assertStringEqualsFile(__DIR__ . '/fixtures/text/message-partial.txt', $message->textPlain()); + $this->assertEquals('{15_3779, Victoria & Cherry}: suzeFan - 2377h003.jpg', $message->getSubject()); + $this->assertStringEqualsFile(__DIR__ . '/fixtures/attachments/2377h003.jpg', $message->getAttachments()[0]->getStream()->getContents()); + } + + public function testMessageRFC822() + { + $this->field('/enclosed.eml', function (Message $main) { + $this->assertTrue($main->hasAttachments()); + $message = $main->getAttachments()[0]->getMessage(); + $this->assertNotNull($message); + $html = $message->textHtml(); + if (PHP_EOL !== "\n") { + $html = str_replace("\n", PHP_EOL, $html); + } + $this->assertStringEqualsFile(__DIR__ . '/fixtures/text/enclosed.txt', $html); + }); + } + + public function testBoundary() + { + $mime = new Mime(); + $mime->setHeader('Content-Type', 'multipart/alternative; boundary="=felis-alternative=20170125210403=141032"'); + $this->assertEquals('=felis-alternative=20170125210403=141032', $mime->getBoundary(), ''); + } + + public function testId() + { + foreach ([ + ['', 'id', 'simple'], + ['< id >', 'id', 'space'], + [' < id > ', 'id', 'space'], + ["\t\t", 'id', 'tab'], + ] as $data) { + list($value, $expected, $message) = $data; + $mime = new Mime(); + $mime->setHeader('Content-Id', $value); + $this->assertEquals($expected, $mime->getID(), $message); + } + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/TestCase.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/TestCase.php new file mode 100644 index 000000000..a0312eae0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/TestCase.php @@ -0,0 +1,72 @@ + + */ +class TestCase extends \PHPUnit\Framework\TestCase +{ + + /** + * @param mixed $value + * @param mixed $expected + * @param string|callable $filed + * @param string $description + * @return $this + */ + protected function field($value, $expected, $filed = null, $description = '') + { + $message = $this->message($value); + if (is_callable($expected)) { + $expected($message); + return $this; + } + $actual = is_callable($filed) ? $filed($message) : $message->getHeaderLine($filed); + $this->assertEquals($expected, $actual, $description); + return $this; + } + + /** + * @param mixed $file + * @return \bashkarev\email\Message + */ + protected function message($file) + { + if (is_string($file)) { + if ($file[0] === '/') { + $stream = fopen(__DIR__ . "/fixtures{$file}", 'rb+'); + } else { + $stream = fopen('php://memory', 'rb+'); + fwrite($stream, $file); + } + } else { + $stream = $file; + } + return Parser::email($stream); + } + + /** + * Returns property value + * + * @param string $className + * @param string $propertyName + * @return \ReflectionProperty + */ + protected function getProperty($className, $propertyName) + { + $reflector = new \ReflectionClass($className); + $property = $reflector->getProperty($propertyName); + $property->setAccessible(true); + + return $property; + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/1KB.zip b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/1KB.zip new file mode 100644 index 000000000..06d740502 Binary files /dev/null and b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/1KB.zip differ diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/2377h003.jpg b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/2377h003.jpg new file mode 100644 index 000000000..5d69a2460 Binary files /dev/null and b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/2377h003.jpg differ diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/hello.html b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/hello.html new file mode 100644 index 000000000..8cbc73bbf --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/attachments/hello.html @@ -0,0 +1,9 @@ + + + + Hello + + +

Hello, world!

+ + \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/aol.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/aol.eml new file mode 100644 index 000000000..f3ec6818c --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/aol.eml @@ -0,0 +1,118 @@ +Content-Type: multipart/report; report-type="feedback-report"; + boundary="===============8110170601564424224==" +MIME-Version: 1.0 +Authentication-Results: mx.google.com; + spf=neutral (google.com: 209.85.160.174 is neither + permitted nor denied by best guess record for domain of + mike+caf_=bob=gmail.com@example.com) + smtp.mail=mike+caf_=bob=gmail.com@example.com +Date: Wed, 17 Nov 2010 15:02:19 EST +Delivered-To: bob@example.com +From: scomp@aol.net +Message-Id: <201011171502.fa984ce434cc97@omr-m11.mx.aol.com> +Precedence: list +Received: from mail-iw0-f179.google.com (mail-iw0-f179.google.com + [209.85.214.179]) + by mxa.example.com (Postfix) with ESMTP id 4730DF01123 + for ; Wed, 17 Nov 2010 20:02:42 +0000 (UTC) +Received-Spf: neutral (google.com: 209.85.160.174 is neither permitted nor + denied by best guess record for domain of + mike+caf_=bob=gmail.com@example.com) + client-ip=209.85.160.174; +Sender: SRS0=zFhZ=SS=aol.net=scomp@example.com +Subject: Email Feedback Report for IP 173.193.210.34 +To: spam.abuse@example.com +X-Aol-Inrly: mars-34.example.com [173.193.210.34] scmp-d48 +X-Aol-Ip: 172.19.132.211 +X-Beenthere: admin@example.com +X-Forwarded-For: bob@example.com bob@example.net +X-Forwarded-To: bob@example.net +X-Loop: scomp +X-Original-Authentication-Results: mx.google.com; spf=pass (google.com: domain + of bc=scomp+aol.net=@example.com designates + 174.37.214.195 as permitted + sender) smtp.mail=bc=scomp+aol.net=@example.com; + dkim=pass header.i=@example.com +X-Original-Sender: scomp@aol.net +X-X-Forwarded-For: mike@example.com bob@example.com + +--===============8110170601564424224== +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit + +This is an email abuse report for an email message with the message-id of 20101117174130.28884.55421@luna received from IP address 173.193.210.34 on Wed, 17 Nov 2010 12:41:30 -0500 (EST) + +For information, please review the top portion of the following page: +http://postmaster.aol.com/tools/fbl.html + +For information about AOL E-mail guidelines, please see +http://postmaster.aol.com/guidelines/ + +If you would like to cancel or change the configuration for your FBL please use the tool located at: +http://postmaster.aol.com/waters/fbl_change_form.html + + +--===============8110170601564424224== +Content-Type: message/feedback-report +MIME-Version: 1.0 + +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Feedback-Type: abuse +Received-Date: Wed, 17 Nov 2010 12:41:30 -0500 (EST) +Redacted-Address: redacted +Reported-Domain: mars-34.example.com +Source-Ip: 173.193.210.34 +User-Agent: AOL SComp +Version: 0.1 +Content-Transfer-Encoding: 7bit + + +--===============8110170601564424224== +Content-Type: message/rfc822 +MIME-Version: 1.0 + +Content-Type: text/plain; charset="us-ascii" +MIME-Version: 1.0 +Date: Wed, 17 Nov 2010 17:41:30 +0000 +Dkim-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=example.com; q=dns/txt; + s=mg; + t=1290015690; h=Content-Type: MIME-Version: Content-Transfer-Encoding: + To: From: Date: Subject: Message-ID: MIME-Version; + bh=nxbn1zWL9sK6KsPWON+E7/RL1hjKmMs7ob7EC3BfTYQ=; + b=Uh281hr4hRrfANPsK2KNUWrKzz5h22EWSMcmE51qm00AR1cbtjHMU/exHhkEQ1VcCxl4FnVn + ZPWMq8OSBtKhycMa4sSxoMOS7cjxKMN23F4KG/cw/G8UUD6kYWTu8u+g9AX539uNuO1ohPZk + OLGQFkwKgxbQGmNWu9dsxKv43Ms= +Domainkey-Signature: a=rsa-sha1; c=nofws; d=example.com; s=mg; + h=Content-Type: MIME-Version: Content-Transfer-Encoding: To: From: + Date: Subject: Message-ID: MIME-Version; + b=gWffI33O+PS/Sti8uxIAqNP3SHzc5uPBPJB/R3dZdQ+Uu2n/CmfWJTPfYTO0u83MdkbLD6 + /SYeFYEnQl26vto/nE7GWpPuwtPeuxm8B11S1eUE178I3As3a2V0QKxC8T9CCX0PmfOLuoKc + ErBo/lweMX6ZFVzutgNIQrEn5qHJk= +From: Bob +Message-Id: <20101117174130.28884.55421@luna> +Received: from mars-34.example.com (mars-34.example.com [173.193.210.34]) + by mtain-mb01.r1000.mx.aol.com (Internet Inbound) with ESMTP id + 6C40F380000A4 + for ; Wed, 17 Nov 2010 12:41:30 -0500 (EST) +Subject: exciting Repair the transmittion +To: redacted@aol.com +X-Aol-Global-Disposition: G +X-Aol-Ip: 173.193.210.34 +X-Aol-Scoll-Authentication: mail_rly_antispam_dkim-d309.2 ; + domain : example.com DKIM : pass +X-Aol-Scoll-Score: 0:2:344886368:93952408 +X-Aol-Scoll-Url_count: 0 +X-Aol-Sid: 3039ac1d60154ce413ca6e64 +Content-Transfer-Encoding: 7bit + +Dude + +Hello +-- +Best, +Bob + + +--===============8110170601564424224==-- diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/yahoo.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/yahoo.eml new file mode 100644 index 000000000..836345752 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/complaints/yahoo.eml @@ -0,0 +1,71 @@ +Mime-Version: 1.0 +Content-Transfer-Encoding: 7bit +Content-Type: multipart/report; boundary="_----------=_13420034143457833"; + report-type="feedback-report" +X-Mailer: MIME::Lite 3.021 (F2.6; T1.27; A2.04; B3.05; Q3.03) +Date: Wed, 11 Jul 2012 03:43:34 -0700 +From: Yahoo! Mail AntiSpam Feedback +To: abuse@example.org +Subject: FW:Some subject +X-Yahoo-Newman-Property: cfl +Message-Id: <20120711104336.819.40318@returns.bulk.yahoo.com> + +This is a multi-part message in MIME format. + +--_----------=_13420034143457833 +MIME-Version: 1.0 +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +Content-Type: text/plain; charset="US-ASCII" +X-Mailer: MIME::Lite 3.021 (F2.6; T1.27; A2.04; B3.05; Q3.03) +Date: Wed, 11 Jul 2012 03:43:34 -0700 + +This is an email abuse report for an email message received from example.com on Tue, 10 Jul 2012 18:50:18 PDT + +--_----------=_13420034143457833 +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +Content-Type: message/feedback-report + +Feedback-Type: abuse +User-Agent: Yahoo!-Mail-Feedback/1.0 +Version: 0.1 +Original-Mail-From: +Original-Rcpt-To: user@yahoo.com +Received-Date: Tue, 10 Jul 2012 18:50:18 PDT +Reported-Domain: example.com +Authentication-Results: mta1247.mail.bf1.yahoo.com from=example.com; domainkeys=pass (ok); from=example.com; dkim=pass (ok) + +--_----------=_13420034143457833 +Content-Disposition: inline +Content-Transfer-Encoding: 7bit +Content-Type: message/rfc822 + +From Hello Support Tue Jul 10 18:50:15 2012 +X-Apparently-To: user@yahoo.com via 68.180.197.179; Tue, 10 Jul 2012 18:50:18 -0700 +Received-SPF: pass (domain of example.com designates 184.173.105.149 as permitted sender) +X-Originating-IP: [184.173.105.149] +MIME-Version: 1.0 +Received: by luna.example.net with SMTP mgrt 6071405; + Wed, 11 Jul 2012 01:50:15 +0000 +Received: from www.example.com (Unknown [207.200.36.196]) by + mxa.example.org with ESMTP id 4ffcdbd7.55e5fb8-luna3; + Wed, 11 Jul 2012 01:50:15 -0000 (UTC) +Received: by www.example.com (Postfix, from userid 48) id 4A8BE2E088E; + Tue, 10 Jul 2012 21:50:15 -0400 (EDT) +To: user@yahoo.com +Subject: Some subject +From: Hello Support +Reply-To: Hello Support +X-Example-Campaign-Id: match_mail_auto +X-Example-Tag: match_mail_auto +Message-Id: <20120711015015.4A8BE2E088E@www.example.com> +Date: Tue, 10 Jul 2012 21:50:15 -0400 (EDT) +X-Example-Sid: WyI3ZWFmNiIsICJzd2VldHJpY2FuNHVAeWFob28uY29tIiwgImQ0YSJd +Sender: support@example.com +Content-Type: text/html; charset="us-ascii" +Content-Transfer-Encoding: 7bit + +Hi + +--_----------=_13420034143457833-- diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/enclosed.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/enclosed.eml new file mode 100644 index 000000000..6350195cc --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/enclosed.eml @@ -0,0 +1,99 @@ + +Delivered-To: bob@example.com +Received: by 10.231.77.161 with SMTP id g33csp198901ibk; + Sat, 30 Jun 2012 06:06:01 -0700 (PDT) +Received: by 10.224.70.144 with SMTP id d16mr10884157qaj.45.1341061559897; + Sat, 30 Jun 2012 06:05:59 -0700 (PDT) +Return-Path: +Received: from mail-p1.example.net (mail-p1.example.net. [173.193.210.44]) + by mx.google.com with ESMTP id o4si2503040qct.204.2012.06.30.06.05.59; + Sat, 30 Jun 2012 06:05:59 -0700 (PDT) +Received-SPF: pass (google.com: domain of bob@example.net designates 173.193.210.44 as permitted sender) client-ip=173.193.210.44; +Authentication-Results: mx.google.com; spf=pass (google.com: domain of bob@example.net designates 173.193.210.44 as permitted sender) smtp.mail=bob@example.net; dkim=pass header.i=@example.net +DKIM-Signature: a=rsa-sha256; v=1; c=relaxed/relaxed; d=example.net; q=dns/txt; s=mg; + t=1341061559; h=Content-Type: MIME-Version: Message-Id: Date: From: To: + Subject; bh=Ukt6EhQREBbLuCk1QdiXVN/+bRJDy1dNWXTIMnC6wJY=; b=k8md2tTxJcL3RUS+nJ2VDLepI7vmQ+myXSTmt7lZ3B0FywfJtSwqfxOtjzybij6Od5ZMDQDB + x4GCvgas2t35FERlYDqUpJ2P6Me/uym5UC9779Y3YgqmKAsNyVsxwEkEG/hBmZ6KbkDtrQyP + oTwyx05rp1a7N8XxZPH7PiJqevk= +DomainKey-Signature: a=rsa-sha1; c=nofws; d=example.net; s=mg; q=dns; + h=Content-Type: MIME-Version: Message-Id: Date: From: To: Subject; + b=IC6Vz0XP40oeA2RCrrwwma9G76F9P9KsJPP7m81Kx3mJeNdj724/kYaFX+6TShpl0sgSHp + 9v8DJmudnhJP05YZgr2RIcB5oE8JphkknpbSybB6Kx+IdHQqLVAi+G65BoF/3iAo1e4eBovN + yuBbhhO+OBGLuCRlpu3kP2BVtNyxE= +Content-Type: multipart/mixed; boundary="===============6195527458677812340==" +MIME-Version: 1.0 +Received: by luna.example.net with SMTP mgrt 8979437; + Sat, 30 Jun 2012 13:05:59 +0000 +Received: from [192.168.1.75] (95x79x59x37.static-business.nn.ertelecom.ru + [95.79.59.37]) by mxa.example.org with ESMTP id 4feef9b5.5cf5c00-luna2; + Sat, 30 Jun 2012 13:05:57 -0000 (UTC) +Message-Id: <4FEEF9B3.7060508@example.net> +Date: Sat, 30 Jun 2012 17:05:55 +0400 +From: Bob Marley +User-Agent: Mozilla/5.0 (X11; Linux x86_64; + rv:13.0) Gecko/20120615 Thunderbird/13.0.1 +To: "=?utf-8?b?0JDQu9C10LrRgdCw0L3QtNGAINCa0LvQuNC20LXQvdGC0LDRgeKYrw==?=" + +Subject: Wow +X-Example-Sid: WyJlYzgyNiIsICJrbGl6aGVudGFzQGdtYWlsLmNvbSIsICIxNyJd + +--===============6195527458677812340== +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii"; format="flowed" +Content-Transfer-Encoding: 7bit + +Hello + +--===============6195527458677812340== +Content-Type: message/rfc822; name="thanks.eml" +MIME-Version: 1.0 + +Content-Type: multipart/alternative; + boundary="===============4360815924781479146==" +MIME-Version: 1.0 +Received: by 127.0.1.1 with SMTP; Fri, 22 Apr 2011 18:21:06 +0000 +Received: from mail-vw0-f51.google.com (mail-vw0-f51.google.com + [209.85.212.51]) by mxa.example.org (Postfix) with ESMTPS id 9F1E6F01FAC for + ; Fri, 22 Apr 2011 18:21:06 +0000 (UTC) +Received: by vws20 with SMTP id 20so857812vws.24 for ; + Fri, 22 Apr 2011 11:21:06 -0700 (PDT) +Received: by 10.52.66.82 with SMTP id d18mr2018166vdt.260.1303496466294; + Fri, 22 Apr 2011 11:21:06 -0700 (PDT) +Received: by 10.52.168.1 with HTTP; Fri, 22 Apr 2011 11:21:06 -0700 (PDT) +X-Originating-Ip: [69.181.248.175] +Date: Fri, 22 Apr 2011 11:21:06 -0700 +Message-Id: +Subject: Thanks! +From: Kirk Douglas +To: Bob Marley , Jimmy Hendrix + +--===============4360815924781479146== +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: base64 + +ZHVkZXMuLi4geW91J3JlIGtpY2tpbmcgYXNzLgrRh9GC0L7QsdGLINGPINCx0LXQtyDQstCw0YEg +0LTQtdC70LDQuywg0LTQvtGA0L7Qs9C40LUg0LzQvtC4ISEhCgotLSAKRXYgS29udHNldm95LApD +by1mb3VuZGVyIGFuZCBDRU8gb2YgTWFpbGd1bi5uZXQgLSB0aGUgZW1haWwgcGxhdGZvcm0gZm9y +IGRldmVsb3BlcnMuCk1haWxndW46IHNlbmQsIHJlY2VpdmUsIHN0b3JlIGFuZCBzZWFyY2ggZW1h +aWxzIQpwOiA1MTItNDE3LTE3NjIgIHwgIHQ6IEBtYWlsX2d1biAgfCAgdzogbWFpbGd1bi5uZXQK + +--===============4360815924781479146== +Content-Type: text/html; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: base64 + +ZHVkZXMuLi4geW91JiMzOTtyZSBraWNraW5nIGFzcy48ZGl2PtGH0YLQvtCx0Ysg0Y8g0LHQtdC3 +INCy0LDRgSDQtNC10LvQsNC7LCDQtNC+0YDQvtCz0LjQtSDQvNC+0LghISE8YnIgY2xlYXI9ImFs +bCI+PGJyPi0tIDxicj5FdiBLb250c2V2b3ksJm5ic3A7PGRpdj48Zm9udCBjb2xvcj0iIzY2NjY2 +NiI+Q28tZm91bmRlciBhbmQgQ0VPIG9mJm5ic3A7PGEgaHJlZj0iaHR0cDovL01haWxndW4ubmV0 +IiB0YXJnZXQ9Il9ibGFuayI+TWFpbGd1bi5uZXQ8L2E+IC0gdGhlIGVtYWlsIHBsYXRmb3JtIGZv +ciBkZXZlbG9wZXJzLjwvZm9udD48ZGl2Pgo8Zm9udCBjb2xvcj0iI0NDMDAwMCI+TWFpbGd1bjo8 +L2ZvbnQ+Jm5ic3A7PGZvbnQgY29sb3I9IiM2NjY2NjYiPnNlbmQsIHJlY2VpdmUsIHN0b3JlIGFu +ZCBzZWFyY2ggZW1haWxzITwvZm9udD48YnI+PGZvbnQgY29sb3I9IiM2NjY2NjYiPnA6IDUxMi00 +MTctMTc2MiAmbmJzcDt8ICZuYnNwO3Q6IEBtYWlsX2d1biAmbmJzcDt8ICZuYnNwO3c6IDxhIGhy +ZWY9Imh0dHA6Ly9tYWlsZ3VuLm5ldCIgdGFyZ2V0PSJfYmxhbmsiPm1haWxndW4ubmV0PC9hPjwv +Zm9udD48L2Rpdj4KPC9kaXY+PGRpdj48YnI+PC9kaXY+PGJyPgo8L2Rpdj4K + +--===============4360815924781479146==-- +--===============6195527458677812340==-- diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-ftp.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-ftp.eml new file mode 100644 index 000000000..d9f724f49 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-ftp.eml @@ -0,0 +1,28 @@ +Mime-Version: 1.0 +Content-Type: Multipart/Mixed; Boundary="NextPart" +To: IETF-Announce:; +From: Internet-Drafts@ietf.org +Subject: I-D ACTION:draft-ietf-mboned-mix-00.txt +Date: Tue, 22 Dec 1998 16:55:06 -0500 + +--NextPart + +Blah blah blah + +--NextPart +Content-Type: Multipart/Alternative; Boundary="OtherAccess" + +--OtherAccess +Content-Type: Message/External-body; + name="1KB.zip"; + site="speedtest.tele2.net"; + access-type="anon-ftp"; + directory="/" + +Content-Type: application/zip +Content-ID: <19981222151406.I-D@ietf.org> + + +--OtherAccess-- + +--NextPart-- \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-url.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-url.eml new file mode 100644 index 000000000..dc208e954 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/external-url.eml @@ -0,0 +1,8 @@ +MIME-Version: 1.0 +Content-type: message/external-body; access-type=URL; + URL="https://ya.ru/" + +Content-type: text/html +Content-Transfer-Encoding: binary + +THIS IS NOT REALLY THE BODY! \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/m0066.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/m0066.eml new file mode 100644 index 000000000..432061320 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/m0066.eml @@ -0,0 +1,51 @@ +Delivered-To: bashkarev.d@gmail.com +Received: by 10.237.50.66 with SMTP id y60csp30284qtd; + Thu, 9 Feb 2017 20:01:09 -0800 (PST) +X-Received: by 10.25.89.148 with SMTP id n142mr1931448lfb.64.1486699269775; + Thu, 09 Feb 2017 20:01:09 -0800 (PST) +Return-Path: +Received: from bill.example.com (bill.example.com. [127.0.0.1]) + by mx.google.com with ESMTPS id h3si261291lfj.361.2017.02.09.20.01.09 + for + (version=TLS1 cipher=AES128-SHA bits=128/128); + Thu, 09 Feb 2017 20:01:09 -0800 (PST) +Received-SPF: pass (google.com: best guess record for domain of billruf@bill.example.com designates 127.0.0.1 as permitted sender) client-ip=127.0.0.1; +Authentication-Results: mx.google.com; + spf=pass (google.com: best guess record for domain of billruf@bill.example.com designates 127.0.0.1 as permitted sender) smtp.mailfrom=billruf@bill.example.com +Received: from billruf by bill.example.com with local (Exim 4.63) + (envelope-from ) + id 1cc2NR-0004kI-Hp + for bashkarev.d@gmail.com; Fri, 10 Feb 2017 07:00:05 +0300 +To: bashkarev.d@gmail.com +Subject: Îêîí÷àíèå ñðîêà ðåãèñòðàöèè äîìåíà - 2017-02-16 +From: Manager +Content-Type: text/plain; charset="windows-1251" +Reply-To: domains@example.com +Message-Id: +Date: Fri, 10 Feb 2017 07:00:05 +0300 + +Óâàæàåìûé àáîíåíò, + +Ñðîê äåëåãèðîâàíèÿ äîìåíà èñòåêàåò {DATEND}. + +Äëÿ ïðîäëåíèÿ äîìåíà Âàì íåîáõîäèìî ñäåëàòü ñëåäóþùåå: + + + ñëó÷àå, åñëè ðåãèñòðàöèÿ äîìåíà íå áóäåò ïðîäëåíà äî îêîí÷àíèÿ ñðîêà +ðåãèñòðàöèè, äîìåí áóäåò ñíÿò ñ äåëåãèðîâàíèÿ. Åñëè äîìåí íå áóäåò ïðîäëåí +â òå÷åíèå 30 äíåé ñ ìîìåíòà îêîí÷àíèÿ ñðîêà ðåãèñòðàöèè, òî îí áóäåò îñâîáîæäåí +è ìîæåò áûòü çàðåãèñòðèðîâàí ëþáûì æåëàþùèì. + +* * * + +Domain expires at 2017-02-16. + +If you have not renewed domain by the expiration date, domain is put on-hold +(31 days for .ru/.su domains). +Deactivated domain names will no longer be resolved. During on-hold period +you will be able to renew it. Domain name that have not been renewed +will automatically be deleted from the registry. + +------------------------------- +Ñ óâàæåíèåì, +Ñëóæáà ïîääåðæêè diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.1.msg.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.1.msg.eml new file mode 100644 index 000000000..5d6f6353d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.1.msg.eml @@ -0,0 +1,2055 @@ +Path: atlpnn01.usenetserver.com!newsfeeds-atl2!peer1-sjc1.usenetserver.com!usenetserver.com!hub1.nntpserver.com!newsfeed4.cidera.com!newsfeed1.cidera.com!Cidera!cyclone1.gnilink.net!news-out.nuthinbutnews.com!propagator-sterling!news-in.nuthinbutnews.com!micro-heart-of-gold.mit.edu!nntp.club.cc.cmu.edu!bb3.andrew.cmu.edu!newsfeed.srv.cs.cmu.edu!anon.lcs.mit.edu!nym.alias.net!mail2news +Date: 2 May 2002 09:42:33 -0000 +From: anonymous@anon.lcs.mit.edu +Subject: {15_3779; Victoria & Cherry}: suzeFan - 2377h003.jpg (1/2) +Newsgroups: alt.binaries.pictures.suze +MIME-Version: 1.0 +Message-ID: +Content-Type: message/partial; id=""; number=1; total=2 +Mail-To-News-Contact: postmaster@nym.alias.net +Organization: mail2news@nym.alias.net +Lines: 2042 +Xref: usenetserver.com alt.binaries.pictures.suze:408595 +X-Received-Date: Thu, 02 May 2002 06:28:50 EDT (atlpnn01.usenetserver.com) + +Message-ID: +Subject: {15_3779; Victoria & Cherry}: suzeFan - 2377h003.jpg +MIME-Version: 1.0 +Content-Type: multipart/mixed; + boundary="----skippy.Soft.1020332481" + +This message is in MIME format. + +------skippy.Soft.1020332481 +Content-Type: text/plain; charset="iso-8859-1" + + +File 2377h003.jpg +no replies (but I'll see yours), no reposts (go to absr); sorry. + +if you don't like this post: skip it! - or post yourself ;-) . +if there is no one left, who like it, it's no pain for me to stop it all. + +enjoy +suzeFan +~~ + +------skippy.Soft.1020332481 +Content-Type: image/jpeg; name="2377h003.jpg" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="2377h003.jpg" + +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 diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.2.msg.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.2.msg.eml new file mode 100644 index 000000000..867f6a7d4 Binary files /dev/null and b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/message-partial.2.msg.eml differ diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/nested.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/nested.eml new file mode 100644 index 000000000..0b01f35ad --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/nested.eml @@ -0,0 +1,65 @@ +From: u@example.com +Content-Type: multipart/mixed; + boundary="----=_NextPart_000_0D48_01CE140D.19527DD0" + + +------=_NextPart_000_0D48_01CE140D.19527DD0 +Content-Type: multipart/related; + boundary="----=_NextPart_001_0D49_01CE140D.19527DD0" + + +------=_NextPart_001_0D49_01CE140D.19527DD0 +Content-Type: multipart/alternative; + boundary="----=_NextPart_002_0D4A_01CE140D.19527DD0" + + +------=_NextPart_002_0D4A_01CE140D.19527DD0 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/plain; + charset="utf-8" + + +Dear Sir, + +Good evening. + + + + + +------=_NextPart_002_0D4A_01CE140D.19527DD0 +Content-Transfer-Encoding: quoted-printable +Content-Type: text/html; + charset="utf-8" + +

Dear Sir

+

Good evening.

+

+------=_NextPart_002_0D4A_01CE140D.19527DD0-- + +------=_NextPart_001_0D49_01CE140D.19527DD0-- + +------=_NextPart_000_0D48_01CE140D.19527DD0 +Content-Type: multipart/alternative; boundary="===============1276485360==" +MIME-Version: 1.0 +Content-Disposition: inline + +--===============1276485360== +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: quoted-printable + + + +The footer + +--===============1276485360== +Content-Type: text/html; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: quoted-printable + +

The footer

+ +--===============1276485360==-- +------=_NextPart_000_0D48_01CE140D.19527DD0-- + diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/non-unique-cid.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/non-unique-cid.eml new file mode 100644 index 000000000..2a8dede59 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/non-unique-cid.eml @@ -0,0 +1,128 @@ +Return-Path: +To: Name +Subject: Testing MIME E-mail composing with cid +From: Name +Reply-To: Name +Sender: name@company.com +X-Mailer: http://www.phpclasses.org/mimemessage $Revision: 1.63 $ (mail) +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="652b8c4dcb00cdcdda1e16af36781caf" +Message-ID: <20050430192829.0489.name@company.com> +Date: Sat, 30 Apr 2005 19:28:29 -0300 + + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: multipart/related; boundary="6a82fb459dcaacd40ab3404529e808dc" + + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: multipart/alternative; boundary="69c1683a3ee16ef7cf16edd700694a2f" + + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/plain; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + +This is an HTML message. Please use an HTML capable mail program to read +this message. + +--69c1683a3ee16ef7cf16edd700694a2f +Content-Type: text/html; charset=ISO-8859-1 +Content-Transfer-Encoding: quoted-printable + + + +Testing MIME E-mail composing with cid + + + + + + + +
+

Testing MIME E-mail composing with cid

+
+

Hello Name,

+This message is just to let you know that the MIME E-mail message composing and sending PHP class is working as expected.

+

Here is an image embedded in a message as a separate part:

= +
+
Than= +k you,
+name

+
+ + +--69c1683a3ee16ef7cf16edd700694a2f-- + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="logo.jpg" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="logo.jpg" +Content-ID: + +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 + +--6a82fb459dcaacd40ab3404529e808dc +Content-Type: image/gif; name="background.jpg" +Content-Transfer-Encoding: base64 +Content-Disposition: inline; filename="background.jpg" +Content-ID: + +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 + +--6a82fb459dcaacd40ab3404529e808dc-- + +--652b8c4dcb00cdcdda1e16af36781caf +Content-Type: text/plain; name="attachment.txt" +Content-Transfer-Encoding: base64 +Content-Disposition: attachment; filename="attachment.txt" + +TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g +VmVzdGlidWx1bSBjb25ndWUgc2VkIGFudGUgaWQgbGFvcmVldC4gUHJhZXNlbnQgZGljdHVtIHNh +cGllbiBpYWN1bGlzIG5pc2kgcGhhcmV0cmEsIHBvcnR0aXRvciBibGFuZGl0IG1hc3NhIGN1cnN1 +cy4gRHVpcyByaG9uY3VzIG1hdXJpcyBhYyB1cm5hIHNlbXBlciwgc2VkIG1hbGVzdWFkYSBmZWxp +cyBpbnRlcmR1bS4gTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBp +c2NpbmcgZWxpdC4gU2VkIHB1bHZpbmFyIGRpY3R1bSBvcm5hcmUuIEN1cmFiaXR1ciBldSBkb2xv +ciBmYWNpbGlzaXMsIHNhZ2l0dGlzIHB1cnVzIHByZXRpdW0sIGNvbnNlY3RldHVyIGVsaXQuIE51 +bGxhIGVsZW1lbnR1bSBhdWN0b3IgdWx0cmljZXMuIE51bmMgZmVybWVudHVtIGRpY3R1bSBvZGlv +IHZlbCB0aW5jaWR1bnQuIFNlZCBjb25zZXF1YXQgdmVzdGlidWx1bSB2ZXN0aWJ1bHVtLiBQcm9p +biBwdWx2aW5hciBmZWxpcyB2aXRhZSBlbGVtZW50dW0gc3VzY2lwaXQuCgoKTG9yZW0gaXBzdW0g +ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVmVzdGlidWx1bSBj +b25ndWUgc2VkIGFudGUgaWQgbGFvcmVldC4gUHJhZXNlbnQgZGljdHVtIHNhcGllbiBpYWN1bGlz +IG5pc2kgcGhhcmV0cmEsIHBvcnR0aXRvciBibGFuZGl0IG1hc3NhIGN1cnN1cy4gRHVpcyByaG9u +Y3VzIG1hdXJpcyBhYyB1cm5hIHNlbXBlciwgc2VkIG1hbGVzdWFkYSBmZWxpcyBpbnRlcmR1bS4g +TG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4g +U2VkIHB1bHZpbmFyIGRpY3R1bSBvcm5hcmUuIEN1cmFiaXR1ciBldSBkb2xvciBmYWNpbGlzaXMs +IHNhZ2l0dGlzIHB1cnVzIHByZXRpdW0sIGNvbnNlY3RldHVyIGVsaXQuIE51bGxhIGVsZW1lbnR1 +bSBhdWN0b3IgdWx0cmljZXMuIE51bmMgZmVybWVudHVtIGRpY3R1bSBvZGlvIHZlbCB0aW5jaWR1 +bnQuIFNlZCBjb25zZXF1YXQgdmVzdGlidWx1bSB2ZXN0aWJ1bHVtLiBQcm9pbiBwdWx2aW5hciBm +ZWxpcyB2aXRhZSBlbGVtZW50dW0gc3VzY2lwaXQuCgoKTG9yZW0gaXBzdW0gZG9sb3Igc2l0IGFt +ZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gVmVzdGlidWx1bSBjb25ndWUgc2VkIGFu +dGUgaWQgbGFvcmVldC4gUHJhZXNlbnQgZGljdHVtIHNhcGllbiBpYWN1bGlzIG5pc2kgcGhhcmV0 +cmEsIHBvcnR0aXRvciBibGFuZGl0IG1hc3NhIGN1cnN1cy4gRHVpcyByaG9uY3VzIG1hdXJpcyBh +YyB1cm5hIHNlbXBlciwgc2VkIG1hbGVzdWFkYSBmZWxpcyBpbnRlcmR1bS4gTG9yZW0gaXBzdW0g +ZG9sb3Igc2l0IGFtZXQsIGNvbnNlY3RldHVyIGFkaXBpc2NpbmcgZWxpdC4gU2VkIHB1bHZpbmFy +IGRpY3R1bSBvcm5hcmUuIEN1cmFiaXR1ciBldSBkb2xvciBmYWNpbGlzaXMsIHNhZ2l0dGlzIHB1 +cnVzIHByZXRpdW0sIGNvbnNlY3RldHVyIGVsaXQuIE51bGxhIGVsZW1lbnR1bSBhdWN0b3IgdWx0 +cmljZXMuIE51bmMgZmVybWVudHVtIGRpY3R1bSBvZGlvIHZlbCB0aW5jaWR1bnQuIFNlZCBjb25z +ZXF1YXQgdmVzdGlidWx1bSB2ZXN0aWJ1bHVtLiBQcm9pbiBwdWx2aW5hciBmZWxpcyB2aXRhZSBl +bGVtZW50dW0gc3VzY2lwaXQuCgpMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1ldCwgY29uc2VjdGV0 +dXIgYWRpcGlzY2luZyBlbGl0LiBWZXN0aWJ1bHVtIGNvbmd1ZSBzZWQgYW50ZSBpZCBsYW9yZWV0 +LiBQcmFlc2VudCBkaWN0dW0gc2FwaWVuIGlhY3VsaXMgbmlzaSBwaGFyZXRyYSwgcG9ydHRpdG9y +IGJsYW5kaXQgbWFzc2EgY3Vyc3VzLiBEdWlzIHJob25jdXMgbWF1cmlzIGFjIHVybmEgc2VtcGVy +LCBzZWQgbWFsZXN1YWRhIGZlbGlzIGludGVyZHVtLiBMb3JlbSBpcHN1bSBkb2xvciBzaXQgYW1l +dCwgY29uc2VjdGV0dXIgYWRpcGlzY2luZyBlbGl0LiBTZWQgcHVsdmluYXIgZGljdHVtIG9ybmFy +ZS4gQ3VyYWJpdHVyIGV1IGRvbG9yIGZhY2lsaXNpcywgc2FnaXR0aXMgcHVydXMgcHJldGl1bSwg +Y29uc2VjdGV0dXIgZWxpdC4gTnVsbGEgZWxlbWVudHVtIGF1Y3RvciB1bHRyaWNlcy4gTnVuYyBm +ZXJtZW50dW0gZGljdHVtIG9kaW8gdmVsIHRpbmNpZHVudC4gU2VkIGNvbnNlcXVhdCB2ZXN0aWJ1 +bHVtIHZlc3RpYnVsdW0uIFByb2luIHB1bHZpbmFyIGZlbGlzIHZpdGFlIGVsZW1lbnR1bSBzdXNj +aXBpdC4K + +--652b8c4dcb00cdcdda1e16af36781caf-- diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/outlook-express.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/outlook-express.eml new file mode 100644 index 000000000..0a17fa5b4 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/outlook-express.eml @@ -0,0 +1,28 @@ +X-Envelope-From: +Received: from hwmail1.mailset.cn (hwmail1.mailset.cn [106.186.124.194]) by + mxa.mailgun.org with ESMTP id 53c3560e.7fe658457ed8-in3; Mon, 14 Jul 2014 + 04:01:18 -0000 (UTC) +Received: (ce send program); Mon, 14 Jul 2014 12:01:03 +0800 +Received: from 121.14.7.230 (HELO etcsmtp.xinnetdns.com) (121.14.7.230) by + 106.186.124.194 with SMTP; Mon, 14 Jul 2014 12:01:03 +0800 +Received: (ce send program); Mon, 14 Jul 2014 11:49:09 +0800 +X-Ce-Autoforward: etcsmtp.xinnetdns.com +Message-Id: +Received: (ce send program); Mon, 14 Jul 2014 11:49:07 +0800 +Received: from 123.100.1.157 (HELO sink-gdmm.com) (123.100.1.157) by + 121.14.68.74 with SMTP; Mon, 14 Jul 2014 11:49:07 +0800 +Return-Path: +Received: from [110.230.143.217] by 121.14.68.114 with surfront esmtp id + 9885528886420; Mon, 14 Jul 2014 12:00:56 +0800 (CST) +From: Bobby +Subject: Sup? +To: "Ally" +Content-Type: application/octet-stream; + name="text.txt" +Content-Transfer-Encoding: base64 +Mime-Version: 1.0 +Date: Tue, 14 Jul 2015 12:19:08 +0800 +X-Mailer: Microsoft Outlook Express 6.00.2800.1106 +X-Mailgun-Incoming: Yes + +0YLQtdC60YHRgtC+0LLQvtC1INCy0LvQvtC20LXQvdC40LU= diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-1.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-1.eml new file mode 100644 index 000000000..6f578ab8f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-1.eml @@ -0,0 +1,8 @@ +Content-Type: multipart/mixed;boundary=test + +--test +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +http://test= +-local.ru \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-2.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-2.eml new file mode 100644 index 000000000..c4539eaeb --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-2.eml @@ -0,0 +1,8 @@ +Content-Type: multipart/mixed;boundary=test + +--test +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +test +- \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-3.eml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-3.eml new file mode 100644 index 000000000..10efd8d27 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/parser/content-separator-3.eml @@ -0,0 +1,8 @@ +Content-Type: multipart/mixed;boundary=test + +--test +Content-Type: text/plain; charset=utf-8 +Content-Transfer-Encoding: quoted-printable + +- +test \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/enclosed.txt b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/enclosed.txt new file mode 100644 index 000000000..4631ca99f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/enclosed.txt @@ -0,0 +1,4 @@ +dudes... you're kicking ass.
чтобы Ñ Ð±ÐµÐ· Ð²Ð°Ñ Ð´ÐµÐ»Ð°Ð», дорогие мои!!!

--
Ev Kontsevoy, 
Co-founder and CEO of Mailgun.net - the email platform for developers.
+Mailgun: send, receive, store and search emails!
p: 512-417-1762  |  t: @mail_gun  |  w: mailgun.net
+


+
diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/message-partial.txt b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/message-partial.txt new file mode 100644 index 000000000..a5f8ab308 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/message-partial.txt @@ -0,0 +1,11 @@ + +File 2377h003.jpg +no replies (but I'll see yours), no reposts (go to absr); sorry. + +if you don't like this post: skip it! - or post yourself ;-) . +if there is no one left, who like it, it's no pain for me to stop it all. + +enjoy +suzeFan +~~ + diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/nested.txt b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/nested.txt new file mode 100644 index 000000000..45a7c2f3a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/fixtures/text/nested.txt @@ -0,0 +1,7 @@ +

Dear Sir

+

Good evening.

+

+ + +

The footer

+ diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/messages/FeedbackTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/messages/FeedbackTest.php new file mode 100644 index 000000000..6de150b37 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/messages/FeedbackTest.php @@ -0,0 +1,58 @@ + + */ +class FeedbackTest extends TestCase +{ + + public function testComplaints() + { + $this + ->field('/complaints/aol.eml', function (Message $container) { + /** + * @var Feedback $feedback + */ + $feedback = null; + foreach ($container->getAttachments() as $attachment) { + if ($attachment->getMimeType() === 'message/feedback-report') { + $feedback = $attachment->getMessage(); + } + } + + $this->assertEquals(Feedback::TYPE_ABUSE, $feedback->getType()); + $this->assertEquals('AOL SComp', $feedback->getUserAgent()); + $this->assertEquals('0.1', $feedback->getVersion()); + $this->assertNull($feedback->getOriginalEnvelopeId()); + }) + ->field('/complaints/yahoo.eml', function (Message $container) { + /** + * @var Feedback $feedback + */ + $feedback = null; + foreach ($container->getAttachments() as $attachment) { + if ($attachment->getMimeType() === 'message/feedback-report') { + $feedback = $attachment->getMessage(); + } + } + $this->assertEquals(Feedback::TYPE_ABUSE, $feedback->getType()); + $this->assertEquals('0.1', $feedback->getVersion()); + $this->assertEquals('Yahoo!-Mail-Feedback/1.0', $feedback->getUserAgent()); + $this->assertEquals('bounce+705f77.d4a-user=yahoo.com@example.com', $feedback->getOriginalMailFrom()->email); + }); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/FtpTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/FtpTest.php new file mode 100644 index 000000000..ba3388d67 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/FtpTest.php @@ -0,0 +1,30 @@ + + */ +class FtpTest extends TestCase +{ + + public function testParsing() + { + $this->field('/external-ftp.eml', function (Message $message) { + $attachment = $message->getAttachments()[0]; + $this->assertEquals('message/external-body', $attachment->getMimeType()); + $this->assertInstanceOf('bashkarev\email\transports\Ftp', $attachment->getStream()); + $this->assertEquals('application/zip', $attachment->getStream()->getMimeType()); + $this->assertStringEqualsFile(__DIR__ . '/../fixtures/attachments/1KB.zip', $attachment->getStream()->getContents()); + }); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/LocalTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/LocalTest.php new file mode 100644 index 000000000..35b82a2f1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/bashkarev/email/tests/transports/LocalTest.php @@ -0,0 +1,48 @@ + + */ +class LocalTest extends TestCase +{ + + public function testParsing() + { + $path = __DIR__ . '/../fixtures/attachments/hello.html'; + $this->field($this->generate($path), function (Message $message) use ($path) { + /** + * @var \bashkarev\email\transports\Local $transport + */ + $transport = $message->getStream(); + $this->assertInstanceOf('bashkarev\email\transports\Local', $transport); + $this->assertStringEqualsFile($path, $message->textHtml()); + }); + } + + protected function generate($path) + { + $file = realpath($path); + return << + */ +class UrlTest extends TestCase +{ + + public function testParsing() + { + $this->field('/external-url.eml', function (Message $message) { + /** + * @var \bashkarev\email\transports\Url $transport + */ + $transport = $message->getStream(); + $this->assertInstanceOf('bashkarev\email\transports\Url', $transport); + $this->assertContains('', $transport->getContents()); + $this->assertContains('', $message->textHtml()); + $this->assertTrue($transport->hasHeaders()); + $this->assertEquals('text/html', $transport->getMimeType()); + + }); + } + +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/ClassLoader.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/ClassLoader.php new file mode 100644 index 000000000..4626994fd --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/ClassLoader.php @@ -0,0 +1,441 @@ + + * Jordi Boggiano + * + * 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 + * @author Jordi Boggiano + * @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])) { + foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { + if (0 === strpos($class, $prefix)) { + foreach ($this->prefixDirsPsr4[$prefix] as $dir) { + if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { + 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; +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/LICENSE b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/LICENSE new file mode 100644 index 000000000..1a2812488 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/LICENSE @@ -0,0 +1,21 @@ + +Copyright (c) 2016 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. + diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_classmap.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_classmap.php new file mode 100644 index 000000000..7a91153b0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_classmap.php @@ -0,0 +1,9 @@ + array($vendorDir . '/bashkarev/email/src'), + 'Composer\\Installers\\' => array($vendorDir . '/composer/installers/src/Composer/Installers'), +); diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_real.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_real.php new file mode 100644 index 000000000..2ca84df2f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_real.php @@ -0,0 +1,52 @@ += 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\ComposerStaticInit9161dbb779a62d8efa2e2da26bcb9a39::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); + + return $loader; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_static.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_static.php new file mode 100644 index 000000000..10216dac9 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/autoload_static.php @@ -0,0 +1,39 @@ + + array ( + 'bashkarev\\email\\' => 16, + ), + 'C' => + array ( + 'Composer\\Installers\\' => 20, + ), + ); + + public static $prefixDirsPsr4 = array ( + 'bashkarev\\email\\' => + array ( + 0 => __DIR__ . '/..' . '/bashkarev/email/src', + ), + 'Composer\\Installers\\' => + array ( + 0 => __DIR__ . '/..' . '/composer/installers/src/Composer/Installers', + ), + ); + + public static function getInitializer(ClassLoader $loader) + { + return \Closure::bind(function () use ($loader) { + $loader->prefixLengthsPsr4 = ComposerStaticInit9161dbb779a62d8efa2e2da26bcb9a39::$prefixLengthsPsr4; + $loader->prefixDirsPsr4 = ComposerStaticInit9161dbb779a62d8efa2e2da26bcb9a39::$prefixDirsPsr4; + + }, null, ClassLoader::class); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installed.json b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installed.json new file mode 100644 index 000000000..ea3ed7a57 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installed.json @@ -0,0 +1,175 @@ +[ + { + "name": "composer/installers", + "version": "v1.5.0", + "version_normalized": "1.5.0.0", + "source": { + "type": "git", + "url": "https://github.com/composer/installers.git", + "reference": "049797d727261bf27f2690430d935067710049c2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/installers/zipball/049797d727261bf27f2690430d935067710049c2", + "reference": "049797d727261bf27f2690430d935067710049c2", + "shasum": "" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "replace": { + "roundcube/plugin-installer": "*", + "shama/baton": "*" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "^4.8.36" + }, + "time": "2017-12-29T09:13:20+00:00", + "type": "composer-plugin", + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "Composer\\Installers\\": "src/Composer/Installers" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "description": "A multi-framework Composer library installer", + "homepage": "https://composer.github.io/installers/", + "keywords": [ + "Craft", + "Dolibarr", + "Eliasis", + "Hurad", + "ImageCMS", + "Kanboard", + "Lan Management System", + "MODX Evo", + "Mautic", + "Maya", + "OXID", + "Plentymarkets", + "Porto", + "RadPHP", + "SMF", + "Thelia", + "WolfCMS", + "agl", + "aimeos", + "annotatecms", + "attogram", + "bitrix", + "cakephp", + "chef", + "cockpit", + "codeigniter", + "concrete5", + "croogo", + "dokuwiki", + "drupal", + "eZ Platform", + "elgg", + "expressionengine", + "fuelphp", + "grav", + "installer", + "itop", + "joomla", + "kohana", + "laravel", + "lavalite", + "lithium", + "magento", + "majima", + "mako", + "mediawiki", + "modulework", + "modx", + "moodle", + "osclass", + "phpbb", + "piwik", + "ppi", + "puppet", + "pxcms", + "reindex", + "roundcube", + "shopware", + "silverstripe", + "sydes", + "symfony", + "typo3", + "wordpress", + "yawik", + "zend", + "zikula" + ] + }, + { + "name": "bashkarev/email", + "version": "1.0", + "version_normalized": "1.0.0.0", + "source": { + "type": "git", + "url": "https://github.com/bashkarev/email.git", + "reference": "38cb11e5961f0b81e98c7e2be9e28cebd2e51846" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/bashkarev/email/zipball/38cb11e5961f0b81e98c7e2be9e28cebd2e51846", + "reference": "38cb11e5961f0b81e98c7e2be9e28cebd2e51846", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": ">=5.4" + }, + "require-dev": { + "phpunit/phpunit": "~4.4" + }, + "time": "2017-03-13T20:03:51+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "bashkarev\\email\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "bashkarev", + "email": "dmitriy@bashkarev.com" + } + ], + "description": "Faster MIME Mail Parser could be used to parse emails in MIME format.", + "keywords": [ + "arf", + "email", + "fbl", + "mail", + "mailparse", + "mime", + "mime-parser" + ] + } +] diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.editorconfig b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.editorconfig new file mode 100644 index 000000000..153cf3ef5 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.editorconfig @@ -0,0 +1,10 @@ +; top-most EditorConfig file +root = true + +; Unix-style newlines +[*] +end_of_line = LF + +[*.php] +indent_style = space +indent_size = 4 diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.gitignore b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.gitignore new file mode 100644 index 000000000..ff7f293dc --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.gitignore @@ -0,0 +1,3 @@ +vendor/ +composer.lock +.idea/ diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.travis.yml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.travis.yml new file mode 100644 index 000000000..eca55df3a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/.travis.yml @@ -0,0 +1,33 @@ +language: php + +sudo: false + +dist: trusty + +git: + depth: 5 + +php: + - 5.4 + - 5.5 + - 5.6 + - 7.0 + - 7.1 + - 7.2 + - hhvm + - nightly + +matrix: + include: + - dist: precise + php: 5.3 + fast_finish: true + allow_failures: + - php: nightly + +before_script: + - composer self-update + - composer install + +script: + - composer test diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CHANGELOG.md b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CHANGELOG.md new file mode 100644 index 000000000..c32a76ce3 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CHANGELOG.md @@ -0,0 +1,86 @@ +# Change Log + +## [Unreleased] + +## v1.5.0 - 2017-12-29 +### Added +* Added WordPress dropin support. +* Added new types supported for Eliasis. +* Added support for Phoenix CMS. +* Added MODX installer. +* Added Majima instaler. +* Added SiteDirect installer. +* Added support optional prefix in OctoberCMS installers. +* Added PHP 7.2 support. + +### Changed +* Changed remove packages, see [#348](https://github.com/composer/installers/pull/348). + +### Fixed +* Fixed code style, removed unused imports. + +## v1.4.0 - 2017-08-09 +### Added +* Installer for eZ Platform. +* Installer for UserFrosting. +* Installer for Osclass. +* Installer for Lan Management System. + +### Changed +* Added vendor name to package path for Lavalite. + +## v1.3.0 - 2017-04-24 +### Added +* Kanboard plugins installer. +* Porto-SAP installer. +* Add `core` to concrete5 installer. +* Support Moodle "search" plugin type. +* SyDES installer. +* iTop installer. +* Lavalite installer. +* Module type for Eliasis. +* Vgmcp installer. +* OntoWiki installer. +* The requirements for contributing (CONTRIBUTING.md). + +## v1.2.0 - 2016-08-13 +### Added +* Installer for Attogram. +* Installer for Cockpit. +* Installer for Plentymarkets. +* Installer for ReIndex. +* Installer for Vanilla. +* Installer for YAWIK. +* Added missing environments for new Shopware (5.2) Plugin System. + +## v1.1.0 - 2016-07-05 +### Added +* Installer for ReIndex. +* Installer for RadPHP. +* Installer for Decibel. +* Installer for Phifty. +* Installer for ExpressionEngine. + +### Changed +* New paths for new Bitrix CMS. Old paths is deprecated. + +### Deprecated +* Old paths in Bitrix CMS Installer is deprecated. + +## v1.0.25 - 2016-04-13 +### Removed +* Revert TYPO3 installer deletion. + +## v1.0.24 - 2016-04-05 +### Added +* Installer for ImageCMS. +* Installer for Mautic. +* New types in the Kirby installer: `kirby-plugin` and `kirby-field`. +* New types in the Drupal installer: `custom-theme` and `custom-module`. + +### Changed +* Switch to PSR-4. +* Update Bitrix Installer: configuration for setting custom path to directory with kernel. + +### Removed +* Remove TYPO3 Extension installers. diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CONTRIBUTING.md b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CONTRIBUTING.md new file mode 100644 index 000000000..1b1998e01 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/CONTRIBUTING.md @@ -0,0 +1,24 @@ +# Contributing + +If you would like to help, please take a look at the list of +[issues](https://github.com/composer/installers/issues). + +## Pull requests + +* [Fork and clone](https://help.github.com/articles/fork-a-repo). +* Run the command `php composer.phar install` to install the dependencies. + This will also install the dev dependencies. See [Composer](https://getcomposer.org/doc/03-cli.md#install). +* Use the command `phpunit` to run the tests. See [PHPUnit](http://phpunit.de). +* Create a branch, commit, push and send us a + [pull request](https://help.github.com/articles/using-pull-requests). + +To ensure a consistent code base, you should make sure the code follows the +coding standards [PSR-1](http://www.php-fig.org/psr/psr-1/) and +[PSR-2](http://www.php-fig.org/psr/psr-2/). + +### Create a new Installer + +* Create class extends `Composer\Installers\BaseInstaller` with your Installer. +* Create unit tests as a separate class or as part of a `Composer\Installers\Test\InstallerTest`. +* Add information about your Installer in `README.md` in section "Current Supported Package Types". +* Run the tests. diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/LICENSE b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/LICENSE new file mode 100644 index 000000000..85f97fc79 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Kyle Robinson Young + +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. \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/README.md b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/README.md new file mode 100644 index 000000000..7f488b9da --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/README.md @@ -0,0 +1,221 @@ +# A Multi-Framework [Composer](http://getcomposer.org) Library Installer + +[![Build Status](http://img.shields.io/travis/composer/installers.svg)](http://travis-ci.org/composer/installers) + +This is for PHP package authors to require in their `composer.json`. It will +install their package to the correct location based on the specified package +type. + +The goal of Installers is to be a simple package type to install path map. +Users can also customize the install path per package and package authors can +modify the package name upon installing. + +Installers isn't intended on replacing all custom installers. If your +package requires special installation handling then by all means, create a +custom installer to handle it. + +**Natively Supported Frameworks**: + +The following frameworks natively work with Composer and will be +installed to the default `vendor` directory. `composer/installers` +is not needed to install packages with these frameworks: + +* Aura +* Symfony2 +* Yii +* Yii2 + +## Current Supported Package Types + +> Stable types are marked as **bold**, this means that installation paths +> for those type will not be changed. Any adjustment for those types would +> require creation of brand new type that will cover required changes. + +| Framework | Types +| --------- | ----- +| Aimeos | `aimeos-extension` +| Asgard | `asgard-module`
`asgard-theme` +| Attogram | `attogram-module` +| AGL | `agl-module` +| Bonefish | `bonefish-package` +| AnnotateCms | `annotatecms-module`
`annotatecms-component`
`annotatecms-service` +| Bitrix | `bitrix-module` (deprecated)
`bitrix-component` (deprecated)
`bitrix-theme` (deprecated)

`bitrix-d7-module`
`bitrix-d7-component`
`bitrix-d7-template` +| CakePHP 2+ | **`cakephp-plugin`** +| Chef | `chef-cookbook`
`chef-role` +| CCFramework | `ccframework-ship`
`ccframework-theme` +| Cockpit | `cockpit-module` +| CodeIgniter | `codeigniter-library`
`codeigniter-third-party`
`codeigniter-module` +| concrete5 | `concrete5-core`
`concrete5-package`
`concrete5-theme`
`concrete5-block`
`concrete5-update` +| Craft | `craft-plugin` +| Croogo | `croogo-plugin`
`croogo-theme` +| Decibel | `decibel-app` +| DokuWiki | `dokuwiki-plugin`
`dokuwiki-template` +| Dolibarr | `dolibarr-module` +| Drupal | `drupal-core`
`drupal-module`
`drupal-theme`

`drupal-library`
`drupal-profile`
`drupal-drush` +| Elgg | `elgg-plugin` +| Eliasis | `eliasis-component`
`eliasis-module`
`eliasis-plugin`
`eliasis-template` +| ExpressionEngine 3 | `ee3-addon`
`ee3-theme` +| eZ Platform | `ezplatform-assets`
`ezplatform-meta-assets` +| FuelPHP v1.x | `fuel-module`
`fuel-package`
`fuel-theme` +| FuelPHP v2.x | `fuelphp-component` +| Grav | `grav-plugin`
`grav-theme` +| Hurad | `hurad-plugin`
`hurad-theme` +| ImageCMS | `imagecms-template`
`imagecms-module`
`imagecms-library` +| iTop | `itop-extension` +| Joomla | `joomla-component`
`joomla-module`
`joomla-template`
`joomla-plugin`
`joomla-library` +| Kanboard | `kanboard-plugin` +| Kirby | **`kirby-plugin`**
`kirby-field`
`kirby-tag` +| KodiCMS | `kodicms-plugin`
`kodicms-media` +| Kohana | **`kohana-module`** +| Lan Management System | `lms-plugin`
`lms-template`
`lms-document-template`
`lms-userpanel-module` +| Laravel | `laravel-library` +| Lavalite | `lavalite-theme`
`lavalite-package` +| Lithium | **`lithium-library`
`lithium-source`** +| Magento | `magento-library`
`magento-skin`
`magento-theme` +| majima | `majima-plugin` +| Mako | `mako-package` +| Mautic | `mautic-plugin`
`mautic-theme` +| Maya | `maya-module` +| MODX | `modx-extra` +| MODX Evo | `modxevo-snippet`
`modxevo-plugin`
`modxevo-module`
`modxevo-template`
`modxevo-lib` +| MediaWiki | `mediawiki-extension` +| October | **`october-module`
`october-plugin`
`october-theme`** +| OntoWiki | `ontowiki-extension`
`ontowiki-theme`
`ontowiki-translation` +| OXID | `oxid-module`
`oxid-theme`
`oxid-out` +| Osclass | `osclass-plugin`
`osclass-theme`
`osclass-language` +| MODULEWork | `modulework-module` +| Moodle | `moodle-*` (Please [check source](https://raw.githubusercontent.com/composer/installers/master/src/Composer/Installers/MoodleInstaller.php) for all supported types) +| Piwik | `piwik-plugin` +| phpBB | `phpbb-extension`
`phpbb-style`
`phpbb-language` +| Pimcore | `pimcore-plugin` +| Plentymarkets | `plentymarkets-plugin` +| PPI | **`ppi-module`** +| Puppet | `puppet-module` +| Porto | `porto-container` +| RadPHP | `radphp-bundle` +| REDAXO | `redaxo-addon` +| ReIndex | **`reindex-plugin`**
**`reindex-theme`** +| Roundcube | `roundcube-plugin` +| shopware | `shopware-backend-plugin`
`shopware-core-plugin`
`shopware-frontend-plugin`
`shopware-theme`
`shopware-plugin`
`shopware-frontend-theme` +| SilverStripe | `silverstripe-module`
`silverstripe-theme` +| SiteDirect | `sitedirect-module`
`sitedirect-plugin` +| SMF | `smf-module`
`smf-theme` +| SyDES | `sydes-module`
`sydes-theme` +| symfony1 | **`symfony1-plugin`** +| Tusk | `tusk-task`
`tusk-command`
`tusk-asset` +| TYPO3 Flow | `typo3-flow-package`
`typo3-flow-framework`
`typo3-flow-plugin`
`typo3-flow-site`
`typo3-flow-boilerplate`
`typo3-flow-build` +| TYPO3 CMS | `typo3-cms-extension` (Deprecated in this package, use the [TYPO3 CMS Installers](https://packagist.org/packages/typo3/cms-composer-installers) instead) +| UserFrosting | `userfrosting-sprinkle` +| Vanilla | `vanilla-plugin`
`vanilla-theme` +| Vgmcp | `vgmcp-bundle`
`vgmcp-theme` +| Wolf CMS | `wolfcms-plugin` +| WordPress | `wordpress-plugin`
`wordpress-theme`

`wordpress-muplugin`
`wordpress-dropin` +| YAWIK | `yawik-module` +| Zend | `zend-library`
`zend-extra`
`zend-module` +| Zikula | `zikula-module`
`zikula-theme` +| Prestashop | `prestashop-module`
`prestashop-theme` +| Phifty | `phifty-bundle`
`phifty-framework`
`phifty-library` + +## Example `composer.json` File + +This is an example for a CakePHP plugin. The only important parts to set in your +composer.json file are `"type": "cakephp-plugin"` which describes what your +package is and `"require": { "composer/installers": "~1.0" }` which tells composer +to load the custom installers. + +```json +{ + "name": "you/ftp", + "type": "cakephp-plugin", + "require": { + "composer/installers": "~1.0" + } +} +``` + +This would install your package to the `Plugin/Ftp/` folder of a CakePHP app +when a user runs `php composer.phar install`. + +So submit your packages to [packagist.org](http://packagist.org)! + +## Custom Install Paths + +If you are consuming a package that uses the `composer/installers` you can +override the install path with the following extra in your `composer.json`: + +```json +{ + "extra": { + "installer-paths": { + "your/custom/path/{$name}/": ["shama/ftp", "vendor/package"] + } + } +} +``` + +A package type can have a custom installation path with a `type:` prefix. + +``` json +{ + "extra": { + "installer-paths": { + "your/custom/path/{$name}/": ["type:wordpress-plugin"] + } + } +} +``` + +You can also have the same vendor packages with a custom installation path by +using the `vendor:` prefix. + +``` json +{ + "extra": { + "installer-paths": { + "your/custom/path/{$name}/": ["vendor:my_organization"] + } + } +} +``` + +These would use your custom path for each of the listed packages. The available +variables to use in your paths are: `{$name}`, `{$vendor}`, `{$type}`. + +## Custom Install Names + +If you're a package author and need your package to be named differently when +installed consider using the `installer-name` extra. + +For example you have a package named `shama/cakephp-ftp` with the type +`cakephp-plugin`. Installing with `composer/installers` would install to the +path `Plugin/CakephpFtp`. Due to the strict naming conventions, you as a +package author actually need the package to be named and installed to +`Plugin/Ftp`. Using the following config within your **package** `composer.json` +will allow this: + +```json +{ + "name": "shama/cakephp-ftp", + "type": "cakephp-plugin", + "extra": { + "installer-name": "Ftp" + } +} +``` + +Please note the name entered into `installer-name` will be the final and will +not be inflected. + +## Should we allow dynamic package types or paths? No. + +What are they? The ability for a package author to determine where a package +will be installed either through setting the path directly in their +`composer.json` or through a dynamic package type: `"type": +"framework-install-here"`. + +It has been proposed many times. Even implemented once early on and then +removed. Installers won't do this because it would allow a single package +author to wipe out entire folders without the user's consent. That user would +then come here to yell at us. + +Anyone still wanting this capability should consider requiring https://github.com/oomphinc/composer-installers-extender. diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/_config.yml b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/_config.yml new file mode 100644 index 000000000..c4192631f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/_config.yml @@ -0,0 +1 @@ +theme: jekyll-theme-cayman \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/composer.json b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/composer.json new file mode 100644 index 000000000..6de40853c --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/composer.json @@ -0,0 +1,105 @@ +{ + "name": "composer/installers", + "type": "composer-plugin", + "license": "MIT", + "description": "A multi-framework Composer library installer", + "keywords": [ + "installer", + "Aimeos", + "AGL", + "AnnotateCms", + "Attogram", + "Bitrix", + "CakePHP", + "Chef", + "Cockpit", + "CodeIgniter", + "concrete5", + "Craft", + "Croogo", + "DokuWiki", + "Dolibarr", + "Drupal", + "Elgg", + "Eliasis", + "ExpressionEngine", + "eZ Platform", + "FuelPHP", + "Grav", + "Hurad", + "ImageCMS", + "iTop", + "Joomla", + "Kanboard", + "Kohana", + "Lan Management System", + "Laravel", + "Lavalite", + "Lithium", + "Magento", + "majima", + "Mako", + "Mautic", + "Maya", + "MODX", + "MODX Evo", + "MediaWiki", + "OXID", + "osclass", + "MODULEWork", + "Moodle", + "Piwik", + "pxcms", + "phpBB", + "Plentymarkets", + "PPI", + "Puppet", + "Porto", + "RadPHP", + "ReIndex", + "Roundcube", + "shopware", + "SilverStripe", + "SMF", + "SyDES", + "symfony", + "Thelia", + "TYPO3", + "WolfCMS", + "WordPress", + "YAWIK", + "Zend", + "Zikula" + ], + "homepage": "https://composer.github.io/installers/", + "authors": [ + { + "name": "Kyle Robinson Young", + "email": "kyle@dontkry.com", + "homepage": "https://github.com/shama" + } + ], + "autoload": { + "psr-4": { "Composer\\Installers\\": "src/Composer/Installers" } + }, + "extra": { + "class": "Composer\\Installers\\Plugin", + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "replace": { + "shama/baton": "*", + "roundcube/plugin-installer": "*" + }, + "require": { + "composer-plugin-api": "^1.0" + }, + "require-dev": { + "composer/composer": "1.0.*@dev", + "phpunit/phpunit": "^4.8.36" + }, + "scripts": { + "test": "phpunit" + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/phpunit.xml.dist b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/phpunit.xml.dist new file mode 100644 index 000000000..cc5cc9915 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/phpunit.xml.dist @@ -0,0 +1,25 @@ + + + + + + tests/Composer/Installers + + + + + + src/Composer/Installers + + + \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AglInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AglInstaller.php new file mode 100644 index 000000000..01b8a4165 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AglInstaller.php @@ -0,0 +1,21 @@ + 'More/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = preg_replace_callback('/(?:^|_|-)(.?)/', function ($matches) { + return strtoupper($matches[1]); + }, $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php new file mode 100644 index 000000000..79a0e958f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AimeosInstaller.php @@ -0,0 +1,9 @@ + 'ext/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php new file mode 100644 index 000000000..89d7ad905 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AnnotateCmsInstaller.php @@ -0,0 +1,11 @@ + 'addons/modules/{$name}/', + 'component' => 'addons/components/{$name}/', + 'service' => 'addons/services/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php new file mode 100644 index 000000000..22dad1b9a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AsgardInstaller.php @@ -0,0 +1,49 @@ + 'Modules/{$name}/', + 'theme' => 'Themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type asgard-module, cut off a trailing '-plugin' if present. + * + * For package type asgard-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'asgard-module') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'asgard-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-module$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php new file mode 100644 index 000000000..d62fd8fd1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/AttogramInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php new file mode 100644 index 000000000..7082bf2cb --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BaseInstaller.php @@ -0,0 +1,136 @@ +composer = $composer; + $this->package = $package; + $this->io = $io; + } + + /** + * Return the install path based on package type. + * + * @param PackageInterface $package + * @param string $frameworkType + * @return string + */ + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + $type = $this->package->getType(); + + $prettyName = $this->package->getPrettyName(); + if (strpos($prettyName, '/') !== false) { + list($vendor, $name) = explode('/', $prettyName); + } else { + $vendor = ''; + $name = $prettyName; + } + + $availableVars = $this->inflectPackageVars(compact('name', 'vendor', 'type')); + + $extra = $package->getExtra(); + if (!empty($extra['installer-name'])) { + $availableVars['name'] = $extra['installer-name']; + } + + if ($this->composer->getPackage()) { + $extra = $this->composer->getPackage()->getExtra(); + if (!empty($extra['installer-paths'])) { + $customPath = $this->mapCustomInstallPaths($extra['installer-paths'], $prettyName, $type, $vendor); + if ($customPath !== false) { + return $this->templatePath($customPath, $availableVars); + } + } + } + + $packageType = substr($type, strlen($frameworkType) + 1); + $locations = $this->getLocations(); + if (!isset($locations[$packageType])) { + throw new \InvalidArgumentException(sprintf('Package type "%s" is not supported', $type)); + } + + return $this->templatePath($locations[$packageType], $availableVars); + } + + /** + * For an installer to override to modify the vars per installer. + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + return $vars; + } + + /** + * Gets the installer's locations + * + * @return array + */ + public function getLocations() + { + return $this->locations; + } + + /** + * Replace vars in a path + * + * @param string $path + * @param array $vars + * @return string + */ + protected function templatePath($path, array $vars = array()) + { + if (strpos($path, '{') !== false) { + extract($vars); + preg_match_all('@\{\$([A-Za-z0-9_]*)\}@i', $path, $matches); + if (!empty($matches[1])) { + foreach ($matches[1] as $var) { + $path = str_replace('{$' . $var . '}', $$var, $path); + } + } + } + + return $path; + } + + /** + * Search through a passed paths array for a custom install path. + * + * @param array $paths + * @param string $name + * @param string $type + * @param string $vendor = NULL + * @return string + */ + protected function mapCustomInstallPaths(array $paths, $name, $type, $vendor = NULL) + { + foreach ($paths as $path => $names) { + if (in_array($name, $names) || in_array('type:' . $type, $names) || in_array('vendor:' . $vendor, $names)) { + return $path; + } + } + + return false; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php new file mode 100644 index 000000000..e80cd1e10 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BitrixInstaller.php @@ -0,0 +1,126 @@ +.`. + * - `bitrix-d7-component` — copy the component to directory `bitrix/components//`. + * - `bitrix-d7-template` — copy the template to directory `bitrix/templates/_`. + * + * You can set custom path to directory with Bitrix kernel in `composer.json`: + * + * ```json + * { + * "extra": { + * "bitrix-dir": "s1/bitrix" + * } + * } + * ``` + * + * @author Nik Samokhvalov + * @author Denis Kulichkin + */ +class BitrixInstaller extends BaseInstaller +{ + protected $locations = array( + 'module' => '{$bitrix_dir}/modules/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'component' => '{$bitrix_dir}/components/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'theme' => '{$bitrix_dir}/templates/{$name}/', // deprecated, remove on the major release (Backward compatibility will be broken) + 'd7-module' => '{$bitrix_dir}/modules/{$vendor}.{$name}/', + 'd7-component' => '{$bitrix_dir}/components/{$vendor}/{$name}/', + 'd7-template' => '{$bitrix_dir}/templates/{$vendor}_{$name}/', + ); + + /** + * @var array Storage for informations about duplicates at all the time of installation packages. + */ + private static $checkedDuplicates = array(); + + /** + * {@inheritdoc} + */ + public function inflectPackageVars($vars) + { + if ($this->composer->getPackage()) { + $extra = $this->composer->getPackage()->getExtra(); + + if (isset($extra['bitrix-dir'])) { + $vars['bitrix_dir'] = $extra['bitrix-dir']; + } + } + + if (!isset($vars['bitrix_dir'])) { + $vars['bitrix_dir'] = 'bitrix'; + } + + return parent::inflectPackageVars($vars); + } + + /** + * {@inheritdoc} + */ + protected function templatePath($path, array $vars = array()) + { + $templatePath = parent::templatePath($path, $vars); + $this->checkDuplicates($templatePath, $vars); + + return $templatePath; + } + + /** + * Duplicates search packages. + * + * @param string $path + * @param array $vars + */ + protected function checkDuplicates($path, array $vars = array()) + { + $packageType = substr($vars['type'], strlen('bitrix') + 1); + $localDir = explode('/', $vars['bitrix_dir']); + array_pop($localDir); + $localDir[] = 'local'; + $localDir = implode('/', $localDir); + + $oldPath = str_replace( + array('{$bitrix_dir}', '{$name}'), + array($localDir, $vars['name']), + $this->locations[$packageType] + ); + + if (in_array($oldPath, static::$checkedDuplicates)) { + return; + } + + if ($oldPath !== $path && file_exists($oldPath) && $this->io && $this->io->isInteractive()) { + + $this->io->writeError(' Duplication of packages:'); + $this->io->writeError(' Package ' . $oldPath . ' will be called instead package ' . $path . ''); + + while (true) { + switch ($this->io->ask(' Delete ' . $oldPath . ' [y,n,?]? ', '?')) { + case 'y': + $fs = new Filesystem(); + $fs->removeDirectory($oldPath); + break 2; + + case 'n': + break 2; + + case '?': + default: + $this->io->writeError(array( + ' y - delete package ' . $oldPath . ' and to continue with the installation', + ' n - don\'t delete and to continue with the installation', + )); + $this->io->writeError(' ? - print help'); + break; + } + } + } + + static::$checkedDuplicates[] = $oldPath; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php new file mode 100644 index 000000000..da3aad2a3 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/BonefishInstaller.php @@ -0,0 +1,9 @@ + 'Packages/{$vendor}/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php new file mode 100644 index 000000000..6352beb11 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CakePHPInstaller.php @@ -0,0 +1,82 @@ + 'Plugin/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + return $vars; + } + + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + + return $vars; + } + + /** + * Change the default plugin location when cakephp >= 3.0 + */ + public function getLocations() + { + if ($this->matchesCakeVersion('>=', '3.0.0')) { + $this->locations['plugin'] = $this->composer->getConfig()->get('vendor-dir') . '/{$vendor}/{$name}/'; + } + return $this->locations; + } + + /** + * Check if CakePHP version matches against a version + * + * @param string $matcher + * @param string $version + * @return bool + */ + protected function matchesCakeVersion($matcher, $version) + { + if (class_exists('Composer\Semver\Constraint\MultiConstraint')) { + $multiClass = 'Composer\Semver\Constraint\MultiConstraint'; + $constraintClass = 'Composer\Semver\Constraint\Constraint'; + } else { + $multiClass = 'Composer\Package\LinkConstraint\MultiConstraint'; + $constraintClass = 'Composer\Package\LinkConstraint\VersionConstraint'; + } + + $repositoryManager = $this->composer->getRepositoryManager(); + if ($repositoryManager) { + $repos = $repositoryManager->getLocalRepository(); + if (!$repos) { + return false; + } + $cake3 = new $multiClass(array( + new $constraintClass($matcher, $version), + new $constraintClass('!=', '9999999-dev'), + )); + $pool = new Pool('dev'); + $pool->addRepository($repos); + $packages = $pool->whatProvides('cakephp/cakephp'); + foreach ($packages as $package) { + $installed = new $constraintClass('=', $package->getVersion()); + if ($cake3->matches($installed)) { + return true; + } + } + } + return false; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php new file mode 100644 index 000000000..ab2f9aad8 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ChefInstaller.php @@ -0,0 +1,11 @@ + 'Chef/{$vendor}/{$name}/', + 'role' => 'Chef/roles/{$name}/', + ); +} + diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php new file mode 100644 index 000000000..c887815c9 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ClanCatsFrameworkInstaller.php @@ -0,0 +1,10 @@ + 'CCF/orbit/{$name}/', + 'theme' => 'CCF/app/themes/{$name}/', + ); +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php new file mode 100644 index 000000000..c7816dfce --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CockpitInstaller.php @@ -0,0 +1,34 @@ + 'cockpit/modules/addons/{$name}/', + ); + + /** + * Format module name. + * + * Strip `module-` prefix from package name. + * + * @param array @vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] == 'cockpit-module') { + return $this->inflectModuleVars($vars); + } + + return $vars; + } + + public function inflectModuleVars($vars) + { + $vars['name'] = ucfirst(preg_replace('/cockpit-/i', '', $vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php new file mode 100644 index 000000000..3b4a4ece1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CodeIgniterInstaller.php @@ -0,0 +1,11 @@ + 'application/libraries/{$name}/', + 'third-party' => 'application/third_party/{$name}/', + 'module' => 'application/modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php new file mode 100644 index 000000000..5c01bafd7 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Concrete5Installer.php @@ -0,0 +1,13 @@ + 'concrete/', + 'block' => 'application/blocks/{$name}/', + 'package' => 'packages/{$name}/', + 'theme' => 'application/themes/{$name}/', + 'update' => 'updates/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php new file mode 100644 index 000000000..d37a77ae2 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CraftInstaller.php @@ -0,0 +1,35 @@ + 'craft/plugins/{$name}/', + ); + + /** + * Strip `craft-` prefix and/or `-plugin` suffix from package names + * + * @param array $vars + * + * @return array + */ + final public function inflectPackageVars($vars) + { + return $this->inflectPluginVars($vars); + } + + private function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-' . self::NAME_SUFFIX . '$/i', '', $vars['name']); + $vars['name'] = preg_replace('/^' . self::NAME_PREFIX . '-/i', '', $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php new file mode 100644 index 000000000..d94219d3a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/CroogoInstaller.php @@ -0,0 +1,21 @@ + 'Plugin/{$name}/', + 'theme' => 'View/Themed/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(str_replace(array('-', '_'), ' ', $vars['name'])); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php new file mode 100644 index 000000000..f4837a6c1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DecibelInstaller.php @@ -0,0 +1,10 @@ + 'app/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php new file mode 100644 index 000000000..cfd638d5f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DokuWikiInstaller.php @@ -0,0 +1,50 @@ + 'lib/plugins/{$name}/', + 'template' => 'lib/tpl/{$name}/', + ); + + /** + * Format package name. + * + * For package type dokuwiki-plugin, cut off a trailing '-plugin', + * or leading dokuwiki_ if present. + * + * For package type dokuwiki-template, cut off a trailing '-template' if present. + * + */ + public function inflectPackageVars($vars) + { + + if ($vars['type'] === 'dokuwiki-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'dokuwiki-template') { + return $this->inflectTemplateVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-plugin$/', '', $vars['name']); + $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } + + protected function inflectTemplateVars($vars) + { + $vars['name'] = preg_replace('/-template$/', '', $vars['name']); + $vars['name'] = preg_replace('/^dokuwiki_?-?/', '', $vars['name']); + + return $vars; + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php new file mode 100644 index 000000000..21f7e8e80 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DolibarrInstaller.php @@ -0,0 +1,16 @@ + + */ +class DolibarrInstaller extends BaseInstaller +{ + //TODO: Add support for scripts and themes + protected $locations = array( + 'module' => 'htdocs/custom/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php new file mode 100644 index 000000000..a41ee2e15 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/DrupalInstaller.php @@ -0,0 +1,16 @@ + 'core/', + 'module' => 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + 'library' => 'libraries/{$name}/', + 'profile' => 'profiles/{$name}/', + 'drush' => 'drush/{$name}/', + 'custom-theme' => 'themes/custom/{$name}/', + 'custom-module' => 'modules/custom/{$name}', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php new file mode 100644 index 000000000..c0bb609f4 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ElggInstaller.php @@ -0,0 +1,9 @@ + 'mod/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php new file mode 100644 index 000000000..6f3dc97b1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EliasisInstaller.php @@ -0,0 +1,12 @@ + 'components/{$name}/', + 'module' => 'modules/{$name}/', + 'plugin' => 'plugins/{$name}/', + 'template' => 'templates/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php new file mode 100644 index 000000000..d5321a8ca --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ExpressionEngineInstaller.php @@ -0,0 +1,29 @@ + 'system/expressionengine/third_party/{$name}/', + 'theme' => 'themes/third_party/{$name}/', + ); + + private $ee3Locations = array( + 'addon' => 'system/user/addons/{$name}/', + 'theme' => 'themes/user/{$name}/', + ); + + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + + $version = "{$frameworkType}Locations"; + $this->locations = $this->$version; + + return parent::getInstallPath($package, $frameworkType); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php new file mode 100644 index 000000000..f30ebcc77 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/EzPlatformInstaller.php @@ -0,0 +1,10 @@ + 'web/assets/ezplatform/', + 'assets' => 'web/assets/ezplatform/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php new file mode 100644 index 000000000..6eba2e34f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelInstaller.php @@ -0,0 +1,11 @@ + 'fuel/app/modules/{$name}/', + 'package' => 'fuel/packages/{$name}/', + 'theme' => 'fuel/app/themes/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php new file mode 100644 index 000000000..29d980b30 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/FuelphpInstaller.php @@ -0,0 +1,9 @@ + 'components/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/GravInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/GravInstaller.php new file mode 100644 index 000000000..dbe63e07e --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/GravInstaller.php @@ -0,0 +1,30 @@ + 'user/plugins/{$name}/', + 'theme' => 'user/themes/{$name}/', + ); + + /** + * Format package name + * + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $restrictedWords = implode('|', array_keys($this->locations)); + + $vars['name'] = strtolower($vars['name']); + $vars['name'] = preg_replace('/^(?:grav-)?(?:(?:'.$restrictedWords.')-)?(.*?)(?:-(?:'.$restrictedWords.'))?$/ui', + '$1', + $vars['name'] + ); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php new file mode 100644 index 000000000..8fe017f0f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/HuradInstaller.php @@ -0,0 +1,25 @@ + 'plugins/{$name}/', + 'theme' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php new file mode 100644 index 000000000..5e2142ea5 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ImageCMSInstaller.php @@ -0,0 +1,11 @@ + 'templates/{$name}/', + 'module' => 'application/modules/{$name}/', + 'library' => 'application/libraries/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Installer.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Installer.php new file mode 100644 index 000000000..a9d49f346 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Installer.php @@ -0,0 +1,200 @@ + 'AimeosInstaller', + 'asgard' => 'AsgardInstaller', + 'attogram' => 'AttogramInstaller', + 'agl' => 'AglInstaller', + 'annotatecms' => 'AnnotateCmsInstaller', + 'bitrix' => 'BitrixInstaller', + 'bonefish' => 'BonefishInstaller', + 'cakephp' => 'CakePHPInstaller', + 'chef' => 'ChefInstaller', + 'ccframework' => 'ClanCatsFrameworkInstaller', + 'cockpit' => 'CockpitInstaller', + 'codeigniter' => 'CodeIgniterInstaller', + 'concrete5' => 'Concrete5Installer', + 'craft' => 'CraftInstaller', + 'croogo' => 'CroogoInstaller', + 'dokuwiki' => 'DokuWikiInstaller', + 'dolibarr' => 'DolibarrInstaller', + 'decibel' => 'DecibelInstaller', + 'drupal' => 'DrupalInstaller', + 'elgg' => 'ElggInstaller', + 'eliasis' => 'EliasisInstaller', + 'ee3' => 'ExpressionEngineInstaller', + 'ee2' => 'ExpressionEngineInstaller', + 'ezplatform' => 'EzPlatformInstaller', + 'fuel' => 'FuelInstaller', + 'fuelphp' => 'FuelphpInstaller', + 'grav' => 'GravInstaller', + 'hurad' => 'HuradInstaller', + 'imagecms' => 'ImageCMSInstaller', + 'itop' => 'ItopInstaller', + 'joomla' => 'JoomlaInstaller', + 'kanboard' => 'KanboardInstaller', + 'kirby' => 'KirbyInstaller', + 'kodicms' => 'KodiCMSInstaller', + 'kohana' => 'KohanaInstaller', + 'lms' => 'LanManagementSystemInstaller', + 'laravel' => 'LaravelInstaller', + 'lavalite' => 'LavaLiteInstaller', + 'lithium' => 'LithiumInstaller', + 'magento' => 'MagentoInstaller', + 'majima' => 'MajimaInstaller', + 'mako' => 'MakoInstaller', + 'maya' => 'MayaInstaller', + 'mautic' => 'MauticInstaller', + 'mediawiki' => 'MediaWikiInstaller', + 'microweber' => 'MicroweberInstaller', + 'modulework' => 'MODULEWorkInstaller', + 'modx' => 'ModxInstaller', + 'modxevo' => 'MODXEvoInstaller', + 'moodle' => 'MoodleInstaller', + 'october' => 'OctoberInstaller', + 'ontowiki' => 'OntoWikiInstaller', + 'oxid' => 'OxidInstaller', + 'osclass' => 'OsclassInstaller', + 'pxcms' => 'PxcmsInstaller', + 'phpbb' => 'PhpBBInstaller', + 'pimcore' => 'PimcoreInstaller', + 'piwik' => 'PiwikInstaller', + 'plentymarkets'=> 'PlentymarketsInstaller', + 'ppi' => 'PPIInstaller', + 'puppet' => 'PuppetInstaller', + 'radphp' => 'RadPHPInstaller', + 'phifty' => 'PhiftyInstaller', + 'porto' => 'PortoInstaller', + 'redaxo' => 'RedaxoInstaller', + 'reindex' => 'ReIndexInstaller', + 'roundcube' => 'RoundcubeInstaller', + 'shopware' => 'ShopwareInstaller', + 'sitedirect' => 'SiteDirectInstaller', + 'silverstripe' => 'SilverStripeInstaller', + 'smf' => 'SMFInstaller', + 'sydes' => 'SyDESInstaller', + 'symfony1' => 'Symfony1Installer', + 'thelia' => 'TheliaInstaller', + 'tusk' => 'TuskInstaller', + 'typo3-cms' => 'TYPO3CmsInstaller', + 'typo3-flow' => 'TYPO3FlowInstaller', + 'userfrosting' => 'UserFrostingInstaller', + 'vanilla' => 'VanillaInstaller', + 'whmcs' => 'WHMCSInstaller', + 'wolfcms' => 'WolfCMSInstaller', + 'wordpress' => 'WordPressInstaller', + 'yawik' => 'YawikInstaller', + 'zend' => 'ZendInstaller', + 'zikula' => 'ZikulaInstaller', + 'prestashop' => 'PrestashopInstaller' + ); + + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + $type = $package->getType(); + $frameworkType = $this->findFrameworkType($type); + + if ($frameworkType === false) { + throw new \InvalidArgumentException( + 'Sorry the package type of this package is not yet supported.' + ); + } + + $class = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + $installer = new $class($package, $this->composer, $this->getIO()); + + return $installer->getInstallPath($package, $frameworkType); + } + + public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) + { + parent::uninstall($repo, $package); + $installPath = $this->getPackageBasePath($package); + $this->io->write(sprintf('Deleting %s - %s', $installPath, !file_exists($installPath) ? 'deleted' : 'not deleted')); + } + + /** + * {@inheritDoc} + */ + public function supports($packageType) + { + $frameworkType = $this->findFrameworkType($packageType); + + if ($frameworkType === false) { + return false; + } + + $locationPattern = $this->getLocationPattern($frameworkType); + + return preg_match('#' . $frameworkType . '-' . $locationPattern . '#', $packageType, $matches) === 1; + } + + /** + * Finds a supported framework type if it exists and returns it + * + * @param string $type + * @return string + */ + protected function findFrameworkType($type) + { + $frameworkType = false; + + krsort($this->supportedTypes); + + foreach ($this->supportedTypes as $key => $val) { + if ($key === substr($type, 0, strlen($key))) { + $frameworkType = substr($type, 0, strlen($key)); + break; + } + } + + return $frameworkType; + } + + /** + * Get the second part of the regular expression to check for support of a + * package type + * + * @param string $frameworkType + * @return string + */ + protected function getLocationPattern($frameworkType) + { + $pattern = false; + if (!empty($this->supportedTypes[$frameworkType])) { + $frameworkClass = 'Composer\\Installers\\' . $this->supportedTypes[$frameworkType]; + /** @var BaseInstaller $framework */ + $framework = new $frameworkClass(null, $this->composer, $this->getIO()); + $locations = array_keys($framework->getLocations()); + $pattern = $locations ? '(' . implode('|', $locations) . ')' : false; + } + + return $pattern ? : '(\w+)'; + } + + /** + * Get I/O object + * + * @return IOInterface + */ + private function getIO() + { + return $this->io; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php new file mode 100644 index 000000000..c6c1b3374 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ItopInstaller.php @@ -0,0 +1,9 @@ + 'extensions/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php new file mode 100644 index 000000000..9ee775965 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/JoomlaInstaller.php @@ -0,0 +1,15 @@ + 'components/{$name}/', + 'module' => 'modules/{$name}/', + 'template' => 'templates/{$name}/', + 'plugin' => 'plugins/{$name}/', + 'library' => 'libraries/{$name}/', + ); + + // TODO: Add inflector for mod_ and com_ names +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php new file mode 100644 index 000000000..9cb7b8cdb --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KanboardInstaller.php @@ -0,0 +1,18 @@ + 'plugins/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php new file mode 100644 index 000000000..36b2f84a7 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KirbyInstaller.php @@ -0,0 +1,11 @@ + 'site/plugins/{$name}/', + 'field' => 'site/fields/{$name}/', + 'tag' => 'site/tags/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php new file mode 100644 index 000000000..7143e232b --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KodiCMSInstaller.php @@ -0,0 +1,10 @@ + 'cms/plugins/{$name}/', + 'media' => 'cms/media/vendor/{$name}/' + ); +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php new file mode 100644 index 000000000..dcd6d2632 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/KohanaInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php new file mode 100644 index 000000000..903143a55 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LanManagementSystemInstaller.php @@ -0,0 +1,27 @@ + 'plugins/{$name}/', + 'template' => 'templates/{$name}/', + 'document-template' => 'documents/templates/{$name}/', + 'userpanel-module' => 'userpanel/modules/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php new file mode 100644 index 000000000..be4d53a7b --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LaravelInstaller.php @@ -0,0 +1,9 @@ + 'libraries/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php new file mode 100644 index 000000000..412c0b5c0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LavaLiteInstaller.php @@ -0,0 +1,10 @@ + 'packages/{$vendor}/{$name}/', + 'theme' => 'public/themes/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php new file mode 100644 index 000000000..47bbd4cab --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/LithiumInstaller.php @@ -0,0 +1,10 @@ + 'libraries/{$name}/', + 'source' => 'libraries/_source/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php new file mode 100644 index 000000000..9c2e9fb40 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODULEWorkInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php new file mode 100644 index 000000000..5a664608d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MODXEvoInstaller.php @@ -0,0 +1,16 @@ + 'assets/snippets/{$name}/', + 'plugin' => 'assets/plugins/{$name}/', + 'module' => 'assets/modules/{$name}/', + 'template' => 'assets/templates/{$name}/', + 'lib' => 'assets/lib/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php new file mode 100644 index 000000000..cf18e9478 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MagentoInstaller.php @@ -0,0 +1,11 @@ + 'app/design/frontend/{$name}/', + 'skin' => 'skin/frontend/default/{$name}/', + 'library' => 'lib/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php new file mode 100644 index 000000000..e463756fa --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MajimaInstaller.php @@ -0,0 +1,37 @@ + 'plugins/{$name}/', + ); + + /** + * Transforms the names + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + return $this->correctPluginName($vars); + } + + /** + * Change hyphenated names to camelcase + * @param array $vars + * @return array + */ + private function correctPluginName($vars) + { + $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + $vars['name'] = ucfirst($camelCasedName); + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php new file mode 100644 index 000000000..ca3cfacb4 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MakoInstaller.php @@ -0,0 +1,9 @@ + 'app/packages/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php new file mode 100644 index 000000000..3e1ce2b2d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MauticInstaller.php @@ -0,0 +1,25 @@ + 'plugins/{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Format package name of mautic-plugins to CamelCase + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] == 'mautic-plugin') { + $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, ucfirst($vars['name'])); + } + + return $vars; + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php new file mode 100644 index 000000000..30a91676d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MayaInstaller.php @@ -0,0 +1,33 @@ + 'modules/{$name}/', + ); + + /** + * Format package name. + * + * For package type maya-module, cut off a trailing '-module' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'maya-module') { + return $this->inflectModuleVars($vars); + } + + return $vars; + } + + protected function inflectModuleVars($vars) + { + $vars['name'] = preg_replace('/-module$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php new file mode 100644 index 000000000..01008c638 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MediaWikiInstaller.php @@ -0,0 +1,50 @@ + 'extensions/{$name}/', + 'skin' => 'skins/{$name}/', + ); + + /** + * Format package name. + * + * For package type mediawiki-extension, cut off a trailing '-extension' if present and transform + * to CamelCase keeping existing uppercase chars. + * + * For package type mediawiki-skin, cut off a trailing '-skin' if present. + * + */ + public function inflectPackageVars($vars) + { + + if ($vars['type'] === 'mediawiki-extension') { + return $this->inflectExtensionVars($vars); + } + + if ($vars['type'] === 'mediawiki-skin') { + return $this->inflectSkinVars($vars); + } + + return $vars; + } + + protected function inflectExtensionVars($vars) + { + $vars['name'] = preg_replace('/-extension$/', '', $vars['name']); + $vars['name'] = str_replace('-', ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + protected function inflectSkinVars($vars) + { + $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); + + return $vars; + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php new file mode 100644 index 000000000..4bbbec8c0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MicroweberInstaller.php @@ -0,0 +1,111 @@ + 'userfiles/modules/{$name}/', + 'module-skin' => 'userfiles/modules/{$name}/templates/', + 'template' => 'userfiles/templates/{$name}/', + 'element' => 'userfiles/elements/{$name}/', + 'vendor' => 'vendor/{$name}/', + 'components' => 'components/{$name}/' + ); + + /** + * Format package name. + * + * For package type microweber-module, cut off a trailing '-module' if present + * + * For package type microweber-template, cut off a trailing '-template' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'microweber-template') { + return $this->inflectTemplateVars($vars); + } + if ($vars['type'] === 'microweber-templates') { + return $this->inflectTemplatesVars($vars); + } + if ($vars['type'] === 'microweber-core') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-adapter') { + return $this->inflectCoreVars($vars); + } + if ($vars['type'] === 'microweber-module') { + return $this->inflectModuleVars($vars); + } + if ($vars['type'] === 'microweber-modules') { + return $this->inflectModulesVars($vars); + } + if ($vars['type'] === 'microweber-skin') { + return $this->inflectSkinVars($vars); + } + if ($vars['type'] === 'microweber-element' or $vars['type'] === 'microweber-elements') { + return $this->inflectElementVars($vars); + } + + return $vars; + } + + protected function inflectTemplateVars($vars) + { + $vars['name'] = preg_replace('/-template$/', '', $vars['name']); + $vars['name'] = preg_replace('/template-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectTemplatesVars($vars) + { + $vars['name'] = preg_replace('/-templates$/', '', $vars['name']); + $vars['name'] = preg_replace('/templates-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectCoreVars($vars) + { + $vars['name'] = preg_replace('/-providers$/', '', $vars['name']); + $vars['name'] = preg_replace('/-provider$/', '', $vars['name']); + $vars['name'] = preg_replace('/-adapter$/', '', $vars['name']); + + return $vars; + } + + protected function inflectModuleVars($vars) + { + $vars['name'] = preg_replace('/-module$/', '', $vars['name']); + $vars['name'] = preg_replace('/module-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectModulesVars($vars) + { + $vars['name'] = preg_replace('/-modules$/', '', $vars['name']); + $vars['name'] = preg_replace('/modules-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectSkinVars($vars) + { + $vars['name'] = preg_replace('/-skin$/', '', $vars['name']); + $vars['name'] = preg_replace('/skin-$/', '', $vars['name']); + + return $vars; + } + + protected function inflectElementVars($vars) + { + $vars['name'] = preg_replace('/-elements$/', '', $vars['name']); + $vars['name'] = preg_replace('/elements-$/', '', $vars['name']); + $vars['name'] = preg_replace('/-element$/', '', $vars['name']); + $vars['name'] = preg_replace('/element-$/', '', $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php new file mode 100644 index 000000000..0ee140abf --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ModxInstaller.php @@ -0,0 +1,12 @@ + 'core/packages/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php new file mode 100644 index 000000000..a89c82f73 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/MoodleInstaller.php @@ -0,0 +1,57 @@ + 'mod/{$name}/', + 'admin_report' => 'admin/report/{$name}/', + 'atto' => 'lib/editor/atto/plugins/{$name}/', + 'tool' => 'admin/tool/{$name}/', + 'assignment' => 'mod/assignment/type/{$name}/', + 'assignsubmission' => 'mod/assign/submission/{$name}/', + 'assignfeedback' => 'mod/assign/feedback/{$name}/', + 'auth' => 'auth/{$name}/', + 'availability' => 'availability/condition/{$name}/', + 'block' => 'blocks/{$name}/', + 'booktool' => 'mod/book/tool/{$name}/', + 'cachestore' => 'cache/stores/{$name}/', + 'cachelock' => 'cache/locks/{$name}/', + 'calendartype' => 'calendar/type/{$name}/', + 'format' => 'course/format/{$name}/', + 'coursereport' => 'course/report/{$name}/', + 'datafield' => 'mod/data/field/{$name}/', + 'datapreset' => 'mod/data/preset/{$name}/', + 'editor' => 'lib/editor/{$name}/', + 'enrol' => 'enrol/{$name}/', + 'filter' => 'filter/{$name}/', + 'gradeexport' => 'grade/export/{$name}/', + 'gradeimport' => 'grade/import/{$name}/', + 'gradereport' => 'grade/report/{$name}/', + 'gradingform' => 'grade/grading/form/{$name}/', + 'local' => 'local/{$name}/', + 'logstore' => 'admin/tool/log/store/{$name}/', + 'ltisource' => 'mod/lti/source/{$name}/', + 'ltiservice' => 'mod/lti/service/{$name}/', + 'message' => 'message/output/{$name}/', + 'mnetservice' => 'mnet/service/{$name}/', + 'plagiarism' => 'plagiarism/{$name}/', + 'portfolio' => 'portfolio/{$name}/', + 'qbehaviour' => 'question/behaviour/{$name}/', + 'qformat' => 'question/format/{$name}/', + 'qtype' => 'question/type/{$name}/', + 'quizaccess' => 'mod/quiz/accessrule/{$name}/', + 'quiz' => 'mod/quiz/report/{$name}/', + 'report' => 'report/{$name}/', + 'repository' => 'repository/{$name}/', + 'scormreport' => 'mod/scorm/report/{$name}/', + 'search' => 'search/engine/{$name}/', + 'theme' => 'theme/{$name}/', + 'tinymce' => 'lib/editor/tinymce/plugins/{$name}/', + 'profilefield' => 'user/profile/field/{$name}/', + 'webservice' => 'webservice/{$name}/', + 'workshopallocation' => 'mod/workshop/allocation/{$name}/', + 'workshopeval' => 'mod/workshop/eval/{$name}/', + 'workshopform' => 'mod/workshop/form/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php new file mode 100644 index 000000000..93b25de59 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OctoberInstaller.php @@ -0,0 +1,46 @@ + 'modules/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type october-plugin, cut off a trailing '-plugin' if present. + * + * For package type october-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'october-plugin') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'october-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/^oc-|-plugin$/', '', $vars['name']); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = preg_replace('/^oc-|-theme$/', '', $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php new file mode 100644 index 000000000..5dd3438d9 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OntoWikiInstaller.php @@ -0,0 +1,24 @@ + 'extensions/{$name}/', + 'theme' => 'extensions/themes/{$name}/', + 'translation' => 'extensions/translations/{$name}/', + ); + + /** + * Format package name to lower case and remove ".ontowiki" suffix + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower($vars['name']); + $vars['name'] = preg_replace('/.ontowiki$/', '', $vars['name']); + $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); + $vars['name'] = preg_replace('/-translation$/', '', $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php new file mode 100644 index 000000000..3ca7954c9 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OsclassInstaller.php @@ -0,0 +1,14 @@ + 'oc-content/plugins/{$name}/', + 'theme' => 'oc-content/themes/{$name}/', + 'language' => 'oc-content/languages/{$name}/', + ); + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php new file mode 100644 index 000000000..49940ff6d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/OxidInstaller.php @@ -0,0 +1,59 @@ +.+)\/.+/'; + + protected $locations = array( + 'module' => 'modules/{$name}/', + 'theme' => 'application/views/{$name}/', + 'out' => 'out/{$name}/', + ); + + /** + * getInstallPath + * + * @param PackageInterface $package + * @param string $frameworkType + * @return void + */ + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + $installPath = parent::getInstallPath($package, $frameworkType); + $type = $this->package->getType(); + if ($type === 'oxid-module') { + $this->prepareVendorDirectory($installPath); + } + return $installPath; + } + + /** + * prepareVendorDirectory + * + * Makes sure there is a vendormetadata.php file inside + * the vendor folder if there is a vendor folder. + * + * @param string $installPath + * @return void + */ + protected function prepareVendorDirectory($installPath) + { + $matches = ''; + $hasVendorDirectory = preg_match(self::VENDOR_PATTERN, $installPath, $matches); + if (!$hasVendorDirectory) { + return; + } + + $vendorDirectory = $matches['vendor']; + $vendorPath = getcwd() . '/modules/' . $vendorDirectory; + if (!file_exists($vendorPath)) { + mkdir($vendorPath, 0755, true); + } + + $vendorMetaDataPath = $vendorPath . '/vendormetadata.php'; + touch($vendorMetaDataPath); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php new file mode 100644 index 000000000..170136f98 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PPIInstaller.php @@ -0,0 +1,9 @@ + 'modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php new file mode 100644 index 000000000..4e59a8a74 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhiftyInstaller.php @@ -0,0 +1,11 @@ + 'bundles/{$name}/', + 'library' => 'libraries/{$name}/', + 'framework' => 'frameworks/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php new file mode 100644 index 000000000..deb2b77a6 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PhpBBInstaller.php @@ -0,0 +1,11 @@ + 'ext/{$vendor}/{$name}/', + 'language' => 'language/{$name}/', + 'style' => 'styles/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php new file mode 100644 index 000000000..4781fa6d1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PimcoreInstaller.php @@ -0,0 +1,21 @@ + 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php new file mode 100644 index 000000000..c17f4572b --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PiwikInstaller.php @@ -0,0 +1,32 @@ + 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php new file mode 100644 index 000000000..903e55f62 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PlentymarketsInstaller.php @@ -0,0 +1,29 @@ + '{$name}/' + ); + + /** + * Remove hyphen, "plugin" and format to camelcase + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = explode("-", $vars['name']); + foreach ($vars['name'] as $key => $name) { + $vars['name'][$key] = ucfirst($vars['name'][$key]); + if (strcasecmp($name, "Plugin") == 0) { + unset($vars['name'][$key]); + } + } + $vars['name'] = implode("",$vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Plugin.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Plugin.php new file mode 100644 index 000000000..5eb04af17 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Plugin.php @@ -0,0 +1,17 @@ +getInstallationManager()->addInstaller($installer); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php new file mode 100644 index 000000000..dbf85e635 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PortoInstaller.php @@ -0,0 +1,9 @@ + 'app/Containers/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php new file mode 100644 index 000000000..4c8421e36 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PrestashopInstaller.php @@ -0,0 +1,10 @@ + 'modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php new file mode 100644 index 000000000..77cc3dd87 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PuppetInstaller.php @@ -0,0 +1,11 @@ + 'modules/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php new file mode 100644 index 000000000..65510580e --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/PxcmsInstaller.php @@ -0,0 +1,63 @@ + 'app/Modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Format package name. + * + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'pxcms-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'pxcms-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + /** + * For package type pxcms-module, cut off a trailing '-plugin' if present. + * + * return string + */ + protected function inflectModuleVars($vars) + { + $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) + $vars['name'] = str_replace('module-', '', $vars['name']); // strip out module- + $vars['name'] = preg_replace('/-module$/', '', $vars['name']); // strip out -module + $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s + $vars['name'] = ucwords($vars['name']); // make module name camelcased + + return $vars; + } + + + /** + * For package type pxcms-module, cut off a trailing '-plugin' if present. + * + * return string + */ + protected function inflectThemeVars($vars) + { + $vars['name'] = str_replace('pxcms-', '', $vars['name']); // strip out pxcms- just incase (legacy) + $vars['name'] = str_replace('theme-', '', $vars['name']); // strip out theme- + $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); // strip out -theme + $vars['name'] = str_replace('-', '_', $vars['name']); // make -'s be _'s + $vars['name'] = ucwords($vars['name']); // make module name camelcased + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php new file mode 100644 index 000000000..0f78b5ca6 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RadPHPInstaller.php @@ -0,0 +1,24 @@ + 'src/{$name}/' + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $nameParts = explode('/', $vars['name']); + foreach ($nameParts as &$value) { + $value = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $value)); + $value = str_replace(array('-', '_'), ' ', $value); + $value = str_replace(' ', '', ucwords($value)); + } + $vars['name'] = implode('/', $nameParts); + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php new file mode 100644 index 000000000..252c7339f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ReIndexInstaller.php @@ -0,0 +1,10 @@ + 'themes/{$name}/', + 'plugin' => 'plugins/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php new file mode 100644 index 000000000..09544576b --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RedaxoInstaller.php @@ -0,0 +1,10 @@ + 'redaxo/include/addons/{$name}/', + 'bestyle-plugin' => 'redaxo/include/addons/be_style/plugins/{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php new file mode 100644 index 000000000..d8d795be0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/RoundcubeInstaller.php @@ -0,0 +1,22 @@ + 'plugins/{$name}/', + ); + + /** + * Lowercase name and changes the name to a underscores + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(str_replace('-', '_', $vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php new file mode 100644 index 000000000..1acd3b14c --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SMFInstaller.php @@ -0,0 +1,10 @@ + 'Sources/{$name}/', + 'theme' => 'Themes/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php new file mode 100644 index 000000000..7d20d27a2 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ShopwareInstaller.php @@ -0,0 +1,60 @@ + 'engine/Shopware/Plugins/Local/Backend/{$name}/', + 'core-plugin' => 'engine/Shopware/Plugins/Local/Core/{$name}/', + 'frontend-plugin' => 'engine/Shopware/Plugins/Local/Frontend/{$name}/', + 'theme' => 'templates/{$name}/', + 'plugin' => 'custom/plugins/{$name}/', + 'frontend-theme' => 'themes/Frontend/{$name}/', + ); + + /** + * Transforms the names + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'shopware-theme') { + return $this->correctThemeName($vars); + } + + return $this->correctPluginName($vars); + } + + /** + * Changes the name to a camelcased combination of vendor and name + * @param array $vars + * @return array + */ + private function correctPluginName($vars) + { + $camelCasedName = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + $vars['name'] = ucfirst($vars['vendor']) . ucfirst($camelCasedName); + + return $vars; + } + + /** + * Changes the name to a underscore separated name + * @param array $vars + * @return array + */ + private function correctThemeName($vars) + { + $vars['name'] = str_replace('-', '_', $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php new file mode 100644 index 000000000..81910e9f1 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SilverStripeInstaller.php @@ -0,0 +1,35 @@ + '{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Return the install path based on package type. + * + * Relies on built-in BaseInstaller behaviour with one exception: silverstripe/framework + * must be installed to 'sapphire' and not 'framework' if the version is <3.0.0 + * + * @param PackageInterface $package + * @param string $frameworkType + * @return string + */ + public function getInstallPath(PackageInterface $package, $frameworkType = '') + { + if ( + $package->getName() == 'silverstripe/framework' + && preg_match('/^\d+\.\d+\.\d+/', $package->getVersion()) + && version_compare($package->getVersion(), '2.999.999') < 0 + ) { + return $this->templatePath($this->locations['module'], array('name' => 'sapphire')); + } + + return parent::getInstallPath($package, $frameworkType); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php new file mode 100644 index 000000000..762d94c68 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SiteDirectInstaller.php @@ -0,0 +1,25 @@ + 'modules/{$vendor}/{$name}/', + 'plugin' => 'plugins/{$vendor}/{$name}/' + ); + + public function inflectPackageVars($vars) + { + return $this->parseVars($vars); + } + + protected function parseVars($vars) + { + $vars['vendor'] = strtolower($vars['vendor']) == 'sitedirect' ? 'SiteDirect' : $vars['vendor']; + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php new file mode 100644 index 000000000..83ef9d091 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/SyDESInstaller.php @@ -0,0 +1,49 @@ + 'app/modules/{$name}/', + 'theme' => 'themes/{$name}/', + ); + + /** + * Format module name. + * + * Strip `sydes-` prefix and a trailing '-theme' or '-module' from package name if present. + * + * @param array @vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] == 'sydes-module') { + return $this->inflectModuleVars($vars); + } + + if ($vars['type'] === 'sydes-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + public function inflectModuleVars($vars) + { + $vars['name'] = preg_replace('/(^sydes-|-module$)/i', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = preg_replace('/(^sydes-|-theme$)/', '', $vars['name']); + $vars['name'] = strtolower($vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php new file mode 100644 index 000000000..1675c4f21 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/Symfony1Installer.php @@ -0,0 +1,26 @@ + + */ +class Symfony1Installer extends BaseInstaller +{ + protected $locations = array( + 'plugin' => 'plugins/{$name}/', + ); + + /** + * Format package name to CamelCase + */ + public function inflectPackageVars($vars) + { + $vars['name'] = preg_replace_callback('/(-[a-z])/', function ($matches) { + return strtoupper($matches[0][1]); + }, $vars['name']); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php new file mode 100644 index 000000000..b1663e843 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3CmsInstaller.php @@ -0,0 +1,16 @@ + + */ +class TYPO3CmsInstaller extends BaseInstaller +{ + protected $locations = array( + 'extension' => 'typo3conf/ext/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php new file mode 100644 index 000000000..42572f44f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TYPO3FlowInstaller.php @@ -0,0 +1,38 @@ + 'Packages/Application/{$name}/', + 'framework' => 'Packages/Framework/{$name}/', + 'plugin' => 'Packages/Plugins/{$name}/', + 'site' => 'Packages/Sites/{$name}/', + 'boilerplate' => 'Packages/Boilerplates/{$name}/', + 'build' => 'Build/{$name}/', + ); + + /** + * Modify the package name to be a TYPO3 Flow style key. + * + * @param array $vars + * @return array + */ + public function inflectPackageVars($vars) + { + $autoload = $this->package->getAutoload(); + if (isset($autoload['psr-0']) && is_array($autoload['psr-0'])) { + $namespace = key($autoload['psr-0']); + $vars['name'] = str_replace('\\', '.', $namespace); + } + if (isset($autoload['psr-4']) && is_array($autoload['psr-4'])) { + $namespace = key($autoload['psr-4']); + $vars['name'] = rtrim(str_replace('\\', '.', $namespace), '.'); + } + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php new file mode 100644 index 000000000..158af5261 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TheliaInstaller.php @@ -0,0 +1,12 @@ + 'local/modules/{$name}/', + 'frontoffice-template' => 'templates/frontOffice/{$name}/', + 'backoffice-template' => 'templates/backOffice/{$name}/', + 'email-template' => 'templates/email/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php new file mode 100644 index 000000000..7c0113b85 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/TuskInstaller.php @@ -0,0 +1,14 @@ + + */ + class TuskInstaller extends BaseInstaller + { + protected $locations = array( + 'task' => '.tusk/tasks/{$name}/', + 'command' => '.tusk/commands/{$name}/', + 'asset' => 'assets/tusk/{$name}/', + ); + } diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php new file mode 100644 index 000000000..fcb414ab7 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/UserFrostingInstaller.php @@ -0,0 +1,9 @@ + 'app/sprinkles/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php new file mode 100644 index 000000000..24ca64512 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VanillaInstaller.php @@ -0,0 +1,10 @@ + 'plugins/{$name}/', + 'theme' => 'themes/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php new file mode 100644 index 000000000..7d90c5e6e --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/VgmcpInstaller.php @@ -0,0 +1,49 @@ + 'src/{$vendor}/{$name}/', + 'theme' => 'themes/{$name}/' + ); + + /** + * Format package name. + * + * For package type vgmcp-bundle, cut off a trailing '-bundle' if present. + * + * For package type vgmcp-theme, cut off a trailing '-theme' if present. + * + */ + public function inflectPackageVars($vars) + { + if ($vars['type'] === 'vgmcp-bundle') { + return $this->inflectPluginVars($vars); + } + + if ($vars['type'] === 'vgmcp-theme') { + return $this->inflectThemeVars($vars); + } + + return $vars; + } + + protected function inflectPluginVars($vars) + { + $vars['name'] = preg_replace('/-bundle$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } + + protected function inflectThemeVars($vars) + { + $vars['name'] = preg_replace('/-theme$/', '', $vars['name']); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php new file mode 100644 index 000000000..2cbb4a463 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WHMCSInstaller.php @@ -0,0 +1,10 @@ + 'modules/gateways/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php new file mode 100644 index 000000000..cb387881d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WolfCMSInstaller.php @@ -0,0 +1,9 @@ + 'wolf/plugins/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php new file mode 100644 index 000000000..91c46ad99 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/WordPressInstaller.php @@ -0,0 +1,12 @@ + 'wp-content/plugins/{$name}/', + 'theme' => 'wp-content/themes/{$name}/', + 'muplugin' => 'wp-content/mu-plugins/{$name}/', + 'dropin' => 'wp-content/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php new file mode 100644 index 000000000..27f429ff2 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/YawikInstaller.php @@ -0,0 +1,32 @@ + 'module/{$name}/', + ); + + /** + * Format package name to CamelCase + * @param array $vars + * + * @return array + */ + public function inflectPackageVars($vars) + { + $vars['name'] = strtolower(preg_replace('/(?<=\\w)([A-Z])/', '_\\1', $vars['name'])); + $vars['name'] = str_replace(array('-', '_'), ' ', $vars['name']); + $vars['name'] = str_replace(' ', '', ucwords($vars['name'])); + + return $vars; + } +} \ No newline at end of file diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php new file mode 100644 index 000000000..bde9bc8c8 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZendInstaller.php @@ -0,0 +1,11 @@ + 'library/{$name}/', + 'extra' => 'extras/library/{$name}/', + 'module' => 'module/{$name}/', + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php new file mode 100644 index 000000000..56cdf5da7 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/Composer/Installers/ZikulaInstaller.php @@ -0,0 +1,10 @@ + 'modules/{$vendor}-{$name}/', + 'theme' => 'themes/{$vendor}-{$name}/' + ); +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/bootstrap.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/bootstrap.php new file mode 100644 index 000000000..0de276ee2 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/src/bootstrap.php @@ -0,0 +1,13 @@ +installer = new AsgardInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + array('name' => $expected, 'type' => $type), + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) + ); + } + + public function packageNameInflectionProvider() + { + return array( + // Should keep module name StudlyCase + array( + 'asgard-module', + 'user-profile', + 'UserProfile' + ), + array( + 'asgard-module', + 'asgard-module', + 'Asgard' + ), + array( + 'asgard-module', + 'blog', + 'Blog' + ), + // tests that exactly one '-module' is cut off + array( + 'asgard-module', + 'some-module-module', + 'SomeModule', + ), + // tests that exactly one '-theme' is cut off + array( + 'asgard-theme', + 'some-theme-theme', + 'SomeTheme', + ), + // tests that names without '-theme' suffix stay valid + array( + 'asgard-theme', + 'someothertheme', + 'Someothertheme', + ), + // Should keep theme name StudlyCase + array( + 'asgard-theme', + 'adminlte-advanced', + 'AdminlteAdvanced' + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php new file mode 100644 index 000000000..7fe8fcbb0 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/BitrixInstallerTest.php @@ -0,0 +1,75 @@ +composer = new Composer(); + } + + /** + * @param string $vars + * @param string $expectedVars + * + * @covers ::inflectPackageVars + * + * @dataProvider provideExpectedInflectionResults + */ + final public function testInflectPackageVars($vars, $expectedVars) + { + + $this->installer = new BitrixInstaller( + new Package($vars['name'], '4.2', '4.2'), + $this->composer + ); + $actual = $this->installer->inflectPackageVars($vars); + $this->assertEquals($actual, $expectedVars); + } + + /** + * Provides various parameters for packages and the expected result after inflection + * + * @return array + */ + final public function provideExpectedInflectionResults() + { + return array( + //check bitrix-dir is correct + array( + array('name' => 'Nyan/Cat'), + array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix') + ), + array( + array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix'), + array('name' => 'Nyan/Cat', 'bitrix_dir' => 'bitrix') + ), + array( + array('name' => 'Nyan/Cat', 'bitrix_dir' => 'local'), + array('name' => 'Nyan/Cat', 'bitrix_dir' => 'local') + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php new file mode 100644 index 000000000..46b02769f --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CakePHPInstallerTest.php @@ -0,0 +1,114 @@ +package = new Package('CamelCased', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + $this->composer->setConfig(new Config(false)); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); + $this->assertEquals($result, array('name' => 'CamelCased')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with-dash')); + $this->assertEquals($result, array('name' => 'WithDash')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); + $this->assertEquals($result, array('name' => 'WithUnderscore')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'cake/acl')); + $this->assertEquals($result, array('name' => 'Cake/Acl')); + + $installer = new CakePHPInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'cake/debug-kit')); + $this->assertEquals($result, array('name' => 'Cake/DebugKit')); + } + + /** + * Test getLocations returning appropriate values based on CakePHP version + * + */ + public function testGetLocations() { + $package = new RootPackage('CamelCased', '1.0', '1.0'); + $composer = $this->composer; + $rm = new RepositoryManager( + $this->getMock('Composer\IO\IOInterface'), + $this->getMock('Composer\Config') + ); + $composer->setRepositoryManager($rm); + $installer = new CakePHPInstaller($package, $composer); + + // 2.0 < cakephp < 3.0 + $this->setCakephpVersion($rm, '2.0.0'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '2.5.9'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '~2.5'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + // special handling for 2.x versions when 3.x is still in development + $this->setCakephpVersion($rm, 'dev-master'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + $this->setCakephpVersion($rm, '>=2.5'); + $result = $installer->getLocations(); + $this->assertContains('Plugin/', $result['plugin']); + + // cakephp >= 3.0 + $this->setCakephpVersion($rm, '3.0.*-dev'); + $result = $installer->getLocations(); + $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']); + + $this->setCakephpVersion($rm, '~8.8'); + $result = $installer->getLocations(); + $this->assertContains('vendor/{$vendor}/{$name}/', $result['plugin']); + } + + protected function setCakephpVersion($rm, $version) { + $parser = new VersionParser(); + list(, $version) = explode(' ', $parser->parseConstraints($version)); + $installed = new InstalledArrayRepository(); + $package = new Package('cakephp/cakephp', $version, $version); + $installed->addPackage($package); + $rm->setLocalRepository($installed); + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php new file mode 100644 index 000000000..31ccecdbc --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/CraftInstallerTest.php @@ -0,0 +1,83 @@ +installer = new CraftInstaller(); + } + + /** + * @param string $packageName + * @param string $expectedName + * + * @covers ::inflectPackageVars + * + * @dataProvider provideExpectedInflectionResults + */ + final public function testInflectPackageVars($packageName, $expectedName) + { + $installer = $this->installer; + + $vars = array('name' => $packageName); + $expected = array('name' => $expectedName); + + $actual = $installer->inflectPackageVars($vars); + + $this->assertEquals($actual, $expected); + } + + /** + * Provides various names for packages and the expected result after inflection + * + * @return array + */ + final public function provideExpectedInflectionResults() + { + return array( + // lowercase + array('foo', 'foo'), + array('craftfoo', 'craftfoo'), + array('fooplugin', 'fooplugin'), + array('craftfooplugin', 'craftfooplugin'), + // lowercase - dash + array('craft-foo', 'foo'), + array('foo-plugin', 'foo'), + array('craft-foo-plugin', 'foo'), + // lowercase - underscore + array('craft_foo', 'craft_foo'), + array('foo_plugin', 'foo_plugin'), + array('craft_foo_plugin', 'craft_foo_plugin'), + // CamelCase + array('Foo', 'Foo'), + array('CraftFoo', 'CraftFoo'), + array('FooPlugin', 'FooPlugin'), + array('CraftFooPlugin', 'CraftFooPlugin'), + // CamelCase - Dash + array('Craft-Foo', 'Foo'), + array('Foo-Plugin', 'Foo'), + array('Craft-Foo-Plugin', 'Foo'), + // CamelCase - underscore + array('Craft_Foo', 'Craft_Foo'), + array('Foo_Plugin', 'Foo_Plugin'), + array('Craft_Foo_Plugin', 'Craft_Foo_Plugin'), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php new file mode 100644 index 000000000..fc1d67176 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/DokuWikiInstallerTest.php @@ -0,0 +1,90 @@ +installer = new DokuWikiInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), + array('name' => $expected, 'type'=>$type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'dokuwiki-plugin', + 'dokuwiki-test-plugin', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test-plugin', + 'test', + ), + array( + 'dokuwiki-plugin', + 'dokuwiki_test', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test', + 'test', + ), + array( + 'dokuwiki-plugin', + 'test-template', + 'test-template', + ), + array( + 'dokuwiki-template', + 'dokuwiki-test-template', + 'test', + ), + array( + 'dokuwiki-template', + 'test-template', + 'test', + ), + array( + 'dokuwiki-template', + 'dokuwiki_test', + 'test', + ), + array( + 'dokuwiki-template', + 'test', + 'test', + ), + array( + 'dokuwiki-template', + 'test-plugin', + 'test-plugin', + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php new file mode 100644 index 000000000..b757799b4 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/GravInstallerTest.php @@ -0,0 +1,63 @@ +composer = new Composer(); + } + + public function testInflectPackageVars() + { + $package = $this->getPackage('vendor/name', '0.0.0'); + $installer = new GravInstaller($package, $this->composer); + $packageVars = $this->getPackageVars($package); + + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => 'test'))); + $this->assertEquals('test', $result['name']); + + foreach ($installer->getLocations() as $name => $location) { + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-$name"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "$name-test-test"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "test-test-$name"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-$name"))); + $this->assertEquals('test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-$name-test-test"))); + $this->assertEquals('test-test', $result['name']); + $result = $installer->inflectPackageVars(array_merge($packageVars, array('name' => "grav-test-test-$name"))); + $this->assertEquals('test-test', $result['name']); + } + } + + /** + * @param $package \Composer\Package\PackageInterface + */ + public function getPackageVars($package) + { + $type = $package->getType(); + + $prettyName = $package->getPrettyName(); + if (strpos($prettyName, '/') !== false) { + list($vendor, $name) = explode('/', $prettyName); + } else { + $vendor = ''; + $name = $prettyName; + } + + return compact('name', 'vendor', 'type'); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php new file mode 100644 index 000000000..75b402b64 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/InstallerTest.php @@ -0,0 +1,552 @@ +fs = new Filesystem; + + $this->composer = new Composer(); + $this->config = new Config(); + $this->composer->setConfig($this->config); + + $this->vendorDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-vendor'; + $this->ensureDirectoryExistsAndClear($this->vendorDir); + + $this->binDir = realpath(sys_get_temp_dir()) . DIRECTORY_SEPARATOR . 'baton-test-bin'; + $this->ensureDirectoryExistsAndClear($this->binDir); + + $this->config->merge(array( + 'config' => array( + 'vendor-dir' => $this->vendorDir, + 'bin-dir' => $this->binDir, + ), + )); + + $this->dm = $this->getMockBuilder('Composer\Downloader\DownloadManager') + ->disableOriginalConstructor() + ->getMock(); + $this->composer->setDownloadManager($this->dm); + + $this->repository = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); + $this->io = $this->getMock('Composer\IO\IOInterface'); + } + + /** + * tearDown + * + * @return void + */ + public function tearDown() + { + $this->fs->removeDirectory($this->vendorDir); + $this->fs->removeDirectory($this->binDir); + } + + /** + * testSupports + * + * @return void + * + * @dataProvider dataForTestSupport + */ + public function testSupports($type, $expected) + { + $installer = new Installer($this->io, $this->composer); + $this->assertSame($expected, $installer->supports($type), sprintf('Failed to show support for %s', $type)); + } + + /** + * dataForTestSupport + */ + public function dataForTestSupport() + { + return array( + array('agl-module', true), + array('aimeos-extension', true), + array('annotatecms-module', true), + array('annotatecms-component', true), + array('annotatecms-service', true), + array('attogram-module', true), + array('bitrix-module', true), + array('bitrix-component', true), + array('bitrix-theme', true), + array('bonefish-package', true), + array('cakephp', false), + array('cakephp-', false), + array('cakephp-app', false), + array('cakephp-plugin', true), + array('chef-cookbook', true), + array('chef-role', true), + array('cockpit-module', true), + array('codeigniter-app', false), + array('codeigniter-library', true), + array('codeigniter-third-party', true), + array('codeigniter-module', true), + array('concrete5-block', true), + array('concrete5-package', true), + array('concrete5-theme', true), + array('concrete5-core', true), + array('concrete5-update', true), + array('craft-plugin', true), + array('croogo-plugin', true), + array('croogo-theme', true), + array('decibel-app', true), + array('dokuwiki-plugin', true), + array('dokuwiki-template', true), + array('drupal-module', true), + array('dolibarr-module', true), + array('ee3-theme', true), + array('ee3-addon', true), + array('ee2-theme', true), + array('ee2-addon', true), + array('elgg-plugin', true), + array('eliasis-component', true), + array('eliasis-module', true), + array('eliasis-plugin', true), + array('eliasis-template', true), + array('ezplatform-assets', true), + array('ezplatform-meta-assets', true), + array('fuel-module', true), + array('fuel-package', true), + array('fuel-theme', true), + array('fuelphp-component', true), + array('hurad-plugin', true), + array('hurad-theme', true), + array('imagecms-template', true), + array('imagecms-module', true), + array('imagecms-library', true), + array('itop-extension', true), + array('joomla-library', true), + array('kanboard-plugin', true), + array('kirby-plugin', true), + array('kohana-module', true), + array('lms-plugin', true), + array('lms-template', true), + array('lms-document-template', true), + array('lms-userpanel-module', true), + array('laravel-library', true), + array('lavalite-theme', true), + array('lavalite-package', true), + array('lithium-library', true), + array('magento-library', true), + array('majima-plugin', true), + array('mako-package', true), + array('modx-extra', true), + array('modxevo-snippet', true), + array('modxevo-plugin', true), + array('modxevo-module', true), + array('modxevo-template', true), + array('modxevo-lib', true), + array('mediawiki-extension', true), + array('mediawiki-skin', true), + array('microweber-module', true), + array('modulework-module', true), + array('moodle-mod', true), + array('october-module', true), + array('october-plugin', true), + array('piwik-plugin', true), + array('pxcms-module', true), + array('pxcms-theme', true), + array('phpbb-extension', true), + array('pimcore-plugin', true), + array('plentymarkets-plugin', true), + array('ppi-module', true), + array('prestashop-module', true), + array('prestashop-theme', true), + array('puppet-module', true), + array('porto-container', true), + array('radphp-bundle', true), + array('redaxo-addon', true), + array('redaxo-bestyle-plugin', true), + array('reindex-theme', true), + array('reindex-plugin', true), + array('roundcube-plugin', true), + array('shopware-backend-plugin', true), + array('shopware-core-plugin', true), + array('shopware-frontend-plugin', true), + array('shopware-theme', true), + array('shopware-plugin', true), + array('shopware-frontend-theme', true), + array('silverstripe-module', true), + array('silverstripe-theme', true), + array('smf-module', true), + array('smf-theme', true), + array('sydes-module', true), + array('sydes-theme', true), + array('symfony1-plugin', true), + array('thelia-module', true), + array('thelia-frontoffice-template', true), + array('thelia-backoffice-template', true), + array('thelia-email-template', true), + array('tusk-task', true), + array('tusk-asset', true), + array('typo3-flow-plugin', true), + array('typo3-cms-extension', true), + array('userfrosting-sprinkle', true), + array('vanilla-plugin', true), + array('vanilla-theme', true), + array('whmcs-gateway', true), + array('wolfcms-plugin', true), + array('wordpress-plugin', true), + array('wordpress-core', false), + array('yawik-module', true), + array('zend-library', true), + array('zikula-module', true), + array('zikula-theme', true), + array('kodicms-plugin', true), + array('kodicms-media', true), + array('phifty-bundle', true), + array('phifty-library', true), + array('phifty-framework', true), + array('osclass-plugin', true), + array('osclass-theme', true), + array('osclass-language', true), + ); + } + + /** + * testInstallPath + * + * @dataProvider dataForTestInstallPath + */ + public function testInstallPath($type, $path, $name, $version = '1.0.0') + { + $installer = new Installer($this->io, $this->composer); + $package = new Package($name, $version, $version); + + $package->setType($type); + $result = $installer->getInstallPath($package); + $this->assertEquals($path, $result); + } + + /** + * dataFormTestInstallPath + */ + public function dataForTestInstallPath() + { + return array( + array('agl-module', 'More/MyTestPackage/', 'agl/my_test-package'), + array('aimeos-extension', 'ext/ai-test/', 'author/ai-test'), + array('annotatecms-module', 'addons/modules/my_module/', 'vysinsky/my_module'), + array('annotatecms-component', 'addons/components/my_component/', 'vysinsky/my_component'), + array('annotatecms-service', 'addons/services/my_service/', 'vysinsky/my_service'), + array('attogram-module', 'modules/my_module/', 'author/my_module'), + array('bitrix-module', 'bitrix/modules/my_module/', 'author/my_module'), + array('bitrix-component', 'bitrix/components/my_component/', 'author/my_component'), + array('bitrix-theme', 'bitrix/templates/my_theme/', 'author/my_theme'), + array('bitrix-d7-module', 'bitrix/modules/author.my_module/', 'author/my_module'), + array('bitrix-d7-component', 'bitrix/components/author/my_component/', 'author/my_component'), + array('bitrix-d7-template', 'bitrix/templates/author_my_template/', 'author/my_template'), + array('bonefish-package', 'Packages/bonefish/package/', 'bonefish/package'), + array('cakephp-plugin', 'Plugin/Ftp/', 'shama/ftp'), + array('chef-cookbook', 'Chef/mre/my_cookbook/', 'mre/my_cookbook'), + array('chef-role', 'Chef/roles/my_role/', 'mre/my_role'), + array('cockpit-module', 'cockpit/modules/addons/My_module/', 'piotr-cz/cockpit-my_module'), + array('codeigniter-library', 'application/libraries/my_package/', 'shama/my_package'), + array('codeigniter-module', 'application/modules/my_package/', 'shama/my_package'), + array('concrete5-block', 'application/blocks/concrete5_block/', 'remo/concrete5_block'), + array('concrete5-package', 'packages/concrete5_package/', 'remo/concrete5_package'), + array('concrete5-theme', 'application/themes/concrete5_theme/', 'remo/concrete5_theme'), + array('concrete5-core', 'concrete/', 'concrete5/core'), + array('concrete5-update', 'updates/concrete5/', 'concrete5/concrete5'), + array('craft-plugin', 'craft/plugins/my_plugin/', 'mdcpepper/my_plugin'), + array('croogo-plugin', 'Plugin/Sitemaps/', 'fahad19/sitemaps'), + array('croogo-theme', 'View/Themed/Readable/', 'rchavik/readable'), + array('decibel-app', 'app/someapp/', 'author/someapp'), + array('dokuwiki-plugin', 'lib/plugins/someplugin/', 'author/someplugin'), + array('dokuwiki-template', 'lib/tpl/sometemplate/', 'author/sometemplate'), + array('dolibarr-module', 'htdocs/custom/my_module/', 'shama/my_module'), + array('drupal-module', 'modules/my_module/', 'shama/my_module'), + array('drupal-theme', 'themes/my_module/', 'shama/my_module'), + array('drupal-profile', 'profiles/my_module/', 'shama/my_module'), + array('drupal-drush', 'drush/my_module/', 'shama/my_module'), + array('elgg-plugin', 'mod/sample_plugin/', 'test/sample_plugin'), + array('eliasis-component', 'components/my_component/', 'shama/my_component'), + array('eliasis-module', 'modules/my_module/', 'shama/my_module'), + array('eliasis-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), + array('eliasis-template', 'templates/my_template/', 'shama/my_template'), + array('ee3-addon', 'system/user/addons/ee_theme/', 'author/ee_theme'), + array('ee3-theme', 'themes/user/ee_package/', 'author/ee_package'), + array('ee2-addon', 'system/expressionengine/third_party/ee_theme/', 'author/ee_theme'), + array('ee2-theme', 'themes/third_party/ee_package/', 'author/ee_package'), + array('ezplatform-assets', 'web/assets/ezplatform/ezplatform_comp/', 'author/ezplatform_comp'), + array('ezplatform-meta-assets', 'web/assets/ezplatform/', 'author/ezplatform_comp'), + array('fuel-module', 'fuel/app/modules/module/', 'fuel/module'), + array('fuel-package', 'fuel/packages/orm/', 'fuel/orm'), + array('fuel-theme', 'fuel/app/themes/theme/', 'fuel/theme'), + array('fuelphp-component', 'components/demo/', 'fuelphp/demo'), + array('hurad-plugin', 'plugins/Akismet/', 'atkrad/akismet'), + array('hurad-theme', 'plugins/Hurad2013/', 'atkrad/Hurad2013'), + array('imagecms-template', 'templates/my_template/', 'shama/my_template'), + array('imagecms-module', 'application/modules/my_module/', 'shama/my_module'), + array('imagecms-library', 'application/libraries/my_library/', 'shama/my_library'), + array('itop-extension', 'extensions/my_extension/', 'shama/my_extension'), + array('joomla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), + array('kanboard-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), + array('kirby-plugin', 'site/plugins/my_plugin/', 'shama/my_plugin'), + array('kohana-module', 'modules/my_package/', 'shama/my_package'), + array('lms-plugin', 'plugins/MyPackage/', 'shama/MyPackage'), + array('lms-plugin', 'plugins/MyPackage/', 'shama/my_package'), + array('lms-template', 'templates/MyPackage/', 'shama/MyPackage'), + array('lms-template', 'templates/MyPackage/', 'shama/my_package'), + array('lms-document-template', 'documents/templates/MyPackage/', 'shama/MyPackage'), + array('lms-document-template', 'documents/templates/MyPackage/', 'shama/my_package'), + array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/MyPackage'), + array('lms-userpanel-module', 'userpanel/modules/MyPackage/', 'shama/my_package'), + array('laravel-library', 'libraries/my_package/', 'shama/my_package'), + array('lavalite-theme', 'public/themes/my_theme/', 'shama/my_theme'), + array('lavalite-package', 'packages/my_group/my_package/', 'my_group/my_package'), + array('lithium-library', 'libraries/li3_test/', 'user/li3_test'), + array('magento-library', 'lib/foo/', 'test/foo'), + array('majima-plugin', 'plugins/MyPlugin/', 'shama/my-plugin'), + array('modx-extra', 'core/packages/extra/', 'vendor/extra'), + array('modxevo-snippet', 'assets/snippets/my_snippet/', 'shama/my_snippet'), + array('modxevo-plugin', 'assets/plugins/my_plugin/', 'shama/my_plugin'), + array('modxevo-module', 'assets/modules/my_module/', 'shama/my_module'), + array('modxevo-template', 'assets/templates/my_template/', 'shama/my_template'), + array('modxevo-lib', 'assets/lib/my_lib/', 'shama/my_lib'), + array('mako-package', 'app/packages/my_package/', 'shama/my_package'), + array('mediawiki-extension', 'extensions/APC/', 'author/APC'), + array('mediawiki-extension', 'extensions/APC/', 'author/APC-extension'), + array('mediawiki-extension', 'extensions/UploadWizard/', 'author/upload-wizard'), + array('mediawiki-extension', 'extensions/SyntaxHighlight_GeSHi/', 'author/syntax-highlight_GeSHi'), + array('mediawiki-skin', 'skins/someskin/', 'author/someskin-skin'), + array('mediawiki-skin', 'skins/someskin/', 'author/someskin'), + array('microweber-module', 'userfiles/modules/my-thing/', 'author/my-thing-module'), + array('modulework-module', 'modules/my_package/', 'shama/my_package'), + array('moodle-mod', 'mod/my_package/', 'shama/my_package'), + array('october-module', 'modules/my_plugin/', 'shama/my_plugin'), + array('october-plugin', 'plugins/shama/my_plugin/', 'shama/my_plugin'), + array('october-theme', 'themes/my_theme/', 'shama/my_theme'), + array('piwik-plugin', 'plugins/VisitSummary/', 'shama/visit-summary'), + array('prestashop-module', 'modules/a-module/', 'vendor/a-module'), + array('prestashop-theme', 'themes/a-theme/', 'vendor/a-theme'), + array('pxcms-module', 'app/Modules/Foo/', 'vendor/module-foo'), + array('pxcms-module', 'app/Modules/Foo/', 'vendor/pxcms-foo'), + array('pxcms-theme', 'themes/Foo/', 'vendor/theme-foo'), + array('pxcms-theme', 'themes/Foo/', 'vendor/pxcms-foo'), + array('phpbb-extension', 'ext/test/foo/', 'test/foo'), + array('phpbb-style', 'styles/foo/', 'test/foo'), + array('phpbb-language', 'language/foo/', 'test/foo'), + array('pimcore-plugin', 'plugins/MyPlugin/', 'ubikz/my_plugin'), + array('plentymarkets-plugin', 'HelloWorld/', 'plugin-hello-world'), + array('ppi-module', 'modules/foo/', 'test/foo'), + array('puppet-module', 'modules/puppet-name/', 'puppet/puppet-name'), + array('porto-container', 'app/Containers/container-name/', 'test/container-name'), + array('radphp-bundle', 'src/Migration/', 'atkrad/migration'), + array('redaxo-addon', 'redaxo/include/addons/my_plugin/', 'shama/my_plugin'), + array('redaxo-bestyle-plugin', 'redaxo/include/addons/be_style/plugins/my_plugin/', 'shama/my_plugin'), + array('reindex-theme', 'themes/my_module/', 'author/my_module'), + array('reindex-plugin', 'plugins/my_module/', 'author/my_module'), + array('roundcube-plugin', 'plugins/base/', 'test/base'), + array('roundcube-plugin', 'plugins/replace_dash/', 'test/replace-dash'), + array('shopware-backend-plugin', 'engine/Shopware/Plugins/Local/Backend/ShamaMyBackendPlugin/', 'shama/my-backend-plugin'), + array('shopware-core-plugin', 'engine/Shopware/Plugins/Local/Core/ShamaMyCorePlugin/', 'shama/my-core-plugin'), + array('shopware-frontend-plugin', 'engine/Shopware/Plugins/Local/Frontend/ShamaMyFrontendPlugin/', 'shama/my-frontend-plugin'), + array('shopware-theme', 'templates/my_theme/', 'shama/my-theme'), + array('shopware-frontend-theme', 'themes/Frontend/ShamaMyFrontendTheme/', 'shama/my-frontend-theme'), + array('shopware-plugin', 'custom/plugins/ShamaMyPlugin/', 'shama/my-plugin'), + array('silverstripe-module', 'my_module/', 'shama/my_module'), + array('silverstripe-module', 'sapphire/', 'silverstripe/framework', '2.4.0'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', '3.0.0-rc1'), + array('silverstripe-module', 'framework/', 'silverstripe/framework', 'my/branch'), + array('silverstripe-theme', 'themes/my_theme/', 'shama/my_theme'), + array('smf-module', 'Sources/my_module/', 'shama/my_module'), + array('smf-theme', 'Themes/my_theme/', 'shama/my_theme'), + array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sfShamaPlugin'), + array('symfony1-plugin', 'plugins/sfShamaPlugin/', 'shama/sf-shama-plugin'), + array('thelia-module', 'local/modules/my_module/', 'shama/my_module'), + array('thelia-frontoffice-template', 'templates/frontOffice/my_template_fo/', 'shama/my_template_fo'), + array('thelia-backoffice-template', 'templates/backOffice/my_template_bo/', 'shama/my_template_bo'), + array('thelia-email-template', 'templates/email/my_template_email/', 'shama/my_template_email'), + array('tusk-task', '.tusk/tasks/my_task/', 'shama/my_task'), + array('typo3-flow-package', 'Packages/Application/my_package/', 'shama/my_package'), + array('typo3-flow-build', 'Build/my_package/', 'shama/my_package'), + array('typo3-cms-extension', 'typo3conf/ext/my_extension/', 'shama/my_extension'), + array('userfrosting-sprinkle', 'app/sprinkles/my_sprinkle/', 'shama/my_sprinkle'), + array('vanilla-plugin', 'plugins/my_plugin/', 'shama/my_plugin'), + array('vanilla-theme', 'themes/my_theme/', 'shama/my_theme'), + array('whmcs-gateway', 'modules/gateways/gateway_name/', 'vendor/gateway_name'), + array('wolfcms-plugin', 'wolf/plugins/my_plugin/', 'shama/my_plugin'), + array('wordpress-plugin', 'wp-content/plugins/my_plugin/', 'shama/my_plugin'), + array('wordpress-muplugin', 'wp-content/mu-plugins/my_plugin/', 'shama/my_plugin'), + array('zend-extra', 'extras/library/zend_test/', 'shama/zend_test'), + array('zikula-module', 'modules/my-test_module/', 'my/test_module'), + array('zikula-theme', 'themes/my-test_theme/', 'my/test_theme'), + array('kodicms-media', 'cms/media/vendor/my_media/', 'shama/my_media'), + array('kodicms-plugin', 'cms/plugins/my_plugin/', 'shama/my_plugin'), + array('phifty-bundle', 'bundles/core/', 'shama/core'), + array('phifty-library', 'libraries/my-lib/', 'shama/my-lib'), + array('phifty-framework', 'frameworks/my-framework/', 'shama/my-framework'), + array('yawik-module', 'module/MyModule/', 'shama/my_module'), + array('osclass-plugin', 'oc-content/plugins/sample_plugin/', 'test/sample_plugin'), + array('osclass-theme', 'oc-content/themes/sample_theme/', 'test/sample_theme'), + array('osclass-language', 'oc-content/languages/sample_lang/', 'test/sample_lang'), + ); + } + + /** + * testGetCakePHPInstallPathException + * + * @return void + * + * @expectedException \InvalidArgumentException + */ + public function testGetCakePHPInstallPathException() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/ftp', '1.0.0', '1.0.0'); + + $package->setType('cakephp-whoops'); + $result = $installer->getInstallPath($package); + } + + /** + * testCustomInstallPath + */ + public function testCustomInstallPath() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/ftp', '1.0.0', '1.0.0'); + $package->setType('cakephp-plugin'); + $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); + $this->composer->setPackage($consumerPackage); + $consumerPackage->setExtra(array( + 'installer-paths' => array( + 'my/custom/path/{$name}/' => array( + 'shama/ftp', + 'foo/bar', + ), + ), + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('my/custom/path/Ftp/', $result); + } + + /** + * testCustomInstallerName + */ + public function testCustomInstallerName() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('shama/cakephp-ftp-plugin', '1.0.0', '1.0.0'); + $package->setType('cakephp-plugin'); + $package->setExtra(array( + 'installer-name' => 'FTP', + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('Plugin/FTP/', $result); + } + + /** + * testCustomTypePath + */ + public function testCustomTypePath() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('slbmeh/my_plugin', '1.0.0', '1.0.0'); + $package->setType('wordpress-plugin'); + $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); + $this->composer->setPackage($consumerPackage); + $consumerPackage->setExtra(array( + 'installer-paths' => array( + 'my/custom/path/{$name}/' => array( + 'type:wordpress-plugin' + ), + ), + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('my/custom/path/my_plugin/', $result); + } + + /** + * testVendorPath + */ + public function testVendorPath() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('penyaskito/my_module', '1.0.0', '1.0.0'); + $package->setType('drupal-module'); + $consumerPackage = new RootPackage('drupal/drupal', '1.0.0', '1.0.0'); + $this->composer->setPackage($consumerPackage); + $consumerPackage->setExtra(array( + 'installer-paths' => array( + 'modules/custom/{$name}/' => array( + 'vendor:penyaskito' + ), + ), + )); + $result = $installer->getInstallPath($package); + $this->assertEquals('modules/custom/my_module/', $result); + } + + /** + * testNoVendorName + */ + public function testNoVendorName() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('sfPhpunitPlugin', '1.0.0', '1.0.0'); + + $package->setType('symfony1-plugin'); + $result = $installer->getInstallPath($package); + $this->assertEquals('plugins/sfPhpunitPlugin/', $result); + } + + /** + * testTypo3Inflection + */ + public function testTypo3Inflection() + { + $installer = new Installer($this->io, $this->composer); + $package = new Package('typo3/fluid', '1.0.0', '1.0.0'); + + $package->setAutoload(array( + 'psr-0' => array( + 'TYPO3\\Fluid' => 'Classes', + ), + )); + + $package->setType('typo3-flow-package'); + $result = $installer->getInstallPath($package); + $this->assertEquals('Packages/Application/TYPO3.Fluid/', $result); + } + + public function testUninstallAndDeletePackageFromLocalRepo() + { + $package = new Package('foo', '1.0.0', '1.0.0'); + + $installer = $this->getMock('Composer\Installers\Installer', array('getInstallPath'), array($this->io, $this->composer)); + $installer->expects($this->atLeastOnce())->method('getInstallPath')->with($package)->will($this->returnValue(sys_get_temp_dir().'/foo')); + + $repo = $this->getMock('Composer\Repository\InstalledRepositoryInterface'); + $repo->expects($this->once())->method('hasPackage')->with($package)->will($this->returnValue(true)); + $repo->expects($this->once())->method('removePackage')->with($package); + + $installer->uninstall($repo, $package); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php new file mode 100644 index 000000000..1e57696f8 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MayaInstallerTest.php @@ -0,0 +1,62 @@ +installer = new MayaInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + array('name' => $expected, 'type' => $type), + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) + ); + } + + public function packageNameInflectionProvider() + { + return array( + // Should keep module name StudlyCase + array( + 'maya-module', + 'user-profile', + 'UserProfile' + ), + array( + 'maya-module', + 'maya-module', + 'Maya' + ), + array( + 'maya-module', + 'blog', + 'Blog' + ), + // tests that exactly one '-module' is cut off + array( + 'maya-module', + 'some-module-module', + 'SomeModule', + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php new file mode 100644 index 000000000..a51c0bb2e --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/MediaWikiInstallerTest.php @@ -0,0 +1,67 @@ +installer = new MediaWikiInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), + array('name' => $expected, 'type'=>$type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'mediawiki-extension', + 'sub-page-list', + 'SubPageList', + ), + array( + 'mediawiki-extension', + 'sub-page-list-extension', + 'SubPageList', + ), + array( + 'mediawiki-extension', + 'semantic-mediawiki', + 'SemanticMediawiki', + ), + // tests that exactly one '-skin' is cut off, and that skins do not get ucwords treatment like extensions + array( + 'mediawiki-skin', + 'some-skin-skin', + 'some-skin', + ), + // tests that names without '-skin' suffix stay valid + array( + 'mediawiki-skin', + 'someotherskin', + 'someotherskin', + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php new file mode 100644 index 000000000..6e615c772 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OctoberInstallerTest.php @@ -0,0 +1,67 @@ +installer = new OctoberInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)), + array('name' => $expected, 'type' => $type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'october-plugin', + 'subpagelist', + 'subpagelist', + ), + array( + 'october-plugin', + 'subpagelist-plugin', + 'subpagelist', + ), + array( + 'october-plugin', + 'semanticoctober', + 'semanticoctober', + ), + // tests that exactly one '-theme' is cut off + array( + 'october-theme', + 'some-theme-theme', + 'some-theme', + ), + // tests that names without '-theme' suffix stay valid + array( + 'october-theme', + 'someothertheme', + 'someothertheme', + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php new file mode 100644 index 000000000..9558a6b24 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/OntoWikiInstallerTest.php @@ -0,0 +1,84 @@ +installer = new OntoWikiInstaller(); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + $this->installer->inflectPackageVars(array('name' => $name, 'type'=>$type)), + array('name' => $expected, 'type'=>$type) + ); + } + + public function packageNameInflectionProvider() + { + return array( + array( + 'ontowiki-extension', + 'CSVImport.ontowiki', + 'csvimport', + ), + array( + 'ontowiki-extension', + 'csvimport', + 'csvimport', + ), + array( + 'ontowiki-extension', + 'some_ontowiki_extension', + 'some_ontowiki_extension', + ), + array( + 'ontowiki-extension', + 'some_ontowiki_extension.ontowiki', + 'some_ontowiki_extension', + ), + array( + 'ontowiki-translation', + 'de-translation.ontowiki', + 'de', + ), + array( + 'ontowiki-translation', + 'en-US-translation.ontowiki', + 'en-us', + ), + array( + 'ontowiki-translation', + 'en-US-translation', + 'en-us', + ), + array( + 'ontowiki-theme', + 'blue-theme.ontowiki', + 'blue', + ), + array( + 'ontowiki-theme', + 'blue-theme', + 'blue', + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php new file mode 100644 index 000000000..ea79374bf --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PimcoreInstallerTest.php @@ -0,0 +1,44 @@ +package = new Package('CamelCased', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'CamelCased')); + $this->assertEquals($result, array('name' => 'CamelCased')); + + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with-dash')); + $this->assertEquals($result, array('name' => 'WithDash')); + + $installer = new PimcoreInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'with_underscore')); + $this->assertEquals($result, array('name' => 'WithUnderscore')); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php new file mode 100644 index 000000000..8d9ff3f82 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/PiwikInstallerTest.php @@ -0,0 +1,63 @@ +package = new Package('VisitSummary', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + } + + /** + * testInflectPackageVars + * + * @return void + */ + public function testInflectPackageVars() + { + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'VisitSummary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'visit-summary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + + $installer = new PiwikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => 'visit_summary')); + $this->assertEquals($result, array('name' => 'VisitSummary')); + } + +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php new file mode 100644 index 000000000..e36210d5a --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SiteDirectInstallerTest.php @@ -0,0 +1,120 @@ +package = new Package('sitedirect/some_name', '1.0.9', '1.0'); + $this->installer = new SiteDirectInstaller( + $this->package, + new Composer() + ); + + } + + /** + * @dataProvider dataProvider + */ + public function testInflectPackageVars($data, $expected) + { + $result = $this->installer->inflectPackageVars($data); + $this->assertEquals($result, $expected); + } + + /** + * @dataProvider dataProvider + */ + public function testInstallPath($data, $expected) + { + $result = $this->installer->inflectPackageVars($data); + $path = $this->createPackage($data); + + // use $result to get the proper capitalization for the vendor path + $expectedPath = "modules/{$result['vendor']}/{$result['name']}/"; + $notExpectedPath = "modules/{$data['vendor']}/{$data['name']}/"; + $this->assertEquals($expectedPath, $path); + $this->assertNotEquals($notExpectedPath, $path); + } + + /** + * @param $data + * @return string + */ + private function createPackage($data) + { + $fullName = "{$data['vendor']}/{$data['name']}"; + + $package = new Package($fullName, '1.0', '1.0'); + $package->setType('sitedirect-module'); + $installer = new SiteDirectInstaller($package, new Composer()); + + $path = $installer->getInstallPath($package, 'sitedirect'); + return $path; + } + + public function dataProvider() + { + return array( + array( + 'data' => array( + 'name' => 'kernel', + 'vendor' => 'sitedirect', + 'type' => 'sitedirect-module', + ), + 'expected' => array( + 'name' => 'Kernel', + 'vendor' => 'SiteDirect', + 'type' => 'sitedirect-module', + ) + ), + array( + 'data' => array( + 'name' => 'that_guy', + 'vendor' => 'whatGuy', + 'type' => 'sitedirect-module', + ), + 'expected' => array( + 'name' => 'ThatGuy', + 'vendor' => 'whatGuy', + 'type' => 'sitedirect-module', + ) + ), + array( + 'data' => array( + 'name' => 'checkout', + 'vendor' => 'someVendor', + 'type' => 'sitedirect-plugin', + ), + 'expected' => array( + 'name' => 'Checkout', + 'vendor' => 'someVendor', + 'type' => 'sitedirect-plugin', + ) + ), + array( + 'data' => array( + 'name' => 'checkout', + 'vendor' => 'siteDirect', + 'type' => 'sitedirect-plugin', + ), + 'expected' => array( + 'name' => 'Checkout', + 'vendor' => 'SiteDirect', + 'type' => 'sitedirect-plugin', + ) + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php new file mode 100644 index 000000000..f1d120e5d --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/SyDESInstallerTest.php @@ -0,0 +1,82 @@ +installer = new SyDESInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + array('name' => $expected, 'type' => $type), + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) + ); + } + + public function packageNameInflectionProvider() + { + return array( + // modules + array( + 'sydes-module', + 'name', + 'Name' + ), + array( + 'sydes-module', + 'sample-name', + 'SampleName' + ), + array( + 'sydes-module', + 'sydes-name', + 'Name' + ), + array( + 'sydes-module', + 'sample-name-module', + 'SampleName', + ), + array( + 'sydes-module', + 'sydes-sample-name-module', + 'SampleName' + ), + // themes + array( + 'sydes-theme', + 'some-theme-theme', + 'some-theme', + ), + array( + 'sydes-theme', + 'sydes-sometheme', + 'sometheme', + ), + array( + 'sydes-theme', + 'Sample-Name', + 'sample-name' + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php new file mode 100644 index 000000000..0e3e7319b --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/TestCase.php @@ -0,0 +1,65 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Installers\Test; + +use Composer\Package\Version\VersionParser; +use Composer\Package\Package; +use Composer\Package\AliasPackage; +use Composer\Package\LinkConstraint\VersionConstraint; +use Composer\Util\Filesystem; +use PHPUnit\Framework\TestCase as BaseTestCase; + +abstract class TestCase extends BaseTestCase +{ + private static $parser; + + protected static function getVersionParser() + { + if (!self::$parser) { + self::$parser = new VersionParser(); + } + + return self::$parser; + } + + protected function getVersionConstraint($operator, $version) + { + return new VersionConstraint( + $operator, + self::getVersionParser()->normalize($version) + ); + } + + protected function getPackage($name, $version) + { + $normVersion = self::getVersionParser()->normalize($version); + + return new Package($name, $normVersion, $version); + } + + protected function getAliasPackage($package, $version) + { + $normVersion = self::getVersionParser()->normalize($version); + + return new AliasPackage($package, $normVersion, $version); + } + + protected function ensureDirectoryExistsAndClear($directory) + { + $fs = new Filesystem(); + if (is_dir($directory)) { + $fs->removeDirectory($directory); + } + mkdir($directory, 0777, true); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php new file mode 100644 index 000000000..1a91588db --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/VgmcpInstallerTest.php @@ -0,0 +1,80 @@ +installer = new VgmcpInstaller( + new Package('NyanCat', '4.2', '4.2'), + new Composer() + ); + } + + /** + * @dataProvider packageNameInflectionProvider + */ + public function testInflectPackageVars($type, $name, $expected) + { + $this->assertEquals( + array('name' => $expected, 'type' => $type), + $this->installer->inflectPackageVars(array('name' => $name, 'type' => $type)) + ); + } + + public function packageNameInflectionProvider() + { + return array( + // Should keep bundle name StudlyCase + array( + 'vgmcp-bundle', + 'user-profile', + 'UserProfile' + ), + array( + 'vgmcp-bundle', + 'vgmcp-bundle', + 'Vgmcp' + ), + array( + 'vgmcp-bundle', + 'blog', + 'Blog' + ), + // tests that exactly one '-bundle' is cut off + array( + 'vgmcp-bundle', + 'some-bundle-bundle', + 'SomeBundle', + ), + // tests that exactly one '-theme' is cut off + array( + 'vgmcp-theme', + 'some-theme-theme', + 'SomeTheme', + ), + // tests that names without '-theme' suffix stay valid + array( + 'vgmcp-theme', + 'someothertheme', + 'Someothertheme', + ), + // Should keep theme name StudlyCase + array( + 'vgmcp-theme', + 'adminlte-advanced', + 'AdminlteAdvanced' + ), + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php new file mode 100644 index 000000000..d8d35ff24 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/Composer/Installers/Test/YawikInstallerTest.php @@ -0,0 +1,64 @@ +package = new Package('YawikCompanyRegistration', '1.0', '1.0'); + $this->io = $this->getMock('Composer\IO\PackageInterface'); + $this->composer = new Composer(); + } + + /** + * testInflectPackageVars + * + * @dataProvider packageNameProvider + * @return void + */ + public function testInflectPackageVars($input) + { + $installer = new YawikInstaller($this->package, $this->composer); + $result = $installer->inflectPackageVars(array('name' => $input)); + $this->assertEquals($result, array('name' => 'YawikCompanyRegistration')); + } + + public function packageNameProvider() + { + return array( + array('yawik-company-registration'), + array('yawik_company_registration'), + array('YawikCompanyRegistration') + ); + } +} diff --git a/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/bootstrap.php b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/bootstrap.php new file mode 100644 index 000000000..30c8fdc67 --- /dev/null +++ b/forked-plugins/bp-rbe-inbound-forum-attachments/vendor/composer/installers/tests/bootstrap.php @@ -0,0 +1,4 @@ +add('Composer\Installers\Test', __DIR__);