diff --git a/CONTRIBUTING.md b/.github/CONTRIBUTING.md similarity index 75% rename from CONTRIBUTING.md rename to .github/CONTRIBUTING.md index 9e5f665..42a2d39 100644 --- a/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -29,19 +29,12 @@ If you find any new bugs, or want to raise any type of support issue, please use ## Release Procedure -This is the procedure and checklist for creating a new package. +This is the procedure and checklist for creating a new package: -* Update the version number in `build.ini`. -* Run `phing set-version`. -* Pun `phing` to make the new package for the version. -* Run `phing tag`. -* Push the commits and tags up to Github. -* Go to the releases page on Github. -* Click on the new tag. - - Click the `Edit Tag` button. - - Fill in the title and description for the release. - - Attach the zip-file for the package to the release. Wait for the file to complete uploading! - - Click the `Publish Release` button. +* Update the version number in `jorobo.ini` +* Modify `jorobo.ini`, add your GitHub token and add ` Release` after `Package` +* Run `robo build` to make the new package and auto-upload and release it on GitHub. +* Go to the releases page on GitHub, review the Changelog and change the status from Pre-Release to Stable. * Create a new `` tag in the `manifest.xml` file. - Change the `` tag to the new version. - Change the `` tag to match the URL of the new release. diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md new file mode 100644 index 0000000..722c66c --- /dev/null +++ b/.github/ISSUE_TEMPLATE.md @@ -0,0 +1,18 @@ +#### Steps to reproduce the issue + + + +#### Expected result + + + +#### Actual result + + + +#### System information (as much as possible) + + + +#### Additional comments + diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..2434a62 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,5 @@ +Pull Request for Issue # . + +#### Summary of Changes + +#### Testing Instructions diff --git a/.travis.yml b/.travis.yml index 34b0c3e..065973b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,29 +1,34 @@ language: php -php: -- 5.5 -- 5.6 -addons: - firefox: "44.0.2" + +env: + global: + - RUN_PHPCS="no" + matrix: - allow_failures: - - php: 5.6 + fast_finish: true + include: + - php: 5.5 + - php: 5.6 + env: RUN_PHPCS="yes" + - php: 7.0 + sudo: true + addons: + firefox: "47.0.1" + allow_failures: + - php: 7.0 + before_script: - sudo apt-get update -qq -- sudo apt-get install -y --force-yes apache2 libapache2-mod-fastcgi php5-curl php5-mysql php5-intl php5-gd > /dev/null +- sudo apt-get install -y --force-yes apache2 libapache2-mod-fastcgi > /dev/null - sudo mkdir $(pwd)/.run -- sudo cp ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf.default ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,listen = 127.0.0.1:9000,listen = /tmp/php5-fpm.sock,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,;listen.owner = nobody,listen.owner = $USER,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,;listen.group = nobody,listen.group = $USER,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,;listen.mode = 0660,listen.mode = 0666,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,user = nobody,;user = $USER,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- sudo sed -e "s,group = nobody,;group = $USER,g" --in-place ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf -- cat ~/.phpenv/versions/$(phpenv version-name)/etc/php-fpm.conf +- chmod a+x tests/travis-php-fpm.sh +- sudo ./tests/travis-php-fpm.sh $USER $(phpenv version-name) - sudo a2enmod rewrite actions fastcgi alias - echo "cgi.fix_pathinfo = 1" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini - ~/.phpenv/versions/$(phpenv version-name)/sbin/php-fpm - sudo cp -f tests/travis-ci-apache.conf /etc/apache2/sites-available/default - sudo sed -e "s?%TRAVIS_BUILD_DIR%?$(pwd)?g" --in-place /etc/apache2/sites-available/default +- sudo sed -e "s?%PHPVERSION%?${TRAVIS_PHP_VERSION:0:1}?g" --in-place /etc/apache2/sites-available/default - git submodule update --init --recursive - sudo service apache2 restart # Xvfb @@ -41,5 +46,8 @@ script: # Build - mv jorobo.dist.ini jorobo.ini - vendor/bin/robo build +# System tests (Codeception) - mv tests/acceptance.suite.dist.yml tests/acceptance.suite.yml - vendor/bin/robo run:tests --use-htaccess +# Run phpcs on PHP 5.6 against weblinks source +- if [[ $RUN_PHPCS == "yes" ]]; then vendor/bin/phpcs --report=full --extensions=php -p --standard=tests/joomla-cms3/build/phpcs/Joomla ./src; fi diff --git a/README.md b/README.md index 94d19a2..770df6c 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,20 @@ This repo is meant to hold the decoupled com_weblinks component and related code. +How to test a PR with the [Patch Tester Component](https://github.com/joomla-extensions/patchtester/releases/latest) +============ + +Easily apply changes from a pull requests against this repo: +Install the last release of [com_weblinks](https://github.com/joomla-extensions/weblinks/releases/latest) into your Joomla. +Install the last release of [com_patchtester](https://github.com/joomla-extensions/patchtester/releases/latest) into your Joomla (weblinks is supported since Version 3.0.0 Alpha 2). +Log into your site's administrator section, go to the Patch Tester Component Options (Components -> Patch Tester -> Options) +Switch the `GitHub Repository` to `Joomla Weblinks Package` +Click `Save & Close` and hit the `Fetch Data` Button to the the lastest pull requests +Click `Apply Patch` to apply the proposed changes from the pull request. +Click `Revert Patch` to revert an applied patch. + +You can read more about the Patch Tester extension on the [Joomla! Documentation Wiki](https://docs.joomla.org/Component_Patchtester_for_Testers). + # Building ```bash diff --git a/RoboFile.php b/RoboFile.php index dd9a76d..c92ada8 100644 --- a/RoboFile.php +++ b/RoboFile.php @@ -66,9 +66,17 @@ class RoboFile extends \Robo\Tasks { if ($this->isWindows()) { - return '.exe'; + // check wehter git.exe or git as command should be used, + // as on window both is possible + if(!$this->_exec('git.exe --version')->getMessage()) + { + return ''; + } + else + { + return '.exe'; + } } - return ''; } diff --git a/composer.json b/composer.json index 23d219d..39ce8aa 100644 --- a/composer.json +++ b/composer.json @@ -11,12 +11,13 @@ "php": ">=5.3.10" }, "require-dev": { - "codeception/codeception": "~2.1", - "joomla-projects/joomla-browser": "v3.4.8.3", + "codeception/codeception": "^2.2", + "joomla-projects/joomla-browser": "v3.6.0", "codegyre/robo": "~0.5", "joomla-projects/robo": "dev-master", - "joomla-projects/selenium-server-standalone": "v2.52.0", + "joomla-projects/selenium-server-standalone": "v2.53.1", "fzaninotto/faker": "^1.5", - "joomla-projects/jorobo": "0.3" + "joomla-projects/jorobo": "0.4", + "Behat/Gherkin": "^4.4.1" } } diff --git a/composer.lock b/composer.lock index c6d8396..487f9a1 100644 --- a/composer.lock +++ b/composer.lock @@ -4,25 +4,84 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "e294320be55c99fcb917d928cb7a8d2d", - "content-hash": "8fde1d658239c211da1d63b9da0f706f", + "hash": "50cba84cd1ef0c67853e0f620724ba96", + "content-hash": "0cc9ac9fe4280ae049d92e46bec772e5", "packages": [], "packages-dev": [ { - "name": "codeception/codeception", - "version": "2.1.8", + "name": "behat/gherkin", + "version": "v4.4.1", "source": { "type": "git", - "url": "https://github.com/Codeception/Codeception.git", - "reference": "f3daa61f0f11c531b33eb3623ab0daa599d88a79" + "url": "https://github.com/Behat/Gherkin.git", + "reference": "1576b485c0f92ef6d27da9c4bbfc57ee30cf6911" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codeception/Codeception/zipball/f3daa61f0f11c531b33eb3623ab0daa599d88a79", - "reference": "f3daa61f0f11c531b33eb3623ab0daa599d88a79", + "url": "https://api.github.com/repos/Behat/Gherkin/zipball/1576b485c0f92ef6d27da9c4bbfc57ee30cf6911", + "reference": "1576b485c0f92ef6d27da9c4bbfc57ee30cf6911", "shasum": "" }, "require": { + "php": ">=5.3.1" + }, + "require-dev": { + "phpunit/phpunit": "~4.0", + "symfony/yaml": "~2.1" + }, + "suggest": { + "symfony/yaml": "If you want to parse features, represented in YAML files" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.4-dev" + } + }, + "autoload": { + "psr-0": { + "Behat\\Gherkin": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Konstantin Kudryashov", + "email": "ever.zet@gmail.com", + "homepage": "http://everzet.com" + } + ], + "description": "Gherkin DSL parser for PHP 5.3", + "homepage": "http://behat.org/", + "keywords": [ + "BDD", + "Behat", + "Cucumber", + "DSL", + "gherkin", + "parser" + ], + "time": "2015-12-30 14:47:00" + }, + { + "name": "codeception/codeception", + "version": "2.2.2", + "source": { + "type": "git", + "url": "https://github.com/Codeception/Codeception.git", + "reference": "8d80bb4ec7470e8df5de0e4c401785bc3fa1f4f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Codeception/Codeception/zipball/8d80bb4ec7470e8df5de0e4c401785bc3fa1f4f6", + "reference": "8d80bb4ec7470e8df5de0e4c401785bc3fa1f4f6", + "shasum": "" + }, + "require": { + "behat/gherkin": "~4.4.0", "ext-json": "*", "ext-mbstring": "*", "facebook/webdriver": ">=1.0.1 <2.0", @@ -30,29 +89,38 @@ "guzzlehttp/psr7": "~1.0", "php": ">=5.4.0 <8.0", "phpunit/php-code-coverage": ">=2.1.3", - "phpunit/phpunit": ">4.8.20 <6.0", - "symfony/browser-kit": ">=2.5 <3.1", - "symfony/console": ">=2.5 <3.1", - "symfony/css-selector": ">=2.5 <3.1", - "symfony/dom-crawler": ">=2.5 <3.1", - "symfony/event-dispatcher": ">=2.5 <3.1", - "symfony/finder": ">=2.5 <3.1", - "symfony/yaml": ">=2.5 <3.1" + "phpunit/phpunit": ">4.8.20 <5.5", + "sebastian/comparator": "~1.1", + "sebastian/diff": "^1.4", + "symfony/browser-kit": ">=2.7 <4.0", + "symfony/console": ">=2.7 <4.0", + "symfony/css-selector": ">=2.7 <4.0", + "symfony/dom-crawler": ">=2.7 <4.0", + "symfony/event-dispatcher": ">=2.7 <4.0", + "symfony/finder": ">=2.7 <4.0", + "symfony/yaml": ">=2.7 <4.0" }, "require-dev": { "codeception/specify": "~0.3", "facebook/php-sdk-v4": "~5.0", "flow/jsonpath": "~0.2", + "league/factory-muffin": "^3.0", + "league/factory-muffin-faker": "^1.0", + "mongodb/mongodb": "^1.0", "monolog/monolog": "~1.8", - "pda/pheanstalk": "~2.0", - "php-amqplib/php-amqplib": "~2.4" + "pda/pheanstalk": "~3.0", + "php-amqplib/php-amqplib": "~2.4", + "predis/predis": "^1.0", + "squizlabs/php_codesniffer": "~2.0" }, "suggest": { - "codeception/phpbuiltinserver": "Extension to start and stop PHP built-in web server for your tests", "codeception/specify": "BDD-style code blocks", "codeception/verify": "BDD-style assertions", - "monolog/monolog": "Log test steps", - "phpseclib/phpseclib": "Extension required to use the SFTP option in the FTP Module." + "flow/jsonpath": "For using JSONPath in REST module", + "league/factory-muffin": "For DataFactory module", + "league/factory-muffin-faker": "For Faker support in DataFactory module", + "phpseclib/phpseclib": "for SFTP option in FTP Module", + "symfony/phpunit-bridge": "For phpunit-bridge support" }, "bin": [ "codecept" @@ -87,19 +155,19 @@ "functional testing", "unit testing" ], - "time": "2016-04-15 02:56:43" + "time": "2016-06-29 00:59:28" }, { "name": "codegyre/robo", "version": "0.6.0", "source": { "type": "git", - "url": "https://github.com/Codegyre/Robo.git", + "url": "https://github.com/consolidation-org/Robo.git", "reference": "d18185f0494c854d36aa5ee0ad931ee23bbef552" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Codegyre/Robo/zipball/d18185f0494c854d36aa5ee0ad931ee23bbef552", + "url": "https://api.github.com/repos/consolidation-org/Robo/zipball/d18185f0494c854d36aa5ee0ad931ee23bbef552", "reference": "d18185f0494c854d36aa5ee0ad931ee23bbef552", "shasum": "" }, @@ -258,19 +326,20 @@ }, { "name": "facebook/webdriver", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/facebook/php-webdriver.git", - "reference": "1c98108ba3eb435b681655764de11502a0653705" + "reference": "0b889d7de7461439f8a3bbcca46e0f696cb27986" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/1c98108ba3eb435b681655764de11502a0653705", - "reference": "1c98108ba3eb435b681655764de11502a0653705", + "url": "https://api.github.com/repos/facebook/php-webdriver/zipball/0b889d7de7461439f8a3bbcca46e0f696cb27986", + "reference": "0b889d7de7461439f8a3bbcca46e0f696cb27986", "shasum": "" }, "require": { + "ext-curl": "*", "php": ">=5.3.19" }, "require-dev": { @@ -297,7 +366,7 @@ "selenium", "webdriver" ], - "time": "2015-12-31 15:58:49" + "time": "2016-06-04 00:02:34" }, { "name": "fzaninotto/faker", @@ -445,16 +514,16 @@ }, { "name": "guzzlehttp/promises", - "version": "1.1.0", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8" + "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/bb9024c526b22f3fe6ae55a561fd70653d470aa8", - "reference": "bb9024c526b22f3fe6ae55a561fd70653d470aa8", + "url": "https://api.github.com/repos/guzzle/promises/zipball/c10d860e2a9595f8883527fa0021c7da9e65f579", + "reference": "c10d860e2a9595f8883527fa0021c7da9e65f579", "shasum": "" }, "require": { @@ -492,20 +561,20 @@ "keywords": [ "promise" ], - "time": "2016-03-08 01:15:46" + "time": "2016-05-18 16:56:05" }, { "name": "guzzlehttp/psr7", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "31382fef2889136415751badebbd1cb022a4ed72" + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/31382fef2889136415751badebbd1cb022a4ed72", - "reference": "31382fef2889136415751badebbd1cb022a4ed72", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", + "reference": "5c6447c9df362e8f8093bda8f5d8873fe5c7f65b", "shasum": "" }, "require": { @@ -521,7 +590,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.4-dev" } }, "autoload": { @@ -550,7 +619,7 @@ "stream", "uri" ], - "time": "2016-04-13 19:56:01" + "time": "2016-06-24 23:00:38" }, { "name": "henrikbjorn/lurker", @@ -1216,17 +1285,59 @@ "time": "2015-08-17 06:30:58" }, { - "name": "joomla-projects/joomla-browser", - "version": "v3.4.8.3", + "name": "ircmaxell/password-compat", + "version": "v1.0.4", "source": { "type": "git", - "url": "https://github.com/joomla-projects/joomla-browser.git", - "reference": "d11139fadc2f8205b0060a4fa01d4c6f39f80533" + "url": "https://github.com/ircmaxell/password_compat.git", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joomla-projects/joomla-browser/zipball/d11139fadc2f8205b0060a4fa01d4c6f39f80533", - "reference": "d11139fadc2f8205b0060a4fa01d4c6f39f80533", + "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c", + "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c", + "shasum": "" + }, + "require-dev": { + "phpunit/phpunit": "4.*" + }, + "type": "library", + "autoload": { + "files": [ + "lib/password.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Anthony Ferrara", + "email": "ircmaxell@php.net", + "homepage": "http://blog.ircmaxell.com" + } + ], + "description": "A compatibility library for the proposed simplified password hashing algorithm: https://wiki.php.net/rfc/password_hash", + "homepage": "https://github.com/ircmaxell/password_compat", + "keywords": [ + "hashing", + "password" + ], + "time": "2014-11-20 16:49:30" + }, + { + "name": "joomla-projects/joomla-browser", + "version": "v3.6.0", + "source": { + "type": "git", + "url": "https://github.com/joomla-projects/joomla-browser.git", + "reference": "b0a583d09435d9941219fef06fcc27a6487df976" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/joomla-projects/joomla-browser/zipball/b0a583d09435d9941219fef06fcc27a6487df976", + "reference": "b0a583d09435d9941219fef06fcc27a6487df976", "shasum": "" }, "require": { @@ -1264,20 +1375,20 @@ "acceptance testing", "joomla" ], - "time": "2016-04-25 08:59:49" + "time": "2016-05-21 13:48:02" }, { "name": "joomla-projects/jorobo", - "version": "0.3.0", + "version": "0.4", "source": { "type": "git", "url": "https://github.com/joomla-projects/jorobo.git", - "reference": "9d52b9f0d8b6b22f0574e40166fd6ebee479ab56" + "reference": "6f815a48d75418023c4de5cd79a8f1eb7150ee31" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joomla-projects/jorobo/zipball/9d52b9f0d8b6b22f0574e40166fd6ebee479ab56", - "reference": "9d52b9f0d8b6b22f0574e40166fd6ebee479ab56", + "url": "https://api.github.com/repos/joomla-projects/jorobo/zipball/6f815a48d75418023c4de5cd79a8f1eb7150ee31", + "reference": "6f815a48d75418023c4de5cd79a8f1eb7150ee31", "shasum": "" }, "require": { @@ -1317,7 +1428,7 @@ } ], "description": "Tools and Tasks based on Robo.li for Joomla Extension Development and Releases", - "time": "2016-03-14 14:51:42" + "time": "2016-04-14 17:32:12" }, { "name": "joomla-projects/robo", @@ -1362,16 +1473,16 @@ }, { "name": "joomla-projects/selenium-server-standalone", - "version": "v2.52.0", + "version": "v2.53.1", "source": { "type": "git", "url": "https://github.com/joomla-projects/selenium-server-standalone.git", - "reference": "17b4bb3fd087ded32fe2d9342b8573a75f56460c" + "reference": "24bc596a89fe0f6e524c72a7950c09a4927a4020" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joomla-projects/selenium-server-standalone/zipball/17b4bb3fd087ded32fe2d9342b8573a75f56460c", - "reference": "17b4bb3fd087ded32fe2d9342b8573a75f56460c", + "url": "https://api.github.com/repos/joomla-projects/selenium-server-standalone/zipball/24bc596a89fe0f6e524c72a7950c09a4927a4020", + "reference": "24bc596a89fe0f6e524c72a7950c09a4927a4020", "shasum": "" }, "bin": [ @@ -1394,7 +1505,7 @@ "selenium", "testing" ], - "time": "2016-02-16 11:07:51" + "time": "2016-07-04 17:23:12" }, { "name": "joomla/compat", @@ -1573,22 +1684,23 @@ }, { "name": "joomla/registry", - "version": "1.5.1", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/joomla-framework/registry.git", - "reference": "b9fd1812e19619bb4722a0711b691dbfefff8ee9" + "reference": "bd3592c6f0554a72811df52aeaea98c7815f6e5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/joomla-framework/registry/zipball/b9fd1812e19619bb4722a0711b691dbfefff8ee9", - "reference": "b9fd1812e19619bb4722a0711b691dbfefff8ee9", + "url": "https://api.github.com/repos/joomla-framework/registry/zipball/bd3592c6f0554a72811df52aeaea98c7815f6e5a", + "reference": "bd3592c6f0554a72811df52aeaea98c7815f6e5a", "shasum": "" }, "require": { "joomla/compat": "~1.0", "joomla/utilities": "~1.0", - "php": ">=5.3.10|>=7.0" + "php": ">=5.3.10|>=7.0", + "symfony/polyfill-php55": "~1.0" }, "require-dev": { "joomla/test": "~1.0", @@ -1621,7 +1733,7 @@ "joomla", "registry" ], - "time": "2016-04-18 23:57:43" + "time": "2016-05-14 20:42:05" }, { "name": "joomla/string", @@ -1812,38 +1924,87 @@ "time": "2016-03-10 15:15:04" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "2.0.4", + "name": "phpdocumentor/reflection-common", + "version": "1.0", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8" + "url": "https://github.com/phpDocumentor/ReflectionCommon.git", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/d68dbdc53dc358a816f00b300704702b2eaff7b8", - "reference": "d68dbdc53dc358a816f00b300704702b2eaff7b8", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c", + "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": ">=5.5" }, "require-dev": { - "phpunit/phpunit": "~4.0" - }, - "suggest": { - "dflydev/markdown": "~1.0", - "erusev/parsedown": "~1.0" + "phpunit/phpunit": "^4.6" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "1.0.x-dev" } }, "autoload": { - "psr-0": { - "phpDocumentor": [ + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jaap van Otterdijk", + "email": "opensource@ijaap.nl" + } + ], + "description": "Common reflection classes used by phpdocumentor to reflect the code structure", + "homepage": "http://www.phpdoc.org", + "keywords": [ + "FQSEN", + "phpDocumentor", + "phpdoc", + "reflection", + "static analysis" + ], + "time": "2015-12-27 11:43:31" + }, + { + "name": "phpdocumentor/reflection-docblock", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", + "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0@dev", + "phpdocumentor/type-resolver": "^0.2.0", + "webmozart/assert": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^4.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ "src/" ] } @@ -1855,10 +2016,58 @@ "authors": [ { "name": "Mike van Riel", - "email": "mike.vanriel@naenius.com" + "email": "me@mikevanriel.com" } ], - "time": "2015-02-03 12:10:50" + "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "time": "2016-06-10 09:48:41" + }, + { + "name": "phpdocumentor/type-resolver", + "version": "0.2", + "source": { + "type": "git", + "url": "https://github.com/phpDocumentor/TypeResolver.git", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/b39c7a5b194f9ed7bd0dd345c751007a41862443", + "reference": "b39c7a5b194f9ed7bd0dd345c751007a41862443", + "shasum": "" + }, + "require": { + "php": ">=5.5", + "phpdocumentor/reflection-common": "^1.0" + }, + "require-dev": { + "mockery/mockery": "^0.9.4", + "phpunit/phpunit": "^5.2||^4.8.24" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "phpDocumentor\\Reflection\\": [ + "src/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mike van Riel", + "email": "me@mikevanriel.com" + } + ], + "time": "2016-06-10 07:14:17" }, { "name": "phploc/phploc", @@ -2044,32 +2253,32 @@ }, { "name": "phpspec/prophecy", - "version": "v1.6.0", + "version": "v1.6.1", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972" + "reference": "58a8137754bc24b25740d4281399a4a3596058e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/3c91bdf81797d725b14cb62906f9a4ce44235972", - "reference": "3c91bdf81797d725b14cb62906f9a4ce44235972", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/58a8137754bc24b25740d4281399a4a3596058e0", + "reference": "58a8137754bc24b25740d4281399a4a3596058e0", "shasum": "" }, "require": { "doctrine/instantiator": "^1.0.2", "php": "^5.3|^7.0", - "phpdocumentor/reflection-docblock": "~2.0", - "sebastian/comparator": "~1.1", - "sebastian/recursion-context": "~1.0" + "phpdocumentor/reflection-docblock": "^2.0|^3.0.2", + "sebastian/comparator": "^1.1", + "sebastian/recursion-context": "^1.0" }, "require-dev": { - "phpspec/phpspec": "~2.0" + "phpspec/phpspec": "^2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.5.x-dev" + "dev-master": "1.6.x-dev" } }, "autoload": { @@ -2102,7 +2311,7 @@ "spy", "stub" ], - "time": "2016-02-15 07:46:21" + "time": "2016-06-07 08:13:47" }, { "name": "phpunit/php-code-coverage", @@ -2256,21 +2465,24 @@ }, { "name": "phpunit/php-timer", - "version": "1.0.7", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b" + "reference": "38e9124049cf1a164f1e4537caf19c99bf1eb260" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3e82f4e9fc92665fafd9157568e4dcb01d014e5b", - "reference": "3e82f4e9fc92665fafd9157568e4dcb01d014e5b", + "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": [ @@ -2293,7 +2505,7 @@ "keywords": [ "timer" ], - "time": "2015-06-21 08:01:12" + "time": "2016-05-12 18:03:57" }, { "name": "phpunit/php-token-stream", @@ -2346,16 +2558,16 @@ }, { "name": "phpunit/phpunit", - "version": "4.8.24", + "version": "4.8.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e" + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a1066c562c52900a142a0e2bbf0582994671385e", - "reference": "a1066c562c52900a142a0e2bbf0582994671385e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fc1d8cd5b5de11625979125c5639347896ac2c74", + "reference": "fc1d8cd5b5de11625979125c5639347896ac2c74", "shasum": "" }, "require": { @@ -2369,7 +2581,7 @@ "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/php-timer": "^1.0.6", "phpunit/phpunit-mock-objects": "~2.3", "sebastian/comparator": "~1.1", "sebastian/diff": "~1.2", @@ -2414,7 +2626,7 @@ "testing", "xunit" ], - "time": "2016-03-14 06:16:08" + "time": "2016-05-17 03:09:28" }, { "name": "phpunit/phpunit-mock-objects", @@ -2639,16 +2851,16 @@ }, { "name": "sebastian/environment", - "version": "1.3.5", + "version": "1.3.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf" + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", - "reference": "dc7a29032cf72b54f36dac15a1ca5b3a1b6029bf", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", + "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", "shasum": "" }, "require": { @@ -2685,20 +2897,20 @@ "environment", "hhvm" ], - "time": "2016-02-26 18:40:46" + "time": "2016-05-17 03:18:57" }, { "name": "sebastian/exporter", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e" + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/7ae5513327cb536431847bcc0c10edba2701064e", - "reference": "7ae5513327cb536431847bcc0c10edba2701064e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4", + "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4", "shasum": "" }, "require": { @@ -2706,12 +2918,13 @@ "sebastian/recursion-context": "~1.0" }, "require-dev": { + "ext-mbstring": "*", "phpunit/phpunit": "~4.4" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2.x-dev" + "dev-master": "1.3.x-dev" } }, "autoload": { @@ -2751,7 +2964,7 @@ "export", "exporter" ], - "time": "2015-06-21 07:55:53" + "time": "2016-06-17 09:04:28" }, { "name": "sebastian/finder-facade", @@ -2794,16 +3007,16 @@ }, { "name": "sebastian/git", - "version": "2.1.1", + "version": "2.1.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/git.git", - "reference": "38638de3e94830a5cd7a5956135589b967609cd5" + "reference": "5100bc50cd9e70f424c643618e142214225024f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/git/zipball/38638de3e94830a5cd7a5956135589b967609cd5", - "reference": "38638de3e94830a5cd7a5956135589b967609cd5", + "url": "https://api.github.com/repos/sebastianbergmann/git/zipball/5100bc50cd9e70f424c643618e142214225024f3", + "reference": "5100bc50cd9e70f424c643618e142214225024f3", "shasum": "" }, "require": { @@ -2835,7 +3048,7 @@ "keywords": [ "git" ], - "time": "2016-02-21 15:02:23" + "time": "2016-06-15 09:30:19" }, { "name": "sebastian/global-state", @@ -3104,16 +3317,16 @@ }, { "name": "symfony/browser-kit", - "version": "v3.0.4", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "e07127ac31230b30887c2dddf3708d883d239b14" + "reference": "dcf41ed026b0499254385b5c88f03247b2ba010b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/e07127ac31230b30887c2dddf3708d883d239b14", - "reference": "e07127ac31230b30887c2dddf3708d883d239b14", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/dcf41ed026b0499254385b5c88f03247b2ba010b", + "reference": "dcf41ed026b0499254385b5c88f03247b2ba010b", "shasum": "" }, "require": { @@ -3130,7 +3343,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3157,20 +3370,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:55:57" + "time": "2016-06-29 05:41:56" }, { "name": "symfony/config", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/config.git", - "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c" + "reference": "0926e69411eba491803dbafb9f1f233e2ced58d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/5273f4724dc5288fe7a33cb08077ab9852621f2c", - "reference": "5273f4724dc5288fe7a33cb08077ab9852621f2c", + "url": "https://api.github.com/repos/symfony/config/zipball/0926e69411eba491803dbafb9f1f233e2ced58d0", + "reference": "0926e69411eba491803dbafb9f1f233e2ced58d0", "shasum": "" }, "require": { @@ -3210,20 +3423,20 @@ ], "description": "Symfony Config Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:54:35" + "time": "2016-06-29 05:31:50" }, { "name": "symfony/console", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154" + "reference": "c392a6ec72f2122748032c2ad6870420561ffcfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/9a5aef5fc0d4eff86853d44202b02be8d5a20154", - "reference": "9a5aef5fc0d4eff86853d44202b02be8d5a20154", + "url": "https://api.github.com/repos/symfony/console/zipball/c392a6ec72f2122748032c2ad6870420561ffcfa", + "reference": "c392a6ec72f2122748032c2ad6870420561ffcfa", "shasum": "" }, "require": { @@ -3270,20 +3483,20 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-03-17 09:19:04" + "time": "2016-06-29 07:02:14" }, { "name": "symfony/css-selector", - "version": "v3.0.4", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0" + "reference": "2851e1932d77ce727776154d659b232d061e816a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/65e764f404685f2dc20c057e889b3ad04b2e2db0", - "reference": "65e764f404685f2dc20c057e889b3ad04b2e2db0", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/2851e1932d77ce727776154d659b232d061e816a", + "reference": "2851e1932d77ce727776154d659b232d061e816a", "shasum": "" }, "require": { @@ -3292,7 +3505,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3323,20 +3536,20 @@ ], "description": "Symfony CssSelector Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:55:57" + "time": "2016-06-29 05:41:56" }, { "name": "symfony/dependency-injection", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "f7b4a498e679fa440b16facb934680a1527ed48c" + "reference": "2dd85de8216079d1360b2b14988cd5cdbbb49063" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/f7b4a498e679fa440b16facb934680a1527ed48c", - "reference": "f7b4a498e679fa440b16facb934680a1527ed48c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/2dd85de8216079d1360b2b14988cd5cdbbb49063", + "reference": "2dd85de8216079d1360b2b14988cd5cdbbb49063", "shasum": "" }, "require": { @@ -3352,6 +3565,7 @@ }, "suggest": { "symfony/config": "", + "symfony/expression-language": "For using expressions in service container configuration", "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them", "symfony/yaml": "" }, @@ -3385,20 +3599,20 @@ ], "description": "Symfony DependencyInjection Component", "homepage": "https://symfony.com", - "time": "2016-03-21 07:27:21" + "time": "2016-06-29 05:31:50" }, { "name": "symfony/dom-crawler", - "version": "v3.0.4", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f" + "reference": "99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/18a06d7a9af41718c20764a674a0ebba3bc40d1f", - "reference": "18a06d7a9af41718c20764a674a0ebba3bc40d1f", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0", + "reference": "99ec4a23330fcd0c8667095f3ef7aa204ffd9dc0", "shasum": "" }, "require": { @@ -3414,7 +3628,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3441,20 +3655,20 @@ ], "description": "Symfony DomCrawler Component", "homepage": "https://symfony.com", - "time": "2016-03-23 13:23:25" + "time": "2016-06-29 05:41:56" }, { "name": "symfony/event-dispatcher", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87" + "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/47d2d8cade9b1c3987573d2943bb9352536cdb87", - "reference": "47d2d8cade9b1c3987573d2943bb9352536cdb87", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/b180b70439dca70049b6b9b7e21d75e6e5d7aca9", + "reference": "b180b70439dca70049b6b9b7e21d75e6e5d7aca9", "shasum": "" }, "require": { @@ -3501,20 +3715,20 @@ ], "description": "Symfony EventDispatcher Component", "homepage": "https://symfony.com", - "time": "2016-03-07 14:04:32" + "time": "2016-06-29 05:29:29" }, { "name": "symfony/filesystem", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "f08ffdf229252cd2745558cb2112df43903bcae4" + "reference": "7258ddd6f987053f21fa43d03430580ba54e6096" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/f08ffdf229252cd2745558cb2112df43903bcae4", - "reference": "f08ffdf229252cd2745558cb2112df43903bcae4", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/7258ddd6f987053f21fa43d03430580ba54e6096", + "reference": "7258ddd6f987053f21fa43d03430580ba54e6096", "shasum": "" }, "require": { @@ -3550,20 +3764,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-03-27 10:20:16" + "time": "2016-06-29 05:31:50" }, { "name": "symfony/finder", - "version": "v2.8.4", + "version": "v2.8.8", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "ca24cf2cd4e3826f571e0067e535758e73807aa1" + "reference": "bf0506ef4e7778fd3f0f1f141ab5e8c1ef35dd7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/ca24cf2cd4e3826f571e0067e535758e73807aa1", - "reference": "ca24cf2cd4e3826f571e0067e535758e73807aa1", + "url": "https://api.github.com/repos/symfony/finder/zipball/bf0506ef4e7778fd3f0f1f141ab5e8c1ef35dd7d", + "reference": "bf0506ef4e7778fd3f0f1f141ab5e8c1ef35dd7d", "shasum": "" }, "require": { @@ -3599,20 +3813,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-03-10 10:53:53" + "time": "2016-06-29 05:29:29" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "1289d16209491b584839022f29257ad859b8532d" + "reference": "dff51f72b0706335131b00a7f49606168c582594" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/1289d16209491b584839022f29257ad859b8532d", - "reference": "1289d16209491b584839022f29257ad859b8532d", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/dff51f72b0706335131b00a7f49606168c582594", + "reference": "dff51f72b0706335131b00a7f49606168c582594", "shasum": "" }, "require": { @@ -3624,7 +3838,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -3658,20 +3872,76 @@ "portable", "shim" ], - "time": "2016-01-20 09:13:37" + "time": "2016-05-18 14:26:46" }, { - "name": "symfony/process", - "version": "v2.8.4", + "name": "symfony/polyfill-php55", + "version": "v1.2.0", "source": { "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "fb467471952ef5cf8497c029980e556b47545333" + "url": "https://github.com/symfony/polyfill-php55.git", + "reference": "bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/fb467471952ef5cf8497c029980e556b47545333", - "reference": "fb467471952ef5cf8497c029980e556b47545333", + "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d", + "reference": "bf2ff9ad6be1a4772cb873e4eea94d70daa95c6d", + "shasum": "" + }, + "require": { + "ircmaxell/password-compat": "~1.0", + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php55\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.5+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2016-05-18 14:26:46" + }, + { + "name": "symfony/process", + "version": "v2.8.8", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "89f33c16796415ccfd8bb3cf8d520cbb79899bfe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/89f33c16796415ccfd8bb3cf8d520cbb79899bfe", + "reference": "89f33c16796415ccfd8bb3cf8d520cbb79899bfe", "shasum": "" }, "require": { @@ -3707,20 +3977,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-03-23 13:11:46" + "time": "2016-06-29 05:29:29" }, { "name": "symfony/yaml", - "version": "v3.0.4", + "version": "v3.1.2", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "0047c8366744a16de7516622c5b7355336afae96" + "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/0047c8366744a16de7516622c5b7355336afae96", - "reference": "0047c8366744a16de7516622c5b7355336afae96", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2884c26ce4c1d61aebf423a8b912950fe7c764de", + "reference": "2884c26ce4c1d61aebf423a8b912950fe7c764de", "shasum": "" }, "require": { @@ -3729,7 +3999,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3756,7 +4026,7 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-03-04 07:55:57" + "time": "2016-06-29 05:41:56" }, { "name": "theseer/fdomdocument", @@ -3800,16 +4070,16 @@ }, { "name": "twig/twig", - "version": "v1.24.0", + "version": "v1.24.1", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8" + "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", - "reference": "3e5aa30ebfbafd5951fb1b01e338e1800ce7e0e8", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/3566d311a92aae4deec6e48682dc5a4528c4a512", + "reference": "3566d311a92aae4deec6e48682dc5a4528c4a512", "shasum": "" }, "require": { @@ -3857,7 +4127,56 @@ "keywords": [ "templating" ], - "time": "2016-01-25 21:22:18" + "time": "2016-05-30 09:11:59" + }, + { + "name": "webmozart/assert", + "version": "1.0.2", + "source": { + "type": "git", + "url": "https://github.com/webmozart/assert.git", + "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "require-dev": { + "phpunit/phpunit": "^4.6" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "time": "2015-08-24 13:29:44" } ], "aliases": [], diff --git a/jorobo.dist.ini b/jorobo.dist.ini index e16b2aa..03307b9 100644 --- a/jorobo.dist.ini +++ b/jorobo.dist.ini @@ -2,3 +2,36 @@ extension = weblinks version = 3.5.0 source = src target = package + +; Create a pre-release of the extension on GitHub +; Add your personal GitHub access tocken +; and add Release to the target (separated by space) above +[github] +remote = origin +branch = develop +token = +owner = joomla-extensions +repository = weblinks +changelog_source = commits + +; Automatic upload of the built extension package to an FTP server +[ftp] +host = +port = 21 +user = +password = +ssl = false +target = / + +; Adds / replaces copyright headers at the beginning of files in the source folder +[header] +files = php,js +exclude = +text = " +/** + * @package Weblinks + * + * @copyright Copyright (C) 2005 - ##YEAR## Open Source Matters, Inc. All rights reserved. + * @license GNU General Public License version 2 or later; see LICENSE.txt + */ +" \ No newline at end of file diff --git a/manifest.xml b/manifest.xml index 88bb859..13e1c8f 100644 --- a/manifest.xml +++ b/manifest.xml @@ -11,6 +11,6 @@ https://github.com/joomla-extensions/weblinks/releases/download/3.5.0/pkg-weblinks-3.5.0.zip - + diff --git a/src/administrator/components/com_weblinks/config.xml b/src/administrator/components/com_weblinks/config.xml index 1f6dc45..04e0079 100644 --- a/src/administrator/components/com_weblinks/config.xml +++ b/src/administrator/components/com_weblinks/config.xml @@ -5,6 +5,19 @@ description="COM_WEBLINKS_COMPONENT_DESC" > + + + + + input->getInt('filter_category_id'), 'int'); + $categoryId = ArrayHelper::getValue($data, 'catid', $this->input->getInt('filter_category_id'), 'int'); $allow = null; if ($categoryId) { // If the category has been passed in the URL check it. - $allow = $user->authorise('core.create', $this->option . '.category.' . $categoryId); + $allow = JFactory::getUser()->authorise('core.create', $this->option . '.category.' . $categoryId); } if ($allow !== null) @@ -112,9 +113,9 @@ class WeblinksControllerWeblink extends JControllerForm * @param JModelLegacy $model The data model object. * @param array $validData The validated data. * - * @return void + * @return void * - * @since 1.6 + * @since 1.6 */ protected function postSaveHook(JModelLegacy $model, $validData = array()) { diff --git a/src/administrator/components/com_weblinks/helpers/weblinks.php b/src/administrator/components/com_weblinks/helpers/weblinks.php index 97da0bf..449754c 100644 --- a/src/administrator/components/com_weblinks/helpers/weblinks.php +++ b/src/administrator/components/com_weblinks/helpers/weblinks.php @@ -39,4 +39,57 @@ class WeblinksHelper extends JHelperContent $vName == 'categories' ); } + + /** + * Adds Count Items for WebLinks Category Manager. + * + * @param stdClass[] &$items The weblinks category objects. + * + * @return stdClass[] The weblinks category objects. + * + * @since 3.6.0 + */ + public static function countItems(&$items) + { + $db = JFactory::getDbo(); + + foreach ($items as $item) + { + $item->count_trashed = 0; + $item->count_archived = 0; + $item->count_unpublished = 0; + $item->count_published = 0; + + $query = $db->getQuery(true) + ->select('state, COUNT(*) AS count') + ->from($db->qn('#__weblinks')) + ->where($db->qn('catid') . ' = ' . (int) $item->id) + ->group('state'); + + $db->setQuery($query); + $weblinks = $db->loadObjectList(); + + foreach ($weblinks as $weblink) + { + if ($weblink->state == 1) + { + $item->count_published = $weblink->count; + } + elseif ($weblink->state == 0) + { + $item->count_unpublished = $weblink->count; + } + elseif ($weblink->state == 2) + { + $item->count_archived = $weblink->count; + } + elseif ($weblink->state == -2) + { + $item->count_trashed = $weblink->count; + } + } + } + + return $items; + } } diff --git a/src/administrator/components/com_weblinks/models/forms/filter_weblinks.xml b/src/administrator/components/com_weblinks/models/forms/filter_weblinks.xml new file mode 100644 index 0000000..0a09af3 --- /dev/null +++ b/src/administrator/components/com_weblinks/models/forms/filter_weblinks.xml @@ -0,0 +1,106 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/administrator/components/com_weblinks/models/weblinks.php b/src/administrator/components/com_weblinks/models/weblinks.php index 2c9a0fc..1d92213 100644 --- a/src/administrator/components/com_weblinks/models/weblinks.php +++ b/src/administrator/components/com_weblinks/models/weblinks.php @@ -19,7 +19,7 @@ class WeblinksModelWeblinks extends JModelList /** * Constructor. * - * @param array An optional associative array of configuration settings. + * @param array $config An optional associative array of configuration settings. * * @see JControllerLegacy * @since 1.6 @@ -34,18 +34,23 @@ class WeblinksModelWeblinks extends JModelList 'alias', 'a.alias', 'checked_out', 'a.checked_out', 'checked_out_time', 'a.checked_out_time', - 'catid', 'a.catid', 'category_title', - 'state', 'a.state', - 'access', 'a.access', 'access_level', + 'catid', 'a.catid', 'category_id', + 'c.title', 'category_title', + 'state', 'a.state', 'published', + 'access', 'a.access', + 'ag.title', 'access_level', 'created', 'a.created', 'created_by', 'a.created_by', 'ordering', 'a.ordering', 'featured', 'a.featured', 'language', 'a.language', + 'l.title', 'language_title', 'hits', 'a.hits', 'publish_up', 'a.publish_up', 'publish_down', 'a.publish_down', 'url', 'a.url', + 'tag', + 'level', 'c.level', ); } @@ -55,38 +60,31 @@ class WeblinksModelWeblinks extends JModelList /** * Method to auto-populate the model state. * + * @param string $ordering An optional ordering field. + * @param string $direction An optional direction (asc|desc). + * * @return void * * @note Calling getState in this method will result in recursion. * @since 1.6 */ - protected function populateState($ordering = null, $direction = null) + protected function populateState($ordering = 'a.title', $direction = 'asc') { // Load the filter state. - $search = $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search'); - $this->setState('filter.search', $search); - - $accessId = $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', null, 'int'); - $this->setState('filter.access', $accessId); - - $published = $this->getUserStateFromRequest($this->context . '.filter.state', 'filter_state', '', 'string'); - $this->setState('filter.state', $published); - - $categoryId = $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id', ''); - $this->setState('filter.category_id', $categoryId); - - $language = $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', ''); - $this->setState('filter.language', $language); - - $tag = $this->getUserStateFromRequest($this->context . '.filter.tag', 'filter_tag', ''); - $this->setState('filter.tag', $tag); + $this->setState('filter.search', $this->getUserStateFromRequest($this->context . '.filter.search', 'filter_search', '', 'string')); + $this->setState('filter.access', $this->getUserStateFromRequest($this->context . '.filter.access', 'filter_access', '', 'cmd')); + $this->setState('filter.published', $this->getUserStateFromRequest($this->context . '.filter.published', 'filter_published', '', 'string')); + $this->setState('filter.category_id', $this->getUserStateFromRequest($this->context . '.filter.category_id', 'filter_category_id', '', 'cmd')); + $this->setState('filter.language', $this->getUserStateFromRequest($this->context . '.filter.language', 'filter_language', '', 'string')); + $this->setState('filter.tag', $this->getUserStateFromRequest($this->context . '.filter.tag', 'filter_tag', '', 'string')); + $this->setState('filter.level', $this->getUserStateFromRequest($this->context . '.filter.level', 'filter_level', '', 'cmd')); // Load the parameters. $params = JComponentHelper::getParams('com_weblinks'); $this->setState('params', $params); // List state information. - parent::populateState('a.title', 'asc'); + parent::populateState($ordering, $direction); } /** @@ -107,9 +105,11 @@ class WeblinksModelWeblinks extends JModelList // Compile the store id. $id .= ':' . $this->getState('filter.search'); $id .= ':' . $this->getState('filter.access'); - $id .= ':' . $this->getState('filter.state'); + $id .= ':' . $this->getState('filter.published'); $id .= ':' . $this->getState('filter.category_id'); $id .= ':' . $this->getState('filter.language'); + $id .= ':' . $this->getState('filter.tag'); + $id .= ':' . $this->getState('filter.level'); return parent::getStoreId($id); } @@ -136,47 +136,48 @@ class WeblinksModelWeblinks extends JModelList 'a.hits, a.state, a.access, a.ordering, a.language, a.publish_up, a.publish_down' ) ); - $query->from($db->quoteName('#__weblinks') . ' AS a'); + $query->from($db->quoteName('#__weblinks', 'a')); // Join over the language - $query->select('l.title AS language_title, l.image AS language_image') - ->join('LEFT', $db->quoteName('#__languages') . ' AS l ON l.lang_code = a.language'); + $query->select($db->quoteName('l.title', 'language_title')) + ->select($db->quoteName('l.image', 'language_image')) + ->join('LEFT', $db->quoteName('#__languages', 'l') . ' ON ' . $db->qn('l.lang_code') . ' = ' . $db->qn('a.language')); // Join over the users for the checked out user. - $query->select('uc.name AS editor') - ->join('LEFT', '#__users AS uc ON uc.id=a.checked_out'); + $query->select($db->quoteName('uc.name', 'editor')) + ->join('LEFT', $db->quoteName('#__users', 'uc') . ' ON ' . $db->qn('uc.id') . ' = ' . $db->qn('a.checked_out')); // Join over the asset groups. - $query->select('ag.title AS access_level') - ->join('LEFT', '#__viewlevels AS ag ON ag.id = a.access'); + $query->select($db->quoteName('ag.title', 'access_level')) + ->join('LEFT', $db->quoteName('#__viewlevels', 'ag') . ' ON ' . $db->qn('ag.id') . ' = ' . $db->qn('a.access')); // Join over the categories. $query->select('c.title AS category_title') - ->join('LEFT', '#__categories AS c ON c.id = a.catid'); + ->join('LEFT', $db->quoteName('#__categories', 'c') . ' ON ' . $db->qn('c.id') . ' = ' . $db->qn('a.catid')); // Filter by access level. if ($access = $this->getState('filter.access')) { - $query->where('a.access = ' . (int) $access); + $query->where($db->quoteName('a.access') . ' = ' . (int) $access); } // Implement View Level Access if (!$user->authorise('core.admin')) { $groups = implode(',', $user->getAuthorisedViewLevels()); - $query->where('a.access IN (' . $groups . ')'); + $query->where($db->quoteName('a.access') . ' IN (' . $groups . ')'); } // Filter by published state - $published = $this->getState('filter.state'); + $published = $this->getState('filter.published'); if (is_numeric($published)) { - $query->where('a.state = ' . (int) $published); + $query->where($db->quoteName('a.state') . ' = ' . (int) $published); } elseif ($published === '') { - $query->where('(a.state IN (0, 1))'); + $query->where('(' . $db->quoteName('a.state') . ' IN (0, 1))'); } // Filter by category. @@ -184,7 +185,13 @@ class WeblinksModelWeblinks extends JModelList if (is_numeric($categoryId)) { - $query->where('a.catid = ' . (int) $categoryId); + $query->where($db->quoteName('a.catid') . ' = ' . (int) $categoryId); + } + + // Filter on the level. + if ($level = $this->getState('filter.level')) + { + $query->where($db->quoteName('c.level') . ' <= ' . (int) $level); } // Filter by search in title @@ -194,19 +201,19 @@ class WeblinksModelWeblinks extends JModelList { if (stripos($search, 'id:') === 0) { - $query->where('a.id = ' . (int) substr($search, 3)); + $query->where($db->quoteName('a.id') . ' = ' . (int) substr($search, 3)); } else { $search = $db->quote('%' . str_replace(' ', '%', $db->escape(trim($search), true) . '%')); - $query->where('(a.title LIKE ' . $search . ' OR a.alias LIKE ' . $search . ')'); + $query->where('(' . $db->quoteName('a.title') . ' LIKE ' . $search . ' OR ' . $db->quoteName('a.alias') . ' LIKE ' . $search . ')'); } } // Filter on the language. if ($language = $this->getState('filter.language')) { - $query->where('a.language = ' . $db->quote($language)); + $query->where($db->quoteName('a.language') . ' = ' . $db->quote($language)); } $tagId = $this->getState('filter.tag'); @@ -223,8 +230,8 @@ class WeblinksModelWeblinks extends JModelList } // Add the list ordering clause. - $orderCol = $this->state->get('list.ordering'); - $orderDirn = $this->state->get('list.direction'); + $orderCol = $this->state->get('list.ordering', 'a.title'); + $orderDirn = $this->state->get('list.direction', 'ASC'); if ($orderCol == 'a.ordering' || $orderCol == 'category_title') { diff --git a/src/administrator/components/com_weblinks/script.php b/src/administrator/components/com_weblinks/script.php index 19cfe7e..a3d1e03 100644 --- a/src/administrator/components/com_weblinks/script.php +++ b/src/administrator/components/com_weblinks/script.php @@ -151,11 +151,26 @@ class Com_WeblinksInstallerScript $query->values( $db->quote('Weblink') . ', ' . $db->quote('com_weblinks.weblink') . ', ' - . $db->quote('{"special":{"dbtable":"#__weblinks","key":"id","type":"Weblink","prefix":"WeblinksTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}') . ', ' + . $db->quote( + '{"special":{"dbtable":"#__weblinks","key":"id","type":"Weblink","prefix":"WeblinksTable","config":"array()"}, + "common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}') . ', ' . $db->quote('') . ', ' - . $db->quote('{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias","core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits","core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"url", "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}') . ', ' + . $db->quote( + '{"common":{"core_content_item_id":"id","core_title":"title","core_state":"state","core_alias":"alias", + "core_created_time":"created","core_modified_time":"modified","core_body":"description", "core_hits":"hits", + "core_publish_up":"publish_up","core_publish_down":"publish_down","core_access":"access", "core_params":"params", + "core_featured":"featured", "core_metadata":"metadata", "core_language":"language", "core_images":"images", "core_urls":"url", + "core_version":"version", "core_ordering":"ordering", "core_metakey":"metakey", "core_metadesc":"metadesc", + "core_catid":"catid", "core_xreference":"xreference", "asset_id":"null"}, "special":{}}') . ', ' . $db->quote('WeblinksHelperRoute::getWeblinkRoute') . ', ' - . $db->quote('{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}') + . $db->quote( + '{"formFile":"administrator\\/components\\/com_weblinks\\/models\\/forms\\/weblink.xml", + "hideFields":["asset_id","checked_out","checked_out_time","version","featured","images"], "ignoreChanges":["modified_by", + "modified", "checked_out", "checked_out_time", "version", "hits"], "convertToInt":["publish_up", "publish_down", "featured", + "ordering"], "displayLookup":[{"sourceColumn":"catid","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}, + {"sourceColumn":"created_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"}, + {"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"}, + {"sourceColumn":"modified_by","targetTable":"#__users","targetColumn":"id","displayColumn":"name"} ]}') ); $db->setQuery($query); @@ -172,11 +187,29 @@ class Com_WeblinksInstallerScript $query->values( $db->quote('Weblinks Category') . ', ' . $db->quote('com_weblinks.category') . ', ' - . $db->quote('{"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"},"common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}') . ', ' + . $db->quote(' + {"special":{"dbtable":"#__categories","key":"id","type":"Category","prefix":"JTable","config":"array()"}, + "common":{"dbtable":"#__ucm_content","key":"ucm_id","type":"Corecontent","prefix":"JTable","config":"array()"}}') . ', ' . $db->quote('') . ', ' - . $db->quote('{"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias","core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}') . ', ' + . $db->quote(' + {"common":{"core_content_item_id":"id","core_title":"title","core_state":"published","core_alias":"alias", + "core_created_time":"created_time","core_modified_time":"modified_time","core_body":"description", + "core_hits":"hits","core_publish_up":"null","core_publish_down":"null","core_access":"access", + "core_params":"params", "core_featured":"null", "core_metadata":"metadata", "core_language":"language", + "core_images":"null", "core_urls":"null", "core_version":"version", "core_ordering":"null", "core_metakey":"metakey", + "core_metadesc":"metadesc", "core_catid":"parent_id", "core_xreference":"null", "asset_id":"asset_id"}, + "special":{"parent_id":"parent_id","lft":"lft","rgt":"rgt","level":"level","path":"path","extension":"extension","note":"note"}}') . ', ' . $db->quote('WeblinksHelperRoute::getCategoryRoute') . ', ' - . $db->quote('{"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", "hits", "path"],"convertToInt":["publish_up", "publish_down"], "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id","displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id","displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id","displayColumn":"title"}]}') + . $db->quote(' + {"formFile":"administrator\\/components\\/com_categories\\/models\\/forms\\/category.xml", + "hideFields":["asset_id","checked_out","checked_out_time","version","lft","rgt","level","path","extension"], + "ignoreChanges":["modified_user_id", "modified_time", "checked_out", "checked_out_time", "version", + "hits", "path"],"convertToInt":["publish_up", "publish_down"], + "displayLookup":[{"sourceColumn":"created_user_id","targetTable":"#__users","targetColumn":"id", + "displayColumn":"name"},{"sourceColumn":"access","targetTable":"#__viewlevels","targetColumn":"id", + "displayColumn":"title"},{"sourceColumn":"modified_user_id","targetTable":"#__users","targetColumn":"id", + "displayColumn":"name"},{"sourceColumn":"parent_id","targetTable":"#__categories","targetColumn":"id", + "displayColumn":"title"}]}') ); $db->setQuery($query); diff --git a/src/administrator/components/com_weblinks/sql/install.mysql.sql b/src/administrator/components/com_weblinks/sql/install.mysql.sql index ba504a1..a9d3690 100644 --- a/src/administrator/components/com_weblinks/sql/install.mysql.sql +++ b/src/administrator/components/com_weblinks/sql/install.mysql.sql @@ -14,7 +14,7 @@ CREATE TABLE IF NOT EXISTS `#__weblinks` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `catid` int(11) NOT NULL DEFAULT 0, `title` varchar(250) NOT NULL DEFAULT '', - `alias` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '', + `alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '', `url` varchar(250) NOT NULL DEFAULT '', `description` text NOT NULL, `hits` int(11) NOT NULL DEFAULT 0, @@ -48,4 +48,4 @@ CREATE TABLE IF NOT EXISTS `#__weblinks` ( KEY `idx_featured_catid` (`featured`,`catid`), KEY `idx_language` (`language`), KEY `idx_xreference` (`xreference`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 DEFAULT COLLATE=utf8mb4_unicode_ci; diff --git a/src/administrator/components/com_weblinks/sql/updates/mysql/3.5.1.sql b/src/administrator/components/com_weblinks/sql/updates/mysql/3.5.1.sql new file mode 100644 index 0000000..5589649 --- /dev/null +++ b/src/administrator/components/com_weblinks/sql/updates/mysql/3.5.1.sql @@ -0,0 +1,25 @@ +# Conversion to utf8mb4 + +-- +-- Step 1.1: Enlarge columns to avoid data loss on later conversion to utf8mb4 +-- + +ALTER TABLE `#__weblinks` MODIFY `alias` varchar(400) NOT NULL DEFAULT ''; + +-- +-- Step 1.2: Convert table to utf8mb4 chracter set with utf8mb4_unicode_ci collation +-- + +ALTER TABLE `#__weblinks` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; + +-- +-- Step 1.3: Set collation to utf8mb4_bin for formerly utf8_bin collated columns +-- + +ALTER TABLE `#__weblinks` MODIFY `alias` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT ''; + +-- +-- Step 1.4: Set default character set and collation for all tables +-- + +ALTER TABLE `#__weblinks` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; diff --git a/src/administrator/components/com_weblinks/tables/weblink.php b/src/administrator/components/com_weblinks/tables/weblink.php index 45df9be..3759b86 100644 --- a/src/administrator/components/com_weblinks/tables/weblink.php +++ b/src/administrator/components/com_weblinks/tables/weblink.php @@ -45,7 +45,7 @@ class WeblinksTableWeblink extends JTable /** * Overload the store method for the Weblinks table. * - * @param boolean Toggle whether null values should be updated. + * @param boolean $updateNulls Toggle whether null values should be updated. * * @return boolean True on success, false on failure. * @@ -122,7 +122,7 @@ class WeblinksTableWeblink extends JTable return false; } - // check for valid name + // Check for valid name if (trim($this->title) == '') { $this->setError(JText::_('COM_WEBLINKS_ERR_TABLES_TITLE')); diff --git a/src/administrator/components/com_weblinks/views/weblink/tmpl/edit_params.php b/src/administrator/components/com_weblinks/views/weblink/tmpl/edit_params.php index 23bb0d1..61d4d85 100644 --- a/src/administrator/components/com_weblinks/views/weblink/tmpl/edit_params.php +++ b/src/administrator/components/com_weblinks/views/weblink/tmpl/edit_params.php @@ -9,20 +9,17 @@ defined('_JEXEC') or die; -$fieldSets = $this->form->getFieldsets('params'); -foreach ($fieldSets as $name => $fieldSet) : - ?> -
- description) && trim($fieldSet->description)) : - echo '

