Page MenuHomeIn-Portal Phabricator

in-portal
No OneTemporary

File Metadata

Created
Fri, Feb 21, 11:59 PM

in-portal

This file is larger than 256 KB, so syntax highlighting was skipped.
Index: branches/5.3.x/.arcconfig
===================================================================
--- branches/5.3.x/.arcconfig (revision 16799)
+++ branches/5.3.x/.arcconfig (revision 16800)
@@ -1,5 +1,5 @@
{
"project.name": "in-portal",
"repository.callsign": "INP",
- "phabricator.uri": "http://qa.in-portal.org/"
+ "phabricator.uri": "https://qa.in-portal.org/"
}
Index: branches/5.3.x/composer.json
===================================================================
--- branches/5.3.x/composer.json (revision 16799)
+++ branches/5.3.x/composer.json (revision 16800)
@@ -1,21 +1,32 @@
{
- "name": "In-Portal",
+ "name": "intechnic/in-portal",
"require": {
- "php": ">=5.3.7",
+ "php": ">=5.6",
"symfony/console": "~2.6",
"stecman/symfony-console-completion": "~0.5",
"symfony/process": "^2.7",
"paragonie/random_compat": "^2.0",
- "symfony/polyfill-php55": "^1.19",
- "symfony/polyfill-php56": "^1.19"
+ "mtdowling/cron-expression": "dev-master"
},
"require-dev": {
- "aik099/phpunit-mink": "~2.0",
- "qa-tools/qa-tools": "~1.0",
+ "behat/mink": "^1.7",
+ "aik099/phpunit-mink": "^2.4",
+ "yoast/phpunit-polyfills": "^1.1",
+ "qa-tools/qa-tools": "^1.2",
+ "phpspec/prophecy": "^1.10",
"aik099/coding-standard": "dev-in-portal",
- "nikic/php-parser": "~1.2",
- "mockery/mockery": "~0.9",
-
- "behat/mink": "~1.6"
+ "nikic/php-parser": "~1.2"
+ },
+ "repositories": [
+ {
+ "type": "vcs",
+ "url": "https://github.com/in-portal/cron-expression",
+ "no-api": true
+ }
+ ],
+ "config": {
+ "platform": {
+ "php": "5.6"
+ }
}
}
Index: branches/5.3.x/composer.lock
===================================================================
--- branches/5.3.x/composer.lock (revision 16799)
+++ branches/5.3.x/composer.lock (revision 16800)
@@ -1,2486 +1,2380 @@
{
"_readme": [
"This file locks the dependencies of your project to a known state",
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "f829b982ceec533437242efa2763f61a",
+ "content-hash": "03b61a11d07186bb3a362faad10e7fa4",
"packages": [
{
- "name": "ircmaxell/password-compat",
- "version": "v1.0.4",
+ "name": "mtdowling/cron-expression",
+ "version": "dev-master",
"source": {
"type": "git",
- "url": "https://github.com/ircmaxell/password_compat.git",
- "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c"
+ "url": "https://github.com/in-portal/cron-expression",
+ "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ircmaxell/password_compat/zipball/5c5cde8822a69545767f7c7f3058cb15ff84614c",
- "reference": "5c5cde8822a69545767f7c7f3058cb15ff84614c",
+ "url": "https://api.github.com/repos/in-portal/cron-expression/zipball/c4dda94f8f13f5447aa82e9b9528de1115448c74",
+ "reference": "c4dda94f8f13f5447aa82e9b9528de1115448c74",
"shasum": ""
},
+ "require": {
+ "php": ">=5.4.7"
+ },
"require-dev": {
- "phpunit/phpunit": "4.*"
+ "yoast/phpunit-polyfills": "^1.0"
},
+ "default-branch": true,
"type": "library",
"autoload": {
- "files": [
- "lib/password.php"
- ]
+ "psr-4": {
+ "Cron\\": "src/Cron/"
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Tests\\": "tests/Cron/"
+ }
},
- "notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
- "name": "Anthony Ferrara",
- "email": "ircmaxell@php.net",
- "homepage": "http://blog.ircmaxell.com"
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
}
],
- "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",
+ "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due",
"keywords": [
- "hashing",
- "password"
+ "cron",
+ "schedule"
],
- "time": "2014-11-20T16:49:30+00:00"
+ "abandoned": "dragonmantank/cron-expression",
+ "time": "2022-11-08T11:57:39+00:00"
},
{
"name": "paragonie/random_compat",
"version": "v2.0.21",
"source": {
"type": "git",
"url": "https://github.com/paragonie/random_compat.git",
"reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/paragonie/random_compat/zipball/96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
"reference": "96c132c7f2f7bc3230723b66e89f8f150b29d5ae",
"shasum": ""
},
"require": {
"php": ">=5.2.0"
},
"require-dev": {
"phpunit/phpunit": "*"
},
"suggest": {
"ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes."
},
"type": "library",
"autoload": {
"files": [
"lib/random.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Paragon Initiative Enterprises",
"email": "security@paragonie.com",
"homepage": "https://paragonie.com"
}
],
"description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7",
"keywords": [
"csprng",
"polyfill",
"pseudorandom",
"random"
],
+ "support": {
+ "email": "info@paragonie.com",
+ "issues": "https://github.com/paragonie/random_compat/issues",
+ "source": "https://github.com/paragonie/random_compat"
+ },
"time": "2022-02-16T17:07:03+00:00"
},
{
"name": "psr/log",
"version": "1.1.4",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/d49695b909c3b7628b6289db5479a1c204601f11",
"reference": "d49695b909c3b7628b6289db5479a1c204601f11",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Log\\": "Psr/Log/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "https://www.php-fig.org/"
}
],
"description": "Common interface for logging libraries",
"homepage": "https://github.com/php-fig/log",
"keywords": [
"log",
"psr",
"psr-3"
],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/1.1.4"
+ },
"time": "2021-05-03T11:20:27+00:00"
},
{
"name": "stecman/symfony-console-completion",
"version": "0.11.0",
"source": {
"type": "git",
"url": "https://github.com/stecman/symfony-console-completion.git",
"reference": "a9502dab59405e275a9f264536c4e1cb61fc3518"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/stecman/symfony-console-completion/zipball/a9502dab59405e275a9f264536c4e1cb61fc3518",
"reference": "a9502dab59405e275a9f264536c4e1cb61fc3518",
"shasum": ""
},
"require": {
"php": ">=5.3.2",
"symfony/console": "~2.3 || ~3.0 || ~4.0 || ~5.0"
},
"require-dev": {
"phpunit/phpunit": "~4.8.36 || ~5.7 || ~6.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "0.10.x-dev"
}
},
"autoload": {
"psr-4": {
"Stecman\\Component\\Symfony\\Console\\BashCompletion\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Stephen Holdaway",
"email": "stephen@stecman.co.nz"
}
],
"description": "Automatic BASH completion for Symfony Console Component based applications.",
+ "support": {
+ "issues": "https://github.com/stecman/symfony-console-completion/issues",
+ "source": "https://github.com/stecman/symfony-console-completion/tree/0.11.0"
+ },
"time": "2019-11-24T17:03:06+00:00"
},
{
"name": "symfony/console",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12",
"reference": "cbcf4b5e233af15cd2bbd50dee1ccc9b7927dc12",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"symfony/debug": "^2.7.2|~3.0.0",
"symfony/polyfill-mbstring": "~1.0"
},
"require-dev": {
"psr/log": "~1.0",
"symfony/event-dispatcher": "~2.1|~3.0.0",
"symfony/process": "~2.1|~3.0.0"
},
"suggest": {
"psr/log-implementation": "For using the console logger",
"symfony/event-dispatcher": "",
"symfony/process": ""
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Console\\": ""
},
"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 Console Component",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/console/tree/v2.8.52"
+ },
"time": "2018-11-20T15:55:20+00:00"
},
{
"name": "symfony/debug",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "74251c8d50dd3be7c4ce0c7b862497cdc641a5d0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/74251c8d50dd3be7c4ce0c7b862497cdc641a5d0",
"reference": "74251c8d50dd3be7c4ce0c7b862497cdc641a5d0",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"psr/log": "~1.0"
},
"conflict": {
"symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
},
"require-dev": {
"symfony/class-loader": "~2.2|~3.0.0",
"symfony/http-kernel": "~2.3.24|~2.5.9|^2.6.2|~3.0.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Debug\\": ""
},
"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 Debug Component",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/debug/tree/v2.8.50"
+ },
"abandoned": "symfony/error-handler",
"time": "2018-11-11T11:18:13+00:00"
},
{
"name": "symfony/polyfill-mbstring",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"reference": "b5f7b932ee6fa802fc792eabd77c4c88084517ce",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-mbstring": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Mbstring\\": ""
}
},
"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 for the Mbstring extension",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"mbstring",
"polyfill",
"portable",
"shim"
],
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-10-23T09:01:57+00:00"
- },
- {
- "name": "symfony/polyfill-php55",
- "version": "v1.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php55.git",
- "reference": "248a5c9877b126493abb661e4fb47792e418035b"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php55/zipball/248a5c9877b126493abb661e4fb47792e418035b",
- "reference": "248a5c9877b126493abb661e4fb47792e418035b",
- "shasum": ""
- },
- "require": {
- "ircmaxell/password-compat": "~1.0",
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.19-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php55\\": ""
- }
- },
- "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"
- ],
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-10-23T09:01:57+00:00"
- },
- {
- "name": "symfony/polyfill-php56",
- "version": "v1.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-php56.git",
- "reference": "ea19621731cbd973a6702cfedef3419768bf3372"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ea19621731cbd973a6702cfedef3419768bf3372",
- "reference": "ea19621731cbd973a6702cfedef3419768bf3372",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3",
- "symfony/polyfill-util": "~1.0"
+ "support": {
+ "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.19.0"
},
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.19-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "files": [
- "bootstrap.php"
- ],
- "psr-4": {
- "Symfony\\Polyfill\\Php56\\": ""
- }
- },
- "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.6+ features to lower PHP versions",
- "homepage": "https://symfony.com",
- "keywords": [
- "compatibility",
- "polyfill",
- "portable",
- "shim"
- ],
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-23T09:01:57+00:00"
},
{
- "name": "symfony/polyfill-util",
- "version": "v1.19.0",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/polyfill-util.git",
- "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
- "reference": "8df0c3e6a4b85df9a5c6f3f2f46fba5c5c47058a",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.3"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-main": "1.19-dev"
- },
- "thanks": {
- "name": "symfony/polyfill",
- "url": "https://github.com/symfony/polyfill"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Polyfill\\Util\\": ""
- }
- },
- "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 utilities for portability of PHP codes",
- "homepage": "https://symfony.com",
- "keywords": [
- "compat",
- "compatibility",
- "polyfill",
- "shim"
- ],
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2020-10-21T09:57:48+00:00"
- },
- {
"name": "symfony/process",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "c3591a09c78639822b0b290d44edb69bf9f05dc8"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/c3591a09c78639822b0b290d44edb69bf9f05dc8",
"reference": "c3591a09c78639822b0b290d44edb69bf9f05dc8",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\Process\\": ""
},
"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 Process Component",
"homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/process/tree/v2.8.50"
+ },
"time": "2018-11-11T11:18:13+00:00"
}
],
"packages-dev": [
{
"name": "aik099/coding-standard",
"version": "dev-in-portal",
"source": {
"type": "git",
"url": "https://github.com/aik099/CodingStandard.git",
"reference": "26b67b43b3cb4d57a68a472170bf6fab07334c18"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aik099/CodingStandard/zipball/26b67b43b3cb4d57a68a472170bf6fab07334c18",
"reference": "26b67b43b3cb4d57a68a472170bf6fab07334c18",
"shasum": ""
},
"require-dev": {
"squizlabs/php_codesniffer": "^3.0",
"yoast/phpunit-polyfills": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Alexander Obuhovich",
"email": "aik.bold@gmail.com"
}
],
"description": "The PHP_CodeSniffer coding standard I'm using on all of my projects.",
"keywords": [
"PHP_CodeSniffer",
"codesniffer"
],
+ "support": {
+ "issues": "https://github.com/aik099/CodingStandard/issues",
+ "source": "https://github.com/aik099/CodingStandard/tree/in-portal"
+ },
"time": "2021-11-07T17:05:54+00:00"
},
{
"name": "aik099/phpunit-mink",
- "version": "v2.2.0",
+ "version": "v2.4.0",
"source": {
"type": "git",
"url": "https://github.com/minkphp/phpunit-mink.git",
- "reference": "68b94432ac12ad4f714ef540037396aeb369e230"
+ "reference": "6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/minkphp/phpunit-mink/zipball/68b94432ac12ad4f714ef540037396aeb369e230",
- "reference": "68b94432ac12ad4f714ef540037396aeb369e230",
+ "url": "https://api.github.com/repos/minkphp/phpunit-mink/zipball/6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab",
+ "reference": "6ebf48d8d76a7054f84de2cbe779318cc3b0f4ab",
"shasum": ""
},
"require": {
- "behat/mink": "~1.6@dev",
+ "behat/mink": "^1.8@dev",
"behat/mink-selenium2-driver": "~1.2",
- "php": ">=5.3.2",
- "phpunit/phpunit": "~4|~5",
- "symfony/event-dispatcher": "~2.4|~3.0"
+ "console-helpers/phpunit-compat": "^1.0.3",
+ "php": ">=5.6",
+ "phpunit/phpunit": ">=4.8.35 <5|>=5.4.3"
},
"require-dev": {
"aik099/coding-standard": "dev-master",
- "mockery/mockery": "~0.9"
+ "mockery/mockery": "~0.9|^1.5",
+ "yoast/phpunit-polyfills": "^1.0"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1.x-dev"
+ "dev-master": "2.3.x-dev"
}
},
"autoload": {
"psr-4": {
"aik099\\PHPUnit\\": "library/aik099/PHPUnit",
"PimpleCopy\\Pimple\\": "library/PimpleCopy/Pimple"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Alexander Obuhovich",
"email": "aik.bold@gmail.com"
}
],
"description": "Library for using Mink in PHPUnit tests. Supports session sharing between tests in a test case.",
"homepage": "http://github.com/minkphp/phpunit-mink",
"keywords": [
"BrowserStack",
"Mink",
"Sauce",
"SauceLabs",
"phpunit",
"selenium",
"tests"
],
- "time": "2016-06-26T09:07:47+00:00"
+ "support": {
+ "issues": "https://github.com/minkphp/phpunit-mink/issues",
+ "source": "https://github.com/minkphp/phpunit-mink/tree/v2.4.0"
+ },
+ "time": "2024-07-15T11:00:18+00:00"
},
{
"name": "behat/mink",
"version": "v1.9.0",
"source": {
"type": "git",
"url": "https://github.com/minkphp/Mink.git",
"reference": "e35f4695de8800fc776af34ebf665ad58ebdd996"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/minkphp/Mink/zipball/e35f4695de8800fc776af34ebf665ad58ebdd996",
"reference": "e35f4695de8800fc776af34ebf665ad58ebdd996",
"shasum": ""
},
"require": {
"php": ">=5.4",
"symfony/css-selector": "^2.7|^3.0|^4.0|^5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5 || ^9.5",
"symfony/debug": "^2.7|^3.0|^4.0|^5.0",
"symfony/phpunit-bridge": "^3.4.38 || ^4.4 || ^5.0.5",
"yoast/phpunit-polyfills": "^1.0"
},
"suggest": {
"behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
"behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
"behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
"behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)",
"dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Behat\\Mink\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com",
"homepage": "http://everzet.com"
}
],
"description": "Browser controller/emulator abstraction for PHP",
"homepage": "https://mink.behat.org/",
"keywords": [
"browser",
"testing",
"web"
],
+ "support": {
+ "issues": "https://github.com/minkphp/Mink/issues",
+ "source": "https://github.com/minkphp/Mink/tree/v1.9.0"
+ },
"time": "2021-10-11T11:58:47+00:00"
},
{
"name": "behat/mink-selenium2-driver",
"version": "v1.5.0",
"source": {
"type": "git",
"url": "https://github.com/minkphp/MinkSelenium2Driver.git",
"reference": "0dee8cceed7e198bf130b4af0fab0ffab6dab47f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/minkphp/MinkSelenium2Driver/zipball/0dee8cceed7e198bf130b4af0fab0ffab6dab47f",
"reference": "0dee8cceed7e198bf130b4af0fab0ffab6dab47f",
"shasum": ""
},
"require": {
"behat/mink": "~1.7@dev",
"instaclick/php-webdriver": "~1.1",
"php": ">=5.4"
},
"require-dev": {
"mink/driver-testsuite": "dev-master"
},
"type": "mink-driver",
"extra": {
"branch-alias": {
"dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
"Behat\\Mink\\Driver\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Pete Otaqui",
"email": "pete@otaqui.com",
"homepage": "https://github.com/pete-otaqui"
},
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com",
"homepage": "http://everzet.com"
}
],
"description": "Selenium2 (WebDriver) driver for Mink framework",
"homepage": "https://mink.behat.org/",
"keywords": [
"ajax",
"browser",
"javascript",
"selenium",
"testing",
"webdriver"
],
+ "support": {
+ "issues": "https://github.com/minkphp/MinkSelenium2Driver/issues",
+ "source": "https://github.com/minkphp/MinkSelenium2Driver/tree/v1.5.0"
+ },
"time": "2021-10-12T16:01:47+00:00"
},
{
+ "name": "console-helpers/phpunit-compat",
+ "version": "v1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/console-helpers/phpunit-compat.git",
+ "reference": "096c6e42ebd090415ab03d9ce9edff8ed978a319"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/console-helpers/phpunit-compat/zipball/096c6e42ebd090415ab03d9ce9edff8ed978a319",
+ "reference": "096c6e42ebd090415ab03d9ce9edff8ed978a319",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6.0"
+ },
+ "require-dev": {
+ "aik099/coding-standard": "dev-master"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "phpunitcompat_autoloader.php"
+ ],
+ "psr-4": {
+ "Tests\\ConsoleHelpers\\PHPUnitCompat\\": "tests/PHPUnitCompat/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Alexander Obuhovich",
+ "email": "aik.bold@gmail.com"
+ }
+ ],
+ "description": "Compatibility layer for PHPUnit test cases/test suite to work on different major PHPUnit versions",
+ "support": {
+ "issues": "https://github.com/console-helpers/phpunit-compat/issues",
+ "source": "https://github.com/console-helpers/phpunit-compat/tree/v1.0.3"
+ },
+ "time": "2024-07-11T11:28:01+00:00"
+ },
+ {
"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-14T21:17:01+00:00"
- },
- {
- "name": "hamcrest/hamcrest-php",
- "version": "v1.2.2",
- "source": {
- "type": "git",
- "url": "https://github.com/hamcrest/hamcrest-php.git",
- "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c"
+ "support": {
+ "issues": "https://github.com/doctrine/instantiator/issues",
+ "source": "https://github.com/doctrine/instantiator/tree/1.0.5"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/b37020aa976fa52d3de9aa904aa2522dc518f79c",
- "reference": "b37020aa976fa52d3de9aa904aa2522dc518f79c",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.2"
- },
- "replace": {
- "cordoval/hamcrest-php": "*",
- "davedevelopment/hamcrest-php": "*",
- "kodova/hamcrest-php": "*"
- },
- "require-dev": {
- "phpunit/php-file-iterator": "1.3.3",
- "satooshi/php-coveralls": "dev-master"
- },
- "type": "library",
- "autoload": {
- "classmap": [
- "hamcrest"
- ],
- "files": [
- "hamcrest/Hamcrest.php"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD"
- ],
- "description": "This is the PHP port of Hamcrest Matchers",
- "keywords": [
- "test"
+ "funding": [
+ {
+ "url": "https://www.doctrine-project.org/sponsorship.html",
+ "type": "custom"
+ },
+ {
+ "url": "https://www.patreon.com/phpdoctrine",
+ "type": "patreon"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator",
+ "type": "tidelift"
+ }
],
- "time": "2015-05-11T14:41:42+00:00"
+ "time": "2015-06-14T21:17:01+00:00"
},
{
"name": "instaclick/php-webdriver",
- "version": "1.4.14",
+ "version": "1.4.19",
"source": {
"type": "git",
"url": "https://github.com/instaclick/php-webdriver.git",
- "reference": "200b8df772b74d604bebf25ef42ad6f8ee6380a9"
+ "reference": "3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/200b8df772b74d604bebf25ef42ad6f8ee6380a9",
- "reference": "200b8df772b74d604bebf25ef42ad6f8ee6380a9",
+ "url": "https://api.github.com/repos/instaclick/php-webdriver/zipball/3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1",
+ "reference": "3b2a2ddc4e0a690cc691d7e5952964cc4b9538b1",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.3.2"
},
"require-dev": {
"phpunit/phpunit": "^8.5 || ^9.5",
"satooshi/php-coveralls": "^1.0 || ^2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"psr-0": {
"WebDriver": "lib/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"Apache-2.0"
],
"authors": [
{
"name": "Justin Bishop",
"email": "jubishop@gmail.com",
"role": "Developer"
},
{
"name": "Anthon Pang",
"email": "apang@softwaredevelopment.ca",
"role": "Fork Maintainer"
}
],
"description": "PHP WebDriver for Selenium 2",
"homepage": "http://instaclick.com/",
"keywords": [
"browser",
"selenium",
"webdriver",
"webtest"
],
- "time": "2022-04-19T02:06:59+00:00"
+ "support": {
+ "issues": "https://github.com/instaclick/php-webdriver/issues",
+ "source": "https://github.com/instaclick/php-webdriver/tree/1.4.19"
+ },
+ "time": "2024-03-19T01:58:53+00:00"
},
{
"name": "mindplay/annotations",
- "version": "1.3.3",
+ "version": "1.3.4",
"source": {
"type": "git",
"url": "https://github.com/php-annotations/php-annotations.git",
- "reference": "d314832b338b88299c4108361c858b0590798d2c"
+ "reference": "6d5bfc47218cb013b0b3026374c6ffb0b1cad989"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-annotations/php-annotations/zipball/d314832b338b88299c4108361c858b0590798d2c",
- "reference": "d314832b338b88299c4108361c858b0590798d2c",
+ "url": "https://api.github.com/repos/php-annotations/php-annotations/zipball/6d5bfc47218cb013b0b3026374c6ffb0b1cad989",
+ "reference": "6d5bfc47218cb013b0b3026374c6ffb0b1cad989",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/php-code-coverage": "~1.2.1",
"phpunit/php-file-iterator": ">=1.3.0@stable <2.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"psr-4": {
"mindplay\\annotations\\": "src\\annotations"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"LGPL-3.0+"
],
"authors": [
{
"name": "Rasmus Schultz",
"email": "rasmus@mindplay.dk"
}
],
"description": "Industrial-strength annotations for PHP",
"homepage": "http://blog.mindplay.dk/",
"keywords": [
"annotations",
"framework"
],
- "time": "2022-07-16T15:11:03+00:00"
- },
- {
- "name": "mockery/mockery",
- "version": "0.9.11",
- "source": {
- "type": "git",
- "url": "https://github.com/mockery/mockery.git",
- "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/be9bf28d8e57d67883cba9fcadfcff8caab667f8",
- "reference": "be9bf28d8e57d67883cba9fcadfcff8caab667f8",
- "shasum": ""
- },
- "require": {
- "hamcrest/hamcrest-php": "~1.1",
- "lib-pcre": ">=7.0",
- "php": ">=5.3.2"
- },
- "require-dev": {
- "phpunit/phpunit": "~4.0"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "0.9.x-dev"
- }
+ "support": {
+ "issues": "https://github.com/php-annotations/php-annotations/issues",
+ "source": "https://github.com/php-annotations/php-annotations/tree/1.3.4"
},
- "autoload": {
- "psr-0": {
- "Mockery": "library/"
- }
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "BSD-3-Clause"
- ],
- "authors": [
- {
- "name": "Pádraic Brady",
- "email": "padraic.brady@gmail.com",
- "homepage": "http://blog.astrumfutura.com"
- },
- {
- "name": "Dave Marshall",
- "email": "dave.marshall@atstsolutions.co.uk",
- "homepage": "http://davedevelopment.co.uk"
- }
- ],
- "description": "Mockery is a simple yet flexible PHP mock object framework for use in unit testing with PHPUnit, PHPSpec or any other testing framework. Its core goal is to offer a test double framework with a succinct API capable of clearly defining all possible object operations and interactions using a human readable Domain Specific Language (DSL). Designed as a drop in alternative to PHPUnit's phpunit-mock-objects library, Mockery is easy to integrate with PHPUnit and can operate alongside phpunit-mock-objects without the World ending.",
- "homepage": "http://github.com/padraic/mockery",
- "keywords": [
- "BDD",
- "TDD",
- "library",
- "mock",
- "mock objects",
- "mockery",
- "stub",
- "test",
- "test double",
- "testing"
- ],
- "time": "2019-02-12T16:07:13+00:00"
+ "time": "2024-02-17T16:21:25+00:00"
},
{
"name": "nikic/php-parser",
"version": "v1.4.1",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
"reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
"reference": "f78af2c9c86107aa1a34cd1dbb5bbe9eeb0d9f51",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"files": [
"lib/bootstrap.php"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Nikita Popov"
}
],
"description": "A PHP parser written in PHP",
"keywords": [
"parser",
"php"
],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/1.x"
+ },
"time": "2015-09-19T14:15:08+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
"version": "2.0.5",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
"reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
"reference": "e6a969a640b00d8daa3c66518b0405fb41ae0c4b",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.0"
},
"suggest": {
"dflydev/markdown": "~1.0",
"erusev/parsedown": "~1.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.0.x-dev"
}
},
"autoload": {
"psr-0": {
"phpDocumentor": [
"src/"
]
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Mike van Riel",
"email": "mike.vanriel@naenius.com"
}
],
+ "support": {
+ "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
+ "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/release/2.x"
+ },
"time": "2016-01-25T08:17:30+00:00"
},
{
"name": "phpspec/prophecy",
"version": "v1.10.3",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
"reference": "451c3cd1418cf640de218914901e51b064abb093"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/451c3cd1418cf640de218914901e51b064abb093",
"reference": "451c3cd1418cf640de218914901e51b064abb093",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
"phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
"sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
"sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
},
"require-dev": {
"phpspec/phpspec": "^2.5 || ^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.10.x-dev"
}
},
"autoload": {
"psr-4": {
"Prophecy\\": "src/Prophecy"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Konstantin Kudryashov",
"email": "ever.zet@gmail.com",
"homepage": "http://everzet.com"
},
{
"name": "Marcello Duarte",
"email": "marcello.duarte@gmail.com"
}
],
"description": "Highly opinionated mocking framework for PHP 5.3+",
"homepage": "https://github.com/phpspec/prophecy",
"keywords": [
"Double",
"Dummy",
"fake",
"mock",
"spy",
"stub"
],
+ "support": {
+ "issues": "https://github.com/phpspec/prophecy/issues",
+ "source": "https://github.com/phpspec/prophecy/tree/v1.10.3"
+ },
"time": "2020-03-05T15:02:03+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "2.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
"reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"phpunit/php-file-iterator": "~1.3",
"phpunit/php-text-template": "~1.2",
"phpunit/php-token-stream": "~1.3",
"sebastian/environment": "^1.3.2",
"sebastian/version": "~1.0"
},
"require-dev": {
"ext-xdebug": ">=2.1.4",
"phpunit/phpunit": "~4"
},
"suggest": {
"ext-dom": "*",
"ext-xdebug": ">=2.2.1",
"ext-xmlwriter": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.2.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
"homepage": "https://github.com/sebastianbergmann/php-code-coverage",
"keywords": [
"coverage",
"testing",
"xunit"
],
+ "support": {
+ "irc": "irc://irc.freenode.net/phpunit",
+ "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
+ "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/2.2"
+ },
"time": "2015-10-06T15:47:00+00:00"
},
{
"name": "phpunit/php-file-iterator",
"version": "1.4.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/730b01bc3e867237eaac355e06a36b85dd93a8b4",
"reference": "730b01bc3e867237eaac355e06a36b85dd93a8b4",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
"homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
"keywords": [
"filesystem",
"iterator"
],
+ "support": {
+ "irc": "irc://irc.freenode.net/phpunit",
+ "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
+ "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/1.4.5"
+ },
"time": "2017-11-27T13:52:08+00:00"
},
{
"name": "phpunit/php-text-template",
"version": "1.2.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-text-template.git",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Simple template engine.",
"homepage": "https://github.com/sebastianbergmann/php-text-template/",
"keywords": [
"template"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-text-template/issues",
+ "source": "https://github.com/sebastianbergmann/php-text-template/tree/1.2.1"
+ },
"time": "2015-06-21T13:50:34+00:00"
},
{
"name": "phpunit/php-timer",
"version": "1.0.9",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-timer.git",
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"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": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Utility class for timing",
"homepage": "https://github.com/sebastianbergmann/php-timer/",
"keywords": [
"timer"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-timer/issues",
+ "source": "https://github.com/sebastianbergmann/php-timer/tree/master"
+ },
"time": "2017-02-26T11:10:40+00:00"
},
{
"name": "phpunit/php-token-stream",
"version": "1.4.12",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-token-stream.git",
"reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/1ce90ba27c42e4e44e6d8458241466380b51fa16",
"reference": "1ce90ba27c42e4e44e6d8458241466380b51fa16",
"shasum": ""
},
"require": {
"ext-tokenizer": "*",
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Wrapper around PHP's tokenizer extension.",
"homepage": "https://github.com/sebastianbergmann/php-token-stream/",
"keywords": [
"tokenizer"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/php-token-stream/issues",
+ "source": "https://github.com/sebastianbergmann/php-token-stream/tree/1.4"
+ },
"abandoned": true,
"time": "2017-12-04T08:55:13+00:00"
},
{
"name": "phpunit/phpunit",
"version": "4.8.36",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "46023de9a91eec7dfb06cc56cb4e260017298517"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/46023de9a91eec7dfb06cc56cb4e260017298517",
"reference": "46023de9a91eec7dfb06cc56cb4e260017298517",
"shasum": ""
},
"require": {
"ext-dom": "*",
"ext-json": "*",
"ext-pcre": "*",
"ext-reflection": "*",
"ext-spl": "*",
"php": ">=5.3.3",
"phpspec/prophecy": "^1.3.1",
"phpunit/php-code-coverage": "~2.1",
"phpunit/php-file-iterator": "~1.4",
"phpunit/php-text-template": "~1.2",
"phpunit/php-timer": "^1.0.6",
"phpunit/phpunit-mock-objects": "~2.3",
"sebastian/comparator": "~1.2.2",
"sebastian/diff": "~1.2",
"sebastian/environment": "~1.3",
"sebastian/exporter": "~1.2",
"sebastian/global-state": "~1.0",
"sebastian/version": "~1.0",
"symfony/yaml": "~2.1|~3.0"
},
"suggest": {
"phpunit/php-invoker": "~1.1"
},
"bin": [
"phpunit"
],
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "4.8.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "The PHP Unit Testing framework.",
"homepage": "https://phpunit.de/",
"keywords": [
"phpunit",
"testing",
"xunit"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/phpunit/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/4.8.36"
+ },
"time": "2017-06-21T08:07:12+00:00"
},
{
"name": "phpunit/phpunit-mock-objects",
"version": "2.3.8",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
"reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
"reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": ">=5.3.3",
"phpunit/php-text-template": "~1.2",
"sebastian/exporter": "~1.2"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
},
"suggest": {
"ext-soap": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.3.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sb@sebastian-bergmann.de",
"role": "lead"
}
],
"description": "Mock Object library for PHPUnit",
"homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
"keywords": [
"mock",
"xunit"
],
+ "support": {
+ "irc": "irc://irc.freenode.net/phpunit",
+ "issues": "https://github.com/sebastianbergmann/phpunit-mock-objects/issues",
+ "source": "https://github.com/sebastianbergmann/phpunit-mock-objects/tree/2.3"
+ },
"abandoned": true,
"time": "2015-10-02T06:51:40+00:00"
},
{
"name": "pimple/pimple",
"version": "v3.2.3",
"source": {
"type": "git",
"url": "https://github.com/silexphp/Pimple.git",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32",
"reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32",
"shasum": ""
},
"require": {
"php": ">=5.3.0",
"psr/container": "^1.0"
},
"require-dev": {
"symfony/phpunit-bridge": "^3.2"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "3.2.x-dev"
}
},
"autoload": {
"psr-0": {
"Pimple": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
}
],
"description": "Pimple, a simple Dependency Injection Container",
"homepage": "http://pimple.sensiolabs.org",
"keywords": [
"container",
"dependency injection"
],
+ "support": {
+ "issues": "https://github.com/silexphp/Pimple/issues",
+ "source": "https://github.com/silexphp/Pimple/tree/master"
+ },
"time": "2018-01-21T07:42:36+00:00"
},
{
"name": "psr/container",
"version": "1.0.0",
"source": {
"type": "git",
"url": "https://github.com/php-fig/container.git",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"psr-4": {
"Psr\\Container\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "PHP-FIG",
"homepage": "http://www.php-fig.org/"
}
],
"description": "Common Container Interface (PHP FIG PSR-11)",
"homepage": "https://github.com/php-fig/container",
"keywords": [
"PSR-11",
"container",
"container-interface",
"container-interop",
"psr"
],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/master"
+ },
"time": "2017-02-14T16:28:37+00:00"
},
{
"name": "qa-tools/qa-tools",
"version": "v1.2.1",
"source": {
"type": "git",
"url": "https://github.com/qa-tools/qa-tools.git",
"reference": "505b14a7766daa718cad21bdb7bcb404cabaa1fc"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/qa-tools/qa-tools/zipball/505b14a7766daa718cad21bdb7bcb404cabaa1fc",
"reference": "505b14a7766daa718cad21bdb7bcb404cabaa1fc",
"shasum": ""
},
"require": {
"behat/mink": "~1.6",
"mindplay/annotations": "~1.2",
"php": ">=5.3.2",
"pimple/pimple": "^2.0|^3.0"
},
"replace": {
"aik099/qa-tools": "self.version"
},
"require-dev": {
"aik099/coding-standard": "dev-master",
"behat/mink-selenium2-driver": "~1.2",
"mockery/mockery": "~0.9",
"symfony/phpunit-bridge": "^3.1"
},
"suggest": {
"qa-tools/phpunit-extension": "PHPUnit extension for QA-Tools"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"psr-0": {
"QATools\\QATools\\": "./library/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Alexander Obuhovich",
"email": "aik.bold@gmail.com"
},
{
"name": "Dmitry Kushnikov",
"email": "dkushnikov@gmail.com"
},
{
"name": "Michael Geppert",
"email": "evangelion1204@aol.com"
}
],
"description": "Library that provides easy-to-use way of interaction with web-page elements in functional tests using PageObject pattern.",
"keywords": [
"BEM",
"HtmlElements",
"Mink",
"PageObject",
"acceptance",
"functional",
"phpunit",
"tests"
],
+ "support": {
+ "issues": "https://github.com/qa-tools/qa-tools/issues",
+ "source": "https://github.com/qa-tools/qa-tools/tree/master"
+ },
"time": "2016-07-06T11:31:04+00:00"
},
{
"name": "sebastian/comparator",
"version": "1.2.4",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/comparator.git",
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"sebastian/diff": "~1.2",
"sebastian/exporter": "~1.2 || ~2.0"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.2.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Provides the functionality to compare PHP values for equality",
"homepage": "http://www.github.com/sebastianbergmann/comparator",
"keywords": [
"comparator",
"compare",
"equality"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/comparator/issues",
+ "source": "https://github.com/sebastianbergmann/comparator/tree/1.2"
+ },
"time": "2017-01-29T09:50:25+00:00"
},
{
"name": "sebastian/diff",
"version": "1.4.3",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/diff.git",
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"reference": "7f066a26a962dbe58ddea9f72a4e82874a3975a4",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.4-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Kore Nordmann",
"email": "mail@kore-nordmann.de"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Diff implementation",
"homepage": "https://github.com/sebastianbergmann/diff",
"keywords": [
"diff"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/diff/issues",
+ "source": "https://github.com/sebastianbergmann/diff/tree/1.4"
+ },
"time": "2017-05-22T07:24:03+00:00"
},
{
"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"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/environment/issues",
+ "source": "https://github.com/sebastianbergmann/environment/tree/1.3"
+ },
"time": "2016-08-18T05:49:44+00:00"
},
{
"name": "sebastian/exporter",
"version": "1.2.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/exporter.git",
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
"reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"sebastian/recursion-context": "~1.0"
},
"require-dev": {
"ext-mbstring": "*",
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.3.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Volker Dusch",
"email": "github@wallbash.com"
},
{
"name": "Bernhard Schussek",
"email": "bschussek@2bepublished.at"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
}
],
"description": "Provides the functionality to export PHP variables for visualization",
"homepage": "http://www.github.com/sebastianbergmann/exporter",
"keywords": [
"export",
"exporter"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/exporter/issues",
+ "source": "https://github.com/sebastianbergmann/exporter/tree/master"
+ },
"time": "2016-06-17T09:04:28+00:00"
},
{
"name": "sebastian/global-state",
"version": "1.1.1",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/global-state.git",
"reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
"reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.2"
},
"suggest": {
"ext-uopz": "*"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
}
],
"description": "Snapshotting of global state",
"homepage": "http://www.github.com/sebastianbergmann/global-state",
"keywords": [
"global state"
],
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/global-state/issues",
+ "source": "https://github.com/sebastianbergmann/global-state/tree/1.1.1"
+ },
"time": "2015-10-12T03:26:01+00:00"
},
{
"name": "sebastian/recursion-context",
"version": "1.0.5",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/recursion-context.git",
"reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"phpunit/phpunit": "~4.4"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.0.x-dev"
}
},
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Jeff Welch",
"email": "whatthejeff@gmail.com"
},
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de"
},
{
"name": "Adam Harvey",
"email": "aharvey@php.net"
}
],
"description": "Provides functionality to recursively process PHP variables",
"homepage": "http://www.github.com/sebastianbergmann/recursion-context",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/recursion-context/issues",
+ "source": "https://github.com/sebastianbergmann/recursion-context/tree/master"
+ },
"time": "2016-10-03T07:41:43+00:00"
},
{
"name": "sebastian/version",
"version": "1.0.6",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/version.git",
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
"reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
"shasum": ""
},
"type": "library",
"autoload": {
"classmap": [
"src/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"BSD-3-Clause"
],
"authors": [
{
"name": "Sebastian Bergmann",
"email": "sebastian@phpunit.de",
"role": "lead"
}
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
"homepage": "https://github.com/sebastianbergmann/version",
+ "support": {
+ "issues": "https://github.com/sebastianbergmann/version/issues",
+ "source": "https://github.com/sebastianbergmann/version/tree/1.0.6"
+ },
"time": "2015-06-21T13:59:46+00:00"
},
{
"name": "symfony/css-selector",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
"reference": "7b1692e418d7ccac24c373528453bc90e42797de"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/css-selector/zipball/7b1692e418d7ccac24c373528453bc90e42797de",
"reference": "7b1692e418d7ccac24c373528453bc90e42797de",
"shasum": ""
},
"require": {
"php": ">=5.3.9"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.8-dev"
}
},
"autoload": {
"psr-4": {
"Symfony\\Component\\CssSelector\\": ""
},
"exclude-from-classmap": [
"/Tests/"
]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Fabien Potencier",
"email": "fabien@symfony.com"
},
{
"name": "Jean-François Simon",
"email": "jeanfrancois.simon@sensiolabs.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2018-11-11T11:18:13+00:00"
- },
- {
- "name": "symfony/event-dispatcher",
- "version": "v2.8.52",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
+ "support": {
+ "source": "https://github.com/symfony/css-selector/tree/v2.8.52"
},
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
- "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
- "shasum": ""
- },
- "require": {
- "php": ">=5.3.9"
- },
- "require-dev": {
- "psr/log": "~1.0",
- "symfony/config": "^2.0.5|~3.0.0",
- "symfony/dependency-injection": "~2.6|~3.0.0",
- "symfony/expression-language": "~2.6|~3.0.0",
- "symfony/stopwatch": "~2.3|~3.0.0"
- },
- "suggest": {
- "symfony/dependency-injection": "",
- "symfony/http-kernel": ""
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "2.8-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\EventDispatcher\\": ""
- },
- "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 EventDispatcher Component",
- "homepage": "https://symfony.com",
- "time": "2018-11-21T14:20:20+00:00"
+ "time": "2018-11-11T11:18:13+00:00"
},
{
"name": "symfony/polyfill-ctype",
"version": "v1.19.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/aed596913b70fae57be53d86faa2e9ef85a2297b",
"reference": "aed596913b70fae57be53d86faa2e9ef85a2297b",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"suggest": {
"ext-ctype": "For best performance"
},
"type": "library",
"extra": {
"branch-alias": {
"dev-main": "1.19-dev"
},
"thanks": {
"name": "symfony/polyfill",
"url": "https://github.com/symfony/polyfill"
}
},
"autoload": {
"files": [
"bootstrap.php"
],
"psr-4": {
"Symfony\\Polyfill\\Ctype\\": ""
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "Gert de Pagter",
"email": "BackEndTea@gmail.com"
},
{
"name": "Symfony Community",
"homepage": "https://symfony.com/contributors"
}
],
"description": "Symfony polyfill for ctype functions",
"homepage": "https://symfony.com",
"keywords": [
"compatibility",
"ctype",
"polyfill",
"portable"
],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-ctype/tree/v1.19.0"
+ },
"funding": [
{
"url": "https://symfony.com/sponsor",
"type": "custom"
},
{
"url": "https://github.com/fabpot",
"type": "github"
},
{
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
"type": "tidelift"
}
],
"time": "2020-10-23T09:01:57+00:00"
},
{
"name": "symfony/yaml",
"version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "02c1859112aa779d9ab394ae4f3381911d84052b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/02c1859112aa779d9ab394ae4f3381911d84052b",
"reference": "02c1859112aa779d9ab394ae4f3381911d84052b",
"shasum": ""
},
"require": {
"php": ">=5.3.9",
"symfony/polyfill-ctype": "~1.8"
},
"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",
+ "support": {
+ "source": "https://github.com/symfony/yaml/tree/v2.8.52"
+ },
"time": "2018-11-11T11:18:13+00:00"
+ },
+ {
+ "name": "yoast/phpunit-polyfills",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Yoast/PHPUnit-Polyfills.git",
+ "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/224e4a1329c03d8bad520e3fc4ec980034a4b212",
+ "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0"
+ },
+ "require-dev": {
+ "yoast/yoastcs": "^2.3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "2.x-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "phpunitpolyfills-autoload.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Team Yoast",
+ "email": "support@yoast.com",
+ "homepage": "https://yoast.com"
+ },
+ {
+ "name": "Contributors",
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills/graphs/contributors"
+ }
+ ],
+ "description": "Set of polyfills for changed PHPUnit functionality to allow for creating PHPUnit cross-version compatible tests",
+ "homepage": "https://github.com/Yoast/PHPUnit-Polyfills",
+ "keywords": [
+ "phpunit",
+ "polyfill",
+ "testing"
+ ],
+ "support": {
+ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues",
+ "source": "https://github.com/Yoast/PHPUnit-Polyfills"
+ },
+ "time": "2023-08-19T14:25:08+00:00"
}
],
"aliases": [],
"minimum-stability": "stable",
"stability-flags": {
+ "mtdowling/cron-expression": 20,
"aik099/coding-standard": 20
},
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
- "php": ">=5.3.7"
+ "php": ">=5.6"
},
"platform-dev": [],
- "plugin-api-version": "1.1.0"
+ "platform-overrides": {
+ "php": "5.6"
+ },
+ "plugin-api-version": "2.2.0"
}
Index: branches/5.3.x/core/install/cache/class_structure.php
===================================================================
--- branches/5.3.x/core/install/cache/class_structure.php (revision 16799)
+++ branches/5.3.x/core/install/cache/class_structure.php (revision 16800)
@@ -1,2668 +1,2701 @@
<?php
// @codingStandardsIgnoreFile
/**
* This file is automatically @generated. Please use 'in-portal classmap:rebuild' command to rebuild it.
*/
return array(
'cache_format' => 2,
'classes' => array(
+ 'AbstractBrowserTestCase' => '/core/tests/AbstractBrowserTestCase.php',
'AbstractCategoryItemRouter' => '/core/kernel/utility/Router/AbstractCategoryItemRouter.php',
'AbstractReviewRouter' => '/core/kernel/utility/Router/AbstractReviewRouter.php',
'AbstractRouter' => '/core/kernel/utility/Router/AbstractRouter.php',
+ 'AbstractTestCase' => '/core/tests/AbstractTestCase.php',
'AdminEventsHandler' => '/core/units/admin/admin_events_handler.php',
'AdminTagProcessor' => '/core/units/admin/admin_tag_processor.php',
'AjaxFormHelper' => '/core/units/helpers/ajax_form_helper.php',
'ApcCacheHandler' => '/core/kernel/utility/cache.php',
'BackupHelper' => '/core/units/helpers/backup_helper.php',
'BaseSession' => '/core/kernel/session/session.php',
'BaseSessionStorage' => '/core/kernel/session/session_storage.php',
'CacheSettings' => '/core/kernel/startup.php',
'CaptchaEventHandler' => '/core/units/captcha/captcha_eh.php',
'CategoriesEventHandler' => '/core/units/categories/categories_event_handler.php',
'CategoriesItem' => '/core/units/categories/categories_item.php',
'CategoriesTagProcessor' => '/core/units/categories/categories_tag_processor.php',
'CategoryHelper' => '/core/units/helpers/category_helper.php',
'CategoryItemsEventHandler' => '/core/units/category_items/category_items_event_handler.php',
'CategoryItemsTagProcessor' => '/core/units/category_items/category_items_tag_processor.php',
'CategoryPermissionRebuild' => '/core/kernel/constants.php',
'ChangeLog' => '/core/kernel/constants.php',
'ChangeLogEventHandler' => '/core/units/logs/change_logs/change_log_eh.php',
'ChangeLogTagProcessor' => '/core/units/logs/change_logs/change_log_tp.php',
'ColumnSet' => '/core/units/helpers/col_picker_helper.php',
'ConfigSearchEventHandler' => '/core/units/config_search/config_search_event_handler.php',
'ConfigSearchTagProcessor' => '/core/units/config_search/config_search_tag_processor.php',
'ConfigurationEventHandler' => '/core/units/configuration/configuration_event_handler.php',
'ConfigurationItem' => '/core/units/configuration/configuration.php',
'ConfigurationTagProcessor' => '/core/units/configuration/configuration_tag_processor.php',
'ConfigurationValidator' => '/core/units/configuration/configuration_validator.php',
'ContentEventHandler' => '/core/units/content/content_eh.php',
'ContentTagProcessor' => '/core/units/content/content_tp.php',
'CookieManager' => '/core/kernel/managers/cookie_manager.php',
'CoreUpgrades' => '/core/install/upgrades.php',
'CountryStateEventHandler' => '/core/units/country_states/country_state_eh.php',
'CssMinifyHelper' => '/core/units/helpers/minifiers/css_minify_helper.php',
'CustomDataEventHandler' => '/core/units/custom_data/custom_data_event_handler.php',
'CustomFieldsEventHandler' => '/core/units/custom_fields/custom_fields_event_handler.php',
'CustomFieldsTagProcessor' => '/core/units/custom_fields/custom_fields_tag_processor.php',
'Debugger' => '/core/kernel/utility/debugger.php',
'DebuggerUtil' => '/core/kernel/utility/debugger.php',
'DeploymentHelper' => '/core/units/helpers/deployment_helper.php',
'DraftEventHandler' => '/core/units/forms/drafts/draft_eh.php',
'EditPickerHelper' => '/core/units/helpers/controls/edit_picker_helper.php',
'EmailDelivery' => '/core/kernel/constants.php',
'EmailLogEventHandler' => '/core/units/logs/email_logs/email_log_eh.php',
'EmailLogStatus' => '/core/kernel/constants.php',
'EmailLogTagProcessor' => '/core/units/logs/email_logs/email_log_tp.php',
'EmailQueueEventHandler' => '/core/units/email_queue/email_queue_eh.php',
'EmailQueueTagProcessor' => '/core/units/email_queue/email_queue_tp.php',
'EmailTemplate' => '/core/kernel/constants.php',
'EmailTemplateEventHandler' => '/core/units/email_templates/email_template_eh.php',
'EmailTemplateTagProcessor' => '/core/units/email_templates/email_template_tp.php',
'FakeCacheHandler' => '/core/kernel/utility/cache.php',
'FavoritesEventHandler' => '/core/units/favorites/favorites_eh.php',
'FckEventHandler' => '/core/units/fck/fck_eh.php',
'FckTagProcessor' => '/core/units/fck/fck_tp.php',
'FileEventHandler' => '/core/units/files/file_eh.php',
'FileHelper' => '/core/units/helpers/file_helper.php',
'FileTagProcessor' => '/core/units/files/file_tp.php',
'FormFieldEventHandler' => '/core/units/forms/form_fields/form_field_eh.php',
'FormFieldsTagProcessor' => '/core/units/forms/form_fields/form_fields_tp.php',
'FormSubmissionHelper' => '/core/units/helpers/form_submission_helper.php',
'FormSubmissionTagProcessor' => '/core/units/forms/form_submissions/form_submission_tp.php',
'FormSubmissionsEventHandler' => '/core/units/forms/form_submissions/form_submissions_eh.php',
'FormsEventHandler' => '/core/units/forms/forms/forms_eh.php',
'FormsTagProcessor' => '/core/units/forms/forms/forms_tp.php',
'GeoCodeHelper' => '/core/units/helpers/geocode_helper.php',
'GroupTagProcessor' => '/core/units/groups/group_tp.php',
'GroupsEventHandler' => '/core/units/groups/groups_event_handler.php',
'IDBConnection' => '/core/kernel/db/i_db_connection.php',
'ImageEventHandler' => '/core/units/images/image_event_handler.php',
'ImageHelper' => '/core/units/helpers/image_helper.php',
'ImageTagProcessor' => '/core/units/images/image_tag_processor.php',
'ImagesItem' => '/core/units/images/images.php',
'InPortalPrerequisites' => '/core/install/prerequisites.php',
'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand' => '/core/kernel/Console/Command/AbstractCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\BuildClassMapCommand' => '/core/kernel/Console/Command/BuildClassMapCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\CompletionCommand' => '/core/kernel/Console/Command/CompletionCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\IConsoleCommand' => '/core/kernel/Console/Command/IConsoleCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\ResetCacheCommand' => '/core/kernel/Console/Command/ResetCacheCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\RunEventCommand' => '/core/kernel/Console/Command/RunEventCommand.php',
'InPortal\\Core\\kernel\\Console\\Command\\RunScheduledTaskCommand' => '/core/kernel/Console/Command/RunScheduledTaskCommand.php',
'InPortal\\Core\\kernel\\Console\\ConsoleApplication' => '/core/kernel/Console/ConsoleApplication.php',
'InPortal\\Core\\kernel\\Console\\ConsoleCommandProvider' => '/core/kernel/Console/ConsoleCommandProvider.php',
'InPortal\\Core\\kernel\\Console\\ConsoleIO' => '/core/kernel/Console/ConsoleIO.php',
'InPortal\\Core\\kernel\\Console\\IConsoleCommandProvider' => '/core/kernel/Console/IConsoleCommandProvider.php',
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => '/core/kernel/utility/ClassDiscovery/ClassDetector.php',
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => '/core/kernel/utility/ClassDiscovery/ClassMapBuilder.php',
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => '/core/kernel/utility/ClassDiscovery/CodeFolderFilterIterator.php',
'InpCustomFieldsHelper' => '/core/units/helpers/custom_fields_helper.php',
'ItemFilterEventHandler' => '/core/units/filters/item_filter_eh.php',
'ItemFilterTagProcessor' => '/core/units/filters/item_filter_tp.php',
'JSONHelper' => '/core/units/helpers/json_helper.php',
'JsMinifyHelper' => '/core/units/helpers/minifiers/js_minify_helper.php',
'Language' => '/core/kernel/constants.php',
'LanguageImportHelper' => '/core/units/helpers/language_import_helper.php',
'LanguagesEventHandler' => '/core/units/languages/languages_event_handler.php',
'LanguagesItem' => '/core/units/languages/languages_item.php',
'LanguagesTagProcessor' => '/core/units/languages/languages_tag_processor.php',
'LeftJoinOptimizer' => '/core/kernel/db/dblist.php',
'ListHelper' => '/core/units/helpers/list_helper.php',
'LoginResult' => '/core/kernel/constants.php',
'MInputHelper' => '/core/units/helpers/controls/minput_helper.php',
'MailboxHelper' => '/core/units/helpers/mailbox_helper.php',
'MailingList' => '/core/kernel/constants.php',
'MailingListEventHandler' => '/core/units/mailing_lists/mailing_list_eh.php',
'MailingListHelper' => '/core/units/helpers/mailing_list_helper.php',
'MailingListTagProcessor' => '/core/units/mailing_lists/mailing_list_tp.php',
'MainRouter' => '/core/units/general/MainRouter.php',
'MaintenanceMode' => '/core/kernel/startup.php',
'MassImageResizer' => '/core/units/admin/admin_events_handler.php',
'MemcacheCacheHandler' => '/core/kernel/utility/cache.php',
'MenuHelper' => '/core/units/helpers/menu_helper.php',
'MimeDecodeHelper' => '/core/units/helpers/mime_decode_helper.php',
'MinifyHelper' => '/core/units/helpers/minifiers/minify_helper.php',
'ModuleDeploymentLog' => '/core/kernel/constants.php',
'ModuleDeploymentLogEventHandler' => '/core/units/logs/module_deployment_logs/module_deployment_log_eh.php',
'ModulesEventHandler' => '/core/units/modules/modules_event_handler.php',
'ModulesTagProcessor' => '/core/units/modules/modules_tag_processor.php',
'NParser' => '/core/kernel/nparser/nparser.php',
'NParserCompiler' => '/core/kernel/nparser/compiler.php',
'POP3Helper' => '/core/units/helpers/pop3_helper.php',
+ 'Page' => '/core/kernel/tests/Page/Page.php',
'PageHelper' => '/core/units/helpers/page_helper.php',
'PageRevisionEventHandler' => '/core/units/page_revisions/page_revision_eh.php',
'PageRevisionTagProcessor' => '/core/units/page_revisions/page_revision_tp.php',
'Params' => '/core/kernel/utility/params.php',
'ParserException' => '/core/kernel/nparser/nparser.php',
'PasswordHash' => '/core/kernel/utility/php_pass.php',
'PasswordHashingMethod' => '/core/kernel/constants.php',
'PermissionTypeEventHandler' => '/core/units/permission_types/permission_type_eh.php',
'PermissionsEventHandler' => '/core/units/permissions/permissions_event_handler.php',
'PermissionsTagProcessor' => '/core/units/permissions/permissions_tag_processor.php',
'PhraseTagProcessor' => '/core/units/phrases/phrase_tp.php',
'PhrasesEventHandler' => '/core/units/phrases/phrases_event_handler.php',
'PriorityEventHandler' => '/core/units/priorites/priority_eh.php',
'ProcessBuilder' => '/core/kernel/utility/ProcessBuilder.php',
'PromoBlockEventHandler' => '/core/units/promo_blocks/promo_block_eh.php',
'PromoBlockGroupEventHandler' => '/core/units/promo_block_groups/promo_block_group_eh.php',
'PromoBlockGroupTagProcessor' => '/core/units/promo_block_groups/promo_block_group_tp.php',
'PromoBlockTagProcessor' => '/core/units/promo_blocks/promo_block_tp.php',
'PromoBlockType' => '/core/kernel/constants.php',
+ 'QAToolsUrlBuilder' => '/core/kernel/tests/Url/QAToolsUrlBuilder.php',
+ 'QAToolsUrlFactory' => '/core/kernel/tests/Url/QAToolsUrlFactory.php',
'RatingHelper' => '/core/units/helpers/rating_helper.php',
'RelatedSearchEventHandler' => '/core/units/related_searches/related_searches_event_handler.php',
'RelatedSearchTagProcessor' => '/core/units/related_searches/related_searches_tag_processor.php',
'RelationshipEventHandler' => '/core/units/relationship/relationship_event_handler.php',
'RelationshipTagProcessor' => '/core/units/relationship/relationship_tp.php',
'ReviewsEventHandler' => '/core/units/reviews/reviews_event_handler.php',
'ReviewsTagProcessor' => '/core/units/reviews/reviews_tag_processor.php',
'ScheduledTask' => '/core/kernel/constants.php',
'ScheduledTaskEventHandler' => '/core/units/scheduled_tasks/scheduled_task_eh.php',
'SecurityEncrypter' => '/core/kernel/security/SecurityEncrypter.php',
'SecurityGenerator' => '/core/kernel/security/SecurityGenerator.php',
'SecurityGeneratorPromise' => '/core/kernel/security/SecurityGeneratorPromise.php',
'SelectorsEventHandler' => '/core/units/selectors/selectors_event_handler.php',
'SelectorsItem' => '/core/units/selectors/selectors_item.php',
'SelectorsTagProcessor' => '/core/units/selectors/selectors_tag_processor.php',
'Session' => '/core/kernel/session/inp_session.php',
'SessionLogEventHandler' => '/core/units/logs/session_logs/session_log_eh.php',
'SessionStorage' => '/core/kernel/session/inp_session_storage.php',
'SiteConfigEventHandler' => '/core/units/sections/site_config_eh.php',
'SiteConfigHelper' => '/core/units/helpers/site_config_helper.php',
'SiteConfigTagProcessor' => '/core/units/sections/site_config_tp.php',
'SiteDomainEventHandler' => '/core/units/site_domains/site_domain_eh.php',
'SiteHelper' => '/core/units/helpers/site_helper.php',
'SkinEventHandler' => '/core/units/skins/skin_eh.php',
'SkinHelper' => '/core/units/helpers/skin_helper.php',
'SpamHelper' => '/core/units/helpers/spam_helper.php',
'SpamReportEventHandler' => '/core/units/spam_reports/spam_report_eh.php',
'SpamReportTagProcessor' => '/core/units/spam_reports/spam_report_tp.php',
'StatisticsEventHandler' => '/core/units/statistics/statistics_event_handler.php',
'StatisticsTagProcessor' => '/core/units/statistics/statistics_tag_processor.php',
'StorageEngine' => '/core/kernel/constants.php',
'StylesheetsEventHandler' => '/core/units/stylesheets/stylesheets_event_handler.php',
'StylesheetsItem' => '/core/units/stylesheets/stylesheets_item.php',
'SubmissionFormField' => '/core/kernel/constants.php',
'SubmissionLogEventHandler' => '/core/units/forms/submission_log/submission_log_eh.php',
'SubmissionLogTagProcessor' => '/core/units/forms/submission_log/submission_log_tp.php',
'SystemEventSubscriptionEventHandler' => '/core/units/system_event_subscriptions/system_event_subscription_eh.php',
'SystemEventSubscriptionTagProcessor' => '/core/units/system_event_subscriptions/system_event_subscription_tp.php',
'SystemLogEventHandler' => '/core/units/logs/system_logs/system_log_eh.php',
'SystemLogTagProcessor' => '/core/units/logs/system_logs/system_log_tp.php',
'TemplateHelper' => '/core/units/helpers/template_helper.php',
'TemplatesCache' => '/core/kernel/nparser/template_cache.php',
'ThemeFileEventHandler' => '/core/units/theme_files/theme_file_eh.php',
'ThemeItem' => '/core/units/themes/theme_item.php',
'ThemesEventHandler' => '/core/units/themes/themes_eh.php',
'ThemesTagProcessor' => '/core/units/themes/themes_tag_processor.php',
'ThesaurusEventHandler' => '/core/units/thesaurus/thesaurus_eh.php',
'ThesaurusTagProcessor' => '/core/units/thesaurus/thesaurus_tp.php',
'TranslationSaveMode' => '/core/kernel/constants.php',
'TranslatorEventHandler' => '/core/units/translator/translator_event_handler.php',
'TranslatorTagProcessor' => '/core/units/translator/translator_tp.php',
'UnitConfigDecorator' => '/core/units/admin/admin_events_handler.php',
'UserGroupsEventHandler' => '/core/units/user_groups/user_groups_eh.php',
'UserHelper' => '/core/units/helpers/user_helper.php',
'UserProfileEventHandler' => '/core/units/user_profile/user_profile_eh.php',
'UserProfileTagProcessor' => '/core/units/user_profile/user_profile_tp.php',
'UserType' => '/core/kernel/constants.php',
'UsersEventHandler' => '/core/units/users/users_event_handler.php',
'UsersItem' => '/core/units/users/users_item.php',
'UsersSyncronize' => '/core/units/users/users_syncronize.php',
'UsersSyncronizeManager' => '/core/units/users/users_syncronize.php',
'UsersTagProcessor' => '/core/units/users/users_tag_processor.php',
'VisitsEventHandler' => '/core/units/visits/visits_event_handler.php',
'VisitsList' => '/core/units/visits/visits_list.php',
'VisitsTagProcessor' => '/core/units/visits/visits_tag_processor.php',
'XCacheCacheHandler' => '/core/kernel/utility/cache.php',
'XMLIterator' => '/core/units/helpers/xml_helper5.php',
'_BlockTag' => '/core/kernel/nparser/ntags.php',
'_Tag_Cache' => '/core/kernel/nparser/ntags.php',
'_Tag_Capture' => '/core/kernel/nparser/ntags.php',
'_Tag_Comment' => '/core/kernel/nparser/ntags.php',
'_Tag_Compress' => '/core/kernel/nparser/ntags.php',
'_Tag_DefaultParam' => '/core/kernel/nparser/ntags.php',
'_Tag_DefineElement' => '/core/kernel/nparser/ntags.php',
'_Tag_If' => '/core/kernel/nparser/ntags.php',
'_Tag_IfDataExists' => '/core/kernel/nparser/ntags.php',
'_Tag_IfNot' => '/core/kernel/nparser/ntags.php',
'_Tag_Include' => '/core/kernel/nparser/ntags.php',
'_Tag_Param' => '/core/kernel/nparser/ntags.php',
'_Tag_RenderElement' => '/core/kernel/nparser/ntags.php',
'_Tag_RenderElements' => '/core/kernel/nparser/ntags.php',
'_Tag_SetParam' => '/core/kernel/nparser/ntags.php',
'clsCachedPermissions' => '/core/units/categories/cache_updater.php',
'clsRecursionStack' => '/core/units/categories/cache_updater.php',
'fckFCKHelper' => '/core/units/helpers/fck_helper.php',
'kApplication' => '/core/kernel/application.php',
'kArray' => '/core/kernel/utility/params.php',
'kBase' => '/core/kernel/kbase.php',
'kBracketsHelper' => '/core/units/helpers/brackets_helper.php',
'kCCDateFormatter' => '/core/kernel/utility/formatters/ccdate_formatter.php',
'kCSSDefaults' => '/core/units/pdf/css_defaults.php',
'kCSVHelper' => '/core/units/helpers/csv_helper.php',
'kCache' => '/core/kernel/utility/cache.php',
'kCacheHandler' => '/core/kernel/utility/cache.php',
'kCacheManager' => '/core/kernel/managers/cache_manager.php',
'kCaptchaHelper' => '/core/units/helpers/captcha_helper.php',
'kCatDBEventHandler' => '/core/kernel/db/cat_event_handler.php',
'kCatDBItem' => '/core/kernel/db/cat_dbitem.php',
'kCatDBItemExportHelper' => '/core/units/helpers/cat_dbitem_export_helper.php',
'kCatDBList' => '/core/kernel/db/cat_dblist.php',
'kCatDBTagProcessor' => '/core/kernel/db/cat_tag_processor.php',
'kChangesFormatter' => '/core/units/logs/change_logs/changes_formatter.php',
'kChartHelper' => '/core/units/helpers/chart_helper.php',
'kClipboardHelper' => '/core/units/helpers/clipboard_helper.php',
'kColumnPickerHelper' => '/core/units/helpers/col_picker_helper.php',
'kCountHelper' => '/core/units/helpers/count_helper.php',
'kCountryStatesHelper' => '/core/units/helpers/country_states_helper.php',
- 'kCronField' => '/core/units/helpers/cron_helper.php',
'kCronHelper' => '/core/units/helpers/cron_helper.php',
'kCurlHelper' => '/core/units/helpers/curl_helper.php',
'kCustomFieldFormatter' => '/core/kernel/utility/formatters/customfield_formatter.php',
'kDBBase' => '/core/kernel/kbase.php',
'kDBConnection' => '/core/kernel/db/db_connection.php',
'kDBConnectionDebug' => '/core/kernel/db/db_connection.php',
'kDBEventHandler' => '/core/kernel/db/db_event_handler.php',
'kDBItem' => '/core/kernel/db/dbitem.php',
'kDBList' => '/core/kernel/db/dblist.php',
'kDBLoadBalancer' => '/core/kernel/db/db_load_balancer.php',
'kDBTagProcessor' => '/core/kernel/db/db_tag_processor.php',
'kDateFormatter' => '/core/kernel/utility/formatters/date_formatter.php',
'kEmail' => '/core/kernel/utility/email.php',
'kEmailSendingHelper' => '/core/kernel/utility/email_send.php',
'kEmailTemplateHelper' => '/core/units/helpers/email_template_helper.php',
'kErrorHandlerStack' => '/core/kernel/utility/logger.php',
'kEvent' => '/core/kernel/utility/event.php',
'kEventHandler' => '/core/kernel/event_handler.php',
'kEventManager' => '/core/kernel/event_manager.php',
'kExceptionHandlerStack' => '/core/kernel/utility/logger.php',
'kFactory' => '/core/kernel/utility/factory.php',
'kFactoryException' => '/core/kernel/utility/factory.php',
'kFilenamesHelper' => '/core/units/helpers/filenames_helper.php',
'kFilesizeFormatter' => '/core/kernel/utility/formatters/filesize_formatter.php',
'kFormatter' => '/core/kernel/utility/formatters/formatter.php',
'kHTTPQuery' => '/core/kernel/utility/http_query.php',
'kHandlerStack' => '/core/kernel/utility/logger.php',
'kHelper' => '/core/kernel/kbase.php',
'kHookManager' => '/core/kernel/managers/hook_manager.php',
'kInstallToolkit' => '/core/install/install_toolkit.php',
'kInstallator' => '/core/install.php',
'kLEFTFormatter' => '/core/kernel/utility/formatters/left_formatter.php',
'kLogger' => '/core/kernel/utility/logger.php',
'kMainTagProcessor' => '/core/kernel/processors/main_processor.php',
'kModulesHelper' => '/core/units/helpers/modules_helper.php',
'kMultiLanguage' => '/core/kernel/utility/formatters/multilang_formatter.php',
'kMultiLanguageHelper' => '/core/units/helpers/multilanguage_helper.php',
'kMultipleFilter' => '/core/kernel/utility/filters.php',
'kMySQLQuery' => '/core/kernel/db/db_connection.php',
'kMySQLQueryCol' => '/core/kernel/db/db_connection.php',
'kNavigationBar' => '/core/units/helpers/navigation_bar.php',
'kNoPermissionException' => '/core/kernel/kbase.php',
'kOpenerStack' => '/core/kernel/utility/opener_stack.php',
'kOptionsFormatter' => '/core/kernel/utility/formatters/options_formatter.php',
'kPDFElemFactory' => '/core/units/pdf/pdf_helper.php',
'kPDFElement' => '/core/units/pdf/pdf_helper.php',
'kPDFHelper' => '/core/units/pdf/pdf_helper.php',
'kPDFImage' => '/core/units/pdf/pdf_image.php',
'kPDFLine' => '/core/units/pdf/pdf_helper.php',
'kPDFRenderer' => '/core/units/pdf/pdf_renderer.php',
'kPDFStylesheet' => '/core/units/pdf/pdf_styles.php',
'kPDFTable' => '/core/units/pdf/pdf_table.php',
'kPDFTableRow' => '/core/units/pdf/pdf_table.php',
'kPDFTextElement' => '/core/units/pdf/pdf_text.php',
'kPasswordFormatter' => '/core/kernel/utility/formatters/password_formatter.php',
'kPermCacheUpdater' => '/core/units/categories/cache_updater.php',
'kPermissionsHelper' => '/core/units/helpers/permissions_helper.php',
'kPhraseCache' => '/core/kernel/languages/phrases_cache.php',
'kPictureFormatter' => '/core/kernel/utility/formatters/upload_formatter.php',
'kPlainUrlProcessor' => '/core/kernel/managers/plain_url_processor.php',
'kPriorityHelper' => '/core/units/helpers/priority_helper.php',
'kRecursiveHelper' => '/core/units/helpers/recursive_helper.php',
'kRedirectException' => '/core/kernel/kbase.php',
'kRequestManager' => '/core/kernel/managers/request_manager.php',
'kRewriteUrlProcessor' => '/core/kernel/managers/rewrite_url_processor.php',
'kScheduledTaskManager' => '/core/kernel/managers/scheduled_task_manager.php',
'kSearchHelper' => '/core/units/helpers/search_helper.php',
'kSectionsHelper' => '/core/units/helpers/sections_helper.php',
'kSerializedFormatter' => '/core/kernel/utility/formatters/serialized_formatter.php',
'kSocket' => '/core/kernel/utility/socket.php',
'kSubscriptionAnalyzer' => '/core/units/system_event_subscriptions/system_event_subscription_tp.php',
'kSubscriptionItem' => '/core/kernel/managers/subscription_manager.php',
'kSubscriptionManager' => '/core/kernel/managers/subscription_manager.php',
'kSystemConfig' => '/core/kernel/utility/system_config.php',
'kSystemConfigException' => '/core/kernel/utility/system_config.php',
'kTCPDFRenderer' => '/core/units/pdf/pdf_renderer_tcpdf.php',
'kTagProcessor' => '/core/kernel/processors/tag_processor.php',
'kTempHandlerSubTable' => '/core/kernel/utility/temp_handler.php',
'kTempHandlerTable' => '/core/kernel/utility/temp_handler.php',
'kTempHandlerTopTable' => '/core/kernel/utility/temp_handler.php',
'kTempTablesHandler' => '/core/kernel/utility/temp_handler.php',
'kThemesHelper' => '/core/units/helpers/themes_helper.php',
'kUnitConfig' => '/core/kernel/utility/unit_config.php',
'kUnitConfigCloner' => '/core/kernel/utility/unit_config_cloner.php',
'kUnitConfigReader' => '/core/kernel/utility/unit_config_reader.php',
'kUnitFormatter' => '/core/kernel/utility/formatters/unit_formatter.php',
'kUpgradeHelper' => '/core/install/upgrade_helper.php',
'kUploadFormatter' => '/core/kernel/utility/formatters/upload_formatter.php',
'kUploadHelper' => '/core/units/helpers/upload_helper.php',
'kUploaderException' => '/core/units/helpers/upload_helper.php',
'kUrlManager' => '/core/kernel/managers/url_manager.php',
'kUrlProcessor' => '/core/kernel/managers/url_processor.php',
'kUtil' => '/core/kernel/globals.php',
'kValidator' => '/core/kernel/utility/validator.php',
'kXMLHelper' => '/core/units/helpers/xml_helper.php',
'kXMLNode' => '/core/units/helpers/xml_helper.php',
'kXMLNode5' => '/core/units/helpers/xml_helper5.php',
'kZendPDFRenderer' => '/core/units/pdf/pdf_renderer_zend.php',
'kiCacheable' => '/core/kernel/interfaces/cacheable.php',
),
'class_info' => array(
+ 'AbstractBrowserTestCase' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'aik099\\PHPUnit\\BrowserTestCase',
+ ),
+ ),
'AbstractCategoryItemRouter' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'AbstractRouter',
),
),
'AbstractReviewRouter' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'AbstractRouter',
),
),
'AbstractRouter' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'kBase',
),
),
+ 'AbstractTestCase' => array(
+ 'type' => 1,
+ 'modifiers' => 1,
+ 'extends' => array(
+ 0 => 'PHPUnit\\Framework\\TestCase',
+ ),
+ ),
'AdminEventsHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'AdminTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'AjaxFormHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'ApcCacheHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kCacheHandler',
),
),
'BackupHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'BaseSession' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'BaseSessionStorage' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBBase',
),
),
'CacheSettings' => array(
'type' => 1,
'modifiers' => 0,
),
'CaptchaEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kEventHandler',
),
),
'CategoriesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'CategoriesItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'CategoriesTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'CategoryHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'CategoryItemsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'CategoryItemsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'CategoryPermissionRebuild' => array(
'type' => 1,
'modifiers' => 0,
),
'ChangeLog' => array(
'type' => 1,
'modifiers' => 0,
),
'ChangeLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ChangeLogTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ColumnSet' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'ConfigSearchEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ConfigSearchTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ConfigurationEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ConfigurationItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'ConfigurationTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ConfigurationValidator' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kValidator',
),
),
'ContentEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ContentTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'CookieManager' => array(
'type' => 1,
'modifiers' => 2,
'extends' => array(
0 => 'kBase',
),
),
'CoreUpgrades' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kUpgradeHelper',
),
),
'CountryStateEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'CssMinifyHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'CustomDataEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'CustomFieldsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'CustomFieldsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'Debugger' => array(
'type' => 1,
'modifiers' => 0,
),
'DebuggerUtil' => array(
'type' => 1,
'modifiers' => 0,
),
'DeploymentHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'DraftEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'EditPickerHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'EmailDelivery' => array(
'type' => 1,
'modifiers' => 0,
),
'EmailLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'EmailLogStatus' => array(
'type' => 1,
'modifiers' => 0,
),
'EmailLogTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'EmailQueueEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'EmailQueueTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'EmailTemplate' => array(
'type' => 1,
'modifiers' => 0,
),
'EmailTemplateEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'EmailTemplateTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'FakeCacheHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kCacheHandler',
),
),
'FavoritesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FckEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FckTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'FileEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FileHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'FileTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'FormFieldEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FormFieldsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'FormSubmissionHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'FormSubmissionTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'FormSubmissionsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FormsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'FormsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'GeoCodeHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'GroupTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'GroupsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'IDBConnection' => array(
'type' => 2,
),
'ImageEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ImageHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'ImageTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ImagesItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'InPortalPrerequisites' => array(
'type' => 1,
'modifiers' => 0,
),
'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'Symfony\\Component\\Console\\Command\\Command',
1 => 'InPortal\\Core\\kernel\\Console\\Command\\IConsoleCommand',
2 => 'Stecman\\Component\\Symfony\\Console\\BashCompletion\\Completion\\CompletionAwareInterface',
),
),
'InPortal\\Core\\kernel\\Console\\Command\\BuildClassMapCommand' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand',
),
),
'InPortal\\Core\\kernel\\Console\\Command\\CompletionCommand' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Stecman\\Component\\Symfony\\Console\\BashCompletion\\CompletionCommand',
1 => 'InPortal\\Core\\kernel\\Console\\Command\\IConsoleCommand',
),
),
'InPortal\\Core\\kernel\\Console\\Command\\IConsoleCommand' => array(
'type' => 2,
),
'InPortal\\Core\\kernel\\Console\\Command\\ResetCacheCommand' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand',
),
),
'InPortal\\Core\\kernel\\Console\\Command\\RunEventCommand' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand',
),
),
'InPortal\\Core\\kernel\\Console\\Command\\RunScheduledTaskCommand' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'InPortal\\Core\\kernel\\Console\\Command\\AbstractCommand',
),
),
'InPortal\\Core\\kernel\\Console\\ConsoleApplication' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Symfony\\Component\\Console\\Application',
),
),
'InPortal\\Core\\kernel\\Console\\ConsoleCommandProvider' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'InPortal\\Core\\kernel\\Console\\IConsoleCommandProvider',
),
),
'InPortal\\Core\\kernel\\Console\\ConsoleIO' => array(
'type' => 1,
'modifiers' => 0,
),
'InPortal\\Core\\kernel\\Console\\IConsoleCommandProvider' => array(
'type' => 2,
),
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassDetector' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'PhpParser\\NodeVisitorAbstract',
),
),
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\ClassMapBuilder' => array(
'type' => 1,
'modifiers' => 0,
),
'InPortal\\Core\\kernel\\utility\\ClassDiscovery\\CodeFolderFilterIterator' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'RecursiveFilterIterator',
),
),
'InpCustomFieldsHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'ItemFilterEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ItemFilterTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'JSONHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'JsMinifyHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'Language' => array(
'type' => 1,
'modifiers' => 0,
),
'LanguageImportHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'LanguagesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'LanguagesItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'LanguagesTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'LeftJoinOptimizer' => array(
'type' => 1,
'modifiers' => 0,
),
'ListHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'LoginResult' => array(
'type' => 1,
'modifiers' => 0,
),
'MInputHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'MailboxHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'MailingList' => array(
'type' => 1,
'modifiers' => 0,
),
'MailingListEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'MailingListHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'MailingListTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'MainRouter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'AbstractRouter',
),
),
'MaintenanceMode' => array(
'type' => 1,
'modifiers' => 0,
),
'MassImageResizer' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'MemcacheCacheHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kCacheHandler',
),
),
'MenuHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'MimeDecodeHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'MinifyHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'ModuleDeploymentLog' => array(
'type' => 1,
'modifiers' => 0,
),
'ModuleDeploymentLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ModulesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ModulesTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'NParser' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'NParserCompiler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'POP3Helper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
+ 'Page' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'QATools\\QATools\\HtmlElements\\TypifiedPage',
+ ),
+ ),
'PageHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'PageRevisionEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PageRevisionTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'Params' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'ParserException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Exception',
),
),
'PasswordHash' => array(
'type' => 1,
'modifiers' => 0,
),
'PasswordHashingMethod' => array(
'type' => 1,
'modifiers' => 0,
),
'PermissionTypeEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PermissionsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PermissionsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'PhraseTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'PhrasesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PriorityEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ProcessBuilder' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'PromoBlockEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PromoBlockGroupEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'PromoBlockGroupTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'PromoBlockTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'PromoBlockType' => array(
'type' => 1,
'modifiers' => 0,
),
+ 'QAToolsUrlBuilder' => array(
+ 'type' => 1,
+ 'modifiers' => 2,
+ 'extends' => array(
+ 0 => 'kBase',
+ 1 => 'QATools\\QATools\\PageObject\\Url\\IBuilder',
+ ),
+ ),
+ 'QAToolsUrlFactory' => array(
+ 'type' => 1,
+ 'modifiers' => 0,
+ 'extends' => array(
+ 0 => 'QATools\\QATools\\PageObject\\Url\\IUrlFactory',
+ ),
+ ),
'RatingHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'RelatedSearchEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'RelatedSearchTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'RelationshipEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'RelationshipTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ReviewsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ReviewsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ScheduledTask' => array(
'type' => 1,
'modifiers' => 0,
),
'ScheduledTaskEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SecurityEncrypter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'SecurityGenerator' => array(
'type' => 1,
'modifiers' => 2,
),
'SecurityGeneratorPromise' => array(
'type' => 1,
'modifiers' => 2,
),
'SelectorsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SelectorsItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'SelectorsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'Session' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'BaseSession',
),
),
'SessionLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SessionStorage' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'BaseSessionStorage',
),
),
'SiteConfigEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kEventHandler',
),
),
'SiteConfigHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'SiteConfigTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kTagProcessor',
),
),
'SiteDomainEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SiteHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'SkinEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SkinHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'SpamHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'SpamReportEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SpamReportTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'StatisticsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'StatisticsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'StorageEngine' => array(
'type' => 1,
'modifiers' => 0,
),
'StylesheetsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'StylesheetsItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'SubmissionFormField' => array(
'type' => 1,
'modifiers' => 0,
),
'SubmissionLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SubmissionLogTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'SystemEventSubscriptionEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SystemEventSubscriptionTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'SystemLogEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'SystemLogTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'TemplateHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'TemplatesCache' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'ThemeFileEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ThemeItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'ThemesEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ThemesTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'ThesaurusEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'ThesaurusTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'TranslationSaveMode' => array(
'type' => 1,
'modifiers' => 0,
),
'TranslatorEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'TranslatorTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'UnitConfigDecorator' => array(
'type' => 1,
'modifiers' => 0,
),
'UserGroupsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'UserHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'UserProfileEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'UserProfileTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'UserType' => array(
'type' => 1,
'modifiers' => 0,
),
'UsersEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'UsersItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'UsersSyncronize' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'UsersSyncronizeManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'UsersTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'VisitsEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'VisitsList' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBList',
),
),
'VisitsTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'XCacheCacheHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kCacheHandler',
),
),
'XMLIterator' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Iterator',
),
),
'_BlockTag' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'_Tag_Cache' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_Capture' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_Tag_DefineElement',
),
),
'_Tag_Comment' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_Compress' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_DefaultParam' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_DefineElement' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_If' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_IfDataExists' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_IfNot' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_Tag_If',
),
),
'_Tag_Include' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_Param' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_RenderElement' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_Tag_DefineElement',
),
),
'_Tag_RenderElements' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'_Tag_SetParam' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => '_BlockTag',
),
),
'clsCachedPermissions' => array(
'type' => 1,
'modifiers' => 0,
),
'clsRecursionStack' => array(
'type' => 1,
'modifiers' => 0,
),
'fckFCKHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kApplication' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kiCacheable',
),
),
'kArray' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kBase' => array(
'type' => 1,
'modifiers' => 0,
),
'kBracketsHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCCDateFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kCSSDefaults' => array(
'type' => 1,
'modifiers' => 0,
),
'kCSVHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCache' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kCacheHandler' => array(
'type' => 1,
'modifiers' => 1,
),
'kCacheManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kCaptchaHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCatDBEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBEventHandler',
),
),
'kCatDBItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBItem',
),
),
'kCatDBItemExportHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCatDBList' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBList',
),
),
'kCatDBTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBTagProcessor',
),
),
'kChangesFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kChartHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kClipboardHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kColumnPickerHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCountHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCountryStatesHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
- 'kCronField' => array(
- 'type' => 1,
- 'modifiers' => 0,
- 'extends' => array(
- 0 => 'kBase',
- ),
- ),
'kCronHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCurlHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kCustomFieldFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kDBBase' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'kBase',
),
),
'kDBConnection' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'IDBConnection',
),
),
'kDBConnectionDebug' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBConnection',
),
),
'kDBEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kEventHandler',
),
),
'kDBItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBBase',
),
),
'kDBList' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kDBBase',
1 => 'Iterator',
2 => 'Countable',
),
),
'kDBLoadBalancer' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'IDBConnection',
),
),
'kDBTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kTagProcessor',
),
),
'kDateFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kEmail' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kEmailSendingHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kEmailTemplateHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kErrorHandlerStack' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHandlerStack',
),
),
'kEvent' => array(
'type' => 1,
'modifiers' => 2,
'extends' => array(
0 => 'kBase',
),
),
'kEventHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kEventManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kExceptionHandlerStack' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHandlerStack',
),
),
'kFactory' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kFactoryException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Exception',
),
),
'kFilenamesHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kFilesizeFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kHTTPQuery' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Params',
),
),
'kHandlerStack' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'kBase',
),
),
'kHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kHookManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kInstallToolkit' => array(
'type' => 1,
'modifiers' => 0,
),
'kInstallator' => array(
'type' => 1,
'modifiers' => 0,
),
'kLEFTFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kLogger' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kMainTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kTagProcessor',
),
),
'kModulesHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kMultiLanguage' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kMultiLanguageHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kMultipleFilter' => array(
'type' => 1,
'modifiers' => 0,
),
'kMySQLQuery' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Iterator',
1 => 'Countable',
2 => 'SeekableIterator',
),
),
'kMySQLQueryCol' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kMySQLQuery',
),
),
'kNavigationBar' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kNoPermissionException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kRedirectException',
),
),
'kOpenerStack' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kOptionsFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kPDFElemFactory' => array(
'type' => 1,
'modifiers' => 0,
),
'kPDFElement' => array(
'type' => 1,
'modifiers' => 0,
),
'kPDFHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kPDFImage' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFElement',
),
),
'kPDFLine' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFElement',
),
),
'kPDFRenderer' => array(
'type' => 1,
'modifiers' => 0,
),
'kPDFStylesheet' => array(
'type' => 1,
'modifiers' => 0,
),
'kPDFTable' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFElement',
),
),
'kPDFTableRow' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFElement',
),
),
'kPDFTextElement' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFElement',
),
),
'kPasswordFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kPermCacheUpdater' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kPermissionsHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kPhraseCache' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kPictureFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kUploadFormatter',
),
),
'kPlainUrlProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kUrlProcessor',
),
),
'kPriorityHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kRecursiveHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kRedirectException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Exception',
),
),
'kRequestManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kRewriteUrlProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kUrlProcessor',
),
),
'kScheduledTaskManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kSearchHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kSectionsHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kSerializedFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kSocket' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kSubscriptionAnalyzer' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kSubscriptionItem' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kSubscriptionManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kSystemConfig' => array(
'type' => 1,
'modifiers' => 0,
),
'kSystemConfigException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Exception',
),
),
'kTCPDFRenderer' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFRenderer',
),
),
'kTagProcessor' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kTempHandlerSubTable' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kTempHandlerTable',
),
),
'kTempHandlerTable' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'kBase',
),
),
'kTempHandlerTopTable' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kTempHandlerTable',
),
),
'kTempTablesHandler' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kThemesHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kUnitConfig' => array(
'type' => 1,
'modifiers' => 0,
),
'kUnitConfigCloner' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kUnitConfigReader' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
1 => 'kiCacheable',
),
),
'kUnitFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kUpgradeHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kUploadFormatter' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kFormatter',
),
),
'kUploadHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kUploaderException' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'Exception',
),
),
'kUrlManager' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kUrlProcessor' => array(
'type' => 1,
'modifiers' => 1,
'extends' => array(
0 => 'kBase',
),
),
'kUtil' => array(
'type' => 1,
'modifiers' => 0,
),
'kValidator' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kBase',
),
),
'kXMLHelper' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kHelper',
),
),
'kXMLNode' => array(
'type' => 1,
'modifiers' => 0,
),
'kXMLNode5' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kXMLNode',
1 => 'IteratorAggregate',
),
),
'kZendPDFRenderer' => array(
'type' => 1,
'modifiers' => 0,
'extends' => array(
0 => 'kPDFRenderer',
),
),
'kiCacheable' => array(
'type' => 2,
),
),
);
Index: branches/5.3.x/core/install/prerequisites.php
===================================================================
--- branches/5.3.x/core/install/prerequisites.php (revision 16799)
+++ branches/5.3.x/core/install/prerequisites.php (revision 16800)
@@ -1,246 +1,246 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
$prerequisite_class = 'InPortalPrerequisites';
/**
* Class, that holds all prerequisite scripts for "In-Portal" module
*
*/
class InPortalPrerequisites {
/**
* Install toolkit instance
*
* @var kInstallToolkit
*/
var $_toolkit = null;
/**
* Connection to database
*
* @var IDBConnection
* @access protected
*/
protected $Conn = null;
/**
* Version upgrade rules
*
* @var array
* @access private
*/
private $upgradeRules = Array (
'5.0.0' => Array ('from' => '5.0.0-B1', 'to' => '5.1.0-B1'),
'5.1.0' => Array ('from' => '5.1.0-B1', 'to' => '5.2.0-B1'),
'5.2.0' => Array ('from' => '5.2.0-B1', 'to' => '5.3.0-B1'),
);
/**
* Sets common instance of installator toolkit
*
* @param kInstallToolkit $instance
*/
function setToolkit(&$instance)
{
$this->_toolkit =& $instance;
}
/**
* Checks minimal version, that could be upgradeable
*
* @return IDBConnection
*/
function getConnection()
{
return $this->_toolkit->Conn;
}
/**
* Checks minimal version, that could be upgradeable
*
* @param Array $versions
* @param string $mode when called mode {install, upgrade, standalone)
* @return Array
*/
function CheckPrerequisites($versions, $mode)
{
$errors = Array ();
if ( $mode == 'upgrade' ) {
$sql = 'SELECT Version
FROM ' . TABLE_PREFIX . 'Modules
WHERE Name = "In-Portal"';
$inportal_version = $this->getConnection()->GetOne($sql);
if ( $inportal_version === false ) {
// only, when In-Portal was installed (below 4.3.x)
return $errors;
}
$min_version = '4.3.1'; // K4-based installator was created, that no longer maintained old upgrade scripts
if ( version_compare($inportal_version, $min_version, '<') ) {
$errors[] = 'Please upgrade "In-Portal" to version ' . $min_version . ' first';
}
// example: to upgrade to 5.1.0-B1 or more you at least need to have 5.0.0 installed
foreach ($this->upgradeRules as $min_version => $version_rules) {
if ( version_compare($versions[0], $version_rules['from'], '<') && version_compare($versions[1], $version_rules['to'], '>=') ) {
$errors[] = 'Please upgrade "In-Portal" to version ' . $min_version . ' first';
break;
}
}
}
return $errors;
}
/**
* Returns information about system requirements
*
* @return array
*/
function CheckSystemRequirements()
{
$ret = Array ();
- $ret['php_version'] = version_compare(PHP_VERSION, '5.3.9', '>=');
+ $ret['php_version'] = version_compare(PHP_VERSION, '5.6', '>=');
if ( function_exists('apache_get_modules') ) {
$mod_rewrite = in_array('mod_rewrite', apache_get_modules());
}
else {
$mod_rewrite = getenv('HTTP_MOD_REWRITE') == 'On';
}
$ret['url_rewriting'] = $mod_rewrite;
$ret['memcache'] = class_exists('Memcache');
$ret['curl'] = function_exists('curl_init');
$ret['simplexml'] = function_exists('simplexml_load_string');
$ret['spl'] = function_exists('spl_autoload_register');
$ret['freetype'] = function_exists('imagettfbbox');
$ret['gd_version'] = false;
if ( function_exists('gd_info') ) {
$gd_info = gd_info();
$gd_version = preg_replace('/[^\d.]/', '', $gd_info['GD Version']);
$ret['gd_version'] = version_compare($gd_version, '1.8', '>=');
}
$ret['jpeg'] = function_exists('imagecreatefromjpeg');
$ret['mysql'] = function_exists('mysqli_connect');
$ret['json'] = function_exists('json_encode');
// Unable to properly use "SecurityEncrypter::cipherAvailable" method, because no factory here.
$ret['openssl'] = function_exists('openssl_encrypt') && in_array('aes-128-cbc', openssl_get_cipher_methods(), true);
$output = shell_exec('java -version 2>&1');
$ret['java'] = stripos($output, 'java version') !== false;
$ret['composer'] = file_exists(FULL_PATH . '/vendor/autoload.php');
$ret['memory_limit'] = $this->isPhpSettingChangeable('memory_limit', '33M');
$ret['display_errors'] = $this->isPhpSettingChangeable('display_errors', '1');
$ret['error_reporting'] = $this->canChangeErrorReporting();
$ret['date.timezone'] = ini_get('date.timezone') != '';
$ret['variables_order'] = $this->_hasLetters(ini_get('variables_order'), Array ('G', 'P', 'C', 'S'));
$output_buffering = strtolower(ini_get('output_buffering'));
$ret['output_buffering'] = $output_buffering == 'on' || $output_buffering > 0;
return $ret;
}
/**
* Determines of a setting string has all given letters (ignoring order) in it
*
* @param string $setting
* @param Array $search_letters
* @return bool
* @access protected
*/
protected function _hasLetters($setting, $search_letters)
{
$setting = preg_replace('/(' . implode('|', $search_letters) . ')/', '*', $setting);
return substr_count($setting, '*') == count($search_letters);
}
/**
* Detects if error reporting can be changed at runtime
*
* @return bool
* @access protected
*/
protected function canChangeErrorReporting()
{
$old_value = error_reporting(E_PARSE);
$new_value = error_reporting();
if ( $new_value == E_PARSE ) {
error_reporting($old_value);
return true;
}
return false;
}
/**
* Detects if setting of php.ini can be changed
*
* @param string $setting_name
* @param string $new_value
* @return bool
*/
protected function isPhpSettingChangeable($setting_name, $new_value)
{
$old_value = ini_get($setting_name);
if ( ini_set($setting_name, $new_value) === false ) {
return false;
}
ini_set($setting_name, $old_value);
return true;
}
/**
* Returns information about DB requirements
*
* @return array
*/
function CheckDBRequirements()
{
// check PHP version 5.2+
$ret = Array();
$sql = 'SELECT VERSION()';
$conn = $this->getConnection();
$db_version = preg_replace('/[^\d.]/', '', $conn->GetOne($sql));
$ret['version'] = version_compare($db_version, '5.0', '>=');
$sql = 'SHOW VARIABLES LIKE "max_allowed_packet"';
$db_variables = $conn->Query($sql, 'Variable_name');
$ret['packet_size'] = $db_variables['max_allowed_packet']['Value'] >= 1048576;
return $ret;
}
}
Index: branches/5.3.x/core/install/step_templates/sys_requirements.tpl
===================================================================
--- branches/5.3.x/core/install/step_templates/sys_requirements.tpl (revision 16799)
+++ branches/5.3.x/core/install/step_templates/sys_requirements.tpl (revision 16800)
@@ -1,73 +1,73 @@
<?php
$heading_tpl = '
<tr class="subsectiontitle">
<td class="text" colspan="2" style="border-top: 1px solid #000000; border-bottom: 1px solid #000000;">%s</td>
</tr>';
$error_tpl = '
<tr class="table-color2">
<td class="text">%s</td>
<td align="center" width="30">%s</td>
</tr>';
$check_titles = Array (
- 'php_version' => 'PHP version 5.3.9 or above<span class="error">*</span>',
+ 'php_version' => 'PHP version 5.6 or above<span class="error">*</span>',
'url_rewriting' => 'URL rewriting support',
'java' => 'Java template compression',
'composer' => 'Dependencies via Composer<span class="error">*</span>',
'sep1' => '<strong>PHP extensions:</strong>',
'memcache' => '- Memory caching support',
'curl' => '- Accessing remote resources (via cURL)<span class="error">*</span>',
'simplexml' => '- XML document processing (via SimpleXML)<span class="error">*</span>',
'spl' => '- Standard PHP Library (SPL)<span class="error">*</span>',
'freetype' => '- TrueType font support (via Freetype)<span class="error">*</span>',
'gd_version' => '- GD Graphics Library 1.8 or above<span class="error">*</span>',
'jpeg' => '- JPEG images support<span class="error">*</span>',
'mysql' => '- Database connectivity (via MySQL)<span class="error">*</span>',
'json' => '- JSON processing support<span class="error">*</span>',
'openssl' => '- OpenSSL support<span class="error">*</span>',
'sep2' => '<strong>PHP settings:</strong>',
'memory_limit' => "- Memory requirements changing on the fly",
'display_errors' => "- Prevent script errors in production environment",
'error_reporting' => "- Change error detalization level",
'date.timezone' => "- Web server timezone is explicitly set<span class=\"error\">*</span>",
'variables_order' => '- Needed super-global arrays registered',
'output_buffering' => "- Script output buffering enabled<span class=\"error\">*</span>",
);
$output = sprintf($heading_tpl, '<strong>Server-side requirements</strong>');
$check_results = $this->toolkit->CallPrerequisitesMethod('core/', 'CheckSystemRequirements');
foreach ($check_titles AS $key => $title) {
if ( substr($key, 0, 3) == 'sep' ) {
$check_result = '';
}
else {
$check_result = $check_results[$key] ? '[<span style="color:green;">PASSED</span>]' : '[<span class="error">FAILED</span>]';
}
$output .= sprintf($error_tpl, $title, $check_result);
}
$output .= sprintf($heading_tpl, '<strong>Client-side requirements</strong>', 'text');
$output .= sprintf($error_tpl, 'Cookies enabled', '[<span class="error" id="cookies_enabled_mark">FAILED</span>]');
$output .= sprintf($error_tpl, 'JavaScript enabled', '[<span class="error" id="js_enabled_mark">FAILED</span>]');
$output .= '<input type="hidden" name="js_enabled" id="js_enabled" value="0"/>';
$output .= '<input type="hidden" name="cookies_enabled" id="cookies_enabled" value="0"/>';
$output .= "<script type='text/javascript'>
\$('#js_enabled').val(1);
\$('#js_enabled_mark').removeClass('error').css('color', 'green').html('PASSED');
document.cookie = 'install_cookie_test=1';
var \$cookies_enabled = document.cookie.indexOf('install_cookie_test') != -1;
if ( \$cookies_enabled ) {
\$('#cookies_enabled').val(1);
\$('#cookies_enabled_mark').removeClass('error').css('color', 'green').html('PASSED');
}
</script>";
echo $output;
?>
Index: branches/5.3.x/core/install/steps_db.xml
===================================================================
--- branches/5.3.x/core/install/steps_db.xml (revision 16799)
+++ branches/5.3.x/core/install/steps_db.xml (revision 16800)
@@ -1,339 +1,339 @@
<steps>
<step name="clean_db" title="Clean Database">
<![CDATA[missing step description]]>
</step>
<step name="db_config" title="Database Configuration">
<![CDATA[<p><b><i>Database Hostname</i></b> - IP or hostname of your database server (normally <i>"localhost"</i>).</p>
<p><b><i>Database Name</i></b> - name of the database where In-Portal will be installed.</p>
<p><b><i>Database User Name</i></b> - name of the user for selected database.</p>
<p><b><i>Database User Password</i></b> - password for selected username.</p>
<p><b><i>Database Collation</i></b> - character set used to store data in text fields (normally <i>"utf8_general_ci"</i>).</p>
<p><b><i>Prefix for Table Names</i></b> - specified when multiple scripts will be run in the same database.
Prefix can be any text string allowed in table naming by your database engine (normally <i>"inp_"</i>).</p>
<p><b><i>Use existing In-Portal installation setup in this Database</i></b> - select <i>"Yes"</i>
if you already have In-Portal installed in this database and want to use it. Select <i>"No"</i> in all other cases.</p>
]]>
</step>
<step name="select_license" title="Select License" help_title="License Configuration">
<![CDATA[<p><b>In-Portal is an Open Source</b> object-oriented framework that is developed in PHP
and provides a quick and easy way to build websites and web applications.</p>
<p>In-Portal is copyrighted and distributed under <a href="http://www.in-portal.org/license" target="_blank">GPLv2 license</a>.</p>
<p><b><i>GPL / Open Source License</i></b> - by downloading and installing In-Portal
under GPLv2 license you understand and agree to all terms of the
<a href="http://www.in-portal.org/license" target="_blank">GPLv2 license</a>.</p>
<p><b><i>Upload License File</i></b> - if you have obtained Commercial
<a href="http://www.in-portal.com/features-modules.html" target="_blank">Modules</a>
or <a href="http://www.in-portal.com/support-downloads/customer-support.html" target="_blank">Support</a>
from Intechnic you will be provided with a license file, upload it here.</p>
<!--
<p><b><i>Download from Intechnic Servers</i></b> - .</p>
-->
<p><b><i>Use Existing License</i></b> - if a valid license has been detected on your server,
you can choose this option and continue the installation process.</p>]]>
</step>
<step name="download_license" title="Download License" help_title="Download License from Intechnic">
<![CDATA[<p><b>In-Portal is an Open Source</b> object-oriented framework that is developed in PHP
and provides a quick and easy way to build websites and web applications.</p>
<p>In-Portal is copyrighted and distributed under <a href="http://www.in-portal.org/license" target="_blank">GPLv2 license</a>.</p>
<p><b><i>GPL / Open Source License</i></b> - by downloading and installing In-Portal
under GPLv2 license you understand and agree to all terms of
<a href="http://www.in-portal.org/license" target="_blank">GPLv2 license</a>.</p>
<p><b><i>Download from Intechnic Servers</i></b> - if you have obtained Commercial
<a href="http://www.in-portal.com/features-modules.html" target="_blank">Modules</a>
or <a href="http://www.in-portal.com/support-downloads/customer-support.html" target="_blank">Support</a>
from Intechnic you will be provided with a license, specify your Username and Password in order to download the license.</p>]]>
</step>
<step name="select_domain" title="Select Domain" help_title="Select Licensed Domain">
<![CDATA[<p>Select the domain you wish to install In-Portal on.</p>
<p>The <i>Other</i> option can be used to install In-Portal other custom domains. Note that your web server should match entered domain name.</p>]]>
</step>
<step name="root_password" title="Set Root Password" help_title="Set Admin Root Password">
<![CDATA[<p>The <b>Root Password</b> is initially required to access the Admin Console of In-Portal.
The root user can <b>NOT</b> be used to access the Front-end of your In-Portal website.</p>
<p>Once installation is completed it's highly recommented to create additional users with admin privlidges.</p>]]>
</step>
<step name="choose_modules" title="Modules to Install">
<![CDATA[<p>Current step lists all <b>In-Portal Modules</b> that were found on your server and can be installed now.</p>
<p>Additional <a href="http://www.in-portal.com/features-modules.html" target="_blank">In-Portal Modules</a> can be found and downloaded <a href="http://www.in-portal.com/features-modules.html" target="_blank">here</a>.</p>
<p>While <a href="http://www.in-portal.com/features-modules.html" target="_blank">In-Portal Community</a> constantly works on improving In-Portal by creating new functionality and releasing new modules we are always looking for new ideas and Your help so we can make In-Portal even better software!</p>]]>
</step>
<step name="check_paths" title="Filesystem Check">
<![CDATA[<p><b>In-Portal Installer checks through the system folders and files</b> that require write permissions (777) to be set in order to run successfully In-Portal on your website.</p>
<p>In case if you see a <strong>Failure notice</strong> saying that In-Portal Installation cannot continue until all permissions are set correctly please continue reading below.</p>
<p><strong>Permissions can be set</strong> by using <a href="http://www.google.com/search?q=free+ftp+program" target="_blank">FTP program</a> or directly in <i>shell</i> running "chmod" command. Please refer to the following <a href="http://www.stadtaus.com/en/tutorials/chmod-ftp-file-permissions.php" target="_blank">guide</a> to learn how to set permissions using your FTP program. In case if you have access to <i>shell</i> in your account you can simply run fix_perms.sh files located in /tools folder or do <br/><br/>
&nbsp;&nbsp;&nbsp;# chmod -R 777 ../system ../themes ../system/config.php</p>
<p><strong>Security reasons</strong> you will be asked to change permissions back to 755 on /system/config.php file and root / folder of In-Portal on the last step of this installation process!</p>
]]>
</step>
<step name="post_config" title="Basic Configuration">
<![CDATA[<p>Adjust <b>Basic Configuration</b> settings on this step.</p>
<p>Once your In-Portal is installed you can login into <b>Admin Console</b> to change these and other settings. The Configuration section is located in main navigation menu.</p>
<br/>
<p><b>Additional Recommendations:</b></p>
<p><b><i>1. Use Cron</i></b> (<a href="http://en.wikipedia.org/wiki/Cron" target="_blank">UNIX/BSD/Linux</a>) or <b>Task Scheduler</b> (<a href="http://en.wikipedia.org/wiki/Task_Scheduler" target="_blank">Windows</a>) to run Regular Events in your In-Portal.<br />
It's highly recommended to setup your cron to run <b>every minute</b> so all system events that are enabled will run in the background based on their schedule. These events can be managed in Admin Console via <b><i>Configuration -> Website -> Scheduled Tasks</i></b> section.
<p>In-Portal <b>cron</b> file is located in <b>/tools/cron.php</b> folder and can be setup using hosting Control Panel or <a href="http://en.wikipedia.org/wiki/Cron" target="_blank">manually</a>. In Plesk or CPanel interfaces use dialog to add a new cron job and specify the following (use correct paths)<br />
&nbsp;&nbsp;&nbsp;<b>/absolute/path/to/bin/php -f /absolute/path/to/in-portal/tools/cron.php</b></p>
<p><b><i>2. Adjust Scheduled Tasks</i></b><br />
As was explained in the previous recommendation there is a <b><i>Configuration -> Website -> Scheduled Tasks</i></b> section where you can control Events triggered by the system. These events do their job to cleanup the data, old image files, check the data integrity, RSS feeds and other processes required for your In-Portal to run efficiently. We do recommend to review and enable/disable these events based on your website needs.</p>
<p><b><i>3. Set Mail Server</i></b><br />
It's recommended to review and adjust your mail server settings once your In-Portal is up and running. This can be done in Admin Console under <b><i>Configuration -> Website -> Advanced</i></b> section.</p>
<p><b>We strongly recommend carefully reviewing and adjusting all settings under Configuration -> Website section!</b></p>
]]>
</step>
<step name="sys_config" title="System Configuration">
<![CDATA[<p>These are system advanced settings and must be changed with caution. It's <strong><i>not recommended</i></strong> to
change these settings unless you exactly know what you are doing. These settings will be stored in <strong>system/config.php</strong>
file and can be changed manually if needed.</p>
<br/>
<p><b><i>Web Path to Installation</i></b> - web path to the root of your In-Portal installation. For example,
if your In-Portal will be running at http://www.your-website.com, then Web Path to Installation should be left empty
since In-Portal is setup in the root of the domain. In case if your In-Portal will be running under
http://www.your-website.com/in-portal/, then it should be set to <b>/in-portal</b> (no trailing slash). This setting is auto-detected during the
initial installation step, but can be adjusted at Installation Maintenance step.</p>
<p><b><i>Path to Writable folder</i></b> - path to a folder inside your In-Portal installation which can be accessed from the Web
and has writable permissions for the web server. This folder will be used to store dynamic content such as
uploaded and resized images, cached templates and other types of user files. The default value is <b>/system</b>.</p>
<p><b><i>Path to Restricted folder</i></b> - path to a folder inside or outside your In-Portal installation which will
used to store debug files, system logs and other non-public information. This folder must be writable by the web-server
and can be located outside of your In-Portal installation if needed. The default value is <b>/system/.restricted</b> .</p>
<p><b><i>Path to Admin folder</i></b> - web path to your In-Portal Admin Console folder. The default value is set to
<b>/admin</b> and your Admin Console will be accessible at http://www.your-website.com/admin.
In case if you want your Admin Console to be under http://www.your-website.com/secure-admin (or anything else)
you'll need to rename original <b>admin</b> folder to <b>secure-admin</b> on your filesystem and then set this path to <b>/secure-admin</b> .</p>
<p><b><i>Path to Admin Interface Presets folder</i></b> - path to a folder inside your In-Portal installation
contains Admin Interface Presets. The default value is <b>/admin</b> .</p>
<p><b><i>Name of Base Application Class</i></b> - default value is <b>kApplication</b> and can change very rarely. </p>
<p><b><i>Path to Base Application Class file</i></b> - default value is <b>/core/kernel/application.php</b> and can change very rarely.</p>
<p><b><i>Output Caching Engine</i></b> - provides ability to cache HTML output or other data using various caching engines to
lower the database load. The default value is set to <b>None</b> if no available engines detected. Available options are:
None (Fake), Memcached (Memcache), XCache (XCache) and Alternative PHP Cache (Apc).
Note that only auto-detected caching engines will be available for selection.</p>
<p><b><i>Location of Memcache Servers</i></b> - host or IP address with port where Memcached Server is running.
Multiple locations of can be listed separated by semi-colon (;). For example, 192.168.1.1:1121;192.168.1.2:1121;192.168.1.3:1121 .</p>
<p><b><i>CSS/JS Compression Engine</i></b> - provides <a href="http://en.wikipedia.org/wiki/Minification_(programming)">minification</a>
functionality for CSS / Javascript files. The default value is set to <b>PHP-based</b> if no Java is auto-detected on server-side.
Available options are: None (empty), YUICompressor (Java) (yui) and PHP-based (php) .</p>
<p><b><i>Website Charset</i></b> - character encoding that will be used across the website. By default this should be set to UTF-8,
but can set to other encoding also (see <a href="http://en.wikipedia.org/wiki/Character_encoding">wikipedia.org</a> options).
It's highly recommended to have Website Encoding match the Database Encoding (specified on DB step).</p>
<p><b><i>Enable "System Log"</i></b> - "System Log" has capability to record PHP Exceptions, Errors, Warnings, Notices, Database/SQL
Errors and Warnings, and User defined messages that happened on your website. It has 3 modes - Enabled (logs everything, including user
defined messages), User-only (user defined messages only), and Disabled (don't log anything at all - default setting).</p>
<p><b><i>Trust Proxy</i></b> - whatever to trust information provided by provided by proxy server (if any) located between web server
and client browser.</p>
<br/>
]]>
</step>
<step name="select_theme" title="Select Default Theme">
<![CDATA[<p>Selected theme will be used as a default in your In-Portal website.</p>
<p>You can manage your themes in Admin Console under Configuration -> Website -> Themes section.</p>
<p>Additional themes are available on <a href="http://www.in-portal.com/support-downloads.html" target="_blank">Support & Downloads</a> section on <a href="http://www.in-portal.com" target="_blank">In-Portal.com</a> website</p>]]>
</step>
<step name="security" title="Security Check">
<![CDATA[<p><strong>In-Portal Installer</strong> performs final security checks on this step.</p>
<p><b>1. Write Permissions Check</b> - checks whether critical In-Portal files are open for the outside world and can be used by hackers to attack your websites. <b>You won't be able to continue until you correctly set these permissions!</b></p>
<p><b>2. Ability to Execute PHP in Writable Folders</b> - checks if hackers can save and execute PHP files in your /system
folder used for the uploads.While it's recommended to adjust these settings you can continue In-Portal Installation without changing them.</p>
<p><b>3. Webserver PHP Configuration</b> - additional suggestions how to make your website even more secure. While it's recommended to adjust these settings you can continue In-Portal Installation without changing them.</p>
]]>
</step>
<step name="finish" title="Installation Complete" help_title="Thank You!">
<![CDATA[<p>Thank you for downloading and installing In-Portal Content Management System!</p>
<p>Feel free to visit <a target="_new" href="http://www.in-portal.com">www.in-portal.com</a> for support, latest news and module updates.</p>
<p><strong>Please make sure to clean your Browser's Cache if you were performing the upgrade.</strong></p>]]>
</step>
<step name="install_setup" title="Installation Maintenance">
<![CDATA[<p>A Configuration file has been detected on your system and it appears In-Portal is correctly installed.
In order to work with the maintenance functions provided to the left you must enter your admin Root password.
<b><i>(Use Username 'root' if using your root password)</i></b></p>
<p><b><i>Upgrade In-Portal</i></b> - available when you upload files from new In-Portal release into
your current installation. Upgrade scripts will run and upgrade your current In-Portal database to the uploaded version.</p>
<p><b><i>Reinstall In-Portal</i></b> - cleans out your existing In-Portal database and starts with a fresh installation.
<i>Note</i> that this operation cannot be undone and no backups are made! Use at your own risk.</p>
<p><b><i>Install In-Portal to a New Database</i></b> - keeps the existing installation and installs In-Portal to a new database.
If this option is selected you will be prompted for new database configuration information.</p>
<p><b><i>Update License Information</i></b> - used to update your In-Portal license data. Select this option if you have
modified your licensing status with Intechnic (obtained commercial support or module), or you have received new license data via email.</p>
<p><b><i>Update Database Configuration</i></b> - allows you to update your current database configuration variables such as
database server host, username, password and others.</p>
<p><b><i>Update Installation Paths</i></b> - should be used when the location of your In-Portal files has changed.
For example, if you moved them from one folder to another. It will update all settings and ensure In-Portal
is operational at the new location.</p>]]>
</step>
<step name="upgrade_modules" title="Select Modules to Upgrade">
<![CDATA[<p>Select modules from the list, you need to update to the last downloaded version of In-Portal</p>]]>
</step>
<step name="skin_upgrade" title="Admin Skin Upgrade">
<![CDATA[<p>Review Administrative Console skin upgrade log.</p>]]>
</step>
<step name="db_reconfig" title="Update Database Configuration">
<![CDATA[<p>In-Portal needs to connect to your Database Server. Please provide the database server type*,
host name (<i>normally "localhost"</i>), Database user name, and database Password. These fields are required
to connect to the database.</p><p>If you would like In-Portal to use a table prefix, enter it in the field
provided. This prefix can be any text which can be used in the names of tables on your system.
The characters entered in this field are placed <i>before</i> the names of the tables used by In-Portal.
For example, if you enter "inp_" into the prefix field, the table named Categories will be named inp_Categories.</p>]]>
</step>
<step name="sys_requirements" title="System Requirements Check">
<![CDATA[
<p>The <i>System Requirements Check</i> option should be used to ensure proper system behavior in the current environment.</p>
<p>
- <b>PHP version 5.3.9 or above<span class="error">*</span></b><br/>
+ <b>PHP version 5.6 or above<span class="error">*</span></b><br/>
Use this PHP version or better to ensure normal website operation on every day basis.
</p>
<p>
<b>URL rewriting support</b><br/>
Allows to build nice looking SEO urls without specifying "/index.php" in each of them.
</p>
<p>
<b>Java template compression</b><br/>
When Java is installed on web server, then it's possible to use <a href="http://developer.yahoo.com/yui/compressor/" target="_blank">YUI Compressor</a>
to minify HTML, CSS and JavaScript output of website. This allows to make websites, which opens even faster, then before.
</p>
<p>
<b>Dependencies via Composer</b><br/>
In-Portal uses <a href="https://getcomposer.org/" target="_blank">Composer</a> to install required 3rd-party libraries.
Please ensure, that:<br/>
<ol>
<li>Composer is installed (<a href="https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx" target="_blank">instructions</a>)</li>
<li>Dependencies are installed (<a href="https://getcomposer.org/doc/00-intro.md#using-composer" target="_blank">instructions</a>)</li>
</ol>
</p>
<p>
<b>Memory caching support</b><br/>
When available use <a href="http://memcached.org/" target="_blank">Memcached</a> memory object caching system for data caching.
Will severely improve website performance under heavy load and page loading speed in general.
</p>
<p>
<b>Accessing remote resources (via cURL)</b><br/>
Allows to perform data retrieval from other websites (e.g. rss feeds) in background. Data retrieval internally is done
using <a href="http://curl.haxx.se/" target="_blank">cURL</a> library, that must be installed on web server.
</p>
<p>
<b>XML document processing (via SimpleXML)<span class="error">*</span></b><br/>
In-Portal uses XML files to store module/theme meta data. This
<a href="http://www.php.net/manual/en/book.simplexml.php" target="_blank">library</a> is used keep In-Portal
code clean as fast even, when processing XML files.
</p>
<p>
<b>Standard PHP Library (SPL)<span class="error">*</span></b><br/>
Usage of <a href="http://www.php.net/manual/en/book.spl.php" target="_blank">this library</a> guarantees memory
efficient way to manage files and data structures across In-Portal.
</p>
<p>
<b>TrueType font support (via Freetype)<span class="error">*</span></b><br/>
This library allows to use TrueType fonts inside produced images. In particular it's used for Captcha code generation.
</p>
<p>
<b>GD Graphics Library 1.8 or above<span class="error">*</span></b><br/>
<a href="http://www.boutell.com/gd/" target="_blank">This library</a> is used to perform various manipulations (e.g. resize, crop, etc.)
on user-uploaded images.
</p>
<p>
<b>JPEG images support<span class="error">*</span></b><br/>
Support image manipulations on user-uploaded images *.jpg and *.jpeg file extensions.
</p>
<p>
<b>Database connectivity (via MySQL)<span class="error">*</span></b><br/>
In-Portal uses MySQL database as it's persistent data storage.
</p>
<p>
<b>JSON processing support<span class="error">*</span></b><br/>
<a href="http://en.wikipedia.org/wiki/JSON" target="_blank">JSON</a> data format is used to implement AJAX
approach and perform complete page reload only, when necessary.
</p>
<p>
<b>Memory requirements changing on the fly</b><br/>
In-Portal requires at least 16 megabytes of memory to operate normally. However some resource consuming
operations (like link validation) might consume more memory, then usual. To ensure, that such operations
never fail In-Portal changes maximally allowed memory limit on the fly. See
<a href="http://www.php.net/manual/en/ini.core.php#ini.memory-limit" target="_blank">memory_limit</a> setting
for more info.
</p>
<p>
<b>Prevent script errors in production environment</b><br/>
Prevents any errors to be shown on website, that might happen due incorrect web server configuration. See
<a href="http://www.php.net/manual/ru/errorfunc.configuration.php#ini.display-errors" target="_blank">display_errors</a> setting
for more info.
</p>
<p>
<b>Change error detalization level</b><br/>
Ensures, that all error types are shown in development environment and none in production environment. See
<a href="http://www.php.net/manual/ru/function.error-reporting.php" target="_blank">error_reporting</a> setting
for more info.
</p>
<p>
<b>Web server timezone is explicitly set<span class="error">*</span></b><br/>
Web server timezone must be set explicitly to ensure correct date/time calculations and display across the website.
See <a href="http://www.php.net/manual/en/datetime.configuration.php#ini.date.timezone" target="_blank">date.timezone</a>
setting for more info.
</p>
<p>
<b>Needed super-global arrays registered</b><br/>
Internally In-Portal relies on super-global array (e.g. $_SERVER, $_POST, etc.) presense inside a script. To make that happen
<a href="http://www.php.net/manual/en/ini.core.php#ini.variables-order" target="_blank">variables_order</a> setting must contain
following letters: "G", "P", "C", "S".
</p>
<p>
<b>Script output buffering enabled<span class="error">*</span></b><br/>
Output buffering is needed to allow usage of GZIP compression of page output. See
<a href="http://www.php.net/manual/en/outcontrol.configuration.php#ini.output-buffering" target="_blank">output_buffering</a>
setting for more info.
</p>
<p>
<b>Cookies enabled</b><br/>
However In-Portal can work without cookies (by adding ?sid=XXXXXXXX into each page url), but it's strongly
advised to use cookies-enabled web browser for better user expirience.
</p>
<p>
<b>JavaScript enabled</b><br/>
JavaScript might not be required on Front-End (depends on used theme), but it must be enabled in web browser
during installation and Admin Console usage.
</p>
]]>
</step>
</steps>
Index: branches/5.3.x/core/kernel/application.php
===================================================================
--- branches/5.3.x/core/kernel/application.php (revision 16799)
+++ branches/5.3.x/core/kernel/application.php (revision 16800)
@@ -1,3095 +1,3102 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
use InPortal\Core\kernel\Console\ConsoleApplication;
defined('FULL_PATH') or die('restricted access!');
/**
* Basic class for Kernel4-based Application
*
* This class is a Facade for any other class which needs to deal with Kernel4 framework.<br>
* The class encapsulates the main run-cycle of the script, provide access to all other objects in the framework.<br>
* <br>
* The class is a singleton, which means that there could be only one instance of kApplication in the script.<br>
* This could be guaranteed by NOT calling the class constructor directly, but rather calling kApplication::Instance() method,
* which returns an instance of the application. The method guarantees that it will return exactly the same instance for any call.<br>
* See singleton pattern by GOF.
*/
class kApplication implements kiCacheable {
/**
* Location of module helper class (used in installator too)
*/
const MODULE_HELPER_PATH = '/../units/helpers/modules_helper.php';
/**
* Is true, when Init method was called already, prevents double initialization
*
* @var bool
*/
public $InitDone = false;
/**
* Holds internal NParser object
*
* @var NParser
* @access public
*/
public $Parser;
/**
* Holds parser output buffer
*
* @var string
* @access protected
*/
protected $HTML = '';
/**
* The main Factory used to create
* almost any class of kernel and
* modules
*
* @var kFactory
* @access protected
*/
protected $Factory;
/**
* Template names, that will be used instead of regular templates
*
* @var Array
* @access public
*/
public $ReplacementTemplates = Array ();
/**
* Registered routers, that are used during url building and parsing.
*
* @var array
*/
public $routers = array();
/**
* Reference to debugger
*
* @var Debugger
* @access public
*/
public $Debugger = null;
/**
* Holds all phrases used
* in code and template
*
* @var kPhraseCache
* @access public
*/
public $Phrases;
/**
* Modules table content, key - module name
*
* @var Array
* @access public
*/
public $ModuleInfo = Array ();
/**
* Holds DBConnection
*
* @var IDBConnection
* @access public
*/
public $Conn = null;
/**
* Reference to event log
*
* @var Array|kLogger
* @access public
*/
protected $_logger = Array ();
// performance needs:
/**
* Holds a reference to httpquery
*
* @var kHttpQuery
* @access public
*/
public $HttpQuery = null;
/**
* Holds a reference to UnitConfigReader
*
* @var kUnitConfigReader
* @access public
*/
public $UnitConfigReader = null;
/**
* Holds a reference to Session
*
* @var Session
* @access public
*/
public $Session = null;
/**
* Holds a ref to kEventManager
*
* @var kEventManager
* @access public
*/
public $EventManager = null;
/**
* Holds a ref to kUrlManager
*
* @var kUrlManager
* @access public
*/
public $UrlManager = null;
/**
* Ref for TemplatesCache
*
* @var TemplatesCache
* @access public
*/
public $TemplatesCache = null;
/**
* Holds current NParser tag while parsing, can be used in error messages to display template file and line
*
* @var _BlockTag
* @access public
*/
public $CurrentNTag = null;
/**
* Object of unit caching class
*
* @var kCacheManager
* @access public
*/
public $cacheManager = null;
/**
* Tells, that administrator has authenticated in administrative console
* Should be used to manipulate data change OR data restrictions!
*
* @var bool
* @access public
*/
public $isAdminUser = false;
/**
* Tells, that admin version of "index.php" was used, nothing more!
* Should be used to manipulate data display!
*
* @var bool
* @access public
*/
public $isAdmin = false;
/**
* Instance of site domain object
*
* @var kDBItem
* @access public
* @todo move away into separate module
*/
public $siteDomain = null;
/**
* Prevent kApplication class to be created directly, only via Instance method
*
* @access private
*/
private function __construct()
{
}
final private function __clone() {}
/**
* Returns kApplication instance anywhere in the script.
*
* This method should be used to get single kApplication object instance anywhere in the
* Kernel-based application. The method is guaranteed to return the SAME instance of kApplication.
* Anywhere in the script you could write:
* <code>
* $application =& kApplication::Instance();
* </code>
* or in an object:
* <code>
* $this->Application =& kApplication::Instance();
* </code>
* to get the instance of kApplication. Note that we call the Instance method as STATIC - directly from the class.
* To use descendant of standard kApplication class in your project you would need to define APPLICATION_CLASS constant
* BEFORE calling kApplication::Instance() for the first time. If APPLICATION_CLASS is not defined the method would
* create and return default KernelApplication instance.
*
* Pattern: Singleton
*
* @static
* @return kApplication
* @access public
*/
public static function &Instance()
{
static $instance = false;
if ( !$instance ) {
$class = defined('APPLICATION_CLASS') ? APPLICATION_CLASS : 'kApplication';
$instance = new $class();
}
return $instance;
}
/**
* Initializes the Application
*
* @param string $factory_class
* @return bool Was Init actually made now or before
* @access public
* @see kHTTPQuery
* @see Session
* @see TemplatesCache
*/
public function Init($factory_class = 'kFactory')
{
if ( $this->InitDone ) {
return false;
}
if ( preg_match('/utf-8/i', CHARSET) ) {
setlocale(LC_ALL, 'en_US.UTF-8');
mb_internal_encoding('UTF-8');
}
$this->isAdmin = kUtil::constOn('ADMIN');
if ( !kUtil::constOn('SKIP_OUT_COMPRESSION') ) {
ob_start(); // collect any output from method (other then tags) into buffer
}
if ( defined('DEBUG_MODE') && $this->isDebugMode() && kUtil::constOn('DBG_PROFILE_MEMORY') ) {
$this->Debugger->appendMemoryUsage('Application before Init:');
}
$this->_logger = new kLogger($this->_logger);
$this->Factory = new $factory_class();
$this->registerDefaultClasses();
$system_config = new kSystemConfig(true);
$vars = $system_config->getData();
$db_class = isset($vars['Databases']) ? 'kDBLoadBalancer' : ($this->isDebugMode() ? 'kDBConnectionDebug' : 'kDBConnection');
$this->Conn = $this->Factory->makeClass($db_class, Array (SQL_TYPE, Array ($this->_logger, 'handleSQLError')));
$this->Conn->setup($vars);
$this->cacheManager = $this->makeClass('kCacheManager');
$this->cacheManager->InitCache();
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Before UnitConfigReader');
}
// init config reader and all managers
$this->UnitConfigReader = $this->makeClass('kUnitConfigReader');
$this->UnitConfigReader->scanModules(MODULES_PATH); // Will also set routers.
$this->registerModuleConstants();
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('After UnitConfigReader');
}
define('MOD_REWRITE', $this->ConfigValue('UseModRewrite') && !$this->isAdmin ? 1 : 0);
// start processing request
$this->HttpQuery = $this->recallObject('kHTTPQuery');
$this->HttpQuery->process();
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Processed HTTPQuery initial');
}
$this->Session = $this->recallObject('Session');
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Processed Session');
}
$this->Session->ValidateExpired(); // needs mod_rewrite url already parsed to keep user at proper template after session expiration
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Processed HTTPQuery AfterInit');
}
$this->cacheManager->LoadApplicationCache();
$site_timezone = $this->ConfigValue('Config_Site_Time');
if ( $site_timezone ) {
date_default_timezone_set($site_timezone);
}
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Loaded cache and phrases');
}
$this->ValidateLogin(); // must be called before AfterConfigRead, because current user should be available there
$this->UnitConfigReader->AfterConfigRead();
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendTimestamp('Processed AfterConfigRead');
}
if ( $this->GetVar('m_cat_id') === false ) {
$this->SetVar('m_cat_id', 0);
}
if ( !$this->RecallVar('curr_iso') && !(defined('IS_INSTALL') && IS_INSTALL) ) {
$this->StoreVar('curr_iso', $this->GetPrimaryCurrency(), true); // true for optional
}
$visit_id = $this->RecallVar('visit_id');
if ( $visit_id !== false ) {
$this->SetVar('visits_id', $visit_id);
}
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->profileFinish('kernel4_startup');
}
$this->InitDone = true;
if ( PHP_SAPI !== 'cli' && !$this->isAdmin ) {
$this->HandleEvent(new kEvent('adm:OnStartup'));
}
return true;
}
/**
* Performs initialization of manager classes, that can be overridden from unit configs
*
* @return void
* @access public
* @throws Exception
*/
public function InitManagers()
{
if ( $this->InitDone ) {
throw new Exception('Duplicate call of ' . __METHOD__, E_USER_ERROR);
}
$this->UrlManager = $this->makeClass('kUrlManager');
$this->EventManager = $this->makeClass('kEventManager');
$this->Phrases = $this->makeClass('kPhraseCache');
$this->RegisterDefaultBuildEvents();
}
/**
* Returns module information. Searches module by requested field
*
* @param string $field
* @param mixed $value
* @param string $return_field field value to returns, if not specified, then return all fields
* @return Array
*/
public function findModule($field, $value, $return_field = null)
{
$found = $module_info = false;
foreach ($this->ModuleInfo as $module_info) {
if ( strtolower($module_info[$field]) == strtolower($value) ) {
$found = true;
break;
}
}
if ( $found ) {
return isset($return_field) ? $module_info[$return_field] : $module_info;
}
return false;
}
/**
* Refreshes information about loaded modules
*
* @return void
* @access public
*/
public function refreshModuleInfo()
{
if ( defined('IS_INSTALL') && IS_INSTALL && !$this->TableFound('Modules', true) ) {
$this->registerModuleConstants();
$this->Factory->configureAutoloader();
return;
}
// use makeClass over recallObject, since used before kApplication initialization during installation
/** @var kModulesHelper $modules_helper */
$modules_helper = $this->makeClass('kModulesHelper');
$this->Conn->nextQueryCachable = true;
$sql = 'SELECT *
FROM ' . TABLE_PREFIX . 'Modules
WHERE ' . $modules_helper->getWhereClause() . '
ORDER BY LoadOrder';
$this->ModuleInfo = $this->Conn->Query($sql, 'Name');
$this->registerModuleConstants();
$this->Factory->configureAutoloader();
}
/**
* Checks if passed language id if valid and sets it to primary otherwise
*
* @return void
* @access public
*/
public function VerifyLanguageId()
{
/** @var LanguagesItem $lang */
$lang = $this->recallObject('lang.current');
if ( !$lang->isLoaded() || (!$this->isAdmin && !$lang->GetDBField('Enabled')) ) {
if ( !defined('IS_INSTALL') ) {
$this->ApplicationDie('Unknown or disabled language');
}
}
}
/**
* Checks if passed theme id if valid and sets it to primary otherwise
*
* @return void
* @access public
*/
public function VerifyThemeId()
{
if ( $this->isAdmin ) {
kUtil::safeDefine('THEMES_PATH', '/core/admin_templates');
return;
}
$path = $this->GetFrontThemePath();
if ( $path === false ) {
$this->ApplicationDie('No Primary Theme Selected or Current Theme is Unknown or Disabled');
}
kUtil::safeDefine('THEMES_PATH', $path);
}
/**
* Returns relative path to current front-end theme
*
* @param bool $force
* @return string
* @access public
*/
public function GetFrontThemePath($force = false)
{
static $path = null;
if ( !$force && isset($path) ) {
return $path;
}
/** @var ThemeItem $theme */
$theme = $this->recallObject('theme.current');
if ( !$theme->isLoaded() || !$theme->GetDBField('Enabled') ) {
return false;
}
// assign & then return, since it's static variable
$path = '/themes/' . $theme->GetDBField('Name');
return $path;
}
/**
* Returns primary front/admin language id
*
* @param bool $init
* @return int
* @access public
*/
public function GetDefaultLanguageId($init = false)
{
$cache_key = 'primary_language_info[%LangSerial%]';
$language_info = $this->getCache($cache_key);
if ( $language_info === false ) {
// cache primary language info first
$language_config = $this->getUnitConfig('lang');
$table = $language_config->getTableName();
$id_field = $language_config->getIDField();
$this->Conn->nextQueryCachable = true;
$sql = 'SELECT ' . $id_field . ', IF(AdminInterfaceLang, "Admin", "Front") AS LanguageKey
FROM ' . $table . '
WHERE (AdminInterfaceLang = 1 OR PrimaryLang = 1) AND (Enabled = 1)';
$language_info = $this->Conn->GetCol($sql, 'LanguageKey');
if ( $language_info !== false ) {
$this->setCache($cache_key, $language_info);
}
}
$language_key = ($this->isAdmin && $init) || count($language_info) == 1 ? 'Admin' : 'Front';
if ( array_key_exists($language_key, $language_info) && $language_info[$language_key] > 0 ) {
// get from cache
return $language_info[$language_key];
}
$language_id = $language_info && array_key_exists($language_key, $language_info) ? $language_info[$language_key] : false;
if ( !$language_id && defined('IS_INSTALL') && IS_INSTALL ) {
$language_id = 1;
}
return $language_id;
}
/**
* Returns front-end primary theme id (even, when called from admin console)
*
* @param bool $force_front
* @return int
* @access public
*/
public function GetDefaultThemeId($force_front = false)
{
static $theme_id = 0;
if ( $theme_id > 0 ) {
return $theme_id;
}
if ( kUtil::constOn('DBG_FORCE_THEME') ) {
$theme_id = DBG_FORCE_THEME;
}
elseif ( !$force_front && $this->isAdmin ) {
$theme_id = 999;
}
else {
$cache_key = 'primary_theme[%ThemeSerial%]';
$theme_id = $this->getCache($cache_key);
if ( $theme_id === false ) {
$this->Conn->nextQueryCachable = true;
$theme_config = $this->getUnitConfig('theme');
$sql = 'SELECT ' . $theme_config->getIDField() . '
FROM ' . $theme_config->getTableName() . '
WHERE (PrimaryTheme = 1) AND (Enabled = 1)';
$theme_id = $this->Conn->GetOne($sql);
if ( $theme_id !== false ) {
$this->setCache($cache_key, $theme_id);
}
}
}
return $theme_id;
}
/**
* Returns site primary currency ISO code
*
* @return string
* @access public
* @todo Move into In-Commerce
*/
public function GetPrimaryCurrency()
{
$cache_key = 'primary_currency[%CurrSerial%][%SiteDomainSerial%]:' . $this->siteDomainField('DomainId');
$currency_iso = $this->getCache($cache_key);
if ( $currency_iso === false ) {
if ( $this->prefixRegistred('curr') ) {
$this->Conn->nextQueryCachable = true;
$currency_id = $this->siteDomainField('PrimaryCurrencyId');
$sql = 'SELECT ISO
FROM ' . $this->getUnitConfig('curr')->getTableName() . '
WHERE ' . ($currency_id > 0 ? 'CurrencyId = ' . $currency_id : 'IsPrimary = 1');
$currency_iso = $this->Conn->GetOne($sql);
}
else {
$currency_iso = 'USD';
}
$this->setCache($cache_key, $currency_iso);
}
return $currency_iso;
}
/**
* Returns site domain field. When none of site domains are found false is returned.
*
* @param string $field
* @param bool $formatted
* @param string $format
* @return mixed
* @todo Move into separate module
*/
public function siteDomainField($field, $formatted = false, $format = null)
{
if ( $this->isAdmin ) {
// don't apply any filtering in administrative console
return false;
}
if ( !$this->siteDomain ) {
$this->siteDomain = $this->recallObject('site-domain.current', null, Array ('live_table' => true));
/** @var kDBItem $site_domain */
}
if ( $this->siteDomain->isLoaded() ) {
return $formatted ? $this->siteDomain->GetField($field, $format) : $this->siteDomain->GetDBField($field);
}
return false;
}
/**
* Registers classes, that are used before unit configs (where class registration usually is done) are read.
*
* Called automatically while initializing kApplication.
*
* @return void
* @access public
*/
public function RegisterDefaultClasses()
{
// Database.
$this->registerClass('IDBConnection', KERNEL_PATH . '/db/i_db_connection.php');
$this->registerClass('kDBConnection', KERNEL_PATH . '/db/db_connection.php');
$this->registerClass('kDBConnectionDebug', KERNEL_PATH . '/db/db_connection.php');
$this->registerClass('kDBLoadBalancer', KERNEL_PATH . '/db/db_load_balancer.php');
// Cache.
$this->registerClass('kCacheManager', KERNEL_PATH . '/managers/cache_manager.php');
$this->registerClass('kCache', KERNEL_PATH . '/utility/cache.php');
$this->registerClass('kSubscriptionItem', KERNEL_PATH . '/managers/subscription_manager.php');
// Unit configs.
$this->registerClass('kUnitConfigReader', KERNEL_PATH . '/utility/unit_config_reader.php');
$this->registerClass('kUnitConfigCloner', KERNEL_PATH . '/utility/unit_config_cloner.php');
// Urls.
$this->registerClass('kUrlManager', KERNEL_PATH . '/managers/url_manager.php');
$this->registerClass('kUrlProcessor', KERNEL_PATH . '/managers/url_processor.php');
$this->registerClass('kPlainUrlProcessor', KERNEL_PATH . '/managers/plain_url_processor.php');
// $this->registerClass('kRewriteUrlProcessor', KERNEL_PATH . '/managers/rewrite_url_processor.php');
// Events.
$this->registerClass('kEventManager', KERNEL_PATH . '/event_manager.php');
$this->registerClass('kHookManager', KERNEL_PATH . '/managers/hook_manager.php');
$this->registerClass('kScheduledTaskManager', KERNEL_PATH . '/managers/scheduled_task_manager.php');
$this->registerClass('kRequestManager', KERNEL_PATH . '/managers/request_manager.php');
// Misc.
$this->registerClass('kPhraseCache', KERNEL_PATH . '/languages/phrases_cache.php');
$this->registerClass('kModulesHelper', KERNEL_PATH . self::MODULE_HELPER_PATH);
$this->registerClass('CKEditor', FULL_PATH . '/core/ckeditor/ckeditor_php5.php');
// Aliased.
$this->registerClass('Params', KERNEL_PATH . '/utility/params.php', 'kActions');
$this->registerClass('kMainTagProcessor', KERNEL_PATH . '/processors/main_processor.php', 'm_TagProcessor');
$this->registerClass('kEmailSendingHelper', KERNEL_PATH . '/utility/email_send.php', 'EmailSender');
+
+ // Testing.
+ $this->registerClass('Page', KERNEL_PATH . '/tests/Page/Page.php');
+ $this->registerClass('QAToolsUrlBuilder', KERNEL_PATH . '/tests/Url/QAToolsUrlBuilder.php');
+ $this->registerClass('QAToolsUrlFactory', KERNEL_PATH . '/tests/Url/QAToolsUrlFactory.php');
+ $this->registerClass('AbstractTestCase', KERNEL_PATH . '/../tests/AbstractTestCase.php');
+ $this->registerClass('AbstractBrowserTestCase', KERNEL_PATH . '/../tests/AbstractBrowserTestCase.php');
}
/**
* Registers default build events
*
* @return void
*/
public function RegisterDefaultBuildEvents()
{
$this->EventManager->registerBuildEvent('kTempTablesHandler', 'OnTempHandlerBuild');
}
/**
* Returns cached category information by given cache name. All given category
* information is recached, when at least one of 4 caches is missing.
*
* @param int $category_id
* @param string $name cache name = {filenames, category_designs, category_tree}
* @return string
* @access public
*/
public function getCategoryCache($category_id, $name)
{
return $this->cacheManager->getCategoryCache($category_id, $name);
}
/**
* Returns caching type (none, memory, temporary)
*
* @param int $caching_type
* @return bool
* @access public
*/
public function isCachingType($caching_type)
{
return $this->cacheManager->isCachingType($caching_type);
}
/**
* Increments serial based on prefix and it's ID (optional)
*
* @param string $prefix
* @param int $id ID (value of IDField) or ForeignKeyField:ID
* @param bool $increment
* @return string
* @access public
*/
public function incrementCacheSerial($prefix, $id = null, $increment = true)
{
return $this->cacheManager->incrementCacheSerial($prefix, $id, $increment);
}
/**
* Returns cached $key value from cache named $cache_name
*
* @param int $key key name from cache
* @param bool $store_locally store data locally after retrieved
* @param int $max_rebuild_seconds
* @return mixed
* @access public
*/
public function getCache($key, $store_locally = true, $max_rebuild_seconds = 0)
{
return $this->cacheManager->getCache($key, $store_locally, $max_rebuild_seconds);
}
/**
* Stores new $value in cache with $key name
*
* @param int $key key name to add to cache
* @param mixed $value value of cached record
* @param int $expiration when value expires (0 - doesn't expire)
* @return bool
* @access public
*/
public function setCache($key, $value, $expiration = 0)
{
return $this->cacheManager->setCache($key, $value, $expiration);
}
/**
* Stores new $value in cache with $key name (only if it's not there)
*
* @param int $key key name to add to cache
* @param mixed $value value of cached record
* @param int $expiration when value expires (0 - doesn't expire)
* @return bool
* @access public
*/
public function addCache($key, $value, $expiration = 0)
{
return $this->cacheManager->addCache($key, $value, $expiration);
}
/**
* Sets rebuilding mode for given cache
*
* @param string $name
* @param int $mode
* @param int $max_rebuilding_time
* @return bool
* @access public
*/
public function rebuildCache($name, $mode = null, $max_rebuilding_time = 0)
{
return $this->cacheManager->rebuildCache($name, $mode, $max_rebuilding_time);
}
/**
* Deletes key from cache
*
* @param string $key
* @return void
* @access public
*/
public function deleteCache($key)
{
$this->cacheManager->deleteCache($key);
}
/**
* Reset's all memory cache at once
*
* @return void
* @access public
*/
public function resetCache()
{
$this->cacheManager->resetCache();
}
/**
* Returns value from database cache
*
* @param string $name key name
* @param int $max_rebuild_seconds
* @return mixed
* @access public
*/
public function getDBCache($name, $max_rebuild_seconds = 0)
{
return $this->cacheManager->getDBCache($name, $max_rebuild_seconds);
}
/**
* Sets value to database cache
*
* @param string $name
* @param mixed $value
* @param int|bool $expiration
* @return void
* @access public
*/
public function setDBCache($name, $value, $expiration = false)
{
$this->cacheManager->setDBCache($name, $value, $expiration);
}
/**
* Sets rebuilding mode for given cache
*
* @param string $name
* @param int $mode
* @param int $max_rebuilding_time
* @return bool
* @access public
*/
public function rebuildDBCache($name, $mode = null, $max_rebuilding_time = 0)
{
return $this->cacheManager->rebuildDBCache($name, $mode, $max_rebuilding_time);
}
/**
* Deletes key from database cache
*
* @param string $name
* @return void
* @access public
*/
public function deleteDBCache($name)
{
$this->cacheManager->deleteDBCache($name);
}
/**
* Registers each module specific constants if any found
*
* @return bool
* @access protected
*/
protected function registerModuleConstants()
{
if ( file_exists(KERNEL_PATH . '/constants.php') ) {
kUtil::includeOnce(KERNEL_PATH . '/constants.php');
}
if ( !$this->ModuleInfo ) {
return false;
}
foreach ($this->ModuleInfo as $module_info) {
$constants_file = FULL_PATH . '/' . $module_info['Path'] . 'constants.php';
if ( file_exists($constants_file) ) {
kUtil::includeOnce($constants_file);
}
}
return true;
}
/**
* Performs redirect to hard maintenance template
*
* @return void
* @access public
*/
public function redirectToMaintenance()
{
$maintenance_page = WRITEBALE_BASE . '/maintenance.html';
$query_string = ''; // $this->isAdmin ? '' : '?next_template=' . kUtil::escape($_SERVER['REQUEST_URI'], kUtil::ESCAPE_URL);
if ( file_exists(FULL_PATH . $maintenance_page) ) {
header('Location: ' . BASE_PATH . $maintenance_page . $query_string);
exit;
}
}
/**
* Actually runs the parser against current template and stores parsing result
*
* This method gets 't' variable passed to the script, loads the template given in 't' variable and
* parses it. The result is store in {@link $this->HTML} property.
*
* @return void
* @access public
*/
public function Run()
{
// process maintenance mode redirect: begin
$maintenance_mode = $this->getMaintenanceMode();
if ( $maintenance_mode == MaintenanceMode::HARD ) {
$this->redirectToMaintenance();
}
elseif ( $maintenance_mode == MaintenanceMode::SOFT ) {
$maintenance_template = $this->isAdmin ? 'login' : $this->ConfigValue('SoftMaintenanceTemplate');
if ( $this->GetVar('t') != $maintenance_template ) {
$redirect_params = Array ();
if ( !$this->isAdmin ) {
$redirect_params['next_template'] = $_SERVER['REQUEST_URI'];
}
$this->Redirect($maintenance_template, $redirect_params);
}
}
// process maintenance mode redirect: end
if ( defined('DEBUG_MODE') && $this->isDebugMode() && kUtil::constOn('DBG_PROFILE_MEMORY') ) {
$this->Debugger->appendMemoryUsage('Application before Run:');
}
if ( $this->isAdminUser ) {
// for permission checking in events & templates
$this->LinkVar('module'); // for common configuration templates
$this->LinkVar('module_key'); // for common search templates
$this->LinkVar('section'); // for common configuration templates
if ( $this->GetVar('m_opener') == 'p' ) {
$this->LinkVar('main_prefix'); // window prefix, that opened selector
$this->LinkVar('dst_field'); // field to set value choosed in selector
}
if ( $this->GetVar('ajax') == 'yes' && !$this->GetVar('debug_ajax') ) {
// hide debug output from ajax requests automatically
kUtil::safeDefine('DBG_SKIP_REPORTING', 1); // safeDefine, because debugger also defines it
}
}
$this->Phrases->setPhraseEditing();
$this->EventManager->ProcessRequest();
$this->InitParser();
$t = $this->GetVar('render_template', $this->GetVar('t'));
if ( !$this->TemplatesCache->TemplateExists($t) && !$this->isAdmin ) {
/** @var CategoriesEventHandler $cms_handler */
$cms_handler = $this->recallObject('st_EventHandler');
$t = ltrim($cms_handler->GetDesignTemplate(), '/');
if ( defined('DEBUG_MODE') && $this->isDebugMode() ) {
$this->Debugger->appendHTML('<strong>Design Template</strong>: ' . $t . '; <strong>CategoryID</strong>: ' . $this->GetVar('m_cat_id'));
}
}
/*else {
$cms_handler->SetCatByTemplate();
}*/
if ( defined('DEBUG_MODE') && $this->isDebugMode() && kUtil::constOn('DBG_PROFILE_MEMORY') ) {
$this->Debugger->appendMemoryUsage('Application before Parsing:');
}
$this->HTML = $this->Parser->Run($t);
if ( defined('DEBUG_MODE') && $this->isDebugMode() && kUtil::constOn('DBG_PROFILE_MEMORY') ) {
$this->Debugger->appendMemoryUsage('Application after Parsing:');
}
}
/**
* Returns console application.
*
* @return ConsoleApplication
*/
public function getConsoleApplication()
{
return $this->makeClass('InPortal\Core\kernel\Console\ConsoleApplication');
}
/**
* Replaces current rendered template with given one.
*
* @param string|null $template Template.
*
* @return void
*/
public function QuickRun($template)
{
/** @var kThemesHelper $themes_helper */
$themes_helper = $this->recallObject('ThemesHelper');
// Set Web Request variables to affect link building on template itself.
$this->SetVar('t', $template);
$this->SetVar('m_cat_id', $themes_helper->getPageByTemplate($template));
$this->SetVar('passed', 'm');
// Replace current page content with given template.
$this->InitParser();
$this->Parser->Clear();
$this->HTML = $this->Parser->Run($template);
}
/**
* Performs template parser/cache initialization
*
* @param bool|string $theme_name
* @return void
* @access public
*/
public function InitParser($theme_name = false)
{
if ( !is_object($this->Parser) ) {
$this->Parser = $this->recallObject('NParser');
$this->TemplatesCache = $this->recallObject('TemplatesCache');
}
$this->TemplatesCache->forceThemeName = $theme_name;
}
/**
* Send the parser results to browser
*
* Actually send everything stored in {@link $this->HTML}, to the browser by echoing it.
*
* @return void
* @access public
*/
public function Done()
{
$this->HandleEvent(new kEvent('adm:OnBeforeShutdown'));
$debug_mode = defined('DEBUG_MODE') && $this->isDebugMode();
if ( $debug_mode ) {
if ( kUtil::constOn('DBG_PROFILE_MEMORY') ) {
$this->Debugger->appendMemoryUsage('Application before Done:');
}
$this->Session->SaveData(); // adds session data to debugger report
$this->HTML = ob_get_clean() . $this->HTML . $this->Debugger->printReport(true);
}
else {
// send "Set-Cookie" header before any output is made
$this->Session->SetSession();
$this->HTML = ob_get_clean() . $this->HTML;
}
$this->_outputPage();
$this->cacheManager->UpdateApplicationCache();
if ( !$debug_mode ) {
$this->Session->SaveData();
}
$this->EventManager->runScheduledTasks();
if ( defined('DBG_CAPTURE_STATISTICS') && DBG_CAPTURE_STATISTICS && !$this->isAdmin ) {
$this->_storeStatistics();
}
}
/**
* Outputs generated page content to end-user
*
* @return void
* @access protected
*/
protected function _outputPage()
{
$this->setContentType();
ob_start();
if ( $this->UseOutputCompression() ) {
$compression_level = $this->ConfigValue('OutputCompressionLevel');
if ( !$compression_level || $compression_level < 0 || $compression_level > 9 ) {
$compression_level = 7;
}
header('Content-Encoding: gzip');
echo gzencode($this->HTML, $compression_level);
}
else {
// when gzip compression not used connection won't be closed early!
echo $this->HTML;
}
// send headers to tell the browser to close the connection
header('Content-Length: ' . ob_get_length());
header('Connection: close');
// flush all output
ob_end_flush();
if ( ob_get_level() ) {
ob_flush();
}
flush();
// close current session
if ( session_id() ) {
session_write_close();
}
}
/**
* Stores script execution statistics to database
*
* @return void
* @access protected
*/
protected function _storeStatistics()
{
global $start;
$script_time = microtime(true) - $start;
$query_statistics = $this->Conn->getQueryStatistics(); // time & count
$sql = 'SELECT *
FROM ' . TABLE_PREFIX . 'StatisticsCapture
WHERE TemplateName = ' . $this->Conn->qstr($this->GetVar('t'));
$data = $this->Conn->GetRow($sql);
if ( $data ) {
$this->_updateAverageStatistics($data, 'ScriptTime', $script_time);
$this->_updateAverageStatistics($data, 'SqlTime', $query_statistics['time']);
$this->_updateAverageStatistics($data, 'SqlCount', $query_statistics['count']);
$data['Hits']++;
$data['LastHit'] = time();
$this->Conn->doUpdate($data, TABLE_PREFIX . 'StatisticsCapture', 'StatisticsId = ' . $data['StatisticsId']);
}
else {
$data['ScriptTimeMin'] = $data['ScriptTimeAvg'] = $data['ScriptTimeMax'] = $script_time;
$data['SqlTimeMin'] = $data['SqlTimeAvg'] = $data['SqlTimeMax'] = $query_statistics['time'];
$data['SqlCountMin'] = $data['SqlCountAvg'] = $data['SqlCountMax'] = $query_statistics['count'];
$data['TemplateName'] = $this->GetVar('t');
$data['Hits'] = 1;
$data['LastHit'] = time();
$this->Conn->doInsert($data, TABLE_PREFIX . 'StatisticsCapture');
}
}
/**
* Calculates average time for statistics
*
* @param Array $data
* @param string $field_prefix
* @param float $current_value
* @return void
* @access protected
*/
protected function _updateAverageStatistics(&$data, $field_prefix, $current_value)
{
$data[$field_prefix . 'Avg'] = (($data['Hits'] * $data[$field_prefix . 'Avg']) + $current_value) / ($data['Hits'] + 1);
if ( $current_value < $data[$field_prefix . 'Min'] ) {
$data[$field_prefix . 'Min'] = $current_value;
}
if ( $current_value > $data[$field_prefix . 'Max'] ) {
$data[$field_prefix . 'Max'] = $current_value;
}
}
/**
* Remembers slow query SQL and execution time into log
*
* @param string $slow_sql
* @param int $time
* @return void
* @access public
*/
public function logSlowQuery($slow_sql, $time)
{
$query_crc = kUtil::crc32($slow_sql);
$sql = 'SELECT *
FROM ' . TABLE_PREFIX . 'SlowSqlCapture
WHERE QueryCrc = ' . $query_crc;
$data = $this->Conn->Query($sql, null, true);
if ( $data ) {
$this->_updateAverageStatistics($data, 'Time', $time);
$template_names = explode(',', $data['TemplateNames']);
array_push($template_names, $this->GetVar('t'));
$data['TemplateNames'] = implode(',', array_unique($template_names));
$data['Hits']++;
$data['LastHit'] = time();
$this->Conn->doUpdate($data, TABLE_PREFIX . 'SlowSqlCapture', 'CaptureId = ' . $data['CaptureId']);
}
else {
$data['TimeMin'] = $data['TimeAvg'] = $data['TimeMax'] = $time;
$data['SqlQuery'] = $slow_sql;
$data['QueryCrc'] = $query_crc;
$data['TemplateNames'] = $this->GetVar('t');
$data['Hits'] = 1;
$data['LastHit'] = time();
$this->Conn->doInsert($data, TABLE_PREFIX . 'SlowSqlCapture');
}
}
/**
* Checks if output compression options is available
*
* @return bool
* @access protected
*/
protected function UseOutputCompression()
{
if ( kUtil::constOn('IS_INSTALL') || kUtil::constOn('DBG_ZEND_PRESENT') || kUtil::constOn('SKIP_OUT_COMPRESSION') ) {
return false;
}
$accept_encoding = isset($_SERVER['HTTP_ACCEPT_ENCODING']) ? $_SERVER['HTTP_ACCEPT_ENCODING'] : '';
return $this->ConfigValue('UseOutputCompression') && function_exists('gzencode') && strstr($accept_encoding, 'gzip');
}
// Facade
/**
* Returns current session id (SID)
*
* @return int
* @access public
*/
public function GetSID()
{
/** @var Session $session */
$session = $this->recallObject('Session');
return $session->GetID();
}
/**
* Destroys current session
*
* @return void
* @access public
* @see UserHelper::logoutUser()
*/
public function DestroySession()
{
/** @var Session $session */
$session = $this->recallObject('Session');
$session->Destroy();
}
/**
* Returns variable passed to the script as GET/POST/COOKIE
*
* @param string $name Name of variable to retrieve
* @param mixed $default default value returned in case if variable not present
* @return mixed
* @access public
*/
public function GetVar($name, $default = false)
{
return isset($this->HttpQuery->_Params[$name]) ? $this->HttpQuery->_Params[$name] : $default;
}
/**
* Removes forceful escaping done to the variable upon Front-End submission.
*
* @param string|array $value Value.
*
* @return string|array
* @see kHttpQuery::StripSlashes
* @todo Temporary method for marking problematic places to take care of, when forceful escaping will be removed.
*/
public function unescapeRequestVariable($value)
{
return $this->HttpQuery->unescapeRequestVariable($value);
}
/**
* Returns variable passed to the script as $type
*
* @param string $name Name of variable to retrieve
* @param string $type Get/Post/Cookie
* @param mixed $default default value returned in case if variable not present
* @return mixed
* @access public
*/
public function GetVarDirect($name, $type, $default = false)
{
// $type = ucfirst($type);
$array = $this->HttpQuery->$type;
return isset($array[$name]) ? $array[$name] : $default;
}
/**
* Returns ALL variables passed to the script as GET/POST/COOKIE
*
* @return Array
* @access public
* @deprecated
*/
public function GetVars()
{
return $this->HttpQuery->GetParams();
}
/**
* Set the variable 'as it was passed to the script through GET/POST/COOKIE'
*
* This could be useful to set the variable when you know that
* other objects would relay on variable passed from GET/POST/COOKIE
* or you could use SetVar() / GetVar() pairs to pass the values between different objects.<br>
*
* @param string $var Variable name to set
* @param mixed $val Variable value
* @return void
* @access public
*/
public function SetVar($var,$val)
{
$this->HttpQuery->Set($var, $val);
}
/**
* Deletes kHTTPQuery variable
*
* @param string $var
* @return void
* @todo Think about method name
*/
public function DeleteVar($var)
{
$this->HttpQuery->Remove($var);
}
/**
* Deletes Session variable
*
* @param string $var
* @return void
* @access public
*/
public function RemoveVar($var)
{
$this->Session->RemoveVar($var);
}
/**
* Removes variable from persistent session
*
* @param string $var
* @return void
* @access public
*/
public function RemovePersistentVar($var)
{
$this->Session->RemovePersistentVar($var);
}
/**
* Restores Session variable to it's db version
*
* @param string $var
* @return void
* @access public
*/
public function RestoreVar($var)
{
$this->Session->RestoreVar($var);
}
/**
* Returns session variable value
*
* Return value of $var variable stored in Session. An optional default value could be passed as second parameter.
*
* @param string $var Variable name
* @param mixed $default Default value to return if no $var variable found in session
* @return mixed
* @access public
* @see Session::RecallVar()
*/
public function RecallVar($var,$default=false)
{
return $this->Session->RecallVar($var,$default);
}
/**
* Returns variable value from persistent session
*
* @param string $var
* @param mixed $default
* @return mixed
* @access public
* @see Session::RecallPersistentVar()
*/
public function RecallPersistentVar($var, $default = false)
{
return $this->Session->RecallPersistentVar($var, $default);
}
/**
* Stores variable $val in session under name $var
*
* Use this method to store variable in session. Later this variable could be recalled.
*
* @param string $var Variable name
* @param mixed $val Variable value
* @param bool $optional
* @return void
* @access public
* @see kApplication::RecallVar()
*/
public function StoreVar($var, $val, $optional = false)
{
/** @var Session $session */
$session = $this->recallObject('Session');
$this->Session->StoreVar($var, $val, $optional);
}
/**
* Stores variable to persistent session
*
* @param string $var
* @param mixed $val
* @param bool $optional
* @return void
* @access public
*/
public function StorePersistentVar($var, $val, $optional = false)
{
$this->Session->StorePersistentVar($var, $val, $optional);
}
/**
* Stores default value for session variable
*
* @param string $var
* @param string $val
* @param bool $optional
* @return void
* @access public
* @see Session::RecallVar()
* @see Session::StoreVar()
*/
public function StoreVarDefault($var, $val, $optional = false)
{
/** @var Session $session */
$session = $this->recallObject('Session');
$this->Session->StoreVarDefault($var, $val, $optional);
}
/**
* Links HTTP Query variable with session variable
*
* If variable $var is passed in HTTP Query it is stored in session for later use. If it's not passed it's recalled from session.
* This method could be used for making sure that GetVar will return query or session value for given
* variable, when query variable should overwrite session (and be stored there for later use).<br>
* This could be used for passing item's ID into popup with multiple tab -
* in popup script you just need to call LinkVar('id', 'current_id') before first use of GetVar('id').
* After that you can be sure that GetVar('id') will return passed id or id passed earlier and stored in session
*
* @param string $var HTTP Query (GPC) variable name
* @param mixed $ses_var Session variable name
* @param mixed $default Default variable value
* @param bool $optional
* @return void
* @access public
*/
public function LinkVar($var, $ses_var = null, $default = '', $optional = false)
{
if ( !isset($ses_var) ) {
$ses_var = $var;
}
if ( $this->GetVar($var) !== false ) {
$this->StoreVar($ses_var, $this->GetVar($var), $optional);
}
else {
$this->SetVar($var, $this->RecallVar($ses_var, $default));
}
}
/**
* Returns variable from HTTP Query, or from session if not passed in HTTP Query
*
* The same as LinkVar, but also returns the variable value taken from HTTP Query if passed, or from session if not passed.
* Returns the default value if variable does not exist in session and was not passed in HTTP Query
*
* @param string $var HTTP Query (GPC) variable name
* @param mixed $ses_var Session variable name
* @param mixed $default Default variable value
* @return mixed
* @access public
* @see LinkVar
*/
public function GetLinkedVar($var, $ses_var = null, $default = '')
{
$this->LinkVar($var, $ses_var, $default);
return $this->GetVar($var);
}
/**
* Renders given tag and returns it's output
*
* @param string $prefix
* @param string $tag
* @param Array $params
* @return mixed
* @access public
* @see kApplication::InitParser()
*/
public function ProcessParsedTag($prefix, $tag, $params)
{
/** @var kDBTagProcessor $processor */
$processor = $this->Parser->GetProcessor($prefix);
return $processor->ProcessParsedTag($tag, $params, $prefix);
}
/**
* Return object of IDBConnection interface
*
* Return object of IDBConnection interface already connected to the project database, configurable in config.php
*
* @return IDBConnection
* @access public
*/
public function &GetADODBConnection()
{
return $this->Conn;
}
/**
* Allows to parse given block name or include template
*
* @param Array $params Parameters to pass to block. Reserved parameter "name" used to specify block name.
* @param bool $pass_params Forces to pass current parser params to this block/template. Use with caution, because you can accidentally pass "block_no_data" parameter.
* @param bool $as_template
* @return string
* @access public
*/
public function ParseBlock($params, $pass_params = false, $as_template = false)
{
if ( substr($params['name'], 0, 5) == 'html:' ) {
return substr($params['name'], 5);
}
return $this->Parser->ParseBlock($params, $pass_params, $as_template);
}
/**
* Checks, that we have given block defined
*
* @param string $name
* @return bool
* @access public
*/
public function ParserBlockFound($name)
{
return $this->Parser->blockFound($name);
}
/**
* Allows to include template with a given name and given parameters
*
* @param Array $params Parameters to pass to template. Reserved parameter "name" used to specify template name.
* @return string
* @access public
*/
public function IncludeTemplate($params)
{
return $this->Parser->IncludeTemplate($params, isset($params['is_silent']) ? 1 : 0);
}
/**
* Return href for template
*
* @param string $t Template path
* @param string $prefix index.php prefix - could be blank, 'admin'
* @param Array $params
* @param string $index_file
* @return string
*/
public function HREF($t, $prefix = '', $params = Array (), $index_file = null)
{
return $this->UrlManager->HREF($t, $prefix, $params, $index_file);
}
/**
* Returns theme template filename and it's corresponding page_id based on given seo template
*
* @param string $seo_template
* @return string
* @access public
*/
public function getPhysicalTemplate($seo_template)
{
return $this->UrlManager->getPhysicalTemplate($seo_template);
}
/**
* Returns seo template by physical template
*
* @param string $physical_template
* @return string
* @access public
*/
public function getSeoTemplate($physical_template)
{
return $this->UrlManager->getSeoTemplate($physical_template);
}
/**
* Returns template name, that corresponds with given virtual (not physical) page id
*
* @param int $page_id
* @return string|bool
* @access public
*/
public function getVirtualPageTemplate($page_id)
{
return $this->UrlManager->getVirtualPageTemplate($page_id);
}
/**
* Returns section template for given physical/virtual template
*
* @param string $template
* @param int $theme_id
* @return string
* @access public
*/
public function getSectionTemplate($template, $theme_id = null)
{
return $this->UrlManager->getSectionTemplate($template, $theme_id);
}
/**
* Returns variables with values that should be passed through with this link + variable list
*
* @param Array $params
* @return Array
* @access public
*/
public function getPassThroughVariables(&$params)
{
return $this->UrlManager->getPassThroughVariables($params);
}
/**
* Builds url
*
* @param string $t
* @param Array $params
* @param string $pass
* @param bool $pass_events
* @param bool $env_var
* @return string
* @access public
*/
public function BuildEnv($t, $params, $pass = 'all', $pass_events = false, $env_var = true)
{
return $this->UrlManager->plain->build($t, $params, $pass, $pass_events, $env_var);
}
/**
* Process QueryString only, create
* events, ids, based on config
* set template name and sid in
* desired application variables.
*
* @param string $env_var environment string value
* @param string $pass_name
* @return Array
* @access public
*/
public function processQueryString($env_var, $pass_name = 'passed')
{
return $this->UrlManager->plain->parse($env_var, $pass_name);
}
/**
* Parses rewrite url and returns parsed variables
*
* @param string $url
* @param string $pass_name
* @return Array
* @access public
*/
public function parseRewriteUrl($url, $pass_name = 'passed')
{
return $this->UrlManager->rewrite->parse($url, $pass_name);
}
/**
* Returns base part of all urls, build on website
*
* @param string $domain Domain override.
* @param boolean $ssl_redirect Redirect to/from SSL.
*
* @return string
*/
public function BaseURL($domain = '', $ssl_redirect = null)
{
if ( $ssl_redirect === null ) {
// stay on same encryption level
return PROTOCOL . ($domain ? $domain : SERVER_NAME) . (defined('PORT') ? ':' . PORT : '') . BASE_PATH . '/';
}
if ( $ssl_redirect ) {
// going from http:// to https://
$protocol = 'https://';
$domain = $this->getSecureDomain();
}
else {
// going from https:// to http://
$protocol = 'http://';
$domain = $this->siteDomainField('DomainName');
if ( $domain === false ) {
$domain = DOMAIN; // not on site domain
}
}
return $protocol . $domain . (defined('PORT') ? ':' . PORT : '') . BASE_PATH . '/';
}
/**
* Returns secure domain.
*
* @return string
*/
public function getSecureDomain()
{
$ret = $this->isAdmin ? $this->ConfigValue('AdminSSLDomain') : false;
if ( !$ret ) {
$ssl_domain = $this->siteDomainField('SSLDomainName');
return strlen($ssl_domain) ? $ssl_domain : $this->ConfigValue('SSLDomain');
}
return $ret;
}
/**
* Redirects user to url, that's build based on given parameters
*
* @param string $t
* @param Array $params
* @param string $prefix
* @param string $index_file
* @return void
* @access public
*/
public function Redirect($t = '', $params = Array(), $prefix = '', $index_file = null)
{
$js_redirect = getArrayValue($params, 'js_redirect');
if ( $t == '' || $t === true ) {
$t = $this->GetVar('t');
}
// pass prefixes and special from previous url
if ( array_key_exists('js_redirect', $params) ) {
unset($params['js_redirect']);
}
// allows to send custom responce code along with redirect header
if ( array_key_exists('response_code', $params) ) {
$response_code = (int)$params['response_code'];
unset($params['response_code']);
}
else {
$response_code = 302; // Found
}
if ( !array_key_exists('pass', $params) ) {
$params['pass'] = 'all';
}
if ( $this->GetVar('ajax') == 'yes' && $t == $this->GetVar('t') ) {
// redirects to the same template as current
$params['ajax'] = 'yes';
}
$location = $this->HREF($t, $prefix, $params, $index_file);
if ( $this->isDebugMode() && (kUtil::constOn('DBG_REDIRECT') || (kUtil::constOn('DBG_RAISE_ON_WARNINGS') && $this->Debugger->WarningCount)) ) {
$this->Debugger->appendTrace();
echo '<strong>Debug output above !!!</strong><br/>' . "\n";
if ( array_key_exists('HTTP_REFERER', $_SERVER) ) {
echo 'Referer: <strong>' . kUtil::escape($_SERVER['HTTP_REFERER'], kUtil::ESCAPE_HTML) . '</strong><br/>' . "\n";
}
echo "Proceed to redirect: <a href=\"{$location}\">{$location}</a><br/>\n";
}
else {
if ( $js_redirect ) {
// show "redirect" template instead of redirecting,
// because "Set-Cookie" header won't work, when "Location"
// header is used later
$this->SetVar('t', 'redirect');
$this->SetVar('redirect_to', $location);
// make all additional parameters available on "redirect" template too
foreach ($params as $name => $value) {
$this->SetVar($name, $value);
}
return;
}
else {
if ( $this->GetVar('ajax') == 'yes' && ($t != $this->GetVar('t') || !$this->isSOPSafe($location, $t)) ) {
// redirection to other then current template during ajax request OR SOP violation
kUtil::safeDefine('DBG_SKIP_REPORTING', 1);
echo '#redirect#' . $location;
}
elseif ( headers_sent() != '' ) {
// some output occurred -> redirect using javascript
echo '<script type="text/javascript">window.location.href = \'' . kUtil::escape($location, kUtil::ESCAPE_JS) . '\';</script>';
}
else {
// no output before -> redirect using HTTP header
// header('HTTP/1.1 302 Found');
header('Location: ' . $location, true, $response_code);
}
}
}
// session expiration is called from session initialization,
// that's why $this->Session may be not defined here
/** @var Session $session */
$session = $this->recallObject('Session');
if ( $this->InitDone ) {
// if redirect happened in the middle of application initialization don't call event,
// that presumes that application was successfully initialized
$this->HandleEvent(new kEvent('adm:OnBeforeShutdown'));
}
$session->SaveData();
ob_end_flush();
exit;
}
/**
* Determines if real redirect should be made within AJAX request.
*
* @param string $url Location.
* @param string $template Template.
*
* @return boolean
* @link http://en.wikipedia.org/wiki/Same-origin_policy
*/
protected function isSOPSafe($url, $template)
{
$parsed_url = parse_url($url);
if ( $parsed_url['scheme'] . '://' != PROTOCOL ) {
return false;
}
if ( $parsed_url['host'] != SERVER_NAME ) {
return false;
}
if ( defined('PORT') && isset($parsed_url['port']) && $parsed_url['port'] != PORT ) {
return false;
}
return true;
}
/**
* Returns translation of given label
*
* @param string $label
* @param bool $allow_editing return translation link, when translation is missing on current language
* @param bool $use_admin use current Admin Console language to translate phrase
* @return string
* @access public
*/
public function Phrase($label, $allow_editing = true, $use_admin = false)
{
return $this->Phrases->GetPhrase($label, $allow_editing, $use_admin);
}
/**
* Replace language tags in exclamation marks found in text
*
* @param string $text
* @param bool $force_escape force escaping, not escaping of resulting string
* @return string
* @access public
*/
public function ReplaceLanguageTags($text, $force_escape = null)
{
return $this->Phrases->ReplaceLanguageTags($text, $force_escape);
}
/**
* Checks if user is logged in, and creates
* user object if so. User object can be recalled
* later using "u.current" prefix_special. Also you may
* get user id by getting "u.current_id" variable.
*
* @return void
* @access protected
*/
protected function ValidateLogin()
{
/** @var Session $session */
$session = $this->recallObject('Session');
$user_id = $session->GetField('PortalUserId');
if ( !$user_id && $user_id != USER_ROOT ) {
$user_id = USER_GUEST;
}
$this->SetVar('u.current_id', $user_id);
if ( !$this->isAdmin ) {
// needed for "profile edit", "registration" forms ON FRONT ONLY
$this->SetVar('u_id', $user_id);
}
$this->StoreVar('user_id', $user_id, $user_id == USER_GUEST); // storing Guest user_id (-2) is optional
$this->isAdminUser = $this->isAdmin && $this->LoggedIn();
if ( $this->GetVar('expired') == 1 ) {
// this parameter is set only from admin
/** @var UsersItem $user */
$user = $this->recallObject('u.login-admin', null, Array ('form_name' => 'login'));
$user->SetError('UserLogin', 'session_expired', 'la_text_sess_expired');
}
$this->HandleEvent(new kEvent('adm:OnLogHttpRequest'));
if ( $user_id != USER_GUEST ) {
// normal users + root
$this->LoadPersistentVars();
}
$user_timezone = $this->Session->GetField('TimeZone');
if ( $user_timezone ) {
date_default_timezone_set($user_timezone);
}
}
/**
* Loads current user persistent session data
*
* @return void
* @access public
*/
public function LoadPersistentVars()
{
$this->Session->LoadPersistentVars();
}
/**
* Returns configuration option value by name
*
* @param string $name
* @return string
* @access public
*/
public function ConfigValue($name)
{
return $this->cacheManager->ConfigValue($name);
}
/**
* Changes value of individual configuration variable (+resets cache, when needed)
*
* @param string $name
* @param string $value
* @param bool $local_cache_only
* @return string
* @access public
*/
public function SetConfigValue($name, $value, $local_cache_only = false)
{
return $this->cacheManager->SetConfigValue($name, $value, $local_cache_only);
}
/**
* Allows to process any type of event.
*
* @param kEvent $event Event.
*
* @return void
*/
public function HandleEvent(kEvent $event)
{
$this->EventManager->HandleEvent($event);
}
/**
* Notifies event subscribers, that event has occured
*
* @param kEvent $event
* @return void
*/
public function notifyEventSubscribers(kEvent $event)
{
$this->EventManager->notifySubscribers($event);
}
/**
* Allows to process any type of event
*
* @param kEvent $event
* @return bool
* @access public
*/
public function eventImplemented(kEvent $event)
{
return $this->EventManager->eventImplemented($event);
}
/**
* Registers new class in the factory
*
* @param string $real_class Real name of class as in class declaration
* @param string $file Filename in what $real_class is declared
* @param string $pseudo_class Name under this class object will be accessed using getObject method
* @return void
* @access public
*/
public function registerClass($real_class, $file, $pseudo_class = null)
{
$this->Factory->registerClass($real_class, $file, $pseudo_class);
}
/**
* Unregisters existing class from factory
*
* @param string $real_class Real name of class as in class declaration
* @param string $pseudo_class Name under this class object is accessed using getObject method
* @return void
* @access public
*/
public function unregisterClass($real_class, $pseudo_class = null)
{
$this->Factory->unregisterClass($real_class, $pseudo_class);
}
/**
* Finds the absolute path to the file where the class is defined.
*
* @param string $class The name of the class.
*
* @return string|false
*/
public function findClassFile($class)
{
return $this->Factory->findClassFile($class);
}
/**
* Add new scheduled task
*
* @param string $short_name name to be used to store last maintenance run info
* @param string $event_string
* @param int $run_schedule run schedule like for Cron
* @param string $module
* @param int $status
* @access public
*/
public function registerScheduledTask($short_name, $event_string, $run_schedule, $module, $status = STATUS_ACTIVE)
{
$this->EventManager->registerScheduledTask($short_name, $event_string, $run_schedule, $module, $status);
}
/**
* Registers Hook from subprefix event to master prefix event
*
* Pattern: Observer
*
* @param string $hook_event
* @param string $do_event
* @param int $mode
* @param bool $conditional
* @access public
*/
public function registerHook($hook_event, $do_event, $mode = hAFTER, $conditional = false)
{
$this->EventManager->registerHook($hook_event, $do_event, $mode, $conditional);
}
/**
* Registers build event for given pseudo class
*
* @param string $pseudo_class
* @param string $event_name
* @access public
*/
public function registerBuildEvent($pseudo_class, $event_name)
{
$this->EventManager->registerBuildEvent($pseudo_class, $event_name);
}
/**
* Allows one TagProcessor tag act as other TagProcessor tag
*
* @param Array $tag_info
* @return void
* @access public
*/
public function registerAggregateTag($tag_info)
{
/** @var kArray $aggregator */
$aggregator = $this->recallObject('TagsAggregator', 'kArray');
$tag_data = Array (
$tag_info['LocalPrefix'],
$tag_info['LocalTagName'],
getArrayValue($tag_info, 'LocalSpecial')
);
$aggregator->SetArrayValue($tag_info['AggregateTo'], $tag_info['AggregatedTagName'], $tag_data);
}
/**
* Returns object using params specified, creates it if is required
*
* @param string $name
* @param string $pseudo_class
* @param Array $event_params
* @param Array $arguments
* @return kBase
*/
public function recallObject($name, $pseudo_class = null, array $event_params = array(), array $arguments = array())
{
/*if ( !$this->hasObject($name) && $this->isDebugMode() && ($name == '_prefix_here_') ) {
// first time, when object with "_prefix_here_" prefix is accessed
$this->Debugger->appendTrace();
}*/
return $this->Factory->getObject($name, $pseudo_class, $event_params, $arguments);
}
/**
* Returns tag processor for prefix specified
*
* @param string $prefix
* @return kDBTagProcessor
* @access public
*/
public function recallTagProcessor($prefix)
{
$this->InitParser(); // because kDBTagProcesor is in NParser dependencies
return $this->recallObject($prefix . '_TagProcessor');
}
/**
* Checks if object with prefix passes was already created in factory
*
* @param string $name object pseudo_class, prefix
* @return bool
* @access public
*/
public function hasObject($name)
{
return $this->Factory->hasObject($name);
}
/**
* Removes object from storage by given name
*
* @param string $name Object's name in the Storage
* @return void
* @access public
*/
public function removeObject($name)
{
$this->Factory->DestroyObject($name);
}
/**
* Get's real class name for pseudo class, includes class file and creates class instance
*
* Pattern: Factory Method
*
* @param string $pseudo_class
* @param Array $arguments
* @return kBase
* @access public
*/
public function makeClass($pseudo_class, array $arguments = array())
{
return $this->Factory->makeClass($pseudo_class, $arguments);
}
/**
* Returns sub-classes of given ancestor class.
*
* @param string $ancestor_class Ancestor class.
* @param boolean $concrete_only Return only non-abstract classes.
*
* @return array
*/
public function getSubClasses($ancestor_class, $concrete_only = true)
{
return $this->Factory->getSubClasses($ancestor_class, $concrete_only);
}
/**
* Checks if application is in debug mode
*
* @param bool $check_debugger check if kApplication debugger is initialized too, not only for defined DEBUG_MODE constant
* @return bool
* @author Alex
* @access public
*/
public function isDebugMode($check_debugger = true)
{
$debug_mode = defined('DEBUG_MODE') && DEBUG_MODE;
if ($check_debugger) {
$debug_mode = $debug_mode && is_object($this->Debugger);
}
return $debug_mode;
}
/**
* Apply url rewriting used by mod_rewrite or not
*
* @param bool|null $ssl Force ssl link to be build
* @return bool
* @access public
*/
public function RewriteURLs($ssl = false)
{
// case #1,#4:
// we want to create https link from http mode
// we want to create https link from https mode
// conditions: ($ssl || PROTOCOL == 'https://') && $this->ConfigValue('UseModRewriteWithSSL')
// case #2,#3:
// we want to create http link from https mode
// we want to create http link from http mode
// conditions: !$ssl && (PROTOCOL == 'https://' || PROTOCOL == 'http://')
$allow_rewriting =
(!$ssl && (PROTOCOL == 'https://' || PROTOCOL == 'http://')) // always allow mod_rewrite for http
|| // or allow rewriting for redirect TO httpS or when already in httpS
(($ssl || PROTOCOL == 'https://') && $this->ConfigValue('UseModRewriteWithSSL')); // but only if it's allowed in config!
return kUtil::constOn('MOD_REWRITE') && $allow_rewriting;
}
/**
* Returns unit config for given prefix
*
* @param string $prefix
* @return kUnitConfig
* @access public
*/
public function getUnitConfig($prefix)
{
return $this->UnitConfigReader->getUnitConfig($prefix);
}
/**
* Returns true if config exists and is allowed for reading
*
* @param string $prefix
* @return bool
*/
public function prefixRegistred($prefix)
{
return $this->UnitConfigReader->prefixRegistered($prefix);
}
/**
* Splits any mixing of prefix and
* special into correct ones
*
* @param string $prefix_special
* @return Array
* @access public
*/
public function processPrefix($prefix_special)
{
return $this->Factory->processPrefix($prefix_special);
}
/**
* Set's new event for $prefix_special
* passed
*
* @param string $prefix_special
* @param string $event_name
* @return void
* @access public
*/
public function setEvent($prefix_special, $event_name)
{
$this->EventManager->setEvent($prefix_special, $event_name);
}
/**
* SQL Error Handler
*
* @param int $code
* @param string $msg
* @param string $sql
* @return bool
* @access public
* @throws Exception
* @deprecated
*/
public function handleSQLError($code, $msg, $sql)
{
return $this->_logger->handleSQLError($code, $msg, $sql);
}
/**
* Returns & blocks next ResourceId available in system
*
* @return int
* @access public
*/
public function NextResourceId()
{
$table_name = TABLE_PREFIX . 'IdGenerator';
$this->Conn->Query('LOCK TABLES ' . $table_name . ' WRITE');
$this->Conn->Query('UPDATE ' . $table_name . ' SET lastid = lastid + 1');
$id = $this->Conn->GetOne('SELECT lastid FROM ' . $table_name);
if ( $id === false ) {
$this->Conn->Query('INSERT INTO ' . $table_name . ' (lastid) VALUES (2)');
$id = 2;
}
$this->Conn->Query('UNLOCK TABLES');
return $id - 1;
}
/**
* Returns genealogical main prefix for sub-table prefix passes
* OR prefix, that has been found in REQUEST and some how is parent of passed sub-table prefix
*
* @param string $current_prefix
* @param bool $real_top if set to true will return real topmost prefix, regardless of its id is passed or not
* @return string
* @access public
*/
public function GetTopmostPrefix($current_prefix, $real_top = false)
{
// 1. get genealogical tree of $current_prefix
$prefixes = Array ($current_prefix);
while ($parent_prefix = $this->getUnitConfig($current_prefix)->getParentPrefix()) {
if ( !$this->prefixRegistred($parent_prefix) ) {
// stop searching, when parent prefix is not registered
break;
}
$current_prefix = $parent_prefix;
array_unshift($prefixes, $current_prefix);
}
if ( $real_top ) {
return $current_prefix;
}
// 2. find what if parent is passed
$passed = explode(',', $this->GetVar('all_passed'));
foreach ($prefixes as $a_prefix) {
if ( in_array($a_prefix, $passed) ) {
return $a_prefix;
}
}
return $current_prefix;
}
/**
* Triggers email event of type Admin
*
* @param string $email_template_name
* @param int $to_user_id
* @param array $send_params associative array of direct send params, possible keys: to_email, to_name, from_email, from_name, message, message_text
* @return kEvent
* @access public
*/
public function emailAdmin($email_template_name, $to_user_id = null, $send_params = Array ())
{
return $this->_email($email_template_name, EmailTemplate::TEMPLATE_TYPE_ADMIN, $to_user_id, $send_params);
}
/**
* Triggers email event of type User
*
* @param string $email_template_name
* @param int $to_user_id
* @param array $send_params associative array of direct send params, possible keys: to_email, to_name, from_email, from_name, message, message_text
* @return kEvent
* @access public
*/
public function emailUser($email_template_name, $to_user_id = null, $send_params = Array ())
{
return $this->_email($email_template_name, EmailTemplate::TEMPLATE_TYPE_FRONTEND, $to_user_id, $send_params);
}
/**
* Triggers general email event
*
* @param string $email_template_name
* @param int $email_template_type (0 for User, 1 for Admin)
* @param int $to_user_id
* @param array $send_params associative array of direct send params,
* possible keys: to_email, to_name, from_email, from_name, message, message_text
* @return kEvent
* @access protected
*/
protected function _email($email_template_name, $email_template_type, $to_user_id = null, $send_params = Array ())
{
/** @var kEmail $email */
$email = $this->makeClass('kEmail');
if ( !$email->findTemplate($email_template_name, $email_template_type) ) {
return false;
}
$email->setParams($send_params);
return $email->send($to_user_id);
}
/**
* Allows to check if user in this session is logged in or not
*
* @return bool
* @access public
*/
public function LoggedIn()
{
// no session during expiration process
return is_null($this->Session) ? false : $this->Session->LoggedIn();
}
/**
* Determines if access permissions should not be checked.
*
* @param integer|null $user_id User ID.
*
* @return boolean
*/
public function permissionCheckingDisabled($user_id = null)
{
if ( !isset($user_id) ) {
$user_id = $this->RecallVar('user_id');
}
return $user_id == USER_ROOT;
}
/**
* Check current user permissions based on it's group permissions in specified category
*
* @param string $name permission name
* @param int $cat_id category id, current used if not specified
* @param int $type permission type {1 - system, 0 - per category}
* @return int
* @access public
*/
public function CheckPermission($name, $type = 1, $cat_id = null)
{
/** @var kPermissionsHelper $perm_helper */
$perm_helper = $this->recallObject('PermissionsHelper');
return $perm_helper->CheckPermission($name, $type, $cat_id);
}
/**
* Check current admin permissions based on it's group permissions in specified category
*
* @param string $name permission name
* @param int $cat_id category id, current used if not specified
* @param int $type permission type {1 - system, 0 - per category}
* @return int
* @access public
*/
public function CheckAdminPermission($name, $type = 1, $cat_id = null)
{
/** @var kPermissionsHelper $perm_helper */
$perm_helper = $this->recallObject('PermissionsHelper');
return $perm_helper->CheckAdminPermission($name, $type, $cat_id);
}
/**
* Set's any field of current visit
*
* @param string $field
* @param mixed $value
* @return void
* @access public
* @todo move to separate module
*/
public function setVisitField($field, $value)
{
if ( $this->isAdmin || !$this->ConfigValue('UseVisitorTracking') ) {
// admin logins are not registered in visits list
return;
}
/** @var kDBItem $visit */
$visit = $this->recallObject('visits', null, Array ('raise_warnings' => 0));
if ( $visit->isLoaded() ) {
$visit->SetDBField($field, $value);
$visit->Update();
}
}
/**
* Allows to check if in-portal is installed
*
* @return bool
* @access public
*/
public function isInstalled()
{
return $this->InitDone && (count($this->ModuleInfo) > 0);
}
/**
* Allows to determine if module is installed & enabled
*
* @param string $module_name
* @return bool
* @access public
*/
public function isModuleEnabled($module_name)
{
return $this->findModule('Name', $module_name) !== false;
}
/**
* Returns Window ID of passed prefix main prefix (in edit mode)
*
* @param string $prefix
* @return int
* @access public
*/
public function GetTopmostWid($prefix)
{
$top_prefix = $this->GetTopmostPrefix($prefix);
$mode = $this->GetVar($top_prefix . '_mode');
return $mode != '' ? substr($mode, 1) : '';
}
/**
* Get temp table name
*
* @param string $table
* @param mixed $wid
* @return string
* @access public
*/
public function GetTempName($table, $wid = '')
{
return $this->GetTempTablePrefix($wid) . $table;
}
/**
* Builds temporary table prefix based on given window id
*
* @param string $wid
* @return string
* @access public
*/
public function GetTempTablePrefix($wid = '')
{
if ( preg_match('/prefix:(.*)/', $wid, $regs) ) {
$wid = $this->GetTopmostWid($regs[1]);
}
return TABLE_PREFIX . 'ses_' . $this->GetSID() . ($wid ? '_' . $wid : '') . '_edit_';
}
/**
* Checks if given table is a temporary table
*
* @param string $table
* @return bool
* @access public
*/
public function IsTempTable($table)
{
static $cache = Array ();
if ( !array_key_exists($table, $cache) ) {
$cache[$table] = preg_match('/' . TABLE_PREFIX . 'ses_' . $this->GetSID() . '(_[\d]+){0,1}_edit_(.*)/', $table);
}
return (bool)$cache[$table];
}
/**
* Checks, that given prefix is in temp mode
*
* @param string $prefix
* @param string $special
* @return bool
* @access public
*/
public function IsTempMode($prefix, $special = '')
{
$top_prefix = $this->GetTopmostPrefix($prefix);
$var_names = Array (
$top_prefix,
rtrim($top_prefix . '_' . $special, '_'), // from post
rtrim($top_prefix . '.' . $special, '.'), // assembled locally
);
$var_names = array_unique($var_names);
$temp_mode = false;
foreach ($var_names as $var_name) {
$value = $this->GetVar($var_name . '_mode');
if ( $value && (substr($value, 0, 1) == 't') ) {
$temp_mode = true;
break;
}
}
return $temp_mode;
}
/**
* Return live table name based on temp table name
*
* @param string $temp_table
* @return string
*/
public function GetLiveName($temp_table)
{
if ( preg_match('/' . TABLE_PREFIX . 'ses_' . $this->GetSID() . '(_[\d]+){0,1}_edit_(.*)/', $temp_table, $rets) ) {
// cut wid from table end if any
return $rets[2];
}
else {
return $temp_table;
}
}
/**
* Stops processing of user request and displays given message
*
* @param string $message
* @access public
*/
public function ApplicationDie($message = '')
{
while ( ob_get_level() ) {
ob_end_clean();
}
if ( $this->isDebugMode() ) {
$message .= $this->Debugger->printReport(true);
}
$this->HTML = $message;
$this->_outputPage();
}
/**
* Returns comma-separated list of groups from given user
*
* @param int $user_id
* @return string
*/
public function getUserGroups($user_id)
{
switch ($user_id) {
case USER_ROOT:
$user_groups = $this->ConfigValue('User_LoggedInGroup');
break;
case USER_GUEST:
$user_groups = $this->ConfigValue('User_LoggedInGroup') . ',' . $this->ConfigValue('User_GuestGroup');
break;
default:
$sql = 'SELECT GroupId
FROM ' . TABLE_PREFIX . 'UserGroupRelations
WHERE PortalUserId = ' . (int)$user_id;
$res = $this->Conn->GetCol($sql);
$user_groups = Array ($this->ConfigValue('User_LoggedInGroup'));
if ( $res ) {
$user_groups = array_merge($user_groups, $res);
}
$user_groups = implode(',', $user_groups);
}
return $user_groups;
}
/**
* Allows to detect if page is browsed by spider (293 scheduled_tasks supported)
*
* @return bool
* @access public
*/
/*public function IsSpider()
{
static $is_spider = null;
if ( !isset($is_spider) ) {
$user_agent = trim($_SERVER['HTTP_USER_AGENT']);
$robots = file(FULL_PATH . '/core/robots_list.txt');
foreach ($robots as $robot_info) {
$robot_info = explode("\t", $robot_info, 3);
if ( $user_agent == trim($robot_info[2]) ) {
$is_spider = true;
break;
}
}
}
return $is_spider;
}*/
/**
* Allows to detect table's presence in database
*
* @param string $table_name
* @param bool $force
* @return bool
* @access public
*/
public function TableFound($table_name, $force = false)
{
return $this->Conn->TableFound($table_name, $force);
}
/**
* Returns counter value
*
* @param string $name counter name
* @param Array $params counter parameters
* @param string $query_name specify query name directly (don't generate from parameters)
* @param bool $multiple_results
* @return mixed
* @access public
*/
public function getCounter($name, $params = Array (), $query_name = null, $multiple_results = false)
{
/** @var kCountHelper $count_helper */
$count_helper = $this->recallObject('CountHelper');
return $count_helper->getCounter($name, $params, $query_name, $multiple_results);
}
/**
* Resets counter, which are affected by one of specified tables
*
* @param string $tables comma separated tables list used in counting sqls
* @return void
* @access public
*/
public function resetCounters($tables)
{
if ( kUtil::constOn('IS_INSTALL') ) {
return;
}
/** @var kCountHelper $count_helper */
$count_helper = $this->recallObject('CountHelper');
$count_helper->resetCounters($tables);
}
/**
* Sends XML header + optionally displays xml heading
*
* @param string|bool $xml_version
* @return string
* @access public
* @author Alex
*/
public function XMLHeader($xml_version = false)
{
$this->setContentType('text/xml');
return $xml_version ? '<?xml version="' . $xml_version . '" encoding="' . CHARSET . '"?>' : '';
}
/**
* Returns category tree
*
* @param int $category_id
* @return Array
* @access public
*/
public function getTreeIndex($category_id)
{
$tree_index = $this->getCategoryCache($category_id, 'category_tree');
if ( $tree_index ) {
$ret = Array ();
list ($ret['TreeLeft'], $ret['TreeRight']) = explode(';', $tree_index);
return $ret;
}
return false;
}
/**
* Base category of all categories
* Usually replaced category, with ID = 0 in category-related operations.
*
* @return int
* @access public
*/
public function getBaseCategory()
{
// same, what $this->findModule('Name', 'Core', 'RootCat') does
// don't cache while IS_INSTALL, because of kInstallToolkit::createModuleCategory and upgrade
return $this->ModuleInfo['Core']['RootCat'];
}
/**
* Deletes all data, that was cached during unit config parsing (excluding unit config locations)
*
* @param Array $config_variables
* @access public
*/
public function DeleteUnitCache($config_variables = null)
{
$this->cacheManager->DeleteUnitCache($config_variables);
}
/**
* Deletes cached section tree, used during permission checking and admin console tree display
*
* @return void
* @access public
*/
public function DeleteSectionCache()
{
$this->cacheManager->DeleteSectionCache();
}
/**
* Sets data from cache to object
*
* @param Array $data
* @access public
*/
public function setFromCache(&$data)
{
$this->Factory->setFromCache($data);
$this->UnitConfigReader->setFromCache($data);
$this->EventManager->setFromCache($data);
$this->ReplacementTemplates = $data['Application.ReplacementTemplates'];
$this->routers = $data['Application.Routers'];
$this->ModuleInfo = $data['Application.ModuleInfo'];
}
/**
* Gets object data for caching
* The following caches should be reset based on admin interaction (adjusting config, enabling modules etc)
*
* @access public
* @return Array
*/
public function getToCache()
{
return array_merge(
$this->Factory->getToCache(),
$this->UnitConfigReader->getToCache(),
$this->EventManager->getToCache(),
Array (
'Application.ReplacementTemplates' => $this->ReplacementTemplates,
'Application.Routers' => $this->routers,
'Application.ModuleInfo' => $this->ModuleInfo,
)
);
}
public function delayUnitProcessing($method, $params)
{
$this->cacheManager->delayUnitProcessing($method, $params);
}
/**
* Returns current maintenance mode state
*
* @param bool $check_ips
* @return int
* @access public
*/
public function getMaintenanceMode($check_ips = true)
{
$exception_ips = defined('MAINTENANCE_MODE_IPS') ? MAINTENANCE_MODE_IPS : '';
$setting_name = $this->isAdmin ? 'MAINTENANCE_MODE_ADMIN' : 'MAINTENANCE_MODE_FRONT';
if ( defined($setting_name) && constant($setting_name) > MaintenanceMode::NONE ) {
$exception_ip = $check_ips ? kUtil::ipMatch($exception_ips) : false;
if ( !$exception_ip ) {
return constant($setting_name);
}
}
return MaintenanceMode::NONE;
}
/**
* Sets content type of the page
*
* @param string $content_type
* @param bool $include_charset
* @return void
* @access public
*/
public function setContentType($content_type = 'text/html', $include_charset = null)
{
static $already_set = false;
if ( $already_set ) {
return;
}
$header = 'Content-type: ' . $content_type;
if ( !isset($include_charset) ) {
$include_charset = $content_type = 'text/html' || $content_type == 'text/plain' || $content_type = 'text/xml';
}
if ( $include_charset ) {
$header .= '; charset=' . CHARSET;
}
$already_set = true;
header($header);
}
/**
* Posts message to event log
*
* @param string $message
* @param int $code
* @param bool $write_now Allows further customization of log record by returning kLog object
* @return bool|int|kLogger
* @access public
*/
public function log($message, $code = null, $write_now = false)
{
$log = $this->_logger->prepare($message, $code)->addSource($this->_logger->createTrace(null, 1));
if ( $write_now ) {
return $log->write();
}
return $log;
}
/**
* Deletes log with given id from database or disk, when database isn't available
*
* @param int $unique_id
* @param int $storage_medium
* @return void
* @access public
* @throws InvalidArgumentException
*/
public function deleteLog($unique_id, $storage_medium = kLogger::LS_AUTOMATIC)
{
$this->_logger->delete($unique_id, $storage_medium);
}
/**
* Returns the client IP address.
*
* @return string The client IP address
* @access public
*/
public function getClientIp()
{
return $this->HttpQuery->getClientIp();
}
}
Index: branches/5.3.x/core/kernel/startup.php
===================================================================
--- branches/5.3.x/core/kernel/startup.php (revision 16799)
+++ branches/5.3.x/core/kernel/startup.php (revision 16800)
@@ -1,205 +1,207 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
define('KERNEL_PATH', FULL_PATH . '/core/kernel');
$globals_start = microtime(true);
include_once(KERNEL_PATH . '/globals.php'); // some non-OOP functions and kUtil static class used through kernel
include_once(KERNEL_PATH . '/utility/multibyte.php'); // emulating multi-byte php extension
include_once(KERNEL_PATH . '/utility/system_config.php'); // kSystemConfig class to access system/config.php data
$globals_end = microtime(true);
try {
$vars = kUtil::getSystemConfig()->getData();
}
catch ( kSystemConfigException $e ) {
echo 'In-Portal is probably not installed, or configuration file is missing.<br/>';
echo 'Please use the installation script to fix the problem.<br/><br/>';
$base_path = rtrim(str_replace('\\', '/', dirname($_SERVER['PHP_SELF'])), '/');
echo '<a href="http://' . $_SERVER['HTTP_HOST'] . $base_path . '/core/install.php">Go to installation script</a><br/><br/>';
flush();
exit;
}
define('CHARSET', $vars['WebsiteCharset']);
define('ADMIN_DIRECTORY', $vars['AdminDirectory']);
define('ADMIN_PRESETS_DIRECTORY', $vars['AdminPresetsDirectory']);
$https_mark = getArrayValue($_SERVER, 'HTTPS');
define('PROTOCOL', ($https_mark == 'on') || ($https_mark == '1') ? 'https://' : 'http://');
if ( isset($_SERVER['HTTP_HOST']) ) {
// accessed from browser
$http_host = $_SERVER['HTTP_HOST'];
}
else {
// accessed from command line
$http_host = $vars['Domain'];
$_SERVER['HTTP_HOST'] = $vars['Domain'];
}
$port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : false;
if ($port) {
if ( (PROTOCOL == 'http://' && $port != '80') || (PROTOCOL == 'https://' && $port != '443') ) {
// if non-standard port is used, then define it
define('PORT', $port);
}
$http_host = preg_replace('/:' . $port . '$/', '', $http_host);
}
define('SERVER_NAME', $http_host);
if ( !file_exists(FULL_PATH . '/vendor/autoload.php') ) {
echo 'Cannot find an "/vendor/autoload.php" file, have you executed "composer install" command?<br/>';
flush();
exit;
}
// variable WebsitePath is auto-detected once during installation/upgrade
define('BASE_PATH', $vars['WebsitePath']);
define('APPLICATION_CLASS', $vars['ApplicationClass']);
define('APPLICATION_PATH', $vars['ApplicationPath']);
if (isset($vars['WriteablePath'])) {
define('WRITEABLE', FULL_PATH . $vars['WriteablePath']);
define('WRITEBALE_BASE', $vars['WriteablePath']);
}
if ( isset($vars['RestrictedPath']) ) {
define('RESTRICTED', FULL_PATH . $vars['RestrictedPath']);
}
define('SQL_TYPE', $vars['DBType']);
define('SQL_SERVER', $vars['DBHost']);
define('SQL_USER', $vars['DBUser']);
define('SQL_PASS', $vars['DBUserPassword']);
define('SQL_DB', $vars['DBName']);
if (isset($vars['DBCollation']) && isset($vars['DBCharset'])) {
define('SQL_COLLATION', $vars['DBCollation']); // utf8_general_ci
define('SQL_CHARSET', $vars['DBCharset']); // utf8
}
define('TABLE_PREFIX', $vars['TablePrefix']);
define('DOMAIN', getArrayValue($vars, 'Domain'));
ini_set('memory_limit', '50M');
define('MODULES_PATH', FULL_PATH . DIRECTORY_SEPARATOR . 'modules');
define('EXPORT_BASE_PATH', WRITEBALE_BASE . '/export');
define('EXPORT_PATH', FULL_PATH . EXPORT_BASE_PATH);
define('GW_CLASS_PATH', MODULES_PATH . '/in-commerce/units/gateways/gw_classes'); // Payment Gateway Classes Path
define('SYNC_CLASS_PATH', FULL_PATH . '/sync'); // path for 3rd party user syncronization scripts
define('ENV_VAR_NAME','env');
define('IMAGES_PATH', WRITEBALE_BASE . '/images/');
define('IMAGES_PENDING_PATH', IMAGES_PATH . 'pending/');
define('MAX_UPLOAD_SIZE', min(ini_get('upload_max_filesize'), ini_get('post_max_size'))*1024*1024);
define('EDITOR_PATH', $vars['EditorPath']);
// caching types
define('CACHING_TYPE_NONE', 0);
define('CACHING_TYPE_MEMORY', 1);
define('CACHING_TYPE_TEMPORARY', 2);
class CacheSettings {
static public $unitCacheRebuildTime;
static public $structureTreeRebuildTime;
static public $cmsMenuRebuildTime;
static public $templateMappingRebuildTime;
static public $sectionsParsedRebuildTime;
static public $domainsParsedRebuildTime;
}
CacheSettings::$unitCacheRebuildTime = $vars['UnitCacheRebuildTime'];
CacheSettings::$structureTreeRebuildTime = $vars['StructureTreeRebuildTime'];
CacheSettings::$cmsMenuRebuildTime = $vars['CmsMenuRebuildTime'];
CacheSettings::$templateMappingRebuildTime = $vars['TemplateMappingRebuildTime'];
CacheSettings::$sectionsParsedRebuildTime = $vars['SectionsParsedRebuildTime'];
CacheSettings::$domainsParsedRebuildTime = $vars['DomainsParsedRebuildTime'];
class MaintenanceMode {
const NONE = 0;
const SOFT = 1;
const HARD = 2;
}
unset($vars); // just in case someone will be still using it
if (ini_get('safe_mode')) {
// safe mode will be removed at all in PHP6
define('SAFE_MODE', 1);
}
if (file_exists(WRITEABLE . '/debug.php')) {
include_once(WRITEABLE . '/debug.php');
if (array_key_exists('DEBUG_MODE', $dbg_options) && $dbg_options['DEBUG_MODE']) {
$debugger_start = microtime(true);
include_once(KERNEL_PATH . '/utility/debugger.php');
$debugger_end = microtime(true);
if (isset($debugger) && kUtil::constOn('DBG_PROFILE_INCLUDES')) {
$debugger->profileStart('inc_globals', KERNEL_PATH . '/globals.php', $globals_start);
$debugger->profileFinish('inc_globals', KERNEL_PATH . '/globals.php', $globals_end);
$debugger->profilerAddTotal('includes', 'inc_globals');
$debugger->profileStart('inc_debugger', KERNEL_PATH . '/utility/debugger.php', $debugger_start);
$debugger->profileFinish('inc_debugger', KERNEL_PATH . '/utility/debugger.php', $debugger_end);
$debugger->profilerAddTotal('includes', 'inc_debugger');
}
}
}
kUtil::safeDefine('SILENT_LOG', 0); // can be set in "debug.php" too
$includes = Array(
KERNEL_PATH . "/interfaces/cacheable.php",
KERNEL_PATH . '/application.php',
FULL_PATH . APPLICATION_PATH,
KERNEL_PATH . "/kbase.php",
KERNEL_PATH . '/db/i_db_connection.php',
KERNEL_PATH . '/db/db_connection.php',
KERNEL_PATH . '/db/db_load_balancer.php',
KERNEL_PATH . '/utility/event.php',
KERNEL_PATH . '/utility/logger.php',
KERNEL_PATH . "/utility/factory.php",
KERNEL_PATH . "/languages/phrases_cache.php",
KERNEL_PATH . "/db/dblist.php",
KERNEL_PATH . "/db/dbitem.php",
KERNEL_PATH . "/event_handler.php",
KERNEL_PATH . '/db/db_event_handler.php',
FULL_PATH . '/vendor/autoload.php',
);
foreach ($includes as $a_file) {
kUtil::includeOnce($a_file);
}
if (defined('DEBUG_MODE') && DEBUG_MODE && isset($debugger)) {
$debugger->AttachToApplication();
}
// system users
define('USER_ROOT', -1);
define('USER_GUEST', -2);
+
+ $GLOBALS['PHPUNIT_MINK_COVERAGE_DATA_DIRECTORY'] = WRITEABLE . '/remote_code_coverage';
Index: branches/5.3.x/core/kernel/tests/Url/QAToolsUrlBuilder.php
===================================================================
--- branches/5.3.x/core/kernel/tests/Url/QAToolsUrlBuilder.php (nonexistent)
+++ branches/5.3.x/core/kernel/tests/Url/QAToolsUrlBuilder.php (revision 16800)
@@ -0,0 +1,65 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+use QATools\QATools\PageObject\Exception\UrlException;
+use QATools\QATools\PageObject\Url\IBuilder;
+
+final class QAToolsUrlBuilder extends kBase implements IBuilder
+{
+
+ /**
+ * Template.
+ *
+ * @var string
+ */
+ protected $template = '';
+
+ /**
+ * Params.
+ *
+ * @var array
+ */
+ protected $params = array();
+
+ /**
+ * Constructor for the url builder.
+ *
+ * @param array $components The url components.
+ *
+ * @throws UrlException When the path is missing.
+ */
+ public function __construct(array $components)
+ {
+ parent::__construct();
+
+ if ( empty($components['path']) ) {
+ throw new UrlException('No base url specified', UrlException::TYPE_INVALID_URL);
+ }
+
+ $this->template = $components['path'];
+
+ if ( !empty($components['query']) ) {
+ parse_str($components['query'], $this->params);
+ }
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function build(array $params = array())
+ {
+ return $this->Application->HREF($this->template, '', array_merge($this->params, $params));
+ }
+
+}
Property changes on: branches/5.3.x/core/kernel/tests/Url/QAToolsUrlBuilder.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/kernel/tests/Url/QAToolsUrlFactory.php
===================================================================
--- branches/5.3.x/core/kernel/tests/Url/QAToolsUrlFactory.php (nonexistent)
+++ branches/5.3.x/core/kernel/tests/Url/QAToolsUrlFactory.php (revision 16800)
@@ -0,0 +1,36 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+use QATools\QATools\PageObject\Url\IBuilder;
+use QATools\QATools\PageObject\Url\IUrlFactory;
+
+/**
+ * Responsible for building the URL of pages.
+ */
+class QAToolsUrlFactory implements IUrlFactory
+{
+
+ /**
+ * Returns an instance of a class implementing IBuilder interface based on given arguments.
+ *
+ * @param array $components The url components.
+ *
+ * @return IBuilder
+ */
+ public function getBuilder(array $components)
+ {
+ return new QAToolsUrlBuilder($components);
+ }
+
+}
Property changes on: branches/5.3.x/core/kernel/tests/Url/QAToolsUrlFactory.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/kernel/tests/bootstrap.php
===================================================================
--- branches/5.3.x/core/kernel/tests/bootstrap.php (nonexistent)
+++ branches/5.3.x/core/kernel/tests/bootstrap.php (revision 16800)
@@ -0,0 +1,24 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+$start = microtime(true);
+
+define('DBG_ZEND_PRESENT', 1);
+define('INDEX_FILE', 'index.php');
+define('FULL_PATH', realpath(__DIR__ . '/../../..'));
+
+include_once(FULL_PATH . '/core/kernel/startup.php');
+
+$application =& kApplication::Instance();
+$application->Init();
Property changes on: branches/5.3.x/core/kernel/tests/bootstrap.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/kernel/tests/Page/Page.php
===================================================================
--- branches/5.3.x/core/kernel/tests/Page/Page.php (nonexistent)
+++ branches/5.3.x/core/kernel/tests/Page/Page.php (revision 16800)
@@ -0,0 +1,43 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+use QATools\QATools\HtmlElements\TypifiedPage;
+use QATools\QATools\PageObject\IPageFactory;
+
+/**
+ * The base class to be used for making classes representing pages, that can contain TypifiedElements.
+ */
+class Page extends TypifiedPage
+{
+
+ /**
+ * Reference to kApplication class instance.
+ *
+ * @var kApplication
+ */
+ protected $Application = null;
+
+ /**
+ * Initialize the page.
+ *
+ * @param IPageFactory $page_factory Page factory.
+ */
+ public function __construct(IPageFactory $page_factory)
+ {
+ parent::__construct($page_factory);
+
+ $this->Application =& kApplication::Instance();
+ }
+
+}
Property changes on: branches/5.3.x/core/kernel/tests/Page/Page.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/kernel/utility/formatters/formatter.php
===================================================================
--- branches/5.3.x/core/kernel/utility/formatters/formatter.php (revision 16799)
+++ branches/5.3.x/core/kernel/utility/formatters/formatter.php (revision 16800)
@@ -1,305 +1,317 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2011 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
defined('FULL_PATH') or die('restricted access!');
class kFormatter extends kBase {
/**
* Reference to category helper
*
* @var CategoryHelper
*/
var $_categoryHelper = null;
/**
* Creates formatter instance
*
* @access public
*/
public function __construct()
{
parent::__construct();
$this->_categoryHelper = $this->Application->recallObject('CategoryHelper');
}
/**
* Replace FCK links like "@@ID@@" to real page urls, when "using_fck" option is set.
*
* @param string $value
* @param Array $options
* @param string $format
* @return string
*/
function _replaceFCKLinks(&$value, $options, $format = null)
{
if ((isset($format) && strpos($format, 'fck_ready') !== false) || (!array_key_exists('using_fck', $options) || !$options['using_fck'])) {
// in textarea, where fck will be used OR not using fck
return $value;
}
return $this->_categoryHelper->replacePageIds($value);
}
/**
* Convert's value to match type from config
*
* @param mixed $value
* @param Array $options
* @return mixed
* @access protected
*/
function TypeCast($value, $options)
{
if ( isset($options['type']) ) {
$field_type = $options['type'];
if ($field_type == 'numeric') {
trigger_error('Invalid field type <strong>' . $field_type . '</strong> (in TypeCast method), please use <strong>float</strong> instead', E_USER_NOTICE);
$field_type = 'float';
}
elseif ( $field_type == 'string' ) {
if ( isset($options['allow_html']) && $options['allow_html'] ) {
$value = $this->Application->unescapeRequestVariable($value);
}
return $value;
}
$value = $this->formatNumber($value);
$is_numeric_type = preg_match('#int|integer|double|float|real#', $field_type);
if ( $value != '' && $is_numeric_type ) {
$tc_value = $value;
settype($tc_value, $field_type);
// Type casing is considered a success only, when type casted value visually looks the same.
return (string)$value === (string)$tc_value ? $tc_value : false;
}
}
return $value;
}
/**
* Formats number, according to regional settings
*
* @param string $number
* @return float
*/
function formatNumber($number)
{
static $comma = null, $thousands = null;
if ( !isset($comma) || !isset($thousands) ) {
/** @var LanguagesItem $lang */
$lang = $this->Application->recallObject('lang.current');
$comma = $lang->GetDBField('DecimalPoint');
$thousands = $lang->GetDBField('ThousandSep');
}
$number = str_replace($thousands, '', $number);
$number = str_replace($comma, '.', $number);
return $number;
}
/**
* Applies type casting on each array element
* @param Array $src
* @param kDBItem|kDBList|kDBBase $object
* @return Array
* @access public
*/
public function TypeCastArray($src, &$object)
{
$dst = array ();
foreach ($src as $id => $row) {
$tmp_row = array ();
foreach ($row as $fld => $value) {
$field_options = $object->GetFieldOptions($fld);
$tmp_row[$fld] = $this->TypeCast($value, $field_options);
}
$dst[$id] = $tmp_row;
}
return $dst;
}
/**
* Formats value of a given field
*
* @param string $value
* @param string $field_name
* @param kDBItem|kDBList|kDBBase $object
* @param string $format
* @return string
*/
function Format($value, $field_name, &$object, $format = null)
{
if ( is_null($value) ) {
return '';
}
$options = $object->GetFieldOptions($field_name);
if (!isset($format) && array_key_exists('format', $options)) {
$format = $options['format'];
}
if ($value === false) {
// used ?
return $value; // for leaving badly formatted date on the form
}
$original_format = $format;
if (isset($format)) {
if (strpos($format, 'fck_ready') !== false) {
$format = trim(str_replace('fck_ready', '', $format), ';');
}
}
if (isset($format) && $format) {
if ( substr($format, -1) === 'f' ) {
// High precision formats (e.g. '%01.20f') are not supported to keep code below as fast as possible.
$value = round($value, substr($format, -2, 1));
}
$value = sprintf($format, $value);
- if ( isset($options['cut_zeros']) && $options['cut_zeros'] ) {
+ if ( isset($options['keep_cents']) && $options['keep_cents'] ) {
+ preg_match('/(\d+\.\d{' . $options['keep_cents'] . '})(\d+)?/', $value, $regs);
+
+ // When "keep_cents" option matches format's precision, there will be an "Undefined index: 2" notice.
+ if ( rtrim($regs[2], '0') === '' ) {
+ $value = $regs[1];
+ }
+ else {
+ // Remove trailing zeros in decimal part.
+ $value = preg_replace('/(\.\d+?)0+$/', '$1', $value);
+ }
+ }
+ elseif ( isset($options['cut_zeros']) && $options['cut_zeros'] ) {
// Remove trailing zeros in decimal part (including "." if any left at the end).
$value = preg_replace('/\.0+$/', '', $value);
$value = preg_replace('/(\.\d+?)0+$/', '$1', $value);
}
}
if (preg_match('#int|integer|double|float|real|numeric#', $options['type'])) {
/** @var LanguagesItem $lang */
$lang = $this->Application->recallObject('lang.current');
return $lang->formatNumber($value);
}
elseif ($options['type'] == 'string') {
$value = $this->_replaceFCKLinks($value, $options, $original_format);
}
return $value;
}
/**
* Performs basic type validation on form field value
*
* @param mixed $value
* @param string $field_name
* @param kDBItem|kDBList|kDBBase $object
* @return mixed
* @access public
*/
public function Parse($value, $field_name, &$object)
{
$options = $object->GetFieldOptions($field_name);
if ($value == '') {
return $options['type'] == 'string' ? $value : null;
}
$tc_value = $this->TypeCast($value, $options);
if ($tc_value === false) {
return $value; // for leaving badly formatted date on the form
}
if(isset($options['type'])) {
if (preg_match('#double|float|real|numeric#', $options['type'])) {
$tc_value = str_replace(',', '.', $tc_value);
}
}
if (isset($options['regexp'])) {
if (!preg_match($options['regexp'], $value)) {
$object->SetError($field_name, 'invalid_format');
}
}
return $tc_value;
}
function HumanFormat($format)
{
return $format;
}
/**
* The method is supposed to alter config options or cofigure object in some way based on its usage of formatters
* The methods is called for every field with formatter defined when configuring item.
* Could be used for adding additional VirtualFields to an object required by some special Formatter
*
* @param string $field_name
* @param array $field_options
* @param kDBBase $object
*/
function PrepareOptions($field_name, &$field_options, &$object)
{
}
/**
* Used for split fields like timestamp -> date, time
* Called from DBItem to update sub fields values after loading item
*
* @param string $field
* @param string $value
* @param Array $options
* @param kDBItem|kDBList|kDBBase $object
* @return void
* @access public
*/
public function UpdateSubFields($field, $value, &$options, &$object)
{
}
/**
* Used for split fields like timestamp -> date, time
* Called from DBItem Validate (before validation) to get back master field value from its sub_fields
*
* @param string $field
* @param mixed $value
* @param Array $options
* @param kDBItem|kDBList|kDBBase $object
*/
function UpdateMasterFields($field, $value, &$options, &$object)
{
}
/**
* Return sample value, that can be entered in this field
*
* @param string $field
* @param Array $options
* @param kDBItem|kDBList|kDBBase $object
* @return string
* @access public
*/
public function GetSample($field, &$options, &$object)
{
return isset($options['sample_value']) ? $options['sample_value'] : '';
}
}
Index: branches/5.3.x/core/tests/kernel/utility/formatters/kFormatterTest.php
===================================================================
--- branches/5.3.x/core/tests/kernel/utility/formatters/kFormatterTest.php (nonexistent)
+++ branches/5.3.x/core/tests/kernel/utility/formatters/kFormatterTest.php (revision 16800)
@@ -0,0 +1,63 @@
+<?php
+
+
+final class kFormatterTest extends AbstractTestCase
+{
+
+ /**
+ * @dataProvider cutZerosDataProvider
+ */
+ public function testCutZeros($raw_number, $formatted_number, array $field_options)
+ {
+ $formatter = new kFormatter();
+
+ $item_prophecy = $this->prophesize('kDBItem');
+ $item_prophecy->GetFieldOptions('FieldName')->willReturn(array(
+ 'type' => 'float',
+ 'format' => '%01.6f',
+ ) + $field_options);
+ $item = $item_prophecy->reveal();
+
+ $this->assertSame($formatted_number, $formatter->Format($raw_number, 'FieldName', $item));
+ }
+
+ public function cutZerosDataProvider()
+ {
+ return array(
+ 'long' => array('12.345000', '12.345', array('cut_zeros' => 1)),
+ 'short' => array('12.300000', '12.3', array('cut_zeros' => 1)),
+ 'exact+leading_zero' => array('12.030000', '12.03', array('cut_zeros' => 1)),
+ 'very_long' => array('12.030050', '12.03005', array('cut_zeros' => 1)),
+ 'no_decimals' => array('12.000000', '12', array('cut_zeros' => 1)),
+ );
+ }
+
+ /**
+ * @dataProvider keepCentsDataProvider
+ */
+ public function testKeepCents($raw_number, $formatted_number, array $field_options)
+ {
+ $formatter = new kFormatter();
+
+ $item_prophecy = $this->prophesize('kDBItem');
+ $item_prophecy->GetFieldOptions('FieldName')->willReturn(array(
+ 'type' => 'float',
+ 'format' => '%01.6f',
+ ) + $field_options);
+ $item = $item_prophecy->reveal();
+
+ $this->assertSame($formatted_number, $formatter->Format($raw_number, 'FieldName', $item));
+ }
+
+ public function keepCentsDataProvider()
+ {
+ return array(
+ 'long' => array('12.345000', '12.345', array('keep_cents' => 2)),
+ 'short' => array('12.300000', '12.30', array('keep_cents' => 2)),
+ 'exact+leading_zero' => array('12.030000', '12.03', array('keep_cents' => 2)),
+ 'very_long' => array('12.030050', '12.03005', array('keep_cents' => 2)),
+ 'no_decimals' => array('12.000000', '12.00', array('keep_cents' => 2)),
+ );
+ }
+
+}
Property changes on: branches/5.3.x/core/tests/kernel/utility/formatters/kFormatterTest.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/tests/AbstractTestCase.php
===================================================================
--- branches/5.3.x/core/tests/AbstractTestCase.php (nonexistent)
+++ branches/5.3.x/core/tests/AbstractTestCase.php (revision 16800)
@@ -0,0 +1,51 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+use PHPUnit\Framework\TestCase as BaseTestCase;
+
+abstract class AbstractTestCase extends BaseTestCase
+{
+
+ /**
+ * Reference to kApplication class instance.
+ *
+ * @var kApplication
+ */
+ protected $Application = null;
+
+ /**
+ * Connection to database
+ *
+ * @var IDBConnection
+ */
+ protected $Conn;
+
+ /**
+ * Constructs a test case with the given name.
+ *
+ * @param string $name Test case name.
+ * @param array $data Data.
+ * @param string $data_name Data name.
+ *
+ * @access public
+ */
+ public function __construct($name = null, array $data = array(), $data_name = '')
+ {
+ parent::__construct($name, $data, $data_name);
+
+ $this->Application =& kApplication::Instance();
+ $this->Conn =& $this->Application->GetADODBConnection();
+ }
+
+}
Property changes on: branches/5.3.x/core/tests/AbstractTestCase.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/tests/AbstractBrowserTestCase.php
===================================================================
--- branches/5.3.x/core/tests/AbstractBrowserTestCase.php (nonexistent)
+++ branches/5.3.x/core/tests/AbstractBrowserTestCase.php (revision 16800)
@@ -0,0 +1,119 @@
+<?php
+/**
+* @version $Id$
+* @package In-Portal
+* @copyright Copyright (C) 1997 - 2023 Intechnic. All rights reserved.
+* @license GNU/GPL
+* In-Portal is Open Source software.
+* This means that this software may have been modified pursuant
+* the GNU General Public License, and as distributed it includes
+* or is derivative of works licensed under the GNU General Public License
+* or other free or open source software licenses.
+* See http://www.in-portal.org/license for copyright notices and details.
+*/
+
+use aik099\PHPUnit\BrowserTestCase;
+use QATools\QATools\HtmlElements\TypifiedPageFactory;
+use QATools\QATools\PageObject\Container;
+
+abstract class AbstractBrowserTestCase extends BrowserTestCase
+{
+
+ /**
+ * Browsers to use for tests.
+ *
+ * @var array
+ */
+ public static $browsers = array(
+ array('alias' => 'default'),
+ );
+
+ /**
+ * Page factory.
+ *
+ * @var TypifiedPageFactory
+ */
+ protected $pageFactory;
+
+ /**
+ * Reference to kApplication class instance.
+ *
+ * @var kApplication
+ */
+ protected $Application = null;
+
+ /**
+ * Connection to database
+ *
+ * @var IDBConnection
+ */
+ protected $Conn;
+
+ /**
+ * Constructs a test case with the given name.
+ *
+ * @param string $name Test case name.
+ * @param array $data Data.
+ * @param string $data_name Data name.
+ *
+ * @access public
+ */
+ public function __construct($name = null, array $data = array(), $data_name = '')
+ {
+ parent::__construct($name, $data, $data_name);
+
+ $this->Application =& kApplication::Instance();
+ $this->Conn =& $this->Application->GetADODBConnection();
+ }
+
+ /**
+ * Creates factory, that can be used for page creation in the tests.
+ *
+ * @return void
+ * @before
+ */
+ protected function setUpTest()
+ {
+ $this->pageFactory = new TypifiedPageFactory($this->getSession(), $this->getPageFactoryConfig());
+ }
+
+ /**
+ * Returns config object to be used during PageFactory initialization.
+ *
+ * @return Container
+ */
+ protected function getPageFactoryConfig()
+ {
+ $container = new Container();
+ $container['url_factory'] = function () {
+ return new QAToolsUrlFactory();
+ };
+
+ return $container;
+ }
+
+ /**
+ * Gets browser configuration aliases.
+ * Allows to decouple actual test server connection details from test cases.
+ *
+ * @return array
+ */
+ public function getBrowserAliases()
+ {
+ static $cache = null;
+
+ if ( !isset($cache) ) {
+ $cache = require_once WRITEABLE . '/mink_config.php';
+
+ // The remote code coverage collection won't work without "baseUrl" in the browser configuration.
+ foreach ( $cache as $alias_name => $browser_configuration ) {
+ if ( !isset($browser_configuration['alias']) && !isset($browser_configuration['baseUrl']) ) {
+ $cache[$alias_name]['baseUrl'] = $this->Application->BaseURL();
+ }
+ }
+ }
+
+ return $cache;
+ }
+
+}
Property changes on: branches/5.3.x/core/tests/AbstractBrowserTestCase.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Id
\ No newline at end of property
Index: branches/5.3.x/core/units/helpers/cron_helper.php
===================================================================
--- branches/5.3.x/core/units/helpers/cron_helper.php (revision 16799)
+++ branches/5.3.x/core/units/helpers/cron_helper.php (revision 16800)
@@ -1,682 +1,348 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2009 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
+use Cron\CronExpression;
+use Cron\FieldFactory;
+use Cron\FieldInterface;
+
defined('FULL_PATH') or die('restricted access!');
class kCronHelper extends kHelper {
const COMMON = 0;
const MINUTE = 1;
const HOUR = 2;
const DAY = 3;
const MONTH = 4;
const WEEKDAY = 5;
/**
+ * Field factory.
+ *
+ * @var FieldFactory
+ */
+ protected $fieldFactory;
+
+ /**
+ * Creates an instance of kCronHelper class.
+ */
+ public function __construct()
+ {
+ parent::__construct();
+
+ $this->fieldFactory = new FieldFactory();
+ }
+
+ /**
* Defines possible cron fields and their matching priority
*
* @var Array
* @access protected
*/
protected $fieldTypes = Array (self::MONTH, self::DAY, self::WEEKDAY, self::HOUR, self::MINUTE);
protected $commonSettings = Array (
'* * * * *' => 'la_opt_CronEveryMinute',
'*/5 * * * *' => 'la_opt_CronEveryFiveMinutes',
'0,30 * * * *' => 'la_opt_CronTwiceAnHour',
'0 * * * *' => 'la_opt_CronOnceAnHour',
'0 0,12 * * *' => 'la_opt_CronTwiceADay',
'0 0 * * *' => 'la_opt_CronOnceADay',
'0 0 * * 0' => 'la_opt_CronOnceAWeek',
'0 0 1,15 * *' => 'la_opt_CronTwiceAMonth',
'0 0 1 * *' => 'la_opt_CronOnceAMonth',
'0 0 1 1 *' => 'la_opt_CronOnceAYear',
);
protected $minuteSettings = Array (
'*' => 'la_opt_CronEveryMinute',
'*/2' => 'la_opt_CronEveryOtherMinute',
'*/5' => 'la_opt_CronEveryFiveMinutes',
'*/10' => 'la_opt_CronEveryTenMinutes',
'*/15' => 'la_opt_CronEveryFifteenMinutes',
'0,30' => 'la_opt_CronEveryThirtyMinutes',
'--' => 'la_opt_CronMinutes',
// minutes added dynamically later
);
protected $hourSettings = Array (
'*' => 'la_opt_CronEveryHour',
'*/2' => 'la_opt_CronEveryOtherHour',
'*/3' => 'la_opt_CronEveryThreeHours',
'*/4' => 'la_opt_CronEveryFourHours',
'*/6' => 'la_opt_CronEverySixHours',
'0,12' => 'la_opt_CronEveryTwelveHours',
'--' => 'la_opt_CronHours',
// hours added dynamically later
);
protected $daySettings = Array (
'*' => 'la_opt_CronEveryDay',
'*/2' => 'la_opt_CronEveryOtherDay',
'1,15' => 'la_opt_CronTwiceAMonth',
'--' => 'la_opt_CronDays',
// days added dynamically later
);
protected $monthSettings = Array (
'*' => 'la_opt_CronEveryMonth',
'*/2' => 'la_opt_CronEveryOtherMonth',
'*/4' => 'la_opt_CronEveryThreeMonths',
'1,7' => 'la_opt_CronEverySixMonths',
'--' => 'la_opt_CronMonths',
'1' => 'la_opt_January',
'2' => 'la_opt_February',
'3' => 'la_opt_March',
'4' => 'la_opt_April',
'5' => 'la_opt_May',
'6' => 'la_opt_June',
'7' => 'la_opt_July',
'8' => 'la_opt_August',
'9' => 'la_opt_September',
'10' => 'la_opt_October',
'11' => 'la_opt_November',
'12' => 'la_opt_December',
);
protected $weekdaySettings = Array (
'*' => 'la_opt_CronEveryWeekday',
'1-5' => 'la_opt_CronMondayThroughFriday',
'0,6' => 'la_opt_CronSaturdayAndSunday',
'1,3,5' => 'la_opt_CronMondayWednesdayAndFriday',
'2,4' => 'la_opt_CronTuesdayAndThursday',
'--' => 'la_opt_CronWeekdays',
'0' => 'la_opt_Sunday',
'1' => 'la_opt_Monday',
'2' => 'la_opt_Tuesday',
'3' => 'la_opt_Wednesday',
'4' => 'la_opt_Thursday',
'5' => 'la_opt_Friday',
'6' => 'la_opt_Saturday',
);
/**
* Returns possible field options by type
*
* @param int $field_type
* @return Array
*/
public function getOptions($field_type)
{
$mapping = Array (
self::COMMON => $this->commonSettings,
self::MINUTE => $this->minuteSettings,
self::HOUR => $this->hourSettings,
self::DAY => $this->daySettings,
self::MONTH => $this->monthSettings,
self::WEEKDAY => $this->weekdaySettings,
);
/** @var Array $ret */
$ret = $mapping[$field_type];
foreach ($ret as $option_key => $option_title) {
$option_title = substr($option_title, 0, 1) == '+' ? substr($option_title, 1) : $this->Application->Phrase($option_title);
$ret[$option_key] = $option_title;
if ( "$option_key" !== '--' ) {
$ret[$option_key] .= ' (' . $option_key . ')';
}
}
if ( $field_type == self::MINUTE ) {
for ($i = 0; $i <= 59; $i++) {
$ret[$i] = ':' . str_pad($i, 2, '0', STR_PAD_LEFT) . ' (' . $i . ')';
}
}
elseif ( $field_type == self::HOUR ) {
/** @var LanguagesItem $language */
$language = $this->Application->recallObject('lang.current');
$short_time_format = str_replace(':s', '', $language->GetDBField('TimeFormat'));
for ($i = 0; $i <= 23; $i++) {
$ret[$i] = date($short_time_format, mktime($i, 0, 0)) . ' (' . $i . ')';
}
}
elseif ( $field_type == self::DAY ) {
/** @var kMultiLanguageHelper $ml_helper */
$ml_helper = $this->Application->recallObject('kMultiLanguageHelper');
$forms = Array (
'phrase1' => 'la_NumberSuffixSt', 'phrase2' => 'la_NumberSuffixNd', 'phrase3' => 'la_NumberSuffixRd',
'phrase4' => 'la_NumberSuffixTh', 'phrase5' => 'la_NumberSuffixTh'
);
for ($i = 1; $i <= 31; $i++) {
$ret[$i] = $i . $ml_helper->getPluralPhrase($i, $forms) . ' (' . $i . ')';
}
}
return $ret;
}
/**
* Returns field name by type
*
* @param int $field_type
* @param string $field_prefix
* @return string
* @access protected
*/
protected function _getFieldNameByType($field_type, $field_prefix)
{
$field_mapping = Array (
self::MINUTE => 'Minute',
self::HOUR => 'Hour',
self::DAY => 'Day',
self::MONTH => 'Month',
self::WEEKDAY => 'Weekday',
);
return $field_prefix . $field_mapping[$field_type];
}
/**
+ * Get an instance of a field object for a cron expression field type.
+ *
+ * @param integer $field_type Field type.
+ *
+ * @return FieldInterface
+ */
+ protected function getField($field_type)
+ {
+ $field_mapping = array(
+ self::MINUTE => 0,
+ self::HOUR => 1,
+ self::DAY => 2,
+ self::MONTH => 3,
+ self::WEEKDAY => 4,
+ );
+
+ return $this->fieldFactory->getField($field_mapping[$field_type]);
+ }
+
+ /**
* Creates virtual fields for given unit
*
* @param string $prefix
* @param string $field_prefix
* @return void
* @access public
*/
public function initUnit($prefix, $field_prefix = '')
{
$config = $this->Application->getUnitConfig($prefix);
$config->addVirtualFields(Array (
$field_prefix . 'CommonHints' => Array (
'type' => 'string',
'formatter' => 'kOptionsFormatter', 'options' => $this->getOptions(self::COMMON),
'default' => ''
),
));
foreach ($this->fieldTypes as $field_type) {
$field_name = $this->_getFieldNameByType($field_type, $field_prefix);
$config->addVirtualFields(Array (
$field_name => Array ('type' => 'string', 'max_len' => 30, 'default' => '*'),
$field_name . 'Hints' => Array (
'type' => 'string',
'formatter' => 'kOptionsFormatter', 'options' => $this->getOptions($field_type),
'default' => ''
),
));
}
}
/**
* Loads schedule values from database into virtual fields
*
* @param kDBItem $object
* @param string $field_prefix
*/
public function load(kDBItem $object, $field_prefix = '')
{
$combined_value = explode(' ', $object->GetDBField($field_prefix));
foreach ($this->fieldTypes as $field_type) {
$field_name = $this->_getFieldNameByType($field_type, $field_prefix);
$object->SetDBField($field_name, $combined_value[$field_type - 1]);
}
}
/**
* Validates schedule values and saves them to database
*
* @param kDBItem $object
* @param string $field_prefix
* @return bool
* @access public
*/
public function validateAndSave(kDBItem $object, $field_prefix = '')
{
$validated = true;
$combined_value = Array ();
- $cron_field = new kCronField();
foreach ($this->fieldTypes as $field_type) {
$field_name = $this->_getFieldNameByType($field_type, $field_prefix);
$value = preg_replace('/\s+/s', '', mb_strtoupper($object->GetDBField($field_name)));
- if ( $cron_field->validate($field_type, $value) ) {
+ if ( $this->getField($field_type)->validate($value) ) {
$object->SetDBField($field_name, $value);
}
else {
$validated = false;
$object->SetError($field_name, 'invalid_format');
}
$combined_value[$field_type] = $value;
}
ksort($combined_value);
$object->SetDBField($field_prefix, implode(' ', $combined_value));
return $validated;
}
/**
- * Replaces aliases in the field
- *
- * @param int $field_type
- * @param string $value
- * @return string
- * @access public
- */
- public static function replaceAliases($field_type, $value)
- {
- $replacements = Array ();
- $value = mb_strtolower($value);
-
- if ( $field_type == self::MONTH ) {
- $replacements = Array (
- 'jan' => 1, 'feb' => 2, 'mar' => 3, 'apr' => 4, 'may' => 5, 'jun' => 6,
- 'jul' => 7, 'aug' => 8, 'sep' => 9, 'oct' => 10, 'nov' => 11, 'dec' => 12,
- );
- }
- elseif ( $field_type == self::WEEKDAY ) {
- $replacements = Array ('sun' => 0, 'mon' => 1, 'tue' => 2, 'wed' => 3, 'thu' => 4, 'fri' => 5, 'sat' => 6);
- }
-
- if ( $replacements ) {
- $value = str_replace(array_keys($replacements), array_values($replacements), $value);
- }
-
- return $value;
- }
-
- /**
* Returns next (after given one or now) timestamp matching given cron expression
*
* @param string $expression
* @param int $date
* @param bool $inverse
* @param bool $allow_current_date
* @return int
* @access public
* @throws RuntimeException
*/
public function getMatch($expression, $date = NULL, $inverse = false, $allow_current_date = false)
{
if ( !isset($date) ) {
$date = TIMENOW;
}
- $next_run = strtotime('-' . (int)date('s', $date) . ' seconds', $date);
- $expression_parts = explode(' ', $expression);
-
- $cron_field = new kCronField();
-
- // set a hard limit to bail on an impossible date
- for ($i = 0; $i < 1000; $i++) {
- foreach ($this->fieldTypes as $field_type) {
- $matched = false;
- $part = $expression_parts[$field_type - 1];
-
- // check if this is singular or a list
- if ( strpos($part, ',') === false ) {
- $matched = $cron_field->match($field_type, $next_run, $part);
- }
- else {
- $rules = explode(',', $part);
-
- foreach ($rules as $rule) {
- if ( $cron_field->match($field_type, $next_run, $rule) ) {
- $matched = true;
- break;
- }
- }
- }
-
- // if the field is not matched, then start over
- if ( !$matched ) {
- $next_run = $cron_field->increment($field_type, $next_run, $inverse);
- continue 2;
- }
- }
-
- // Skip this match if needed
- if ( (!$allow_current_date && $next_run == $date) ) {
- $next_run = $cron_field->increment(self::MINUTE, $next_run, $inverse);
- continue;
- }
-
- return $next_run;
- }
-
- throw new RuntimeException('Impossible CRON expression');
- }
-}
-
-
-class kCronField extends kBase {
-
- /**
- * Validates field value
- *
- * @param int $field_type
- * @param string $value
- * @param bool $asterisk_allowed
- * @return bool
- * @access public
- */
- public function validate($field_type, $value, $asterisk_allowed = true)
- {
- $rules = explode(',', kCronHelper::replaceAliases($field_type, $value));
-
- foreach ($rules as $rule) {
- if ( $this->_isIncrementRule($rule) ) {
- if ( !$this->_validateIncrementRule($field_type, $rule) ) {
- return false;
- }
- }
- elseif ( $this->_isRangeRule($rule) ) {
- if ( !$this->_validateRangeRule($field_type, $rule) ) {
- return false;
- }
- }
- elseif ( !$this->_validateNumberRule($field_type, $rule, $asterisk_allowed) ) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * Determines if expression is range
- *
- * @param string $rule
- * @return bool
- * @access protected
- */
- protected function _isRangeRule($rule)
- {
- return strpos($rule, '-') !== false;
- }
-
- /**
- * Validates range rule
- *
- * @param int $field_type
- * @param string $rule
- * @return bool
- * @access protected
- */
- protected function _validateRangeRule($field_type, $rule)
- {
- $parts = explode('-', $rule);
-
- if ( count($parts) != 2 ) {
- return false;
- }
-
- $min_value = $parts[0];
- $max_value = $parts[1];
-
- if ( !$this->_validateNumberRule($field_type, $min_value) || !$this->_validateNumberRule($field_type, $max_value) || $min_value >= $max_value ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Determines if expression is increment
- *
- * @param string $rule
- * @return bool
- * @access protected
- */
- protected function _isIncrementRule($rule)
- {
- return strpos($rule, '/') !== false;
- }
-
- /**
- * Validates increment rule
- *
- * @param int $field_type
- * @param string $rule
- * @return bool
- * @access protected
- */
- protected function _validateIncrementRule($field_type, $rule)
- {
- $parts = explode('/', $rule);
-
- if ( count($parts) != 2 ) {
- return false;
- }
-
- $interval = $parts[0];
- $increment = $parts[1];
-
- if ( $this->_isRangeRule($interval) ) {
- if ( !$this->_validateRangeRule($field_type, $interval) ) {
- return false;
- }
- }
- elseif ( !$this->_validateNumberRule($field_type, $interval, true) ) {
- return false;
- }
-
- if ( !$this->_validateNumberRule($field_type, $increment) ) {
- return false;
- }
-
- return true;
- }
-
- /**
- * Validates, that number within range OR an asterisk is given
- *
- * @param int $field_type
- * @param string $rule
- * @param bool $asterisk_allowed
- * @return bool
- * @access protected
- */
- protected function _validateNumberRule($field_type, $rule, $asterisk_allowed = false)
- {
- if ( "$rule" === '*' ) {
- return $asterisk_allowed;
- }
-
- $int_rule = (int)$rule;
-
- if ( !is_numeric($rule) || "$int_rule" !== "$rule" ) {
- // not integer
- return false;
- }
-
- $range_mapping = Array (
- kCronHelper::MINUTE => Array ('from' => 0, 'to' => 59),
- kCronHelper::HOUR => Array ('from' => 0, 'to' => 23),
- kCronHelper::DAY => Array ('from' => 1, 'to' => 31),
- kCronHelper::MONTH => Array ('from' => 1, 'to' => 12),
- kCronHelper::WEEKDAY => Array ('from' => 0, 'to' => 7),
- );
-
- return $int_rule >= $range_mapping[$field_type]['from'] && $int_rule <= $range_mapping[$field_type]['to'];
- }
-
- /**
- * Tries to match given date to given expression
- *
- * @param int $field_type
- * @param int $date
- * @param string $rule
- * @return bool
- * @access public
- */
- public function match($field_type, $date, $rule)
- {
- $date_part = $this->_getDatePart($field_type, $date, $rule);
-
- if ( $this->_isIncrementRule($rule) ) {
- return $this->_isInIncrement($date_part, $rule);
- }
- elseif ( $this->_isRangeRule($rule) ) {
- return $this->_isInRange($date_part, $rule);
- }
-
- return $rule == '*' || $date_part == $rule;
- }
-
- /**
- * Returns only part, needed based on field type of date in timestamp
- *
- * @param int $field_type
- * @param int $date
- * @param string $rule
- * @return int
- * @access protected
- */
- protected function _getDatePart($field_type, $date, $rule)
- {
- $mapping = Array (
- kCronHelper::MINUTE => 'i',
- kCronHelper::HOUR => 'G',
- kCronHelper::DAY => 'j',
- kCronHelper::MONTH => 'n',
- kCronHelper::WEEKDAY => 'N',
- );
-
- if ( $field_type == kCronHelper::WEEKDAY ) {
- // Test to see which Sunday to use -- 0 == 7 == Sunday
- $mapping[$field_type] = in_array(7, str_split($rule)) ? 'N' : 'w';
- }
-
- return (int)date($mapping[$field_type], $date);
- }
-
- /**
- * Test if a value is within a range
- *
- * @param string $date_value Set date value
- * @param string $rule Value to test
- * @return bool
- * @access protected
- */
- protected function _isInRange($date_value, $rule)
- {
- $parts = array_map('trim', explode('-', $rule, 2));
-
- return $date_value >= $parts[0] && $date_value <= $parts[1];
- }
+ $cron = CronExpression::factory($expression);
- /**
- * Test if a value is within an increments of ranges (offset[-to]/step size)
- *
- * @param string $date_value Set date value
- * @param string $rule Value to test
- * @return bool
- * @access protected
- */
- protected function _isInIncrement($date_value, $rule)
- {
- $parts = array_map('trim', explode('/', $rule, 2));
- $stepSize = isset($parts[1]) ? $parts[1] : 0;
+ $date_formatted = date('Y-m-d H:i:s', $date);
- if ( $parts[0] == '*' || $parts[0] == 0 ) {
- return (int)$date_value % $stepSize == 0;
+ if ( $inverse ) {
+ return $cron->getPreviousRunDate($date_formatted, 0, $allow_current_date)->format('U');
}
- $range = explode('-', $parts[0], 2);
- $offset = $range[0];
- $to = isset($range[1]) ? $range[1] : $date_value;
-
- // Ensure that the date value is within the range
- if ( $date_value < $offset || $date_value > $to ) {
- return false;
- }
-
- for ($i = $offset; $i <= $to; $i += $stepSize) {
- if ( $i == $date_value ) {
- return true;
- }
- }
-
- return false;
+ return $cron->getNextRunDate($date_formatted, 0, $allow_current_date)->format('U');
}
- /**
- * Increments/decrements given date for 1 unit based on field type
- *
- * @param int $field_type
- * @param int $date
- * @param bool $inverse
- * @return int
- * @access public
- */
- public function increment($field_type, $date, $inverse = false)
- {
- $mapping = Array (
- kCronHelper::MINUTE => '1 minute',
- kCronHelper::HOUR => '1 hour',
- kCronHelper::DAY => '1 day',
- kCronHelper::MONTH => '1 month',
- kCronHelper::WEEKDAY => '1 day',
- );
-
- return $this->_resetTime($field_type, strtotime(($inverse ? '-' : '+') . $mapping[$field_type], $date), $inverse);
- }
-
- /**
- * Resets time based on field type
- *
- * @param int $field_type
- * @param int $date
- * @param bool $inverse
- * @return int
- * @access public
- */
- protected function _resetTime($field_type, $date, $inverse = false)
- {
- if ( $field_type == kCronHelper::MONTH || $field_type == kCronHelper::WEEKDAY || $field_type == kCronHelper::DAY ) {
- if ( $inverse ) {
- $date = strtotime(date('Y-m-d 23:59:59', $date));
- // set time 23:59:00
- }
- else {
- // set time 00:00:00
- $date = strtotime(date('Y-m-d 00:00:00', $date));
- }
- }
- elseif ( $field_type == kCronHelper::HOUR ) {
- if ( $inverse ) {
- // set time <current_hour>:59:00
- $date = strtotime(date('Y-m-d H:59:59', $date));
- }
- else {
- // set time <current_hour>:00:00
- $date = strtotime(date('Y-m-d H:00:00', $date));
- }
- }
-
- return $date;
- }
-}
\ No newline at end of file
+}
Index: branches/5.3.x/tools/build/inc/custom_phpunit.xml
===================================================================
--- branches/5.3.x/tools/build/inc/custom_phpunit.xml (revision 16799)
+++ branches/5.3.x/tools/build/inc/custom_phpunit.xml (revision 16800)
@@ -1,52 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"
bootstrap="../../../core/kernel/tests/bootstrap.php"
- strict="true"
+ beStrictAboutOutputDuringTests="true"
verbose="true">
<php>
<ini name="memory_limit" value="-1"/>
</php>
<testsuites>
<testsuite name="all">
<directory>../../../core/tests</directory>
<directory>../../../modules/custom/tests</directory>
<exclude>../../../core/tests/unit</exclude>
</testsuite>
</testsuites>
- <listeners>
- <listener class="\Mockery\Adapter\Phpunit\TestListener"/>
- </listeners>
-
<logging>
<!--<log type="coverage-html" target="../../../build/coverage" title="BankAccount"
charset="UTF-8" yui="true" highlight="true"
lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="../../../build/logs/clover.xml"/>-->
- <log type="junit" target="../../../build/logs/junit.xml" logIncompleteSkipped="false"/>
+ <log type="junit" target="../../../build/logs/junit.xml"/>
+ <!--<log type="junit" target="../../../build/logs/junit.xml" logIncompleteSkipped="false"/>-->
</logging>
<filter>
- <blacklist>
+ <!--<blacklist>
<directory suffix=".php">..</directory>
- </blacklist>
+ </blacklist>-->
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">../../../modules/custom</directory>
<exclude>
<directory>../../../blog</directory>
<directory>../../../modules/mpdf</directory>
<directory>../../../core/editor</directory>
<directory>../../../core/ckeditor</directory>
<directory>../../../system</directory>
<directory>../../../vendor</directory>
<directory>../../../core/tests</directory>
<directory>../../../modules/*/tests</directory>
<file>../../../core/kernel/tests/bootstrap.php</file>
</exclude>
</whitelist>
</filter>
</phpunit>
Index: branches/5.3.x/tools/build/inc/phpunit.xml
===================================================================
--- branches/5.3.x/tools/build/inc/phpunit.xml (revision 16799)
+++ branches/5.3.x/tools/build/inc/phpunit.xml (revision 16800)
@@ -1,55 +1,52 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit colors="true"
bootstrap="../../../core/kernel/tests/bootstrap.php"
- strict="true"
+ beStrictAboutOutputDuringTests="true"
verbose="true">
<php>
<ini name="memory_limit" value="-1"/>
</php>
<testsuites>
<testsuite name="all">
<directory>../../../core/tests</directory>
<directory>../../../modules/*/tests</directory>
<exclude>../../../core/tests/unit</exclude>
</testsuite>
<testsuite name="custom">
<directory>../../../modules/custom/tests</directory>
</testsuite>
</testsuites>
- <listeners>
- <listener class="\Mockery\Adapter\Phpunit\TestListener"/>
- </listeners>
-
<logging>
<!--<log type="coverage-html" target="../../../build/coverage" title="BankAccount"
charset="UTF-8" yui="true" highlight="true"
lowUpperBound="35" highLowerBound="70"/>
<log type="coverage-clover" target="../../../build/logs/clover.xml"/>-->
- <log type="junit" target="../../../build/logs/junit.xml" logIncompleteSkipped="false"/>
+ <log type="junit" target="../../../build/logs/junit.xml"/>
+ <!--<log type="junit" target="../../../build/logs/junit.xml" logIncompleteSkipped="false"/>-->
</logging>
<filter>
- <blacklist>
+ <!--<blacklist>
<directory suffix=".php">..</directory>
- </blacklist>
+ </blacklist>-->
<whitelist addUncoveredFilesFromWhitelist="true">
<directory suffix=".php">../../..</directory>
<exclude>
<directory>../../../blog</directory>
<directory>../../../modules/mpdf</directory>
<directory>../../../core/editor</directory>
<directory>../../../core/ckeditor</directory>
<directory>../../../system</directory>
<directory>../../../vendor</directory>
<directory>../../../core/tests</directory>
<directory>../../../modules/*/tests</directory>
<file>../../../core/kernel/tests/bootstrap.php</file>
</exclude>
</whitelist>
</filter>
</phpunit>
Index: branches/5.3.x/tools/build/targets/common.xml
===================================================================
--- branches/5.3.x/tools/build/targets/common.xml (revision 16799)
+++ branches/5.3.x/tools/build/targets/common.xml (revision 16800)
@@ -1,212 +1,211 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
### Requirements
Using the template requires a range of tools packages present. They can be
installed as follows:
Install packages:
composer global require sebastian/phpcpd:~2.0 phploc/phploc:~2.1 phpmd/phpmd:~2.2 phing/phing:~2.1 squizlabs/php_codesniffer:~2.3
Add following to the your ".bashrc" file:
export PATH="$PATH:$HOME/.composer/vendor/bin"
-->
<project name="inc_common" default="build">
<import file="targets/db.xml"/>
<import file="targets/deploy.xml"/>
<import file="targets/folders.xml"/>
<php function="ini_set">
<param value="memory_limit"/>
<param value="-1"/>
</php>
<!-- AutoLoader is needed to make PhpLoc (installed globally via Composer) work. -->
<if>
<available file="${env.HOME}/.composer/vendor/autoload.php" type="file"/>
<then>
<autoloader autoloaderpath="${env.HOME}/.composer/vendor/autoload.php"/>
</then>
</if>
<target name="build" description="Builds a project" depends="init,verify,analyze"/>
<target name="build-parallel" description="Builds a project (long targets executed in parallel)" depends="init,lint,tools-parallel,phpunit"/>
<target name="tools-parallel" description="Run tools in parallel">
<parallel threadCount="2">
<sequential>
<phingcall target="pdepend"/>
<phingcall target="phpmd-ci"/>
</sequential>
<phingcall target="phpcpd"/>
<phingcall target="phpcs-ci"/>
<phingcall target="phploc"/>
<phingcall target="phpdoc"/>
</parallel>
</target>
<!-- ### Verify code consistency
Make sure that our code is clean and functional. -->
<target name="verify" description="Verify code consistency" depends="init,lint"/>
<!--<target name="verify" description="Verify code consistency" depends="init,lint,phpunit"/>-->
<!-- ### Analyze code
Perform static analysis of the code to generate statistics, identify potential
problems and opportunities for refactorings and make sure that the code
complies with coding standards. -->
<target name="analyze" description="Analyze code" depends="init,phploc,phpmd-ci,phpcpd,phpcs-ci"/>
<!--<target name="analyze" description="Analyze code" depends="init,phploc,pdepend,phpmd-ci,phpcpd,phpcs-ci"/>-->
<!-- ### Generate documentation
Generate HTML documentation and code browser for the project. -->
<target name="docs" description="Generate documentation" depends="init,phpdoc" />
<!-- ### PHP linting
Check files for syntax errors. -->
<target name="lint" description="Perform syntax check of sourcecode files" depends="init">
<phplint haltonfailure="true" deprecatedAsError="false" cachefile="${build.cache.dir}/phplint.txt">
<fileset refid="php.files"/>
</phplint>
</target>
<!-- ### Generate code statistics
Measures the size of the project using
[phploc](http://sebastianbergmann.github.com/phploc/) and generates
statistics. -->
<target name="phploc" description="Measure project size using PHPLOC" depends="init">
<phploc reportType="csv" reportName="phploc" reportDirectory="${build.logs.dir}">
<fileset refid="php.files"/>
</phploc>
</target>
<target name="pdepend" description="Calculate software metrics using PHP_Depend" depends="init">
<exec executable="pdepend" passthru="true">
<arg value="--jdepend-xml=${build.logs.dir}/jdepend.xml"/>
<arg value="--jdepend-chart=${build.pdepend.dir}/dependencies.svg"/>
<arg value="--overview-pyramid=${build.pdepend.dir}/overview-pyramid.svg"/>
<arg value="--ignore=${pdepend.exclude}"/>
<arg path="${scan.dir}"/>
</exec>
</target>
<!-- ### Detect code mess
Uses [PHPMD](http://phpmd.org/) to detect code mess and look for potential
problems. -->
<target name="phpmd-ci" description="Perform project mess detection using PHPMD (creates a log file for the CI server)" depends="init">
<fail message="Please create own 'phpmd-ci' task using 'parallel' and 'phpmd-ci-inc' tasks." />
</target>
<target name="phpmd-ci-inc">
<exec executable="phpmd" passthru="true">
<arg path="${param.include}"/>
<arg value="xml"/>
<arg value="${build.config.dir}/inc/phpmd.xml"/>
<arg value="--reportfile"/>
<arg value="${build.logs.dir}/${param.report.file}"/>
<arg value="--suffixes"/>
<arg value="php"/>
<arg value="--exclude"/>
<arg value="${param.exclude}"/>
</exec>
</target>
<target name="phpcs" description="Find coding standard violations using PHP_CodeSniffer (print human readable output)" depends="init">
<exec executable="phpcs" passthru="true">
<arg value="--standard=${vendor.dir}/aik099/coding-standard/CodingStandard"/>
<arg value="-wps"/>
<arg value="--encoding=UTF-8"/>
<arg value="--extensions=php"/>
<arg value="-d"/>
<arg value="memory_limit=-1"/>
<arg path="${scan.dir}"/>
</exec>
</target>
<target name="phpcbf" description="Fixes coding standard violations using PHP_CodeSniffer" depends="init">
<exec executable="phpcbf" passthru="true">
<arg value="--standard=${vendor.dir}/aik099/coding-standard/CodingStandard"/>
<arg value="-wps"/>
- <arg value="--no-patch"/>
<arg value="--encoding=UTF-8"/>
<arg value="--extensions=php"/>
<arg value="-d"/>
<arg value="memory_limit=-1"/>
<arg path="${scan.dir}"/>
</exec>
</target>
<target name="phpcs-ci" description="Find coding standard violations using PHP_CodeSniffer (creates a log file for the CI server)" depends="init">
<exec executable="phpcs" passthru="true">
<arg value="--report=checkstyle"/>
<arg value="--report-file=${build.logs.dir}/checkstyle.xml"/>
<arg value="--standard=${vendor.dir}/aik099/coding-standard/CodingStandard"/>
<arg value="-wp"/>
<arg value="--encoding=UTF-8"/>
<arg value="--extensions=php"/>
<arg value="-d"/>
<arg value="memory_limit=-1"/>
<arg path="${scan.dir}"/>
</exec>
</target>
<!-- ### Detect potential copy/pasting
Uses [phpcpd](https://github.com/sebastianbergmann/phpcpd) to detect duplicate
code. This indicates potential refactorings.-->
<target name="phpcpd" description="Find duplicate code using PHPCPD" depends="init">
<exec command="which phpcpd" outputProperty="phpcpd_binary"/>
<exec executable="php" passthru="true">
<arg value="-d memory_limit=-1"/>
<arg value="${phpcpd_binary}"/>
<arg value="--log-pmd=${build.logs.dir}/pmd-cpd.xml"/>
<arg value="--progress"/>
<arg line="--names-exclude=*_config.php ${phpcpd.exclude}"/>
<arg path="${scan.dir}"/>
</exec>
</target>
<!-- ### Generate documentation -->
<!-- #### Generate API Documentation
Uses [phpDocumentor](http://www.phpdoc.org/) to generate documentation. -->
<target name="phpdoc" description="Generate API documentation using phpdoc" depends="init">
<phpdoc2 title="API Documentation" destdir="${build.api.dir}" template="responsive" quiet="true">
<fileset refid="php.files"/>
</phpdoc2>
</target>
<target name="phpunit" description="Run tests with PHPUnit" depends="init">
<exec executable="phpunit" logoutput="true" checkreturn="true">
<arg value="--configuration"/>
<arg path="${build.config.dir}/phpunit.xml"/>
<arg value="--testsuite"/>
<arg value="custom"/>
</exec>
</target>
<target name="init" depends="create-aliases,folders-create,deploy-ci" description="Prepare for build">
</target>
<target name="create-aliases" description="Creating directory aliases" hidden="true">
<property name="pdo.dsn.without.db" value="mysql:host=${db.host}"/>
<property name="pdo.dsn" value="${pdo.dsn.without.db};dbname=${db.name}"/>
<property name="build.config.dir" value="."/>
<property name="build.dir" value="${base.dir}/build"/>
<!--<property name="build.api.dir" value="${build.dir}/api"/>-->
<!--<property name="build.coverage.dir" value="${build.dir}/coverage"/>-->
<property name="build.logs.dir" value="${build.dir}/logs"/>
<property name="build.cache.dir" value="${build.dir}/cache"/>
<!--<property name="build.pdepend.dir" value="${build.dir}/pdepend"/>-->
<property name="vendor.dir" value="${base.dir}/vendor"/>
</target>
</project>
Index: branches/5.3.x/tools/class_locator.php
===================================================================
--- branches/5.3.x/tools/class_locator.php (revision 16799)
+++ branches/5.3.x/tools/class_locator.php (revision 16800)
@@ -1,37 +1,61 @@
<?php
/**
* @version $Id$
* @package In-Portal
* @copyright Copyright (C) 1997 - 2016 Intechnic. All rights reserved.
* @license GNU/GPL
* In-Portal is Open Source software.
* This means that this software may have been modified pursuant
* the GNU General Public License, and as distributed it includes
* or is derivative of works licensed under the GNU General Public License
* or other free or open source software licenses.
* See http://www.in-portal.org/license for copyright notices and details.
*/
+use Composer\Autoload\ClassLoader;
+
$start = microtime(true);
define('DBG_ZEND_PRESENT', 1);
define('INDEX_FILE', 'index.php');
define('FULL_PATH', realpath(dirname(__FILE__) . '/..'));
include_once(FULL_PATH . '/core/kernel/startup.php');
$application = kApplication::Instance();
$application->Init();
-/** @var \Composer\Autoload\ClassLoader $composer_class_loader */
+/** @var ClassLoader $composer_class_loader */
$composer_class_loader = require FULL_PATH . '/vendor/autoload.php';
return function ($class) use ($application, $composer_class_loader) {
+ // 1. Search for class within In-Portal.
$file = $application->findClassFile($class);
if ( $file !== false ) {
return $file;
}
- return $composer_class_loader->findFile($class);
+ // 2. Search for class within Composer + register custom autoloaders.
+ $file = $composer_class_loader->findFile($class);
+
+ if ( $file !== false ) {
+ return $file;
+ }
+
+ // 3. Use custom autoloaders.
+ $dynamic_autoloader_namespaces = array(
+ 'ConsoleHelpers\\PHPUnitCompat\\',
+ 'Yoast\\PHPUnitPolyfills\\',
+ );
+
+ foreach ( $dynamic_autoloader_namespaces as $dynamic_autoloader_namespace ) {
+ if ( strpos($class, $dynamic_autoloader_namespace) !== 0 ) {
+ continue;
+ }
+
+ return (new ReflectionClass($class))->getFileName();
+ }
+
+ return false;
};
Index: branches/5.3.x/tools/mink_config.php-dist
===================================================================
--- branches/5.3.x/tools/mink_config.php-dist (nonexistent)
+++ branches/5.3.x/tools/mink_config.php-dist (revision 16800)
@@ -0,0 +1,12 @@
+<?php
+return array(
+ 'default' => array('alias' => 'ff_local'),
+
+ 'ff_local' => array(
+ 'browserName' => 'firefox', 'host' => 'localhost', 'port' => 4444, 'timeout' => 15
+ ),
+
+ 'cr_local' => array(
+ 'browserName' => 'chrome', 'host' => 'localhost', 'port' => 4444,
+ ),
+);
Index: branches/5.3.x
===================================================================
--- branches/5.3.x (revision 16799)
+++ branches/5.3.x (revision 16800)
Property changes on: branches/5.3.x
___________________________________________________________________
Modified: svn:mergeinfo
## -0,0 +0,1 ##
Merged /in-portal/branches/5.2.x:r16637,16761,16763,16769,16792,16799

Event Timeline