'.$this->escape(JText::_($fieldSet->description)).'

'; - endif; - ?> - form->getFieldset($name) as $field) : ?> -
-
label; ?>
-
input; ?>
-
- +$fieldSets = $this->form->getFieldsets('params'); ?> + $fieldSet) : ?> +
+ description) && trim($fieldSet->description)) : ?> + ' . $this->escape(JText::_($fieldSet->description)) . '

'; ?> + + form->getFieldset($name) as $field) : ?> +
+
label; ?>
+
input; ?>
+
+
diff --git a/src/administrator/components/com_weblinks/views/weblink/view.html.php b/src/administrator/components/com_weblinks/views/weblink/view.html.php index 0d330ab..550c6a7 100644 --- a/src/administrator/components/com_weblinks/views/weblink/view.html.php +++ b/src/administrator/components/com_weblinks/views/weblink/view.html.php @@ -23,40 +23,48 @@ class WeblinksViewWeblink extends JViewLegacy protected $form; /** - * Display the view + * Display the view. + * + * @param string $tpl The name of the template file to parse; automatically searches through the template paths. + * + * @return mixed A string if successful, otherwise an Error object. */ public function display($tpl = null) { - $this->state = $this->get('State'); - $this->item = $this->get('Item'); - $this->form = $this->get('Form'); + $this->state = $this->get('State'); + $this->item = $this->get('Item'); + $this->form = $this->get('Form'); // Check for errors. if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)); + return false; } $this->addToolbar(); + parent::display($tpl); } /** * Add the page title and toolbar. * + * @return void + * * @since 1.6 */ protected function addToolbar() { JFactory::getApplication()->input->set('hidemainmenu', true); - $user = JFactory::getUser(); - $isNew = ($this->item->id == 0); - $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); + $user = JFactory::getUser(); + $isNew = ($this->item->id == 0); + $checkedOut = !($this->item->checked_out == 0 || $this->item->checked_out == $user->get('id')); // Since we don't track these assets at the item level, use the category id. - $canDo = JHelperContent::getActions('com_weblinks', 'category', $this->item->catid); + $canDo = JHelperContent::getActions('com_weblinks', 'category', $this->item->catid); JToolbarHelper::title($isNew ? JText::_('COM_WEBLINKS_MANAGER_WEBLINK_NEW') : JText::_('COM_WEBLINKS_MANAGER_WEBLINK_EDIT'), 'link weblinks'); diff --git a/src/administrator/components/com_weblinks/views/weblinks/tmpl/default.php b/src/administrator/components/com_weblinks/views/weblinks/tmpl/default.php index fb8978c..e0d443e 100644 --- a/src/administrator/components/com_weblinks/views/weblinks/tmpl/default.php +++ b/src/administrator/components/com_weblinks/views/weblinks/tmpl/default.php @@ -9,7 +9,7 @@ defined('_JEXEC') or die; -JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); +JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html'); JHtml::_('bootstrap.tooltip'); JHtml::_('behavior.multiselect'); @@ -21,69 +21,23 @@ $listOrder = $this->escape($this->state->get('list.ordering')); $listDirn = $this->escape($this->state->get('list.direction')); $canOrder = $user->authorise('core.edit.state', 'com_weblinks.category'); $saveOrder = $listOrder == 'a.ordering'; + if ($saveOrder) { $saveOrderingUrl = 'index.php?option=com_weblinks&task=weblinks.saveOrderAjax&tmpl=component'; JHtml::_('sortablelist.sortable', 'weblinkList', 'adminForm', strtolower($listDirn), $saveOrderingUrl); } -$sortFields = $this->getSortFields(); - -JFactory::getDocument()->addScriptDeclaration(' - Joomla.orderTable = function() - { - table = document.getElementById("sortTable"); - direction = document.getElementById("directionTable"); - order = table.options[table.selectedIndex].value; - if (order != "' . $listOrder . '") - { - dirn = "asc"; - } - else - { - dirn = direction.options[direction.selectedIndex].value; - } - Joomla.tableOrdering(order, dirn, ""); - }; -'); ?>
-sidebar)) : ?> + sidebar)) : ?>
sidebar; ?>
- +
- -
- -
- - -
-
- - pagination->getLimitBox(); ?> -
-
- - -
-
- - -
-
+ + $this)); ?>
items)) : ?>
@@ -94,88 +48,90 @@ JFactory::getDocument()->addScriptDeclaration(' - ', 'a.ordering', $listDirn, $listOrder, null, 'asc', 'JGRID_HEADING_ORDERING'); ?> + - + - - + + - - - - - - - + - + + + + + + + - + - + pagination->getListFooter(); ?> - items as $i => $item) : - $ordering = ($listOrder == 'a.ordering'); - $item->cat_link = JRoute::_('index.php?option=com_categories&extension=com_weblinks&task=edit&type=other&cid[]='. $item->catid); - $canCreate = $user->authorise('core.create', 'com_weblinks.category.' . $item->catid); - $canEdit = $user->authorise('core.edit', 'com_weblinks.category.' . $item->catid); - $canCheckin = $user->authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; - $canChange = $user->authorise('core.edit.state', 'com_weblinks.category.' . $item->catid) && $canCheckin; - ?> - + items as $i => $item) : ?> + + cat_link = JRoute::_('index.php?option=com_categories&extension=com_weblinks&task=edit&type=other&cid[]=' . $item->catid); ?> + authorise('core.create', 'com_weblinks.category.' . $item->catid); ?> + authorise('core.edit', 'com_weblinks.category.' . $item->catid); ?> + authorise('core.manage', 'com_checkin') || $item->checked_out == $user->get('id') || $item->checked_out == 0; ?> + authorise('core.edit.state', 'com_weblinks.category.' . $item->catid) && $canCheckin; ?> + - + + + + + + - + - + id); ?> - state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> +
+ state, $i, 'weblinks.', $canChange, 'cb', $item->publish_up, $item->publish_down); ?> + + + state === 2 ? 'un' : '') . 'archive', 'cb' . $i, 'weblinks'); ?> + state === -2 ? 'un' : '') . 'trash', 'cb' . $i, 'weblinks'); ?> + escape($item->title)); ?> + +
checked_out) : ?> editor, $item->checked_out_time, 'weblinks.', $canCheckin); ?> - + escape($item->title); ?> escape($item->title); ?> - escape($item->alias));?> + escape($item->alias)); ?>
- escape($item->category_title); ?> + escape($item->category_title); ?>
@@ -185,9 +141,9 @@ JFactory::getDocument()->addScriptDeclaration(' hits; ?> - language == '*'):?> + language == '*') : ?> - + language_title ? JHtml::_('image', 'mod_languages/' . $item->language_image . '.gif', $item->language_title, array('title' => $item->language_title), true) . ' ' . $this->escape($item->language_title) : JText::_('JUNDEFINED'); ?> @@ -205,8 +161,6 @@ JFactory::getDocument()->addScriptDeclaration(' - -
diff --git a/src/administrator/components/com_weblinks/views/weblinks/tmpl/default_batch.php b/src/administrator/components/com_weblinks/views/weblinks/tmpl/default_batch.php index 3c9844e..9598929 100644 --- a/src/administrator/components/com_weblinks/views/weblinks/tmpl/default_batch.php +++ b/src/administrator/components/com_weblinks/views/weblinks/tmpl/default_batch.php @@ -9,7 +9,7 @@ defined('_JEXEC') or die; -$published = $this->state->get('filter.state'); +$published = $this->state->get('filter.published'); ?>