Version Description
Download this release
Release Info
| Developer | ModernTribe |
| Plugin | |
| Version | 4.9.8 |
| Comparing to | |
| See all releases | |
Code changes from version 4.9.7 to 4.9.8
- common/lang/tribe-common-de_DE.mo +0 -0
- common/lang/tribe-common.pot +36 -32
- common/src/Tribe/Assets.php +21 -3
- common/src/Tribe/Field.php +7 -0
- common/src/Tribe/Image/Uploader.php +13 -0
- common/src/Tribe/Log.php +3 -0
- common/src/Tribe/Log/Action_Logger.php +125 -0
- common/src/Tribe/Log/Canonical_Formatter.php +101 -0
- common/src/Tribe/Log/Monolog_Logger.php +54 -0
- common/src/Tribe/Log/README.md +154 -0
- common/src/Tribe/Log/Service_Provider.php +148 -0
- common/src/Tribe/Main.php +2 -13
- common/src/Tribe/Process/Handler.php +40 -0
- common/src/Tribe/Process/Post_Thumbnail_Setter.php +48 -2
- common/src/Tribe/Service_Providers/Tooltip.php +10 -2
- common/src/Tribe/Utils/Collection_Interface.php +1 -1
- common/src/Tribe/Utils/Lazy_Collection.php +9 -0
- common/src/Tribe/Utils/Lazy_Events.php +168 -0
- common/src/Tribe/Utils/Lazy_String.php +141 -0
- common/src/Tribe/Utils/Post_Thumbnail.php +61 -8
- common/src/resources/css/tribe-common-admin.css +109 -102
- common/src/resources/css/tribe-common-admin.min.css +1 -1
- common/src/resources/images/mascot.png +0 -0
- common/src/resources/js/tooltip.js +6 -5
- common/src/resources/js/tooltip.min.js +1 -1
- common/src/resources/postcss/tribe-common-admin.pcss +160 -128
- common/src/resources/postcss/utilities/variables/_box-shadows.pcss +1 -0
- common/src/resources/postcss/utilities/variables/_colors.pcss +1 -0
- common/src/resources/postcss/utilities/variables/_grids.pcss +1 -1
- common/src/resources/postcss/utilities/variables/_z-index.pcss +3 -0
- common/vendor/autoload.php +1 -1
- common/vendor/autoload_52.php +1 -1
- common/vendor/composer/autoload_classmap.php +110 -0
- common/vendor/composer/autoload_commands_classmap.php +0 -105
- common/vendor/composer/autoload_commands_real.php +0 -34
- common/vendor/composer/autoload_framework_classmap.php +0 -2700
- common/vendor/composer/autoload_framework_real.php +0 -34
- common/vendor/composer/autoload_psr4.php +2 -0
- common/vendor/composer/autoload_real.php +4 -4
- common/vendor/composer/autoload_real_52.php +3 -3
- common/vendor/composer/autoload_static.php +131 -5
- common/vendor/composer/installed.json +133 -4
- common/vendor/monolog/monolog/src/Monolog/ErrorHandler.php +239 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php +78 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php +89 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php +116 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php +86 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php +36 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +138 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php +141 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php +214 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +181 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php +47 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php +166 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php +107 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +314 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php +48 -0
- common/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php +113 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php +196 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php +68 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php +101 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php +148 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +240 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php +129 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php +211 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php +72 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php +151 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php +57 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php +169 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php +45 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php +107 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php +128 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php +82 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php +140 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php +28 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php +59 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php +34 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +177 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php +195 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php +126 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +127 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php +65 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php +116 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php +90 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php +116 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php +365 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php +69 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php +62 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php +55 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php +102 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php +67 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +68 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php +21 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php +59 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php +185 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php +204 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php +45 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php +242 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php +56 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php +185 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php +232 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php +97 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php +144 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php +190 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php +82 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php +294 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php +220 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php +120 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php +80 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php +385 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php +176 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php +111 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php +67 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php +56 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php +103 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php +164 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php +71 -0
- common/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php +95 -0
- common/vendor/monolog/monolog/src/Monolog/Logger.php +791 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php +64 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php +112 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php +35 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php +63 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php +35 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php +63 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php +31 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php +25 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php +50 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php +44 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php +59 -0
- common/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php +113 -0
- common/vendor/monolog/monolog/src/Monolog/Registry.php +134 -0
- common/vendor/monolog/monolog/src/Monolog/ResettableInterface.php +31 -0
- common/vendor/monolog/monolog/src/Monolog/SignalHandler.php +115 -0
- common/vendor/monolog/monolog/src/Monolog/Utils.php +25 -0
- common/vendor/psr/log/Psr/Log/AbstractLogger.php +128 -0
- common/vendor/psr/log/Psr/Log/InvalidArgumentException.php +7 -0
- common/vendor/psr/log/Psr/Log/LogLevel.php +18 -0
- common/vendor/psr/log/Psr/Log/LoggerAwareInterface.php +18 -0
- common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php +26 -0
- common/vendor/psr/log/Psr/Log/LoggerInterface.php +123 -0
- common/vendor/psr/log/Psr/Log/LoggerTrait.php +140 -0
- common/vendor/psr/log/Psr/Log/NullLogger.php +28 -0
- common/vendor/tooltipster/tooltipster.bundle.css +388 -0
- common/vendor/tooltipster/tooltipster.bundle.js +4273 -0
- common/vendor/tooltipster/tooltipster.bundle.min.css +1 -0
- common/vendor/tooltipster/tooltipster.bundle.min.js +2 -0
common/lang/tribe-common-de_DE.mo
CHANGED
|
Binary file
|
common/lang/tribe-common.pot
CHANGED
|
@@ -2,13 +2,13 @@
|
|
| 2 |
# This file is distributed under the same license as the Tribe Common package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
-
"Project-Id-Version: Tribe Common 4.9.
|
| 6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
| 7 |
-
"POT-Creation-Date: 2019-
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
-
"PO-Revision-Date: 2019-
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
|
@@ -457,15 +457,15 @@ msgstr ""
|
|
| 457 |
msgid "Invalid field type specified"
|
| 458 |
msgstr ""
|
| 459 |
|
| 460 |
-
#: src/Tribe/Field.php:
|
| 461 |
msgid "No radio options specified"
|
| 462 |
msgstr ""
|
| 463 |
|
| 464 |
-
#: src/Tribe/Field.php:
|
| 465 |
msgid "No checkbox options specified"
|
| 466 |
msgstr ""
|
| 467 |
|
| 468 |
-
#: src/Tribe/Field.php:
|
| 469 |
msgid "No select options specified"
|
| 470 |
msgstr ""
|
| 471 |
|
|
@@ -1641,6 +1641,10 @@ msgstr ""
|
|
| 1641 |
msgid "Wyoming"
|
| 1642 |
msgstr ""
|
| 1643 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1644 |
#: src/Tribe/Log/Admin.php:133
|
| 1645 |
msgctxt "log selector"
|
| 1646 |
msgid "None currently available"
|
|
@@ -1659,107 +1663,107 @@ msgstr ""
|
|
| 1659 |
msgid "Null logger (will log nothing)"
|
| 1660 |
msgstr ""
|
| 1661 |
|
| 1662 |
-
#: src/Tribe/Log.php:
|
| 1663 |
msgid "Cannot set %s as the current logging engine"
|
| 1664 |
msgstr ""
|
| 1665 |
|
| 1666 |
-
#: src/Tribe/Log.php:
|
| 1667 |
msgid "Disabled"
|
| 1668 |
msgstr ""
|
| 1669 |
|
| 1670 |
-
#: src/Tribe/Log.php:
|
| 1671 |
msgid "Only errors"
|
| 1672 |
msgstr ""
|
| 1673 |
|
| 1674 |
-
#: src/Tribe/Log.php:
|
| 1675 |
msgid "Warnings and errors"
|
| 1676 |
msgstr ""
|
| 1677 |
|
| 1678 |
-
#: src/Tribe/Log.php:
|
| 1679 |
msgid "Full debug (all events)"
|
| 1680 |
msgstr ""
|
| 1681 |
|
| 1682 |
-
#: src/Tribe/Main.php:
|
| 1683 |
msgid ": activate to sort column ascending"
|
| 1684 |
msgstr ""
|
| 1685 |
|
| 1686 |
-
#: src/Tribe/Main.php:
|
| 1687 |
msgid ": activate to sort column descending"
|
| 1688 |
msgstr ""
|
| 1689 |
|
| 1690 |
-
#: src/Tribe/Main.php:
|
| 1691 |
msgid "Show _MENU_ entries"
|
| 1692 |
msgstr ""
|
| 1693 |
|
| 1694 |
-
#: src/Tribe/Main.php:
|
| 1695 |
msgid "No data available in table"
|
| 1696 |
msgstr ""
|
| 1697 |
|
| 1698 |
-
#: src/Tribe/Main.php:
|
| 1699 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
| 1700 |
msgstr ""
|
| 1701 |
|
| 1702 |
-
#: src/Tribe/Main.php:
|
| 1703 |
msgid "Showing 0 to 0 of 0 entries"
|
| 1704 |
msgstr ""
|
| 1705 |
|
| 1706 |
-
#: src/Tribe/Main.php:
|
| 1707 |
msgid "(filtered from _MAX_ total entries)"
|
| 1708 |
msgstr ""
|
| 1709 |
|
| 1710 |
-
#: src/Tribe/Main.php:
|
| 1711 |
msgid "No matching records found"
|
| 1712 |
msgstr ""
|
| 1713 |
|
| 1714 |
-
#: src/Tribe/Main.php:
|
| 1715 |
msgid "Search:"
|
| 1716 |
msgstr ""
|
| 1717 |
|
| 1718 |
-
#: src/Tribe/Main.php:
|
| 1719 |
msgid "All items on this page were selected. "
|
| 1720 |
msgstr ""
|
| 1721 |
|
| 1722 |
-
#: src/Tribe/Main.php:
|
| 1723 |
msgid "Select all pages"
|
| 1724 |
msgstr ""
|
| 1725 |
|
| 1726 |
-
#: src/Tribe/Main.php:
|
| 1727 |
msgid "Clear Selection."
|
| 1728 |
msgstr ""
|
| 1729 |
|
| 1730 |
-
#: src/Tribe/Main.php:
|
| 1731 |
msgid "All"
|
| 1732 |
msgstr ""
|
| 1733 |
|
| 1734 |
-
#: src/Tribe/Main.php:
|
| 1735 |
msgid "Next"
|
| 1736 |
msgstr ""
|
| 1737 |
|
| 1738 |
-
#: src/Tribe/Main.php:
|
| 1739 |
msgid "Previous"
|
| 1740 |
msgstr ""
|
| 1741 |
|
| 1742 |
-
#: src/Tribe/Main.php:
|
| 1743 |
msgid ": Selected %d rows"
|
| 1744 |
msgstr ""
|
| 1745 |
|
| 1746 |
-
#: src/Tribe/Main.php:
|
| 1747 |
msgid ": Selected 1 row"
|
| 1748 |
msgstr ""
|
| 1749 |
|
| 1750 |
-
#: src/Tribe/Main.php:
|
| 1751 |
msgid "Prev"
|
| 1752 |
msgstr ""
|
| 1753 |
|
| 1754 |
-
#: src/Tribe/Main.php:
|
| 1755 |
msgid "Today"
|
| 1756 |
msgstr ""
|
| 1757 |
|
| 1758 |
-
#: src/Tribe/Main.php:
|
| 1759 |
msgid "Done"
|
| 1760 |
msgstr ""
|
| 1761 |
|
| 1762 |
-
#: src/Tribe/Main.php:
|
| 1763 |
msgid "Clear"
|
| 1764 |
msgstr ""
|
| 1765 |
|
| 2 |
# This file is distributed under the same license as the Tribe Common package.
|
| 3 |
msgid ""
|
| 4 |
msgstr ""
|
| 5 |
+
"Project-Id-Version: Tribe Common 4.9.15.1\n"
|
| 6 |
"Report-Msgid-Bugs-To: http://m.tri.be/191x\n"
|
| 7 |
+
"POT-Creation-Date: 2019-08-30 19:44:26+00:00\n"
|
| 8 |
"MIME-Version: 1.0\n"
|
| 9 |
"Content-Type: text/plain; charset=UTF-8\n"
|
| 10 |
"Content-Transfer-Encoding: 8bit\n"
|
| 11 |
+
"PO-Revision-Date: 2019-08-30 19:44\n"
|
| 12 |
"Last-Translator: \n"
|
| 13 |
"Language-Team: \n"
|
| 14 |
|
| 457 |
msgid "Invalid field type specified"
|
| 458 |
msgstr ""
|
| 459 |
|
| 460 |
+
#: src/Tribe/Field.php:539
|
| 461 |
msgid "No radio options specified"
|
| 462 |
msgstr ""
|
| 463 |
|
| 464 |
+
#: src/Tribe/Field.php:575
|
| 465 |
msgid "No checkbox options specified"
|
| 466 |
msgstr ""
|
| 467 |
|
| 468 |
+
#: src/Tribe/Field.php:633
|
| 469 |
msgid "No select options specified"
|
| 470 |
msgstr ""
|
| 471 |
|
| 1641 |
msgid "Wyoming"
|
| 1642 |
msgstr ""
|
| 1643 |
|
| 1644 |
+
#: src/Tribe/Log/Action_Logger.php:39
|
| 1645 |
+
msgid "Action-based Logger"
|
| 1646 |
+
msgstr ""
|
| 1647 |
+
|
| 1648 |
#: src/Tribe/Log/Admin.php:133
|
| 1649 |
msgctxt "log selector"
|
| 1650 |
msgid "None currently available"
|
| 1663 |
msgid "Null logger (will log nothing)"
|
| 1664 |
msgstr ""
|
| 1665 |
|
| 1666 |
+
#: src/Tribe/Log.php:289
|
| 1667 |
msgid "Cannot set %s as the current logging engine"
|
| 1668 |
msgstr ""
|
| 1669 |
|
| 1670 |
+
#: src/Tribe/Log.php:388
|
| 1671 |
msgid "Disabled"
|
| 1672 |
msgstr ""
|
| 1673 |
|
| 1674 |
+
#: src/Tribe/Log.php:389
|
| 1675 |
msgid "Only errors"
|
| 1676 |
msgstr ""
|
| 1677 |
|
| 1678 |
+
#: src/Tribe/Log.php:390
|
| 1679 |
msgid "Warnings and errors"
|
| 1680 |
msgstr ""
|
| 1681 |
|
| 1682 |
+
#: src/Tribe/Log.php:391
|
| 1683 |
msgid "Full debug (all events)"
|
| 1684 |
msgstr ""
|
| 1685 |
|
| 1686 |
+
#: src/Tribe/Main.php:281
|
| 1687 |
msgid ": activate to sort column ascending"
|
| 1688 |
msgstr ""
|
| 1689 |
|
| 1690 |
+
#: src/Tribe/Main.php:282
|
| 1691 |
msgid ": activate to sort column descending"
|
| 1692 |
msgstr ""
|
| 1693 |
|
| 1694 |
+
#: src/Tribe/Main.php:284
|
| 1695 |
msgid "Show _MENU_ entries"
|
| 1696 |
msgstr ""
|
| 1697 |
|
| 1698 |
+
#: src/Tribe/Main.php:285
|
| 1699 |
msgid "No data available in table"
|
| 1700 |
msgstr ""
|
| 1701 |
|
| 1702 |
+
#: src/Tribe/Main.php:286
|
| 1703 |
msgid "Showing _START_ to _END_ of _TOTAL_ entries"
|
| 1704 |
msgstr ""
|
| 1705 |
|
| 1706 |
+
#: src/Tribe/Main.php:287
|
| 1707 |
msgid "Showing 0 to 0 of 0 entries"
|
| 1708 |
msgstr ""
|
| 1709 |
|
| 1710 |
+
#: src/Tribe/Main.php:288
|
| 1711 |
msgid "(filtered from _MAX_ total entries)"
|
| 1712 |
msgstr ""
|
| 1713 |
|
| 1714 |
+
#: src/Tribe/Main.php:289
|
| 1715 |
msgid "No matching records found"
|
| 1716 |
msgstr ""
|
| 1717 |
|
| 1718 |
+
#: src/Tribe/Main.php:290
|
| 1719 |
msgid "Search:"
|
| 1720 |
msgstr ""
|
| 1721 |
|
| 1722 |
+
#: src/Tribe/Main.php:291
|
| 1723 |
msgid "All items on this page were selected. "
|
| 1724 |
msgstr ""
|
| 1725 |
|
| 1726 |
+
#: src/Tribe/Main.php:292
|
| 1727 |
msgid "Select all pages"
|
| 1728 |
msgstr ""
|
| 1729 |
|
| 1730 |
+
#: src/Tribe/Main.php:293
|
| 1731 |
msgid "Clear Selection."
|
| 1732 |
msgstr ""
|
| 1733 |
|
| 1734 |
+
#: src/Tribe/Main.php:295
|
| 1735 |
msgid "All"
|
| 1736 |
msgstr ""
|
| 1737 |
|
| 1738 |
+
#: src/Tribe/Main.php:296 src/Tribe/Main.php:313
|
| 1739 |
msgid "Next"
|
| 1740 |
msgstr ""
|
| 1741 |
|
| 1742 |
+
#: src/Tribe/Main.php:297
|
| 1743 |
msgid "Previous"
|
| 1744 |
msgstr ""
|
| 1745 |
|
| 1746 |
+
#: src/Tribe/Main.php:302
|
| 1747 |
msgid ": Selected %d rows"
|
| 1748 |
msgstr ""
|
| 1749 |
|
| 1750 |
+
#: src/Tribe/Main.php:303
|
| 1751 |
msgid ": Selected 1 row"
|
| 1752 |
msgstr ""
|
| 1753 |
|
| 1754 |
+
#: src/Tribe/Main.php:314
|
| 1755 |
msgid "Prev"
|
| 1756 |
msgstr ""
|
| 1757 |
|
| 1758 |
+
#: src/Tribe/Main.php:315 src/Tribe/Main.php:317
|
| 1759 |
msgid "Today"
|
| 1760 |
msgstr ""
|
| 1761 |
|
| 1762 |
+
#: src/Tribe/Main.php:316
|
| 1763 |
msgid "Done"
|
| 1764 |
msgstr ""
|
| 1765 |
|
| 1766 |
+
#: src/Tribe/Main.php:318
|
| 1767 |
msgid "Clear"
|
| 1768 |
msgstr ""
|
| 1769 |
|
common/src/Tribe/Assets.php
CHANGED
|
@@ -59,14 +59,32 @@ class Tribe__Assets {
|
|
| 59 |
uasort( $assets, [ $this, 'order_by_priority' ] );
|
| 60 |
|
| 61 |
foreach ( $assets as $asset ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
if ( 'js' === $asset->type ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
wp_register_script( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->in_footer );
|
|
|
|
|
|
|
|
|
|
| 64 |
} else {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
wp_register_style( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->media );
|
| 66 |
-
}
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
|
|
|
| 70 |
|
| 71 |
// If we don't have an action we don't even register the action to enqueue.
|
| 72 |
if ( empty( $asset->action ) ) {
|
| 59 |
uasort( $assets, [ $this, 'order_by_priority' ] );
|
| 60 |
|
| 61 |
foreach ( $assets as $asset ) {
|
| 62 |
+
// Asset is already registered.
|
| 63 |
+
if ( $asset->is_registered ) {
|
| 64 |
+
continue;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
if ( 'js' === $asset->type ) {
|
| 68 |
+
// Script is already registered.
|
| 69 |
+
if ( wp_script_is( $asset->slug, 'registered' ) ) {
|
| 70 |
+
continue;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
wp_register_script( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->in_footer );
|
| 74 |
+
|
| 75 |
+
// Register that this asset is actually registered on the WP methods.
|
| 76 |
+
$asset->is_registered = wp_script_is( $asset->slug, 'registered' );
|
| 77 |
} else {
|
| 78 |
+
// Style is already registered.
|
| 79 |
+
if ( wp_style_is( $asset->slug, 'registered' ) ) {
|
| 80 |
+
continue;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
wp_register_style( $asset->slug, $asset->url, $asset->deps, $asset->version, $asset->media );
|
|
|
|
| 84 |
|
| 85 |
+
// Register that this asset is actually registered on the WP methods.
|
| 86 |
+
$asset->is_registered = wp_style_is( $asset->slug, 'registered' );
|
| 87 |
+
}
|
| 88 |
|
| 89 |
// If we don't have an action we don't even register the action to enqueue.
|
| 90 |
if ( empty( $asset->action ) ) {
|
common/src/Tribe/Field.php
CHANGED
|
@@ -521,8 +521,15 @@ if ( ! class_exists( 'Tribe__Field' ) ) {
|
|
| 521 |
$field .= $this->do_field_div_start();
|
| 522 |
if ( is_array( $this->options ) ) {
|
| 523 |
foreach ( $this->options as $option_id => $title ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 524 |
$field .= '<label title="' . esc_attr( strip_tags( $title ) ) . '">';
|
| 525 |
$field .= '<input type="radio"';
|
|
|
|
| 526 |
$field .= $this->do_field_name();
|
| 527 |
$field .= ' value="' . esc_attr( $option_id ) . '" ' . checked( $this->value, $option_id, false ) . '/>';
|
| 528 |
$field .= $title;
|
| 521 |
$field .= $this->do_field_div_start();
|
| 522 |
if ( is_array( $this->options ) ) {
|
| 523 |
foreach ( $this->options as $option_id => $title ) {
|
| 524 |
+
$field_id = sprintf(
|
| 525 |
+
'%1$s-%2$s',
|
| 526 |
+
sanitize_html_class( trim( $this->id ) ),
|
| 527 |
+
sanitize_html_class( trim( $option_id ) )
|
| 528 |
+
);
|
| 529 |
+
|
| 530 |
$field .= '<label title="' . esc_attr( strip_tags( $title ) ) . '">';
|
| 531 |
$field .= '<input type="radio"';
|
| 532 |
+
$field .= ' id="tribe-field-' . esc_attr( $field_id ) . '"';
|
| 533 |
$field .= $this->do_field_name();
|
| 534 |
$field .= ' value="' . esc_attr( $option_id ) . '" ' . checked( $this->value, $option_id, false ) . '/>';
|
| 535 |
$field .= $title;
|
common/src/Tribe/Image/Uploader.php
CHANGED
|
@@ -43,6 +43,8 @@ class Tribe__Image__Uploader {
|
|
| 43 |
return false;
|
| 44 |
}
|
| 45 |
|
|
|
|
|
|
|
| 46 |
if ( is_string( $this->featured_image ) && ! is_numeric( $this->featured_image ) ) {
|
| 47 |
$existing = $this->get_attachment_ID_from_url( $this->featured_image );
|
| 48 |
$id = $existing ? $existing : $this->upload_file( $this->featured_image );
|
|
@@ -52,6 +54,17 @@ class Tribe__Image__Uploader {
|
|
| 52 |
$id = false;
|
| 53 |
}
|
| 54 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 55 |
return $id;
|
| 56 |
}
|
| 57 |
|
| 43 |
return false;
|
| 44 |
}
|
| 45 |
|
| 46 |
+
$existing = false;
|
| 47 |
+
|
| 48 |
if ( is_string( $this->featured_image ) && ! is_numeric( $this->featured_image ) ) {
|
| 49 |
$existing = $this->get_attachment_ID_from_url( $this->featured_image );
|
| 50 |
$id = $existing ? $existing : $this->upload_file( $this->featured_image );
|
| 54 |
$id = false;
|
| 55 |
}
|
| 56 |
|
| 57 |
+
do_action(
|
| 58 |
+
'tribe_log',
|
| 59 |
+
'debug',
|
| 60 |
+
__CLASS__,
|
| 61 |
+
[
|
| 62 |
+
'featured_image' => $this->featured_image,
|
| 63 |
+
'exists' => (bool) $existing,
|
| 64 |
+
'id' => $id,
|
| 65 |
+
]
|
| 66 |
+
);
|
| 67 |
+
|
| 68 |
return $id;
|
| 69 |
}
|
| 70 |
|
common/src/Tribe/Log.php
CHANGED
|
@@ -282,6 +282,9 @@ class Tribe__Log {
|
|
| 282 |
public function set_current_logger( $engine ) {
|
| 283 |
$available_engines = $this->get_logging_engines();
|
| 284 |
|
|
|
|
|
|
|
|
|
|
| 285 |
if ( ! isset( $available_engines[ $engine ] ) ) {
|
| 286 |
throw new Exception( sprintf( __( 'Cannot set %s as the current logging engine', 'tribe-common' ), $engine ) );
|
| 287 |
}
|
| 282 |
public function set_current_logger( $engine ) {
|
| 283 |
$available_engines = $this->get_logging_engines();
|
| 284 |
|
| 285 |
+
// Make sure to de-duplicate the slashes on class names.
|
| 286 |
+
$engine = str_replace( '\\\\', '\\', $engine );
|
| 287 |
+
|
| 288 |
if ( ! isset( $available_engines[ $engine ] ) ) {
|
| 289 |
throw new Exception( sprintf( __( 'Cannot set %s as the current logging engine', 'tribe-common' ), $engine ) );
|
| 290 |
}
|
common/src/Tribe/Log/Action_Logger.php
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Hooks the `tribe_log` action based logger under the existing one for back-compatibility.
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @package Tribe\Log
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Tribe\Log;
|
| 11 |
+
|
| 12 |
+
use Monolog\Logger;
|
| 13 |
+
use Tribe__Log;
|
| 14 |
+
|
| 15 |
+
/**
|
| 16 |
+
* Class Action_Logger
|
| 17 |
+
*
|
| 18 |
+
* @since 4.9.16
|
| 19 |
+
*
|
| 20 |
+
* @package Tribe\Log
|
| 21 |
+
*/
|
| 22 |
+
class Action_Logger implements \Tribe__Log__Logger {
|
| 23 |
+
|
| 24 |
+
/**
|
| 25 |
+
* {@inheritDoc}
|
| 26 |
+
*
|
| 27 |
+
* @since 4.9.16
|
| 28 |
+
*/
|
| 29 |
+
public function is_available() {
|
| 30 |
+
return true;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* {@inheritDoc}
|
| 35 |
+
*
|
| 36 |
+
* @since 4.9.16
|
| 37 |
+
*/
|
| 38 |
+
public function get_name() {
|
| 39 |
+
return __( 'Action-based Logger', 'tribe-common' );
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* {@inheritDoc}
|
| 44 |
+
*
|
| 45 |
+
* @since 4.9.16
|
| 46 |
+
*/
|
| 47 |
+
public function log( $entry, $type = Tribe__Log::DEBUG, $src = '' ) {
|
| 48 |
+
$message = empty( $src ) ? $entry : $src . ': ' . $entry;
|
| 49 |
+
|
| 50 |
+
do_action( 'tribe_log', $this->translate_log_level( $type ), $message );
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Translates the log types used by `Tribe__Log` to those used by Monolog.
|
| 55 |
+
*
|
| 56 |
+
* @since 4.9.16
|
| 57 |
+
*
|
| 58 |
+
* @param string $type The `Tribe__Log` log type.
|
| 59 |
+
*
|
| 60 |
+
* @return int The Monolog equivalent of the current level.
|
| 61 |
+
*/
|
| 62 |
+
protected function translate_log_level( $type ) {
|
| 63 |
+
switch ( $type ) {
|
| 64 |
+
case Tribe__Log::DEBUG:
|
| 65 |
+
return Logger::DEBUG;
|
| 66 |
+
case Tribe__Log::ERROR:
|
| 67 |
+
return Logger::ERROR;
|
| 68 |
+
case Tribe__Log::WARNING:
|
| 69 |
+
return Logger::WARNING;
|
| 70 |
+
case Tribe__Log::SUCCESS:
|
| 71 |
+
default:
|
| 72 |
+
return Logger::INFO;
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* {@inheritDoc}
|
| 78 |
+
*
|
| 79 |
+
* @since 4.9.16
|
| 80 |
+
*/
|
| 81 |
+
public function retrieve( $limit = 0, array $args = array() ) {
|
| 82 |
+
return [
|
| 83 |
+
[
|
| 84 |
+
'message' => __(
|
| 85 |
+
'The Action Logger will dispatch any logging message using the "tribe_log" action writing, by ' .
|
| 86 |
+
'default, to the PHP error log.',
|
| 87 |
+
'tribe-common' )
|
| 88 |
+
],
|
| 89 |
+
];
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
/**
|
| 93 |
+
* {@inheritDoc}
|
| 94 |
+
*
|
| 95 |
+
* @since 4.9.16
|
| 96 |
+
*/
|
| 97 |
+
public function list_available_logs() {
|
| 98 |
+
return [];
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* Changes the Monolog logger channel to the specified one.
|
| 103 |
+
*
|
| 104 |
+
* @since 4.9.16
|
| 105 |
+
*
|
| 106 |
+
* @param string $log_identifier The channel to switch to.
|
| 107 |
+
* @param bool $create Unused by this class.
|
| 108 |
+
*
|
| 109 |
+
* @return bool The exit status of the channel change.
|
| 110 |
+
*
|
| 111 |
+
* @uses \Tribe\Log\Monolog_Logger::set_channel().
|
| 112 |
+
*/
|
| 113 |
+
public function use_log( $log_identifier, $create = false ) {
|
| 114 |
+
return tribe( 'monolog' )->set_global_channel( $log_identifier );
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
/**
|
| 118 |
+
* {@inheritDoc}
|
| 119 |
+
*
|
| 120 |
+
* @since 4.9.16
|
| 121 |
+
*/
|
| 122 |
+
public function cleanup() {
|
| 123 |
+
return true;
|
| 124 |
+
}
|
| 125 |
+
}
|
common/src/Tribe/Log/Canonical_Formatter.php
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* ${CARET}
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @package Tribe\Log
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
namespace Tribe\Log;
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
|
| 16 |
+
class Canonical_Formatter extends LineFormatter {
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Formats a log record.
|
| 20 |
+
*
|
| 21 |
+
* @since 4.9.16
|
| 22 |
+
*
|
| 23 |
+
* @param array $record A record to format.
|
| 24 |
+
*
|
| 25 |
+
* @return mixed The formatted record.
|
| 26 |
+
*/
|
| 27 |
+
public function format( array $record ) {
|
| 28 |
+
$has_context = ! empty( $record['context'] );
|
| 29 |
+
|
| 30 |
+
if ( $has_context ) {
|
| 31 |
+
$record['message'] = $this->format_record_message( $record );
|
| 32 |
+
|
| 33 |
+
$this->format = 'tribe-canonical-line channel=%channel% %message%';
|
| 34 |
+
} else {
|
| 35 |
+
// Fall-back on a standard format if the message does not have a context.
|
| 36 |
+
$this->format = 'tribe.%channel%.%level_name%: %message%';
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
return parent::format( $record );
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Formats the record to the canonical format.
|
| 44 |
+
*
|
| 45 |
+
* @since 4.9.16
|
| 46 |
+
*
|
| 47 |
+
* @param array $record The record to process.
|
| 48 |
+
*
|
| 49 |
+
* @return string The formatted message, as built from the record context and message, in the format `<key>=<value>`.
|
| 50 |
+
*/
|
| 51 |
+
protected function format_record_message( array $record ) {
|
| 52 |
+
$message = [];
|
| 53 |
+
$extra = [];
|
| 54 |
+
|
| 55 |
+
$extra['level'] = isset( $record['level_name'] ) ? strtolower( $record['level_name'] ) : 'debug';
|
| 56 |
+
|
| 57 |
+
if ( ! empty( $record['message'] ) ) {
|
| 58 |
+
// Use the message as the source.
|
| 59 |
+
$extra['source'] = $this->escape_quotes( $record['message'] );
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
$context = $record['context'];
|
| 63 |
+
$context = array_merge( $extra, $context );
|
| 64 |
+
|
| 65 |
+
foreach ( $context as $key => $value ) {
|
| 66 |
+
$escape = false;
|
| 67 |
+
|
| 68 |
+
if ( is_bool( $value ) ) {
|
| 69 |
+
$value = $value ? 'true' : 'false';
|
| 70 |
+
} elseif ( ! is_scalar( $value ) ) {
|
| 71 |
+
$value = json_encode( $value );
|
| 72 |
+
if ( false === $value ) {
|
| 73 |
+
$value = 'malformed';
|
| 74 |
+
} else {
|
| 75 |
+
$escape = true;
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
if ( $escape || ( is_string( $value ) && preg_match( '~[\\\\/\\s]+~', $value ) ) ) {
|
| 80 |
+
$value = '"' . $this->escape_quotes( $value ) . '"';
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
$message[] = "{$key}={$value}";
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
return implode( ' ', $message );
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* Escapes the double quotes in a string.
|
| 91 |
+
*
|
| 92 |
+
* @since 4.9.16
|
| 93 |
+
*
|
| 94 |
+
* @param string $string The string to escape the quotes in.
|
| 95 |
+
*
|
| 96 |
+
* @return string The string, with the quotes escaped.
|
| 97 |
+
*/
|
| 98 |
+
protected function escape_quotes( $string ) {
|
| 99 |
+
return str_replace( '"', '\\"', $string ) ;
|
| 100 |
+
}
|
| 101 |
+
}
|
common/src/Tribe/Log/Monolog_Logger.php
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* An extension of the base Monolog logger to add our need to replace the instance, and global, loggers.
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @package Tribe\Log
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
namespace Tribe\Log;
|
| 11 |
+
|
| 12 |
+
use Monolog\Logger;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Class Monolog_Logger
|
| 16 |
+
*
|
| 17 |
+
* @since 4.9.16
|
| 18 |
+
*
|
| 19 |
+
* @package Tribe\Log
|
| 20 |
+
*/
|
| 21 |
+
class Monolog_Logger extends Logger {
|
| 22 |
+
/**
|
| 23 |
+
* @since 4.9.16
|
| 24 |
+
*/
|
| 25 |
+
const DEFAULT_CHANNEL = 'default';
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Resets the global channel to the default one.
|
| 29 |
+
*
|
| 30 |
+
* @since 4.9.16
|
| 31 |
+
*
|
| 32 |
+
* @return bool Whether the channel reset
|
| 33 |
+
*/
|
| 34 |
+
public function reset_global_channel() {
|
| 35 |
+
return $this->set_global_channel( static::DEFAULT_CHANNEL );
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Clones this logger and replaces it in the `tribe` container.
|
| 40 |
+
*
|
| 41 |
+
* @since 4.9.16
|
| 42 |
+
*
|
| 43 |
+
* @param string $channel The new logger name, also referred to as "channel" (hence the method name).
|
| 44 |
+
*
|
| 45 |
+
* @return bool Whether the channel change was successful or not.
|
| 46 |
+
*/
|
| 47 |
+
public function set_global_channel( $channel ) {
|
| 48 |
+
$new = $this->withName( $channel );
|
| 49 |
+
tribe_register( Logger::class, $new );
|
| 50 |
+
tribe_register( 'monolog', $new );
|
| 51 |
+
|
| 52 |
+
return $channel === tribe( 'monolog' )->getName();
|
| 53 |
+
}
|
| 54 |
+
}
|
common/src/Tribe/Log/README.md
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Monolog-based logging
|
| 2 |
+
|
| 3 |
+
We've introduced a [Monolog based](https://github.com/Seldaek/monolog) logger in our common libraries.
|
| 4 |
+
You can find more information about all the possibilities this opens [on the library documentaion](https://seldaek.github.io/monolog/), but this document will serve as an introduction to the essentials of its day to day use.
|
| 5 |
+
|
| 6 |
+
## When should I log?
|
| 7 |
+
|
| 8 |
+
Whenever you feel you might have to debug this in the future and could use that information.
|
| 9 |
+
|
| 10 |
+
> Pro tip: if you, as a developer, find yourself using `var_dump` and `error_log` a lot, then you should log instead. Someone, someday, will have your same issue.
|
| 11 |
+
|
| 12 |
+
Worried about "spamming" the logs? [Read here](#logging-levels--or-stuff-does-not-appear-in-the-log).
|
| 13 |
+
|
| 14 |
+
## This will deprecate the old logger, but not yet
|
| 15 |
+
|
| 16 |
+
At first we're not replacing the "old" logger with this new one, we're just asking you **to stop using the old logger** in your code from now on and use the new, Monolog-based, one.
|
| 17 |
+
The old logger still offers file-based logging and connections to the UI the new logger is not yet offering; the current implementation will allow us, in the future, to log **everything** with the Monolog-based logger, but, currently, intercepting log messages from the "old" logger requires manual activation, see the following section.
|
| 18 |
+
|
| 19 |
+
To be clear: this is what we mean by "old" or "legacy" logger:
|
| 20 |
+
|
| 21 |
+
```php
|
| 22 |
+
<?php
|
| 23 |
+
tribe( 'logger' )->log_debug( 'Some debug information', 'The source' );
|
| 24 |
+
tribe( 'logger' )->log( 'Some information', Tribe__Log::DEBUG, 'The source' );
|
| 25 |
+
```
|
| 26 |
+
|
| 27 |
+
### Intercepting legacy logger logs with the new Monolog logger
|
| 28 |
+
|
| 29 |
+
The Monolog-based logger will handle logging coming from the legacy logger only if explicitly told so.
|
| 30 |
+
|
| 31 |
+
You can activate this function with this code:
|
| 32 |
+
|
| 33 |
+
```php
|
| 34 |
+
<?php
|
| 35 |
+
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
| 36 |
+
```
|
| 37 |
+
|
| 38 |
+
Once this is in your code any call to the legacy logger wil be redirected to the new one.
|
| 39 |
+
|
| 40 |
+
## Using the logger
|
| 41 |
+
|
| 42 |
+
The new logger listens on the `tribe_log` action.
|
| 43 |
+
By default it will log to the `default` channel (see [Monolog documentation for more information about channels](https://seldaek.github.io/monolog/doc/01-usage.html#leveraging-channels)).
|
| 44 |
+
|
| 45 |
+
So the code below will log a **debug** to the **default** channel with a source of **ea_client**:
|
| 46 |
+
|
| 47 |
+
```php
|
| 48 |
+
<?php
|
| 49 |
+
do_action(
|
| 50 |
+
'tribe_log',
|
| 51 |
+
'debug',
|
| 52 |
+
'ea_client',
|
| 53 |
+
[ 'action' => 'updated', 'post_id' => $id, 'origin' => $origin ]
|
| 54 |
+
);
|
| 55 |
+
```
|
| 56 |
+
|
| 57 |
+
The logger listening on the action will consume three parameters:
|
| 58 |
+
|
| 59 |
+
1. `level` - `debug` in the example; is the level of the log; available levels, in increasing value of urgency are: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`. Use each level wisely.
|
| 60 |
+
2. `source` - `ea_client` in this example; is the source of the log; this is a human-readable value; consistency is king here.
|
| 61 |
+
3. `context` - the array in this example; this is an associative array that will be logged to define the context of the log. Think of this as something that will provide the details required to unpack what **was** happening when the log entry was created. Provide enough context to make it clear, but avoid bloating it.
|
| 62 |
+
|
| 63 |
+
## Where are my logs?
|
| 64 |
+
|
| 65 |
+
The initial implementation of the new logger will write, by default, to the **PHP error** log.
|
| 66 |
+
|
| 67 |
+
We're using Monolog to allow us, and third parties, to "attach" and "deatach" loggers as required.
|
| 68 |
+
By default we're formatting logs using canonical lines( read more [here](https://brandur.org/logfmt) and [here](https://blog.codeship.com/logfmt-a-log-format-thats-easy-to-read-and-write/)) to make our log entries both human-readable and machine parsable (e.g. by a tool like [this](https://www.npmjs.com/package/logfmt)).
|
| 69 |
+
|
| 70 |
+
The output format of the example above would be this:
|
| 71 |
+
|
| 72 |
+
```
|
| 73 |
+
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
| 74 |
+
```
|
| 75 |
+
|
| 76 |
+
What about legacy logs?
|
| 77 |
+
Their format would not be formatted to the canonical line style:
|
| 78 |
+
|
| 79 |
+
```
|
| 80 |
+
[22-Aug-2019 16:03:33 UTC] tribe.default.DEBUG: The source: debug information
|
| 81 |
+
```
|
| 82 |
+
|
| 83 |
+
### Logging levels ( or "stuff does not appear in the log")
|
| 84 |
+
|
| 85 |
+
By default we're only logging Warnings and above.
|
| 86 |
+
This means all your `debug` level logs are being ignored.
|
| 87 |
+
|
| 88 |
+
In production we do not want to fill people logs with pointless information, but you can control the level of logging: any log equal or above the specified level will be logged.
|
| 89 |
+
|
| 90 |
+
You can control the logging level with the `tribe_log_level` filter:
|
| 91 |
+
|
| 92 |
+
```php
|
| 93 |
+
<?php
|
| 94 |
+
add_filter(
|
| 95 |
+
'tribe_log_level',
|
| 96 |
+
static function () {
|
| 97 |
+
// Only log errors or above.
|
| 98 |
+
return Monolog\Logger::ERROR;
|
| 99 |
+
}
|
| 100 |
+
);
|
| 101 |
+
```
|
| 102 |
+
|
| 103 |
+
### Logging channels
|
| 104 |
+
|
| 105 |
+
The default logging channel is `default`, you've seen that in the example log lines above.
|
| 106 |
+
|
| 107 |
+
But how can I change the channel?
|
| 108 |
+
|
| 109 |
+
Easy:
|
| 110 |
+
|
| 111 |
+
```php
|
| 112 |
+
<?php
|
| 113 |
+
tribe( 'monolog' )->set_global_channel( 'my_channel' );
|
| 114 |
+
do_action( 'tribe_log', 'debug', 'my_source', [ 'foo' => 'bar' ] );
|
| 115 |
+
tribe( 'logger' )->log_debug( 'Some debug information', 'My source' );
|
| 116 |
+
```
|
| 117 |
+
|
| 118 |
+
You can do the same using the legacy logger, [if enabled][0527-0003]:
|
| 119 |
+
|
| 120 |
+
```php
|
| 121 |
+
<?php
|
| 122 |
+
tribe( 'logger' )->use_log( 'my_channel' );
|
| 123 |
+
```
|
| 124 |
+
|
| 125 |
+
Any log produced after the call will log to the `my_channel` channel; this will apply to the legacy logger too ([if redirected][0527-0003]):
|
| 126 |
+
|
| 127 |
+
```
|
| 128 |
+
[22-Aug-2019 15:50:42 UTC] tribe-canonical-line channel=default level=debug source=ea_client action=updated post_id=23 origin=ical
|
| 129 |
+
[22-Aug-2019 15:51:13 UTC] tribe-canonical-line channel=my_channel level=debug source=my_source foo=bar
|
| 130 |
+
[22-Aug-2019 16:03:33 UTC] tribe.my_channel.DEBUG: My source: Some debug information
|
| 131 |
+
```
|
| 132 |
+
|
| 133 |
+
## I want to use this right now to debug my code
|
| 134 |
+
|
| 135 |
+
Copy and paste this in a plugin, or must-use plugin.
|
| 136 |
+
If you're using a plugin remember to activate it.
|
| 137 |
+
|
| 138 |
+
```php
|
| 139 |
+
<?php
|
| 140 |
+
/**
|
| 141 |
+
* Plugin Name: Modern Tribe Logger Control
|
| 142 |
+
* Plugin Description: Control the behavior of Modern Tribe Monolog-based logger.
|
| 143 |
+
*/
|
| 144 |
+
add_filter(
|
| 145 |
+
'tribe_log_level',
|
| 146 |
+
static function () {
|
| 147 |
+
// Control the min level of logging.
|
| 148 |
+
return Monolog\Logger::DEBUG;
|
| 149 |
+
}
|
| 150 |
+
);
|
| 151 |
+
|
| 152 |
+
// Redirect legacy logger calls.
|
| 153 |
+
add_filter( 'tribe_log_use_action_logger', '__return_true' );
|
| 154 |
+
```
|
common/src/Tribe/Log/Service_Provider.php
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* ${CARET}
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @package Tribe\Log
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
namespace Tribe\Log;
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
use Monolog\Handler\ErrorLogHandler;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
class Service_Provider extends \tad_DI52_ServiceProvider {
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Binds and sets up implementations.
|
| 21 |
+
*
|
| 22 |
+
* @since 4.9.16
|
| 23 |
+
*/
|
| 24 |
+
public function register() {
|
| 25 |
+
$this->container->singleton( Logger::class, [ $this, 'build_logger' ] );
|
| 26 |
+
$this->container->singleton( 'monolog',
|
| 27 |
+
function () {
|
| 28 |
+
return $this->container->make( Logger::class );
|
| 29 |
+
}
|
| 30 |
+
);
|
| 31 |
+
|
| 32 |
+
add_action( 'tribe_log', [ $this, 'dispatch_log' ], 10, 3 );
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* Filters whether to make the Action Logger available as logger or not.
|
| 36 |
+
*
|
| 37 |
+
* @since 4.9.16
|
| 38 |
+
*
|
| 39 |
+
* @param bool $use_action_logger Whether to allow logging messages from the \Tribe\Log\Logger class using the
|
| 40 |
+
* `tribe_log` action or not.
|
| 41 |
+
*/
|
| 42 |
+
$use_action_logger = apply_filters( 'tribe_log_use_action_logger', false );
|
| 43 |
+
|
| 44 |
+
if ( $use_action_logger ) {
|
| 45 |
+
add_filter( 'tribe_common_logging_engines', [ $this, 'add_logging_engine' ] );
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* Builds and returns the Monolog Logger instance that will listen to the `tribe_log` action.
|
| 51 |
+
*
|
| 52 |
+
* To avoid the over-head introduced by filtering the filters are applied here, only once, when the instance is
|
| 53 |
+
* first built. Any later call will use the singleton instance stored in the container.
|
| 54 |
+
*
|
| 55 |
+
* @since 4.9.16
|
| 56 |
+
*
|
| 57 |
+
* @return Logger
|
| 58 |
+
*/
|
| 59 |
+
public function build_logger() {
|
| 60 |
+
/**
|
| 61 |
+
* Filters the level of the messages that will be logged.
|
| 62 |
+
*
|
| 63 |
+
* The threshold is inclusive of the level; it default to log any warning and above.
|
| 64 |
+
*
|
| 65 |
+
* @since 4.9.16
|
| 66 |
+
*
|
| 67 |
+
* @param int The threshold level; if the level of a message is this level or above, then it will be logged.
|
| 68 |
+
*
|
| 69 |
+
* @see \Monolog\Logger for possible levels.
|
| 70 |
+
*/
|
| 71 |
+
$level_threshold = apply_filters( 'tribe_log_level', Logger::WARNING );
|
| 72 |
+
|
| 73 |
+
$error_log_handler = new ErrorLogHandler( null, $level_threshold );
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* Filters whether to use canonical format for the logs or not.
|
| 77 |
+
*
|
| 78 |
+
* @since 4.9.16
|
| 79 |
+
*
|
| 80 |
+
* @param bool $use_canonical_format Whether to use canonical format for the logs or not; defaults to `true`.
|
| 81 |
+
*/
|
| 82 |
+
$use_canonical_format = apply_filters( 'tribe_log_canonical', true );
|
| 83 |
+
|
| 84 |
+
if ( $use_canonical_format ) {
|
| 85 |
+
$error_log_handler->setFormatter( new Canonical_Formatter() );
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
$handlers = [
|
| 89 |
+
'default' => $error_log_handler
|
| 90 |
+
];
|
| 91 |
+
|
| 92 |
+
/**
|
| 93 |
+
* Filters the list of handlers that will handle dispatched log messages.
|
| 94 |
+
*
|
| 95 |
+
* All handlers should implement the `\Monolog\Handler\HandlerInterface`.
|
| 96 |
+
*
|
| 97 |
+
* @since 4.9.16
|
| 98 |
+
*
|
| 99 |
+
* @param array $handlers An array of default log handlers.
|
| 100 |
+
*/
|
| 101 |
+
$handlers = apply_filters( 'tribe_log_handlers', $handlers );
|
| 102 |
+
|
| 103 |
+
// Monolog will log to stderr when no handlers are set.
|
| 104 |
+
$logger = new Monolog_Logger( Monolog_Logger::DEFAULT_CHANNEL );
|
| 105 |
+
|
| 106 |
+
$logger->setHandlers( $handlers );
|
| 107 |
+
|
| 108 |
+
return $logger;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* Dispatch a message of a specific level.
|
| 113 |
+
*
|
| 114 |
+
* Available levels are: `debug`, `info`, `notice`, `warning`, `error`, `critical`, `alert`, `emergency`.
|
| 115 |
+
*
|
| 116 |
+
* @since 4.9.16
|
| 117 |
+
*
|
| 118 |
+
* @param string|int $level Either the log level or the log pretty name, see long description.
|
| 119 |
+
* @param string $message The message to log.
|
| 120 |
+
* @param array $context An array of values to define the context.
|
| 121 |
+
*
|
| 122 |
+
* @see \Monolog\Logger for the log level constants and names.
|
| 123 |
+
*/
|
| 124 |
+
public function dispatch_log( $level = 'debug', $message = '', array $context = [] ) {
|
| 125 |
+
// Goes from something like `debug` to `100`.
|
| 126 |
+
$level = is_numeric( $level ) ? $level : Logger::toMonologLevel( $level );
|
| 127 |
+
|
| 128 |
+
/** @var Logger $logger */
|
| 129 |
+
$logger = $this->container->make( Logger::class );
|
| 130 |
+
|
| 131 |
+
$logger->log( $level, $message, $context );
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
/**
|
| 135 |
+
* Makes the action-based logging engine available in the backend.
|
| 136 |
+
*
|
| 137 |
+
* @since 4.9.16
|
| 138 |
+
*
|
| 139 |
+
* @param array $logging_engines An array of available logging engines.
|
| 140 |
+
*
|
| 141 |
+
* @return array The updated array of logging engines.
|
| 142 |
+
*/
|
| 143 |
+
public function add_logging_engine( array $logging_engines = [] ) {
|
| 144 |
+
$logging_engines[ Action_Logger::class ] = new Action_Logger();
|
| 145 |
+
|
| 146 |
+
return $logging_engines;
|
| 147 |
+
}
|
| 148 |
+
}
|
common/src/Tribe/Main.php
CHANGED
|
@@ -17,7 +17,7 @@ class Tribe__Main {
|
|
| 17 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
| 18 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
| 19 |
|
| 20 |
-
const VERSION = '4.9.
|
| 21 |
|
| 22 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
| 23 |
|
|
@@ -263,18 +263,6 @@ class Tribe__Main {
|
|
| 263 |
]
|
| 264 |
);
|
| 265 |
|
| 266 |
-
tribe_asset(
|
| 267 |
-
$this,
|
| 268 |
-
'tribe-tooltip',
|
| 269 |
-
'tooltip.js',
|
| 270 |
-
[ 'tribe-common' ],
|
| 271 |
-
'admin_enqueue_scripts',
|
| 272 |
-
[
|
| 273 |
-
'conditionals' => [ $this, 'should_load_common_admin_css' ],
|
| 274 |
-
'priority' => 10,
|
| 275 |
-
]
|
| 276 |
-
);
|
| 277 |
-
|
| 278 |
tribe( Tribe__Admin__Help_Page::class )->register_assets();
|
| 279 |
}
|
| 280 |
|
|
@@ -596,6 +584,7 @@ class Tribe__Main {
|
|
| 596 |
tribe_register_provider( Tribe__Service_Providers__Tooltip::class );
|
| 597 |
|
| 598 |
tribe_register_provider( Tribe\Service_Providers\PUE::class );
|
|
|
|
| 599 |
}
|
| 600 |
|
| 601 |
/************************
|
| 17 |
const OPTIONNAME = 'tribe_events_calendar_options';
|
| 18 |
const OPTIONNAMENETWORK = 'tribe_events_calendar_network_options';
|
| 19 |
|
| 20 |
+
const VERSION = '4.9.16';
|
| 21 |
|
| 22 |
const FEED_URL = 'https://theeventscalendar.com/feed/';
|
| 23 |
|
| 263 |
]
|
| 264 |
);
|
| 265 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 266 |
tribe( Tribe__Admin__Help_Page::class )->register_assets();
|
| 267 |
}
|
| 268 |
|
| 584 |
tribe_register_provider( Tribe__Service_Providers__Tooltip::class );
|
| 585 |
|
| 586 |
tribe_register_provider( Tribe\Service_Providers\PUE::class );
|
| 587 |
+
tribe_register_provider( Tribe\Log\Service_Provider::class );
|
| 588 |
}
|
| 589 |
|
| 590 |
/************************
|
common/src/Tribe/Process/Handler.php
CHANGED
|
@@ -147,6 +147,22 @@ abstract class Tribe__Process__Handler {
|
|
| 147 |
|
| 148 |
check_ajax_referer( $this->identifier, 'nonce' );
|
| 149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
$this->handle( $data_source );
|
| 151 |
|
| 152 |
wp_die();
|
|
@@ -159,6 +175,12 @@ abstract class Tribe__Process__Handler {
|
|
| 159 |
*/
|
| 160 |
wp_clear_scheduled_hook( $this->healthcheck_cron_hook_id, [ $data_source ] );
|
| 161 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
$this->handle( $data_source );
|
| 163 |
}
|
| 164 |
|
|
@@ -176,6 +198,8 @@ abstract class Tribe__Process__Handler {
|
|
| 176 |
( defined( 'TRIBE_NO_ASYNC' ) && true === TRIBE_NO_ASYNC )
|
| 177 |
|| true === (bool) getenv( 'TRIBE_NO_ASYNC' )
|
| 178 |
) {
|
|
|
|
|
|
|
| 179 |
return $this->sync_handle( $this->data );
|
| 180 |
}
|
| 181 |
|
|
@@ -183,6 +207,8 @@ abstract class Tribe__Process__Handler {
|
|
| 183 |
$url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
|
| 184 |
$args = $this->get_post_args();
|
| 185 |
|
|
|
|
|
|
|
| 186 |
return wp_remote_post( esc_url_raw( $url ), $args );
|
| 187 |
}
|
| 188 |
|
|
@@ -201,7 +227,21 @@ abstract class Tribe__Process__Handler {
|
|
| 201 |
$class = get_class( $this );
|
| 202 |
$src = call_user_func( [ $class, 'action' ] );
|
| 203 |
$logger->log( 'Could not schedule event for cron-based handling', Tribe__Log::ERROR, $src );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 204 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
}
|
| 206 |
|
| 207 |
return true;
|
| 147 |
|
| 148 |
check_ajax_referer( $this->identifier, 'nonce' );
|
| 149 |
|
| 150 |
+
// Let's make sure to hydrate date from the request if not set.
|
| 151 |
+
if ( count( array_filter( $data_source ) ) < 1 ) {
|
| 152 |
+
$data_source = $_POST;
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
do_action(
|
| 156 |
+
'tribe_log',
|
| 157 |
+
'debug',
|
| 158 |
+
$this->identifier,
|
| 159 |
+
[
|
| 160 |
+
'action' => 'async_handling',
|
| 161 |
+
'data_source' => $data_source,
|
| 162 |
+
'payload' => $_POST,
|
| 163 |
+
]
|
| 164 |
+
);
|
| 165 |
+
|
| 166 |
$this->handle( $data_source );
|
| 167 |
|
| 168 |
wp_die();
|
| 175 |
*/
|
| 176 |
wp_clear_scheduled_hook( $this->healthcheck_cron_hook_id, [ $data_source ] );
|
| 177 |
|
| 178 |
+
do_action(
|
| 179 |
+
'tribe_log',
|
| 180 |
+
'debug',
|
| 181 |
+
$this->identifier,
|
| 182 |
+
array_merge( [ 'action' => 'cron_handling' ], $data_source ) );
|
| 183 |
+
|
| 184 |
$this->handle( $data_source );
|
| 185 |
}
|
| 186 |
|
| 198 |
( defined( 'TRIBE_NO_ASYNC' ) && true === TRIBE_NO_ASYNC )
|
| 199 |
|| true === (bool) getenv( 'TRIBE_NO_ASYNC' )
|
| 200 |
) {
|
| 201 |
+
do_action( 'tribe_log', 'debug', $this->identifier, [ 'action' => 'sync_handle', 'data' => $this->data ] );
|
| 202 |
+
|
| 203 |
return $this->sync_handle( $this->data );
|
| 204 |
}
|
| 205 |
|
| 207 |
$url = add_query_arg( $this->get_query_args(), $this->get_query_url() );
|
| 208 |
$args = $this->get_post_args();
|
| 209 |
|
| 210 |
+
do_action( 'tribe_log', 'debug', $this->identifier, [ 'action' => 'async_dispatch', 'data' => $this->data ] );
|
| 211 |
+
|
| 212 |
return wp_remote_post( esc_url_raw( $url ), $args );
|
| 213 |
}
|
| 214 |
|
| 227 |
$class = get_class( $this );
|
| 228 |
$src = call_user_func( [ $class, 'action' ] );
|
| 229 |
$logger->log( 'Could not schedule event for cron-based handling', Tribe__Log::ERROR, $src );
|
| 230 |
+
|
| 231 |
+
do_action(
|
| 232 |
+
'tribe_log',
|
| 233 |
+
'error',
|
| 234 |
+
$this->identifier,
|
| 235 |
+
[ 'action' => 'schedule_cron', 'data' => $this->data ]
|
| 236 |
+
);
|
| 237 |
}
|
| 238 |
+
|
| 239 |
+
do_action(
|
| 240 |
+
'tribe_log',
|
| 241 |
+
'debug',
|
| 242 |
+
$this->identifier,
|
| 243 |
+
[ 'action' => 'schedule_cron', 'data' => $this->data ]
|
| 244 |
+
);
|
| 245 |
}
|
| 246 |
|
| 247 |
return true;
|
common/src/Tribe/Process/Post_Thumbnail_Setter.php
CHANGED
|
@@ -42,7 +42,14 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
|
|
| 42 |
throw new InvalidArgumentException( 'Post ID and featured image should be set before trying to dispatch.' );
|
| 43 |
}
|
| 44 |
|
| 45 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
return parent::dispatch();
|
| 48 |
}
|
|
@@ -101,6 +108,8 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
|
|
| 101 |
$data_source = isset( $data_source ) ? $data_source : $_POST;
|
| 102 |
|
| 103 |
if ( ! isset( $data_source['post_id'], $data_source['post_thumbnail'] ) ) {
|
|
|
|
|
|
|
| 104 |
return 0;
|
| 105 |
}
|
| 106 |
|
|
@@ -112,19 +121,56 @@ class Tribe__Process__Post_Thumbnail_Setter extends Tribe__Process__Handler {
|
|
| 112 |
$thumbnail_id = tribe_upload_image( $post_thumbnail );
|
| 113 |
|
| 114 |
if ( false === $thumbnail_id ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 115 |
$logger->log_debug( "(ID: {$this->identifier}) - could not fetch {$post_thumbnail} for post {$id}, done.", $log_src );
|
| 116 |
|
| 117 |
return 0;
|
| 118 |
}
|
| 119 |
|
| 120 |
-
$set =
|
|
|
|
|
|
|
|
|
|
| 121 |
|
| 122 |
if ( false === $set ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
$logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, unable to set thumbnail for post {$id}, done.", $log_src );
|
| 124 |
|
| 125 |
return $thumbnail_id;
|
| 126 |
}
|
| 127 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
$logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, set thumbnail for post {$id}, done.", $log_src );
|
| 129 |
|
| 130 |
return $thumbnail_id;
|
| 42 |
throw new InvalidArgumentException( 'Post ID and featured image should be set before trying to dispatch.' );
|
| 43 |
}
|
| 44 |
|
| 45 |
+
$data = [
|
| 46 |
+
'post_id' => $this->post_id,
|
| 47 |
+
'post_thumbnail' => trim( $this->post_thumbnail ),
|
| 48 |
+
];
|
| 49 |
+
|
| 50 |
+
$this->data( $data );
|
| 51 |
+
|
| 52 |
+
do_action( 'tribe_log', 'debug', __CLASS__, $data );
|
| 53 |
|
| 54 |
return parent::dispatch();
|
| 55 |
}
|
| 108 |
$data_source = isset( $data_source ) ? $data_source : $_POST;
|
| 109 |
|
| 110 |
if ( ! isset( $data_source['post_id'], $data_source['post_thumbnail'] ) ) {
|
| 111 |
+
do_action( 'tribe_log', 'error', $this->identifier, [ 'data' => $data_source, ] );
|
| 112 |
+
|
| 113 |
return 0;
|
| 114 |
}
|
| 115 |
|
| 121 |
$thumbnail_id = tribe_upload_image( $post_thumbnail );
|
| 122 |
|
| 123 |
if ( false === $thumbnail_id ) {
|
| 124 |
+
do_action(
|
| 125 |
+
'tribe_log',
|
| 126 |
+
'error',
|
| 127 |
+
$this->identifier,
|
| 128 |
+
[
|
| 129 |
+
'action' => 'fetch',
|
| 130 |
+
'post_thumbnail' => $post_thumbnail,
|
| 131 |
+
'post_id' => $id,
|
| 132 |
+
]
|
| 133 |
+
);
|
| 134 |
$logger->log_debug( "(ID: {$this->identifier}) - could not fetch {$post_thumbnail} for post {$id}, done.", $log_src );
|
| 135 |
|
| 136 |
return 0;
|
| 137 |
}
|
| 138 |
|
| 139 |
+
$set = true;
|
| 140 |
+
if ( (int) get_post_thumbnail_id( $id ) !== (int) $thumbnail_id ) {
|
| 141 |
+
$set = set_post_thumbnail( $id, $thumbnail_id );
|
| 142 |
+
}
|
| 143 |
|
| 144 |
if ( false === $set ) {
|
| 145 |
+
do_action(
|
| 146 |
+
'tribe_log',
|
| 147 |
+
'error',
|
| 148 |
+
$this->identifier,
|
| 149 |
+
[
|
| 150 |
+
'action' => 'set',
|
| 151 |
+
'post_thumbnail' => $post_thumbnail,
|
| 152 |
+
'attachment_id' => $thumbnail_id,
|
| 153 |
+
'post_id' => $id,
|
| 154 |
+
]
|
| 155 |
+
);
|
| 156 |
+
|
| 157 |
$logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, unable to set thumbnail for post {$id}, done.", $log_src );
|
| 158 |
|
| 159 |
return $thumbnail_id;
|
| 160 |
}
|
| 161 |
|
| 162 |
+
do_action(
|
| 163 |
+
'tribe_log',
|
| 164 |
+
'debug',
|
| 165 |
+
$this->identifier,
|
| 166 |
+
[
|
| 167 |
+
'action' => 'set',
|
| 168 |
+
'post_thumbnail' => $post_thumbnail,
|
| 169 |
+
'attachment_id' => $thumbnail_id,
|
| 170 |
+
'post_id' => $id,
|
| 171 |
+
]
|
| 172 |
+
);
|
| 173 |
+
|
| 174 |
$logger->log_debug( "(ID: {$this->identifier}) - fetched {$post_thumbnail}, created attachment with ID {$thumbnail_id}, set thumbnail for post {$id}, done.", $log_src );
|
| 175 |
|
| 176 |
return $thumbnail_id;
|
common/src/Tribe/Service_Providers/Tooltip.php
CHANGED
|
@@ -37,9 +37,17 @@ class Tribe__Service_Providers__Tooltip extends tad_DI52_ServiceProvider {
|
|
| 37 |
public function add_tooltip_assets() {
|
| 38 |
tribe_asset(
|
| 39 |
Tribe__Main::instance(),
|
| 40 |
-
'tribe-tooltip',
|
| 41 |
'tooltip.css',
|
| 42 |
-
[],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
[ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
|
| 44 |
);
|
| 45 |
}
|
| 37 |
public function add_tooltip_assets() {
|
| 38 |
tribe_asset(
|
| 39 |
Tribe__Main::instance(),
|
| 40 |
+
'tribe-tooltip-css',
|
| 41 |
'tooltip.css',
|
| 42 |
+
[ 'tribe-common-style' ],
|
| 43 |
+
[ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
|
| 44 |
+
);
|
| 45 |
+
|
| 46 |
+
tribe_asset(
|
| 47 |
+
Tribe__Main::instance(),
|
| 48 |
+
'tribe-tooltip-js',
|
| 49 |
+
'tooltip.js',
|
| 50 |
+
[ 'jquery', 'tribe-common' ],
|
| 51 |
[ 'wp_enqueue_scripts', 'admin_enqueue_scripts' ]
|
| 52 |
);
|
| 53 |
}
|
common/src/Tribe/Utils/Collection_Interface.php
CHANGED
|
@@ -16,7 +16,7 @@ namespace Tribe\Utils;
|
|
| 16 |
* @since 4.9.14
|
| 17 |
* @package Tribe\Utils
|
| 18 |
*/
|
| 19 |
-
interface Collection_Interface extends \ArrayAccess, \SeekableIterator, \Countable, \Serializable {
|
| 20 |
/**
|
| 21 |
* Returns all the items in the collection.
|
| 22 |
*
|
| 16 |
* @since 4.9.14
|
| 17 |
* @package Tribe\Utils
|
| 18 |
*/
|
| 19 |
+
interface Collection_Interface extends \ArrayAccess, \SeekableIterator, \Countable, \Serializable, \JsonSerializable {
|
| 20 |
/**
|
| 21 |
* Returns all the items in the collection.
|
| 22 |
*
|
common/src/Tribe/Utils/Lazy_Collection.php
CHANGED
|
@@ -33,6 +33,7 @@ namespace Tribe\Utils;
|
|
| 33 |
*/
|
| 34 |
class Lazy_Collection implements Collection_Interface {
|
| 35 |
use Collection_Trait;
|
|
|
|
| 36 |
|
| 37 |
/**
|
| 38 |
* The callback in charge of providing the elements.
|
|
@@ -84,6 +85,7 @@ class Lazy_Collection implements Collection_Interface {
|
|
| 84 |
|
| 85 |
$items = call_user_func( $this->callback );
|
| 86 |
$this->items = (array) $items;
|
|
|
|
| 87 |
}
|
| 88 |
|
| 89 |
/**
|
|
@@ -105,4 +107,11 @@ class Lazy_Collection implements Collection_Interface {
|
|
| 105 |
|
| 106 |
return null;
|
| 107 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 108 |
}
|
| 33 |
*/
|
| 34 |
class Lazy_Collection implements Collection_Interface {
|
| 35 |
use Collection_Trait;
|
| 36 |
+
use Lazy_Events;
|
| 37 |
|
| 38 |
/**
|
| 39 |
* The callback in charge of providing the elements.
|
| 85 |
|
| 86 |
$items = call_user_func( $this->callback );
|
| 87 |
$this->items = (array) $items;
|
| 88 |
+
$this->resolved();
|
| 89 |
}
|
| 90 |
|
| 91 |
/**
|
| 107 |
|
| 108 |
return null;
|
| 109 |
}
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* {@inheritDoc}
|
| 113 |
+
*/
|
| 114 |
+
public function jsonSerialize() {
|
| 115 |
+
return $this->all();
|
| 116 |
+
}
|
| 117 |
}
|
common/src/Tribe/Utils/Lazy_Events.php
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Provides methods for "lazy" objects to act upon life cycle events.
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @example
|
| 8 |
+
* ```php
|
| 9 |
+
* class Lazy_List_Of_Stuff {
|
| 10 |
+
* use Tribe\Utils\Lazy_Events;
|
| 11 |
+
*
|
| 12 |
+
* protected $list;
|
| 13 |
+
*
|
| 14 |
+
* public function fetch_list(){
|
| 15 |
+
* $cached = wp_cache_get( 'list_of_stuff_one' );
|
| 16 |
+
*
|
| 17 |
+
* if( false !== $cached ){
|
| 18 |
+
* return $cached;
|
| 19 |
+
*
|
| 20 |
+
* if( null === $this->list ){
|
| 21 |
+
* $this->list = really_expensive_calculation();
|
| 22 |
+
* }
|
| 23 |
+
*
|
| 24 |
+
* $this->resolved();
|
| 25 |
+
* }
|
| 26 |
+
*
|
| 27 |
+
* return $this->list;
|
| 28 |
+
* }
|
| 29 |
+
* }
|
| 30 |
+
*
|
| 31 |
+
* class Lazy_Value {
|
| 32 |
+
* use Tribe\Utils\Lazy_Events;
|
| 33 |
+
*
|
| 34 |
+
* protected $value;
|
| 35 |
+
*
|
| 36 |
+
* public function calculate_value(){
|
| 37 |
+
* $cached = wp_cache_get( 'expensive_value' );
|
| 38 |
+
*
|
| 39 |
+
* if( false !== $cached ){
|
| 40 |
+
* return $cached;
|
| 41 |
+
*
|
| 42 |
+
* if( null === $this->value ){
|
| 43 |
+
* $this->value = really_expensive_calculation();
|
| 44 |
+
* }
|
| 45 |
+
*
|
| 46 |
+
* $this->resolved();
|
| 47 |
+
* }
|
| 48 |
+
*
|
| 49 |
+
* return $this->value;
|
| 50 |
+
* }
|
| 51 |
+
* }
|
| 52 |
+
*
|
| 53 |
+
* class List_And_Value {
|
| 54 |
+
* protected $list;
|
| 55 |
+
* protected $value;
|
| 56 |
+
*
|
| 57 |
+
* public function __construct( Lazy_List_Of_Stuff $list, Lazy_Value $value ){
|
| 58 |
+
* $this->list = $list;
|
| 59 |
+
* $this->value = $value;
|
| 60 |
+
* $this->list->on_resolve( [ $this, 'cache' ] );
|
| 61 |
+
* $this->value->on_resolve( [ $this, 'cache' ] );
|
| 62 |
+
* }
|
| 63 |
+
*
|
| 64 |
+
* public function cache(){
|
| 65 |
+
* wp_cache_set( 'list_and_value', [
|
| 66 |
+
* 'list' => $this->list->fetch_list(),
|
| 67 |
+
* 'value' => $this->value->calculate_value(),
|
| 68 |
+
* ]);
|
| 69 |
+
* }
|
| 70 |
+
*
|
| 71 |
+
* public function get_list(){
|
| 72 |
+
* $cached = wp_cache_get( 'list_and_value' );
|
| 73 |
+
*
|
| 74 |
+
* return $cached ? $cached['list'] : $this->list->fetch_list();
|
| 75 |
+
* }
|
| 76 |
+
*
|
| 77 |
+
* public function get_value(){
|
| 78 |
+
* $cached = wp_cache_get( 'list_and_value' );
|
| 79 |
+
*
|
| 80 |
+
* return $cached ? $cached['value'] : $this->value->fetch_value();
|
| 81 |
+
* }
|
| 82 |
+
* }
|
| 83 |
+
*
|
| 84 |
+
*
|
| 85 |
+
* $list = new Lazy_List_Of_Stuff();
|
| 86 |
+
* $value = new Lazy_Value();
|
| 87 |
+
* $list_and_value = new List_And_Value( $list, $value );
|
| 88 |
+
*
|
| 89 |
+
* // Accessing `value` will make it so that `list` too will be cached.
|
| 90 |
+
* $list_and_value->get_value();
|
| 91 |
+
* ````
|
| 92 |
+
*
|
| 93 |
+
* @package Tribe\Utils
|
| 94 |
+
*/
|
| 95 |
+
|
| 96 |
+
namespace Tribe\Utils;
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* Trait Lazy_Events
|
| 100 |
+
*
|
| 101 |
+
* @since 4.9.16
|
| 102 |
+
*
|
| 103 |
+
* @package Tribe\Utils
|
| 104 |
+
*
|
| 105 |
+
* @property string $lazy_resolve_action The action to which the trait will hook to run the callback if the object
|
| 106 |
+
* resolved. Using classes should define the property if the default `shutdown`
|
| 107 |
+
* one is not correct.
|
| 108 |
+
* @property int $lazy_resolve_priority The priority at which the resolution callback will be hooked on the
|
| 109 |
+
* `$lazy_resolve_action`; defaults to `10`.
|
| 110 |
+
*/
|
| 111 |
+
trait Lazy_Events {
|
| 112 |
+
|
| 113 |
+
/**
|
| 114 |
+
* The callback that will be called when, and if, the lazy object resolved at least once.
|
| 115 |
+
*
|
| 116 |
+
* @since 4.9.16
|
| 117 |
+
*
|
| 118 |
+
* @var
|
| 119 |
+
*/
|
| 120 |
+
protected $lazy_resolve_callback;
|
| 121 |
+
|
| 122 |
+
/**
|
| 123 |
+
* Sets the callback that will be hooked to the resolve action when, and if, the `resolved` method is called.
|
| 124 |
+
*
|
| 125 |
+
* @since 4.9.16
|
| 126 |
+
*
|
| 127 |
+
* @param callable $callback The callback that will be hooked on the `$lazy_resolve_action` (defaults to `shutdown`)
|
| 128 |
+
* if the `resolved` method is called.
|
| 129 |
+
*
|
| 130 |
+
* @return static The object instance.
|
| 131 |
+
*
|
| 132 |
+
* @see Lazy_Events::resolved()
|
| 133 |
+
*/
|
| 134 |
+
public function on_resolve( callable $callback ) {
|
| 135 |
+
$this->lazy_resolve_callback = $callback;
|
| 136 |
+
|
| 137 |
+
return $this;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
/**
|
| 141 |
+
* Hooks the `$lazy_resolve_callback` to the `$lazy_resolve_action` with the `$lazy_resolve_priority` if set.
|
| 142 |
+
*
|
| 143 |
+
* @since 4.9.16
|
| 144 |
+
*/
|
| 145 |
+
protected function resolved() {
|
| 146 |
+
if ( empty( $this->lazy_resolve_callback ) ) {
|
| 147 |
+
return;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
$action = property_exists( $this, 'lazy_resolve_action' ) ?
|
| 151 |
+
$this->lazy_resolve_action
|
| 152 |
+
: 'shutdown';
|
| 153 |
+
$priority = property_exists( $this, 'lazy_resolve_priority' ) ?
|
| 154 |
+
$this->lazy_resolve_priority
|
| 155 |
+
: 10;
|
| 156 |
+
|
| 157 |
+
$hooked = has_action( $action, $this->lazy_resolve_callback );
|
| 158 |
+
|
| 159 |
+
// Let's play it safe and move the resoloution as late as possible.
|
| 160 |
+
$new_priority = false !== $hooked ? max( $hooked, $priority ) : $priority;
|
| 161 |
+
|
| 162 |
+
if ( is_numeric( $hooked ) && $hooked !== $new_priority ) {
|
| 163 |
+
remove_action( $action, $this->lazy_resolve_callback, $hooked );
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
add_action( $action, $this->lazy_resolve_callback, $new_priority );
|
| 167 |
+
}
|
| 168 |
+
}
|
common/src/Tribe/Utils/Lazy_String.php
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* A string lazily built, suited to any string value that might be costly to be built.
|
| 4 |
+
*
|
| 5 |
+
* @since 4.9.16
|
| 6 |
+
*
|
| 7 |
+
* @package Tribe\Utils
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
|
| 11 |
+
namespace Tribe\Utils;
|
| 12 |
+
|
| 13 |
+
|
| 14 |
+
class Lazy_String implements \Serializable, \JsonSerializable {
|
| 15 |
+
use Lazy_Events;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* The string value produced by the callback, cached.
|
| 19 |
+
*
|
| 20 |
+
* @since 4.9.16
|
| 21 |
+
*
|
| 22 |
+
* @var string
|
| 23 |
+
*/
|
| 24 |
+
protected $string;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* The callback that will be used to set the string value when called the first time.
|
| 28 |
+
*
|
| 29 |
+
* @since 4.9.16
|
| 30 |
+
*
|
| 31 |
+
* @var callable
|
| 32 |
+
*/
|
| 33 |
+
protected $value_callback;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* The callback that will be used to escape the string in the `escaped()` method..
|
| 37 |
+
*
|
| 38 |
+
* @since 4.9.16
|
| 39 |
+
*
|
| 40 |
+
* @var callable
|
| 41 |
+
*/
|
| 42 |
+
protected $escape_callback;
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* The escaped string value.
|
| 46 |
+
*
|
| 47 |
+
* @since 4.9.16
|
| 48 |
+
*
|
| 49 |
+
* @var string
|
| 50 |
+
*/
|
| 51 |
+
protected $escaped;
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Lazy_String constructor.
|
| 55 |
+
*
|
| 56 |
+
* @param callable $callback The callback that will be used to populate the string on the first fetch.
|
| 57 |
+
* @param string|false $escape_callback The callback that will be used to escape the string in the `escaped`
|
| 58 |
+
* method.
|
| 59 |
+
*/
|
| 60 |
+
public function __construct( callable $callback, $escape_callback = 'esc_html' ) {
|
| 61 |
+
$this->value_callback = $callback;
|
| 62 |
+
$this->escape_callback = $escape_callback;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* Inits, and returns, the string value of the string.
|
| 67 |
+
*
|
| 68 |
+
* @since 4.9.16
|
| 69 |
+
*
|
| 70 |
+
* @return string The unescaped string value.
|
| 71 |
+
*/
|
| 72 |
+
public function __toString() {
|
| 73 |
+
if ( null === $this->string ) {
|
| 74 |
+
$this->string = call_user_func( $this->value_callback );
|
| 75 |
+
$this->resolved();
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
return $this->string;
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/**
|
| 82 |
+
* Returns the HTML ready, escaped version of the string.
|
| 83 |
+
*
|
| 84 |
+
* @since 4.9.16
|
| 85 |
+
*
|
| 86 |
+
* @return string The escaped version of the string.
|
| 87 |
+
*/
|
| 88 |
+
public function escaped() {
|
| 89 |
+
if ( null !== $this->escaped ) {
|
| 90 |
+
return $this->escaped;
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
$this->escaped = empty( $this->escape_callback )
|
| 94 |
+
? $this->__toString()
|
| 95 |
+
: call_user_func( $this->escape_callback, $this->__toString() );
|
| 96 |
+
|
| 97 |
+
return $this->escaped;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
/**
|
| 101 |
+
* Returns the string value, just a proxy of the `__toString` method.
|
| 102 |
+
*
|
| 103 |
+
* @since 4.9.16
|
| 104 |
+
*
|
| 105 |
+
* @return string The string value.
|
| 106 |
+
*/
|
| 107 |
+
public function value() {
|
| 108 |
+
return $this->__toString();
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* {@inheritDoc}
|
| 113 |
+
*
|
| 114 |
+
* @since 4.9.16
|
| 115 |
+
*/
|
| 116 |
+
public function serialize() {
|
| 117 |
+
$serialized = serialize( [ $this->__toString(), $this->escaped() ] );
|
| 118 |
+
|
| 119 |
+
unset( $this->value_callback, $this->escape_callback );
|
| 120 |
+
|
| 121 |
+
return $serialized;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
/**
|
| 125 |
+
* {@inheritDoc}
|
| 126 |
+
*
|
| 127 |
+
* @since 4.9.16
|
| 128 |
+
*/
|
| 129 |
+
public function unserialize( $serialized ) {
|
| 130 |
+
list( $string, $escaped ) = unserialize( $serialized );
|
| 131 |
+
$this->string = $string;
|
| 132 |
+
$this->escaped = $escaped;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/**
|
| 136 |
+
* {@inheritDoc}
|
| 137 |
+
*/
|
| 138 |
+
public function jsonSerialize() {
|
| 139 |
+
return $this->value();
|
| 140 |
+
}
|
| 141 |
+
}
|
common/src/Tribe/Utils/Post_Thumbnail.php
CHANGED
|
@@ -28,6 +28,8 @@ use Tribe__Utils__Array as Arr;
|
|
| 28 |
* @package Tribe\Utils
|
| 29 |
*/
|
| 30 |
class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
|
|
|
|
|
| 31 |
/**
|
| 32 |
* An array of the site image sizes, including the `full` one.
|
| 33 |
*
|
|
@@ -55,6 +57,24 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 55 |
*/
|
| 56 |
protected $data;
|
| 57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 58 |
/**
|
| 59 |
* Post_Images constructor.
|
| 60 |
*
|
|
@@ -68,6 +88,10 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 68 |
* {@inheritDoc}
|
| 69 |
*/
|
| 70 |
public function __get( $property ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
return $this->offsetGet( $property );
|
| 72 |
}
|
| 73 |
|
|
@@ -75,6 +99,10 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 75 |
* {@inheritDoc}
|
| 76 |
*/
|
| 77 |
public function __set( $property, $value ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 78 |
$this->offsetSet( $property, $value );
|
| 79 |
}
|
| 80 |
|
|
@@ -119,18 +147,17 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 119 |
* @return array An array of objects containing the post thumbnail data.
|
| 120 |
*/
|
| 121 |
public function fetch_data() {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
if ( null !== $this->data ) {
|
| 123 |
return $this->data;
|
| 124 |
}
|
| 125 |
|
| 126 |
-
$post_id
|
| 127 |
-
$image_sizes
|
| 128 |
-
|
| 129 |
-
$thumbnail_id = get_post_thumbnail_id( $post_id );
|
| 130 |
-
|
| 131 |
-
if ( empty( $thumbnail_id ) ) {
|
| 132 |
-
return [];
|
| 133 |
-
}
|
| 134 |
|
| 135 |
$thumbnail_data = array_combine(
|
| 136 |
$image_sizes,
|
|
@@ -173,6 +200,8 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 173 |
*/
|
| 174 |
$thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $thumbnail_data, $post_id );
|
| 175 |
|
|
|
|
|
|
|
| 176 |
return $thumbnail_data;
|
| 177 |
}
|
| 178 |
|
|
@@ -247,4 +276,28 @@ class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
|
| 247 |
unset( $data['post_id'] );
|
| 248 |
$this->data = $data;
|
| 249 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 250 |
}
|
| 28 |
* @package Tribe\Utils
|
| 29 |
*/
|
| 30 |
class Post_Thumbnail implements \ArrayAccess, \Serializable {
|
| 31 |
+
use Lazy_Events;
|
| 32 |
+
|
| 33 |
/**
|
| 34 |
* An array of the site image sizes, including the `full` one.
|
| 35 |
*
|
| 57 |
*/
|
| 58 |
protected $data;
|
| 59 |
|
| 60 |
+
/**
|
| 61 |
+
* A flag property indicating whether the post thumbnail for the post exists or not.
|
| 62 |
+
*
|
| 63 |
+
* @since 4.9.16
|
| 64 |
+
*
|
| 65 |
+
* @var bool
|
| 66 |
+
*/
|
| 67 |
+
protected $exists;
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* The post ID, if any, of the post thumbnail.
|
| 71 |
+
*
|
| 72 |
+
* @since 4.9.16
|
| 73 |
+
*
|
| 74 |
+
* @var int
|
| 75 |
+
*/
|
| 76 |
+
protected $thumbnail_id;
|
| 77 |
+
|
| 78 |
/**
|
| 79 |
* Post_Images constructor.
|
| 80 |
*
|
| 88 |
* {@inheritDoc}
|
| 89 |
*/
|
| 90 |
public function __get( $property ) {
|
| 91 |
+
if ( 'exists' === $property ) {
|
| 92 |
+
return $this->exists();
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
return $this->offsetGet( $property );
|
| 96 |
}
|
| 97 |
|
| 99 |
* {@inheritDoc}
|
| 100 |
*/
|
| 101 |
public function __set( $property, $value ) {
|
| 102 |
+
if ( 'exists' === $property ) {
|
| 103 |
+
throw new \InvalidArgumentException( 'The `Post_Thumbnail::exists` property cannot be set.' );
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
$this->offsetSet( $property, $value );
|
| 107 |
}
|
| 108 |
|
| 147 |
* @return array An array of objects containing the post thumbnail data.
|
| 148 |
*/
|
| 149 |
public function fetch_data() {
|
| 150 |
+
if ( ! $this->exists() ) {
|
| 151 |
+
return [];
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
if ( null !== $this->data ) {
|
| 155 |
return $this->data;
|
| 156 |
}
|
| 157 |
|
| 158 |
+
$post_id = $this->post_id;
|
| 159 |
+
$image_sizes = $this->get_image_sizes();
|
| 160 |
+
$thumbnail_id = $this->thumbnail_id;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 161 |
|
| 162 |
$thumbnail_data = array_combine(
|
| 163 |
$image_sizes,
|
| 200 |
*/
|
| 201 |
$thumbnail_data = apply_filters( 'tribe_post_thumbnail_data', $thumbnail_data, $post_id );
|
| 202 |
|
| 203 |
+
$this->resolved();
|
| 204 |
+
|
| 205 |
return $thumbnail_data;
|
| 206 |
}
|
| 207 |
|
| 276 |
unset( $data['post_id'] );
|
| 277 |
$this->data = $data;
|
| 278 |
}
|
| 279 |
+
|
| 280 |
+
/**
|
| 281 |
+
* Returns whether a post thumbnail is set for the post or not.
|
| 282 |
+
*
|
| 283 |
+
* @since 4.9.16
|
| 284 |
+
*
|
| 285 |
+
* @return bool Whether a post thumbnail is set for the post or not.
|
| 286 |
+
*/
|
| 287 |
+
public function exists() {
|
| 288 |
+
if ( null !== $this->exists ) {
|
| 289 |
+
return $this->exists;
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
$thumbnail_id = get_post_thumbnail_id( $this->post_id );
|
| 293 |
+
|
| 294 |
+
if ( empty( $thumbnail_id ) ) {
|
| 295 |
+
$this->exists = false;
|
| 296 |
+
} else {
|
| 297 |
+
$this->thumbnail_id = $thumbnail_id;
|
| 298 |
+
$this->exists = true;
|
| 299 |
+
}
|
| 300 |
+
|
| 301 |
+
return $this->exists;
|
| 302 |
+
}
|
| 303 |
}
|
common/src/resources/css/tribe-common-admin.css
CHANGED
|
@@ -24,8 +24,20 @@
|
|
| 24 |
cursor: text;
|
| 25 |
padding: 4px 4px 4px 4px;
|
| 26 |
}
|
| 27 |
-
input
|
| 28 |
-
textarea
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
color: #999;
|
| 30 |
}
|
| 31 |
input::-webkit-input-placeholder,
|
|
@@ -36,7 +48,7 @@ textarea::-webkit-input-placeholder {
|
|
| 36 |
-khtml-border-radius: 3px;
|
| 37 |
background-color: #f9f9f9;
|
| 38 |
border-color: #dfdfdf;
|
| 39 |
-
|
| 40 |
border-spacing: 0;
|
| 41 |
border-style: solid;
|
| 42 |
border-style: solid;
|
|
@@ -55,7 +67,7 @@ td.tribe_message {
|
|
| 55 |
width: 200px;
|
| 56 |
}
|
| 57 |
.tribe_brand {
|
| 58 |
-
font-family: Georgia !important;
|
| 59 |
font-size: 17px !important;
|
| 60 |
font-weight: normal;
|
| 61 |
margin: 8px 0;
|
|
@@ -65,14 +77,14 @@ td.tribe_message {
|
|
| 65 |
#tribe-upgrade {
|
| 66 |
background: #f6f6f6;
|
| 67 |
border: 1px solid #ccc;
|
| 68 |
-
|
| 69 |
margin: 20px 0 30px;
|
| 70 |
padding: 0 20px 20px;
|
| 71 |
}
|
| 72 |
#tribe-upgrade .message {
|
| 73 |
background-color: #ffffe0;
|
| 74 |
border-color: #e6db55;
|
| 75 |
-
|
| 76 |
border-style: solid;
|
| 77 |
border-width: 1px;
|
| 78 |
padding: 6px 12px;
|
|
@@ -80,121 +92,119 @@ td.tribe_message {
|
|
| 80 |
/* = Plugin Screen
|
| 81 |
=============================================*/
|
| 82 |
table.plugins .tribe-plugin-update-message {
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
}
|
| 89 |
table.plugins .tribe-plugin-update-message h4 {
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
}
|
| 94 |
table.plugins .tribe-plugin-update-message h4:after {
|
| 95 |
-
|
| 96 |
-
}
|
| 97 |
table.plugins .tribe-plugin-update-message a {
|
| 98 |
-
|
| 99 |
-
|
| 100 |
-
}
|
| 101 |
/* = Settings Screen
|
| 102 |
=============================================*/
|
| 103 |
.tribe-settings-form {
|
| 104 |
max-width: 1000px;
|
| 105 |
}
|
| 106 |
.tribe-settings-form fieldset {
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
}
|
| 111 |
-
.tribe-settings-form legend {
|
| 112 |
-
float: left;
|
| 113 |
-
font-weight: bold;
|
| 114 |
-
margin-right: 20px;
|
| 115 |
-
width: 220px;
|
| 116 |
-
}
|
| 117 |
.tribe-settings-form fieldset.tribe-field-license_key legend {
|
| 118 |
-
|
| 119 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 120 |
.tribe-settings-form .tribe-field-wrap {
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
}
|
| 124 |
-
.tribe-settings-form .tribe-field-wrap *:first-child {
|
| 125 |
-
margin-top: 0;
|
| 126 |
}
|
| 127 |
-
.tribe-settings-form .tribe-field-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 137 |
.tribe-settings-form .tribe-settings-form-wrap fieldset,
|
| 138 |
-
.tribe-settings-form .tribe-settings-form-wrap .description,
|
| 139 |
-
.tribe-settings-form fieldset[id^='tribe-field-geoloc_'] {
|
| 140 |
-
|
| 141 |
-
}
|
| 142 |
.tribe-settings-form .tribe-settings-form-wrap fieldset .description {
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
}
|
|
|
|
|
|
|
|
|
|
| 147 |
.tribe-settings-form .tribe-settings-form-wrap h3 {
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
}
|
| 152 |
.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,
|
| 153 |
-
.tribe-settings-form .tribe-settings-form-wrap .system-info,
|
| 154 |
-
.tribe-settings-form .tribe-settings-form-wrap h3 + p,
|
| 155 |
-
.tribe-settings-form .tribe-settings-form-wrap .contained {
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
}
|
|
|
|
|
|
|
|
|
|
| 159 |
.tribe_settings .tribe-field-indent {
|
| 160 |
-
|
| 161 |
-
}
|
| 162 |
.tribe_settings #pu_dashboard_message {
|
| 163 |
-
|
| 164 |
-
}
|
| 165 |
.tribe_settings .tribe-errors-list {
|
| 166 |
-
|
| 167 |
-
}
|
| 168 |
.tribe_settings .expiring-license {
|
| 169 |
-
|
| 170 |
-
}
|
| 171 |
.tribe_settings .tribe-error {
|
| 172 |
-
|
| 173 |
-
}
|
| 174 |
.tribe_settings .tribe-field-description {
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
}
|
| 179 |
.tribe_settings #ical-link {
|
| 180 |
-
|
| 181 |
-
}
|
| 182 |
-
.tribe-settings-form #tribe-field-stylesheetOption label {
|
| 183 |
-
margin-left: 20px;
|
| 184 |
-
}
|
| 185 |
-
.tribe-settings-form #tribe-field-stylesheetOption input {
|
| 186 |
-
margin-left: -20px;
|
| 187 |
-
margin-right: 8px;
|
| 188 |
-
}
|
| 189 |
-
.tribe-settings-form #tribe-field-stylesheetOption p.description {
|
| 190 |
-
color: #999;
|
| 191 |
-
}
|
| 192 |
/* Modern Tribe box */
|
| 193 |
#modern-tribe-info {
|
| 194 |
-khtml-border-radius: 4px;
|
| 195 |
background-color: #f9f9f9;
|
| 196 |
border: 1px solid #ccc;
|
| 197 |
-
|
| 198 |
margin: 20px 0;
|
| 199 |
padding: 8px 20px 12px;
|
| 200 |
}
|
|
@@ -326,7 +336,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 326 |
-khtml-border-radius: 4px;
|
| 327 |
background-color: #f9f9f9;
|
| 328 |
border: 1px solid #ccc;
|
| 329 |
-
|
| 330 |
float: left;
|
| 331 |
margin: 20px 0;
|
| 332 |
padding: 0 20px 15px;
|
|
@@ -336,7 +346,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 336 |
-khtml-border-radius: 4px;
|
| 337 |
background-color: #f9f9f9;
|
| 338 |
border: 1px solid #ccc;
|
| 339 |
-
|
| 340 |
float: right;
|
| 341 |
margin: 20px 0;
|
| 342 |
padding: 0 20px 15px;
|
|
@@ -378,9 +388,6 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 378 |
.tribe_events_active_filter_type_options label {
|
| 379 |
margin: 7px 0;
|
| 380 |
}
|
| 381 |
-
.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection {
|
| 382 |
-
margin-bottom: 18px;
|
| 383 |
-
}
|
| 384 |
.OrganizerInfo td small,
|
| 385 |
#event_organizer td small {
|
| 386 |
display: block;
|
|
@@ -436,7 +443,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 436 |
-khtml-border-radius: 4px;
|
| 437 |
background-color: #f9f9f9;
|
| 438 |
border: 1px solid #ccc;
|
| 439 |
-
|
| 440 |
padding: 8px 20px 12px;
|
| 441 |
}
|
| 442 |
.tribe-section-type-box img {
|
|
@@ -493,11 +500,11 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 493 |
padding-left: 10px;
|
| 494 |
}
|
| 495 |
.system-info-copy .system-info-copy-btn {
|
| 496 |
-
|
| 497 |
}
|
| 498 |
.system-info-copy .system-info-copy-btn .dashicons {
|
| 499 |
-
|
| 500 |
-
|
| 501 |
.template-updates-wrapper p {
|
| 502 |
margin-top: 0;
|
| 503 |
}
|
| 24 |
cursor: text;
|
| 25 |
padding: 4px 4px 4px 4px;
|
| 26 |
}
|
| 27 |
+
input::-webkit-input-placeholder,
|
| 28 |
+
textarea::-webkit-input-placeholder {
|
| 29 |
+
color: #999;
|
| 30 |
+
}
|
| 31 |
+
input:-ms-input-placeholder,
|
| 32 |
+
textarea:-ms-input-placeholder {
|
| 33 |
+
color: #999;
|
| 34 |
+
}
|
| 35 |
+
input::-ms-input-placeholder,
|
| 36 |
+
textarea::-ms-input-placeholder {
|
| 37 |
+
color: #999;
|
| 38 |
+
}
|
| 39 |
+
input::placeholder,
|
| 40 |
+
textarea::placeholder {
|
| 41 |
color: #999;
|
| 42 |
}
|
| 43 |
input::-webkit-input-placeholder,
|
| 48 |
-khtml-border-radius: 3px;
|
| 49 |
background-color: #f9f9f9;
|
| 50 |
border-color: #dfdfdf;
|
| 51 |
+
border-radius: 3px;
|
| 52 |
border-spacing: 0;
|
| 53 |
border-style: solid;
|
| 54 |
border-style: solid;
|
| 67 |
width: 200px;
|
| 68 |
}
|
| 69 |
.tribe_brand {
|
| 70 |
+
font-family: Georgia, serif !important;
|
| 71 |
font-size: 17px !important;
|
| 72 |
font-weight: normal;
|
| 73 |
margin: 8px 0;
|
| 77 |
#tribe-upgrade {
|
| 78 |
background: #f6f6f6;
|
| 79 |
border: 1px solid #ccc;
|
| 80 |
+
border-radius: 5px;
|
| 81 |
margin: 20px 0 30px;
|
| 82 |
padding: 0 20px 20px;
|
| 83 |
}
|
| 84 |
#tribe-upgrade .message {
|
| 85 |
background-color: #ffffe0;
|
| 86 |
border-color: #e6db55;
|
| 87 |
+
border-radius: 3px;
|
| 88 |
border-style: solid;
|
| 89 |
border-width: 1px;
|
| 90 |
padding: 6px 12px;
|
| 92 |
/* = Plugin Screen
|
| 93 |
=============================================*/
|
| 94 |
table.plugins .tribe-plugin-update-message {
|
| 95 |
+
background: #D54E21; /* taken from colour scheme in list-tables.css */
|
| 96 |
+
color: white;
|
| 97 |
+
display: inline-table;
|
| 98 |
+
margin: 6px 0;
|
| 99 |
+
padding: 10px 12px;
|
| 100 |
+
}
|
| 101 |
table.plugins .tribe-plugin-update-message h4 {
|
| 102 |
+
display: inline;
|
| 103 |
+
font-weight: bold;
|
| 104 |
+
margin-right: 8px;
|
| 105 |
+
}
|
| 106 |
table.plugins .tribe-plugin-update-message h4:after {
|
| 107 |
+
content: ' \00BB ';
|
| 108 |
+
}
|
| 109 |
table.plugins .tribe-plugin-update-message a {
|
| 110 |
+
color: white;
|
| 111 |
+
text-decoration: underline;
|
| 112 |
+
}
|
| 113 |
/* = Settings Screen
|
| 114 |
=============================================*/
|
| 115 |
.tribe-settings-form {
|
| 116 |
max-width: 1000px;
|
| 117 |
}
|
| 118 |
.tribe-settings-form fieldset {
|
| 119 |
+
clear: both;
|
| 120 |
+
display: inline-block;
|
| 121 |
+
padding: 10px 0;
|
| 122 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 123 |
.tribe-settings-form fieldset.tribe-field-license_key legend {
|
| 124 |
+
width: auto;
|
| 125 |
+
}
|
| 126 |
+
.tribe-settings-form legend {
|
| 127 |
+
float: left;
|
| 128 |
+
font-weight: bold;
|
| 129 |
+
margin-right: 20px;
|
| 130 |
+
width: 220px;
|
| 131 |
+
}
|
| 132 |
.tribe-settings-form .tribe-field-wrap {
|
| 133 |
+
float: left;
|
| 134 |
+
max-width: 500px;
|
|
|
|
|
|
|
|
|
|
| 135 |
}
|
| 136 |
+
.tribe-settings-form .tribe-field-wrap *:first-child {
|
| 137 |
+
margin-top: 0;
|
| 138 |
+
}
|
| 139 |
+
.tribe-settings-form .tribe-field-radio label, .tribe-settings-form .tribe-field-checkbox_list label {
|
| 140 |
+
display: block;
|
| 141 |
+
margin: 5px 0 5px 20px;
|
| 142 |
+
text-indent: -20px;
|
| 143 |
+
}
|
| 144 |
+
.tribe-settings-form .tribe-field-radio label > p, .tribe-settings-form .tribe-field-checkbox_list label > p {
|
| 145 |
+
text-indent: 0;
|
| 146 |
+
margin-left: 1px;
|
| 147 |
+
}
|
| 148 |
+
.tribe-settings-form .tribe-field-radio label input, .tribe-settings-form .tribe-field-checkbox_list label input {
|
| 149 |
+
margin-right: 5px;
|
| 150 |
+
}
|
| 151 |
.tribe-settings-form .tribe-settings-form-wrap fieldset,
|
| 152 |
+
.tribe-settings-form .tribe-settings-form-wrap .description,
|
| 153 |
+
.tribe-settings-form fieldset[id^='tribe-field-geoloc_'] {
|
| 154 |
+
padding-left: 12px;
|
| 155 |
+
}
|
| 156 |
.tribe-settings-form .tribe-settings-form-wrap fieldset .description {
|
| 157 |
+
margin-left: 0;
|
| 158 |
+
max-width: 450px;
|
| 159 |
+
padding-left: 0;
|
| 160 |
+
}
|
| 161 |
+
.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection {
|
| 162 |
+
margin-bottom: 18px;
|
| 163 |
+
}
|
| 164 |
.tribe-settings-form .tribe-settings-form-wrap h3 {
|
| 165 |
+
background-color: #f9f9f9;
|
| 166 |
+
margin-bottom: 10px;
|
| 167 |
+
padding: 6px 0 6px 12px;
|
| 168 |
+
}
|
| 169 |
.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,
|
| 170 |
+
.tribe-settings-form .tribe-settings-form-wrap .system-info,
|
| 171 |
+
.tribe-settings-form .tribe-settings-form-wrap h3 + p,
|
| 172 |
+
.tribe-settings-form .tribe-settings-form-wrap .contained {
|
| 173 |
+
margin: 0 0 10px;
|
| 174 |
+
padding-left: 12px;
|
| 175 |
+
}
|
| 176 |
+
.tribe-settings-form #tribe-field-stylesheetOption p.description {
|
| 177 |
+
color: #999;
|
| 178 |
+
}
|
| 179 |
.tribe_settings .tribe-field-indent {
|
| 180 |
+
margin-left: 245px;
|
| 181 |
+
}
|
| 182 |
.tribe_settings #pu_dashboard_message {
|
| 183 |
+
display: none;
|
| 184 |
+
}
|
| 185 |
.tribe_settings .tribe-errors-list {
|
| 186 |
+
margin-left: 15px;
|
| 187 |
+
}
|
| 188 |
.tribe_settings .expiring-license {
|
| 189 |
+
color: red;
|
| 190 |
+
}
|
| 191 |
.tribe_settings .tribe-error {
|
| 192 |
+
border: 1px solid #f00;
|
| 193 |
+
}
|
| 194 |
.tribe_settings .tribe-field-description {
|
| 195 |
+
margin-bottom: 0;
|
| 196 |
+
position: relative;
|
| 197 |
+
top: -12px;
|
| 198 |
+
}
|
| 199 |
.tribe_settings #ical-link {
|
| 200 |
+
top: -14px;
|
| 201 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 202 |
/* Modern Tribe box */
|
| 203 |
#modern-tribe-info {
|
| 204 |
-khtml-border-radius: 4px;
|
| 205 |
background-color: #f9f9f9;
|
| 206 |
border: 1px solid #ccc;
|
| 207 |
+
border-radius: 4px;
|
| 208 |
margin: 20px 0;
|
| 209 |
padding: 8px 20px 12px;
|
| 210 |
}
|
| 336 |
-khtml-border-radius: 4px;
|
| 337 |
background-color: #f9f9f9;
|
| 338 |
border: 1px solid #ccc;
|
| 339 |
+
border-radius: 4px;
|
| 340 |
float: left;
|
| 341 |
margin: 20px 0;
|
| 342 |
padding: 0 20px 15px;
|
| 346 |
-khtml-border-radius: 4px;
|
| 347 |
background-color: #f9f9f9;
|
| 348 |
border: 1px solid #ccc;
|
| 349 |
+
border-radius: 4px;
|
| 350 |
float: right;
|
| 351 |
margin: 20px 0;
|
| 352 |
padding: 0 20px 15px;
|
| 388 |
.tribe_events_active_filter_type_options label {
|
| 389 |
margin: 7px 0;
|
| 390 |
}
|
|
|
|
|
|
|
|
|
|
| 391 |
.OrganizerInfo td small,
|
| 392 |
#event_organizer td small {
|
| 393 |
display: block;
|
| 443 |
-khtml-border-radius: 4px;
|
| 444 |
background-color: #f9f9f9;
|
| 445 |
border: 1px solid #ccc;
|
| 446 |
+
border-radius: 4px;
|
| 447 |
padding: 8px 20px 12px;
|
| 448 |
}
|
| 449 |
.tribe-section-type-box img {
|
| 500 |
padding-left: 10px;
|
| 501 |
}
|
| 502 |
.system-info-copy .system-info-copy-btn {
|
| 503 |
+
padding: 6px;
|
| 504 |
}
|
| 505 |
.system-info-copy .system-info-copy-btn .dashicons {
|
| 506 |
+
padding-right: 10px;
|
| 507 |
+
}
|
| 508 |
.template-updates-wrapper p {
|
| 509 |
margin-top: 0;
|
| 510 |
}
|
common/src/resources/css/tribe-common-admin.min.css
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
.invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input:placeholder,textarea:placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{-khtml-border-radius:3px;background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;border-style:solid;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}.tribe-settings-form #tribe-field-stylesheetOption label{margin-left:20px}.tribe-settings-form #tribe-field-stylesheetOption input{margin-left:-20px;margin-right:8px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}#modern-tribe-info{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;-webkit-border-radius:5px;-moz-border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;webkit-transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.select2-container .select2-choice abbr{top:6px}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container-active .select2-choice,.tribe-ea-dropdown.select2-container-active .select2-choice{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-dropdown-open .select2-choice,.tribe-ea-dropdown.select2-dropdown-open .select2-choice{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown .select2-choice,.tribe-ea-dropdown .select2-choice{background-image:none;border-radius:3px;border:1px solid #ccc}.tribe-dropdown .select2-choice>.select2-chosen,.tribe-ea-dropdown .select2-choice>.select2-chosen{white-space:normal}.tribe-dropdown .select2-choice .select2-arrow,.tribe-ea-dropdown .select2-choice .select2-arrow{background-image:none;background:transparent;border-left:0}.tribe-dropdown .select2-choice div,.tribe-ea-dropdown .select2-choice div{background-image:none;background:none;border-left:0}.tribe-dropdown.select2-container-multi .select2-choices,.tribe-ea-dropdown.select2-container-multi .select2-choices{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field{line-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field input,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field input{padding-top:0;padding-bottom:0}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice div,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice div{line-height:inherit}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice-close,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice-close{top:3px;left:4px;transition-property:border,color}.select2-results .select2-selected{display:block}.select2-results .select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:400}.select2-results li.select2-result-with-children.select2-selected,.select2-results li.select2-result-with-children.select2-selected .select2-result{display:block}.select2-results li.select2-result-with-children.select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children.select2-result-unselectable>.select2-result-label{color:#939393;font-weight:400}.wp-core-ui .button-red{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5);background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-choice .select2-arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
|
| 1 |
+
.invalid input{border:2px solid red!important}.valid input{border:1px solid green}.clearfix{zoom:1}.placeholder{color:#999;cursor:text;padding:4px}input:-ms-input-placeholder,input::-ms-input-placeholder,textarea:-ms-input-placeholder,textarea::-ms-input-placeholder{color:#999}input::placeholder,textarea::placeholder{color:#999}input::-webkit-input-placeholder,textarea::-webkit-input-placeholder{color:#999}.bubble{-khtml-border-radius:3px;background-color:#f9f9f9;border:1px solid #dfdfdf;border-radius:3px;border-spacing:0;border-style:solid;padding:10px}.tribe-sticky-tooltip{color:#bbb}td.tribe_message{padding-bottom:10px!important}#tribe_thanks{float:left;margin:5px 0 0;width:200px}.tribe_brand{font-family:Georgia,serif!important;font-size:17px!important;font-weight:400;margin:8px 0}#tribe-upgrade{background:#f6f6f6;border:1px solid #ccc;border-radius:5px;margin:20px 0 30px;padding:0 20px 20px}#tribe-upgrade .message{background-color:#ffffe0;border:1px solid #e6db55;border-radius:3px;padding:6px 12px}table.plugins .tribe-plugin-update-message{background:#d54e21;color:#fff;display:inline-table;margin:6px 0;padding:10px 12px}table.plugins .tribe-plugin-update-message h4{display:inline;font-weight:700;margin-right:8px}table.plugins .tribe-plugin-update-message h4:after{content:" \00BB "}table.plugins .tribe-plugin-update-message a{color:#fff;text-decoration:underline}.tribe-settings-form{max-width:1000px}.tribe-settings-form fieldset{clear:both;display:inline-block;padding:10px 0}.tribe-settings-form fieldset.tribe-field-license_key legend{width:auto}.tribe-settings-form legend{float:left;font-weight:700;margin-right:20px;width:220px}.tribe-settings-form .tribe-field-wrap{float:left;max-width:500px}.tribe-settings-form .tribe-field-wrap :first-child{margin-top:0}.tribe-settings-form .tribe-field-checkbox_list label,.tribe-settings-form .tribe-field-radio label{display:block;margin:5px 0 5px 20px;text-indent:-20px}.tribe-settings-form .tribe-field-checkbox_list label>p,.tribe-settings-form .tribe-field-radio label>p{text-indent:0;margin-left:1px}.tribe-settings-form .tribe-field-checkbox_list label input,.tribe-settings-form .tribe-field-radio label input{margin-right:5px}.tribe-settings-form .tribe-settings-form-wrap .description,.tribe-settings-form .tribe-settings-form-wrap fieldset,.tribe-settings-form fieldset[id^=tribe-field-geoloc_]{padding-left:12px}.tribe-settings-form .tribe-settings-form-wrap fieldset .description{margin-left:0;max-width:450px;padding-left:0}.tribe-settings-form .tribe-settings-form-wrap fieldset .tribe-style-selection{margin-bottom:18px}.tribe-settings-form .tribe-settings-form-wrap h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}.tribe-settings-form .tribe-settings-form-wrap .contained,.tribe-settings-form .tribe-settings-form-wrap .system-info,.tribe-settings-form .tribe-settings-form-wrap .tribe-sysinfo-optin-msg,.tribe-settings-form .tribe-settings-form-wrap h3+p{margin:0 0 10px;padding-left:12px}.tribe-settings-form #tribe-field-stylesheetOption p.description{color:#999}.tribe_settings .tribe-field-indent{margin-left:245px}.tribe_settings #pu_dashboard_message{display:none}.tribe_settings .tribe-errors-list{margin-left:15px}.tribe_settings .expiring-license{color:red}.tribe_settings .tribe-error{border:1px solid red}.tribe_settings .tribe-field-description{margin-bottom:0;position:relative;top:-12px}.tribe_settings #ical-link{top:-14px}#modern-tribe-info{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:8px 20px 12px}#modern-tribe-info img{height:18px;margin:10px 0;width:250px}#modern-tribe-info ul{list-style:disc;margin-left:20px}#modern-tribe-info ul ul{list-style:circle}.tribe-field-inline-dropdown{margin-left:0;margin-right:0}.tribe-field-inline-text{line-height:28px;margin:0 2px}.tribe-field-textarea.tribe-size-small textarea{height:60px;width:180px}.tribe-field-textarea.tribe-size-medium textarea{height:80px;width:300px}.tribe-field-textarea.tribe-size-large textarea{height:120px;width:450px}.tribe-field-email.tribe-size-small input,.tribe-field-license_key.tribe-size-small input,.tribe-field-text.tribe-size-small input{width:50px}.tribe-field-email.tribe-size-medium input,.tribe-field-license_key.tribe-size-medium input,.tribe-field-text.tribe-size-medium input{width:225px}.tribe-field-email.tribe-size-large input,.tribe-field-license_key.tribe-size-large input,.tribe-field-text.tribe-size-large input{width:450px}.tribe-field-dropdown.tribe-size-small select{width:100px}.tribe-field-dropdown.tribe-size-medium select{width:300px}.tribe-field-dropdown.tribe-size-large select{width:450px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap{max-width:600px}.tribe-field-wrapped_html.tribe-size-large .tribe-field-wrap .description{max-width:100%}.tribe-field-dropdown_chosen.tribe-size-small select{width:100px}.tribe-field-dropdown_chosen.tribe-size-medium select{width:200px}.tribe-field-dropdown_chosen.tribe-size-large select{width:300px}.tribe-field-wrap .tooltip:first-child{font-style:normal}.tribe-field.indent{margin-left:252px;width:75%}.tribe-field.indent legend{font-weight:400;width:auto}.tribe-field.indent .tribe-field-wrap{padding-right:12px}.tribe-field.indent.tribe-field-radio .tribe-field-wrap{clear:left;margin-top:12px}.tribe-field.light-bordered{background-color:#fff;border:1px solid #d3d3d3}.ajax-loading-license,.invalid-key,.valid-key{display:none;margin:0 5px}.ajax-loading-license{position:relative;top:5px}.key-validity{display:inline-block}.invalid-key,.optin-fail{color:red}.optin-success,.valid-key{color:green}.valid-key.service-msg{color:#b72}#additional-field-table{margin-bottom:20px}.tribe-admin-box-left{float:left;width:20%}.tribe-admin-box-left,.tribe-admin-box-right{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;margin:20px 0;padding:0 20px 15px}.tribe-admin-box-right{float:right;width:68%}.ajax-loader{float:right;margin:10px}.tribe-arrangeable-item{border:1px solid #d3d3d3;border-radius:3px}.tribe-arrangeable-item .ui-state-default{border:none}.tribe-arrangeable-item-top{padding:6px}.tribe-arrangeable-item-top:hover{cursor:move}.tribe-arrangeable-action{float:right}.tribe-arrangeable-child{background-color:#f9f9f9;border-top:1px solid #d3d3d3;display:none;padding:25px}.tribe-arrangeable-child label{display:block;margin:0 0 7px}.tribe_events_active_filter_type_options{margin:10px 0}.tribe_events_active_filter_type_options label{margin:7px 0}#event_organizer td small,.OrganizerInfo td small{display:block;margin:0;max-width:250px}#event_organizer .organizer-email,.OrganizerInfo .organizer-email{vertical-align:top}.tribe-table-field-label{max-width:100%;width:200px}#tribe-help-general,#tribe-help-sidebar{float:left;margin-top:20px}#tribe-help-general p{margin-left:15px}#tribe-help-general ul{list-style-type:square}#tribe-help-general ol,#tribe-help-general ul{margin-bottom:20px;margin-left:35px}#tribe-help-general h3{background-color:#f9f9f9;margin-bottom:10px;padding:6px 0 6px 12px}#tribe-help-general h3~h3{margin-top:2.25em}#tribe-help-general h3+p{margin:0 0 20px;padding-left:12px}#tribe-help-general{width:65%}.tribe-help-section{padding-bottom:10px}.tribe-section-type-box{-khtml-border-radius:4px;background-color:#f9f9f9;border:1px solid #ccc;border-radius:4px;padding:8px 20px 12px}.tribe-section-type-box img{height:auto;margin:10px 0;max-width:300px}.tribe-section-type-box ul{list-style:disc;margin-left:20px}.tribe-section-type-box ul ul{list-style:circle}#tribe-log-controls{padding-bottom:1rem;padding-left:12px}#tribe-log-controls>div{display:inline-block;padding-right:1rem}#tribe-log-controls .working{opacity:1;transition:opacity .2s}#tribe-log-controls .working.hidden{opacity:0;transition:opacity .2s}#tribe-log-viewer,#tribe-system-info dl.support-stats,.template-updates-wrapper{background:#000;border-radius:2px;color:#888;max-height:400px;overflow:scroll;padding:10px}#tribe-system-info dl.support-stats dt,.template-updates-wrapper dt{clear:both;float:left;font-weight:700;text-transform:uppercase;width:25%}#tribe-system-info dl.support-stats dd,.template-updates-wrapper dd{margin-left:25%;padding-left:10px}.system-info-copy .system-info-copy-btn{padding:6px}.system-info-copy .system-info-copy-btn .dashicons{padding-right:10px}.template-updates-wrapper p{margin-top:0}#tribe-help-sidebar{margin:20px 0 0 3%;max-width:225px;width:32%}.tribe-help-plugin-info{border:1px solid #ccc;padding:0 12px 12px}.tribe-help-plugin-info dd,.tribe-help-plugin-info dt{display:inline;margin:0}.tribe-help-plugin-info dt{font-weight:700}.tribe-help-plugin-info dd:after{content:"";display:block;height:.4em}.tribe-help-plugin-info dd:last-child:after{height:0}.tribe-help-plugin-info+.tribe-help-plugin-info{margin-top:20px}.tribe-help-plugin-info>div{line-height:2em}.tribe-help-plugin-info .star-rating{display:inline-block;margin-left:3px;position:relative;top:-2px}.tribe-help-plugin-info .tribe-list-addons{color:#21a6cb;font-size:24px;list-style:circle inside;margin-bottom:10px;margin-top:10px;padding-left:4px}.tribe-help-plugin-info .tribe-list-addons a{font-size:13px;left:-5px;position:relative;top:-5px}.tribe-help-plugin-info .tribe-list-addons .tribe-active-addon{list-style:disc inside}.ui-widget-overlay{background:#666;filter:Alpha(Opacity=50);opacity:.5}.ui-widget-shadow{background:#000;-webkit-border-radius:5px;-moz-border-radius:5px;filter:Alpha(Opacity=20);margin:-5px 0 0 -5px;opacity:.2;padding:5px}.ui-resizable{position:relative}.ui-resizable-handle{display:block;font-size:.1px;position:absolute;z-index:99999}.ui-resizable-autohide .ui-resizable-handle,.ui-resizable-disabled .ui-resizable-handle{display:none}.ui-resizable-n{cursor:n-resize;height:7px;left:0;top:-5px;width:100%}.ui-resizable-s{bottom:-5px;cursor:s-resize;height:7px;left:0;width:100%}.ui-resizable-e{cursor:e-resize;height:100%;right:-5px;top:0;width:7px}.ui-resizable-w{cursor:w-resize;height:100%;left:-5px;top:0;width:7px}.ui-resizable-se{bottom:1px;cursor:se-resize;height:12px;right:1px;width:12px}.ui-resizable-sw{bottom:-5px;cursor:sw-resize;height:9px;left:-5px;width:9px}.ui-resizable-nw{cursor:nw-resize;height:9px;left:-5px;top:-5px;width:9px}.ui-resizable-ne{cursor:ne-resize;height:9px;right:-5px;top:-5px;width:9px}.ui-dialog{padding:.2em;position:relative;width:375px}.ui-dialog .ui-dialog-titlebar{padding:.5em .3em .3em 1em;position:relative}.ui-dialog .ui-dialog-title{float:left;margin:.1em 0 .2em}.ui-dialog .ui-dialog-titlebar-close{height:18px;margin:-10px 0 0;padding:1px;position:absolute;right:.3em;top:50%;width:19px}.ui-dialog .ui-dialog-titlebar-close span{display:block;margin-left:-8px;margin-top:-8px}.ui-dialog .ui-dialog-titlebar-close:focus,.ui-dialog .ui-dialog-titlebar-close:hover{padding:0}.ui-dialog .ui-dialog-content{background:none;border:0;overflow:auto;padding:.5em 1em;zoom:1}.ui-dialog .ui-dialog-buttonpane{background-image:none;border-width:1px 0 0;margin:.5em 0 0;padding:.3em 1em .5em!important;text-align:right}.ui-dialog .ui-dialog-buttonpane button{cursor:pointer;line-height:1.4em;margin:.5em .4em!important;overflow:visible;padding:.2em .6em .3em;text-shadow:none;width:auto}.ui-dialog .ui-resizable-se{bottom:3px;height:14px;right:3px;width:14px}.ui-draggable .ui-dialog-titlebar{cursor:move}.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset{float:none!important;text-align:center}.ui-button-text-only .ui-button-text{padding:.4em 1em}.ui-button .ui-button-text{display:block;line-height:1.4}#ui-datepicker-div{display:none}#tribe-loading{background:#fff;background:hsla(0,0%,100%,.8);display:none;height:100%;left:0;position:absolute;top:0;transition:all 1s linear;webkit-transition:all 1s linear;width:100%;z-index:4}#tribe-loading span{background:url(../images/tribe-loading.gif) 0 0 no-repeat;background-size:32px 32px;height:32px;left:50%;margin:-16px 0 0 -16px;position:absolute;top:50%;width:32px}.tribe_update_page,.tribe_welcome_page{max-width:850px}.tribe_welcome_page.wrap h1{font-size:3em;line-height:1.2;margin-top:1em}.tribe_welcome_page.wrap h1:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:.9em;line-height:1;margin-right:5px;position:relative;top:4px}.tribe-half-column{float:left;margin-bottom:30px;margin-right:5%;width:45%}.tribe-row:after,.tribe-row:before{content:"";display:table}.tribe-row,.tribe-row:after{clear:both}.tribe-row .tribe-half-column:last-child{margin-right:0;width:50%}.tribe_welcome_page .tribe-half-column h4,.tribe_welcome_page h2{font-size:24px;line-height:1.2;margin-bottom:20px}.tribe_update_page h2{font-size:30px;line-height:1.2;margin-bottom:20px}.tribe_update_page h3,.tribe_welcome_page h3{font-size:24px;font-weight:400;line-height:24px;margin-top:0}.tribe_update_page h4,.tribe_welcome_page h4{font-size:18px;font-weight:600;line-height:18px;margin:0}.tribe_update_page p,.tribe_welcome_page p{font-size:15px}.tribe_welcome_page li{font-size:14px;margin-bottom:10px}p.tribe-welcome-message{font-size:18px;font-weight:400}.tribe_welcome_page .tribe-half-column h4{margin-top:1em}.tribe_welcome_page .tribe-half-column h4:before{color:#555d66;content:"\f145";font-family:dashicons;font-size:21px;line-height:1;margin-right:10px;position:relative;top:2px}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-sos]:before{content:"\f468"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-welcome-learn-more]:before{content:"\f118"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-megaphone]:before{content:"\f488"}.tribe_welcome_page .tribe-half-column h4[data-tribe-icon=dashicons-heart]:before{content:"\f487"}.tribe_update_page h4:before{content:"\f145";font-family:dashicons;font-size:34px;line-height:1;margin-right:5px;position:relative;top:5px}.tribe-welcome-video-wrapper{height:0;margin-bottom:40px;padding-bottom:56.25%;padding-top:25px;position:relative}.tribe-welcome-video-wrapper iframe{height:100%;left:0;position:absolute;top:0;width:100%}a.tribe-rating-link{text-decoration:none}.tribe-update-links,.tribe-welcome-links{margin-top:30px}.tribe_update_page li:before,.tribe_welcome_page li:before{content:"\2022";padding-right:3px}.tribe_update_page .rss-widget{margin:1em 0}.tribe_update_page a.rsswidget{font-size:14px;font-weight:400;line-height:1}.tribe_update_page .rss-widget li:before{display:none}.tribe-update-bar{display:inline-block}.tribe-update-bar .progress{border:1px solid #ccc;float:left;margin-right:1rem;padding:1px;width:18rem}.tribe-update-bar .progress .bar{background:#ffba00;height:1rem;width:1%;background:#7ad03a}#tribe-dialog-wrapper>div{padding:1rem}#tribe-dialog-wrapper>div .stage{display:none}#tribe-dialog-wrapper #heading{background:#fff}#tribe-dialog-wrapper label{display:block}#tribe-dialog-wrapper .select-single-container{border:1px solid #888;overflow-y:scroll;height:300px}#tribe-dialog-wrapper .select-single-container label{opacity:1;padding:3px 5px;transition:opacity .2s}#tribe-dialog-wrapper .select-single-container label:nth-child(odd){background:#fff}#tribe-dialog-wrapper .select-single-container label.selected{background:#0073aa;color:#fff;font-weight:700}#tribe-dialog-wrapper .select-single-container label input{display:none}#tribe-dialog-wrapper .select-single-container.updating label{opacity:.35;transition:opacity .2s}.ui-front{z-index:1000000}.select2-container .select2-choice abbr{top:6px}.wp-list-table.plugins .column-description .update-message{color:#d54e21}.api-check{padding:1em;min-height:100px}.api-check+.notice-dismiss:hover:before{color:#fff}.api-check:after,.api-check:before{content:"";display:table}.api-check:after{clear:both}.api-check .tribe-mascot{bottom:0;display:none;padding:0 1rem 0 0;position:absolute;right:0;top:0}.api-check .tribe-mascot img{display:inline-block;max-height:150px;max-width:150px;height:100%;width:auto;vertical-align:middle}.api-check p{line-height:1.7;margin-bottom:1em}.api-check a{text-decoration:none}.api-check a:hover{text-decoration:underline}.api-check .plugin-list{display:inline;font-weight:600;margin:0;padding:0}.api-check .plugin-list span.plugin-invalid:after{content:", "}.api-check .plugin-list span.plugin-invalid:last-of-type:after{content:""}.tribe-marketing-notice{padding:1em}.tribe-marketing-notice+.notice-dismiss:hover:before{color:#fff}.tribe-marketing-notice:after,.tribe-marketing-notice:before{content:"";display:table}.tribe-marketing-notice:after{clear:both}.tribe-marketing-notice .tribe-notice-icon{bottom:0;display:none;padding:1rem;position:absolute;left:0;top:0;width:125px}.tribe-marketing-notice .tribe-notice-icon:before{content:"";display:inline-block;height:100%;width:1%;vertical-align:middle}.tribe-marketing-notice .tribe-notice-icon img{display:inline-block;max-height:100%;max-width:96%;vertical-align:middle}.tribe-marketing-notice h3{margin-bottom:.5em;margin-top:.5em}.tribe-marketing-notice p{line-height:1.7;margin-bottom:.5em}.tribe-marketing-notice a{text-decoration:none}.tribe-marketing-notice a:hover{text-decoration:underline}.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:10px 10px 0 0}.tribe-dropdown,.tribe-ea-dropdown{max-width:100%;width:auto}.tribe-dropdown.select2-container-active .select2-choice,.tribe-ea-dropdown.select2-container-active .select2-choice{border-color:#5897fb;box-shadow:0 0 5px rgba(0,0,0,.1)}.tribe-dropdown.select2-dropdown-open .select2-choice,.tribe-ea-dropdown.select2-dropdown-open .select2-choice{border-bottom-left-radius:0;border-bottom-right-radius:0;border-color:#aaa}.tribe-dropdown .select2-choice,.tribe-ea-dropdown .select2-choice{background-image:none;border-radius:3px;border:1px solid #ccc}.tribe-dropdown .select2-choice>.select2-chosen,.tribe-ea-dropdown .select2-choice>.select2-chosen{white-space:normal}.tribe-dropdown .select2-choice .select2-arrow,.tribe-ea-dropdown .select2-choice .select2-arrow{background-image:none;background:transparent;border-left:0}.tribe-dropdown .select2-choice div,.tribe-ea-dropdown .select2-choice div{background-image:none;background:none;border-left:0}.tribe-dropdown.select2-container-multi .select2-choices,.tribe-ea-dropdown.select2-container-multi .select2-choices{background-image:none;border-radius:3px;border:1px solid #ccc;min-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field{line-height:25px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-field input,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-field input{padding-top:0;padding-bottom:0}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice{margin-top:2px;padding-top:0;padding-bottom:0;line-height:19px}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice div,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice div{line-height:inherit}.tribe-dropdown.select2-container-multi .select2-choices .select2-search-choice-close,.tribe-ea-dropdown.select2-container-multi .select2-choices .select2-search-choice-close{top:3px;left:4px;transition-property:border,color}.select2-results .select2-selected{display:block}.select2-results .select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children>.select2-result-label{font-weight:400}.select2-results li.select2-result-with-children.select2-selected,.select2-results li.select2-result-with-children.select2-selected .select2-result{display:block}.select2-results li.select2-result-with-children.select2-selected>.select2-result-label{background-color:#efefef;color:#a1a1a1;cursor:default}.select2-results li.select2-result-with-children.select2-result-unselectable>.select2-result-label{color:#939393;font-weight:400}.wp-core-ui .button-red{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.5);background-color:#a00;border-bottom-color:#8d1f21;border-color:#9b2124;box-shadow:inset 0 1px 0 rgba(120,200,230,.5);color:#fff;text-decoration:none;text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red.hover,.wp-core-ui .button-red:focus,.wp-core-ui .button-red:hover{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6);background-color:#a00;border-color:#7f1c1f;box-shadow:inset 0 1px 0 rgba(120,200,230,.6);color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,.3)}.wp-core-ui .button-red.focus,.wp-core-ui .button-red:focus{-webkit-box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4);border-color:#500f0e;box-shadow:inset 0 1px 0 rgba(120,200,230,.6),1px 1px 2px rgba(0,0,0,.4)}.wp-core-ui .button-red.active,.wp-core-ui .button-red.active:focus,.wp-core-ui .button-red.active:hover,.wp-core-ui .button-red:active{-webkit-box-shadow:inset 0 1px 0 rgba(0,0,0,.1);background:#7f1c1f;border-color:#601312 #ae2426 #ae2426;box-shadow:inset 0 1px 0 rgba(0,0,0,.1);color:hsla(0,0%,100%,.95);text-shadow:0 1px 0 rgba(0,0,0,.1)}.wp-core-ui .button-red-disabled,.wp-core-ui .button-red:disabled,.wp-core-ui .button-red[disabled]{color:#e79496!important;background:#ba292b!important;border-color:#7f1c1f!important;box-shadow:none!important;text-shadow:0 -1px 0 rgba(0,0,0,.1)!important;cursor:default}.ticket_form .select2-container .select2-choice .select2-arrow{display:none}.clear{zoom:1}.clear:after,.clear:before{content:" ";display:table}.clear:after{clear:both}.checkmark:after{content:"";display:block;width:8px;height:15px;border:solid #0ab152;border-width:0 3px 3px 0;transform:rotate(45deg)}.checkmark.checkmark-right:after{float:right;margin-right:2em}.checkmark.checkmark-left:after{float:left;margin-left:2em}.checkmark.no-checkmark:after{display:none}.complete,.ok,.on,.yes,[data-status=complete],[data-status=ok],[data-status=on],[data-status=yes]{color:#0ab152}.incomplete,.ko,.no,.off,[data-status=incomplete],[data-status=ko],[data-status=no],[data-status=off]{color:#ff2500}.plugin-card-event-tickets-plus .column-downloaded,.plugin-card-event-tickets-plus .column-rating,.plugin-card-event-tickets-plus .column-updated,.plugin-card-event-tickets .column-downloaded,.plugin-card-event-tickets .column-rating,.plugin-card-event-tickets .column-updated,.plugin-card-events-calendar-pro .column-downloaded,.plugin-card-events-calendar-pro .column-rating,.plugin-card-events-calendar-pro .column-updated,.plugin-card-events-community-tickets .column-downloaded,.plugin-card-events-community-tickets .column-rating,.plugin-card-events-community-tickets .column-updated,.plugin-card-events-community .column-downloaded,.plugin-card-events-community .column-rating,.plugin-card-events-community .column-updated,.plugin-card-image-widget-plus .column-downloaded,.plugin-card-image-widget-plus .column-rating,.plugin-card-image-widget-plus .column-updated,.plugin-card-image-widget .column-downloaded,.plugin-card-image-widget .column-rating,.plugin-card-image-widget .column-updated,.plugin-card-the-events-calendar .column-downloaded,.plugin-card-the-events-calendar .column-rating,.plugin-card-the-events-calendar .column-updated,.plugin-card-tribe-eventbrite .column-downloaded,.plugin-card-tribe-eventbrite .column-rating,.plugin-card-tribe-eventbrite .column-updated,.plugin-card-tribe-filterbar .column-downloaded,.plugin-card-tribe-filterbar .column-rating,.plugin-card-tribe-filterbar .column-updated{display:none}@media only screen and (-o-min-device-pixel-ratio:2/1),only screen and (-webkit-min-device-pixel-ratio:2),only screen and (min--moz-device-pixel-ratio:2),only screen and (min-device-pixel-ratio:2){#tribe-loading span{background-image:url(../images/tribe-loading@2x.gif)}}@media screen and (max-width:782px){.tribe-half-column,.tribe-row .tribe-half-column:last-child{margin:0 0 20px;width:100%}input[type=email]{width:100%}}@media screen and (max-width:782px){.events-cal .subsubsub{float:none}.events-cal .search-box{width:98%}.events-cal #search-submit{width:100%}.events-cal .tablenav.top{display:none}}@media screen and (min-width:500px){.api-check .tribe-mascot{display:block}.api-check .notice-content{margin-right:180px}}@media screen and (min-width:600px) and (max-width:782px){.tribe-marketing-notice .tribe-notice-icon{width:135px}.tribe-marketing-notice .tribe-notice-content{margin-left:145px}}@media screen and (min-width:600px){.tribe-marketing-notice .tribe-notice-icon{display:block}}@media screen and (min-width:782px){.tribe-marketing-notice .tribe-notice-content{margin-left:130px}}@media screen and (max-width:956px){.tribe-marketing-notice.tribe-bf-2018-tec .button.button-primary{margin:0 0 10px}.tribe-marketing-notice.tribe-bf-2018-tec em{clear:both;display:block}}
|
common/src/resources/images/mascot.png
CHANGED
|
Binary file
|
common/src/resources/js/tooltip.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
tribe.tooltip = tribe.tooltip || {};
|
| 2 |
|
| 3 |
( function ( $, obj ) {
|
|
@@ -14,7 +15,7 @@ tribe.tooltip = tribe.tooltip || {};
|
|
| 14 |
*/
|
| 15 |
obj.selectors = {
|
| 16 |
tooltip: '.tribe-tooltip',
|
| 17 |
-
active: '
|
| 18 |
};
|
| 19 |
|
| 20 |
/**
|
|
@@ -38,17 +39,17 @@ tribe.tooltip = tribe.tooltip || {};
|
|
| 38 |
*/
|
| 39 |
obj.onClick = function () {
|
| 40 |
var $tooltip = $( this ).closest( obj.selectors.tooltip );
|
| 41 |
-
var add = ! $tooltip.hasClass( obj.selectors.active
|
| 42 |
|
| 43 |
$( obj.selectors.tooltip ).each( function () {
|
| 44 |
-
$( this ).removeClass( obj.selectors.active
|
| 45 |
} );
|
| 46 |
|
| 47 |
if ( add ) {
|
| 48 |
-
$( $tooltip ).addClass( obj.selectors.active
|
| 49 |
}
|
| 50 |
};
|
| 51 |
|
| 52 |
$document.ready( obj.setup );
|
| 53 |
|
| 54 |
-
} )( jQuery, tribe.tooltip );
|
| 1 |
+
var tribe = tribe || {};
|
| 2 |
tribe.tooltip = tribe.tooltip || {};
|
| 3 |
|
| 4 |
( function ( $, obj ) {
|
| 15 |
*/
|
| 16 |
obj.selectors = {
|
| 17 |
tooltip: '.tribe-tooltip',
|
| 18 |
+
active: 'active',
|
| 19 |
};
|
| 20 |
|
| 21 |
/**
|
| 39 |
*/
|
| 40 |
obj.onClick = function () {
|
| 41 |
var $tooltip = $( this ).closest( obj.selectors.tooltip );
|
| 42 |
+
var add = ! $tooltip.hasClass( obj.selectors.active );
|
| 43 |
|
| 44 |
$( obj.selectors.tooltip ).each( function () {
|
| 45 |
+
$( this ).removeClass( obj.selectors.active ).attr( 'aria-expanded', false );
|
| 46 |
} );
|
| 47 |
|
| 48 |
if ( add ) {
|
| 49 |
+
$( $tooltip ).addClass( obj.selectors.active ).attr( 'aria-expanded', true );
|
| 50 |
}
|
| 51 |
};
|
| 52 |
|
| 53 |
$document.ready( obj.setup );
|
| 54 |
|
| 55 |
+
} )( jQuery, tribe.tooltip );
|
common/src/resources/js/tooltip.min.js
CHANGED
|
@@ -1 +1 @@
|
|
| 1 |
-
tribe.tooltip=tribe.tooltip||{},function(t,e){"use strict";var
|
| 1 |
+
var tribe=tribe||{};tribe.tooltip=tribe.tooltip||{},function(t,e){"use strict";var o=t(document);e.selectors={tooltip:".tribe-tooltip",active:"active"},e.setup=function(){o.on("click",e.selectors.tooltip,e.onClick)},e.onClick=function(){var o=t(this).closest(e.selectors.tooltip),i=!o.hasClass(e.selectors.active);t(e.selectors.tooltip).each(function(){t(this).removeClass(e.selectors.active).attr("aria-expanded",!1)}),i&&t(o).addClass(e.selectors.active).attr("aria-expanded",!0)},o.ready(e.setup)}(jQuery,tribe.tooltip);
|
common/src/resources/postcss/tribe-common-admin.pcss
CHANGED
|
@@ -14,8 +14,8 @@
|
|
| 14 |
cursor: text;
|
| 15 |
padding: 4px 4px 4px 4px;
|
| 16 |
}
|
| 17 |
-
input
|
| 18 |
-
textarea
|
| 19 |
color: #999;
|
| 20 |
}
|
| 21 |
input::-webkit-input-placeholder,
|
|
@@ -28,7 +28,7 @@ textarea::-webkit-input-placeholder {
|
|
| 28 |
border-color: #dfdfdf;
|
| 29 |
-webkit-border-radius: 3px;
|
| 30 |
-moz-border-radius: 3px;
|
| 31 |
-
|
| 32 |
border-spacing: 0;
|
| 33 |
border-style: solid;
|
| 34 |
border-style: solid;
|
|
@@ -48,7 +48,7 @@ td.tribe_message {
|
|
| 48 |
width: 200px;
|
| 49 |
}
|
| 50 |
.tribe_brand {
|
| 51 |
-
font-family: Georgia !important;
|
| 52 |
font-size: 17px !important;
|
| 53 |
font-weight: normal;
|
| 54 |
margin: 8px 0;
|
|
@@ -61,7 +61,7 @@ td.tribe_message {
|
|
| 61 |
border: 1px solid #ccc;
|
| 62 |
-webkit-border-radius: 5px;
|
| 63 |
-moz-border-radius: 5px;
|
| 64 |
-
|
| 65 |
margin: 20px 0 30px;
|
| 66 |
padding: 0 20px 20px;
|
| 67 |
}
|
|
@@ -70,7 +70,7 @@ td.tribe_message {
|
|
| 70 |
border-color: #e6db55;
|
| 71 |
-webkit-border-radius: 3px;
|
| 72 |
-moz-border-radius: 3px;
|
| 73 |
-
|
| 74 |
border-style: solid;
|
| 75 |
border-width: 1px;
|
| 76 |
padding: 6px 12px;
|
|
@@ -78,122 +78,153 @@ td.tribe_message {
|
|
| 78 |
|
| 79 |
/* = Plugin Screen
|
| 80 |
=============================================*/
|
| 81 |
-
table.plugins
|
| 82 |
-
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 90 |
-
|
| 91 |
-
|
| 92 |
-
|
| 93 |
-
}
|
| 94 |
-
|
| 95 |
-
table.plugins .tribe-plugin-update-message h4:after {
|
| 96 |
-
content: ' \00BB ';
|
| 97 |
-
}
|
| 98 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 99 |
|
| 100 |
-
|
| 101 |
-
|
| 102 |
-
|
|
|
|
|
|
|
| 103 |
}
|
| 104 |
|
| 105 |
/* = Settings Screen
|
| 106 |
=============================================*/
|
| 107 |
.tribe-settings-form {
|
| 108 |
max-width: 1000px;
|
| 109 |
-
}
|
| 110 |
-
.tribe-settings-form fieldset {
|
| 111 |
-
clear: both;
|
| 112 |
-
display: inline-block;
|
| 113 |
-
padding: 10px 0;
|
| 114 |
-
}
|
| 115 |
-
.tribe-settings-form legend {
|
| 116 |
-
float: left;
|
| 117 |
-
font-weight: bold;
|
| 118 |
-
margin-right: 20px;
|
| 119 |
-
width: 220px;
|
| 120 |
-
}
|
| 121 |
-
.tribe-settings-form fieldset.tribe-field-license_key legend {
|
| 122 |
-
width: auto;
|
| 123 |
-
}
|
| 124 |
-
.tribe-settings-form .tribe-field-wrap {
|
| 125 |
-
float: left;
|
| 126 |
-
max-width: 500px;
|
| 127 |
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
}
|
| 131 |
}
|
| 132 |
-
|
| 133 |
-
.
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
|
| 142 |
-
.tribe-
|
| 143 |
-
|
| 144 |
-
|
| 145 |
-
|
| 146 |
-
|
| 147 |
-
|
| 148 |
-
|
| 149 |
-
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
|
| 153 |
-
|
| 154 |
-
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
|
| 158 |
-
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
}
|
| 164 |
-
.tribe_settings .tribe-field-indent {
|
| 165 |
-
margin-left: 245px;
|
| 166 |
-
}
|
| 167 |
-
.tribe_settings #pu_dashboard_message {
|
| 168 |
-
display: none;
|
| 169 |
-
}
|
| 170 |
-
.tribe_settings .tribe-errors-list {
|
| 171 |
-
margin-left: 15px;
|
| 172 |
-
}
|
| 173 |
-
.tribe_settings .expiring-license {
|
| 174 |
-
color: red;
|
| 175 |
-
}
|
| 176 |
-
.tribe_settings .tribe-error {
|
| 177 |
-
border: 1px solid #f00;
|
| 178 |
-
}
|
| 179 |
-
.tribe_settings .tribe-field-description {
|
| 180 |
-
margin-bottom: 0;
|
| 181 |
-
position: relative;
|
| 182 |
-
top: -12px;
|
| 183 |
-
}
|
| 184 |
-
.tribe_settings #ical-link {
|
| 185 |
-
top: -14px;
|
| 186 |
-
}
|
| 187 |
-
.tribe-settings-form #tribe-field-stylesheetOption label {
|
| 188 |
-
margin-left: 20px;
|
| 189 |
-
}
|
| 190 |
-
.tribe-settings-form #tribe-field-stylesheetOption input {
|
| 191 |
-
margin-left: -20px;
|
| 192 |
-
margin-right: 8px;
|
| 193 |
-
}
|
| 194 |
-
.tribe-settings-form #tribe-field-stylesheetOption p.description {
|
| 195 |
-
color: #999;
|
| 196 |
}
|
|
|
|
| 197 |
/* Modern Tribe box */
|
| 198 |
#modern-tribe-info {
|
| 199 |
-khtml-border-radius: 4px;
|
|
@@ -201,20 +232,23 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 201 |
border: 1px solid #ccc;
|
| 202 |
-webkit-border-radius: 4px;
|
| 203 |
-moz-border-radius: 4px;
|
| 204 |
-
|
| 205 |
-
|
| 206 |
margin: 20px 0;
|
| 207 |
padding: 8px 20px 12px;
|
| 208 |
}
|
|
|
|
| 209 |
#modern-tribe-info img {
|
| 210 |
height: 18px;
|
| 211 |
margin: 10px 0;
|
| 212 |
width: 250px;
|
| 213 |
}
|
|
|
|
| 214 |
#modern-tribe-info ul {
|
| 215 |
list-style: disc;
|
| 216 |
margin-left: 20px;
|
| 217 |
}
|
|
|
|
| 218 |
#modern-tribe-info ul ul {
|
| 219 |
list-style: circle;
|
| 220 |
}
|
|
@@ -354,8 +388,8 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 354 |
border: 1px solid #ccc;
|
| 355 |
-webkit-border-radius: 4px;
|
| 356 |
-moz-border-radius: 4px;
|
| 357 |
-
|
| 358 |
-
|
| 359 |
float: left;
|
| 360 |
margin: 20px 0;
|
| 361 |
padding: 0 20px 15px;
|
|
@@ -367,8 +401,8 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 367 |
border: 1px solid #ccc;
|
| 368 |
-webkit-border-radius: 4px;
|
| 369 |
-moz-border-radius: 4px;
|
| 370 |
-
|
| 371 |
-
|
| 372 |
float: right;
|
| 373 |
margin: 20px 0;
|
| 374 |
padding: 0 20px 15px;
|
|
@@ -381,7 +415,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 381 |
.tribe-arrangeable-item {
|
| 382 |
border: 1px solid lightGrey;
|
| 383 |
-moz-border-radius: 3px;
|
| 384 |
-
|
| 385 |
}
|
| 386 |
.tribe-arrangeable-item .ui-state-default {
|
| 387 |
border: none;
|
|
@@ -411,9 +445,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 411 |
.tribe_events_active_filter_type_options label {
|
| 412 |
margin: 7px 0;
|
| 413 |
}
|
| 414 |
-
|
| 415 |
-
margin-bottom: 18px;
|
| 416 |
-
}
|
| 417 |
.OrganizerInfo td small,
|
| 418 |
#event_organizer td small {
|
| 419 |
display: block;
|
|
@@ -483,8 +515,8 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 483 |
border: 1px solid #ccc;
|
| 484 |
-webkit-border-radius: 4px;
|
| 485 |
-moz-border-radius: 4px;
|
| 486 |
-
|
| 487 |
-
|
| 488 |
padding: 8px 20px 12px;
|
| 489 |
}
|
| 490 |
|
|
@@ -553,11 +585,11 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 553 |
|
| 554 |
.system-info-copy {
|
| 555 |
.system-info-copy-btn {
|
| 556 |
-
|
| 557 |
|
| 558 |
-
|
| 559 |
-
|
| 560 |
-
|
| 561 |
}
|
| 562 |
}
|
| 563 |
|
|
@@ -805,7 +837,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 805 |
-moz-transition: all 1s linear;
|
| 806 |
-ms-transition: all 1s linear;
|
| 807 |
-o-transition: all 1s linear;
|
| 808 |
-
|
| 809 |
webkit-transition: all 1s linear;
|
| 810 |
width: 100%;
|
| 811 |
z-index: 4;
|
|
@@ -814,7 +846,7 @@ table.plugins .tribe-plugin-update-message a {
|
|
| 814 |
#tribe-loading span {
|
| 815 |
background: url(../images/tribe-loading.gif) 0 0 no-repeat;
|
| 816 |
-webkit-background-size: 32px 32px;
|
| 817 |
-
|
| 818 |
height: 32px;
|
| 819 |
left: 50%;
|
| 820 |
margin: -16px 0 0 -16px;
|
| 14 |
cursor: text;
|
| 15 |
padding: 4px 4px 4px 4px;
|
| 16 |
}
|
| 17 |
+
input::placeholder,
|
| 18 |
+
textarea::placeholder {
|
| 19 |
color: #999;
|
| 20 |
}
|
| 21 |
input::-webkit-input-placeholder,
|
| 28 |
border-color: #dfdfdf;
|
| 29 |
-webkit-border-radius: 3px;
|
| 30 |
-moz-border-radius: 3px;
|
| 31 |
+
border-radius: 3px;
|
| 32 |
border-spacing: 0;
|
| 33 |
border-style: solid;
|
| 34 |
border-style: solid;
|
| 48 |
width: 200px;
|
| 49 |
}
|
| 50 |
.tribe_brand {
|
| 51 |
+
font-family: Georgia, serif !important;
|
| 52 |
font-size: 17px !important;
|
| 53 |
font-weight: normal;
|
| 54 |
margin: 8px 0;
|
| 61 |
border: 1px solid #ccc;
|
| 62 |
-webkit-border-radius: 5px;
|
| 63 |
-moz-border-radius: 5px;
|
| 64 |
+
border-radius: 5px;
|
| 65 |
margin: 20px 0 30px;
|
| 66 |
padding: 0 20px 20px;
|
| 67 |
}
|
| 70 |
border-color: #e6db55;
|
| 71 |
-webkit-border-radius: 3px;
|
| 72 |
-moz-border-radius: 3px;
|
| 73 |
+
border-radius: 3px;
|
| 74 |
border-style: solid;
|
| 75 |
border-width: 1px;
|
| 76 |
padding: 6px 12px;
|
| 78 |
|
| 79 |
/* = Plugin Screen
|
| 80 |
=============================================*/
|
| 81 |
+
table.plugins {
|
| 82 |
+
.tribe-plugin-update-message {
|
| 83 |
+
background: #D54E21; /* taken from colour scheme in list-tables.css */
|
| 84 |
+
color: white;
|
| 85 |
+
display: inline-table;
|
| 86 |
+
margin: 6px 0;
|
| 87 |
+
padding: 10px 12px;
|
| 88 |
+
|
| 89 |
+
h4 {
|
| 90 |
+
display: inline;
|
| 91 |
+
font-weight: bold;
|
| 92 |
+
margin-right: 8px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 93 |
|
| 94 |
+
&:after {
|
| 95 |
+
content: ' \00BB ';
|
| 96 |
+
}
|
| 97 |
+
}
|
| 98 |
|
| 99 |
+
a {
|
| 100 |
+
color: white;
|
| 101 |
+
text-decoration: underline;
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
}
|
| 105 |
|
| 106 |
/* = Settings Screen
|
| 107 |
=============================================*/
|
| 108 |
.tribe-settings-form {
|
| 109 |
max-width: 1000px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
|
| 111 |
+
fieldset {
|
| 112 |
+
clear: both;
|
| 113 |
+
display: inline-block;
|
| 114 |
+
padding: 10px 0;
|
| 115 |
+
|
| 116 |
+
&.tribe-field-license_key legend {
|
| 117 |
+
width: auto;
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
legend {
|
| 122 |
+
float: left;
|
| 123 |
+
font-weight: bold;
|
| 124 |
+
margin-right: 20px;
|
| 125 |
+
width: 220px;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
.tribe-field-wrap {
|
| 129 |
+
float: left;
|
| 130 |
+
max-width: 500px;
|
| 131 |
+
|
| 132 |
+
*:first-child {
|
| 133 |
+
margin-top: 0;
|
| 134 |
+
}
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
.tribe-field-radio,
|
| 138 |
+
.tribe-field-checkbox_list {
|
| 139 |
+
label {
|
| 140 |
+
display: block;
|
| 141 |
+
margin: 5px 0 5px 20px;
|
| 142 |
+
text-indent: -20px;
|
| 143 |
+
|
| 144 |
+
> p {
|
| 145 |
+
text-indent: 0;
|
| 146 |
+
margin-left: 1px;
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
input {
|
| 150 |
+
margin-right: 5px;
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
.tribe-settings-form-wrap fieldset,
|
| 156 |
+
.tribe-settings-form-wrap .description,
|
| 157 |
+
fieldset[id^='tribe-field-geoloc_'] {
|
| 158 |
+
padding-left: 12px;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
.tribe-settings-form-wrap {
|
| 162 |
+
fieldset {
|
| 163 |
+
.description {
|
| 164 |
+
margin-left: 0;
|
| 165 |
+
max-width: 450px;
|
| 166 |
+
padding-left: 0;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
.tribe-style-selection {
|
| 170 |
+
margin-bottom: 18px;
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
h3 {
|
| 175 |
+
background-color: #f9f9f9;
|
| 176 |
+
margin-bottom: 10px;
|
| 177 |
+
padding: 6px 0 6px 12px;
|
| 178 |
+
}
|
| 179 |
+
|
| 180 |
+
.tribe-sysinfo-optin-msg,
|
| 181 |
+
.system-info,
|
| 182 |
+
h3 + p,
|
| 183 |
+
.contained {
|
| 184 |
+
margin: 0 0 10px;
|
| 185 |
+
padding-left: 12px;
|
| 186 |
+
}
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
#tribe-field-stylesheetOption {
|
| 190 |
+
p.description {
|
| 191 |
+
color: #999;
|
| 192 |
+
}
|
| 193 |
}
|
| 194 |
}
|
| 195 |
+
|
| 196 |
+
.tribe_settings {
|
| 197 |
+
.tribe-field-indent {
|
| 198 |
+
margin-left: 245px;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
#pu_dashboard_message {
|
| 202 |
+
display: none;
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
.tribe-errors-list {
|
| 206 |
+
margin-left: 15px;
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
.expiring-license {
|
| 210 |
+
color: red;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
.tribe-error {
|
| 214 |
+
border: 1px solid #f00;
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
.tribe-field-description {
|
| 218 |
+
margin-bottom: 0;
|
| 219 |
+
position: relative;
|
| 220 |
+
top: -12px;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
#ical-link {
|
| 224 |
+
top: -14px;
|
| 225 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 226 |
}
|
| 227 |
+
|
| 228 |
/* Modern Tribe box */
|
| 229 |
#modern-tribe-info {
|
| 230 |
-khtml-border-radius: 4px;
|
| 232 |
border: 1px solid #ccc;
|
| 233 |
-webkit-border-radius: 4px;
|
| 234 |
-moz-border-radius: 4px;
|
| 235 |
+
-o-border-radius: 4px;
|
| 236 |
+
border-radius: 4px;
|
| 237 |
margin: 20px 0;
|
| 238 |
padding: 8px 20px 12px;
|
| 239 |
}
|
| 240 |
+
|
| 241 |
#modern-tribe-info img {
|
| 242 |
height: 18px;
|
| 243 |
margin: 10px 0;
|
| 244 |
width: 250px;
|
| 245 |
}
|
| 246 |
+
|
| 247 |
#modern-tribe-info ul {
|
| 248 |
list-style: disc;
|
| 249 |
margin-left: 20px;
|
| 250 |
}
|
| 251 |
+
|
| 252 |
#modern-tribe-info ul ul {
|
| 253 |
list-style: circle;
|
| 254 |
}
|
| 388 |
border: 1px solid #ccc;
|
| 389 |
-webkit-border-radius: 4px;
|
| 390 |
-moz-border-radius: 4px;
|
| 391 |
+
-o-border-radius: 4px;
|
| 392 |
+
border-radius: 4px;
|
| 393 |
float: left;
|
| 394 |
margin: 20px 0;
|
| 395 |
padding: 0 20px 15px;
|
| 401 |
border: 1px solid #ccc;
|
| 402 |
-webkit-border-radius: 4px;
|
| 403 |
-moz-border-radius: 4px;
|
| 404 |
+
-o-border-radius: 4px;
|
| 405 |
+
border-radius: 4px;
|
| 406 |
float: right;
|
| 407 |
margin: 20px 0;
|
| 408 |
padding: 0 20px 15px;
|
| 415 |
.tribe-arrangeable-item {
|
| 416 |
border: 1px solid lightGrey;
|
| 417 |
-moz-border-radius: 3px;
|
| 418 |
+
border-radius: 3px;
|
| 419 |
}
|
| 420 |
.tribe-arrangeable-item .ui-state-default {
|
| 421 |
border: none;
|
| 445 |
.tribe_events_active_filter_type_options label {
|
| 446 |
margin: 7px 0;
|
| 447 |
}
|
| 448 |
+
|
|
|
|
|
|
|
| 449 |
.OrganizerInfo td small,
|
| 450 |
#event_organizer td small {
|
| 451 |
display: block;
|
| 515 |
border: 1px solid #ccc;
|
| 516 |
-webkit-border-radius: 4px;
|
| 517 |
-moz-border-radius: 4px;
|
| 518 |
+
-o-border-radius: 4px;
|
| 519 |
+
border-radius: 4px;
|
| 520 |
padding: 8px 20px 12px;
|
| 521 |
}
|
| 522 |
|
| 585 |
|
| 586 |
.system-info-copy {
|
| 587 |
.system-info-copy-btn {
|
| 588 |
+
padding: 6px;
|
| 589 |
|
| 590 |
+
.dashicons {
|
| 591 |
+
padding-right: 10px;
|
| 592 |
+
}
|
| 593 |
}
|
| 594 |
}
|
| 595 |
|
| 837 |
-moz-transition: all 1s linear;
|
| 838 |
-ms-transition: all 1s linear;
|
| 839 |
-o-transition: all 1s linear;
|
| 840 |
+
transition: all 1s linear;
|
| 841 |
webkit-transition: all 1s linear;
|
| 842 |
width: 100%;
|
| 843 |
z-index: 4;
|
| 846 |
#tribe-loading span {
|
| 847 |
background: url(../images/tribe-loading.gif) 0 0 no-repeat;
|
| 848 |
-webkit-background-size: 32px 32px;
|
| 849 |
+
background-size: 32px 32px;
|
| 850 |
height: 32px;
|
| 851 |
left: 50%;
|
| 852 |
margin: -16px 0 0 -16px;
|
common/src/resources/postcss/utilities/variables/_box-shadows.pcss
CHANGED
|
@@ -5,5 +5,6 @@
|
|
| 5 |
|
| 6 |
--box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
|
| 7 |
--box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
|
|
|
|
| 8 |
}
|
| 9 |
|
| 5 |
|
| 6 |
--box-shadow-default: 0 2px 5px 0 var(--color-box-shadow);
|
| 7 |
--box-shadow-tooltip: 0 2px 12px 0 var(--color-box-shadow);
|
| 8 |
+
--box-shadow-card: 0 1px 6px 2px var(--color-box-shadow);
|
| 9 |
}
|
| 10 |
|
common/src/resources/postcss/utilities/variables/_colors.pcss
CHANGED
|
@@ -40,6 +40,7 @@
|
|
| 40 |
|
| 41 |
--color-border-default: #D5D5D5;
|
| 42 |
--color-border-secondary: #E4E4E4;
|
|
|
|
| 43 |
--color-border-active: #141827;
|
| 44 |
--color-background: #FFFFFF;
|
| 45 |
--color-background-transparent: rgba(var(--color-background), 0.6);
|
| 40 |
|
| 41 |
--color-border-default: #D5D5D5;
|
| 42 |
--color-border-secondary: #E4E4E4;
|
| 43 |
+
--color-border-hover: #727272;
|
| 44 |
--color-border-active: #141827;
|
| 45 |
--color-background: #FFFFFF;
|
| 46 |
--color-background-transparent: rgba(var(--color-background), 0.6);
|
common/src/resources/postcss/utilities/variables/_grids.pcss
CHANGED
|
@@ -30,7 +30,7 @@
|
|
| 30 |
/* -----------------------------------------------------------------------------
|
| 31 |
* Grid Width - Relative
|
| 32 |
* ----------------------------------------------------------------------------- */
|
| 33 |
-
|
| 34 |
--grid-width-1-of-2: 50%;
|
| 35 |
--grid-width-1-of-3: 33.333%;
|
| 36 |
--grid-width-1-of-4: 25%;
|
| 30 |
/* -----------------------------------------------------------------------------
|
| 31 |
* Grid Width - Relative
|
| 32 |
* ----------------------------------------------------------------------------- */
|
| 33 |
+
|
| 34 |
--grid-width-1-of-2: 50%;
|
| 35 |
--grid-width-1-of-3: 33.333%;
|
| 36 |
--grid-width-1-of-4: 25%;
|
common/src/resources/postcss/utilities/variables/_z-index.pcss
CHANGED
|
@@ -5,8 +5,11 @@
|
|
| 5 |
|
| 6 |
--z-index-spinner-container: 100;
|
| 7 |
--z-index-views-selector: 30;
|
|
|
|
| 8 |
--z-index-events-bar-button: 20;
|
| 9 |
--z-index-search: 10;
|
|
|
|
| 10 |
--z-index-week-event-hover: 5;
|
| 11 |
--z-index-map-event-hover: 5;
|
|
|
|
| 12 |
}
|
| 5 |
|
| 6 |
--z-index-spinner-container: 100;
|
| 7 |
--z-index-views-selector: 30;
|
| 8 |
+
--z-index-dropdown: 30;
|
| 9 |
--z-index-events-bar-button: 20;
|
| 10 |
--z-index-search: 10;
|
| 11 |
+
--z-index-scroller: 7;
|
| 12 |
--z-index-week-event-hover: 5;
|
| 13 |
--z-index-map-event-hover: 5;
|
| 14 |
+
--z-index-multiday-event: 5;
|
| 15 |
}
|
common/vendor/autoload.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once __DIR__ . '/composer/autoload_real.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea::getLoader();
|
common/vendor/autoload_52.php
CHANGED
|
@@ -4,4 +4,4 @@
|
|
| 4 |
|
| 5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
| 6 |
|
| 7 |
-
return
|
| 4 |
|
| 5 |
require_once dirname(__FILE__) . '/composer'.'/autoload_real_52.php';
|
| 6 |
|
| 7 |
+
return ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70::getLoader();
|
common/vendor/composer/autoload_classmap.php
CHANGED
|
@@ -10,6 +10,114 @@ return array(
|
|
| 10 |
'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
|
| 11 |
'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
|
| 12 |
'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 13 |
'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
|
| 14 |
'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
|
| 15 |
'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
|
|
@@ -17,6 +125,8 @@ return array(
|
|
| 17 |
'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
|
| 18 |
'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
|
| 19 |
'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
|
|
|
|
|
|
|
| 20 |
'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
|
| 21 |
'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
|
| 22 |
'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
|
| 10 |
'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
|
| 11 |
'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
|
| 12 |
'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
|
| 13 |
+
'Monolog\\ErrorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/ErrorHandler.php',
|
| 14 |
+
'Monolog\\Formatter\\ChromePHPFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php',
|
| 15 |
+
'Monolog\\Formatter\\ElasticaFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php',
|
| 16 |
+
'Monolog\\Formatter\\FlowdockFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php',
|
| 17 |
+
'Monolog\\Formatter\\FluentdFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php',
|
| 18 |
+
'Monolog\\Formatter\\FormatterInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php',
|
| 19 |
+
'Monolog\\Formatter\\GelfMessageFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php',
|
| 20 |
+
'Monolog\\Formatter\\HtmlFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php',
|
| 21 |
+
'Monolog\\Formatter\\JsonFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php',
|
| 22 |
+
'Monolog\\Formatter\\LineFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php',
|
| 23 |
+
'Monolog\\Formatter\\LogglyFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php',
|
| 24 |
+
'Monolog\\Formatter\\LogstashFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php',
|
| 25 |
+
'Monolog\\Formatter\\MongoDBFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php',
|
| 26 |
+
'Monolog\\Formatter\\NormalizerFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php',
|
| 27 |
+
'Monolog\\Formatter\\ScalarFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php',
|
| 28 |
+
'Monolog\\Formatter\\WildfireFormatter' => $vendorDir . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php',
|
| 29 |
+
'Monolog\\Handler\\AbstractHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php',
|
| 30 |
+
'Monolog\\Handler\\AbstractProcessingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php',
|
| 31 |
+
'Monolog\\Handler\\AbstractSyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php',
|
| 32 |
+
'Monolog\\Handler\\AmqpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php',
|
| 33 |
+
'Monolog\\Handler\\BrowserConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php',
|
| 34 |
+
'Monolog\\Handler\\BufferHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php',
|
| 35 |
+
'Monolog\\Handler\\ChromePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php',
|
| 36 |
+
'Monolog\\Handler\\CouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php',
|
| 37 |
+
'Monolog\\Handler\\CubeHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php',
|
| 38 |
+
'Monolog\\Handler\\Curl\\Util' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php',
|
| 39 |
+
'Monolog\\Handler\\DeduplicationHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php',
|
| 40 |
+
'Monolog\\Handler\\DoctrineCouchDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
|
| 41 |
+
'Monolog\\Handler\\DynamoDbHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
|
| 42 |
+
'Monolog\\Handler\\ElasticSearchHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php',
|
| 43 |
+
'Monolog\\Handler\\ErrorLogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
|
| 44 |
+
'Monolog\\Handler\\FilterHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
|
| 45 |
+
'Monolog\\Handler\\FingersCrossedHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php',
|
| 46 |
+
'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php',
|
| 47 |
+
'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php',
|
| 48 |
+
'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php',
|
| 49 |
+
'Monolog\\Handler\\FirePHPHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php',
|
| 50 |
+
'Monolog\\Handler\\FleepHookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php',
|
| 51 |
+
'Monolog\\Handler\\FlowdockHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php',
|
| 52 |
+
'Monolog\\Handler\\GelfHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php',
|
| 53 |
+
'Monolog\\Handler\\GroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php',
|
| 54 |
+
'Monolog\\Handler\\HandlerInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php',
|
| 55 |
+
'Monolog\\Handler\\HandlerWrapper' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php',
|
| 56 |
+
'Monolog\\Handler\\HipChatHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php',
|
| 57 |
+
'Monolog\\Handler\\IFTTTHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php',
|
| 58 |
+
'Monolog\\Handler\\InsightOpsHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php',
|
| 59 |
+
'Monolog\\Handler\\LogEntriesHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php',
|
| 60 |
+
'Monolog\\Handler\\LogglyHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php',
|
| 61 |
+
'Monolog\\Handler\\MailHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MailHandler.php',
|
| 62 |
+
'Monolog\\Handler\\MandrillHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php',
|
| 63 |
+
'Monolog\\Handler\\MissingExtensionException' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php',
|
| 64 |
+
'Monolog\\Handler\\MongoDBHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php',
|
| 65 |
+
'Monolog\\Handler\\NativeMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php',
|
| 66 |
+
'Monolog\\Handler\\NewRelicHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php',
|
| 67 |
+
'Monolog\\Handler\\NullHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/NullHandler.php',
|
| 68 |
+
'Monolog\\Handler\\PHPConsoleHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php',
|
| 69 |
+
'Monolog\\Handler\\PsrHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php',
|
| 70 |
+
'Monolog\\Handler\\PushoverHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php',
|
| 71 |
+
'Monolog\\Handler\\RavenHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php',
|
| 72 |
+
'Monolog\\Handler\\RedisHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php',
|
| 73 |
+
'Monolog\\Handler\\RollbarHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php',
|
| 74 |
+
'Monolog\\Handler\\RotatingFileHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php',
|
| 75 |
+
'Monolog\\Handler\\SamplingHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php',
|
| 76 |
+
'Monolog\\Handler\\SlackHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php',
|
| 77 |
+
'Monolog\\Handler\\SlackWebhookHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php',
|
| 78 |
+
'Monolog\\Handler\\Slack\\SlackRecord' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php',
|
| 79 |
+
'Monolog\\Handler\\SlackbotHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php',
|
| 80 |
+
'Monolog\\Handler\\SocketHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php',
|
| 81 |
+
'Monolog\\Handler\\StreamHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php',
|
| 82 |
+
'Monolog\\Handler\\SwiftMailerHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php',
|
| 83 |
+
'Monolog\\Handler\\SyslogHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php',
|
| 84 |
+
'Monolog\\Handler\\SyslogUdpHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php',
|
| 85 |
+
'Monolog\\Handler\\SyslogUdp\\UdpSocket' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php',
|
| 86 |
+
'Monolog\\Handler\\TestHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/TestHandler.php',
|
| 87 |
+
'Monolog\\Handler\\WhatFailureGroupHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php',
|
| 88 |
+
'Monolog\\Handler\\ZendMonitorHandler' => $vendorDir . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php',
|
| 89 |
+
'Monolog\\Logger' => $vendorDir . '/monolog/monolog/src/Monolog/Logger.php',
|
| 90 |
+
'Monolog\\Processor\\GitProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php',
|
| 91 |
+
'Monolog\\Processor\\IntrospectionProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php',
|
| 92 |
+
'Monolog\\Processor\\MemoryPeakUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php',
|
| 93 |
+
'Monolog\\Processor\\MemoryProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php',
|
| 94 |
+
'Monolog\\Processor\\MemoryUsageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php',
|
| 95 |
+
'Monolog\\Processor\\MercurialProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php',
|
| 96 |
+
'Monolog\\Processor\\ProcessIdProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php',
|
| 97 |
+
'Monolog\\Processor\\ProcessorInterface' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php',
|
| 98 |
+
'Monolog\\Processor\\PsrLogMessageProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php',
|
| 99 |
+
'Monolog\\Processor\\TagProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php',
|
| 100 |
+
'Monolog\\Processor\\UidProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php',
|
| 101 |
+
'Monolog\\Processor\\WebProcessor' => $vendorDir . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php',
|
| 102 |
+
'Monolog\\Registry' => $vendorDir . '/monolog/monolog/src/Monolog/Registry.php',
|
| 103 |
+
'Monolog\\ResettableInterface' => $vendorDir . '/monolog/monolog/src/Monolog/ResettableInterface.php',
|
| 104 |
+
'Monolog\\SignalHandler' => $vendorDir . '/monolog/monolog/src/Monolog/SignalHandler.php',
|
| 105 |
+
'Monolog\\Utils' => $vendorDir . '/monolog/monolog/src/Monolog/Utils.php',
|
| 106 |
+
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
|
| 107 |
+
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
| 108 |
+
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
|
| 109 |
+
'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
|
| 110 |
+
'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
|
| 111 |
+
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
| 112 |
+
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
| 113 |
+
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
| 114 |
+
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 115 |
+
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 116 |
+
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
| 117 |
+
'Tribe\\Log\\Action_Logger' => $baseDir . '/src/Tribe/Log/Action_Logger.php',
|
| 118 |
+
'Tribe\\Log\\Canonical_Formatter' => $baseDir . '/src/Tribe/Log/Canonical_Formatter.php',
|
| 119 |
+
'Tribe\\Log\\Monolog_Logger' => $baseDir . '/src/Tribe/Log/Monolog_Logger.php',
|
| 120 |
+
'Tribe\\Log\\Service_Provider' => $baseDir . '/src/Tribe/Log/Service_Provider.php',
|
| 121 |
'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
|
| 122 |
'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
|
| 123 |
'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
|
| 125 |
'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
|
| 126 |
'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
|
| 127 |
'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
|
| 128 |
+
'Tribe\\Utils\\Lazy_Events' => $baseDir . '/src/Tribe/Utils/Lazy_Events.php',
|
| 129 |
+
'Tribe\\Utils\\Lazy_String' => $baseDir . '/src/Tribe/Utils/Lazy_String.php',
|
| 130 |
'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
|
| 131 |
'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
|
| 132 |
'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
|
common/vendor/composer/autoload_commands_classmap.php
DELETED
|
@@ -1,105 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
// autoload_commands_classmap.php @generated by Composer
|
| 4 |
-
|
| 5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
| 6 |
-
$baseDir = dirname($vendorDir);
|
| 7 |
-
|
| 8 |
-
return array(
|
| 9 |
-
'CLI_Command' => $vendorDir . '/wp-cli/wp-cli/php/commands/src/CLI_Command.php',
|
| 10 |
-
'Cache_Command' => $vendorDir . '/wp-cli/cache-command/src/Cache_Command.php',
|
| 11 |
-
'Capabilities_Command' => $vendorDir . '/wp-cli/role-command/src/Capabilities_Command.php',
|
| 12 |
-
'Checksum_Command' => $vendorDir . '/wp-cli/checksum-command/src/Checksum_Command.php',
|
| 13 |
-
'Comment_Command' => $vendorDir . '/wp-cli/entity-command/src/Comment_Command.php',
|
| 14 |
-
'Comment_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Comment_Meta_Command.php',
|
| 15 |
-
'Config_Command' => $vendorDir . '/wp-cli/config-command/src/Config_Command.php',
|
| 16 |
-
'Core_Command' => $vendorDir . '/wp-cli/core-command/src/Core_Command.php',
|
| 17 |
-
'Core_Language_Command' => $vendorDir . '/wp-cli/language-command/src/Core_Language_Command.php',
|
| 18 |
-
'Cron_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Command.php',
|
| 19 |
-
'Cron_Event_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Event_Command.php',
|
| 20 |
-
'Cron_Schedule_Command' => $vendorDir . '/wp-cli/cron-command/src/Cron_Schedule_Command.php',
|
| 21 |
-
'DB_Command' => $vendorDir . '/wp-cli/db-command/src/DB_Command.php',
|
| 22 |
-
'EvalFile_Command' => $vendorDir . '/wp-cli/eval-command/src/EvalFile_Command.php',
|
| 23 |
-
'Eval_Command' => $vendorDir . '/wp-cli/eval-command/src/Eval_Command.php',
|
| 24 |
-
'Export_Command' => $vendorDir . '/wp-cli/export-command/src/Export_Command.php',
|
| 25 |
-
'Import_Command' => $vendorDir . '/wp-cli/import-command/src/Import_Command.php',
|
| 26 |
-
'Language_Namespace' => $vendorDir . '/wp-cli/language-command/src/Language_Namespace.php',
|
| 27 |
-
'Media_Command' => $vendorDir . '/wp-cli/media-command/src/Media_Command.php',
|
| 28 |
-
'Menu_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Command.php',
|
| 29 |
-
'Menu_Item_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Item_Command.php',
|
| 30 |
-
'Menu_Location_Command' => $vendorDir . '/wp-cli/entity-command/src/Menu_Location_Command.php',
|
| 31 |
-
'Network_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Network_Meta_Command.php',
|
| 32 |
-
'Network_Namespace' => $vendorDir . '/wp-cli/entity-command/src/Network_Namespace.php',
|
| 33 |
-
'Option_Command' => $vendorDir . '/wp-cli/entity-command/src/Option_Command.php',
|
| 34 |
-
'Package_Command' => $vendorDir . '/wp-cli/package-command/src/Package_Command.php',
|
| 35 |
-
'Plugin_Command' => $vendorDir . '/wp-cli/extension-command/src/Plugin_Command.php',
|
| 36 |
-
'Post_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Command.php',
|
| 37 |
-
'Post_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Meta_Command.php',
|
| 38 |
-
'Post_Term_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Term_Command.php',
|
| 39 |
-
'Post_Type_Command' => $vendorDir . '/wp-cli/entity-command/src/Post_Type_Command.php',
|
| 40 |
-
'Rewrite_Command' => $vendorDir . '/wp-cli/rewrite-command/src/Rewrite_Command.php',
|
| 41 |
-
'Role_Command' => $vendorDir . '/wp-cli/role-command/src/Role_Command.php',
|
| 42 |
-
'Scaffold_Command' => $vendorDir . '/wp-cli/scaffold-command/src/Scaffold_Command.php',
|
| 43 |
-
'Search_Replace_Command' => $vendorDir . '/wp-cli/search-replace-command/src/Search_Replace_Command.php',
|
| 44 |
-
'Server_Command' => $vendorDir . '/wp-cli/server-command/src/Server_Command.php',
|
| 45 |
-
'Shell_Command' => $vendorDir . '/wp-cli/shell-command/src/Shell_Command.php',
|
| 46 |
-
'Sidebar_Command' => $vendorDir . '/wp-cli/widget-command/src/Sidebar_Command.php',
|
| 47 |
-
'Site_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Command.php',
|
| 48 |
-
'Site_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Meta_Command.php',
|
| 49 |
-
'Site_Option_Command' => $vendorDir . '/wp-cli/entity-command/src/Site_Option_Command.php',
|
| 50 |
-
'Super_Admin_Command' => $vendorDir . '/wp-cli/super-admin-command/src/Super_Admin_Command.php',
|
| 51 |
-
'Taxonomy_Command' => $vendorDir . '/wp-cli/entity-command/src/Taxonomy_Command.php',
|
| 52 |
-
'Term_Command' => $vendorDir . '/wp-cli/entity-command/src/Term_Command.php',
|
| 53 |
-
'Term_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/Term_Meta_Command.php',
|
| 54 |
-
'Theme_Command' => $vendorDir . '/wp-cli/extension-command/src/Theme_Command.php',
|
| 55 |
-
'Theme_Mod_Command' => $vendorDir . '/wp-cli/extension-command/src/Theme_Mod_Command.php',
|
| 56 |
-
'Transient_Command' => $vendorDir . '/wp-cli/cache-command/src/Transient_Command.php',
|
| 57 |
-
'User_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Command.php',
|
| 58 |
-
'User_Meta_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Meta_Command.php',
|
| 59 |
-
'User_Session_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Session_Command.php',
|
| 60 |
-
'User_Term_Command' => $vendorDir . '/wp-cli/entity-command/src/User_Term_Command.php',
|
| 61 |
-
'WP_CLI\\CommandWithDBObject' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithDBObject.php',
|
| 62 |
-
'WP_CLI\\CommandWithMeta' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithMeta.php',
|
| 63 |
-
'WP_CLI\\CommandWithTerms' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/CommandWithTerms.php',
|
| 64 |
-
'WP_CLI\\CommandWithTranslation' => $vendorDir . '/wp-cli/language-command/src/WP_CLI/CommandWithTranslation.php',
|
| 65 |
-
'WP_CLI\\CommandWithUpgrade' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/CommandWithUpgrade.php',
|
| 66 |
-
'WP_CLI\\CoreUpgrader' => $vendorDir . '/wp-cli/core-command/src/WP_CLI/CoreUpgrader.php',
|
| 67 |
-
'WP_CLI\\DestructivePluginUpgrader' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/DestructivePluginUpgrader.php',
|
| 68 |
-
'WP_CLI\\DestructiveThemeUpgrader' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/DestructiveThemeUpgrader.php',
|
| 69 |
-
'WP_CLI\\Embeds\\Cache_Command' => $vendorDir . '/wp-cli/embed-command/src/Cache_Command.php',
|
| 70 |
-
'WP_CLI\\Embeds\\Embeds_Namespace' => $vendorDir . '/wp-cli/embed-command/src/Embeds_Namespace.php',
|
| 71 |
-
'WP_CLI\\Embeds\\Fetch_Command' => $vendorDir . '/wp-cli/embed-command/src/Fetch_Command.php',
|
| 72 |
-
'WP_CLI\\Embeds\\Handler_Command' => $vendorDir . '/wp-cli/embed-command/src/Handler_Command.php',
|
| 73 |
-
'WP_CLI\\Embeds\\Provider_Command' => $vendorDir . '/wp-cli/embed-command/src/Provider_Command.php',
|
| 74 |
-
'WP_CLI\\Embeds\\oEmbed' => $vendorDir . '/wp-cli/embed-command/src/oEmbed.php',
|
| 75 |
-
'WP_CLI\\Entity\\NonExistentKeyException' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/NonExistentKeyException.php',
|
| 76 |
-
'WP_CLI\\Entity\\RecursiveDataStructureTraverser' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/RecursiveDataStructureTraverser.php',
|
| 77 |
-
'WP_CLI\\Entity\\Utils' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Entity/Utils.php',
|
| 78 |
-
'WP_CLI\\Fetchers\\Comment' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Comment.php',
|
| 79 |
-
'WP_CLI\\Fetchers\\Plugin' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/Fetchers/Plugin.php',
|
| 80 |
-
'WP_CLI\\Fetchers\\Post' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Post.php',
|
| 81 |
-
'WP_CLI\\Fetchers\\Site' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/Site.php',
|
| 82 |
-
'WP_CLI\\Fetchers\\Theme' => $vendorDir . '/wp-cli/extension-command/src/WP_CLI/Fetchers/Theme.php',
|
| 83 |
-
'WP_CLI\\Fetchers\\User' => $vendorDir . '/wp-cli/entity-command/src/WP_CLI/Fetchers/User.php',
|
| 84 |
-
'WP_CLI\\Inflector' => $vendorDir . '/wp-cli/scaffold-command/src/WP_CLI/Inflector.php',
|
| 85 |
-
'WP_CLI\\JsonManipulator' => $vendorDir . '/wp-cli/package-command/src/WP_CLI/JsonManipulator.php',
|
| 86 |
-
'WP_CLI\\LanguagePackUpgrader' => $vendorDir . '/wp-cli/language-command/src/WP_CLI/LanguagePackUpgrader.php',
|
| 87 |
-
'WP_CLI\\NonDestructiveCoreUpgrader' => $vendorDir . '/wp-cli/core-command/src/WP_CLI/NonDestructiveCoreUpgrader.php',
|
| 88 |
-
'WP_CLI\\REPL' => $vendorDir . '/wp-cli/shell-command/src/WP_CLI/REPL.php',
|
| 89 |
-
'WP_CLI\\SearchReplacer' => $vendorDir . '/wp-cli/search-replace-command/src/WP_CLI/SearchReplacer.php',
|
| 90 |
-
'WP_Export_Base_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Base_Writer.php',
|
| 91 |
-
'WP_Export_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Exception.php',
|
| 92 |
-
'WP_Export_File_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_File_Writer.php',
|
| 93 |
-
'WP_Export_Oxymel' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Oxymel.php',
|
| 94 |
-
'WP_Export_Query' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Query.php',
|
| 95 |
-
'WP_Export_Returner' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Returner.php',
|
| 96 |
-
'WP_Export_Split_Files_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Split_Files_Writer.php',
|
| 97 |
-
'WP_Export_Stdout_Writer' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Stdout_Writer.php',
|
| 98 |
-
'WP_Export_Term_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Export_Term_Exception.php',
|
| 99 |
-
'WP_Export_WXR_Formatter' => $vendorDir . '/wp-cli/export-command/src/WP_Export_WXR_Formatter.php',
|
| 100 |
-
'WP_Export_XML_Over_HTTP' => $vendorDir . '/wp-cli/export-command/src/WP_Export_XML_Over_HTTP.php',
|
| 101 |
-
'WP_Iterator_Exception' => $vendorDir . '/wp-cli/export-command/src/WP_Iterator_Exception.php',
|
| 102 |
-
'WP_Map_Iterator' => $vendorDir . '/wp-cli/export-command/src/WP_Map_Iterator.php',
|
| 103 |
-
'WP_Post_IDs_Iterator' => $vendorDir . '/wp-cli/export-command/src/WP_Post_IDs_Iterator.php',
|
| 104 |
-
'Widget_Command' => $vendorDir . '/wp-cli/widget-command/src/Widget_Command.php',
|
| 105 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/composer/autoload_commands_real.php
DELETED
|
@@ -1,34 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
// autoload_commands_real.php @generated by Composer
|
| 4 |
-
|
| 5 |
-
class ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5
|
| 6 |
-
{
|
| 7 |
-
private static $loader;
|
| 8 |
-
|
| 9 |
-
public static function loadClassLoader($class)
|
| 10 |
-
{
|
| 11 |
-
if ('Composer\Autoload\ClassLoader' === $class) {
|
| 12 |
-
require __DIR__ . '/ClassLoader.php';
|
| 13 |
-
}
|
| 14 |
-
}
|
| 15 |
-
|
| 16 |
-
public static function getLoader()
|
| 17 |
-
{
|
| 18 |
-
if (null !== self::$loader) {
|
| 19 |
-
return self::$loader;
|
| 20 |
-
}
|
| 21 |
-
|
| 22 |
-
spl_autoload_register(array('ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5', 'loadClassLoader'), true, true);
|
| 23 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('ComposerAutoloaderInit7b4b7b0bee06c414ee742c06b5b280a5', 'loadClassLoader'));
|
| 25 |
-
|
| 26 |
-
$classMap = require __DIR__ . '/autoload_commands_classmap.php';
|
| 27 |
-
if ($classMap) {
|
| 28 |
-
$loader->addClassMap($classMap);
|
| 29 |
-
}
|
| 30 |
-
$loader->register(true);
|
| 31 |
-
|
| 32 |
-
return $loader;
|
| 33 |
-
}
|
| 34 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/composer/autoload_framework_classmap.php
DELETED
|
@@ -1,2700 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
// autoload_framework_classmap.php @generated by Composer
|
| 4 |
-
|
| 5 |
-
$vendorDir = dirname(dirname(__FILE__));
|
| 6 |
-
$baseDir = dirname($vendorDir);
|
| 7 |
-
|
| 8 |
-
return array(
|
| 9 |
-
'BaconStringUtils\\Filter\\Slugify' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Filter/Slugify.php',
|
| 10 |
-
'BaconStringUtils\\Filter\\SlugifyFactory' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Filter/SlugifyFactory.php',
|
| 11 |
-
'BaconStringUtils\\Module' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Module.php',
|
| 12 |
-
'BaconStringUtils\\Slugifier' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/Slugifier.php',
|
| 13 |
-
'BaconStringUtils\\SlugifierFactory' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/SlugifierFactory.php',
|
| 14 |
-
'BaconStringUtils\\UniDecoder' => $vendorDir . '/bacon/bacon-string-utils/src/BaconStringUtils/UniDecoder.php',
|
| 15 |
-
'Behat\\Gherkin\\Cache\\CacheInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/CacheInterface.php',
|
| 16 |
-
'Behat\\Gherkin\\Cache\\FileCache' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/FileCache.php',
|
| 17 |
-
'Behat\\Gherkin\\Cache\\MemoryCache' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Cache/MemoryCache.php',
|
| 18 |
-
'Behat\\Gherkin\\Exception\\CacheException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/CacheException.php',
|
| 19 |
-
'Behat\\Gherkin\\Exception\\Exception' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/Exception.php',
|
| 20 |
-
'Behat\\Gherkin\\Exception\\LexerException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/LexerException.php',
|
| 21 |
-
'Behat\\Gherkin\\Exception\\NodeException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/NodeException.php',
|
| 22 |
-
'Behat\\Gherkin\\Exception\\ParserException' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Exception/ParserException.php',
|
| 23 |
-
'Behat\\Gherkin\\Filter\\ComplexFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilter.php',
|
| 24 |
-
'Behat\\Gherkin\\Filter\\ComplexFilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/ComplexFilterInterface.php',
|
| 25 |
-
'Behat\\Gherkin\\Filter\\FeatureFilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/FeatureFilterInterface.php',
|
| 26 |
-
'Behat\\Gherkin\\Filter\\FilterInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/FilterInterface.php',
|
| 27 |
-
'Behat\\Gherkin\\Filter\\LineFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/LineFilter.php',
|
| 28 |
-
'Behat\\Gherkin\\Filter\\LineRangeFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/LineRangeFilter.php',
|
| 29 |
-
'Behat\\Gherkin\\Filter\\NameFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/NameFilter.php',
|
| 30 |
-
'Behat\\Gherkin\\Filter\\NarrativeFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/NarrativeFilter.php',
|
| 31 |
-
'Behat\\Gherkin\\Filter\\PathsFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/PathsFilter.php',
|
| 32 |
-
'Behat\\Gherkin\\Filter\\RoleFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/RoleFilter.php',
|
| 33 |
-
'Behat\\Gherkin\\Filter\\SimpleFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/SimpleFilter.php',
|
| 34 |
-
'Behat\\Gherkin\\Filter\\TagFilter' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Filter/TagFilter.php',
|
| 35 |
-
'Behat\\Gherkin\\Gherkin' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Gherkin.php',
|
| 36 |
-
'Behat\\Gherkin\\Keywords\\ArrayKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/ArrayKeywords.php',
|
| 37 |
-
'Behat\\Gherkin\\Keywords\\CachedArrayKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/CachedArrayKeywords.php',
|
| 38 |
-
'Behat\\Gherkin\\Keywords\\CucumberKeywords' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/CucumberKeywords.php',
|
| 39 |
-
'Behat\\Gherkin\\Keywords\\KeywordsDumper' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsDumper.php',
|
| 40 |
-
'Behat\\Gherkin\\Keywords\\KeywordsInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Keywords/KeywordsInterface.php',
|
| 41 |
-
'Behat\\Gherkin\\Lexer' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Lexer.php',
|
| 42 |
-
'Behat\\Gherkin\\Loader\\AbstractFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/AbstractFileLoader.php',
|
| 43 |
-
'Behat\\Gherkin\\Loader\\ArrayLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/ArrayLoader.php',
|
| 44 |
-
'Behat\\Gherkin\\Loader\\DirectoryLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/DirectoryLoader.php',
|
| 45 |
-
'Behat\\Gherkin\\Loader\\FileLoaderInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/FileLoaderInterface.php',
|
| 46 |
-
'Behat\\Gherkin\\Loader\\GherkinFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/GherkinFileLoader.php',
|
| 47 |
-
'Behat\\Gherkin\\Loader\\LoaderInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/LoaderInterface.php',
|
| 48 |
-
'Behat\\Gherkin\\Loader\\YamlFileLoader' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Loader/YamlFileLoader.php',
|
| 49 |
-
'Behat\\Gherkin\\Node\\ArgumentInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ArgumentInterface.php',
|
| 50 |
-
'Behat\\Gherkin\\Node\\BackgroundNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/BackgroundNode.php',
|
| 51 |
-
'Behat\\Gherkin\\Node\\ExampleNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ExampleNode.php',
|
| 52 |
-
'Behat\\Gherkin\\Node\\ExampleTableNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ExampleTableNode.php',
|
| 53 |
-
'Behat\\Gherkin\\Node\\FeatureNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/FeatureNode.php',
|
| 54 |
-
'Behat\\Gherkin\\Node\\KeywordNodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/KeywordNodeInterface.php',
|
| 55 |
-
'Behat\\Gherkin\\Node\\NodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/NodeInterface.php',
|
| 56 |
-
'Behat\\Gherkin\\Node\\OutlineNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/OutlineNode.php',
|
| 57 |
-
'Behat\\Gherkin\\Node\\PyStringNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/PyStringNode.php',
|
| 58 |
-
'Behat\\Gherkin\\Node\\ScenarioInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioInterface.php',
|
| 59 |
-
'Behat\\Gherkin\\Node\\ScenarioLikeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioLikeInterface.php',
|
| 60 |
-
'Behat\\Gherkin\\Node\\ScenarioNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/ScenarioNode.php',
|
| 61 |
-
'Behat\\Gherkin\\Node\\StepContainerInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/StepContainerInterface.php',
|
| 62 |
-
'Behat\\Gherkin\\Node\\StepNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/StepNode.php',
|
| 63 |
-
'Behat\\Gherkin\\Node\\TableNode' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/TableNode.php',
|
| 64 |
-
'Behat\\Gherkin\\Node\\TaggedNodeInterface' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Node/TaggedNodeInterface.php',
|
| 65 |
-
'Behat\\Gherkin\\Parser' => $vendorDir . '/behat/gherkin/src/Behat/Gherkin/Parser.php',
|
| 66 |
-
'Carbon\\Carbon' => $vendorDir . '/nesbot/carbon/src/Carbon/Carbon.php',
|
| 67 |
-
'Carbon\\CarbonImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonImmutable.php',
|
| 68 |
-
'Carbon\\CarbonInterface' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterface.php',
|
| 69 |
-
'Carbon\\CarbonInterval' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonInterval.php',
|
| 70 |
-
'Carbon\\CarbonPeriod' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonPeriod.php',
|
| 71 |
-
'Carbon\\CarbonTimeZone' => $vendorDir . '/nesbot/carbon/src/Carbon/CarbonTimeZone.php',
|
| 72 |
-
'Carbon\\Cli\\Invoker' => $vendorDir . '/nesbot/carbon/src/Carbon/Cli/Invoker.php',
|
| 73 |
-
'Carbon\\Exceptions\\InvalidDateException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/InvalidDateException.php',
|
| 74 |
-
'Carbon\\Exceptions\\NotAPeriodException' => $vendorDir . '/nesbot/carbon/src/Carbon/Exceptions/NotAPeriodException.php',
|
| 75 |
-
'Carbon\\Factory' => $vendorDir . '/nesbot/carbon/src/Carbon/Factory.php',
|
| 76 |
-
'Carbon\\FactoryImmutable' => $vendorDir . '/nesbot/carbon/src/Carbon/FactoryImmutable.php',
|
| 77 |
-
'Carbon\\Language' => $vendorDir . '/nesbot/carbon/src/Carbon/Language.php',
|
| 78 |
-
'Carbon\\Laravel\\ServiceProvider' => $vendorDir . '/nesbot/carbon/src/Carbon/Laravel/ServiceProvider.php',
|
| 79 |
-
'Carbon\\Traits\\Boundaries' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Boundaries.php',
|
| 80 |
-
'Carbon\\Traits\\Cast' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Cast.php',
|
| 81 |
-
'Carbon\\Traits\\Comparison' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Comparison.php',
|
| 82 |
-
'Carbon\\Traits\\Converter' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Converter.php',
|
| 83 |
-
'Carbon\\Traits\\Creator' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Creator.php',
|
| 84 |
-
'Carbon\\Traits\\Date' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Date.php',
|
| 85 |
-
'Carbon\\Traits\\Difference' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Difference.php',
|
| 86 |
-
'Carbon\\Traits\\Localization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Localization.php',
|
| 87 |
-
'Carbon\\Traits\\Macro' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Macro.php',
|
| 88 |
-
'Carbon\\Traits\\Mixin' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mixin.php',
|
| 89 |
-
'Carbon\\Traits\\Modifiers' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Modifiers.php',
|
| 90 |
-
'Carbon\\Traits\\Mutability' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Mutability.php',
|
| 91 |
-
'Carbon\\Traits\\Options' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Options.php',
|
| 92 |
-
'Carbon\\Traits\\Rounding' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Rounding.php',
|
| 93 |
-
'Carbon\\Traits\\Serialization' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Serialization.php',
|
| 94 |
-
'Carbon\\Traits\\Test' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Test.php',
|
| 95 |
-
'Carbon\\Traits\\Timestamp' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Timestamp.php',
|
| 96 |
-
'Carbon\\Traits\\Units' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Units.php',
|
| 97 |
-
'Carbon\\Traits\\Week' => $vendorDir . '/nesbot/carbon/src/Carbon/Traits/Week.php',
|
| 98 |
-
'Carbon\\Translator' => $vendorDir . '/nesbot/carbon/src/Carbon/Translator.php',
|
| 99 |
-
'Codeception\\Actor' => $vendorDir . '/codeception/codeception/src/Codeception/Actor.php',
|
| 100 |
-
'Codeception\\Application' => $vendorDir . '/codeception/codeception/src/Codeception/Application.php',
|
| 101 |
-
'Codeception\\Codecept' => $vendorDir . '/codeception/codeception/src/Codeception/Codecept.php',
|
| 102 |
-
'Codeception\\Command\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Bootstrap.php',
|
| 103 |
-
'Codeception\\Command\\Build' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Build.php',
|
| 104 |
-
'Codeception\\Command\\Clean' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Clean.php',
|
| 105 |
-
'Codeception\\Command\\Completion' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Completion.php',
|
| 106 |
-
'Codeception\\Command\\CompletionFallback' => $vendorDir . '/codeception/codeception/src/Codeception/Command/CompletionFallback.php',
|
| 107 |
-
'Codeception\\Command\\ConfigValidate' => $vendorDir . '/codeception/codeception/src/Codeception/Command/ConfigValidate.php',
|
| 108 |
-
'Codeception\\Command\\Console' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Console.php',
|
| 109 |
-
'Codeception\\Command\\DryRun' => $vendorDir . '/codeception/codeception/src/Codeception/Command/DryRun.php',
|
| 110 |
-
'Codeception\\Command\\GenerateCept' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateCept.php',
|
| 111 |
-
'Codeception\\Command\\GenerateCest' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateCest.php',
|
| 112 |
-
'Codeception\\Command\\GenerateEnvironment' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateEnvironment.php',
|
| 113 |
-
'Codeception\\Command\\GenerateFeature' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateFeature.php',
|
| 114 |
-
'Codeception\\Command\\GenerateGroup' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateGroup.php',
|
| 115 |
-
'Codeception\\Command\\GenerateHelper' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateHelper.php',
|
| 116 |
-
'Codeception\\Command\\GeneratePageObject' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GeneratePageObject.php',
|
| 117 |
-
'Codeception\\Command\\GenerateScenarios' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateScenarios.php',
|
| 118 |
-
'Codeception\\Command\\GenerateSnapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateSnapshot.php',
|
| 119 |
-
'Codeception\\Command\\GenerateStepObject' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateStepObject.php',
|
| 120 |
-
'Codeception\\Command\\GenerateSuite' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateSuite.php',
|
| 121 |
-
'Codeception\\Command\\GenerateTest' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GenerateTest.php',
|
| 122 |
-
'Codeception\\Command\\GenerateWPAjax' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPAjax.php',
|
| 123 |
-
'Codeception\\Command\\GenerateWPCanonical' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPCanonical.php',
|
| 124 |
-
'Codeception\\Command\\GenerateWPRestApi' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestApi.php',
|
| 125 |
-
'Codeception\\Command\\GenerateWPRestController' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestController.php',
|
| 126 |
-
'Codeception\\Command\\GenerateWPRestPostTypeController' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPRestPostTypeController.php',
|
| 127 |
-
'Codeception\\Command\\GenerateWPUnit' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPUnit.php',
|
| 128 |
-
'Codeception\\Command\\GenerateWPXMLRPC' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Command/GenerateWPXMLRPC.php',
|
| 129 |
-
'Codeception\\Command\\GherkinSnippets' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GherkinSnippets.php',
|
| 130 |
-
'Codeception\\Command\\GherkinSteps' => $vendorDir . '/codeception/codeception/src/Codeception/Command/GherkinSteps.php',
|
| 131 |
-
'Codeception\\Command\\Init' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Init.php',
|
| 132 |
-
'Codeception\\Command\\Run' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Run.php',
|
| 133 |
-
'Codeception\\Command\\SelfUpdate' => $vendorDir . '/codeception/codeception/src/Codeception/Command/SelfUpdate.php',
|
| 134 |
-
'Codeception\\Command\\Shared\\Config' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/Config.php',
|
| 135 |
-
'Codeception\\Command\\Shared\\FileSystem' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/FileSystem.php',
|
| 136 |
-
'Codeception\\Command\\Shared\\Style' => $vendorDir . '/codeception/codeception/src/Codeception/Command/Shared/Style.php',
|
| 137 |
-
'Codeception\\Configuration' => $vendorDir . '/codeception/codeception/src/Codeception/Configuration.php',
|
| 138 |
-
'Codeception\\Coverage\\Filter' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Filter.php',
|
| 139 |
-
'Codeception\\Coverage\\Subscriber\\Local' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/Local.php',
|
| 140 |
-
'Codeception\\Coverage\\Subscriber\\LocalServer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/LocalServer.php',
|
| 141 |
-
'Codeception\\Coverage\\Subscriber\\Printer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/Printer.php',
|
| 142 |
-
'Codeception\\Coverage\\Subscriber\\RemoteServer' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/Subscriber/RemoteServer.php',
|
| 143 |
-
'Codeception\\Coverage\\SuiteSubscriber' => $vendorDir . '/codeception/codeception/src/Codeception/Coverage/SuiteSubscriber.php',
|
| 144 |
-
'Codeception\\CustomCommandInterface' => $vendorDir . '/codeception/codeception/src/Codeception/CustomCommandInterface.php',
|
| 145 |
-
'Codeception\\Event\\FailEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/FailEvent.php',
|
| 146 |
-
'Codeception\\Event\\PrintResultEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/PrintResultEvent.php',
|
| 147 |
-
'Codeception\\Event\\StepEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/StepEvent.php',
|
| 148 |
-
'Codeception\\Event\\SuiteEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/SuiteEvent.php',
|
| 149 |
-
'Codeception\\Event\\TestEvent' => $vendorDir . '/codeception/codeception/src/Codeception/Event/TestEvent.php',
|
| 150 |
-
'Codeception\\Events' => $vendorDir . '/codeception/codeception/src/Codeception/Events.php',
|
| 151 |
-
'Codeception\\Example' => $vendorDir . '/codeception/codeception/src/Codeception/Example.php',
|
| 152 |
-
'Codeception\\Exception\\ConditionalAssertionFailed' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConditionalAssertionFailed.php',
|
| 153 |
-
'Codeception\\Exception\\ConfigurationException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConfigurationException.php',
|
| 154 |
-
'Codeception\\Exception\\ConnectionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ConnectionException.php',
|
| 155 |
-
'Codeception\\Exception\\ContentNotFound' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ContentNotFound.php',
|
| 156 |
-
'Codeception\\Exception\\ElementNotFound' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ElementNotFound.php',
|
| 157 |
-
'Codeception\\Exception\\ExtensionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ExtensionException.php',
|
| 158 |
-
'Codeception\\Exception\\ExternalUrlException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ExternalUrlException.php',
|
| 159 |
-
'Codeception\\Exception\\Fail' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Fail.php',
|
| 160 |
-
'Codeception\\Exception\\Incomplete' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Incomplete.php',
|
| 161 |
-
'Codeception\\Exception\\InjectionException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/InjectionException.php',
|
| 162 |
-
'Codeception\\Exception\\MalformedLocatorException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/MalformedLocatorException.php',
|
| 163 |
-
'Codeception\\Exception\\ModuleConfigException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleConfigException.php',
|
| 164 |
-
'Codeception\\Exception\\ModuleConflictException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleConflictException.php',
|
| 165 |
-
'Codeception\\Exception\\ModuleException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleException.php',
|
| 166 |
-
'Codeception\\Exception\\ModuleRequireException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ModuleRequireException.php',
|
| 167 |
-
'Codeception\\Exception\\ParseException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/ParseException.php',
|
| 168 |
-
'Codeception\\Exception\\RemoteException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/RemoteException.php',
|
| 169 |
-
'Codeception\\Exception\\Skip' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/Skip.php',
|
| 170 |
-
'Codeception\\Exception\\TestParseException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/TestParseException.php',
|
| 171 |
-
'Codeception\\Exception\\TestRuntimeException' => $vendorDir . '/codeception/codeception/src/Codeception/Exception/TestRuntimeException.php',
|
| 172 |
-
'Codeception\\Extension' => $vendorDir . '/codeception/codeception/src/Codeception/Extension.php',
|
| 173 |
-
'Codeception\\Extension\\DotReporter' => $vendorDir . '/codeception/codeception/ext/DotReporter.php',
|
| 174 |
-
'Codeception\\Extension\\Logger' => $vendorDir . '/codeception/codeception/ext/Logger.php',
|
| 175 |
-
'Codeception\\Extension\\Recorder' => $vendorDir . '/codeception/codeception/ext/Recorder.php',
|
| 176 |
-
'Codeception\\Extension\\RunBefore' => $vendorDir . '/codeception/codeception/ext/RunBefore.php',
|
| 177 |
-
'Codeception\\Extension\\RunFailed' => $vendorDir . '/codeception/codeception/ext/RunFailed.php',
|
| 178 |
-
'Codeception\\Extension\\RunProcess' => $vendorDir . '/codeception/codeception/ext/RunProcess.php',
|
| 179 |
-
'Codeception\\Extension\\SimpleReporter' => $vendorDir . '/codeception/codeception/ext/SimpleReporter.php',
|
| 180 |
-
'Codeception\\GroupObject' => $vendorDir . '/codeception/codeception/src/Codeception/GroupObject.php',
|
| 181 |
-
'Codeception\\InitTemplate' => $vendorDir . '/codeception/codeception/src/Codeception/InitTemplate.php',
|
| 182 |
-
'Codeception\\Lib\\Actor\\Shared\\Comment' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Actor/Shared/Comment.php',
|
| 183 |
-
'Codeception\\Lib\\Actor\\Shared\\Friend' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Actor/Shared/Friend.php',
|
| 184 |
-
'Codeception\\Lib\\Connector\\Guzzle' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Guzzle.php',
|
| 185 |
-
'Codeception\\Lib\\Connector\\Guzzle6' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Guzzle6.php',
|
| 186 |
-
'Codeception\\Lib\\Connector\\Laravel5' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Laravel5.php',
|
| 187 |
-
'Codeception\\Lib\\Connector\\Laravel5\\ExceptionHandlerDecorator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Laravel5/ExceptionHandlerDecorator.php',
|
| 188 |
-
'Codeception\\Lib\\Connector\\Lumen' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Lumen.php',
|
| 189 |
-
'Codeception\\Lib\\Connector\\Lumen\\DummyKernel' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Lumen/DummyKernel.php',
|
| 190 |
-
'Codeception\\Lib\\Connector\\Phalcon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Phalcon.php',
|
| 191 |
-
'Codeception\\Lib\\Connector\\Phalcon\\MemorySession' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Phalcon/MemorySession.php',
|
| 192 |
-
'Codeception\\Lib\\Connector\\Shared\\LaravelCommon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Shared/LaravelCommon.php',
|
| 193 |
-
'Codeception\\Lib\\Connector\\Shared\\PhpSuperGlobalsConverter' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Shared/PhpSuperGlobalsConverter.php',
|
| 194 |
-
'Codeception\\Lib\\Connector\\Symfony' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Symfony.php',
|
| 195 |
-
'Codeception\\Lib\\Connector\\Universal' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Universal.php',
|
| 196 |
-
'Codeception\\Lib\\Connector\\Yii1' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii1.php',
|
| 197 |
-
'Codeception\\Lib\\Connector\\Yii2' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2.php',
|
| 198 |
-
'Codeception\\Lib\\Connector\\Yii2\\ConnectionWatcher' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/ConnectionWatcher.php',
|
| 199 |
-
'Codeception\\Lib\\Connector\\Yii2\\FixturesStore' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/FixturesStore.php',
|
| 200 |
-
'Codeception\\Lib\\Connector\\Yii2\\Logger' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/Logger.php',
|
| 201 |
-
'Codeception\\Lib\\Connector\\Yii2\\TestMailer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/TestMailer.php',
|
| 202 |
-
'Codeception\\Lib\\Connector\\Yii2\\TransactionForcer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/Yii2/TransactionForcer.php',
|
| 203 |
-
'Codeception\\Lib\\Connector\\ZF1' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF1.php',
|
| 204 |
-
'Codeception\\Lib\\Connector\\ZF2' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF2.php',
|
| 205 |
-
'Codeception\\Lib\\Connector\\ZF2\\PersistentServiceManager' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZF2/PersistentServiceManager.php',
|
| 206 |
-
'Codeception\\Lib\\Connector\\ZendExpressive' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive.php',
|
| 207 |
-
'Codeception\\Lib\\Connector\\ZendExpressive\\ResponseCollector' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Connector/ZendExpressive/ResponseCollector.php',
|
| 208 |
-
'Codeception\\Lib\\Console\\Colorizer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Colorizer.php',
|
| 209 |
-
'Codeception\\Lib\\Console\\DiffFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/DiffFactory.php',
|
| 210 |
-
'Codeception\\Lib\\Console\\Message' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Message.php',
|
| 211 |
-
'Codeception\\Lib\\Console\\MessageFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/MessageFactory.php',
|
| 212 |
-
'Codeception\\Lib\\Console\\Output' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Console/Output.php',
|
| 213 |
-
'Codeception\\Lib\\DbPopulator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/DbPopulator.php',
|
| 214 |
-
'Codeception\\Lib\\Di' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Di.php',
|
| 215 |
-
'Codeception\\Lib\\Driver\\AmazonSQS' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/AmazonSQS.php',
|
| 216 |
-
'Codeception\\Lib\\Driver\\Beanstalk' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Beanstalk.php',
|
| 217 |
-
'Codeception\\Lib\\Driver\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Db.php',
|
| 218 |
-
'Codeception\\Lib\\Driver\\ExtendedDbDriver' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Driver/ExtendedDbDriver.php',
|
| 219 |
-
'Codeception\\Lib\\Driver\\ExtendedMySql' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Driver/ExtendedMySql.php',
|
| 220 |
-
'Codeception\\Lib\\Driver\\Facebook' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Facebook.php',
|
| 221 |
-
'Codeception\\Lib\\Driver\\Iron' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Iron.php',
|
| 222 |
-
'Codeception\\Lib\\Driver\\MongoDb' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/MongoDb.php',
|
| 223 |
-
'Codeception\\Lib\\Driver\\MySql' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/MySql.php',
|
| 224 |
-
'Codeception\\Lib\\Driver\\Oci' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Oci.php',
|
| 225 |
-
'Codeception\\Lib\\Driver\\PostgreSql' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/PostgreSql.php',
|
| 226 |
-
'Codeception\\Lib\\Driver\\SqlSrv' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/SqlSrv.php',
|
| 227 |
-
'Codeception\\Lib\\Driver\\Sqlite' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Driver/Sqlite.php',
|
| 228 |
-
'Codeception\\Lib\\Framework' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Framework.php',
|
| 229 |
-
'Codeception\\Lib\\Friend' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Friend.php',
|
| 230 |
-
'Codeception\\Lib\\Generator\\AbstractGenerator' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/AbstractGenerator.php',
|
| 231 |
-
'Codeception\\Lib\\Generator\\AcceptanceSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/AcceptanceSuiteConfig.php',
|
| 232 |
-
'Codeception\\Lib\\Generator\\Actions' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Actions.php',
|
| 233 |
-
'Codeception\\Lib\\Generator\\Actor' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Actor.php',
|
| 234 |
-
'Codeception\\Lib\\Generator\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Cept.php',
|
| 235 |
-
'Codeception\\Lib\\Generator\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Cest.php',
|
| 236 |
-
'Codeception\\Lib\\Generator\\Feature' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Feature.php',
|
| 237 |
-
'Codeception\\Lib\\Generator\\FunctionalSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/FunctionalSuiteConfig.php',
|
| 238 |
-
'Codeception\\Lib\\Generator\\GeneratorInterface' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/GeneratorInterface.php',
|
| 239 |
-
'Codeception\\Lib\\Generator\\GherkinSnippets' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/GherkinSnippets.php',
|
| 240 |
-
'Codeception\\Lib\\Generator\\Group' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Group.php',
|
| 241 |
-
'Codeception\\Lib\\Generator\\Helper' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Helper.php',
|
| 242 |
-
'Codeception\\Lib\\Generator\\IntegrationSuiteConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/IntegrationSuiteConfig.php',
|
| 243 |
-
'Codeception\\Lib\\Generator\\IntegrationSuiteThemeConfig' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/IntegrationSuiteThemeConfig.php',
|
| 244 |
-
'Codeception\\Lib\\Generator\\PageObject' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/PageObject.php',
|
| 245 |
-
'Codeception\\Lib\\Generator\\Shared\\Classname' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Shared/Classname.php',
|
| 246 |
-
'Codeception\\Lib\\Generator\\Snapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Snapshot.php',
|
| 247 |
-
'Codeception\\Lib\\Generator\\StepObject' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/StepObject.php',
|
| 248 |
-
'Codeception\\Lib\\Generator\\Test' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Generator/Test.php',
|
| 249 |
-
'Codeception\\Lib\\Generator\\WPUnit' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Lib/Generator/WPUnit.php',
|
| 250 |
-
'Codeception\\Lib\\GroupManager' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/GroupManager.php',
|
| 251 |
-
'Codeception\\Lib\\InnerBrowser' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/InnerBrowser.php',
|
| 252 |
-
'Codeception\\Lib\\Interfaces\\API' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/API.php',
|
| 253 |
-
'Codeception\\Lib\\Interfaces\\ActiveRecord' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ActiveRecord.php',
|
| 254 |
-
'Codeception\\Lib\\Interfaces\\ConflictsWithModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ConflictsWithModule.php',
|
| 255 |
-
'Codeception\\Lib\\Interfaces\\DataMapper' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DataMapper.php',
|
| 256 |
-
'Codeception\\Lib\\Interfaces\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Db.php',
|
| 257 |
-
'Codeception\\Lib\\Interfaces\\DependsOnModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DependsOnModule.php',
|
| 258 |
-
'Codeception\\Lib\\Interfaces\\DoctrineProvider' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/DoctrineProvider.php',
|
| 259 |
-
'Codeception\\Lib\\Interfaces\\ElementLocator' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ElementLocator.php',
|
| 260 |
-
'Codeception\\Lib\\Interfaces\\MultiSession' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/MultiSession.php',
|
| 261 |
-
'Codeception\\Lib\\Interfaces\\ORM' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ORM.php',
|
| 262 |
-
'Codeception\\Lib\\Interfaces\\PageSourceSaver' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/PageSourceSaver.php',
|
| 263 |
-
'Codeception\\Lib\\Interfaces\\PartedModule' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/PartedModule.php',
|
| 264 |
-
'Codeception\\Lib\\Interfaces\\Queue' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Queue.php',
|
| 265 |
-
'Codeception\\Lib\\Interfaces\\Remote' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Remote.php',
|
| 266 |
-
'Codeception\\Lib\\Interfaces\\RequiresPackage' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/RequiresPackage.php',
|
| 267 |
-
'Codeception\\Lib\\Interfaces\\ScreenshotSaver' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/ScreenshotSaver.php',
|
| 268 |
-
'Codeception\\Lib\\Interfaces\\SessionSnapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/SessionSnapshot.php',
|
| 269 |
-
'Codeception\\Lib\\Interfaces\\Web' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Interfaces/Web.php',
|
| 270 |
-
'Codeception\\Lib\\ModuleContainer' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/ModuleContainer.php',
|
| 271 |
-
'Codeception\\Lib\\Notification' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Notification.php',
|
| 272 |
-
'Codeception\\Lib\\ParamsLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/ParamsLoader.php',
|
| 273 |
-
'Codeception\\Lib\\Parser' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Parser.php',
|
| 274 |
-
'Codeception\\Lib\\Shared\\LaravelCommon' => $vendorDir . '/codeception/codeception/src/Codeception/Lib/Shared/LaravelCommon.php',
|
| 275 |
-
'Codeception\\Module' => $vendorDir . '/codeception/codeception/src/Codeception/Module.php',
|
| 276 |
-
'Codeception\\Module\\AMQP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/AMQP.php',
|
| 277 |
-
'Codeception\\Module\\AngularJS' => $vendorDir . '/codeception/codeception/src/Codeception/Module/AngularJS.php',
|
| 278 |
-
'Codeception\\Module\\Apc' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Apc.php',
|
| 279 |
-
'Codeception\\Module\\Asserts' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Asserts.php',
|
| 280 |
-
'Codeception\\Module\\Cli' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Cli.php',
|
| 281 |
-
'Codeception\\Module\\DataFactory' => $vendorDir . '/codeception/codeception/src/Codeception/Module/DataFactory.php',
|
| 282 |
-
'Codeception\\Module\\Db' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Db.php',
|
| 283 |
-
'Codeception\\Module\\Doctrine2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Doctrine2.php',
|
| 284 |
-
'Codeception\\Module\\FTP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/FTP.php',
|
| 285 |
-
'Codeception\\Module\\Facebook' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Facebook.php',
|
| 286 |
-
'Codeception\\Module\\Filesystem' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Filesystem.php',
|
| 287 |
-
'Codeception\\Module\\Laravel5' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Laravel5.php',
|
| 288 |
-
'Codeception\\Module\\Lumen' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Lumen.php',
|
| 289 |
-
'Codeception\\Module\\Memcache' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Memcache.php',
|
| 290 |
-
'Codeception\\Module\\MongoDb' => $vendorDir . '/codeception/codeception/src/Codeception/Module/MongoDb.php',
|
| 291 |
-
'Codeception\\Module\\Phalcon' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Phalcon.php',
|
| 292 |
-
'Codeception\\Module\\PhpBrowser' => $vendorDir . '/codeception/codeception/src/Codeception/Module/PhpBrowser.php',
|
| 293 |
-
'Codeception\\Module\\Queue' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Queue.php',
|
| 294 |
-
'Codeception\\Module\\REST' => $vendorDir . '/codeception/codeception/src/Codeception/Module/REST.php',
|
| 295 |
-
'Codeception\\Module\\Redis' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Redis.php',
|
| 296 |
-
'Codeception\\Module\\SOAP' => $vendorDir . '/codeception/codeception/src/Codeception/Module/SOAP.php',
|
| 297 |
-
'Codeception\\Module\\Sequence' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Sequence.php',
|
| 298 |
-
'Codeception\\Module\\Silex' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Silex.php',
|
| 299 |
-
'Codeception\\Module\\Symfony' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Symfony.php',
|
| 300 |
-
'Codeception\\Module\\WPBrowser' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPBrowser.php',
|
| 301 |
-
'Codeception\\Module\\WPBrowserMethods' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPBrowserMethods.php',
|
| 302 |
-
'Codeception\\Module\\WPCLI' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPCLI.php',
|
| 303 |
-
'Codeception\\Module\\WPDb' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPDb.php',
|
| 304 |
-
'Codeception\\Module\\WPFilesystem' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPFilesystem.php',
|
| 305 |
-
'Codeception\\Module\\WPLoader' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPLoader.php',
|
| 306 |
-
'Codeception\\Module\\WPQueries' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPQueries.php',
|
| 307 |
-
'Codeception\\Module\\WPWebDriver' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WPWebDriver.php',
|
| 308 |
-
'Codeception\\Module\\WebDriver' => $vendorDir . '/codeception/codeception/src/Codeception/Module/WebDriver.php',
|
| 309 |
-
'Codeception\\Module\\WordPress' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Module/WordPress.php',
|
| 310 |
-
'Codeception\\Module\\XMLRPC' => $vendorDir . '/codeception/codeception/src/Codeception/Module/XMLRPC.php',
|
| 311 |
-
'Codeception\\Module\\Yii1' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Yii1.php',
|
| 312 |
-
'Codeception\\Module\\Yii2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/Yii2.php',
|
| 313 |
-
'Codeception\\Module\\ZF1' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZF1.php',
|
| 314 |
-
'Codeception\\Module\\ZF2' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZF2.php',
|
| 315 |
-
'Codeception\\Module\\ZendExpressive' => $vendorDir . '/codeception/codeception/src/Codeception/Module/ZendExpressive.php',
|
| 316 |
-
'Codeception\\PHPUnit\\ConsolePrinter' => $vendorDir . '/codeception/phpunit-wrapper/src/ConsolePrinter.php',
|
| 317 |
-
'Codeception\\PHPUnit\\Constraint\\Crawler' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/Crawler.php',
|
| 318 |
-
'Codeception\\PHPUnit\\Constraint\\CrawlerNot' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/CrawlerNot.php',
|
| 319 |
-
'Codeception\\PHPUnit\\Constraint\\JsonContains' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/JsonContains.php',
|
| 320 |
-
'Codeception\\PHPUnit\\Constraint\\JsonType' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/JsonType.php',
|
| 321 |
-
'Codeception\\PHPUnit\\Constraint\\Page' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/Page.php',
|
| 322 |
-
'Codeception\\PHPUnit\\Constraint\\WebDriver' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/WebDriver.php',
|
| 323 |
-
'Codeception\\PHPUnit\\Constraint\\WebDriverNot' => $vendorDir . '/codeception/phpunit-wrapper/src/Constraint/WebDriverNot.php',
|
| 324 |
-
'Codeception\\PHPUnit\\FilterTest' => $vendorDir . '/codeception/phpunit-wrapper/src/FilterTest.php',
|
| 325 |
-
'Codeception\\PHPUnit\\Init' => $vendorDir . '/codeception/phpunit-wrapper/src/Init.php',
|
| 326 |
-
'Codeception\\PHPUnit\\Listener' => $vendorDir . '/codeception/phpunit-wrapper/src/Listener.php',
|
| 327 |
-
'Codeception\\PHPUnit\\Log\\JUnit' => $vendorDir . '/codeception/phpunit-wrapper/src/Log/JUnit.php',
|
| 328 |
-
'Codeception\\PHPUnit\\Log\\PhpUnit' => $vendorDir . '/codeception/phpunit-wrapper/src/Log/PhpUnit.php',
|
| 329 |
-
'Codeception\\PHPUnit\\ResultPrinter' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter.php',
|
| 330 |
-
'Codeception\\PHPUnit\\ResultPrinter\\HTML' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/HTML.php',
|
| 331 |
-
'Codeception\\PHPUnit\\ResultPrinter\\Report' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/Report.php',
|
| 332 |
-
'Codeception\\PHPUnit\\ResultPrinter\\UI' => $vendorDir . '/codeception/phpunit-wrapper/src/ResultPrinter/UI.php',
|
| 333 |
-
'Codeception\\PHPUnit\\Runner' => $vendorDir . '/codeception/phpunit-wrapper/src/Runner.php',
|
| 334 |
-
'Codeception\\PHPUnit\\TestCase' => $vendorDir . '/codeception/phpunit-wrapper/src/TestCase.php',
|
| 335 |
-
'Codeception\\Scenario' => $vendorDir . '/codeception/codeception/src/Codeception/Scenario.php',
|
| 336 |
-
'Codeception\\Snapshot' => $vendorDir . '/codeception/codeception/src/Codeception/Snapshot.php',
|
| 337 |
-
'Codeception\\Step' => $vendorDir . '/codeception/codeception/src/Codeception/Step.php',
|
| 338 |
-
'Codeception\\Step\\Action' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Action.php',
|
| 339 |
-
'Codeception\\Step\\Argument\\FormattedOutput' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Argument/FormattedOutput.php',
|
| 340 |
-
'Codeception\\Step\\Argument\\PasswordArgument' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Argument/PasswordArgument.php',
|
| 341 |
-
'Codeception\\Step\\Assertion' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Assertion.php',
|
| 342 |
-
'Codeception\\Step\\Comment' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Comment.php',
|
| 343 |
-
'Codeception\\Step\\Condition' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Condition.php',
|
| 344 |
-
'Codeception\\Step\\ConditionalAssertion' => $vendorDir . '/codeception/codeception/src/Codeception/Step/ConditionalAssertion.php',
|
| 345 |
-
'Codeception\\Step\\Executor' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Executor.php',
|
| 346 |
-
'Codeception\\Step\\Incomplete' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Incomplete.php',
|
| 347 |
-
'Codeception\\Step\\Meta' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Meta.php',
|
| 348 |
-
'Codeception\\Step\\Skip' => $vendorDir . '/codeception/codeception/src/Codeception/Step/Skip.php',
|
| 349 |
-
'Codeception\\Stub' => $vendorDir . '/codeception/stub/src/Stub.php',
|
| 350 |
-
'Codeception\\Stub\\ConsecutiveMap' => $vendorDir . '/codeception/stub/src/Stub/ConsecutiveMap.php',
|
| 351 |
-
'Codeception\\Stub\\Expected' => $vendorDir . '/codeception/stub/src/Stub/Expected.php',
|
| 352 |
-
'Codeception\\Stub\\StubMarshaler' => $vendorDir . '/codeception/stub/src/Stub/StubMarshaler.php',
|
| 353 |
-
'Codeception\\Subscriber\\AutoRebuild' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/AutoRebuild.php',
|
| 354 |
-
'Codeception\\Subscriber\\BeforeAfterTest' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/BeforeAfterTest.php',
|
| 355 |
-
'Codeception\\Subscriber\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Bootstrap.php',
|
| 356 |
-
'Codeception\\Subscriber\\Console' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Console.php',
|
| 357 |
-
'Codeception\\Subscriber\\Dependencies' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Dependencies.php',
|
| 358 |
-
'Codeception\\Subscriber\\ErrorHandler' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/ErrorHandler.php',
|
| 359 |
-
'Codeception\\Subscriber\\ExtensionLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/ExtensionLoader.php',
|
| 360 |
-
'Codeception\\Subscriber\\FailFast' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/FailFast.php',
|
| 361 |
-
'Codeception\\Subscriber\\GracefulTermination' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/GracefulTermination.php',
|
| 362 |
-
'Codeception\\Subscriber\\Module' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Module.php',
|
| 363 |
-
'Codeception\\Subscriber\\PrepareTest' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/PrepareTest.php',
|
| 364 |
-
'Codeception\\Subscriber\\Shared\\StaticEvents' => $vendorDir . '/codeception/codeception/src/Codeception/Subscriber/Shared/StaticEvents.php',
|
| 365 |
-
'Codeception\\Suite' => $vendorDir . '/codeception/codeception/src/Codeception/Suite.php',
|
| 366 |
-
'Codeception\\SuiteManager' => $vendorDir . '/codeception/codeception/src/Codeception/SuiteManager.php',
|
| 367 |
-
'Codeception\\Template\\Acceptance' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Acceptance.php',
|
| 368 |
-
'Codeception\\Template\\Api' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Api.php',
|
| 369 |
-
'Codeception\\Template\\Bootstrap' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Bootstrap.php',
|
| 370 |
-
'Codeception\\Template\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Template/Unit.php',
|
| 371 |
-
'Codeception\\Template\\Wpbrowser' => $vendorDir . '/lucatume/wp-browser/src/Codeception/Template/Wpbrowser.php',
|
| 372 |
-
'Codeception\\TestCase\\WPAjaxTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPAjaxTestCase.php',
|
| 373 |
-
'Codeception\\TestCase\\WPCanonicalTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPCanonicalTestCase.php',
|
| 374 |
-
'Codeception\\TestCase\\WPRestApiTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestApiTestCase.php',
|
| 375 |
-
'Codeception\\TestCase\\WPRestControllerTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestControllerTestCase.php',
|
| 376 |
-
'Codeception\\TestCase\\WPRestPostTypeControllerTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPRestPostTypeControllerTestCase.php',
|
| 377 |
-
'Codeception\\TestCase\\WPTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPTestCase.php',
|
| 378 |
-
'Codeception\\TestCase\\WPXMLRPCTestCase' => $vendorDir . '/lucatume/wp-browser/src/Codeception/TestCase/WPXMLRPCTestCase.php',
|
| 379 |
-
'Codeception\\TestInterface' => $vendorDir . '/codeception/codeception/src/Codeception/TestInterface.php',
|
| 380 |
-
'Codeception\\Test\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Cept.php',
|
| 381 |
-
'Codeception\\Test\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Cest.php',
|
| 382 |
-
'Codeception\\Test\\Descriptor' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Descriptor.php',
|
| 383 |
-
'Codeception\\Test\\Feature\\AssertionCounter' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/AssertionCounter.php',
|
| 384 |
-
'Codeception\\Test\\Feature\\CodeCoverage' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/CodeCoverage.php',
|
| 385 |
-
'Codeception\\Test\\Feature\\ErrorLogger' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/ErrorLogger.php',
|
| 386 |
-
'Codeception\\Test\\Feature\\IgnoreIfMetadataBlocked' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/IgnoreIfMetadataBlocked.php',
|
| 387 |
-
'Codeception\\Test\\Feature\\MetadataCollector' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/MetadataCollector.php',
|
| 388 |
-
'Codeception\\Test\\Feature\\ScenarioLoader' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Feature/ScenarioLoader.php',
|
| 389 |
-
'Codeception\\Test\\Feature\\Stub' => $vendorDir . '/codeception/stub/src/Test/Feature/Stub.php',
|
| 390 |
-
'Codeception\\Test\\Gherkin' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Gherkin.php',
|
| 391 |
-
'Codeception\\Test\\Interfaces\\Dependent' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Dependent.php',
|
| 392 |
-
'Codeception\\Test\\Interfaces\\Descriptive' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Descriptive.php',
|
| 393 |
-
'Codeception\\Test\\Interfaces\\Plain' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Plain.php',
|
| 394 |
-
'Codeception\\Test\\Interfaces\\Reported' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/Reported.php',
|
| 395 |
-
'Codeception\\Test\\Interfaces\\ScenarioDriven' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/ScenarioDriven.php',
|
| 396 |
-
'Codeception\\Test\\Interfaces\\StrictCoverage' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Interfaces/StrictCoverage.php',
|
| 397 |
-
'Codeception\\Test\\Loader' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader.php',
|
| 398 |
-
'Codeception\\Test\\Loader\\Cept' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Cept.php',
|
| 399 |
-
'Codeception\\Test\\Loader\\Cest' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Cest.php',
|
| 400 |
-
'Codeception\\Test\\Loader\\Gherkin' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Gherkin.php',
|
| 401 |
-
'Codeception\\Test\\Loader\\LoaderInterface' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/LoaderInterface.php',
|
| 402 |
-
'Codeception\\Test\\Loader\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Loader/Unit.php',
|
| 403 |
-
'Codeception\\Test\\Metadata' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Metadata.php',
|
| 404 |
-
'Codeception\\Test\\Test' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Test.php',
|
| 405 |
-
'Codeception\\Test\\Unit' => $vendorDir . '/codeception/codeception/src/Codeception/Test/Unit.php',
|
| 406 |
-
'Codeception\\Util\\ActionSequence' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ActionSequence.php',
|
| 407 |
-
'Codeception\\Util\\Annotation' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Annotation.php',
|
| 408 |
-
'Codeception\\Util\\ArrayContainsComparator' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ArrayContainsComparator.php',
|
| 409 |
-
'Codeception\\Util\\Autoload' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Autoload.php',
|
| 410 |
-
'Codeception\\Util\\Debug' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Debug.php',
|
| 411 |
-
'Codeception\\Util\\FileSystem' => $vendorDir . '/codeception/codeception/src/Codeception/Util/FileSystem.php',
|
| 412 |
-
'Codeception\\Util\\Fixtures' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Fixtures.php',
|
| 413 |
-
'Codeception\\Util\\HttpCode' => $vendorDir . '/codeception/codeception/src/Codeception/Util/HttpCode.php',
|
| 414 |
-
'Codeception\\Util\\JsonArray' => $vendorDir . '/codeception/codeception/src/Codeception/Util/JsonArray.php',
|
| 415 |
-
'Codeception\\Util\\JsonType' => $vendorDir . '/codeception/codeception/src/Codeception/Util/JsonType.php',
|
| 416 |
-
'Codeception\\Util\\Locator' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Locator.php',
|
| 417 |
-
'Codeception\\Util\\Maybe' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Maybe.php',
|
| 418 |
-
'Codeception\\Util\\PathResolver' => $vendorDir . '/codeception/codeception/src/Codeception/Util/PathResolver.php',
|
| 419 |
-
'Codeception\\Util\\PropertyAccess' => $vendorDir . '/codeception/codeception/src/Codeception/Util/PropertyAccess.php',
|
| 420 |
-
'Codeception\\Util\\ReflectionHelper' => $vendorDir . '/codeception/codeception/src/Codeception/Util/ReflectionHelper.php',
|
| 421 |
-
'Codeception\\Util\\Shared\\Asserts' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Shared/Asserts.php',
|
| 422 |
-
'Codeception\\Util\\Shared\\Namespaces' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Shared/Namespaces.php',
|
| 423 |
-
'Codeception\\Util\\Soap' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Soap.php',
|
| 424 |
-
'Codeception\\Util\\Stub' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Stub.php',
|
| 425 |
-
'Codeception\\Util\\Template' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Template.php',
|
| 426 |
-
'Codeception\\Util\\Uri' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Uri.php',
|
| 427 |
-
'Codeception\\Util\\Xml' => $vendorDir . '/codeception/codeception/src/Codeception/Util/Xml.php',
|
| 428 |
-
'Codeception\\Util\\XmlBuilder' => $vendorDir . '/codeception/codeception/src/Codeception/Util/XmlBuilder.php',
|
| 429 |
-
'Codeception\\Util\\XmlStructure' => $vendorDir . '/codeception/codeception/src/Codeception/Util/XmlStructure.php',
|
| 430 |
-
'Composer\\Autoload\\AutoloadGenerator' => $vendorDir . '/composer/composer/src/Composer/Autoload/AutoloadGenerator.php',
|
| 431 |
-
'Composer\\Autoload\\ClassLoader' => $vendorDir . '/composer/composer/src/Composer/Autoload/ClassLoader.php',
|
| 432 |
-
'Composer\\Autoload\\ClassMapGenerator' => $vendorDir . '/composer/composer/src/Composer/Autoload/ClassMapGenerator.php',
|
| 433 |
-
'Composer\\CaBundle\\CaBundle' => $vendorDir . '/composer/ca-bundle/src/CaBundle.php',
|
| 434 |
-
'Composer\\Cache' => $vendorDir . '/composer/composer/src/Composer/Cache.php',
|
| 435 |
-
'Composer\\Command\\AboutCommand' => $vendorDir . '/composer/composer/src/Composer/Command/AboutCommand.php',
|
| 436 |
-
'Composer\\Command\\ArchiveCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ArchiveCommand.php',
|
| 437 |
-
'Composer\\Command\\BaseCommand' => $vendorDir . '/composer/composer/src/Composer/Command/BaseCommand.php',
|
| 438 |
-
'Composer\\Command\\BaseDependencyCommand' => $vendorDir . '/composer/composer/src/Composer/Command/BaseDependencyCommand.php',
|
| 439 |
-
'Composer\\Command\\CheckPlatformReqsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/CheckPlatformReqsCommand.php',
|
| 440 |
-
'Composer\\Command\\ClearCacheCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ClearCacheCommand.php',
|
| 441 |
-
'Composer\\Command\\ConfigCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ConfigCommand.php',
|
| 442 |
-
'Composer\\Command\\CreateProjectCommand' => $vendorDir . '/composer/composer/src/Composer/Command/CreateProjectCommand.php',
|
| 443 |
-
'Composer\\Command\\DependsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DependsCommand.php',
|
| 444 |
-
'Composer\\Command\\DiagnoseCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DiagnoseCommand.php',
|
| 445 |
-
'Composer\\Command\\DumpAutoloadCommand' => $vendorDir . '/composer/composer/src/Composer/Command/DumpAutoloadCommand.php',
|
| 446 |
-
'Composer\\Command\\ExecCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ExecCommand.php',
|
| 447 |
-
'Composer\\Command\\GlobalCommand' => $vendorDir . '/composer/composer/src/Composer/Command/GlobalCommand.php',
|
| 448 |
-
'Composer\\Command\\HomeCommand' => $vendorDir . '/composer/composer/src/Composer/Command/HomeCommand.php',
|
| 449 |
-
'Composer\\Command\\InitCommand' => $vendorDir . '/composer/composer/src/Composer/Command/InitCommand.php',
|
| 450 |
-
'Composer\\Command\\InstallCommand' => $vendorDir . '/composer/composer/src/Composer/Command/InstallCommand.php',
|
| 451 |
-
'Composer\\Command\\LicensesCommand' => $vendorDir . '/composer/composer/src/Composer/Command/LicensesCommand.php',
|
| 452 |
-
'Composer\\Command\\OutdatedCommand' => $vendorDir . '/composer/composer/src/Composer/Command/OutdatedCommand.php',
|
| 453 |
-
'Composer\\Command\\ProhibitsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ProhibitsCommand.php',
|
| 454 |
-
'Composer\\Command\\RemoveCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RemoveCommand.php',
|
| 455 |
-
'Composer\\Command\\RequireCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RequireCommand.php',
|
| 456 |
-
'Composer\\Command\\RunScriptCommand' => $vendorDir . '/composer/composer/src/Composer/Command/RunScriptCommand.php',
|
| 457 |
-
'Composer\\Command\\ScriptAliasCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ScriptAliasCommand.php',
|
| 458 |
-
'Composer\\Command\\SearchCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SearchCommand.php',
|
| 459 |
-
'Composer\\Command\\SelfUpdateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SelfUpdateCommand.php',
|
| 460 |
-
'Composer\\Command\\ShowCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ShowCommand.php',
|
| 461 |
-
'Composer\\Command\\StatusCommand' => $vendorDir . '/composer/composer/src/Composer/Command/StatusCommand.php',
|
| 462 |
-
'Composer\\Command\\SuggestsCommand' => $vendorDir . '/composer/composer/src/Composer/Command/SuggestsCommand.php',
|
| 463 |
-
'Composer\\Command\\UpdateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/UpdateCommand.php',
|
| 464 |
-
'Composer\\Command\\ValidateCommand' => $vendorDir . '/composer/composer/src/Composer/Command/ValidateCommand.php',
|
| 465 |
-
'Composer\\Compiler' => $vendorDir . '/composer/composer/src/Composer/Compiler.php',
|
| 466 |
-
'Composer\\Composer' => $vendorDir . '/composer/composer/src/Composer/Composer.php',
|
| 467 |
-
'Composer\\Config' => $vendorDir . '/composer/composer/src/Composer/Config.php',
|
| 468 |
-
'Composer\\Config\\ConfigSourceInterface' => $vendorDir . '/composer/composer/src/Composer/Config/ConfigSourceInterface.php',
|
| 469 |
-
'Composer\\Config\\JsonConfigSource' => $vendorDir . '/composer/composer/src/Composer/Config/JsonConfigSource.php',
|
| 470 |
-
'Composer\\Console\\Application' => $vendorDir . '/composer/composer/src/Composer/Console/Application.php',
|
| 471 |
-
'Composer\\Console\\HtmlOutputFormatter' => $vendorDir . '/composer/composer/src/Composer/Console/HtmlOutputFormatter.php',
|
| 472 |
-
'Composer\\DependencyResolver\\Decisions' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Decisions.php',
|
| 473 |
-
'Composer\\DependencyResolver\\DefaultPolicy' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/DefaultPolicy.php',
|
| 474 |
-
'Composer\\DependencyResolver\\GenericRule' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/GenericRule.php',
|
| 475 |
-
'Composer\\DependencyResolver\\Operation\\InstallOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/InstallOperation.php',
|
| 476 |
-
'Composer\\DependencyResolver\\Operation\\MarkAliasInstalledOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php',
|
| 477 |
-
'Composer\\DependencyResolver\\Operation\\MarkAliasUninstalledOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.php',
|
| 478 |
-
'Composer\\DependencyResolver\\Operation\\OperationInterface' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/OperationInterface.php',
|
| 479 |
-
'Composer\\DependencyResolver\\Operation\\SolverOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/SolverOperation.php',
|
| 480 |
-
'Composer\\DependencyResolver\\Operation\\UninstallOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/UninstallOperation.php',
|
| 481 |
-
'Composer\\DependencyResolver\\Operation\\UpdateOperation' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Operation/UpdateOperation.php',
|
| 482 |
-
'Composer\\DependencyResolver\\PolicyInterface' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/PolicyInterface.php',
|
| 483 |
-
'Composer\\DependencyResolver\\Pool' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Pool.php',
|
| 484 |
-
'Composer\\DependencyResolver\\Problem' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Problem.php',
|
| 485 |
-
'Composer\\DependencyResolver\\Request' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Request.php',
|
| 486 |
-
'Composer\\DependencyResolver\\Rule' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Rule.php',
|
| 487 |
-
'Composer\\DependencyResolver\\Rule2Literals' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Rule2Literals.php',
|
| 488 |
-
'Composer\\DependencyResolver\\RuleSet' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSet.php',
|
| 489 |
-
'Composer\\DependencyResolver\\RuleSetGenerator' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSetGenerator.php',
|
| 490 |
-
'Composer\\DependencyResolver\\RuleSetIterator' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleSetIterator.php',
|
| 491 |
-
'Composer\\DependencyResolver\\RuleWatchChain' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchChain.php',
|
| 492 |
-
'Composer\\DependencyResolver\\RuleWatchGraph' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchGraph.php',
|
| 493 |
-
'Composer\\DependencyResolver\\RuleWatchNode' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/RuleWatchNode.php',
|
| 494 |
-
'Composer\\DependencyResolver\\Solver' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Solver.php',
|
| 495 |
-
'Composer\\DependencyResolver\\SolverBugException' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/SolverBugException.php',
|
| 496 |
-
'Composer\\DependencyResolver\\SolverProblemsException' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/SolverProblemsException.php',
|
| 497 |
-
'Composer\\DependencyResolver\\Transaction' => $vendorDir . '/composer/composer/src/Composer/DependencyResolver/Transaction.php',
|
| 498 |
-
'Composer\\Downloader\\ArchiveDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/ArchiveDownloader.php',
|
| 499 |
-
'Composer\\Downloader\\ChangeReportInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/ChangeReportInterface.php',
|
| 500 |
-
'Composer\\Downloader\\DownloadManager' => $vendorDir . '/composer/composer/src/Composer/Downloader/DownloadManager.php',
|
| 501 |
-
'Composer\\Downloader\\DownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/DownloaderInterface.php',
|
| 502 |
-
'Composer\\Downloader\\DvcsDownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/DvcsDownloaderInterface.php',
|
| 503 |
-
'Composer\\Downloader\\FileDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/FileDownloader.php',
|
| 504 |
-
'Composer\\Downloader\\FilesystemException' => $vendorDir . '/composer/composer/src/Composer/Downloader/FilesystemException.php',
|
| 505 |
-
'Composer\\Downloader\\FossilDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/FossilDownloader.php',
|
| 506 |
-
'Composer\\Downloader\\GitDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/GitDownloader.php',
|
| 507 |
-
'Composer\\Downloader\\GzipDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/GzipDownloader.php',
|
| 508 |
-
'Composer\\Downloader\\HgDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/HgDownloader.php',
|
| 509 |
-
'Composer\\Downloader\\PathDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PathDownloader.php',
|
| 510 |
-
'Composer\\Downloader\\PearPackageExtractor' => $vendorDir . '/composer/composer/src/Composer/Downloader/PearPackageExtractor.php',
|
| 511 |
-
'Composer\\Downloader\\PerforceDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PerforceDownloader.php',
|
| 512 |
-
'Composer\\Downloader\\PharDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/PharDownloader.php',
|
| 513 |
-
'Composer\\Downloader\\RarDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/RarDownloader.php',
|
| 514 |
-
'Composer\\Downloader\\SvnDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/SvnDownloader.php',
|
| 515 |
-
'Composer\\Downloader\\TarDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/TarDownloader.php',
|
| 516 |
-
'Composer\\Downloader\\TransportException' => $vendorDir . '/composer/composer/src/Composer/Downloader/TransportException.php',
|
| 517 |
-
'Composer\\Downloader\\VcsCapableDownloaderInterface' => $vendorDir . '/composer/composer/src/Composer/Downloader/VcsCapableDownloaderInterface.php',
|
| 518 |
-
'Composer\\Downloader\\VcsDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/VcsDownloader.php',
|
| 519 |
-
'Composer\\Downloader\\XzDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/XzDownloader.php',
|
| 520 |
-
'Composer\\Downloader\\ZipDownloader' => $vendorDir . '/composer/composer/src/Composer/Downloader/ZipDownloader.php',
|
| 521 |
-
'Composer\\EventDispatcher\\Event' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/Event.php',
|
| 522 |
-
'Composer\\EventDispatcher\\EventDispatcher' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/EventDispatcher.php',
|
| 523 |
-
'Composer\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/EventSubscriberInterface.php',
|
| 524 |
-
'Composer\\EventDispatcher\\ScriptExecutionException' => $vendorDir . '/composer/composer/src/Composer/EventDispatcher/ScriptExecutionException.php',
|
| 525 |
-
'Composer\\Exception\\NoSslException' => $vendorDir . '/composer/composer/src/Composer/Exception/NoSslException.php',
|
| 526 |
-
'Composer\\Factory' => $vendorDir . '/composer/composer/src/Composer/Factory.php',
|
| 527 |
-
'Composer\\IO\\BaseIO' => $vendorDir . '/composer/composer/src/Composer/IO/BaseIO.php',
|
| 528 |
-
'Composer\\IO\\BufferIO' => $vendorDir . '/composer/composer/src/Composer/IO/BufferIO.php',
|
| 529 |
-
'Composer\\IO\\ConsoleIO' => $vendorDir . '/composer/composer/src/Composer/IO/ConsoleIO.php',
|
| 530 |
-
'Composer\\IO\\IOInterface' => $vendorDir . '/composer/composer/src/Composer/IO/IOInterface.php',
|
| 531 |
-
'Composer\\IO\\NullIO' => $vendorDir . '/composer/composer/src/Composer/IO/NullIO.php',
|
| 532 |
-
'Composer\\Installer' => $vendorDir . '/composer/composer/src/Composer/Installer.php',
|
| 533 |
-
'Composer\\Installer\\BinaryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/BinaryInstaller.php',
|
| 534 |
-
'Composer\\Installer\\BinaryPresenceInterface' => $vendorDir . '/composer/composer/src/Composer/Installer/BinaryPresenceInterface.php',
|
| 535 |
-
'Composer\\Installer\\InstallationManager' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallationManager.php',
|
| 536 |
-
'Composer\\Installer\\InstallerEvent' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerEvent.php',
|
| 537 |
-
'Composer\\Installer\\InstallerEvents' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerEvents.php',
|
| 538 |
-
'Composer\\Installer\\InstallerInterface' => $vendorDir . '/composer/composer/src/Composer/Installer/InstallerInterface.php',
|
| 539 |
-
'Composer\\Installer\\LibraryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/LibraryInstaller.php',
|
| 540 |
-
'Composer\\Installer\\MetapackageInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/MetapackageInstaller.php',
|
| 541 |
-
'Composer\\Installer\\NoopInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/NoopInstaller.php',
|
| 542 |
-
'Composer\\Installer\\PackageEvent' => $vendorDir . '/composer/composer/src/Composer/Installer/PackageEvent.php',
|
| 543 |
-
'Composer\\Installer\\PackageEvents' => $vendorDir . '/composer/composer/src/Composer/Installer/PackageEvents.php',
|
| 544 |
-
'Composer\\Installer\\PearBinaryInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PearBinaryInstaller.php',
|
| 545 |
-
'Composer\\Installer\\PearInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PearInstaller.php',
|
| 546 |
-
'Composer\\Installer\\PluginInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/PluginInstaller.php',
|
| 547 |
-
'Composer\\Installer\\ProjectInstaller' => $vendorDir . '/composer/composer/src/Composer/Installer/ProjectInstaller.php',
|
| 548 |
-
'Composer\\Installer\\SuggestedPackagesReporter' => $vendorDir . '/composer/composer/src/Composer/Installer/SuggestedPackagesReporter.php',
|
| 549 |
-
'Composer\\Json\\JsonFile' => $vendorDir . '/composer/composer/src/Composer/Json/JsonFile.php',
|
| 550 |
-
'Composer\\Json\\JsonFormatter' => $vendorDir . '/composer/composer/src/Composer/Json/JsonFormatter.php',
|
| 551 |
-
'Composer\\Json\\JsonManipulator' => $vendorDir . '/composer/composer/src/Composer/Json/JsonManipulator.php',
|
| 552 |
-
'Composer\\Json\\JsonValidationException' => $vendorDir . '/composer/composer/src/Composer/Json/JsonValidationException.php',
|
| 553 |
-
'Composer\\Package\\AliasPackage' => $vendorDir . '/composer/composer/src/Composer/Package/AliasPackage.php',
|
| 554 |
-
'Composer\\Package\\Archiver\\ArchivableFilesFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFilter.php',
|
| 555 |
-
'Composer\\Package\\Archiver\\ArchivableFilesFinder' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchivableFilesFinder.php',
|
| 556 |
-
'Composer\\Package\\Archiver\\ArchiveManager' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchiveManager.php',
|
| 557 |
-
'Composer\\Package\\Archiver\\ArchiverInterface' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ArchiverInterface.php',
|
| 558 |
-
'Composer\\Package\\Archiver\\BaseExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/BaseExcludeFilter.php',
|
| 559 |
-
'Composer\\Package\\Archiver\\ComposerExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ComposerExcludeFilter.php',
|
| 560 |
-
'Composer\\Package\\Archiver\\GitExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/GitExcludeFilter.php',
|
| 561 |
-
'Composer\\Package\\Archiver\\HgExcludeFilter' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/HgExcludeFilter.php',
|
| 562 |
-
'Composer\\Package\\Archiver\\PharArchiver' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/PharArchiver.php',
|
| 563 |
-
'Composer\\Package\\Archiver\\ZipArchiver' => $vendorDir . '/composer/composer/src/Composer/Package/Archiver/ZipArchiver.php',
|
| 564 |
-
'Composer\\Package\\BasePackage' => $vendorDir . '/composer/composer/src/Composer/Package/BasePackage.php',
|
| 565 |
-
'Composer\\Package\\Comparer\\Comparer' => $vendorDir . '/composer/composer/src/Composer/Package/Comparer/Comparer.php',
|
| 566 |
-
'Composer\\Package\\CompletePackage' => $vendorDir . '/composer/composer/src/Composer/Package/CompletePackage.php',
|
| 567 |
-
'Composer\\Package\\CompletePackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/CompletePackageInterface.php',
|
| 568 |
-
'Composer\\Package\\Dumper\\ArrayDumper' => $vendorDir . '/composer/composer/src/Composer/Package/Dumper/ArrayDumper.php',
|
| 569 |
-
'Composer\\Package\\Link' => $vendorDir . '/composer/composer/src/Composer/Package/Link.php',
|
| 570 |
-
'Composer\\Package\\LinkConstraint\\EmptyConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/EmptyConstraint.php',
|
| 571 |
-
'Composer\\Package\\LinkConstraint\\LinkConstraintInterface' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/LinkConstraintInterface.php',
|
| 572 |
-
'Composer\\Package\\LinkConstraint\\MultiConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/MultiConstraint.php',
|
| 573 |
-
'Composer\\Package\\LinkConstraint\\SpecificConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/SpecificConstraint.php',
|
| 574 |
-
'Composer\\Package\\LinkConstraint\\VersionConstraint' => $vendorDir . '/composer/composer/src/Composer/Package/LinkConstraint/VersionConstraint.php',
|
| 575 |
-
'Composer\\Package\\Loader\\ArrayLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/ArrayLoader.php',
|
| 576 |
-
'Composer\\Package\\Loader\\InvalidPackageException' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/InvalidPackageException.php',
|
| 577 |
-
'Composer\\Package\\Loader\\JsonLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/JsonLoader.php',
|
| 578 |
-
'Composer\\Package\\Loader\\LoaderInterface' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/LoaderInterface.php',
|
| 579 |
-
'Composer\\Package\\Loader\\RootPackageLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/RootPackageLoader.php',
|
| 580 |
-
'Composer\\Package\\Loader\\ValidatingArrayLoader' => $vendorDir . '/composer/composer/src/Composer/Package/Loader/ValidatingArrayLoader.php',
|
| 581 |
-
'Composer\\Package\\Locker' => $vendorDir . '/composer/composer/src/Composer/Package/Locker.php',
|
| 582 |
-
'Composer\\Package\\Package' => $vendorDir . '/composer/composer/src/Composer/Package/Package.php',
|
| 583 |
-
'Composer\\Package\\PackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/PackageInterface.php',
|
| 584 |
-
'Composer\\Package\\RootAliasPackage' => $vendorDir . '/composer/composer/src/Composer/Package/RootAliasPackage.php',
|
| 585 |
-
'Composer\\Package\\RootPackage' => $vendorDir . '/composer/composer/src/Composer/Package/RootPackage.php',
|
| 586 |
-
'Composer\\Package\\RootPackageInterface' => $vendorDir . '/composer/composer/src/Composer/Package/RootPackageInterface.php',
|
| 587 |
-
'Composer\\Package\\Version\\VersionGuesser' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionGuesser.php',
|
| 588 |
-
'Composer\\Package\\Version\\VersionParser' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionParser.php',
|
| 589 |
-
'Composer\\Package\\Version\\VersionSelector' => $vendorDir . '/composer/composer/src/Composer/Package/Version/VersionSelector.php',
|
| 590 |
-
'Composer\\Plugin\\Capability\\Capability' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capability/Capability.php',
|
| 591 |
-
'Composer\\Plugin\\Capability\\CommandProvider' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capability/CommandProvider.php',
|
| 592 |
-
'Composer\\Plugin\\Capable' => $vendorDir . '/composer/composer/src/Composer/Plugin/Capable.php',
|
| 593 |
-
'Composer\\Plugin\\CommandEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/CommandEvent.php',
|
| 594 |
-
'Composer\\Plugin\\PluginEvents' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginEvents.php',
|
| 595 |
-
'Composer\\Plugin\\PluginInterface' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginInterface.php',
|
| 596 |
-
'Composer\\Plugin\\PluginManager' => $vendorDir . '/composer/composer/src/Composer/Plugin/PluginManager.php',
|
| 597 |
-
'Composer\\Plugin\\PreCommandRunEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/PreCommandRunEvent.php',
|
| 598 |
-
'Composer\\Plugin\\PreFileDownloadEvent' => $vendorDir . '/composer/composer/src/Composer/Plugin/PreFileDownloadEvent.php',
|
| 599 |
-
'Composer\\Question\\StrictConfirmationQuestion' => $vendorDir . '/composer/composer/src/Composer/Question/StrictConfirmationQuestion.php',
|
| 600 |
-
'Composer\\Repository\\ArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ArrayRepository.php',
|
| 601 |
-
'Composer\\Repository\\ArtifactRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ArtifactRepository.php',
|
| 602 |
-
'Composer\\Repository\\BaseRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/BaseRepository.php',
|
| 603 |
-
'Composer\\Repository\\ComposerRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/ComposerRepository.php',
|
| 604 |
-
'Composer\\Repository\\CompositeRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/CompositeRepository.php',
|
| 605 |
-
'Composer\\Repository\\ConfigurableRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/ConfigurableRepositoryInterface.php',
|
| 606 |
-
'Composer\\Repository\\FilesystemRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/FilesystemRepository.php',
|
| 607 |
-
'Composer\\Repository\\InstalledArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledArrayRepository.php',
|
| 608 |
-
'Composer\\Repository\\InstalledFilesystemRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledFilesystemRepository.php',
|
| 609 |
-
'Composer\\Repository\\InstalledRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/InstalledRepositoryInterface.php',
|
| 610 |
-
'Composer\\Repository\\InvalidRepositoryException' => $vendorDir . '/composer/composer/src/Composer/Repository/InvalidRepositoryException.php',
|
| 611 |
-
'Composer\\Repository\\PackageRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PackageRepository.php',
|
| 612 |
-
'Composer\\Repository\\PathRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PathRepository.php',
|
| 613 |
-
'Composer\\Repository\\PearRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PearRepository.php',
|
| 614 |
-
'Composer\\Repository\\Pear\\BaseChannelReader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/BaseChannelReader.php',
|
| 615 |
-
'Composer\\Repository\\Pear\\ChannelInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelInfo.php',
|
| 616 |
-
'Composer\\Repository\\Pear\\ChannelReader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelReader.php',
|
| 617 |
-
'Composer\\Repository\\Pear\\ChannelRest10Reader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelRest10Reader.php',
|
| 618 |
-
'Composer\\Repository\\Pear\\ChannelRest11Reader' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ChannelRest11Reader.php',
|
| 619 |
-
'Composer\\Repository\\Pear\\DependencyConstraint' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/DependencyConstraint.php',
|
| 620 |
-
'Composer\\Repository\\Pear\\DependencyInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/DependencyInfo.php',
|
| 621 |
-
'Composer\\Repository\\Pear\\PackageDependencyParser' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/PackageDependencyParser.php',
|
| 622 |
-
'Composer\\Repository\\Pear\\PackageInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/PackageInfo.php',
|
| 623 |
-
'Composer\\Repository\\Pear\\ReleaseInfo' => $vendorDir . '/composer/composer/src/Composer/Repository/Pear/ReleaseInfo.php',
|
| 624 |
-
'Composer\\Repository\\PlatformRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/PlatformRepository.php',
|
| 625 |
-
'Composer\\Repository\\RepositoryFactory' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryFactory.php',
|
| 626 |
-
'Composer\\Repository\\RepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryInterface.php',
|
| 627 |
-
'Composer\\Repository\\RepositoryManager' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositoryManager.php',
|
| 628 |
-
'Composer\\Repository\\RepositorySecurityException' => $vendorDir . '/composer/composer/src/Composer/Repository/RepositorySecurityException.php',
|
| 629 |
-
'Composer\\Repository\\VcsRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/VcsRepository.php',
|
| 630 |
-
'Composer\\Repository\\Vcs\\BitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/BitbucketDriver.php',
|
| 631 |
-
'Composer\\Repository\\Vcs\\FossilDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/FossilDriver.php',
|
| 632 |
-
'Composer\\Repository\\Vcs\\GitBitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitBitbucketDriver.php',
|
| 633 |
-
'Composer\\Repository\\Vcs\\GitDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitDriver.php',
|
| 634 |
-
'Composer\\Repository\\Vcs\\GitHubDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitHubDriver.php',
|
| 635 |
-
'Composer\\Repository\\Vcs\\GitLabDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/GitLabDriver.php',
|
| 636 |
-
'Composer\\Repository\\Vcs\\HgBitbucketDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/HgBitbucketDriver.php',
|
| 637 |
-
'Composer\\Repository\\Vcs\\HgDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/HgDriver.php',
|
| 638 |
-
'Composer\\Repository\\Vcs\\PerforceDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/PerforceDriver.php',
|
| 639 |
-
'Composer\\Repository\\Vcs\\SvnDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/SvnDriver.php',
|
| 640 |
-
'Composer\\Repository\\Vcs\\VcsDriver' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/VcsDriver.php',
|
| 641 |
-
'Composer\\Repository\\Vcs\\VcsDriverInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/Vcs/VcsDriverInterface.php',
|
| 642 |
-
'Composer\\Repository\\VersionCacheInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/VersionCacheInterface.php',
|
| 643 |
-
'Composer\\Repository\\WritableArrayRepository' => $vendorDir . '/composer/composer/src/Composer/Repository/WritableArrayRepository.php',
|
| 644 |
-
'Composer\\Repository\\WritableRepositoryInterface' => $vendorDir . '/composer/composer/src/Composer/Repository/WritableRepositoryInterface.php',
|
| 645 |
-
'Composer\\Script\\CommandEvent' => $vendorDir . '/composer/composer/src/Composer/Script/CommandEvent.php',
|
| 646 |
-
'Composer\\Script\\Event' => $vendorDir . '/composer/composer/src/Composer/Script/Event.php',
|
| 647 |
-
'Composer\\Script\\PackageEvent' => $vendorDir . '/composer/composer/src/Composer/Script/PackageEvent.php',
|
| 648 |
-
'Composer\\Script\\ScriptEvents' => $vendorDir . '/composer/composer/src/Composer/Script/ScriptEvents.php',
|
| 649 |
-
'Composer\\SelfUpdate\\Keys' => $vendorDir . '/composer/composer/src/Composer/SelfUpdate/Keys.php',
|
| 650 |
-
'Composer\\SelfUpdate\\Versions' => $vendorDir . '/composer/composer/src/Composer/SelfUpdate/Versions.php',
|
| 651 |
-
'Composer\\Semver\\Comparator' => $vendorDir . '/composer/semver/src/Comparator.php',
|
| 652 |
-
'Composer\\Semver\\Constraint\\AbstractConstraint' => $vendorDir . '/composer/semver/src/Constraint/AbstractConstraint.php',
|
| 653 |
-
'Composer\\Semver\\Constraint\\Constraint' => $vendorDir . '/composer/semver/src/Constraint/Constraint.php',
|
| 654 |
-
'Composer\\Semver\\Constraint\\ConstraintInterface' => $vendorDir . '/composer/semver/src/Constraint/ConstraintInterface.php',
|
| 655 |
-
'Composer\\Semver\\Constraint\\EmptyConstraint' => $vendorDir . '/composer/semver/src/Constraint/EmptyConstraint.php',
|
| 656 |
-
'Composer\\Semver\\Constraint\\MultiConstraint' => $vendorDir . '/composer/semver/src/Constraint/MultiConstraint.php',
|
| 657 |
-
'Composer\\Semver\\Semver' => $vendorDir . '/composer/semver/src/Semver.php',
|
| 658 |
-
'Composer\\Semver\\VersionParser' => $vendorDir . '/composer/semver/src/VersionParser.php',
|
| 659 |
-
'Composer\\Spdx\\SpdxLicenses' => $vendorDir . '/composer/spdx-licenses/src/SpdxLicenses.php',
|
| 660 |
-
'Composer\\Util\\AuthHelper' => $vendorDir . '/composer/composer/src/Composer/Util/AuthHelper.php',
|
| 661 |
-
'Composer\\Util\\Bitbucket' => $vendorDir . '/composer/composer/src/Composer/Util/Bitbucket.php',
|
| 662 |
-
'Composer\\Util\\ComposerMirror' => $vendorDir . '/composer/composer/src/Composer/Util/ComposerMirror.php',
|
| 663 |
-
'Composer\\Util\\ConfigValidator' => $vendorDir . '/composer/composer/src/Composer/Util/ConfigValidator.php',
|
| 664 |
-
'Composer\\Util\\ErrorHandler' => $vendorDir . '/composer/composer/src/Composer/Util/ErrorHandler.php',
|
| 665 |
-
'Composer\\Util\\Filesystem' => $vendorDir . '/composer/composer/src/Composer/Util/Filesystem.php',
|
| 666 |
-
'Composer\\Util\\Git' => $vendorDir . '/composer/composer/src/Composer/Util/Git.php',
|
| 667 |
-
'Composer\\Util\\GitHub' => $vendorDir . '/composer/composer/src/Composer/Util/GitHub.php',
|
| 668 |
-
'Composer\\Util\\GitLab' => $vendorDir . '/composer/composer/src/Composer/Util/GitLab.php',
|
| 669 |
-
'Composer\\Util\\Hg' => $vendorDir . '/composer/composer/src/Composer/Util/Hg.php',
|
| 670 |
-
'Composer\\Util\\IniHelper' => $vendorDir . '/composer/composer/src/Composer/Util/IniHelper.php',
|
| 671 |
-
'Composer\\Util\\NoProxyPattern' => $vendorDir . '/composer/composer/src/Composer/Util/NoProxyPattern.php',
|
| 672 |
-
'Composer\\Util\\PackageSorter' => $vendorDir . '/composer/composer/src/Composer/Util/PackageSorter.php',
|
| 673 |
-
'Composer\\Util\\Perforce' => $vendorDir . '/composer/composer/src/Composer/Util/Perforce.php',
|
| 674 |
-
'Composer\\Util\\Platform' => $vendorDir . '/composer/composer/src/Composer/Util/Platform.php',
|
| 675 |
-
'Composer\\Util\\ProcessExecutor' => $vendorDir . '/composer/composer/src/Composer/Util/ProcessExecutor.php',
|
| 676 |
-
'Composer\\Util\\RemoteFilesystem' => $vendorDir . '/composer/composer/src/Composer/Util/RemoteFilesystem.php',
|
| 677 |
-
'Composer\\Util\\Silencer' => $vendorDir . '/composer/composer/src/Composer/Util/Silencer.php',
|
| 678 |
-
'Composer\\Util\\SpdxLicense' => $vendorDir . '/composer/composer/src/Composer/Util/SpdxLicense.php',
|
| 679 |
-
'Composer\\Util\\StreamContextFactory' => $vendorDir . '/composer/composer/src/Composer/Util/StreamContextFactory.php',
|
| 680 |
-
'Composer\\Util\\Svn' => $vendorDir . '/composer/composer/src/Composer/Util/Svn.php',
|
| 681 |
-
'Composer\\Util\\TlsHelper' => $vendorDir . '/composer/composer/src/Composer/Util/TlsHelper.php',
|
| 682 |
-
'Composer\\Util\\Url' => $vendorDir . '/composer/composer/src/Composer/Util/Url.php',
|
| 683 |
-
'Composer\\Util\\Zip' => $vendorDir . '/composer/composer/src/Composer/Util/Zip.php',
|
| 684 |
-
'Composer\\XdebugHandler' => $vendorDir . '/composer/composer/src/Composer/XdebugHandler.php',
|
| 685 |
-
'Composer\\XdebugHandler\\PhpConfig' => $vendorDir . '/composer/xdebug-handler/src/PhpConfig.php',
|
| 686 |
-
'Composer\\XdebugHandler\\Process' => $vendorDir . '/composer/xdebug-handler/src/Process.php',
|
| 687 |
-
'Composer\\XdebugHandler\\Status' => $vendorDir . '/composer/xdebug-handler/src/Status.php',
|
| 688 |
-
'Composer\\XdebugHandler\\XdebugHandler' => $vendorDir . '/composer/xdebug-handler/src/XdebugHandler.php',
|
| 689 |
-
'Dealerdirect\\Composer\\Plugin\\Installers\\PHPCodeSniffer\\Plugin' => $vendorDir . '/dealerdirect/phpcodesniffer-composer-installer/src/Plugin.php',
|
| 690 |
-
'DeepCopy\\DeepCopy' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/DeepCopy.php',
|
| 691 |
-
'DeepCopy\\Exception\\CloneException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php',
|
| 692 |
-
'DeepCopy\\Exception\\PropertyException' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php',
|
| 693 |
-
'DeepCopy\\Filter\\Doctrine\\DoctrineCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php',
|
| 694 |
-
'DeepCopy\\Filter\\Doctrine\\DoctrineEmptyCollectionFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php',
|
| 695 |
-
'DeepCopy\\Filter\\Doctrine\\DoctrineProxyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php',
|
| 696 |
-
'DeepCopy\\Filter\\Filter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php',
|
| 697 |
-
'DeepCopy\\Filter\\KeepFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php',
|
| 698 |
-
'DeepCopy\\Filter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php',
|
| 699 |
-
'DeepCopy\\Filter\\SetNullFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php',
|
| 700 |
-
'DeepCopy\\Matcher\\Doctrine\\DoctrineProxyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php',
|
| 701 |
-
'DeepCopy\\Matcher\\Matcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php',
|
| 702 |
-
'DeepCopy\\Matcher\\PropertyMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php',
|
| 703 |
-
'DeepCopy\\Matcher\\PropertyNameMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php',
|
| 704 |
-
'DeepCopy\\Matcher\\PropertyTypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php',
|
| 705 |
-
'DeepCopy\\Reflection\\ReflectionHelper' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php',
|
| 706 |
-
'DeepCopy\\TypeFilter\\Date\\DateIntervalFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php',
|
| 707 |
-
'DeepCopy\\TypeFilter\\ReplaceFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php',
|
| 708 |
-
'DeepCopy\\TypeFilter\\ShallowCopyFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php',
|
| 709 |
-
'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedList' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php',
|
| 710 |
-
'DeepCopy\\TypeFilter\\Spl\\SplDoublyLinkedListFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php',
|
| 711 |
-
'DeepCopy\\TypeFilter\\TypeFilter' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php',
|
| 712 |
-
'DeepCopy\\TypeMatcher\\TypeMatcher' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php',
|
| 713 |
-
'Doctrine\\Common\\Inflector\\Inflector' => $vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector/Inflector.php',
|
| 714 |
-
'Doctrine\\Instantiator\\Exception\\ExceptionInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php',
|
| 715 |
-
'Doctrine\\Instantiator\\Exception\\InvalidArgumentException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php',
|
| 716 |
-
'Doctrine\\Instantiator\\Exception\\UnexpectedValueException' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php',
|
| 717 |
-
'Doctrine\\Instantiator\\Instantiator' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php',
|
| 718 |
-
'Doctrine\\Instantiator\\InstantiatorInterface' => $vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php',
|
| 719 |
-
'Dotenv\\Dotenv' => $vendorDir . '/vlucas/phpdotenv/src/Dotenv.php',
|
| 720 |
-
'Dotenv\\Environment\\AbstractVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/AbstractVariables.php',
|
| 721 |
-
'Dotenv\\Environment\\Adapter\\AdapterInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/AdapterInterface.php',
|
| 722 |
-
'Dotenv\\Environment\\Adapter\\ApacheAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ApacheAdapter.php',
|
| 723 |
-
'Dotenv\\Environment\\Adapter\\ArrayAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ArrayAdapter.php',
|
| 724 |
-
'Dotenv\\Environment\\Adapter\\EnvConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/EnvConstAdapter.php',
|
| 725 |
-
'Dotenv\\Environment\\Adapter\\PutenvAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/PutenvAdapter.php',
|
| 726 |
-
'Dotenv\\Environment\\Adapter\\ServerConstAdapter' => $vendorDir . '/vlucas/phpdotenv/src/Environment/Adapter/ServerConstAdapter.php',
|
| 727 |
-
'Dotenv\\Environment\\DotenvFactory' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvFactory.php',
|
| 728 |
-
'Dotenv\\Environment\\DotenvVariables' => $vendorDir . '/vlucas/phpdotenv/src/Environment/DotenvVariables.php',
|
| 729 |
-
'Dotenv\\Environment\\FactoryInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/FactoryInterface.php',
|
| 730 |
-
'Dotenv\\Environment\\VariablesInterface' => $vendorDir . '/vlucas/phpdotenv/src/Environment/VariablesInterface.php',
|
| 731 |
-
'Dotenv\\Exception\\ExceptionInterface' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ExceptionInterface.php',
|
| 732 |
-
'Dotenv\\Exception\\InvalidFileException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidFileException.php',
|
| 733 |
-
'Dotenv\\Exception\\InvalidPathException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/InvalidPathException.php',
|
| 734 |
-
'Dotenv\\Exception\\ValidationException' => $vendorDir . '/vlucas/phpdotenv/src/Exception/ValidationException.php',
|
| 735 |
-
'Dotenv\\Lines' => $vendorDir . '/vlucas/phpdotenv/src/Lines.php',
|
| 736 |
-
'Dotenv\\Loader' => $vendorDir . '/vlucas/phpdotenv/src/Loader.php',
|
| 737 |
-
'Dotenv\\Parser' => $vendorDir . '/vlucas/phpdotenv/src/Parser.php',
|
| 738 |
-
'Dotenv\\Regex\\Error' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Error.php',
|
| 739 |
-
'Dotenv\\Regex\\Regex' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Regex.php',
|
| 740 |
-
'Dotenv\\Regex\\Result' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Result.php',
|
| 741 |
-
'Dotenv\\Regex\\Success' => $vendorDir . '/vlucas/phpdotenv/src/Regex/Success.php',
|
| 742 |
-
'Dotenv\\Validator' => $vendorDir . '/vlucas/phpdotenv/src/Validator.php',
|
| 743 |
-
'Facebook\\WebDriver\\AbstractWebDriverCheckboxOrRadio' => $vendorDir . '/facebook/webdriver/lib/AbstractWebDriverCheckboxOrRadio.php',
|
| 744 |
-
'Facebook\\WebDriver\\Chrome\\ChromeDriver' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeDriver.php',
|
| 745 |
-
'Facebook\\WebDriver\\Chrome\\ChromeDriverService' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeDriverService.php',
|
| 746 |
-
'Facebook\\WebDriver\\Chrome\\ChromeOptions' => $vendorDir . '/facebook/webdriver/lib/Chrome/ChromeOptions.php',
|
| 747 |
-
'Facebook\\WebDriver\\Cookie' => $vendorDir . '/facebook/webdriver/lib/Cookie.php',
|
| 748 |
-
'Facebook\\WebDriver\\Exception\\ElementNotSelectableException' => $vendorDir . '/facebook/webdriver/lib/Exception/ElementNotSelectableException.php',
|
| 749 |
-
'Facebook\\WebDriver\\Exception\\ElementNotVisibleException' => $vendorDir . '/facebook/webdriver/lib/Exception/ElementNotVisibleException.php',
|
| 750 |
-
'Facebook\\WebDriver\\Exception\\ExpectedException' => $vendorDir . '/facebook/webdriver/lib/Exception/ExpectedException.php',
|
| 751 |
-
'Facebook\\WebDriver\\Exception\\IMEEngineActivationFailedException' => $vendorDir . '/facebook/webdriver/lib/Exception/IMEEngineActivationFailedException.php',
|
| 752 |
-
'Facebook\\WebDriver\\Exception\\IMENotAvailableException' => $vendorDir . '/facebook/webdriver/lib/Exception/IMENotAvailableException.php',
|
| 753 |
-
'Facebook\\WebDriver\\Exception\\IndexOutOfBoundsException' => $vendorDir . '/facebook/webdriver/lib/Exception/IndexOutOfBoundsException.php',
|
| 754 |
-
'Facebook\\WebDriver\\Exception\\InvalidCookieDomainException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidCookieDomainException.php',
|
| 755 |
-
'Facebook\\WebDriver\\Exception\\InvalidCoordinatesException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidCoordinatesException.php',
|
| 756 |
-
'Facebook\\WebDriver\\Exception\\InvalidElementStateException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidElementStateException.php',
|
| 757 |
-
'Facebook\\WebDriver\\Exception\\InvalidSelectorException' => $vendorDir . '/facebook/webdriver/lib/Exception/InvalidSelectorException.php',
|
| 758 |
-
'Facebook\\WebDriver\\Exception\\MoveTargetOutOfBoundsException' => $vendorDir . '/facebook/webdriver/lib/Exception/MoveTargetOutOfBoundsException.php',
|
| 759 |
-
'Facebook\\WebDriver\\Exception\\NoAlertOpenException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoAlertOpenException.php',
|
| 760 |
-
'Facebook\\WebDriver\\Exception\\NoCollectionException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoCollectionException.php',
|
| 761 |
-
'Facebook\\WebDriver\\Exception\\NoScriptResultException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoScriptResultException.php',
|
| 762 |
-
'Facebook\\WebDriver\\Exception\\NoStringException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringException.php',
|
| 763 |
-
'Facebook\\WebDriver\\Exception\\NoStringLengthException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringLengthException.php',
|
| 764 |
-
'Facebook\\WebDriver\\Exception\\NoStringWrapperException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoStringWrapperException.php',
|
| 765 |
-
'Facebook\\WebDriver\\Exception\\NoSuchCollectionException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchCollectionException.php',
|
| 766 |
-
'Facebook\\WebDriver\\Exception\\NoSuchDocumentException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchDocumentException.php',
|
| 767 |
-
'Facebook\\WebDriver\\Exception\\NoSuchDriverException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchDriverException.php',
|
| 768 |
-
'Facebook\\WebDriver\\Exception\\NoSuchElementException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchElementException.php',
|
| 769 |
-
'Facebook\\WebDriver\\Exception\\NoSuchFrameException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchFrameException.php',
|
| 770 |
-
'Facebook\\WebDriver\\Exception\\NoSuchWindowException' => $vendorDir . '/facebook/webdriver/lib/Exception/NoSuchWindowException.php',
|
| 771 |
-
'Facebook\\WebDriver\\Exception\\NullPointerException' => $vendorDir . '/facebook/webdriver/lib/Exception/NullPointerException.php',
|
| 772 |
-
'Facebook\\WebDriver\\Exception\\ScriptTimeoutException' => $vendorDir . '/facebook/webdriver/lib/Exception/ScriptTimeoutException.php',
|
| 773 |
-
'Facebook\\WebDriver\\Exception\\SessionNotCreatedException' => $vendorDir . '/facebook/webdriver/lib/Exception/SessionNotCreatedException.php',
|
| 774 |
-
'Facebook\\WebDriver\\Exception\\StaleElementReferenceException' => $vendorDir . '/facebook/webdriver/lib/Exception/StaleElementReferenceException.php',
|
| 775 |
-
'Facebook\\WebDriver\\Exception\\TimeOutException' => $vendorDir . '/facebook/webdriver/lib/Exception/TimeOutException.php',
|
| 776 |
-
'Facebook\\WebDriver\\Exception\\UnableToSetCookieException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnableToSetCookieException.php',
|
| 777 |
-
'Facebook\\WebDriver\\Exception\\UnexpectedAlertOpenException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedAlertOpenException.php',
|
| 778 |
-
'Facebook\\WebDriver\\Exception\\UnexpectedJavascriptException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedJavascriptException.php',
|
| 779 |
-
'Facebook\\WebDriver\\Exception\\UnexpectedTagNameException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnexpectedTagNameException.php',
|
| 780 |
-
'Facebook\\WebDriver\\Exception\\UnknownCommandException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnknownCommandException.php',
|
| 781 |
-
'Facebook\\WebDriver\\Exception\\UnknownServerException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnknownServerException.php',
|
| 782 |
-
'Facebook\\WebDriver\\Exception\\UnrecognizedExceptionException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnrecognizedExceptionException.php',
|
| 783 |
-
'Facebook\\WebDriver\\Exception\\UnsupportedOperationException' => $vendorDir . '/facebook/webdriver/lib/Exception/UnsupportedOperationException.php',
|
| 784 |
-
'Facebook\\WebDriver\\Exception\\WebDriverCurlException' => $vendorDir . '/facebook/webdriver/lib/Exception/WebDriverCurlException.php',
|
| 785 |
-
'Facebook\\WebDriver\\Exception\\WebDriverException' => $vendorDir . '/facebook/webdriver/lib/Exception/WebDriverException.php',
|
| 786 |
-
'Facebook\\WebDriver\\Exception\\XPathLookupException' => $vendorDir . '/facebook/webdriver/lib/Exception/XPathLookupException.php',
|
| 787 |
-
'Facebook\\WebDriver\\Firefox\\FirefoxDriver' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxDriver.php',
|
| 788 |
-
'Facebook\\WebDriver\\Firefox\\FirefoxPreferences' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxPreferences.php',
|
| 789 |
-
'Facebook\\WebDriver\\Firefox\\FirefoxProfile' => $vendorDir . '/facebook/webdriver/lib/Firefox/FirefoxProfile.php',
|
| 790 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverButtonReleaseAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverButtonReleaseAction.php',
|
| 791 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAction.php',
|
| 792 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverClickAndHoldAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverClickAndHoldAction.php',
|
| 793 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverContextClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverContextClickAction.php',
|
| 794 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverCoordinates' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverCoordinates.php',
|
| 795 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverDoubleClickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverDoubleClickAction.php',
|
| 796 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeyDownAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyDownAction.php',
|
| 797 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeyUpAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeyUpAction.php',
|
| 798 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverKeysRelatedAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverKeysRelatedAction.php',
|
| 799 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMouseAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseAction.php',
|
| 800 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMouseMoveAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMouseMoveAction.php',
|
| 801 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverMoveToOffsetAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverMoveToOffsetAction.php',
|
| 802 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverSendKeysAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverSendKeysAction.php',
|
| 803 |
-
'Facebook\\WebDriver\\Interactions\\Internal\\WebDriverSingleKeyAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Internal/WebDriverSingleKeyAction.php',
|
| 804 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverDoubleTapAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverDoubleTapAction.php',
|
| 805 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverDownAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverDownAction.php',
|
| 806 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverFlickAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickAction.php',
|
| 807 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverFlickFromElementAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverFlickFromElementAction.php',
|
| 808 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverLongPressAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverLongPressAction.php',
|
| 809 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverMoveAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverMoveAction.php',
|
| 810 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverScrollAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollAction.php',
|
| 811 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverScrollFromElementAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverScrollFromElementAction.php',
|
| 812 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTapAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTapAction.php',
|
| 813 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTouchAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchAction.php',
|
| 814 |
-
'Facebook\\WebDriver\\Interactions\\Touch\\WebDriverTouchScreen' => $vendorDir . '/facebook/webdriver/lib/Interactions/Touch/WebDriverTouchScreen.php',
|
| 815 |
-
'Facebook\\WebDriver\\Interactions\\WebDriverActions' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverActions.php',
|
| 816 |
-
'Facebook\\WebDriver\\Interactions\\WebDriverCompositeAction' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverCompositeAction.php',
|
| 817 |
-
'Facebook\\WebDriver\\Interactions\\WebDriverTouchActions' => $vendorDir . '/facebook/webdriver/lib/Interactions/WebDriverTouchActions.php',
|
| 818 |
-
'Facebook\\WebDriver\\Internal\\WebDriverLocatable' => $vendorDir . '/facebook/webdriver/lib/Internal/WebDriverLocatable.php',
|
| 819 |
-
'Facebook\\WebDriver\\JavaScriptExecutor' => $vendorDir . '/facebook/webdriver/lib/JavaScriptExecutor.php',
|
| 820 |
-
'Facebook\\WebDriver\\Net\\URLChecker' => $vendorDir . '/facebook/webdriver/lib/Net/URLChecker.php',
|
| 821 |
-
'Facebook\\WebDriver\\Remote\\DesiredCapabilities' => $vendorDir . '/facebook/webdriver/lib/Remote/DesiredCapabilities.php',
|
| 822 |
-
'Facebook\\WebDriver\\Remote\\DriverCommand' => $vendorDir . '/facebook/webdriver/lib/Remote/DriverCommand.php',
|
| 823 |
-
'Facebook\\WebDriver\\Remote\\ExecuteMethod' => $vendorDir . '/facebook/webdriver/lib/Remote/ExecuteMethod.php',
|
| 824 |
-
'Facebook\\WebDriver\\Remote\\FileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/FileDetector.php',
|
| 825 |
-
'Facebook\\WebDriver\\Remote\\HttpCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/Remote/HttpCommandExecutor.php',
|
| 826 |
-
'Facebook\\WebDriver\\Remote\\LocalFileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/LocalFileDetector.php',
|
| 827 |
-
'Facebook\\WebDriver\\Remote\\RemoteExecuteMethod' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteExecuteMethod.php',
|
| 828 |
-
'Facebook\\WebDriver\\Remote\\RemoteKeyboard' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteKeyboard.php',
|
| 829 |
-
'Facebook\\WebDriver\\Remote\\RemoteMouse' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteMouse.php',
|
| 830 |
-
'Facebook\\WebDriver\\Remote\\RemoteTargetLocator' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteTargetLocator.php',
|
| 831 |
-
'Facebook\\WebDriver\\Remote\\RemoteTouchScreen' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteTouchScreen.php',
|
| 832 |
-
'Facebook\\WebDriver\\Remote\\RemoteWebDriver' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteWebDriver.php',
|
| 833 |
-
'Facebook\\WebDriver\\Remote\\RemoteWebElement' => $vendorDir . '/facebook/webdriver/lib/Remote/RemoteWebElement.php',
|
| 834 |
-
'Facebook\\WebDriver\\Remote\\Service\\DriverCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/Remote/Service/DriverCommandExecutor.php',
|
| 835 |
-
'Facebook\\WebDriver\\Remote\\Service\\DriverService' => $vendorDir . '/facebook/webdriver/lib/Remote/Service/DriverService.php',
|
| 836 |
-
'Facebook\\WebDriver\\Remote\\UselessFileDetector' => $vendorDir . '/facebook/webdriver/lib/Remote/UselessFileDetector.php',
|
| 837 |
-
'Facebook\\WebDriver\\Remote\\WebDriverBrowserType' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverBrowserType.php',
|
| 838 |
-
'Facebook\\WebDriver\\Remote\\WebDriverCapabilityType' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverCapabilityType.php',
|
| 839 |
-
'Facebook\\WebDriver\\Remote\\WebDriverCommand' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverCommand.php',
|
| 840 |
-
'Facebook\\WebDriver\\Remote\\WebDriverResponse' => $vendorDir . '/facebook/webdriver/lib/Remote/WebDriverResponse.php',
|
| 841 |
-
'Facebook\\WebDriver\\Support\\Events\\EventFiringWebDriver' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebDriver.php',
|
| 842 |
-
'Facebook\\WebDriver\\Support\\Events\\EventFiringWebDriverNavigation' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebDriverNavigation.php',
|
| 843 |
-
'Facebook\\WebDriver\\Support\\Events\\EventFiringWebElement' => $vendorDir . '/facebook/webdriver/lib/Support/Events/EventFiringWebElement.php',
|
| 844 |
-
'Facebook\\WebDriver\\Support\\XPathEscaper' => $vendorDir . '/facebook/webdriver/lib/Support/XPathEscaper.php',
|
| 845 |
-
'Facebook\\WebDriver\\WebDriver' => $vendorDir . '/facebook/webdriver/lib/WebDriver.php',
|
| 846 |
-
'Facebook\\WebDriver\\WebDriverAction' => $vendorDir . '/facebook/webdriver/lib/WebDriverAction.php',
|
| 847 |
-
'Facebook\\WebDriver\\WebDriverAlert' => $vendorDir . '/facebook/webdriver/lib/WebDriverAlert.php',
|
| 848 |
-
'Facebook\\WebDriver\\WebDriverBy' => $vendorDir . '/facebook/webdriver/lib/WebDriverBy.php',
|
| 849 |
-
'Facebook\\WebDriver\\WebDriverCapabilities' => $vendorDir . '/facebook/webdriver/lib/WebDriverCapabilities.php',
|
| 850 |
-
'Facebook\\WebDriver\\WebDriverCheckboxes' => $vendorDir . '/facebook/webdriver/lib/WebDriverCheckboxes.php',
|
| 851 |
-
'Facebook\\WebDriver\\WebDriverCommandExecutor' => $vendorDir . '/facebook/webdriver/lib/WebDriverCommandExecutor.php',
|
| 852 |
-
'Facebook\\WebDriver\\WebDriverDimension' => $vendorDir . '/facebook/webdriver/lib/WebDriverDimension.php',
|
| 853 |
-
'Facebook\\WebDriver\\WebDriverDispatcher' => $vendorDir . '/facebook/webdriver/lib/WebDriverDispatcher.php',
|
| 854 |
-
'Facebook\\WebDriver\\WebDriverElement' => $vendorDir . '/facebook/webdriver/lib/WebDriverElement.php',
|
| 855 |
-
'Facebook\\WebDriver\\WebDriverEventListener' => $vendorDir . '/facebook/webdriver/lib/WebDriverEventListener.php',
|
| 856 |
-
'Facebook\\WebDriver\\WebDriverExpectedCondition' => $vendorDir . '/facebook/webdriver/lib/WebDriverExpectedCondition.php',
|
| 857 |
-
'Facebook\\WebDriver\\WebDriverHasInputDevices' => $vendorDir . '/facebook/webdriver/lib/WebDriverHasInputDevices.php',
|
| 858 |
-
'Facebook\\WebDriver\\WebDriverKeyboard' => $vendorDir . '/facebook/webdriver/lib/WebDriverKeyboard.php',
|
| 859 |
-
'Facebook\\WebDriver\\WebDriverKeys' => $vendorDir . '/facebook/webdriver/lib/WebDriverKeys.php',
|
| 860 |
-
'Facebook\\WebDriver\\WebDriverMouse' => $vendorDir . '/facebook/webdriver/lib/WebDriverMouse.php',
|
| 861 |
-
'Facebook\\WebDriver\\WebDriverNavigation' => $vendorDir . '/facebook/webdriver/lib/WebDriverNavigation.php',
|
| 862 |
-
'Facebook\\WebDriver\\WebDriverOptions' => $vendorDir . '/facebook/webdriver/lib/WebDriverOptions.php',
|
| 863 |
-
'Facebook\\WebDriver\\WebDriverPlatform' => $vendorDir . '/facebook/webdriver/lib/WebDriverPlatform.php',
|
| 864 |
-
'Facebook\\WebDriver\\WebDriverPoint' => $vendorDir . '/facebook/webdriver/lib/WebDriverPoint.php',
|
| 865 |
-
'Facebook\\WebDriver\\WebDriverRadios' => $vendorDir . '/facebook/webdriver/lib/WebDriverRadios.php',
|
| 866 |
-
'Facebook\\WebDriver\\WebDriverSearchContext' => $vendorDir . '/facebook/webdriver/lib/WebDriverSearchContext.php',
|
| 867 |
-
'Facebook\\WebDriver\\WebDriverSelect' => $vendorDir . '/facebook/webdriver/lib/WebDriverSelect.php',
|
| 868 |
-
'Facebook\\WebDriver\\WebDriverSelectInterface' => $vendorDir . '/facebook/webdriver/lib/WebDriverSelectInterface.php',
|
| 869 |
-
'Facebook\\WebDriver\\WebDriverTargetLocator' => $vendorDir . '/facebook/webdriver/lib/WebDriverTargetLocator.php',
|
| 870 |
-
'Facebook\\WebDriver\\WebDriverTimeouts' => $vendorDir . '/facebook/webdriver/lib/WebDriverTimeouts.php',
|
| 871 |
-
'Facebook\\WebDriver\\WebDriverUpAction' => $vendorDir . '/facebook/webdriver/lib/WebDriverUpAction.php',
|
| 872 |
-
'Facebook\\WebDriver\\WebDriverWait' => $vendorDir . '/facebook/webdriver/lib/WebDriverWait.php',
|
| 873 |
-
'Facebook\\WebDriver\\WebDriverWindow' => $vendorDir . '/facebook/webdriver/lib/WebDriverWindow.php',
|
| 874 |
-
'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php',
|
| 875 |
-
'File_Iterator_Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php',
|
| 876 |
-
'File_Iterator_Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php',
|
| 877 |
-
'Firebase\\JWT\\BeforeValidException' => $vendorDir . '/firebase/php-jwt/src/BeforeValidException.php',
|
| 878 |
-
'Firebase\\JWT\\ExpiredException' => $vendorDir . '/firebase/php-jwt/src/ExpiredException.php',
|
| 879 |
-
'Firebase\\JWT\\JWT' => $vendorDir . '/firebase/php-jwt/src/JWT.php',
|
| 880 |
-
'Firebase\\JWT\\SignatureInvalidException' => $vendorDir . '/firebase/php-jwt/src/SignatureInvalidException.php',
|
| 881 |
-
'Gumlet\\ImageResize' => $vendorDir . '/gumlet/php-image-resize/lib/ImageResize.php',
|
| 882 |
-
'Gumlet\\ImageResizeException' => $vendorDir . '/gumlet/php-image-resize/lib/ImageResizeException.php',
|
| 883 |
-
'GuzzleHttp\\Client' => $vendorDir . '/guzzlehttp/guzzle/src/Client.php',
|
| 884 |
-
'GuzzleHttp\\ClientInterface' => $vendorDir . '/guzzlehttp/guzzle/src/ClientInterface.php',
|
| 885 |
-
'GuzzleHttp\\Cookie\\CookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJar.php',
|
| 886 |
-
'GuzzleHttp\\Cookie\\CookieJarInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php',
|
| 887 |
-
'GuzzleHttp\\Cookie\\FileCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php',
|
| 888 |
-
'GuzzleHttp\\Cookie\\SessionCookieJar' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php',
|
| 889 |
-
'GuzzleHttp\\Cookie\\SetCookie' => $vendorDir . '/guzzlehttp/guzzle/src/Cookie/SetCookie.php',
|
| 890 |
-
'GuzzleHttp\\Exception\\BadResponseException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/BadResponseException.php',
|
| 891 |
-
'GuzzleHttp\\Exception\\ClientException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ClientException.php',
|
| 892 |
-
'GuzzleHttp\\Exception\\ConnectException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ConnectException.php',
|
| 893 |
-
'GuzzleHttp\\Exception\\GuzzleException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/GuzzleException.php',
|
| 894 |
-
'GuzzleHttp\\Exception\\RequestException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/RequestException.php',
|
| 895 |
-
'GuzzleHttp\\Exception\\SeekException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/SeekException.php',
|
| 896 |
-
'GuzzleHttp\\Exception\\ServerException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/ServerException.php',
|
| 897 |
-
'GuzzleHttp\\Exception\\TooManyRedirectsException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php',
|
| 898 |
-
'GuzzleHttp\\Exception\\TransferException' => $vendorDir . '/guzzlehttp/guzzle/src/Exception/TransferException.php',
|
| 899 |
-
'GuzzleHttp\\HandlerStack' => $vendorDir . '/guzzlehttp/guzzle/src/HandlerStack.php',
|
| 900 |
-
'GuzzleHttp\\Handler\\CurlFactory' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactory.php',
|
| 901 |
-
'GuzzleHttp\\Handler\\CurlFactoryInterface' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php',
|
| 902 |
-
'GuzzleHttp\\Handler\\CurlHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlHandler.php',
|
| 903 |
-
'GuzzleHttp\\Handler\\CurlMultiHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php',
|
| 904 |
-
'GuzzleHttp\\Handler\\EasyHandle' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/EasyHandle.php',
|
| 905 |
-
'GuzzleHttp\\Handler\\MockHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/MockHandler.php',
|
| 906 |
-
'GuzzleHttp\\Handler\\Proxy' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/Proxy.php',
|
| 907 |
-
'GuzzleHttp\\Handler\\StreamHandler' => $vendorDir . '/guzzlehttp/guzzle/src/Handler/StreamHandler.php',
|
| 908 |
-
'GuzzleHttp\\MessageFormatter' => $vendorDir . '/guzzlehttp/guzzle/src/MessageFormatter.php',
|
| 909 |
-
'GuzzleHttp\\Middleware' => $vendorDir . '/guzzlehttp/guzzle/src/Middleware.php',
|
| 910 |
-
'GuzzleHttp\\Pool' => $vendorDir . '/guzzlehttp/guzzle/src/Pool.php',
|
| 911 |
-
'GuzzleHttp\\PrepareBodyMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php',
|
| 912 |
-
'GuzzleHttp\\Promise\\AggregateException' => $vendorDir . '/guzzlehttp/promises/src/AggregateException.php',
|
| 913 |
-
'GuzzleHttp\\Promise\\CancellationException' => $vendorDir . '/guzzlehttp/promises/src/CancellationException.php',
|
| 914 |
-
'GuzzleHttp\\Promise\\Coroutine' => $vendorDir . '/guzzlehttp/promises/src/Coroutine.php',
|
| 915 |
-
'GuzzleHttp\\Promise\\EachPromise' => $vendorDir . '/guzzlehttp/promises/src/EachPromise.php',
|
| 916 |
-
'GuzzleHttp\\Promise\\FulfilledPromise' => $vendorDir . '/guzzlehttp/promises/src/FulfilledPromise.php',
|
| 917 |
-
'GuzzleHttp\\Promise\\Promise' => $vendorDir . '/guzzlehttp/promises/src/Promise.php',
|
| 918 |
-
'GuzzleHttp\\Promise\\PromiseInterface' => $vendorDir . '/guzzlehttp/promises/src/PromiseInterface.php',
|
| 919 |
-
'GuzzleHttp\\Promise\\PromisorInterface' => $vendorDir . '/guzzlehttp/promises/src/PromisorInterface.php',
|
| 920 |
-
'GuzzleHttp\\Promise\\RejectedPromise' => $vendorDir . '/guzzlehttp/promises/src/RejectedPromise.php',
|
| 921 |
-
'GuzzleHttp\\Promise\\RejectionException' => $vendorDir . '/guzzlehttp/promises/src/RejectionException.php',
|
| 922 |
-
'GuzzleHttp\\Promise\\TaskQueue' => $vendorDir . '/guzzlehttp/promises/src/TaskQueue.php',
|
| 923 |
-
'GuzzleHttp\\Promise\\TaskQueueInterface' => $vendorDir . '/guzzlehttp/promises/src/TaskQueueInterface.php',
|
| 924 |
-
'GuzzleHttp\\Psr7\\AppendStream' => $vendorDir . '/guzzlehttp/psr7/src/AppendStream.php',
|
| 925 |
-
'GuzzleHttp\\Psr7\\BufferStream' => $vendorDir . '/guzzlehttp/psr7/src/BufferStream.php',
|
| 926 |
-
'GuzzleHttp\\Psr7\\CachingStream' => $vendorDir . '/guzzlehttp/psr7/src/CachingStream.php',
|
| 927 |
-
'GuzzleHttp\\Psr7\\DroppingStream' => $vendorDir . '/guzzlehttp/psr7/src/DroppingStream.php',
|
| 928 |
-
'GuzzleHttp\\Psr7\\FnStream' => $vendorDir . '/guzzlehttp/psr7/src/FnStream.php',
|
| 929 |
-
'GuzzleHttp\\Psr7\\InflateStream' => $vendorDir . '/guzzlehttp/psr7/src/InflateStream.php',
|
| 930 |
-
'GuzzleHttp\\Psr7\\LazyOpenStream' => $vendorDir . '/guzzlehttp/psr7/src/LazyOpenStream.php',
|
| 931 |
-
'GuzzleHttp\\Psr7\\LimitStream' => $vendorDir . '/guzzlehttp/psr7/src/LimitStream.php',
|
| 932 |
-
'GuzzleHttp\\Psr7\\MessageTrait' => $vendorDir . '/guzzlehttp/psr7/src/MessageTrait.php',
|
| 933 |
-
'GuzzleHttp\\Psr7\\MultipartStream' => $vendorDir . '/guzzlehttp/psr7/src/MultipartStream.php',
|
| 934 |
-
'GuzzleHttp\\Psr7\\NoSeekStream' => $vendorDir . '/guzzlehttp/psr7/src/NoSeekStream.php',
|
| 935 |
-
'GuzzleHttp\\Psr7\\PumpStream' => $vendorDir . '/guzzlehttp/psr7/src/PumpStream.php',
|
| 936 |
-
'GuzzleHttp\\Psr7\\Request' => $vendorDir . '/guzzlehttp/psr7/src/Request.php',
|
| 937 |
-
'GuzzleHttp\\Psr7\\Response' => $vendorDir . '/guzzlehttp/psr7/src/Response.php',
|
| 938 |
-
'GuzzleHttp\\Psr7\\Rfc7230' => $vendorDir . '/guzzlehttp/psr7/src/Rfc7230.php',
|
| 939 |
-
'GuzzleHttp\\Psr7\\ServerRequest' => $vendorDir . '/guzzlehttp/psr7/src/ServerRequest.php',
|
| 940 |
-
'GuzzleHttp\\Psr7\\Stream' => $vendorDir . '/guzzlehttp/psr7/src/Stream.php',
|
| 941 |
-
'GuzzleHttp\\Psr7\\StreamDecoratorTrait' => $vendorDir . '/guzzlehttp/psr7/src/StreamDecoratorTrait.php',
|
| 942 |
-
'GuzzleHttp\\Psr7\\StreamWrapper' => $vendorDir . '/guzzlehttp/psr7/src/StreamWrapper.php',
|
| 943 |
-
'GuzzleHttp\\Psr7\\UploadedFile' => $vendorDir . '/guzzlehttp/psr7/src/UploadedFile.php',
|
| 944 |
-
'GuzzleHttp\\Psr7\\Uri' => $vendorDir . '/guzzlehttp/psr7/src/Uri.php',
|
| 945 |
-
'GuzzleHttp\\Psr7\\UriNormalizer' => $vendorDir . '/guzzlehttp/psr7/src/UriNormalizer.php',
|
| 946 |
-
'GuzzleHttp\\Psr7\\UriResolver' => $vendorDir . '/guzzlehttp/psr7/src/UriResolver.php',
|
| 947 |
-
'GuzzleHttp\\RedirectMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RedirectMiddleware.php',
|
| 948 |
-
'GuzzleHttp\\RequestOptions' => $vendorDir . '/guzzlehttp/guzzle/src/RequestOptions.php',
|
| 949 |
-
'GuzzleHttp\\RetryMiddleware' => $vendorDir . '/guzzlehttp/guzzle/src/RetryMiddleware.php',
|
| 950 |
-
'GuzzleHttp\\TransferStats' => $vendorDir . '/guzzlehttp/guzzle/src/TransferStats.php',
|
| 951 |
-
'GuzzleHttp\\UriTemplate' => $vendorDir . '/guzzlehttp/guzzle/src/UriTemplate.php',
|
| 952 |
-
'Handlebars\\Arguments' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Arguments.php',
|
| 953 |
-
'Handlebars\\Autoloader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Autoloader.php',
|
| 954 |
-
'Handlebars\\BaseString' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/BaseString.php',
|
| 955 |
-
'Handlebars\\Cache' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache.php',
|
| 956 |
-
'Handlebars\\Cache\\APC' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/APC.php',
|
| 957 |
-
'Handlebars\\Cache\\Disk' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/Disk.php',
|
| 958 |
-
'Handlebars\\Cache\\Dummy' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Cache/Dummy.php',
|
| 959 |
-
'Handlebars\\ChildContext' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/ChildContext.php',
|
| 960 |
-
'Handlebars\\Context' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Context.php',
|
| 961 |
-
'Handlebars\\Handlebars' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Handlebars.php',
|
| 962 |
-
'Handlebars\\Helper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper.php',
|
| 963 |
-
'Handlebars\\Helper\\BindAttrHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/BindAttrHelper.php',
|
| 964 |
-
'Handlebars\\Helper\\EachHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/EachHelper.php',
|
| 965 |
-
'Handlebars\\Helper\\IfHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/IfHelper.php',
|
| 966 |
-
'Handlebars\\Helper\\UnlessHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/UnlessHelper.php',
|
| 967 |
-
'Handlebars\\Helper\\WithHelper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helper/WithHelper.php',
|
| 968 |
-
'Handlebars\\Helpers' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Helpers.php',
|
| 969 |
-
'Handlebars\\Loader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader.php',
|
| 970 |
-
'Handlebars\\Loader\\ArrayLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/ArrayLoader.php',
|
| 971 |
-
'Handlebars\\Loader\\FilesystemLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/FilesystemLoader.php',
|
| 972 |
-
'Handlebars\\Loader\\InlineLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/InlineLoader.php',
|
| 973 |
-
'Handlebars\\Loader\\StringLoader' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Loader/StringLoader.php',
|
| 974 |
-
'Handlebars\\Parser' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Parser.php',
|
| 975 |
-
'Handlebars\\SafeString' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/SafeString.php',
|
| 976 |
-
'Handlebars\\String' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/String.php',
|
| 977 |
-
'Handlebars\\StringWrapper' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/StringWrapper.php',
|
| 978 |
-
'Handlebars\\Template' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Template.php',
|
| 979 |
-
'Handlebars\\Tokenizer' => $vendorDir . '/xamin/handlebars.php/src/Handlebars/Tokenizer.php',
|
| 980 |
-
'Hautelook\\Phpass\\PasswordHash' => $vendorDir . '/hautelook/phpass/src/Hautelook/Phpass/PasswordHash.php',
|
| 981 |
-
'Illuminate\\Contracts\\Auth\\Access\\Authorizable' => $vendorDir . '/illuminate/contracts/Auth/Access/Authorizable.php',
|
| 982 |
-
'Illuminate\\Contracts\\Auth\\Access\\Gate' => $vendorDir . '/illuminate/contracts/Auth/Access/Gate.php',
|
| 983 |
-
'Illuminate\\Contracts\\Auth\\Authenticatable' => $vendorDir . '/illuminate/contracts/Auth/Authenticatable.php',
|
| 984 |
-
'Illuminate\\Contracts\\Auth\\CanResetPassword' => $vendorDir . '/illuminate/contracts/Auth/CanResetPassword.php',
|
| 985 |
-
'Illuminate\\Contracts\\Auth\\Factory' => $vendorDir . '/illuminate/contracts/Auth/Factory.php',
|
| 986 |
-
'Illuminate\\Contracts\\Auth\\Guard' => $vendorDir . '/illuminate/contracts/Auth/Guard.php',
|
| 987 |
-
'Illuminate\\Contracts\\Auth\\MustVerifyEmail' => $vendorDir . '/illuminate/contracts/Auth/MustVerifyEmail.php',
|
| 988 |
-
'Illuminate\\Contracts\\Auth\\PasswordBroker' => $vendorDir . '/illuminate/contracts/Auth/PasswordBroker.php',
|
| 989 |
-
'Illuminate\\Contracts\\Auth\\PasswordBrokerFactory' => $vendorDir . '/illuminate/contracts/Auth/PasswordBrokerFactory.php',
|
| 990 |
-
'Illuminate\\Contracts\\Auth\\StatefulGuard' => $vendorDir . '/illuminate/contracts/Auth/StatefulGuard.php',
|
| 991 |
-
'Illuminate\\Contracts\\Auth\\SupportsBasicAuth' => $vendorDir . '/illuminate/contracts/Auth/SupportsBasicAuth.php',
|
| 992 |
-
'Illuminate\\Contracts\\Auth\\UserProvider' => $vendorDir . '/illuminate/contracts/Auth/UserProvider.php',
|
| 993 |
-
'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => $vendorDir . '/illuminate/contracts/Broadcasting/Broadcaster.php',
|
| 994 |
-
'Illuminate\\Contracts\\Broadcasting\\Factory' => $vendorDir . '/illuminate/contracts/Broadcasting/Factory.php',
|
| 995 |
-
'Illuminate\\Contracts\\Broadcasting\\ShouldBroadcast' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcast.php',
|
| 996 |
-
'Illuminate\\Contracts\\Broadcasting\\ShouldBroadcastNow' => $vendorDir . '/illuminate/contracts/Broadcasting/ShouldBroadcastNow.php',
|
| 997 |
-
'Illuminate\\Contracts\\Bus\\Dispatcher' => $vendorDir . '/illuminate/contracts/Bus/Dispatcher.php',
|
| 998 |
-
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => $vendorDir . '/illuminate/contracts/Bus/QueueingDispatcher.php',
|
| 999 |
-
'Illuminate\\Contracts\\Cache\\Factory' => $vendorDir . '/illuminate/contracts/Cache/Factory.php',
|
| 1000 |
-
'Illuminate\\Contracts\\Cache\\Lock' => $vendorDir . '/illuminate/contracts/Cache/Lock.php',
|
| 1001 |
-
'Illuminate\\Contracts\\Cache\\LockProvider' => $vendorDir . '/illuminate/contracts/Cache/LockProvider.php',
|
| 1002 |
-
'Illuminate\\Contracts\\Cache\\LockTimeoutException' => $vendorDir . '/illuminate/contracts/Cache/LockTimeoutException.php',
|
| 1003 |
-
'Illuminate\\Contracts\\Cache\\Repository' => $vendorDir . '/illuminate/contracts/Cache/Repository.php',
|
| 1004 |
-
'Illuminate\\Contracts\\Cache\\Store' => $vendorDir . '/illuminate/contracts/Cache/Store.php',
|
| 1005 |
-
'Illuminate\\Contracts\\Config\\Repository' => $vendorDir . '/illuminate/contracts/Config/Repository.php',
|
| 1006 |
-
'Illuminate\\Contracts\\Console\\Application' => $vendorDir . '/illuminate/contracts/Console/Application.php',
|
| 1007 |
-
'Illuminate\\Contracts\\Console\\Kernel' => $vendorDir . '/illuminate/contracts/Console/Kernel.php',
|
| 1008 |
-
'Illuminate\\Contracts\\Container\\BindingResolutionException' => $vendorDir . '/illuminate/contracts/Container/BindingResolutionException.php',
|
| 1009 |
-
'Illuminate\\Contracts\\Container\\Container' => $vendorDir . '/illuminate/contracts/Container/Container.php',
|
| 1010 |
-
'Illuminate\\Contracts\\Container\\ContextualBindingBuilder' => $vendorDir . '/illuminate/contracts/Container/ContextualBindingBuilder.php',
|
| 1011 |
-
'Illuminate\\Contracts\\Cookie\\Factory' => $vendorDir . '/illuminate/contracts/Cookie/Factory.php',
|
| 1012 |
-
'Illuminate\\Contracts\\Cookie\\QueueingFactory' => $vendorDir . '/illuminate/contracts/Cookie/QueueingFactory.php',
|
| 1013 |
-
'Illuminate\\Contracts\\Database\\Events\\MigrationEvent' => $vendorDir . '/illuminate/contracts/Database/Events/MigrationEvent.php',
|
| 1014 |
-
'Illuminate\\Contracts\\Database\\ModelIdentifier' => $vendorDir . '/illuminate/contracts/Database/ModelIdentifier.php',
|
| 1015 |
-
'Illuminate\\Contracts\\Debug\\ExceptionHandler' => $vendorDir . '/illuminate/contracts/Debug/ExceptionHandler.php',
|
| 1016 |
-
'Illuminate\\Contracts\\Encryption\\DecryptException' => $vendorDir . '/illuminate/contracts/Encryption/DecryptException.php',
|
| 1017 |
-
'Illuminate\\Contracts\\Encryption\\EncryptException' => $vendorDir . '/illuminate/contracts/Encryption/EncryptException.php',
|
| 1018 |
-
'Illuminate\\Contracts\\Encryption\\Encrypter' => $vendorDir . '/illuminate/contracts/Encryption/Encrypter.php',
|
| 1019 |
-
'Illuminate\\Contracts\\Events\\Dispatcher' => $vendorDir . '/illuminate/contracts/Events/Dispatcher.php',
|
| 1020 |
-
'Illuminate\\Contracts\\Filesystem\\Cloud' => $vendorDir . '/illuminate/contracts/Filesystem/Cloud.php',
|
| 1021 |
-
'Illuminate\\Contracts\\Filesystem\\Factory' => $vendorDir . '/illuminate/contracts/Filesystem/Factory.php',
|
| 1022 |
-
'Illuminate\\Contracts\\Filesystem\\FileExistsException' => $vendorDir . '/illuminate/contracts/Filesystem/FileExistsException.php',
|
| 1023 |
-
'Illuminate\\Contracts\\Filesystem\\FileNotFoundException' => $vendorDir . '/illuminate/contracts/Filesystem/FileNotFoundException.php',
|
| 1024 |
-
'Illuminate\\Contracts\\Filesystem\\Filesystem' => $vendorDir . '/illuminate/contracts/Filesystem/Filesystem.php',
|
| 1025 |
-
'Illuminate\\Contracts\\Foundation\\Application' => $vendorDir . '/illuminate/contracts/Foundation/Application.php',
|
| 1026 |
-
'Illuminate\\Contracts\\Hashing\\Hasher' => $vendorDir . '/illuminate/contracts/Hashing/Hasher.php',
|
| 1027 |
-
'Illuminate\\Contracts\\Http\\Kernel' => $vendorDir . '/illuminate/contracts/Http/Kernel.php',
|
| 1028 |
-
'Illuminate\\Contracts\\Mail\\MailQueue' => $vendorDir . '/illuminate/contracts/Mail/MailQueue.php',
|
| 1029 |
-
'Illuminate\\Contracts\\Mail\\Mailable' => $vendorDir . '/illuminate/contracts/Mail/Mailable.php',
|
| 1030 |
-
'Illuminate\\Contracts\\Mail\\Mailer' => $vendorDir . '/illuminate/contracts/Mail/Mailer.php',
|
| 1031 |
-
'Illuminate\\Contracts\\Notifications\\Dispatcher' => $vendorDir . '/illuminate/contracts/Notifications/Dispatcher.php',
|
| 1032 |
-
'Illuminate\\Contracts\\Notifications\\Factory' => $vendorDir . '/illuminate/contracts/Notifications/Factory.php',
|
| 1033 |
-
'Illuminate\\Contracts\\Pagination\\LengthAwarePaginator' => $vendorDir . '/illuminate/contracts/Pagination/LengthAwarePaginator.php',
|
| 1034 |
-
'Illuminate\\Contracts\\Pagination\\Paginator' => $vendorDir . '/illuminate/contracts/Pagination/Paginator.php',
|
| 1035 |
-
'Illuminate\\Contracts\\Pipeline\\Hub' => $vendorDir . '/illuminate/contracts/Pipeline/Hub.php',
|
| 1036 |
-
'Illuminate\\Contracts\\Pipeline\\Pipeline' => $vendorDir . '/illuminate/contracts/Pipeline/Pipeline.php',
|
| 1037 |
-
'Illuminate\\Contracts\\Queue\\EntityNotFoundException' => $vendorDir . '/illuminate/contracts/Queue/EntityNotFoundException.php',
|
| 1038 |
-
'Illuminate\\Contracts\\Queue\\EntityResolver' => $vendorDir . '/illuminate/contracts/Queue/EntityResolver.php',
|
| 1039 |
-
'Illuminate\\Contracts\\Queue\\Factory' => $vendorDir . '/illuminate/contracts/Queue/Factory.php',
|
| 1040 |
-
'Illuminate\\Contracts\\Queue\\Job' => $vendorDir . '/illuminate/contracts/Queue/Job.php',
|
| 1041 |
-
'Illuminate\\Contracts\\Queue\\Monitor' => $vendorDir . '/illuminate/contracts/Queue/Monitor.php',
|
| 1042 |
-
'Illuminate\\Contracts\\Queue\\Queue' => $vendorDir . '/illuminate/contracts/Queue/Queue.php',
|
| 1043 |
-
'Illuminate\\Contracts\\Queue\\QueueableCollection' => $vendorDir . '/illuminate/contracts/Queue/QueueableCollection.php',
|
| 1044 |
-
'Illuminate\\Contracts\\Queue\\QueueableEntity' => $vendorDir . '/illuminate/contracts/Queue/QueueableEntity.php',
|
| 1045 |
-
'Illuminate\\Contracts\\Queue\\ShouldQueue' => $vendorDir . '/illuminate/contracts/Queue/ShouldQueue.php',
|
| 1046 |
-
'Illuminate\\Contracts\\Redis\\Connection' => $vendorDir . '/illuminate/contracts/Redis/Connection.php',
|
| 1047 |
-
'Illuminate\\Contracts\\Redis\\Connector' => $vendorDir . '/illuminate/contracts/Redis/Connector.php',
|
| 1048 |
-
'Illuminate\\Contracts\\Redis\\Factory' => $vendorDir . '/illuminate/contracts/Redis/Factory.php',
|
| 1049 |
-
'Illuminate\\Contracts\\Redis\\LimiterTimeoutException' => $vendorDir . '/illuminate/contracts/Redis/LimiterTimeoutException.php',
|
| 1050 |
-
'Illuminate\\Contracts\\Routing\\BindingRegistrar' => $vendorDir . '/illuminate/contracts/Routing/BindingRegistrar.php',
|
| 1051 |
-
'Illuminate\\Contracts\\Routing\\Registrar' => $vendorDir . '/illuminate/contracts/Routing/Registrar.php',
|
| 1052 |
-
'Illuminate\\Contracts\\Routing\\ResponseFactory' => $vendorDir . '/illuminate/contracts/Routing/ResponseFactory.php',
|
| 1053 |
-
'Illuminate\\Contracts\\Routing\\UrlGenerator' => $vendorDir . '/illuminate/contracts/Routing/UrlGenerator.php',
|
| 1054 |
-
'Illuminate\\Contracts\\Routing\\UrlRoutable' => $vendorDir . '/illuminate/contracts/Routing/UrlRoutable.php',
|
| 1055 |
-
'Illuminate\\Contracts\\Session\\Session' => $vendorDir . '/illuminate/contracts/Session/Session.php',
|
| 1056 |
-
'Illuminate\\Contracts\\Support\\Arrayable' => $vendorDir . '/illuminate/contracts/Support/Arrayable.php',
|
| 1057 |
-
'Illuminate\\Contracts\\Support\\DeferrableProvider' => $vendorDir . '/illuminate/contracts/Support/DeferrableProvider.php',
|
| 1058 |
-
'Illuminate\\Contracts\\Support\\Htmlable' => $vendorDir . '/illuminate/contracts/Support/Htmlable.php',
|
| 1059 |
-
'Illuminate\\Contracts\\Support\\Jsonable' => $vendorDir . '/illuminate/contracts/Support/Jsonable.php',
|
| 1060 |
-
'Illuminate\\Contracts\\Support\\MessageBag' => $vendorDir . '/illuminate/contracts/Support/MessageBag.php',
|
| 1061 |
-
'Illuminate\\Contracts\\Support\\MessageProvider' => $vendorDir . '/illuminate/contracts/Support/MessageProvider.php',
|
| 1062 |
-
'Illuminate\\Contracts\\Support\\Renderable' => $vendorDir . '/illuminate/contracts/Support/Renderable.php',
|
| 1063 |
-
'Illuminate\\Contracts\\Support\\Responsable' => $vendorDir . '/illuminate/contracts/Support/Responsable.php',
|
| 1064 |
-
'Illuminate\\Contracts\\Translation\\HasLocalePreference' => $vendorDir . '/illuminate/contracts/Translation/HasLocalePreference.php',
|
| 1065 |
-
'Illuminate\\Contracts\\Translation\\Loader' => $vendorDir . '/illuminate/contracts/Translation/Loader.php',
|
| 1066 |
-
'Illuminate\\Contracts\\Translation\\Translator' => $vendorDir . '/illuminate/contracts/Translation/Translator.php',
|
| 1067 |
-
'Illuminate\\Contracts\\Validation\\Factory' => $vendorDir . '/illuminate/contracts/Validation/Factory.php',
|
| 1068 |
-
'Illuminate\\Contracts\\Validation\\ImplicitRule' => $vendorDir . '/illuminate/contracts/Validation/ImplicitRule.php',
|
| 1069 |
-
'Illuminate\\Contracts\\Validation\\Rule' => $vendorDir . '/illuminate/contracts/Validation/Rule.php',
|
| 1070 |
-
'Illuminate\\Contracts\\Validation\\ValidatesWhenResolved' => $vendorDir . '/illuminate/contracts/Validation/ValidatesWhenResolved.php',
|
| 1071 |
-
'Illuminate\\Contracts\\Validation\\Validator' => $vendorDir . '/illuminate/contracts/Validation/Validator.php',
|
| 1072 |
-
'Illuminate\\Contracts\\View\\Engine' => $vendorDir . '/illuminate/contracts/View/Engine.php',
|
| 1073 |
-
'Illuminate\\Contracts\\View\\Factory' => $vendorDir . '/illuminate/contracts/View/Factory.php',
|
| 1074 |
-
'Illuminate\\Contracts\\View\\View' => $vendorDir . '/illuminate/contracts/View/View.php',
|
| 1075 |
-
'Illuminate\\Support\\AggregateServiceProvider' => $vendorDir . '/illuminate/support/AggregateServiceProvider.php',
|
| 1076 |
-
'Illuminate\\Support\\Arr' => $vendorDir . '/illuminate/support/Arr.php',
|
| 1077 |
-
'Illuminate\\Support\\Carbon' => $vendorDir . '/illuminate/support/Carbon.php',
|
| 1078 |
-
'Illuminate\\Support\\Collection' => $vendorDir . '/illuminate/support/Collection.php',
|
| 1079 |
-
'Illuminate\\Support\\Composer' => $vendorDir . '/illuminate/support/Composer.php',
|
| 1080 |
-
'Illuminate\\Support\\ConfigurationUrlParser' => $vendorDir . '/illuminate/support/ConfigurationUrlParser.php',
|
| 1081 |
-
'Illuminate\\Support\\DateFactory' => $vendorDir . '/illuminate/support/DateFactory.php',
|
| 1082 |
-
'Illuminate\\Support\\Facades\\App' => $vendorDir . '/illuminate/support/Facades/App.php',
|
| 1083 |
-
'Illuminate\\Support\\Facades\\Artisan' => $vendorDir . '/illuminate/support/Facades/Artisan.php',
|
| 1084 |
-
'Illuminate\\Support\\Facades\\Auth' => $vendorDir . '/illuminate/support/Facades/Auth.php',
|
| 1085 |
-
'Illuminate\\Support\\Facades\\Blade' => $vendorDir . '/illuminate/support/Facades/Blade.php',
|
| 1086 |
-
'Illuminate\\Support\\Facades\\Broadcast' => $vendorDir . '/illuminate/support/Facades/Broadcast.php',
|
| 1087 |
-
'Illuminate\\Support\\Facades\\Bus' => $vendorDir . '/illuminate/support/Facades/Bus.php',
|
| 1088 |
-
'Illuminate\\Support\\Facades\\Cache' => $vendorDir . '/illuminate/support/Facades/Cache.php',
|
| 1089 |
-
'Illuminate\\Support\\Facades\\Config' => $vendorDir . '/illuminate/support/Facades/Config.php',
|
| 1090 |
-
'Illuminate\\Support\\Facades\\Cookie' => $vendorDir . '/illuminate/support/Facades/Cookie.php',
|
| 1091 |
-
'Illuminate\\Support\\Facades\\Crypt' => $vendorDir . '/illuminate/support/Facades/Crypt.php',
|
| 1092 |
-
'Illuminate\\Support\\Facades\\DB' => $vendorDir . '/illuminate/support/Facades/DB.php',
|
| 1093 |
-
'Illuminate\\Support\\Facades\\Date' => $vendorDir . '/illuminate/support/Facades/Date.php',
|
| 1094 |
-
'Illuminate\\Support\\Facades\\Event' => $vendorDir . '/illuminate/support/Facades/Event.php',
|
| 1095 |
-
'Illuminate\\Support\\Facades\\Facade' => $vendorDir . '/illuminate/support/Facades/Facade.php',
|
| 1096 |
-
'Illuminate\\Support\\Facades\\File' => $vendorDir . '/illuminate/support/Facades/File.php',
|
| 1097 |
-
'Illuminate\\Support\\Facades\\Gate' => $vendorDir . '/illuminate/support/Facades/Gate.php',
|
| 1098 |
-
'Illuminate\\Support\\Facades\\Hash' => $vendorDir . '/illuminate/support/Facades/Hash.php',
|
| 1099 |
-
'Illuminate\\Support\\Facades\\Input' => $vendorDir . '/illuminate/support/Facades/Input.php',
|
| 1100 |
-
'Illuminate\\Support\\Facades\\Lang' => $vendorDir . '/illuminate/support/Facades/Lang.php',
|
| 1101 |
-
'Illuminate\\Support\\Facades\\Log' => $vendorDir . '/illuminate/support/Facades/Log.php',
|
| 1102 |
-
'Illuminate\\Support\\Facades\\Mail' => $vendorDir . '/illuminate/support/Facades/Mail.php',
|
| 1103 |
-
'Illuminate\\Support\\Facades\\Notification' => $vendorDir . '/illuminate/support/Facades/Notification.php',
|
| 1104 |
-
'Illuminate\\Support\\Facades\\Password' => $vendorDir . '/illuminate/support/Facades/Password.php',
|
| 1105 |
-
'Illuminate\\Support\\Facades\\Queue' => $vendorDir . '/illuminate/support/Facades/Queue.php',
|
| 1106 |
-
'Illuminate\\Support\\Facades\\Redirect' => $vendorDir . '/illuminate/support/Facades/Redirect.php',
|
| 1107 |
-
'Illuminate\\Support\\Facades\\Redis' => $vendorDir . '/illuminate/support/Facades/Redis.php',
|
| 1108 |
-
'Illuminate\\Support\\Facades\\Request' => $vendorDir . '/illuminate/support/Facades/Request.php',
|
| 1109 |
-
'Illuminate\\Support\\Facades\\Response' => $vendorDir . '/illuminate/support/Facades/Response.php',
|
| 1110 |
-
'Illuminate\\Support\\Facades\\Route' => $vendorDir . '/illuminate/support/Facades/Route.php',
|
| 1111 |
-
'Illuminate\\Support\\Facades\\Schema' => $vendorDir . '/illuminate/support/Facades/Schema.php',
|
| 1112 |
-
'Illuminate\\Support\\Facades\\Session' => $vendorDir . '/illuminate/support/Facades/Session.php',
|
| 1113 |
-
'Illuminate\\Support\\Facades\\Storage' => $vendorDir . '/illuminate/support/Facades/Storage.php',
|
| 1114 |
-
'Illuminate\\Support\\Facades\\URL' => $vendorDir . '/illuminate/support/Facades/URL.php',
|
| 1115 |
-
'Illuminate\\Support\\Facades\\Validator' => $vendorDir . '/illuminate/support/Facades/Validator.php',
|
| 1116 |
-
'Illuminate\\Support\\Facades\\View' => $vendorDir . '/illuminate/support/Facades/View.php',
|
| 1117 |
-
'Illuminate\\Support\\Fluent' => $vendorDir . '/illuminate/support/Fluent.php',
|
| 1118 |
-
'Illuminate\\Support\\HigherOrderCollectionProxy' => $vendorDir . '/illuminate/support/HigherOrderCollectionProxy.php',
|
| 1119 |
-
'Illuminate\\Support\\HigherOrderTapProxy' => $vendorDir . '/illuminate/support/HigherOrderTapProxy.php',
|
| 1120 |
-
'Illuminate\\Support\\HtmlString' => $vendorDir . '/illuminate/support/HtmlString.php',
|
| 1121 |
-
'Illuminate\\Support\\InteractsWithTime' => $vendorDir . '/illuminate/support/InteractsWithTime.php',
|
| 1122 |
-
'Illuminate\\Support\\Manager' => $vendorDir . '/illuminate/support/Manager.php',
|
| 1123 |
-
'Illuminate\\Support\\MessageBag' => $vendorDir . '/illuminate/support/MessageBag.php',
|
| 1124 |
-
'Illuminate\\Support\\NamespacedItemResolver' => $vendorDir . '/illuminate/support/NamespacedItemResolver.php',
|
| 1125 |
-
'Illuminate\\Support\\Optional' => $vendorDir . '/illuminate/support/Optional.php',
|
| 1126 |
-
'Illuminate\\Support\\Pluralizer' => $vendorDir . '/illuminate/support/Pluralizer.php',
|
| 1127 |
-
'Illuminate\\Support\\ProcessUtils' => $vendorDir . '/illuminate/support/ProcessUtils.php',
|
| 1128 |
-
'Illuminate\\Support\\ServiceProvider' => $vendorDir . '/illuminate/support/ServiceProvider.php',
|
| 1129 |
-
'Illuminate\\Support\\Str' => $vendorDir . '/illuminate/support/Str.php',
|
| 1130 |
-
'Illuminate\\Support\\Testing\\Fakes\\BusFake' => $vendorDir . '/illuminate/support/Testing/Fakes/BusFake.php',
|
| 1131 |
-
'Illuminate\\Support\\Testing\\Fakes\\EventFake' => $vendorDir . '/illuminate/support/Testing/Fakes/EventFake.php',
|
| 1132 |
-
'Illuminate\\Support\\Testing\\Fakes\\MailFake' => $vendorDir . '/illuminate/support/Testing/Fakes/MailFake.php',
|
| 1133 |
-
'Illuminate\\Support\\Testing\\Fakes\\NotificationFake' => $vendorDir . '/illuminate/support/Testing/Fakes/NotificationFake.php',
|
| 1134 |
-
'Illuminate\\Support\\Testing\\Fakes\\PendingMailFake' => $vendorDir . '/illuminate/support/Testing/Fakes/PendingMailFake.php',
|
| 1135 |
-
'Illuminate\\Support\\Testing\\Fakes\\QueueFake' => $vendorDir . '/illuminate/support/Testing/Fakes/QueueFake.php',
|
| 1136 |
-
'Illuminate\\Support\\Traits\\CapsuleManagerTrait' => $vendorDir . '/illuminate/support/Traits/CapsuleManagerTrait.php',
|
| 1137 |
-
'Illuminate\\Support\\Traits\\ForwardsCalls' => $vendorDir . '/illuminate/support/Traits/ForwardsCalls.php',
|
| 1138 |
-
'Illuminate\\Support\\Traits\\Localizable' => $vendorDir . '/illuminate/support/Traits/Localizable.php',
|
| 1139 |
-
'Illuminate\\Support\\Traits\\Macroable' => $vendorDir . '/illuminate/support/Traits/Macroable.php',
|
| 1140 |
-
'Illuminate\\Support\\Traits\\Tappable' => $vendorDir . '/illuminate/support/Traits/Tappable.php',
|
| 1141 |
-
'Illuminate\\Support\\ViewErrorBag' => $vendorDir . '/illuminate/support/ViewErrorBag.php',
|
| 1142 |
-
'JsonSchema\\Constraints\\BaseConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php',
|
| 1143 |
-
'JsonSchema\\Constraints\\CollectionConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php',
|
| 1144 |
-
'JsonSchema\\Constraints\\Constraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php',
|
| 1145 |
-
'JsonSchema\\Constraints\\ConstraintInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php',
|
| 1146 |
-
'JsonSchema\\Constraints\\EnumConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php',
|
| 1147 |
-
'JsonSchema\\Constraints\\Factory' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php',
|
| 1148 |
-
'JsonSchema\\Constraints\\FormatConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php',
|
| 1149 |
-
'JsonSchema\\Constraints\\NumberConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php',
|
| 1150 |
-
'JsonSchema\\Constraints\\ObjectConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.php',
|
| 1151 |
-
'JsonSchema\\Constraints\\SchemaConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.php',
|
| 1152 |
-
'JsonSchema\\Constraints\\StringConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php',
|
| 1153 |
-
'JsonSchema\\Constraints\\TypeCheck\\LooseTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.php',
|
| 1154 |
-
'JsonSchema\\Constraints\\TypeCheck\\StrictTypeCheck' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.php',
|
| 1155 |
-
'JsonSchema\\Constraints\\TypeCheck\\TypeCheckInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php',
|
| 1156 |
-
'JsonSchema\\Constraints\\TypeConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php',
|
| 1157 |
-
'JsonSchema\\Constraints\\UndefinedConstraint' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php',
|
| 1158 |
-
'JsonSchema\\Entity\\JsonPointer' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.php',
|
| 1159 |
-
'JsonSchema\\Exception\\ExceptionInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.php',
|
| 1160 |
-
'JsonSchema\\Exception\\InvalidArgumentException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php',
|
| 1161 |
-
'JsonSchema\\Exception\\InvalidConfigException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.php',
|
| 1162 |
-
'JsonSchema\\Exception\\InvalidSchemaException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.php',
|
| 1163 |
-
'JsonSchema\\Exception\\InvalidSchemaMediaTypeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.php',
|
| 1164 |
-
'JsonSchema\\Exception\\InvalidSourceUriException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.php',
|
| 1165 |
-
'JsonSchema\\Exception\\JsonDecodingException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.php',
|
| 1166 |
-
'JsonSchema\\Exception\\ResourceNotFoundException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.php',
|
| 1167 |
-
'JsonSchema\\Exception\\RuntimeException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php',
|
| 1168 |
-
'JsonSchema\\Exception\\UnresolvableJsonPointerException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php',
|
| 1169 |
-
'JsonSchema\\Exception\\UriResolverException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.php',
|
| 1170 |
-
'JsonSchema\\Exception\\ValidationException' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.php',
|
| 1171 |
-
'JsonSchema\\Iterator\\ObjectIterator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.php',
|
| 1172 |
-
'JsonSchema\\Rfc3339' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php',
|
| 1173 |
-
'JsonSchema\\SchemaStorage' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php',
|
| 1174 |
-
'JsonSchema\\SchemaStorageInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php',
|
| 1175 |
-
'JsonSchema\\UriResolverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php',
|
| 1176 |
-
'JsonSchema\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php',
|
| 1177 |
-
'JsonSchema\\Uri\\Retrievers\\AbstractRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.php',
|
| 1178 |
-
'JsonSchema\\Uri\\Retrievers\\Curl' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php',
|
| 1179 |
-
'JsonSchema\\Uri\\Retrievers\\FileGetContents' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php',
|
| 1180 |
-
'JsonSchema\\Uri\\Retrievers\\PredefinedArray' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php',
|
| 1181 |
-
'JsonSchema\\Uri\\Retrievers\\UriRetrieverInterface' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php',
|
| 1182 |
-
'JsonSchema\\Uri\\UriResolver' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php',
|
| 1183 |
-
'JsonSchema\\Uri\\UriRetriever' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php',
|
| 1184 |
-
'JsonSchema\\Validator' => $vendorDir . '/justinrainbow/json-schema/src/JsonSchema/Validator.php',
|
| 1185 |
-
'MikeMcLin\\WpPassword\\Contracts\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/Contracts/WpPassword.php',
|
| 1186 |
-
'MikeMcLin\\WpPassword\\Facades\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/Facades/WpPassword.php',
|
| 1187 |
-
'MikeMcLin\\WpPassword\\WpPassword' => $vendorDir . '/mikemclin/laravel-wp-password/src/WpPassword.php',
|
| 1188 |
-
'MikeMcLin\\WpPassword\\WpPasswordProvider' => $vendorDir . '/mikemclin/laravel-wp-password/src/WpPasswordProvider.php',
|
| 1189 |
-
'Mustache_Autoloader' => $vendorDir . '/mustache/mustache/src/Mustache/Autoloader.php',
|
| 1190 |
-
'Mustache_Cache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache.php',
|
| 1191 |
-
'Mustache_Cache_AbstractCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/AbstractCache.php',
|
| 1192 |
-
'Mustache_Cache_FilesystemCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/FilesystemCache.php',
|
| 1193 |
-
'Mustache_Cache_NoopCache' => $vendorDir . '/mustache/mustache/src/Mustache/Cache/NoopCache.php',
|
| 1194 |
-
'Mustache_Compiler' => $vendorDir . '/mustache/mustache/src/Mustache/Compiler.php',
|
| 1195 |
-
'Mustache_Context' => $vendorDir . '/mustache/mustache/src/Mustache/Context.php',
|
| 1196 |
-
'Mustache_Engine' => $vendorDir . '/mustache/mustache/src/Mustache/Engine.php',
|
| 1197 |
-
'Mustache_Exception' => $vendorDir . '/mustache/mustache/src/Mustache/Exception.php',
|
| 1198 |
-
'Mustache_Exception_InvalidArgumentException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/InvalidArgumentException.php',
|
| 1199 |
-
'Mustache_Exception_LogicException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/LogicException.php',
|
| 1200 |
-
'Mustache_Exception_RuntimeException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/RuntimeException.php',
|
| 1201 |
-
'Mustache_Exception_SyntaxException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/SyntaxException.php',
|
| 1202 |
-
'Mustache_Exception_UnknownFilterException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownFilterException.php',
|
| 1203 |
-
'Mustache_Exception_UnknownHelperException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownHelperException.php',
|
| 1204 |
-
'Mustache_Exception_UnknownTemplateException' => $vendorDir . '/mustache/mustache/src/Mustache/Exception/UnknownTemplateException.php',
|
| 1205 |
-
'Mustache_HelperCollection' => $vendorDir . '/mustache/mustache/src/Mustache/HelperCollection.php',
|
| 1206 |
-
'Mustache_LambdaHelper' => $vendorDir . '/mustache/mustache/src/Mustache/LambdaHelper.php',
|
| 1207 |
-
'Mustache_Loader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader.php',
|
| 1208 |
-
'Mustache_Loader_ArrayLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/ArrayLoader.php',
|
| 1209 |
-
'Mustache_Loader_CascadingLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/CascadingLoader.php',
|
| 1210 |
-
'Mustache_Loader_FilesystemLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/FilesystemLoader.php',
|
| 1211 |
-
'Mustache_Loader_InlineLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/InlineLoader.php',
|
| 1212 |
-
'Mustache_Loader_MutableLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/MutableLoader.php',
|
| 1213 |
-
'Mustache_Loader_ProductionFilesystemLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/ProductionFilesystemLoader.php',
|
| 1214 |
-
'Mustache_Loader_StringLoader' => $vendorDir . '/mustache/mustache/src/Mustache/Loader/StringLoader.php',
|
| 1215 |
-
'Mustache_Logger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger.php',
|
| 1216 |
-
'Mustache_Logger_AbstractLogger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger/AbstractLogger.php',
|
| 1217 |
-
'Mustache_Logger_StreamLogger' => $vendorDir . '/mustache/mustache/src/Mustache/Logger/StreamLogger.php',
|
| 1218 |
-
'Mustache_Parser' => $vendorDir . '/mustache/mustache/src/Mustache/Parser.php',
|
| 1219 |
-
'Mustache_Source' => $vendorDir . '/mustache/mustache/src/Mustache/Source.php',
|
| 1220 |
-
'Mustache_Source_FilesystemSource' => $vendorDir . '/mustache/mustache/src/Mustache/Source/FilesystemSource.php',
|
| 1221 |
-
'Mustache_Template' => $vendorDir . '/mustache/mustache/src/Mustache/Template.php',
|
| 1222 |
-
'Mustache_Tokenizer' => $vendorDir . '/mustache/mustache/src/Mustache/Tokenizer.php',
|
| 1223 |
-
'Mustangostang\\Spyc' => $vendorDir . '/wp-cli/mustangostang-spyc/src/Spyc.php',
|
| 1224 |
-
'MySQLDump' => $vendorDir . '/dg/mysql-dump/src/MySQLDump.php',
|
| 1225 |
-
'MySQLImport' => $vendorDir . '/dg/mysql-dump/src/MySQLImport.php',
|
| 1226 |
-
'Oxymel' => $vendorDir . '/nb/oxymel/Oxymel.php',
|
| 1227 |
-
'OxymelException' => $vendorDir . '/nb/oxymel/Oxymel.php',
|
| 1228 |
-
'OxymelTest' => $vendorDir . '/nb/oxymel/OxymelTest.php',
|
| 1229 |
-
'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php',
|
| 1230 |
-
'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php',
|
| 1231 |
-
'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/AssertionFailedError.php',
|
| 1232 |
-
'PHPUnit\\Framework\\BaseTestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/BaseTestListener.php',
|
| 1233 |
-
'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/CodeCoverageException.php',
|
| 1234 |
-
'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArrayHasKey.php',
|
| 1235 |
-
'PHPUnit\\Framework\\Constraint\\ArraySubset' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ArraySubset.php',
|
| 1236 |
-
'PHPUnit\\Framework\\Constraint\\Attribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Attribute.php',
|
| 1237 |
-
'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php',
|
| 1238 |
-
'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasAttribute.php',
|
| 1239 |
-
'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ClassHasStaticAttribute.php',
|
| 1240 |
-
'PHPUnit\\Framework\\Constraint\\Composite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Composite.php',
|
| 1241 |
-
'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php',
|
| 1242 |
-
'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Count.php',
|
| 1243 |
-
'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/DirectoryExists.php',
|
| 1244 |
-
'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception.php',
|
| 1245 |
-
'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionCode.php',
|
| 1246 |
-
'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessage.php',
|
| 1247 |
-
'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ExceptionMessageRegularExpression.php',
|
| 1248 |
-
'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/FileExists.php',
|
| 1249 |
-
'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/GreaterThan.php',
|
| 1250 |
-
'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php',
|
| 1251 |
-
'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEmpty.php',
|
| 1252 |
-
'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsEqual.php',
|
| 1253 |
-
'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFalse.php',
|
| 1254 |
-
'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsFinite.php',
|
| 1255 |
-
'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php',
|
| 1256 |
-
'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInfinite.php',
|
| 1257 |
-
'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsInstanceOf.php',
|
| 1258 |
-
'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsJson.php',
|
| 1259 |
-
'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNan.php',
|
| 1260 |
-
'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsNull.php',
|
| 1261 |
-
'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsReadable.php',
|
| 1262 |
-
'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsTrue.php',
|
| 1263 |
-
'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsType.php',
|
| 1264 |
-
'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsWritable.php',
|
| 1265 |
-
'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php',
|
| 1266 |
-
'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php',
|
| 1267 |
-
'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LessThan.php',
|
| 1268 |
-
'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalAnd.php',
|
| 1269 |
-
'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalNot.php',
|
| 1270 |
-
'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalOr.php',
|
| 1271 |
-
'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/LogicalXor.php',
|
| 1272 |
-
'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/ObjectHasAttribute.php',
|
| 1273 |
-
'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/RegularExpression.php',
|
| 1274 |
-
'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/SameSize.php',
|
| 1275 |
-
'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringContains.php',
|
| 1276 |
-
'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringEndsWith.php',
|
| 1277 |
-
'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringMatchesFormatDescription.php',
|
| 1278 |
-
'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/StringStartsWith.php',
|
| 1279 |
-
'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContains.php',
|
| 1280 |
-
'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/TraversableContainsOnly.php',
|
| 1281 |
-
'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/CoveredCodeNotExecutedException.php',
|
| 1282 |
-
'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php',
|
| 1283 |
-
'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php',
|
| 1284 |
-
'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php',
|
| 1285 |
-
'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php',
|
| 1286 |
-
'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php',
|
| 1287 |
-
'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception.php',
|
| 1288 |
-
'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php',
|
| 1289 |
-
'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/ExpectationFailedException.php',
|
| 1290 |
-
'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php',
|
| 1291 |
-
'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php',
|
| 1292 |
-
'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestError.php',
|
| 1293 |
-
'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidCoversTargetException.php',
|
| 1294 |
-
'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/MissingCoversAnnotationException.php',
|
| 1295 |
-
'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/BadMethodCallException.php',
|
| 1296 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Identity.php',
|
| 1297 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/InvocationMocker.php',
|
| 1298 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\Match' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Match.php',
|
| 1299 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/MethodNameMatch.php',
|
| 1300 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\NamespaceMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/NamespaceMatch.php',
|
| 1301 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/ParametersMatch.php',
|
| 1302 |
-
'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Builder/Stub.php',
|
| 1303 |
-
'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/Exception.php',
|
| 1304 |
-
'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Generator.php',
|
| 1305 |
-
'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/Invocation.php',
|
| 1306 |
-
'PHPUnit\\Framework\\MockObject\\InvocationMocker' => $vendorDir . '/phpunit/phpunit-mock-objects/src/InvocationMocker.php',
|
| 1307 |
-
'PHPUnit\\Framework\\MockObject\\Invocation\\ObjectInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/ObjectInvocation.php',
|
| 1308 |
-
'PHPUnit\\Framework\\MockObject\\Invocation\\StaticInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invocation/StaticInvocation.php',
|
| 1309 |
-
'PHPUnit\\Framework\\MockObject\\Invokable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Invokable.php',
|
| 1310 |
-
'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher.php',
|
| 1311 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyInvokedCount.php',
|
| 1312 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\AnyParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/AnyParameters.php',
|
| 1313 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/ConsecutiveParameters.php',
|
| 1314 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\Invocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Invocation.php',
|
| 1315 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtIndex.php',
|
| 1316 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastCount.php',
|
| 1317 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtLeastOnce.php',
|
| 1318 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedAtMostCount.php',
|
| 1319 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedCount' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedCount.php',
|
| 1320 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\InvokedRecorder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/InvokedRecorder.php',
|
| 1321 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\MethodName' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/MethodName.php',
|
| 1322 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\Parameters' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/Parameters.php',
|
| 1323 |
-
'PHPUnit\\Framework\\MockObject\\Matcher\\StatelessInvocation' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Matcher/StatelessInvocation.php',
|
| 1324 |
-
'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockBuilder.php',
|
| 1325 |
-
'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/ForwardCompatibility/MockObject.php',
|
| 1326 |
-
'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Exception/RuntimeException.php',
|
| 1327 |
-
'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub.php',
|
| 1328 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ConsecutiveCalls.php',
|
| 1329 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/Exception.php',
|
| 1330 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\MatcherCollection' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/MatcherCollection.php',
|
| 1331 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnArgument.php',
|
| 1332 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnCallback.php',
|
| 1333 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnReference.php',
|
| 1334 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnSelf.php',
|
| 1335 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnStub.php',
|
| 1336 |
-
'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Stub/ReturnValueMap.php',
|
| 1337 |
-
'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit-mock-objects/src/Verifiable.php',
|
| 1338 |
-
'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/OutputError.php',
|
| 1339 |
-
'PHPUnit\\Framework\\RiskyTest' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTest.php',
|
| 1340 |
-
'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/RiskyTestError.php',
|
| 1341 |
-
'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php',
|
| 1342 |
-
'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php',
|
| 1343 |
-
'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php',
|
| 1344 |
-
'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestError.php',
|
| 1345 |
-
'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestSuiteError.php',
|
| 1346 |
-
'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/SyntheticError.php',
|
| 1347 |
-
'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php',
|
| 1348 |
-
'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php',
|
| 1349 |
-
'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php',
|
| 1350 |
-
'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php',
|
| 1351 |
-
'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php',
|
| 1352 |
-
'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php',
|
| 1353 |
-
'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php',
|
| 1354 |
-
'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php',
|
| 1355 |
-
'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/UnintentionallyCoveredCodeError.php',
|
| 1356 |
-
'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Warning.php',
|
| 1357 |
-
'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php',
|
| 1358 |
-
'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php',
|
| 1359 |
-
'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php',
|
| 1360 |
-
'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php',
|
| 1361 |
-
'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php',
|
| 1362 |
-
'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php',
|
| 1363 |
-
'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php',
|
| 1364 |
-
'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php',
|
| 1365 |
-
'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php',
|
| 1366 |
-
'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php',
|
| 1367 |
-
'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php',
|
| 1368 |
-
'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php',
|
| 1369 |
-
'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php',
|
| 1370 |
-
'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php',
|
| 1371 |
-
'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php',
|
| 1372 |
-
'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php',
|
| 1373 |
-
'PHPUnit\\Util\\Configuration' => $vendorDir . '/phpunit/phpunit/src/Util/Configuration.php',
|
| 1374 |
-
'PHPUnit\\Util\\ConfigurationGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/ConfigurationGenerator.php',
|
| 1375 |
-
'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php',
|
| 1376 |
-
'PHPUnit\\Util\\Fileloader' => $vendorDir . '/phpunit/phpunit/src/Util/Fileloader.php',
|
| 1377 |
-
'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php',
|
| 1378 |
-
'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php',
|
| 1379 |
-
'PHPUnit\\Util\\Getopt' => $vendorDir . '/phpunit/phpunit/src/Util/Getopt.php',
|
| 1380 |
-
'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php',
|
| 1381 |
-
'PHPUnit\\Util\\InvalidArgumentHelper' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidArgumentHelper.php',
|
| 1382 |
-
'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php',
|
| 1383 |
-
'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php',
|
| 1384 |
-
'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php',
|
| 1385 |
-
'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php',
|
| 1386 |
-
'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php',
|
| 1387 |
-
'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php',
|
| 1388 |
-
'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php',
|
| 1389 |
-
'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php',
|
| 1390 |
-
'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php',
|
| 1391 |
-
'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php',
|
| 1392 |
-
'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php',
|
| 1393 |
-
'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php',
|
| 1394 |
-
'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php',
|
| 1395 |
-
'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php',
|
| 1396 |
-
'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php',
|
| 1397 |
-
'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php',
|
| 1398 |
-
'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php',
|
| 1399 |
-
'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php',
|
| 1400 |
-
'PHPUnit_Framework_MockObject_MockObject' => $vendorDir . '/phpunit/phpunit-mock-objects/src/MockObject.php',
|
| 1401 |
-
'PHP_Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php',
|
| 1402 |
-
'PHP_Token' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1403 |
-
'PHP_TokenWithScope' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1404 |
-
'PHP_TokenWithScopeAndVisibility' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1405 |
-
'PHP_Token_ABSTRACT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1406 |
-
'PHP_Token_AMPERSAND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1407 |
-
'PHP_Token_AND_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1408 |
-
'PHP_Token_ARRAY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1409 |
-
'PHP_Token_ARRAY_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1410 |
-
'PHP_Token_AS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1411 |
-
'PHP_Token_ASYNC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1412 |
-
'PHP_Token_AT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1413 |
-
'PHP_Token_AWAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1414 |
-
'PHP_Token_BACKTICK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1415 |
-
'PHP_Token_BAD_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1416 |
-
'PHP_Token_BOOLEAN_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1417 |
-
'PHP_Token_BOOLEAN_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1418 |
-
'PHP_Token_BOOL_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1419 |
-
'PHP_Token_BREAK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1420 |
-
'PHP_Token_CALLABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1421 |
-
'PHP_Token_CARET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1422 |
-
'PHP_Token_CASE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1423 |
-
'PHP_Token_CATCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1424 |
-
'PHP_Token_CHARACTER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1425 |
-
'PHP_Token_CLASS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1426 |
-
'PHP_Token_CLASS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1427 |
-
'PHP_Token_CLASS_NAME_CONSTANT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1428 |
-
'PHP_Token_CLONE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1429 |
-
'PHP_Token_CLOSE_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1430 |
-
'PHP_Token_CLOSE_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1431 |
-
'PHP_Token_CLOSE_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1432 |
-
'PHP_Token_CLOSE_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1433 |
-
'PHP_Token_COALESCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1434 |
-
'PHP_Token_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1435 |
-
'PHP_Token_COMMA' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1436 |
-
'PHP_Token_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1437 |
-
'PHP_Token_COMPILER_HALT_OFFSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1438 |
-
'PHP_Token_CONCAT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1439 |
-
'PHP_Token_CONST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1440 |
-
'PHP_Token_CONSTANT_ENCAPSED_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1441 |
-
'PHP_Token_CONTINUE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1442 |
-
'PHP_Token_CURLY_OPEN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1443 |
-
'PHP_Token_DEC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1444 |
-
'PHP_Token_DECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1445 |
-
'PHP_Token_DEFAULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1446 |
-
'PHP_Token_DIR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1447 |
-
'PHP_Token_DIV' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1448 |
-
'PHP_Token_DIV_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1449 |
-
'PHP_Token_DNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1450 |
-
'PHP_Token_DO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1451 |
-
'PHP_Token_DOC_COMMENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1452 |
-
'PHP_Token_DOLLAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1453 |
-
'PHP_Token_DOLLAR_OPEN_CURLY_BRACES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1454 |
-
'PHP_Token_DOT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1455 |
-
'PHP_Token_DOUBLE_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1456 |
-
'PHP_Token_DOUBLE_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1457 |
-
'PHP_Token_DOUBLE_COLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1458 |
-
'PHP_Token_DOUBLE_QUOTES' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1459 |
-
'PHP_Token_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1460 |
-
'PHP_Token_ELLIPSIS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1461 |
-
'PHP_Token_ELSE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1462 |
-
'PHP_Token_ELSEIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1463 |
-
'PHP_Token_EMPTY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1464 |
-
'PHP_Token_ENCAPSED_AND_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1465 |
-
'PHP_Token_ENDDECLARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1466 |
-
'PHP_Token_ENDFOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1467 |
-
'PHP_Token_ENDFOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1468 |
-
'PHP_Token_ENDIF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1469 |
-
'PHP_Token_ENDSWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1470 |
-
'PHP_Token_ENDWHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1471 |
-
'PHP_Token_END_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1472 |
-
'PHP_Token_ENUM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1473 |
-
'PHP_Token_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1474 |
-
'PHP_Token_EQUALS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1475 |
-
'PHP_Token_EVAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1476 |
-
'PHP_Token_EXCLAMATION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1477 |
-
'PHP_Token_EXIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1478 |
-
'PHP_Token_EXTENDS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1479 |
-
'PHP_Token_FILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1480 |
-
'PHP_Token_FINAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1481 |
-
'PHP_Token_FINALLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1482 |
-
'PHP_Token_FOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1483 |
-
'PHP_Token_FOREACH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1484 |
-
'PHP_Token_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1485 |
-
'PHP_Token_FUNC_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1486 |
-
'PHP_Token_GLOBAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1487 |
-
'PHP_Token_GOTO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1488 |
-
'PHP_Token_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1489 |
-
'PHP_Token_HALT_COMPILER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1490 |
-
'PHP_Token_IF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1491 |
-
'PHP_Token_IMPLEMENTS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1492 |
-
'PHP_Token_IN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1493 |
-
'PHP_Token_INC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1494 |
-
'PHP_Token_INCLUDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1495 |
-
'PHP_Token_INCLUDE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1496 |
-
'PHP_Token_INLINE_HTML' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1497 |
-
'PHP_Token_INSTANCEOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1498 |
-
'PHP_Token_INSTEADOF' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1499 |
-
'PHP_Token_INTERFACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1500 |
-
'PHP_Token_INT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1501 |
-
'PHP_Token_ISSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1502 |
-
'PHP_Token_IS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1503 |
-
'PHP_Token_IS_GREATER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1504 |
-
'PHP_Token_IS_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1505 |
-
'PHP_Token_IS_NOT_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1506 |
-
'PHP_Token_IS_NOT_IDENTICAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1507 |
-
'PHP_Token_IS_SMALLER_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1508 |
-
'PHP_Token_Includes' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1509 |
-
'PHP_Token_JOIN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1510 |
-
'PHP_Token_LAMBDA_ARROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1511 |
-
'PHP_Token_LAMBDA_CP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1512 |
-
'PHP_Token_LAMBDA_OP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1513 |
-
'PHP_Token_LINE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1514 |
-
'PHP_Token_LIST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1515 |
-
'PHP_Token_LNUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1516 |
-
'PHP_Token_LOGICAL_AND' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1517 |
-
'PHP_Token_LOGICAL_OR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1518 |
-
'PHP_Token_LOGICAL_XOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1519 |
-
'PHP_Token_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1520 |
-
'PHP_Token_METHOD_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1521 |
-
'PHP_Token_MINUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1522 |
-
'PHP_Token_MINUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1523 |
-
'PHP_Token_MOD_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1524 |
-
'PHP_Token_MULT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1525 |
-
'PHP_Token_MUL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1526 |
-
'PHP_Token_NAMESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1527 |
-
'PHP_Token_NEW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1528 |
-
'PHP_Token_NS_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1529 |
-
'PHP_Token_NS_SEPARATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1530 |
-
'PHP_Token_NULLSAFE_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1531 |
-
'PHP_Token_NUM_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1532 |
-
'PHP_Token_OBJECT_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1533 |
-
'PHP_Token_OBJECT_OPERATOR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1534 |
-
'PHP_Token_ONUMBER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1535 |
-
'PHP_Token_OPEN_BRACKET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1536 |
-
'PHP_Token_OPEN_CURLY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1537 |
-
'PHP_Token_OPEN_SQUARE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1538 |
-
'PHP_Token_OPEN_TAG' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1539 |
-
'PHP_Token_OPEN_TAG_WITH_ECHO' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1540 |
-
'PHP_Token_OR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1541 |
-
'PHP_Token_PAAMAYIM_NEKUDOTAYIM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1542 |
-
'PHP_Token_PERCENT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1543 |
-
'PHP_Token_PIPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1544 |
-
'PHP_Token_PLUS' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1545 |
-
'PHP_Token_PLUS_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1546 |
-
'PHP_Token_POW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1547 |
-
'PHP_Token_POW_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1548 |
-
'PHP_Token_PRINT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1549 |
-
'PHP_Token_PRIVATE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1550 |
-
'PHP_Token_PROTECTED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1551 |
-
'PHP_Token_PUBLIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1552 |
-
'PHP_Token_QUESTION_MARK' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1553 |
-
'PHP_Token_REQUIRE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1554 |
-
'PHP_Token_REQUIRE_ONCE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1555 |
-
'PHP_Token_RETURN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1556 |
-
'PHP_Token_SEMICOLON' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1557 |
-
'PHP_Token_SHAPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1558 |
-
'PHP_Token_SL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1559 |
-
'PHP_Token_SL_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1560 |
-
'PHP_Token_SPACESHIP' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1561 |
-
'PHP_Token_SR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1562 |
-
'PHP_Token_SR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1563 |
-
'PHP_Token_START_HEREDOC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1564 |
-
'PHP_Token_STATIC' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1565 |
-
'PHP_Token_STRING' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1566 |
-
'PHP_Token_STRING_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1567 |
-
'PHP_Token_STRING_VARNAME' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1568 |
-
'PHP_Token_SUPER' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1569 |
-
'PHP_Token_SWITCH' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1570 |
-
'PHP_Token_Stream' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream.php',
|
| 1571 |
-
'PHP_Token_Stream_CachingFactory' => $vendorDir . '/phpunit/php-token-stream/src/Token/Stream/CachingFactory.php',
|
| 1572 |
-
'PHP_Token_THROW' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1573 |
-
'PHP_Token_TILDE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1574 |
-
'PHP_Token_TRAIT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1575 |
-
'PHP_Token_TRAIT_C' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1576 |
-
'PHP_Token_TRY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1577 |
-
'PHP_Token_TYPE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1578 |
-
'PHP_Token_TYPELIST_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1579 |
-
'PHP_Token_TYPELIST_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1580 |
-
'PHP_Token_UNSET' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1581 |
-
'PHP_Token_UNSET_CAST' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1582 |
-
'PHP_Token_USE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1583 |
-
'PHP_Token_USE_FUNCTION' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1584 |
-
'PHP_Token_VAR' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1585 |
-
'PHP_Token_VARIABLE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1586 |
-
'PHP_Token_WHERE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1587 |
-
'PHP_Token_WHILE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1588 |
-
'PHP_Token_WHITESPACE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1589 |
-
'PHP_Token_XHP_ATTRIBUTE' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1590 |
-
'PHP_Token_XHP_CATEGORY' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1591 |
-
'PHP_Token_XHP_CATEGORY_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1592 |
-
'PHP_Token_XHP_CHILDREN' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1593 |
-
'PHP_Token_XHP_LABEL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1594 |
-
'PHP_Token_XHP_REQUIRED' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1595 |
-
'PHP_Token_XHP_TAG_GT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1596 |
-
'PHP_Token_XHP_TAG_LT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1597 |
-
'PHP_Token_XHP_TEXT' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1598 |
-
'PHP_Token_XOR_EQUAL' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1599 |
-
'PHP_Token_YIELD' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1600 |
-
'PHP_Token_YIELD_FROM' => $vendorDir . '/phpunit/php-token-stream/src/Token.php',
|
| 1601 |
-
'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php',
|
| 1602 |
-
'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php',
|
| 1603 |
-
'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php',
|
| 1604 |
-
'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php',
|
| 1605 |
-
'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php',
|
| 1606 |
-
'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php',
|
| 1607 |
-
'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php',
|
| 1608 |
-
'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php',
|
| 1609 |
-
'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php',
|
| 1610 |
-
'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php',
|
| 1611 |
-
'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php',
|
| 1612 |
-
'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php',
|
| 1613 |
-
'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php',
|
| 1614 |
-
'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php',
|
| 1615 |
-
'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php',
|
| 1616 |
-
'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php',
|
| 1617 |
-
'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php',
|
| 1618 |
-
'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php',
|
| 1619 |
-
'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php',
|
| 1620 |
-
'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php',
|
| 1621 |
-
'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php',
|
| 1622 |
-
'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php',
|
| 1623 |
-
'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php',
|
| 1624 |
-
'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php',
|
| 1625 |
-
'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php',
|
| 1626 |
-
'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php',
|
| 1627 |
-
'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php',
|
| 1628 |
-
'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php',
|
| 1629 |
-
'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php',
|
| 1630 |
-
'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php',
|
| 1631 |
-
'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php',
|
| 1632 |
-
'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php',
|
| 1633 |
-
'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocumentLoadingException.php',
|
| 1634 |
-
'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php',
|
| 1635 |
-
'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php',
|
| 1636 |
-
'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php',
|
| 1637 |
-
'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php',
|
| 1638 |
-
'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php',
|
| 1639 |
-
'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php',
|
| 1640 |
-
'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php',
|
| 1641 |
-
'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php',
|
| 1642 |
-
'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php',
|
| 1643 |
-
'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php',
|
| 1644 |
-
'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php',
|
| 1645 |
-
'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php',
|
| 1646 |
-
'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php',
|
| 1647 |
-
'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php',
|
| 1648 |
-
'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php',
|
| 1649 |
-
'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php',
|
| 1650 |
-
'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/AbstractVersionConstraint.php',
|
| 1651 |
-
'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/AndVersionConstraintGroup.php',
|
| 1652 |
-
'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/AnyVersionConstraint.php',
|
| 1653 |
-
'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/ExactVersionConstraint.php',
|
| 1654 |
-
'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/Exception.php',
|
| 1655 |
-
'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/GreaterThanOrEqualToVersionConstraint.php',
|
| 1656 |
-
'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/InvalidVersionException.php',
|
| 1657 |
-
'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/OrVersionConstraintGroup.php',
|
| 1658 |
-
'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php',
|
| 1659 |
-
'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorAndMinorVersionConstraint.php',
|
| 1660 |
-
'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/SpecificMajorVersionConstraint.php',
|
| 1661 |
-
'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/UnsupportedVersionConstraintException.php',
|
| 1662 |
-
'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php',
|
| 1663 |
-
'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/VersionConstraint.php',
|
| 1664 |
-
'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php',
|
| 1665 |
-
'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php',
|
| 1666 |
-
'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php',
|
| 1667 |
-
'PhpOption\\LazyOption' => $vendorDir . '/phpoption/phpoption/src/PhpOption/LazyOption.php',
|
| 1668 |
-
'PhpOption\\None' => $vendorDir . '/phpoption/phpoption/src/PhpOption/None.php',
|
| 1669 |
-
'PhpOption\\Option' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Option.php',
|
| 1670 |
-
'PhpOption\\Some' => $vendorDir . '/phpoption/phpoption/src/PhpOption/Some.php',
|
| 1671 |
-
'Prophecy\\Argument' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument.php',
|
| 1672 |
-
'Prophecy\\Argument\\ArgumentsWildcard' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/ArgumentsWildcard.php',
|
| 1673 |
-
'Prophecy\\Argument\\Token\\AnyValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValueToken.php',
|
| 1674 |
-
'Prophecy\\Argument\\Token\\AnyValuesToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/AnyValuesToken.php',
|
| 1675 |
-
'Prophecy\\Argument\\Token\\ApproximateValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ApproximateValueToken.php',
|
| 1676 |
-
'Prophecy\\Argument\\Token\\ArrayCountToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayCountToken.php',
|
| 1677 |
-
'Prophecy\\Argument\\Token\\ArrayEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEntryToken.php',
|
| 1678 |
-
'Prophecy\\Argument\\Token\\ArrayEveryEntryToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ArrayEveryEntryToken.php',
|
| 1679 |
-
'Prophecy\\Argument\\Token\\CallbackToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/CallbackToken.php',
|
| 1680 |
-
'Prophecy\\Argument\\Token\\ExactValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ExactValueToken.php',
|
| 1681 |
-
'Prophecy\\Argument\\Token\\IdenticalValueToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/IdenticalValueToken.php',
|
| 1682 |
-
'Prophecy\\Argument\\Token\\LogicalAndToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalAndToken.php',
|
| 1683 |
-
'Prophecy\\Argument\\Token\\LogicalNotToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/LogicalNotToken.php',
|
| 1684 |
-
'Prophecy\\Argument\\Token\\ObjectStateToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/ObjectStateToken.php',
|
| 1685 |
-
'Prophecy\\Argument\\Token\\StringContainsToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/StringContainsToken.php',
|
| 1686 |
-
'Prophecy\\Argument\\Token\\TokenInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TokenInterface.php',
|
| 1687 |
-
'Prophecy\\Argument\\Token\\TypeToken' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Argument/Token/TypeToken.php',
|
| 1688 |
-
'Prophecy\\Call\\Call' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/Call.php',
|
| 1689 |
-
'Prophecy\\Call\\CallCenter' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Call/CallCenter.php',
|
| 1690 |
-
'Prophecy\\Comparator\\ClosureComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ClosureComparator.php',
|
| 1691 |
-
'Prophecy\\Comparator\\Factory' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/Factory.php',
|
| 1692 |
-
'Prophecy\\Comparator\\ProphecyComparator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Comparator/ProphecyComparator.php',
|
| 1693 |
-
'Prophecy\\Doubler\\CachedDoubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/CachedDoubler.php',
|
| 1694 |
-
'Prophecy\\Doubler\\ClassPatch\\ClassPatchInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ClassPatchInterface.php',
|
| 1695 |
-
'Prophecy\\Doubler\\ClassPatch\\DisableConstructorPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/DisableConstructorPatch.php',
|
| 1696 |
-
'Prophecy\\Doubler\\ClassPatch\\HhvmExceptionPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/HhvmExceptionPatch.php',
|
| 1697 |
-
'Prophecy\\Doubler\\ClassPatch\\KeywordPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/KeywordPatch.php',
|
| 1698 |
-
'Prophecy\\Doubler\\ClassPatch\\MagicCallPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/MagicCallPatch.php',
|
| 1699 |
-
'Prophecy\\Doubler\\ClassPatch\\ProphecySubjectPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ProphecySubjectPatch.php',
|
| 1700 |
-
'Prophecy\\Doubler\\ClassPatch\\ReflectionClassNewInstancePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ReflectionClassNewInstancePatch.php',
|
| 1701 |
-
'Prophecy\\Doubler\\ClassPatch\\SplFileInfoPatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/SplFileInfoPatch.php',
|
| 1702 |
-
'Prophecy\\Doubler\\ClassPatch\\ThrowablePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/ThrowablePatch.php',
|
| 1703 |
-
'Prophecy\\Doubler\\ClassPatch\\TraversablePatch' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/ClassPatch/TraversablePatch.php',
|
| 1704 |
-
'Prophecy\\Doubler\\DoubleInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/DoubleInterface.php',
|
| 1705 |
-
'Prophecy\\Doubler\\Doubler' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Doubler.php',
|
| 1706 |
-
'Prophecy\\Doubler\\Generator\\ClassCodeGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCodeGenerator.php',
|
| 1707 |
-
'Prophecy\\Doubler\\Generator\\ClassCreator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php',
|
| 1708 |
-
'Prophecy\\Doubler\\Generator\\ClassMirror' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassMirror.php',
|
| 1709 |
-
'Prophecy\\Doubler\\Generator\\Node\\ArgumentNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ArgumentNode.php',
|
| 1710 |
-
'Prophecy\\Doubler\\Generator\\Node\\ClassNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/ClassNode.php',
|
| 1711 |
-
'Prophecy\\Doubler\\Generator\\Node\\MethodNode' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/Node/MethodNode.php',
|
| 1712 |
-
'Prophecy\\Doubler\\Generator\\ReflectionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/ReflectionInterface.php',
|
| 1713 |
-
'Prophecy\\Doubler\\Generator\\TypeHintReference' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/Generator/TypeHintReference.php',
|
| 1714 |
-
'Prophecy\\Doubler\\LazyDouble' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/LazyDouble.php',
|
| 1715 |
-
'Prophecy\\Doubler\\NameGenerator' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Doubler/NameGenerator.php',
|
| 1716 |
-
'Prophecy\\Exception\\Call\\UnexpectedCallException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Call/UnexpectedCallException.php',
|
| 1717 |
-
'Prophecy\\Exception\\Doubler\\ClassCreatorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassCreatorException.php',
|
| 1718 |
-
'Prophecy\\Exception\\Doubler\\ClassMirrorException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassMirrorException.php',
|
| 1719 |
-
'Prophecy\\Exception\\Doubler\\ClassNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ClassNotFoundException.php',
|
| 1720 |
-
'Prophecy\\Exception\\Doubler\\DoubleException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoubleException.php',
|
| 1721 |
-
'Prophecy\\Exception\\Doubler\\DoublerException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/DoublerException.php',
|
| 1722 |
-
'Prophecy\\Exception\\Doubler\\InterfaceNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/InterfaceNotFoundException.php',
|
| 1723 |
-
'Prophecy\\Exception\\Doubler\\MethodNotExtendableException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotExtendableException.php',
|
| 1724 |
-
'Prophecy\\Exception\\Doubler\\MethodNotFoundException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/MethodNotFoundException.php',
|
| 1725 |
-
'Prophecy\\Exception\\Doubler\\ReturnByReferenceException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Doubler/ReturnByReferenceException.php',
|
| 1726 |
-
'Prophecy\\Exception\\Exception' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Exception.php',
|
| 1727 |
-
'Prophecy\\Exception\\InvalidArgumentException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/InvalidArgumentException.php',
|
| 1728 |
-
'Prophecy\\Exception\\Prediction\\AggregateException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/AggregateException.php',
|
| 1729 |
-
'Prophecy\\Exception\\Prediction\\FailedPredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/FailedPredictionException.php',
|
| 1730 |
-
'Prophecy\\Exception\\Prediction\\NoCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/NoCallsException.php',
|
| 1731 |
-
'Prophecy\\Exception\\Prediction\\PredictionException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/PredictionException.php',
|
| 1732 |
-
'Prophecy\\Exception\\Prediction\\UnexpectedCallsCountException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsCountException.php',
|
| 1733 |
-
'Prophecy\\Exception\\Prediction\\UnexpectedCallsException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prediction/UnexpectedCallsException.php',
|
| 1734 |
-
'Prophecy\\Exception\\Prophecy\\MethodProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/MethodProphecyException.php',
|
| 1735 |
-
'Prophecy\\Exception\\Prophecy\\ObjectProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ObjectProphecyException.php',
|
| 1736 |
-
'Prophecy\\Exception\\Prophecy\\ProphecyException' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Exception/Prophecy/ProphecyException.php',
|
| 1737 |
-
'Prophecy\\PhpDocumentor\\ClassAndInterfaceTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassAndInterfaceTagRetriever.php',
|
| 1738 |
-
'Prophecy\\PhpDocumentor\\ClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/ClassTagRetriever.php',
|
| 1739 |
-
'Prophecy\\PhpDocumentor\\LegacyClassTagRetriever' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/LegacyClassTagRetriever.php',
|
| 1740 |
-
'Prophecy\\PhpDocumentor\\MethodTagRetrieverInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/PhpDocumentor/MethodTagRetrieverInterface.php',
|
| 1741 |
-
'Prophecy\\Prediction\\CallPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallPrediction.php',
|
| 1742 |
-
'Prophecy\\Prediction\\CallTimesPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallTimesPrediction.php',
|
| 1743 |
-
'Prophecy\\Prediction\\CallbackPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/CallbackPrediction.php',
|
| 1744 |
-
'Prophecy\\Prediction\\NoCallsPrediction' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/NoCallsPrediction.php',
|
| 1745 |
-
'Prophecy\\Prediction\\PredictionInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prediction/PredictionInterface.php',
|
| 1746 |
-
'Prophecy\\Promise\\CallbackPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/CallbackPromise.php',
|
| 1747 |
-
'Prophecy\\Promise\\PromiseInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/PromiseInterface.php',
|
| 1748 |
-
'Prophecy\\Promise\\ReturnArgumentPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnArgumentPromise.php',
|
| 1749 |
-
'Prophecy\\Promise\\ReturnPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ReturnPromise.php',
|
| 1750 |
-
'Prophecy\\Promise\\ThrowPromise' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Promise/ThrowPromise.php',
|
| 1751 |
-
'Prophecy\\Prophecy\\MethodProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/MethodProphecy.php',
|
| 1752 |
-
'Prophecy\\Prophecy\\ObjectProphecy' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ObjectProphecy.php',
|
| 1753 |
-
'Prophecy\\Prophecy\\ProphecyInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecyInterface.php',
|
| 1754 |
-
'Prophecy\\Prophecy\\ProphecySubjectInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/ProphecySubjectInterface.php',
|
| 1755 |
-
'Prophecy\\Prophecy\\Revealer' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/Revealer.php',
|
| 1756 |
-
'Prophecy\\Prophecy\\RevealerInterface' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophecy/RevealerInterface.php',
|
| 1757 |
-
'Prophecy\\Prophet' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Prophet.php',
|
| 1758 |
-
'Prophecy\\Util\\ExportUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/ExportUtil.php',
|
| 1759 |
-
'Prophecy\\Util\\StringUtil' => $vendorDir . '/phpspec/prophecy/src/Prophecy/Util/StringUtil.php',
|
| 1760 |
-
'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
|
| 1761 |
-
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
|
| 1762 |
-
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
|
| 1763 |
-
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
|
| 1764 |
-
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
|
| 1765 |
-
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
|
| 1766 |
-
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
|
| 1767 |
-
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
|
| 1768 |
-
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
|
| 1769 |
-
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
|
| 1770 |
-
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
|
| 1771 |
-
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
| 1772 |
-
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
|
| 1773 |
-
'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
|
| 1774 |
-
'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
|
| 1775 |
-
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
|
| 1776 |
-
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
|
| 1777 |
-
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
|
| 1778 |
-
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 1779 |
-
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 1780 |
-
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
|
| 1781 |
-
'Psr\\SimpleCache\\CacheException' => $vendorDir . '/psr/simple-cache/src/CacheException.php',
|
| 1782 |
-
'Psr\\SimpleCache\\CacheInterface' => $vendorDir . '/psr/simple-cache/src/CacheInterface.php',
|
| 1783 |
-
'Psr\\SimpleCache\\InvalidArgumentException' => $vendorDir . '/psr/simple-cache/src/InvalidArgumentException.php',
|
| 1784 |
-
'Requests' => $vendorDir . '/rmccue/requests/library/Requests.php',
|
| 1785 |
-
'Requests_Auth' => $vendorDir . '/rmccue/requests/library/Requests/Auth.php',
|
| 1786 |
-
'Requests_Auth_Basic' => $vendorDir . '/rmccue/requests/library/Requests/Auth/Basic.php',
|
| 1787 |
-
'Requests_Cookie' => $vendorDir . '/rmccue/requests/library/Requests/Cookie.php',
|
| 1788 |
-
'Requests_Cookie_Jar' => $vendorDir . '/rmccue/requests/library/Requests/Cookie/Jar.php',
|
| 1789 |
-
'Requests_Exception' => $vendorDir . '/rmccue/requests/library/Requests/Exception.php',
|
| 1790 |
-
'Requests_Exception_HTTP' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP.php',
|
| 1791 |
-
'Requests_Exception_HTTP_304' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/304.php',
|
| 1792 |
-
'Requests_Exception_HTTP_305' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/305.php',
|
| 1793 |
-
'Requests_Exception_HTTP_306' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/306.php',
|
| 1794 |
-
'Requests_Exception_HTTP_400' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/400.php',
|
| 1795 |
-
'Requests_Exception_HTTP_401' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/401.php',
|
| 1796 |
-
'Requests_Exception_HTTP_402' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/402.php',
|
| 1797 |
-
'Requests_Exception_HTTP_403' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/403.php',
|
| 1798 |
-
'Requests_Exception_HTTP_404' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/404.php',
|
| 1799 |
-
'Requests_Exception_HTTP_405' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/405.php',
|
| 1800 |
-
'Requests_Exception_HTTP_406' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/406.php',
|
| 1801 |
-
'Requests_Exception_HTTP_407' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/407.php',
|
| 1802 |
-
'Requests_Exception_HTTP_408' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/408.php',
|
| 1803 |
-
'Requests_Exception_HTTP_409' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/409.php',
|
| 1804 |
-
'Requests_Exception_HTTP_410' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/410.php',
|
| 1805 |
-
'Requests_Exception_HTTP_411' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/411.php',
|
| 1806 |
-
'Requests_Exception_HTTP_412' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/412.php',
|
| 1807 |
-
'Requests_Exception_HTTP_413' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/413.php',
|
| 1808 |
-
'Requests_Exception_HTTP_414' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/414.php',
|
| 1809 |
-
'Requests_Exception_HTTP_415' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/415.php',
|
| 1810 |
-
'Requests_Exception_HTTP_416' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/416.php',
|
| 1811 |
-
'Requests_Exception_HTTP_417' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/417.php',
|
| 1812 |
-
'Requests_Exception_HTTP_418' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/418.php',
|
| 1813 |
-
'Requests_Exception_HTTP_428' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/428.php',
|
| 1814 |
-
'Requests_Exception_HTTP_429' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/429.php',
|
| 1815 |
-
'Requests_Exception_HTTP_431' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/431.php',
|
| 1816 |
-
'Requests_Exception_HTTP_500' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/500.php',
|
| 1817 |
-
'Requests_Exception_HTTP_501' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/501.php',
|
| 1818 |
-
'Requests_Exception_HTTP_502' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/502.php',
|
| 1819 |
-
'Requests_Exception_HTTP_503' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/503.php',
|
| 1820 |
-
'Requests_Exception_HTTP_504' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/504.php',
|
| 1821 |
-
'Requests_Exception_HTTP_505' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/505.php',
|
| 1822 |
-
'Requests_Exception_HTTP_511' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/511.php',
|
| 1823 |
-
'Requests_Exception_HTTP_Unknown' => $vendorDir . '/rmccue/requests/library/Requests/Exception/HTTP/Unknown.php',
|
| 1824 |
-
'Requests_Exception_Transport' => $vendorDir . '/rmccue/requests/library/Requests/Exception/Transport.php',
|
| 1825 |
-
'Requests_Exception_Transport_cURL' => $vendorDir . '/rmccue/requests/library/Requests/Exception/Transport/cURL.php',
|
| 1826 |
-
'Requests_Hooker' => $vendorDir . '/rmccue/requests/library/Requests/Hooker.php',
|
| 1827 |
-
'Requests_Hooks' => $vendorDir . '/rmccue/requests/library/Requests/Hooks.php',
|
| 1828 |
-
'Requests_IDNAEncoder' => $vendorDir . '/rmccue/requests/library/Requests/IDNAEncoder.php',
|
| 1829 |
-
'Requests_IPv6' => $vendorDir . '/rmccue/requests/library/Requests/IPv6.php',
|
| 1830 |
-
'Requests_IRI' => $vendorDir . '/rmccue/requests/library/Requests/IRI.php',
|
| 1831 |
-
'Requests_Proxy' => $vendorDir . '/rmccue/requests/library/Requests/Proxy.php',
|
| 1832 |
-
'Requests_Proxy_HTTP' => $vendorDir . '/rmccue/requests/library/Requests/Proxy/HTTP.php',
|
| 1833 |
-
'Requests_Response' => $vendorDir . '/rmccue/requests/library/Requests/Response.php',
|
| 1834 |
-
'Requests_Response_Headers' => $vendorDir . '/rmccue/requests/library/Requests/Response/Headers.php',
|
| 1835 |
-
'Requests_SSL' => $vendorDir . '/rmccue/requests/library/Requests/SSL.php',
|
| 1836 |
-
'Requests_Session' => $vendorDir . '/rmccue/requests/library/Requests/Session.php',
|
| 1837 |
-
'Requests_Transport' => $vendorDir . '/rmccue/requests/library/Requests/Transport.php',
|
| 1838 |
-
'Requests_Transport_cURL' => $vendorDir . '/rmccue/requests/library/Requests/Transport/cURL.php',
|
| 1839 |
-
'Requests_Transport_fsockopen' => $vendorDir . '/rmccue/requests/library/Requests/Transport/fsockopen.php',
|
| 1840 |
-
'Requests_Utility_CaseInsensitiveDictionary' => $vendorDir . '/rmccue/requests/library/Requests/Utility/CaseInsensitiveDictionary.php',
|
| 1841 |
-
'Requests_Utility_FilteredIterator' => $vendorDir . '/rmccue/requests/library/Requests/Utility/FilteredIterator.php',
|
| 1842 |
-
'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php',
|
| 1843 |
-
'SebastianBergmann\\CodeCoverage\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/CoveredCodeNotExecutedException.php',
|
| 1844 |
-
'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php',
|
| 1845 |
-
'SebastianBergmann\\CodeCoverage\\Driver\\HHVM' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/HHVM.php',
|
| 1846 |
-
'SebastianBergmann\\CodeCoverage\\Driver\\PHPDBG' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PHPDBG.php',
|
| 1847 |
-
'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug.php',
|
| 1848 |
-
'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php',
|
| 1849 |
-
'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php',
|
| 1850 |
-
'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php',
|
| 1851 |
-
'SebastianBergmann\\CodeCoverage\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/MissingCoversAnnotationException.php',
|
| 1852 |
-
'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php',
|
| 1853 |
-
'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php',
|
| 1854 |
-
'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php',
|
| 1855 |
-
'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php',
|
| 1856 |
-
'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php',
|
| 1857 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php',
|
| 1858 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php',
|
| 1859 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php',
|
| 1860 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php',
|
| 1861 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php',
|
| 1862 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php',
|
| 1863 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php',
|
| 1864 |
-
'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php',
|
| 1865 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php',
|
| 1866 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php',
|
| 1867 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php',
|
| 1868 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php',
|
| 1869 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php',
|
| 1870 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php',
|
| 1871 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php',
|
| 1872 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php',
|
| 1873 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php',
|
| 1874 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php',
|
| 1875 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php',
|
| 1876 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php',
|
| 1877 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php',
|
| 1878 |
-
'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php',
|
| 1879 |
-
'SebastianBergmann\\CodeCoverage\\RuntimeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/RuntimeException.php',
|
| 1880 |
-
'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php',
|
| 1881 |
-
'SebastianBergmann\\CodeCoverage\\Util' => $vendorDir . '/phpunit/php-code-coverage/src/Util.php',
|
| 1882 |
-
'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php',
|
| 1883 |
-
'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php',
|
| 1884 |
-
'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php',
|
| 1885 |
-
'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php',
|
| 1886 |
-
'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php',
|
| 1887 |
-
'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php',
|
| 1888 |
-
'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php',
|
| 1889 |
-
'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php',
|
| 1890 |
-
'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php',
|
| 1891 |
-
'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php',
|
| 1892 |
-
'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php',
|
| 1893 |
-
'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php',
|
| 1894 |
-
'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php',
|
| 1895 |
-
'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php',
|
| 1896 |
-
'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php',
|
| 1897 |
-
'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php',
|
| 1898 |
-
'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php',
|
| 1899 |
-
'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php',
|
| 1900 |
-
'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php',
|
| 1901 |
-
'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php',
|
| 1902 |
-
'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php',
|
| 1903 |
-
'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php',
|
| 1904 |
-
'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php',
|
| 1905 |
-
'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php',
|
| 1906 |
-
'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php',
|
| 1907 |
-
'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php',
|
| 1908 |
-
'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php',
|
| 1909 |
-
'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php',
|
| 1910 |
-
'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php',
|
| 1911 |
-
'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php',
|
| 1912 |
-
'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php',
|
| 1913 |
-
'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php',
|
| 1914 |
-
'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php',
|
| 1915 |
-
'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php',
|
| 1916 |
-
'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php',
|
| 1917 |
-
'SebastianBergmann\\GlobalState\\Blacklist' => $vendorDir . '/sebastian/global-state/src/Blacklist.php',
|
| 1918 |
-
'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php',
|
| 1919 |
-
'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php',
|
| 1920 |
-
'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php',
|
| 1921 |
-
'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php',
|
| 1922 |
-
'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php',
|
| 1923 |
-
'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php',
|
| 1924 |
-
'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php',
|
| 1925 |
-
'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php',
|
| 1926 |
-
'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php',
|
| 1927 |
-
'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php',
|
| 1928 |
-
'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php',
|
| 1929 |
-
'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php',
|
| 1930 |
-
'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php',
|
| 1931 |
-
'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php',
|
| 1932 |
-
'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php',
|
| 1933 |
-
'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php',
|
| 1934 |
-
'Seld\\JsonLint\\DuplicateKeyException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php',
|
| 1935 |
-
'Seld\\JsonLint\\JsonParser' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/JsonParser.php',
|
| 1936 |
-
'Seld\\JsonLint\\Lexer' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Lexer.php',
|
| 1937 |
-
'Seld\\JsonLint\\ParsingException' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/ParsingException.php',
|
| 1938 |
-
'Seld\\JsonLint\\Undefined' => $vendorDir . '/seld/jsonlint/src/Seld/JsonLint/Undefined.php',
|
| 1939 |
-
'Seld\\PharUtils\\Timestamps' => $vendorDir . '/seld/phar-utils/src/Timestamps.php',
|
| 1940 |
-
'Symfony\\Component\\BrowserKit\\AbstractBrowser' => $vendorDir . '/symfony/browser-kit/AbstractBrowser.php',
|
| 1941 |
-
'Symfony\\Component\\BrowserKit\\Client' => $vendorDir . '/symfony/browser-kit/Client.php',
|
| 1942 |
-
'Symfony\\Component\\BrowserKit\\Cookie' => $vendorDir . '/symfony/browser-kit/Cookie.php',
|
| 1943 |
-
'Symfony\\Component\\BrowserKit\\CookieJar' => $vendorDir . '/symfony/browser-kit/CookieJar.php',
|
| 1944 |
-
'Symfony\\Component\\BrowserKit\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/browser-kit/Exception/BadMethodCallException.php',
|
| 1945 |
-
'Symfony\\Component\\BrowserKit\\History' => $vendorDir . '/symfony/browser-kit/History.php',
|
| 1946 |
-
'Symfony\\Component\\BrowserKit\\HttpBrowser' => $vendorDir . '/symfony/browser-kit/HttpBrowser.php',
|
| 1947 |
-
'Symfony\\Component\\BrowserKit\\Request' => $vendorDir . '/symfony/browser-kit/Request.php',
|
| 1948 |
-
'Symfony\\Component\\BrowserKit\\Response' => $vendorDir . '/symfony/browser-kit/Response.php',
|
| 1949 |
-
'Symfony\\Component\\BrowserKit\\Test\\Constraint\\BrowserCookieValueSame' => $vendorDir . '/symfony/browser-kit/Test/Constraint/BrowserCookieValueSame.php',
|
| 1950 |
-
'Symfony\\Component\\BrowserKit\\Test\\Constraint\\BrowserHasCookie' => $vendorDir . '/symfony/browser-kit/Test/Constraint/BrowserHasCookie.php',
|
| 1951 |
-
'Symfony\\Component\\Config\\ConfigCache' => $vendorDir . '/symfony/config/ConfigCache.php',
|
| 1952 |
-
'Symfony\\Component\\Config\\ConfigCacheFactory' => $vendorDir . '/symfony/config/ConfigCacheFactory.php',
|
| 1953 |
-
'Symfony\\Component\\Config\\ConfigCacheFactoryInterface' => $vendorDir . '/symfony/config/ConfigCacheFactoryInterface.php',
|
| 1954 |
-
'Symfony\\Component\\Config\\ConfigCacheInterface' => $vendorDir . '/symfony/config/ConfigCacheInterface.php',
|
| 1955 |
-
'Symfony\\Component\\Config\\Definition\\ArrayNode' => $vendorDir . '/symfony/config/Definition/ArrayNode.php',
|
| 1956 |
-
'Symfony\\Component\\Config\\Definition\\BaseNode' => $vendorDir . '/symfony/config/Definition/BaseNode.php',
|
| 1957 |
-
'Symfony\\Component\\Config\\Definition\\BooleanNode' => $vendorDir . '/symfony/config/Definition/BooleanNode.php',
|
| 1958 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\ArrayNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ArrayNodeDefinition.php',
|
| 1959 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\BooleanNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/BooleanNodeDefinition.php',
|
| 1960 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\EnumNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/EnumNodeDefinition.php',
|
| 1961 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\ExprBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ExprBuilder.php',
|
| 1962 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\FloatNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/FloatNodeDefinition.php',
|
| 1963 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\IntegerNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/IntegerNodeDefinition.php',
|
| 1964 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\MergeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/MergeBuilder.php',
|
| 1965 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\NodeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NodeBuilder.php',
|
| 1966 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\NodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NodeDefinition.php',
|
| 1967 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\NodeParentInterface' => $vendorDir . '/symfony/config/Definition/Builder/NodeParentInterface.php',
|
| 1968 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\NormalizationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/NormalizationBuilder.php',
|
| 1969 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\NumericNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/NumericNodeDefinition.php',
|
| 1970 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\ParentNodeDefinitionInterface' => $vendorDir . '/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php',
|
| 1971 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\ScalarNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/ScalarNodeDefinition.php',
|
| 1972 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\TreeBuilder' => $vendorDir . '/symfony/config/Definition/Builder/TreeBuilder.php',
|
| 1973 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\ValidationBuilder' => $vendorDir . '/symfony/config/Definition/Builder/ValidationBuilder.php',
|
| 1974 |
-
'Symfony\\Component\\Config\\Definition\\Builder\\VariableNodeDefinition' => $vendorDir . '/symfony/config/Definition/Builder/VariableNodeDefinition.php',
|
| 1975 |
-
'Symfony\\Component\\Config\\Definition\\ConfigurationInterface' => $vendorDir . '/symfony/config/Definition/ConfigurationInterface.php',
|
| 1976 |
-
'Symfony\\Component\\Config\\Definition\\Dumper\\XmlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/XmlReferenceDumper.php',
|
| 1977 |
-
'Symfony\\Component\\Config\\Definition\\Dumper\\YamlReferenceDumper' => $vendorDir . '/symfony/config/Definition/Dumper/YamlReferenceDumper.php',
|
| 1978 |
-
'Symfony\\Component\\Config\\Definition\\EnumNode' => $vendorDir . '/symfony/config/Definition/EnumNode.php',
|
| 1979 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\DuplicateKeyException' => $vendorDir . '/symfony/config/Definition/Exception/DuplicateKeyException.php',
|
| 1980 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\Exception' => $vendorDir . '/symfony/config/Definition/Exception/Exception.php',
|
| 1981 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\ForbiddenOverwriteException' => $vendorDir . '/symfony/config/Definition/Exception/ForbiddenOverwriteException.php',
|
| 1982 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\InvalidConfigurationException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidConfigurationException.php',
|
| 1983 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\InvalidDefinitionException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidDefinitionException.php',
|
| 1984 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\InvalidTypeException' => $vendorDir . '/symfony/config/Definition/Exception/InvalidTypeException.php',
|
| 1985 |
-
'Symfony\\Component\\Config\\Definition\\Exception\\UnsetKeyException' => $vendorDir . '/symfony/config/Definition/Exception/UnsetKeyException.php',
|
| 1986 |
-
'Symfony\\Component\\Config\\Definition\\FloatNode' => $vendorDir . '/symfony/config/Definition/FloatNode.php',
|
| 1987 |
-
'Symfony\\Component\\Config\\Definition\\IntegerNode' => $vendorDir . '/symfony/config/Definition/IntegerNode.php',
|
| 1988 |
-
'Symfony\\Component\\Config\\Definition\\NodeInterface' => $vendorDir . '/symfony/config/Definition/NodeInterface.php',
|
| 1989 |
-
'Symfony\\Component\\Config\\Definition\\NumericNode' => $vendorDir . '/symfony/config/Definition/NumericNode.php',
|
| 1990 |
-
'Symfony\\Component\\Config\\Definition\\Processor' => $vendorDir . '/symfony/config/Definition/Processor.php',
|
| 1991 |
-
'Symfony\\Component\\Config\\Definition\\PrototypeNodeInterface' => $vendorDir . '/symfony/config/Definition/PrototypeNodeInterface.php',
|
| 1992 |
-
'Symfony\\Component\\Config\\Definition\\PrototypedArrayNode' => $vendorDir . '/symfony/config/Definition/PrototypedArrayNode.php',
|
| 1993 |
-
'Symfony\\Component\\Config\\Definition\\ScalarNode' => $vendorDir . '/symfony/config/Definition/ScalarNode.php',
|
| 1994 |
-
'Symfony\\Component\\Config\\Definition\\VariableNode' => $vendorDir . '/symfony/config/Definition/VariableNode.php',
|
| 1995 |
-
'Symfony\\Component\\Config\\DependencyInjection\\ConfigCachePass' => $vendorDir . '/symfony/config/DependencyInjection/ConfigCachePass.php',
|
| 1996 |
-
'Symfony\\Component\\Config\\Exception\\FileLoaderImportCircularReferenceException' => $vendorDir . '/symfony/config/Exception/FileLoaderImportCircularReferenceException.php',
|
| 1997 |
-
'Symfony\\Component\\Config\\Exception\\FileLoaderLoadException' => $vendorDir . '/symfony/config/Exception/FileLoaderLoadException.php',
|
| 1998 |
-
'Symfony\\Component\\Config\\Exception\\FileLocatorFileNotFoundException' => $vendorDir . '/symfony/config/Exception/FileLocatorFileNotFoundException.php',
|
| 1999 |
-
'Symfony\\Component\\Config\\FileLocator' => $vendorDir . '/symfony/config/FileLocator.php',
|
| 2000 |
-
'Symfony\\Component\\Config\\FileLocatorInterface' => $vendorDir . '/symfony/config/FileLocatorInterface.php',
|
| 2001 |
-
'Symfony\\Component\\Config\\Loader\\DelegatingLoader' => $vendorDir . '/symfony/config/Loader/DelegatingLoader.php',
|
| 2002 |
-
'Symfony\\Component\\Config\\Loader\\FileLoader' => $vendorDir . '/symfony/config/Loader/FileLoader.php',
|
| 2003 |
-
'Symfony\\Component\\Config\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/config/Loader/GlobFileLoader.php',
|
| 2004 |
-
'Symfony\\Component\\Config\\Loader\\Loader' => $vendorDir . '/symfony/config/Loader/Loader.php',
|
| 2005 |
-
'Symfony\\Component\\Config\\Loader\\LoaderInterface' => $vendorDir . '/symfony/config/Loader/LoaderInterface.php',
|
| 2006 |
-
'Symfony\\Component\\Config\\Loader\\LoaderResolver' => $vendorDir . '/symfony/config/Loader/LoaderResolver.php',
|
| 2007 |
-
'Symfony\\Component\\Config\\Loader\\LoaderResolverInterface' => $vendorDir . '/symfony/config/Loader/LoaderResolverInterface.php',
|
| 2008 |
-
'Symfony\\Component\\Config\\ResourceCheckerConfigCache' => $vendorDir . '/symfony/config/ResourceCheckerConfigCache.php',
|
| 2009 |
-
'Symfony\\Component\\Config\\ResourceCheckerConfigCacheFactory' => $vendorDir . '/symfony/config/ResourceCheckerConfigCacheFactory.php',
|
| 2010 |
-
'Symfony\\Component\\Config\\ResourceCheckerInterface' => $vendorDir . '/symfony/config/ResourceCheckerInterface.php',
|
| 2011 |
-
'Symfony\\Component\\Config\\Resource\\ClassExistenceResource' => $vendorDir . '/symfony/config/Resource/ClassExistenceResource.php',
|
| 2012 |
-
'Symfony\\Component\\Config\\Resource\\ComposerResource' => $vendorDir . '/symfony/config/Resource/ComposerResource.php',
|
| 2013 |
-
'Symfony\\Component\\Config\\Resource\\DirectoryResource' => $vendorDir . '/symfony/config/Resource/DirectoryResource.php',
|
| 2014 |
-
'Symfony\\Component\\Config\\Resource\\FileExistenceResource' => $vendorDir . '/symfony/config/Resource/FileExistenceResource.php',
|
| 2015 |
-
'Symfony\\Component\\Config\\Resource\\FileResource' => $vendorDir . '/symfony/config/Resource/FileResource.php',
|
| 2016 |
-
'Symfony\\Component\\Config\\Resource\\GlobResource' => $vendorDir . '/symfony/config/Resource/GlobResource.php',
|
| 2017 |
-
'Symfony\\Component\\Config\\Resource\\ReflectionClassResource' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
|
| 2018 |
-
'Symfony\\Component\\Config\\Resource\\ReflectionMethodHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
|
| 2019 |
-
'Symfony\\Component\\Config\\Resource\\ReflectionParameterHhvmWrapper' => $vendorDir . '/symfony/config/Resource/ReflectionClassResource.php',
|
| 2020 |
-
'Symfony\\Component\\Config\\Resource\\ResourceInterface' => $vendorDir . '/symfony/config/Resource/ResourceInterface.php',
|
| 2021 |
-
'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceChecker' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceChecker.php',
|
| 2022 |
-
'Symfony\\Component\\Config\\Resource\\SelfCheckingResourceInterface' => $vendorDir . '/symfony/config/Resource/SelfCheckingResourceInterface.php',
|
| 2023 |
-
'Symfony\\Component\\Config\\Util\\Exception\\InvalidXmlException' => $vendorDir . '/symfony/config/Util/Exception/InvalidXmlException.php',
|
| 2024 |
-
'Symfony\\Component\\Config\\Util\\Exception\\XmlParsingException' => $vendorDir . '/symfony/config/Util/Exception/XmlParsingException.php',
|
| 2025 |
-
'Symfony\\Component\\Config\\Util\\XmlUtils' => $vendorDir . '/symfony/config/Util/XmlUtils.php',
|
| 2026 |
-
'Symfony\\Component\\Console\\Application' => $vendorDir . '/symfony/console/Application.php',
|
| 2027 |
-
'Symfony\\Component\\Console\\CommandLoader\\CommandLoaderInterface' => $vendorDir . '/symfony/console/CommandLoader/CommandLoaderInterface.php',
|
| 2028 |
-
'Symfony\\Component\\Console\\CommandLoader\\ContainerCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/ContainerCommandLoader.php',
|
| 2029 |
-
'Symfony\\Component\\Console\\CommandLoader\\FactoryCommandLoader' => $vendorDir . '/symfony/console/CommandLoader/FactoryCommandLoader.php',
|
| 2030 |
-
'Symfony\\Component\\Console\\Command\\Command' => $vendorDir . '/symfony/console/Command/Command.php',
|
| 2031 |
-
'Symfony\\Component\\Console\\Command\\HelpCommand' => $vendorDir . '/symfony/console/Command/HelpCommand.php',
|
| 2032 |
-
'Symfony\\Component\\Console\\Command\\ListCommand' => $vendorDir . '/symfony/console/Command/ListCommand.php',
|
| 2033 |
-
'Symfony\\Component\\Console\\Command\\LockableTrait' => $vendorDir . '/symfony/console/Command/LockableTrait.php',
|
| 2034 |
-
'Symfony\\Component\\Console\\ConsoleEvents' => $vendorDir . '/symfony/console/ConsoleEvents.php',
|
| 2035 |
-
'Symfony\\Component\\Console\\DependencyInjection\\AddConsoleCommandPass' => $vendorDir . '/symfony/console/DependencyInjection/AddConsoleCommandPass.php',
|
| 2036 |
-
'Symfony\\Component\\Console\\Descriptor\\ApplicationDescription' => $vendorDir . '/symfony/console/Descriptor/ApplicationDescription.php',
|
| 2037 |
-
'Symfony\\Component\\Console\\Descriptor\\Descriptor' => $vendorDir . '/symfony/console/Descriptor/Descriptor.php',
|
| 2038 |
-
'Symfony\\Component\\Console\\Descriptor\\DescriptorInterface' => $vendorDir . '/symfony/console/Descriptor/DescriptorInterface.php',
|
| 2039 |
-
'Symfony\\Component\\Console\\Descriptor\\JsonDescriptor' => $vendorDir . '/symfony/console/Descriptor/JsonDescriptor.php',
|
| 2040 |
-
'Symfony\\Component\\Console\\Descriptor\\MarkdownDescriptor' => $vendorDir . '/symfony/console/Descriptor/MarkdownDescriptor.php',
|
| 2041 |
-
'Symfony\\Component\\Console\\Descriptor\\TextDescriptor' => $vendorDir . '/symfony/console/Descriptor/TextDescriptor.php',
|
| 2042 |
-
'Symfony\\Component\\Console\\Descriptor\\XmlDescriptor' => $vendorDir . '/symfony/console/Descriptor/XmlDescriptor.php',
|
| 2043 |
-
'Symfony\\Component\\Console\\EventListener\\ErrorListener' => $vendorDir . '/symfony/console/EventListener/ErrorListener.php',
|
| 2044 |
-
'Symfony\\Component\\Console\\Event\\ConsoleCommandEvent' => $vendorDir . '/symfony/console/Event/ConsoleCommandEvent.php',
|
| 2045 |
-
'Symfony\\Component\\Console\\Event\\ConsoleErrorEvent' => $vendorDir . '/symfony/console/Event/ConsoleErrorEvent.php',
|
| 2046 |
-
'Symfony\\Component\\Console\\Event\\ConsoleEvent' => $vendorDir . '/symfony/console/Event/ConsoleEvent.php',
|
| 2047 |
-
'Symfony\\Component\\Console\\Event\\ConsoleExceptionEvent' => $vendorDir . '/symfony/console/Event/ConsoleExceptionEvent.php',
|
| 2048 |
-
'Symfony\\Component\\Console\\Event\\ConsoleTerminateEvent' => $vendorDir . '/symfony/console/Event/ConsoleTerminateEvent.php',
|
| 2049 |
-
'Symfony\\Component\\Console\\Exception\\CommandNotFoundException' => $vendorDir . '/symfony/console/Exception/CommandNotFoundException.php',
|
| 2050 |
-
'Symfony\\Component\\Console\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/console/Exception/ExceptionInterface.php',
|
| 2051 |
-
'Symfony\\Component\\Console\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/console/Exception/InvalidArgumentException.php',
|
| 2052 |
-
'Symfony\\Component\\Console\\Exception\\InvalidOptionException' => $vendorDir . '/symfony/console/Exception/InvalidOptionException.php',
|
| 2053 |
-
'Symfony\\Component\\Console\\Exception\\LogicException' => $vendorDir . '/symfony/console/Exception/LogicException.php',
|
| 2054 |
-
'Symfony\\Component\\Console\\Exception\\RuntimeException' => $vendorDir . '/symfony/console/Exception/RuntimeException.php',
|
| 2055 |
-
'Symfony\\Component\\Console\\Formatter\\OutputFormatter' => $vendorDir . '/symfony/console/Formatter/OutputFormatter.php',
|
| 2056 |
-
'Symfony\\Component\\Console\\Formatter\\OutputFormatterInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterInterface.php',
|
| 2057 |
-
'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyle' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyle.php',
|
| 2058 |
-
'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleInterface' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleInterface.php',
|
| 2059 |
-
'Symfony\\Component\\Console\\Formatter\\OutputFormatterStyleStack' => $vendorDir . '/symfony/console/Formatter/OutputFormatterStyleStack.php',
|
| 2060 |
-
'Symfony\\Component\\Console\\Helper\\DebugFormatterHelper' => $vendorDir . '/symfony/console/Helper/DebugFormatterHelper.php',
|
| 2061 |
-
'Symfony\\Component\\Console\\Helper\\DescriptorHelper' => $vendorDir . '/symfony/console/Helper/DescriptorHelper.php',
|
| 2062 |
-
'Symfony\\Component\\Console\\Helper\\FormatterHelper' => $vendorDir . '/symfony/console/Helper/FormatterHelper.php',
|
| 2063 |
-
'Symfony\\Component\\Console\\Helper\\Helper' => $vendorDir . '/symfony/console/Helper/Helper.php',
|
| 2064 |
-
'Symfony\\Component\\Console\\Helper\\HelperInterface' => $vendorDir . '/symfony/console/Helper/HelperInterface.php',
|
| 2065 |
-
'Symfony\\Component\\Console\\Helper\\HelperSet' => $vendorDir . '/symfony/console/Helper/HelperSet.php',
|
| 2066 |
-
'Symfony\\Component\\Console\\Helper\\InputAwareHelper' => $vendorDir . '/symfony/console/Helper/InputAwareHelper.php',
|
| 2067 |
-
'Symfony\\Component\\Console\\Helper\\ProcessHelper' => $vendorDir . '/symfony/console/Helper/ProcessHelper.php',
|
| 2068 |
-
'Symfony\\Component\\Console\\Helper\\ProgressBar' => $vendorDir . '/symfony/console/Helper/ProgressBar.php',
|
| 2069 |
-
'Symfony\\Component\\Console\\Helper\\ProgressIndicator' => $vendorDir . '/symfony/console/Helper/ProgressIndicator.php',
|
| 2070 |
-
'Symfony\\Component\\Console\\Helper\\QuestionHelper' => $vendorDir . '/symfony/console/Helper/QuestionHelper.php',
|
| 2071 |
-
'Symfony\\Component\\Console\\Helper\\SymfonyQuestionHelper' => $vendorDir . '/symfony/console/Helper/SymfonyQuestionHelper.php',
|
| 2072 |
-
'Symfony\\Component\\Console\\Helper\\Table' => $vendorDir . '/symfony/console/Helper/Table.php',
|
| 2073 |
-
'Symfony\\Component\\Console\\Helper\\TableCell' => $vendorDir . '/symfony/console/Helper/TableCell.php',
|
| 2074 |
-
'Symfony\\Component\\Console\\Helper\\TableSeparator' => $vendorDir . '/symfony/console/Helper/TableSeparator.php',
|
| 2075 |
-
'Symfony\\Component\\Console\\Helper\\TableStyle' => $vendorDir . '/symfony/console/Helper/TableStyle.php',
|
| 2076 |
-
'Symfony\\Component\\Console\\Input\\ArgvInput' => $vendorDir . '/symfony/console/Input/ArgvInput.php',
|
| 2077 |
-
'Symfony\\Component\\Console\\Input\\ArrayInput' => $vendorDir . '/symfony/console/Input/ArrayInput.php',
|
| 2078 |
-
'Symfony\\Component\\Console\\Input\\Input' => $vendorDir . '/symfony/console/Input/Input.php',
|
| 2079 |
-
'Symfony\\Component\\Console\\Input\\InputArgument' => $vendorDir . '/symfony/console/Input/InputArgument.php',
|
| 2080 |
-
'Symfony\\Component\\Console\\Input\\InputAwareInterface' => $vendorDir . '/symfony/console/Input/InputAwareInterface.php',
|
| 2081 |
-
'Symfony\\Component\\Console\\Input\\InputDefinition' => $vendorDir . '/symfony/console/Input/InputDefinition.php',
|
| 2082 |
-
'Symfony\\Component\\Console\\Input\\InputInterface' => $vendorDir . '/symfony/console/Input/InputInterface.php',
|
| 2083 |
-
'Symfony\\Component\\Console\\Input\\InputOption' => $vendorDir . '/symfony/console/Input/InputOption.php',
|
| 2084 |
-
'Symfony\\Component\\Console\\Input\\StreamableInputInterface' => $vendorDir . '/symfony/console/Input/StreamableInputInterface.php',
|
| 2085 |
-
'Symfony\\Component\\Console\\Input\\StringInput' => $vendorDir . '/symfony/console/Input/StringInput.php',
|
| 2086 |
-
'Symfony\\Component\\Console\\Logger\\ConsoleLogger' => $vendorDir . '/symfony/console/Logger/ConsoleLogger.php',
|
| 2087 |
-
'Symfony\\Component\\Console\\Output\\BufferedOutput' => $vendorDir . '/symfony/console/Output/BufferedOutput.php',
|
| 2088 |
-
'Symfony\\Component\\Console\\Output\\ConsoleOutput' => $vendorDir . '/symfony/console/Output/ConsoleOutput.php',
|
| 2089 |
-
'Symfony\\Component\\Console\\Output\\ConsoleOutputInterface' => $vendorDir . '/symfony/console/Output/ConsoleOutputInterface.php',
|
| 2090 |
-
'Symfony\\Component\\Console\\Output\\NullOutput' => $vendorDir . '/symfony/console/Output/NullOutput.php',
|
| 2091 |
-
'Symfony\\Component\\Console\\Output\\Output' => $vendorDir . '/symfony/console/Output/Output.php',
|
| 2092 |
-
'Symfony\\Component\\Console\\Output\\OutputInterface' => $vendorDir . '/symfony/console/Output/OutputInterface.php',
|
| 2093 |
-
'Symfony\\Component\\Console\\Output\\StreamOutput' => $vendorDir . '/symfony/console/Output/StreamOutput.php',
|
| 2094 |
-
'Symfony\\Component\\Console\\Question\\ChoiceQuestion' => $vendorDir . '/symfony/console/Question/ChoiceQuestion.php',
|
| 2095 |
-
'Symfony\\Component\\Console\\Question\\ConfirmationQuestion' => $vendorDir . '/symfony/console/Question/ConfirmationQuestion.php',
|
| 2096 |
-
'Symfony\\Component\\Console\\Question\\Question' => $vendorDir . '/symfony/console/Question/Question.php',
|
| 2097 |
-
'Symfony\\Component\\Console\\Style\\OutputStyle' => $vendorDir . '/symfony/console/Style/OutputStyle.php',
|
| 2098 |
-
'Symfony\\Component\\Console\\Style\\StyleInterface' => $vendorDir . '/symfony/console/Style/StyleInterface.php',
|
| 2099 |
-
'Symfony\\Component\\Console\\Style\\SymfonyStyle' => $vendorDir . '/symfony/console/Style/SymfonyStyle.php',
|
| 2100 |
-
'Symfony\\Component\\Console\\Terminal' => $vendorDir . '/symfony/console/Terminal.php',
|
| 2101 |
-
'Symfony\\Component\\Console\\Tester\\ApplicationTester' => $vendorDir . '/symfony/console/Tester/ApplicationTester.php',
|
| 2102 |
-
'Symfony\\Component\\Console\\Tester\\CommandTester' => $vendorDir . '/symfony/console/Tester/CommandTester.php',
|
| 2103 |
-
'Symfony\\Component\\CssSelector\\CssSelectorConverter' => $vendorDir . '/symfony/css-selector/CssSelectorConverter.php',
|
| 2104 |
-
'Symfony\\Component\\CssSelector\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/css-selector/Exception/ExceptionInterface.php',
|
| 2105 |
-
'Symfony\\Component\\CssSelector\\Exception\\ExpressionErrorException' => $vendorDir . '/symfony/css-selector/Exception/ExpressionErrorException.php',
|
| 2106 |
-
'Symfony\\Component\\CssSelector\\Exception\\InternalErrorException' => $vendorDir . '/symfony/css-selector/Exception/InternalErrorException.php',
|
| 2107 |
-
'Symfony\\Component\\CssSelector\\Exception\\ParseException' => $vendorDir . '/symfony/css-selector/Exception/ParseException.php',
|
| 2108 |
-
'Symfony\\Component\\CssSelector\\Exception\\SyntaxErrorException' => $vendorDir . '/symfony/css-selector/Exception/SyntaxErrorException.php',
|
| 2109 |
-
'Symfony\\Component\\CssSelector\\Node\\AbstractNode' => $vendorDir . '/symfony/css-selector/Node/AbstractNode.php',
|
| 2110 |
-
'Symfony\\Component\\CssSelector\\Node\\AttributeNode' => $vendorDir . '/symfony/css-selector/Node/AttributeNode.php',
|
| 2111 |
-
'Symfony\\Component\\CssSelector\\Node\\ClassNode' => $vendorDir . '/symfony/css-selector/Node/ClassNode.php',
|
| 2112 |
-
'Symfony\\Component\\CssSelector\\Node\\CombinedSelectorNode' => $vendorDir . '/symfony/css-selector/Node/CombinedSelectorNode.php',
|
| 2113 |
-
'Symfony\\Component\\CssSelector\\Node\\ElementNode' => $vendorDir . '/symfony/css-selector/Node/ElementNode.php',
|
| 2114 |
-
'Symfony\\Component\\CssSelector\\Node\\FunctionNode' => $vendorDir . '/symfony/css-selector/Node/FunctionNode.php',
|
| 2115 |
-
'Symfony\\Component\\CssSelector\\Node\\HashNode' => $vendorDir . '/symfony/css-selector/Node/HashNode.php',
|
| 2116 |
-
'Symfony\\Component\\CssSelector\\Node\\NegationNode' => $vendorDir . '/symfony/css-selector/Node/NegationNode.php',
|
| 2117 |
-
'Symfony\\Component\\CssSelector\\Node\\NodeInterface' => $vendorDir . '/symfony/css-selector/Node/NodeInterface.php',
|
| 2118 |
-
'Symfony\\Component\\CssSelector\\Node\\PseudoNode' => $vendorDir . '/symfony/css-selector/Node/PseudoNode.php',
|
| 2119 |
-
'Symfony\\Component\\CssSelector\\Node\\SelectorNode' => $vendorDir . '/symfony/css-selector/Node/SelectorNode.php',
|
| 2120 |
-
'Symfony\\Component\\CssSelector\\Node\\Specificity' => $vendorDir . '/symfony/css-selector/Node/Specificity.php',
|
| 2121 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\CommentHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/CommentHandler.php',
|
| 2122 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\HandlerInterface' => $vendorDir . '/symfony/css-selector/Parser/Handler/HandlerInterface.php',
|
| 2123 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\HashHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/HashHandler.php',
|
| 2124 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\IdentifierHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/IdentifierHandler.php',
|
| 2125 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\NumberHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/NumberHandler.php',
|
| 2126 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\StringHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/StringHandler.php',
|
| 2127 |
-
'Symfony\\Component\\CssSelector\\Parser\\Handler\\WhitespaceHandler' => $vendorDir . '/symfony/css-selector/Parser/Handler/WhitespaceHandler.php',
|
| 2128 |
-
'Symfony\\Component\\CssSelector\\Parser\\Parser' => $vendorDir . '/symfony/css-selector/Parser/Parser.php',
|
| 2129 |
-
'Symfony\\Component\\CssSelector\\Parser\\ParserInterface' => $vendorDir . '/symfony/css-selector/Parser/ParserInterface.php',
|
| 2130 |
-
'Symfony\\Component\\CssSelector\\Parser\\Reader' => $vendorDir . '/symfony/css-selector/Parser/Reader.php',
|
| 2131 |
-
'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ClassParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/ClassParser.php',
|
| 2132 |
-
'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\ElementParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/ElementParser.php',
|
| 2133 |
-
'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\EmptyStringParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php',
|
| 2134 |
-
'Symfony\\Component\\CssSelector\\Parser\\Shortcut\\HashParser' => $vendorDir . '/symfony/css-selector/Parser/Shortcut/HashParser.php',
|
| 2135 |
-
'Symfony\\Component\\CssSelector\\Parser\\Token' => $vendorDir . '/symfony/css-selector/Parser/Token.php',
|
| 2136 |
-
'Symfony\\Component\\CssSelector\\Parser\\TokenStream' => $vendorDir . '/symfony/css-selector/Parser/TokenStream.php',
|
| 2137 |
-
'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\Tokenizer' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/Tokenizer.php',
|
| 2138 |
-
'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerEscaping' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php',
|
| 2139 |
-
'Symfony\\Component\\CssSelector\\Parser\\Tokenizer\\TokenizerPatterns' => $vendorDir . '/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php',
|
| 2140 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\AbstractExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/AbstractExtension.php',
|
| 2141 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\AttributeMatchingExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php',
|
| 2142 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\CombinationExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/CombinationExtension.php',
|
| 2143 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\ExtensionInterface' => $vendorDir . '/symfony/css-selector/XPath/Extension/ExtensionInterface.php',
|
| 2144 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\FunctionExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/FunctionExtension.php',
|
| 2145 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\HtmlExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/HtmlExtension.php',
|
| 2146 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\NodeExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/NodeExtension.php',
|
| 2147 |
-
'Symfony\\Component\\CssSelector\\XPath\\Extension\\PseudoClassExtension' => $vendorDir . '/symfony/css-selector/XPath/Extension/PseudoClassExtension.php',
|
| 2148 |
-
'Symfony\\Component\\CssSelector\\XPath\\Translator' => $vendorDir . '/symfony/css-selector/XPath/Translator.php',
|
| 2149 |
-
'Symfony\\Component\\CssSelector\\XPath\\TranslatorInterface' => $vendorDir . '/symfony/css-selector/XPath/TranslatorInterface.php',
|
| 2150 |
-
'Symfony\\Component\\CssSelector\\XPath\\XPathExpr' => $vendorDir . '/symfony/css-selector/XPath/XPathExpr.php',
|
| 2151 |
-
'Symfony\\Component\\Debug\\BufferingLogger' => $vendorDir . '/symfony/debug/BufferingLogger.php',
|
| 2152 |
-
'Symfony\\Component\\Debug\\Debug' => $vendorDir . '/symfony/debug/Debug.php',
|
| 2153 |
-
'Symfony\\Component\\Debug\\DebugClassLoader' => $vendorDir . '/symfony/debug/DebugClassLoader.php',
|
| 2154 |
-
'Symfony\\Component\\Debug\\ErrorHandler' => $vendorDir . '/symfony/debug/ErrorHandler.php',
|
| 2155 |
-
'Symfony\\Component\\Debug\\ExceptionHandler' => $vendorDir . '/symfony/debug/ExceptionHandler.php',
|
| 2156 |
-
'Symfony\\Component\\Debug\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/debug/Exception/ClassNotFoundException.php',
|
| 2157 |
-
'Symfony\\Component\\Debug\\Exception\\ContextErrorException' => $vendorDir . '/symfony/debug/Exception/ContextErrorException.php',
|
| 2158 |
-
'Symfony\\Component\\Debug\\Exception\\FatalErrorException' => $vendorDir . '/symfony/debug/Exception/FatalErrorException.php',
|
| 2159 |
-
'Symfony\\Component\\Debug\\Exception\\FatalThrowableError' => $vendorDir . '/symfony/debug/Exception/FatalThrowableError.php',
|
| 2160 |
-
'Symfony\\Component\\Debug\\Exception\\FlattenException' => $vendorDir . '/symfony/debug/Exception/FlattenException.php',
|
| 2161 |
-
'Symfony\\Component\\Debug\\Exception\\OutOfMemoryException' => $vendorDir . '/symfony/debug/Exception/OutOfMemoryException.php',
|
| 2162 |
-
'Symfony\\Component\\Debug\\Exception\\SilencedErrorContext' => $vendorDir . '/symfony/debug/Exception/SilencedErrorContext.php',
|
| 2163 |
-
'Symfony\\Component\\Debug\\Exception\\UndefinedFunctionException' => $vendorDir . '/symfony/debug/Exception/UndefinedFunctionException.php',
|
| 2164 |
-
'Symfony\\Component\\Debug\\Exception\\UndefinedMethodException' => $vendorDir . '/symfony/debug/Exception/UndefinedMethodException.php',
|
| 2165 |
-
'Symfony\\Component\\Debug\\FatalErrorHandler\\ClassNotFoundFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php',
|
| 2166 |
-
'Symfony\\Component\\Debug\\FatalErrorHandler\\FatalErrorHandlerInterface' => $vendorDir . '/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php',
|
| 2167 |
-
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedFunctionFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.php',
|
| 2168 |
-
'Symfony\\Component\\Debug\\FatalErrorHandler\\UndefinedMethodFatalErrorHandler' => $vendorDir . '/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.php',
|
| 2169 |
-
'Symfony\\Component\\DependencyInjection\\Alias' => $vendorDir . '/symfony/dependency-injection/Alias.php',
|
| 2170 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\ArgumentInterface' => $vendorDir . '/symfony/dependency-injection/Argument/ArgumentInterface.php',
|
| 2171 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\BoundArgument' => $vendorDir . '/symfony/dependency-injection/Argument/BoundArgument.php',
|
| 2172 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\IteratorArgument' => $vendorDir . '/symfony/dependency-injection/Argument/IteratorArgument.php',
|
| 2173 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\RewindableGenerator' => $vendorDir . '/symfony/dependency-injection/Argument/RewindableGenerator.php',
|
| 2174 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\ServiceClosureArgument' => $vendorDir . '/symfony/dependency-injection/Argument/ServiceClosureArgument.php',
|
| 2175 |
-
'Symfony\\Component\\DependencyInjection\\Argument\\TaggedIteratorArgument' => $vendorDir . '/symfony/dependency-injection/Argument/TaggedIteratorArgument.php',
|
| 2176 |
-
'Symfony\\Component\\DependencyInjection\\ChildDefinition' => $vendorDir . '/symfony/dependency-injection/ChildDefinition.php',
|
| 2177 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AbstractRecursivePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AbstractRecursivePass.php',
|
| 2178 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AnalyzeServiceReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php',
|
| 2179 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AutoAliasServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutoAliasServicePass.php',
|
| 2180 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AutowireExceptionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowireExceptionPass.php',
|
| 2181 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AutowirePass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowirePass.php',
|
| 2182 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\AutowireRequiredMethodsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php',
|
| 2183 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CheckArgumentsValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php',
|
| 2184 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CheckCircularReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php',
|
| 2185 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CheckDefinitionValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php',
|
| 2186 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CheckExceptionOnInvalidReferenceBehaviorPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php',
|
| 2187 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CheckReferenceValidityPass' => $vendorDir . '/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php',
|
| 2188 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\Compiler' => $vendorDir . '/symfony/dependency-injection/Compiler/Compiler.php',
|
| 2189 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\CompilerPassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/CompilerPassInterface.php',
|
| 2190 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\DecoratorServicePass' => $vendorDir . '/symfony/dependency-injection/Compiler/DecoratorServicePass.php',
|
| 2191 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\DefinitionErrorExceptionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php',
|
| 2192 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ExtensionCompilerPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php',
|
| 2193 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\FactoryReturnTypePass' => $vendorDir . '/symfony/dependency-injection/Compiler/FactoryReturnTypePass.php',
|
| 2194 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\InlineServiceDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php',
|
| 2195 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\LoggingFormatter' => $vendorDir . '/symfony/dependency-injection/Compiler/LoggingFormatter.php',
|
| 2196 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationContainerBuilder' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
|
| 2197 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationParameterBag' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
|
| 2198 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\MergeExtensionConfigurationPass' => $vendorDir . '/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php',
|
| 2199 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\PassConfig' => $vendorDir . '/symfony/dependency-injection/Compiler/PassConfig.php',
|
| 2200 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\PriorityTaggedServiceTrait' => $vendorDir . '/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php',
|
| 2201 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RegisterEnvVarProcessorsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php',
|
| 2202 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RegisterServiceSubscribersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php',
|
| 2203 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveAbstractDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php',
|
| 2204 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RemovePrivateAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php',
|
| 2205 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RemoveUnusedDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php',
|
| 2206 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatablePassInterface' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatablePassInterface.php',
|
| 2207 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\RepeatedPass' => $vendorDir . '/symfony/dependency-injection/Compiler/RepeatedPass.php',
|
| 2208 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ReplaceAliasByActualDefinitionPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php',
|
| 2209 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveBindingsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveBindingsPass.php',
|
| 2210 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveChildDefinitionsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php',
|
| 2211 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveClassPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveClassPass.php',
|
| 2212 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveDefinitionTemplatesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveDefinitionTemplatesPass.php',
|
| 2213 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveEnvPlaceholdersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveEnvPlaceholdersPass.php',
|
| 2214 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveFactoryClassPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveFactoryClassPass.php',
|
| 2215 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveHotPathPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveHotPathPass.php',
|
| 2216 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInstanceofConditionalsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php',
|
| 2217 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveInvalidReferencesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php',
|
| 2218 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveNamedArgumentsPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php',
|
| 2219 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveParameterPlaceHoldersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php',
|
| 2220 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolvePrivatesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolvePrivatesPass.php',
|
| 2221 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveReferencesToAliasesPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php',
|
| 2222 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveServiceSubscribersPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php',
|
| 2223 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ResolveTaggedIteratorArgumentPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php',
|
| 2224 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceLocatorTagPass' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php',
|
| 2225 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraph' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php',
|
| 2226 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphEdge' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php',
|
| 2227 |
-
'Symfony\\Component\\DependencyInjection\\Compiler\\ServiceReferenceGraphNode' => $vendorDir . '/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php',
|
| 2228 |
-
'Symfony\\Component\\DependencyInjection\\Config\\AutowireServiceResource' => $vendorDir . '/symfony/dependency-injection/Config/AutowireServiceResource.php',
|
| 2229 |
-
'Symfony\\Component\\DependencyInjection\\Config\\ContainerParametersResource' => $vendorDir . '/symfony/dependency-injection/Config/ContainerParametersResource.php',
|
| 2230 |
-
'Symfony\\Component\\DependencyInjection\\Config\\ContainerParametersResourceChecker' => $vendorDir . '/symfony/dependency-injection/Config/ContainerParametersResourceChecker.php',
|
| 2231 |
-
'Symfony\\Component\\DependencyInjection\\Container' => $vendorDir . '/symfony/dependency-injection/Container.php',
|
| 2232 |
-
'Symfony\\Component\\DependencyInjection\\ContainerAwareInterface' => $vendorDir . '/symfony/dependency-injection/ContainerAwareInterface.php',
|
| 2233 |
-
'Symfony\\Component\\DependencyInjection\\ContainerAwareTrait' => $vendorDir . '/symfony/dependency-injection/ContainerAwareTrait.php',
|
| 2234 |
-
'Symfony\\Component\\DependencyInjection\\ContainerBuilder' => $vendorDir . '/symfony/dependency-injection/ContainerBuilder.php',
|
| 2235 |
-
'Symfony\\Component\\DependencyInjection\\ContainerInterface' => $vendorDir . '/symfony/dependency-injection/ContainerInterface.php',
|
| 2236 |
-
'Symfony\\Component\\DependencyInjection\\Definition' => $vendorDir . '/symfony/dependency-injection/Definition.php',
|
| 2237 |
-
'Symfony\\Component\\DependencyInjection\\DefinitionDecorator' => $vendorDir . '/symfony/dependency-injection/DefinitionDecorator.php',
|
| 2238 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\Dumper' => $vendorDir . '/symfony/dependency-injection/Dumper/Dumper.php',
|
| 2239 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/Dumper/DumperInterface.php',
|
| 2240 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\GraphvizDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/GraphvizDumper.php',
|
| 2241 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\PhpDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/PhpDumper.php',
|
| 2242 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\XmlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/XmlDumper.php',
|
| 2243 |
-
'Symfony\\Component\\DependencyInjection\\Dumper\\YamlDumper' => $vendorDir . '/symfony/dependency-injection/Dumper/YamlDumper.php',
|
| 2244 |
-
'Symfony\\Component\\DependencyInjection\\EnvVarProcessor' => $vendorDir . '/symfony/dependency-injection/EnvVarProcessor.php',
|
| 2245 |
-
'Symfony\\Component\\DependencyInjection\\EnvVarProcessorInterface' => $vendorDir . '/symfony/dependency-injection/EnvVarProcessorInterface.php',
|
| 2246 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\AutowiringFailedException' => $vendorDir . '/symfony/dependency-injection/Exception/AutowiringFailedException.php',
|
| 2247 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\BadMethodCallException' => $vendorDir . '/symfony/dependency-injection/Exception/BadMethodCallException.php',
|
| 2248 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\EnvNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvNotFoundException.php',
|
| 2249 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\EnvParameterException' => $vendorDir . '/symfony/dependency-injection/Exception/EnvParameterException.php',
|
| 2250 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/dependency-injection/Exception/ExceptionInterface.php',
|
| 2251 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/dependency-injection/Exception/InvalidArgumentException.php',
|
| 2252 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\LogicException' => $vendorDir . '/symfony/dependency-injection/Exception/LogicException.php',
|
| 2253 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\OutOfBoundsException' => $vendorDir . '/symfony/dependency-injection/Exception/OutOfBoundsException.php',
|
| 2254 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\ParameterCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php',
|
| 2255 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\ParameterNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ParameterNotFoundException.php',
|
| 2256 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\RuntimeException' => $vendorDir . '/symfony/dependency-injection/Exception/RuntimeException.php',
|
| 2257 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\ServiceCircularReferenceException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php',
|
| 2258 |
-
'Symfony\\Component\\DependencyInjection\\Exception\\ServiceNotFoundException' => $vendorDir . '/symfony/dependency-injection/Exception/ServiceNotFoundException.php',
|
| 2259 |
-
'Symfony\\Component\\DependencyInjection\\ExpressionLanguage' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguage.php',
|
| 2260 |
-
'Symfony\\Component\\DependencyInjection\\ExpressionLanguageProvider' => $vendorDir . '/symfony/dependency-injection/ExpressionLanguageProvider.php',
|
| 2261 |
-
'Symfony\\Component\\DependencyInjection\\Extension\\ConfigurationExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php',
|
| 2262 |
-
'Symfony\\Component\\DependencyInjection\\Extension\\Extension' => $vendorDir . '/symfony/dependency-injection/Extension/Extension.php',
|
| 2263 |
-
'Symfony\\Component\\DependencyInjection\\Extension\\ExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/ExtensionInterface.php',
|
| 2264 |
-
'Symfony\\Component\\DependencyInjection\\Extension\\PrependExtensionInterface' => $vendorDir . '/symfony/dependency-injection/Extension/PrependExtensionInterface.php',
|
| 2265 |
-
'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\InstantiatorInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php',
|
| 2266 |
-
'Symfony\\Component\\DependencyInjection\\LazyProxy\\Instantiator\\RealServiceInstantiator' => $vendorDir . '/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php',
|
| 2267 |
-
'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\DumperInterface' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php',
|
| 2268 |
-
'Symfony\\Component\\DependencyInjection\\LazyProxy\\PhpDumper\\NullDumper' => $vendorDir . '/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php',
|
| 2269 |
-
'Symfony\\Component\\DependencyInjection\\LazyProxy\\ProxyHelper' => $vendorDir . '/symfony/dependency-injection/LazyProxy/ProxyHelper.php',
|
| 2270 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\ClosureLoader' => $vendorDir . '/symfony/dependency-injection/Loader/ClosureLoader.php',
|
| 2271 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AbstractConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php',
|
| 2272 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AbstractServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php',
|
| 2273 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\AliasConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php',
|
| 2274 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ContainerConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php',
|
| 2275 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\DefaultsConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php',
|
| 2276 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\InlineServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php',
|
| 2277 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\InstanceofConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php',
|
| 2278 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ParametersConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php',
|
| 2279 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\PrototypeConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php',
|
| 2280 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ReferenceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php',
|
| 2281 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServiceConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php',
|
| 2282 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\ServicesConfigurator' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php',
|
| 2283 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AbstractTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php',
|
| 2284 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ArgumentTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php',
|
| 2285 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AutoconfigureTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php',
|
| 2286 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\AutowireTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php',
|
| 2287 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\BindTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php',
|
| 2288 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\CallTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php',
|
| 2289 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ClassTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php',
|
| 2290 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ConfiguratorTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php',
|
| 2291 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\DecorateTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php',
|
| 2292 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\DeprecateTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php',
|
| 2293 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\FactoryTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php',
|
| 2294 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\FileTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php',
|
| 2295 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\LazyTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php',
|
| 2296 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ParentTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php',
|
| 2297 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\PropertyTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php',
|
| 2298 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\PublicTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php',
|
| 2299 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\ShareTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php',
|
| 2300 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\SyntheticTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php',
|
| 2301 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\Configurator\\Traits\\TagTrait' => $vendorDir . '/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php',
|
| 2302 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\DirectoryLoader' => $vendorDir . '/symfony/dependency-injection/Loader/DirectoryLoader.php',
|
| 2303 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\FileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/FileLoader.php',
|
| 2304 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\GlobFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/GlobFileLoader.php',
|
| 2305 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\IniFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/IniFileLoader.php',
|
| 2306 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/PhpFileLoader.php',
|
| 2307 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\ProtectedPhpFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/PhpFileLoader.php',
|
| 2308 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\XmlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/XmlFileLoader.php',
|
| 2309 |
-
'Symfony\\Component\\DependencyInjection\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/dependency-injection/Loader/YamlFileLoader.php',
|
| 2310 |
-
'Symfony\\Component\\DependencyInjection\\Parameter' => $vendorDir . '/symfony/dependency-injection/Parameter.php',
|
| 2311 |
-
'Symfony\\Component\\DependencyInjection\\ParameterBag\\EnvPlaceholderParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php',
|
| 2312 |
-
'Symfony\\Component\\DependencyInjection\\ParameterBag\\FrozenParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php',
|
| 2313 |
-
'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBag' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBag.php',
|
| 2314 |
-
'Symfony\\Component\\DependencyInjection\\ParameterBag\\ParameterBagInterface' => $vendorDir . '/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php',
|
| 2315 |
-
'Symfony\\Component\\DependencyInjection\\Reference' => $vendorDir . '/symfony/dependency-injection/Reference.php',
|
| 2316 |
-
'Symfony\\Component\\DependencyInjection\\ResettableContainerInterface' => $vendorDir . '/symfony/dependency-injection/ResettableContainerInterface.php',
|
| 2317 |
-
'Symfony\\Component\\DependencyInjection\\ServiceLocator' => $vendorDir . '/symfony/dependency-injection/ServiceLocator.php',
|
| 2318 |
-
'Symfony\\Component\\DependencyInjection\\ServiceSubscriberInterface' => $vendorDir . '/symfony/dependency-injection/ServiceSubscriberInterface.php',
|
| 2319 |
-
'Symfony\\Component\\DependencyInjection\\TaggedContainerInterface' => $vendorDir . '/symfony/dependency-injection/TaggedContainerInterface.php',
|
| 2320 |
-
'Symfony\\Component\\DependencyInjection\\TypedReference' => $vendorDir . '/symfony/dependency-injection/TypedReference.php',
|
| 2321 |
-
'Symfony\\Component\\DependencyInjection\\Variable' => $vendorDir . '/symfony/dependency-injection/Variable.php',
|
| 2322 |
-
'Symfony\\Component\\DomCrawler\\AbstractUriElement' => $vendorDir . '/symfony/dom-crawler/AbstractUriElement.php',
|
| 2323 |
-
'Symfony\\Component\\DomCrawler\\Crawler' => $vendorDir . '/symfony/dom-crawler/Crawler.php',
|
| 2324 |
-
'Symfony\\Component\\DomCrawler\\Field\\ChoiceFormField' => $vendorDir . '/symfony/dom-crawler/Field/ChoiceFormField.php',
|
| 2325 |
-
'Symfony\\Component\\DomCrawler\\Field\\FileFormField' => $vendorDir . '/symfony/dom-crawler/Field/FileFormField.php',
|
| 2326 |
-
'Symfony\\Component\\DomCrawler\\Field\\FormField' => $vendorDir . '/symfony/dom-crawler/Field/FormField.php',
|
| 2327 |
-
'Symfony\\Component\\DomCrawler\\Field\\InputFormField' => $vendorDir . '/symfony/dom-crawler/Field/InputFormField.php',
|
| 2328 |
-
'Symfony\\Component\\DomCrawler\\Field\\TextareaFormField' => $vendorDir . '/symfony/dom-crawler/Field/TextareaFormField.php',
|
| 2329 |
-
'Symfony\\Component\\DomCrawler\\Form' => $vendorDir . '/symfony/dom-crawler/Form.php',
|
| 2330 |
-
'Symfony\\Component\\DomCrawler\\FormFieldRegistry' => $vendorDir . '/symfony/dom-crawler/FormFieldRegistry.php',
|
| 2331 |
-
'Symfony\\Component\\DomCrawler\\Image' => $vendorDir . '/symfony/dom-crawler/Image.php',
|
| 2332 |
-
'Symfony\\Component\\DomCrawler\\Link' => $vendorDir . '/symfony/dom-crawler/Link.php',
|
| 2333 |
-
'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorAttributeValueSame' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorAttributeValueSame.php',
|
| 2334 |
-
'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorExists' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorExists.php',
|
| 2335 |
-
'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorTextContains' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextContains.php',
|
| 2336 |
-
'Symfony\\Component\\DomCrawler\\Test\\Constraint\\CrawlerSelectorTextSame' => $vendorDir . '/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextSame.php',
|
| 2337 |
-
'Symfony\\Component\\EventDispatcher\\ContainerAwareEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ContainerAwareEventDispatcher.php',
|
| 2338 |
-
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php',
|
| 2339 |
-
'Symfony\\Component\\EventDispatcher\\Debug\\TraceableEventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/Debug/TraceableEventDispatcherInterface.php',
|
| 2340 |
-
'Symfony\\Component\\EventDispatcher\\Debug\\WrappedListener' => $vendorDir . '/symfony/event-dispatcher/Debug/WrappedListener.php',
|
| 2341 |
-
'Symfony\\Component\\EventDispatcher\\DependencyInjection\\ExtractingEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php',
|
| 2342 |
-
'Symfony\\Component\\EventDispatcher\\DependencyInjection\\RegisterListenersPass' => $vendorDir . '/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php',
|
| 2343 |
-
'Symfony\\Component\\EventDispatcher\\Event' => $vendorDir . '/symfony/event-dispatcher/Event.php',
|
| 2344 |
-
'Symfony\\Component\\EventDispatcher\\EventDispatcher' => $vendorDir . '/symfony/event-dispatcher/EventDispatcher.php',
|
| 2345 |
-
'Symfony\\Component\\EventDispatcher\\EventDispatcherInterface' => $vendorDir . '/symfony/event-dispatcher/EventDispatcherInterface.php',
|
| 2346 |
-
'Symfony\\Component\\EventDispatcher\\EventSubscriberInterface' => $vendorDir . '/symfony/event-dispatcher/EventSubscriberInterface.php',
|
| 2347 |
-
'Symfony\\Component\\EventDispatcher\\GenericEvent' => $vendorDir . '/symfony/event-dispatcher/GenericEvent.php',
|
| 2348 |
-
'Symfony\\Component\\EventDispatcher\\ImmutableEventDispatcher' => $vendorDir . '/symfony/event-dispatcher/ImmutableEventDispatcher.php',
|
| 2349 |
-
'Symfony\\Component\\Filesystem\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/ExceptionInterface.php',
|
| 2350 |
-
'Symfony\\Component\\Filesystem\\Exception\\FileNotFoundException' => $vendorDir . '/symfony/filesystem/Exception/FileNotFoundException.php',
|
| 2351 |
-
'Symfony\\Component\\Filesystem\\Exception\\IOException' => $vendorDir . '/symfony/filesystem/Exception/IOException.php',
|
| 2352 |
-
'Symfony\\Component\\Filesystem\\Exception\\IOExceptionInterface' => $vendorDir . '/symfony/filesystem/Exception/IOExceptionInterface.php',
|
| 2353 |
-
'Symfony\\Component\\Filesystem\\Filesystem' => $vendorDir . '/symfony/filesystem/Filesystem.php',
|
| 2354 |
-
'Symfony\\Component\\Filesystem\\LockHandler' => $vendorDir . '/symfony/filesystem/LockHandler.php',
|
| 2355 |
-
'Symfony\\Component\\Finder\\Comparator\\Comparator' => $vendorDir . '/symfony/finder/Comparator/Comparator.php',
|
| 2356 |
-
'Symfony\\Component\\Finder\\Comparator\\DateComparator' => $vendorDir . '/symfony/finder/Comparator/DateComparator.php',
|
| 2357 |
-
'Symfony\\Component\\Finder\\Comparator\\NumberComparator' => $vendorDir . '/symfony/finder/Comparator/NumberComparator.php',
|
| 2358 |
-
'Symfony\\Component\\Finder\\Exception\\AccessDeniedException' => $vendorDir . '/symfony/finder/Exception/AccessDeniedException.php',
|
| 2359 |
-
'Symfony\\Component\\Finder\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/finder/Exception/ExceptionInterface.php',
|
| 2360 |
-
'Symfony\\Component\\Finder\\Finder' => $vendorDir . '/symfony/finder/Finder.php',
|
| 2361 |
-
'Symfony\\Component\\Finder\\Glob' => $vendorDir . '/symfony/finder/Glob.php',
|
| 2362 |
-
'Symfony\\Component\\Finder\\Iterator\\CustomFilterIterator' => $vendorDir . '/symfony/finder/Iterator/CustomFilterIterator.php',
|
| 2363 |
-
'Symfony\\Component\\Finder\\Iterator\\DateRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DateRangeFilterIterator.php',
|
| 2364 |
-
'Symfony\\Component\\Finder\\Iterator\\DepthRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/DepthRangeFilterIterator.php',
|
| 2365 |
-
'Symfony\\Component\\Finder\\Iterator\\ExcludeDirectoryFilterIterator' => $vendorDir . '/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php',
|
| 2366 |
-
'Symfony\\Component\\Finder\\Iterator\\FileTypeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FileTypeFilterIterator.php',
|
| 2367 |
-
'Symfony\\Component\\Finder\\Iterator\\FilecontentFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilecontentFilterIterator.php',
|
| 2368 |
-
'Symfony\\Component\\Finder\\Iterator\\FilenameFilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilenameFilterIterator.php',
|
| 2369 |
-
'Symfony\\Component\\Finder\\Iterator\\FilterIterator' => $vendorDir . '/symfony/finder/Iterator/FilterIterator.php',
|
| 2370 |
-
'Symfony\\Component\\Finder\\Iterator\\MultiplePcreFilterIterator' => $vendorDir . '/symfony/finder/Iterator/MultiplePcreFilterIterator.php',
|
| 2371 |
-
'Symfony\\Component\\Finder\\Iterator\\PathFilterIterator' => $vendorDir . '/symfony/finder/Iterator/PathFilterIterator.php',
|
| 2372 |
-
'Symfony\\Component\\Finder\\Iterator\\RecursiveDirectoryIterator' => $vendorDir . '/symfony/finder/Iterator/RecursiveDirectoryIterator.php',
|
| 2373 |
-
'Symfony\\Component\\Finder\\Iterator\\SizeRangeFilterIterator' => $vendorDir . '/symfony/finder/Iterator/SizeRangeFilterIterator.php',
|
| 2374 |
-
'Symfony\\Component\\Finder\\Iterator\\SortableIterator' => $vendorDir . '/symfony/finder/Iterator/SortableIterator.php',
|
| 2375 |
-
'Symfony\\Component\\Finder\\SplFileInfo' => $vendorDir . '/symfony/finder/SplFileInfo.php',
|
| 2376 |
-
'Symfony\\Component\\Process\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/process/Exception/ExceptionInterface.php',
|
| 2377 |
-
'Symfony\\Component\\Process\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/process/Exception/InvalidArgumentException.php',
|
| 2378 |
-
'Symfony\\Component\\Process\\Exception\\LogicException' => $vendorDir . '/symfony/process/Exception/LogicException.php',
|
| 2379 |
-
'Symfony\\Component\\Process\\Exception\\ProcessFailedException' => $vendorDir . '/symfony/process/Exception/ProcessFailedException.php',
|
| 2380 |
-
'Symfony\\Component\\Process\\Exception\\ProcessTimedOutException' => $vendorDir . '/symfony/process/Exception/ProcessTimedOutException.php',
|
| 2381 |
-
'Symfony\\Component\\Process\\Exception\\RuntimeException' => $vendorDir . '/symfony/process/Exception/RuntimeException.php',
|
| 2382 |
-
'Symfony\\Component\\Process\\ExecutableFinder' => $vendorDir . '/symfony/process/ExecutableFinder.php',
|
| 2383 |
-
'Symfony\\Component\\Process\\InputStream' => $vendorDir . '/symfony/process/InputStream.php',
|
| 2384 |
-
'Symfony\\Component\\Process\\PhpExecutableFinder' => $vendorDir . '/symfony/process/PhpExecutableFinder.php',
|
| 2385 |
-
'Symfony\\Component\\Process\\PhpProcess' => $vendorDir . '/symfony/process/PhpProcess.php',
|
| 2386 |
-
'Symfony\\Component\\Process\\Pipes\\AbstractPipes' => $vendorDir . '/symfony/process/Pipes/AbstractPipes.php',
|
| 2387 |
-
'Symfony\\Component\\Process\\Pipes\\PipesInterface' => $vendorDir . '/symfony/process/Pipes/PipesInterface.php',
|
| 2388 |
-
'Symfony\\Component\\Process\\Pipes\\UnixPipes' => $vendorDir . '/symfony/process/Pipes/UnixPipes.php',
|
| 2389 |
-
'Symfony\\Component\\Process\\Pipes\\WindowsPipes' => $vendorDir . '/symfony/process/Pipes/WindowsPipes.php',
|
| 2390 |
-
'Symfony\\Component\\Process\\Process' => $vendorDir . '/symfony/process/Process.php',
|
| 2391 |
-
'Symfony\\Component\\Process\\ProcessBuilder' => $vendorDir . '/symfony/process/ProcessBuilder.php',
|
| 2392 |
-
'Symfony\\Component\\Process\\ProcessUtils' => $vendorDir . '/symfony/process/ProcessUtils.php',
|
| 2393 |
-
'Symfony\\Component\\Translation\\Catalogue\\AbstractOperation' => $vendorDir . '/symfony/translation/Catalogue/AbstractOperation.php',
|
| 2394 |
-
'Symfony\\Component\\Translation\\Catalogue\\MergeOperation' => $vendorDir . '/symfony/translation/Catalogue/MergeOperation.php',
|
| 2395 |
-
'Symfony\\Component\\Translation\\Catalogue\\OperationInterface' => $vendorDir . '/symfony/translation/Catalogue/OperationInterface.php',
|
| 2396 |
-
'Symfony\\Component\\Translation\\Catalogue\\TargetOperation' => $vendorDir . '/symfony/translation/Catalogue/TargetOperation.php',
|
| 2397 |
-
'Symfony\\Component\\Translation\\Command\\XliffLintCommand' => $vendorDir . '/symfony/translation/Command/XliffLintCommand.php',
|
| 2398 |
-
'Symfony\\Component\\Translation\\DataCollectorTranslator' => $vendorDir . '/symfony/translation/DataCollectorTranslator.php',
|
| 2399 |
-
'Symfony\\Component\\Translation\\DataCollector\\TranslationDataCollector' => $vendorDir . '/symfony/translation/DataCollector/TranslationDataCollector.php',
|
| 2400 |
-
'Symfony\\Component\\Translation\\DependencyInjection\\TranslationDumperPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationDumperPass.php',
|
| 2401 |
-
'Symfony\\Component\\Translation\\DependencyInjection\\TranslationExtractorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslationExtractorPass.php',
|
| 2402 |
-
'Symfony\\Component\\Translation\\DependencyInjection\\TranslatorPass' => $vendorDir . '/symfony/translation/DependencyInjection/TranslatorPass.php',
|
| 2403 |
-
'Symfony\\Component\\Translation\\Dumper\\CsvFileDumper' => $vendorDir . '/symfony/translation/Dumper/CsvFileDumper.php',
|
| 2404 |
-
'Symfony\\Component\\Translation\\Dumper\\DumperInterface' => $vendorDir . '/symfony/translation/Dumper/DumperInterface.php',
|
| 2405 |
-
'Symfony\\Component\\Translation\\Dumper\\FileDumper' => $vendorDir . '/symfony/translation/Dumper/FileDumper.php',
|
| 2406 |
-
'Symfony\\Component\\Translation\\Dumper\\IcuResFileDumper' => $vendorDir . '/symfony/translation/Dumper/IcuResFileDumper.php',
|
| 2407 |
-
'Symfony\\Component\\Translation\\Dumper\\IniFileDumper' => $vendorDir . '/symfony/translation/Dumper/IniFileDumper.php',
|
| 2408 |
-
'Symfony\\Component\\Translation\\Dumper\\JsonFileDumper' => $vendorDir . '/symfony/translation/Dumper/JsonFileDumper.php',
|
| 2409 |
-
'Symfony\\Component\\Translation\\Dumper\\MoFileDumper' => $vendorDir . '/symfony/translation/Dumper/MoFileDumper.php',
|
| 2410 |
-
'Symfony\\Component\\Translation\\Dumper\\PhpFileDumper' => $vendorDir . '/symfony/translation/Dumper/PhpFileDumper.php',
|
| 2411 |
-
'Symfony\\Component\\Translation\\Dumper\\PoFileDumper' => $vendorDir . '/symfony/translation/Dumper/PoFileDumper.php',
|
| 2412 |
-
'Symfony\\Component\\Translation\\Dumper\\QtFileDumper' => $vendorDir . '/symfony/translation/Dumper/QtFileDumper.php',
|
| 2413 |
-
'Symfony\\Component\\Translation\\Dumper\\XliffFileDumper' => $vendorDir . '/symfony/translation/Dumper/XliffFileDumper.php',
|
| 2414 |
-
'Symfony\\Component\\Translation\\Dumper\\YamlFileDumper' => $vendorDir . '/symfony/translation/Dumper/YamlFileDumper.php',
|
| 2415 |
-
'Symfony\\Component\\Translation\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/translation/Exception/ExceptionInterface.php',
|
| 2416 |
-
'Symfony\\Component\\Translation\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/translation/Exception/InvalidArgumentException.php',
|
| 2417 |
-
'Symfony\\Component\\Translation\\Exception\\InvalidResourceException' => $vendorDir . '/symfony/translation/Exception/InvalidResourceException.php',
|
| 2418 |
-
'Symfony\\Component\\Translation\\Exception\\LogicException' => $vendorDir . '/symfony/translation/Exception/LogicException.php',
|
| 2419 |
-
'Symfony\\Component\\Translation\\Exception\\NotFoundResourceException' => $vendorDir . '/symfony/translation/Exception/NotFoundResourceException.php',
|
| 2420 |
-
'Symfony\\Component\\Translation\\Exception\\RuntimeException' => $vendorDir . '/symfony/translation/Exception/RuntimeException.php',
|
| 2421 |
-
'Symfony\\Component\\Translation\\Extractor\\AbstractFileExtractor' => $vendorDir . '/symfony/translation/Extractor/AbstractFileExtractor.php',
|
| 2422 |
-
'Symfony\\Component\\Translation\\Extractor\\ChainExtractor' => $vendorDir . '/symfony/translation/Extractor/ChainExtractor.php',
|
| 2423 |
-
'Symfony\\Component\\Translation\\Extractor\\ExtractorInterface' => $vendorDir . '/symfony/translation/Extractor/ExtractorInterface.php',
|
| 2424 |
-
'Symfony\\Component\\Translation\\Extractor\\PhpExtractor' => $vendorDir . '/symfony/translation/Extractor/PhpExtractor.php',
|
| 2425 |
-
'Symfony\\Component\\Translation\\Extractor\\PhpStringTokenParser' => $vendorDir . '/symfony/translation/Extractor/PhpStringTokenParser.php',
|
| 2426 |
-
'Symfony\\Component\\Translation\\Formatter\\ChoiceMessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/ChoiceMessageFormatterInterface.php',
|
| 2427 |
-
'Symfony\\Component\\Translation\\Formatter\\MessageFormatter' => $vendorDir . '/symfony/translation/Formatter/MessageFormatter.php',
|
| 2428 |
-
'Symfony\\Component\\Translation\\Formatter\\MessageFormatterInterface' => $vendorDir . '/symfony/translation/Formatter/MessageFormatterInterface.php',
|
| 2429 |
-
'Symfony\\Component\\Translation\\IdentityTranslator' => $vendorDir . '/symfony/translation/IdentityTranslator.php',
|
| 2430 |
-
'Symfony\\Component\\Translation\\Interval' => $vendorDir . '/symfony/translation/Interval.php',
|
| 2431 |
-
'Symfony\\Component\\Translation\\Loader\\ArrayLoader' => $vendorDir . '/symfony/translation/Loader/ArrayLoader.php',
|
| 2432 |
-
'Symfony\\Component\\Translation\\Loader\\CsvFileLoader' => $vendorDir . '/symfony/translation/Loader/CsvFileLoader.php',
|
| 2433 |
-
'Symfony\\Component\\Translation\\Loader\\FileLoader' => $vendorDir . '/symfony/translation/Loader/FileLoader.php',
|
| 2434 |
-
'Symfony\\Component\\Translation\\Loader\\IcuDatFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuDatFileLoader.php',
|
| 2435 |
-
'Symfony\\Component\\Translation\\Loader\\IcuResFileLoader' => $vendorDir . '/symfony/translation/Loader/IcuResFileLoader.php',
|
| 2436 |
-
'Symfony\\Component\\Translation\\Loader\\IniFileLoader' => $vendorDir . '/symfony/translation/Loader/IniFileLoader.php',
|
| 2437 |
-
'Symfony\\Component\\Translation\\Loader\\JsonFileLoader' => $vendorDir . '/symfony/translation/Loader/JsonFileLoader.php',
|
| 2438 |
-
'Symfony\\Component\\Translation\\Loader\\LoaderInterface' => $vendorDir . '/symfony/translation/Loader/LoaderInterface.php',
|
| 2439 |
-
'Symfony\\Component\\Translation\\Loader\\MoFileLoader' => $vendorDir . '/symfony/translation/Loader/MoFileLoader.php',
|
| 2440 |
-
'Symfony\\Component\\Translation\\Loader\\PhpFileLoader' => $vendorDir . '/symfony/translation/Loader/PhpFileLoader.php',
|
| 2441 |
-
'Symfony\\Component\\Translation\\Loader\\PoFileLoader' => $vendorDir . '/symfony/translation/Loader/PoFileLoader.php',
|
| 2442 |
-
'Symfony\\Component\\Translation\\Loader\\QtFileLoader' => $vendorDir . '/symfony/translation/Loader/QtFileLoader.php',
|
| 2443 |
-
'Symfony\\Component\\Translation\\Loader\\XliffFileLoader' => $vendorDir . '/symfony/translation/Loader/XliffFileLoader.php',
|
| 2444 |
-
'Symfony\\Component\\Translation\\Loader\\YamlFileLoader' => $vendorDir . '/symfony/translation/Loader/YamlFileLoader.php',
|
| 2445 |
-
'Symfony\\Component\\Translation\\LoggingTranslator' => $vendorDir . '/symfony/translation/LoggingTranslator.php',
|
| 2446 |
-
'Symfony\\Component\\Translation\\MessageCatalogue' => $vendorDir . '/symfony/translation/MessageCatalogue.php',
|
| 2447 |
-
'Symfony\\Component\\Translation\\MessageCatalogueInterface' => $vendorDir . '/symfony/translation/MessageCatalogueInterface.php',
|
| 2448 |
-
'Symfony\\Component\\Translation\\MessageSelector' => $vendorDir . '/symfony/translation/MessageSelector.php',
|
| 2449 |
-
'Symfony\\Component\\Translation\\MetadataAwareInterface' => $vendorDir . '/symfony/translation/MetadataAwareInterface.php',
|
| 2450 |
-
'Symfony\\Component\\Translation\\PluralizationRules' => $vendorDir . '/symfony/translation/PluralizationRules.php',
|
| 2451 |
-
'Symfony\\Component\\Translation\\Reader\\TranslationReader' => $vendorDir . '/symfony/translation/Reader/TranslationReader.php',
|
| 2452 |
-
'Symfony\\Component\\Translation\\Reader\\TranslationReaderInterface' => $vendorDir . '/symfony/translation/Reader/TranslationReaderInterface.php',
|
| 2453 |
-
'Symfony\\Component\\Translation\\Translator' => $vendorDir . '/symfony/translation/Translator.php',
|
| 2454 |
-
'Symfony\\Component\\Translation\\TranslatorBagInterface' => $vendorDir . '/symfony/translation/TranslatorBagInterface.php',
|
| 2455 |
-
'Symfony\\Component\\Translation\\TranslatorInterface' => $vendorDir . '/symfony/translation/TranslatorInterface.php',
|
| 2456 |
-
'Symfony\\Component\\Translation\\Util\\ArrayConverter' => $vendorDir . '/symfony/translation/Util/ArrayConverter.php',
|
| 2457 |
-
'Symfony\\Component\\Translation\\Writer\\TranslationWriter' => $vendorDir . '/symfony/translation/Writer/TranslationWriter.php',
|
| 2458 |
-
'Symfony\\Component\\Translation\\Writer\\TranslationWriterInterface' => $vendorDir . '/symfony/translation/Writer/TranslationWriterInterface.php',
|
| 2459 |
-
'Symfony\\Component\\Yaml\\Command\\LintCommand' => $vendorDir . '/symfony/yaml/Command/LintCommand.php',
|
| 2460 |
-
'Symfony\\Component\\Yaml\\Dumper' => $vendorDir . '/symfony/yaml/Dumper.php',
|
| 2461 |
-
'Symfony\\Component\\Yaml\\Escaper' => $vendorDir . '/symfony/yaml/Escaper.php',
|
| 2462 |
-
'Symfony\\Component\\Yaml\\Exception\\DumpException' => $vendorDir . '/symfony/yaml/Exception/DumpException.php',
|
| 2463 |
-
'Symfony\\Component\\Yaml\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/yaml/Exception/ExceptionInterface.php',
|
| 2464 |
-
'Symfony\\Component\\Yaml\\Exception\\ParseException' => $vendorDir . '/symfony/yaml/Exception/ParseException.php',
|
| 2465 |
-
'Symfony\\Component\\Yaml\\Exception\\RuntimeException' => $vendorDir . '/symfony/yaml/Exception/RuntimeException.php',
|
| 2466 |
-
'Symfony\\Component\\Yaml\\Inline' => $vendorDir . '/symfony/yaml/Inline.php',
|
| 2467 |
-
'Symfony\\Component\\Yaml\\Parser' => $vendorDir . '/symfony/yaml/Parser.php',
|
| 2468 |
-
'Symfony\\Component\\Yaml\\Tag\\TaggedValue' => $vendorDir . '/symfony/yaml/Tag/TaggedValue.php',
|
| 2469 |
-
'Symfony\\Component\\Yaml\\Unescaper' => $vendorDir . '/symfony/yaml/Unescaper.php',
|
| 2470 |
-
'Symfony\\Component\\Yaml\\Yaml' => $vendorDir . '/symfony/yaml/Yaml.php',
|
| 2471 |
-
'Symfony\\Polyfill\\Ctype\\Ctype' => $vendorDir . '/symfony/polyfill-ctype/Ctype.php',
|
| 2472 |
-
'Symfony\\Polyfill\\Mbstring\\Mbstring' => $vendorDir . '/symfony/polyfill-mbstring/Mbstring.php',
|
| 2473 |
-
'Text_Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php',
|
| 2474 |
-
'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php',
|
| 2475 |
-
'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php',
|
| 2476 |
-
'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php',
|
| 2477 |
-
'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php',
|
| 2478 |
-
'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php',
|
| 2479 |
-
'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php',
|
| 2480 |
-
'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php',
|
| 2481 |
-
'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php',
|
| 2482 |
-
'Tribe\\PUE\\Update_Prevention' => $baseDir . '/src/Tribe/PUE/Update_Prevention.php',
|
| 2483 |
-
'Tribe\\Service_Providers\\PUE' => $baseDir . '/src/Tribe/Service_Providers/PUE.php',
|
| 2484 |
-
'Tribe\\Test\\Codeception\\Extensions\\Function_Mocker' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Codeception/Extensions/Function_Mocker.php',
|
| 2485 |
-
'Tribe\\Test\\PHPUnit\\Traits\\With_Post_Remapping' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/PHPUnit/Traits/With_Post_Remapping.php',
|
| 2486 |
-
'Tribe\\Test\\Products\\Traits\\With_Event_Data_Fetching' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/Traits/With_Event_Data_Fetching.php',
|
| 2487 |
-
'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\ContextMocker' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/ContextMocker.php',
|
| 2488 |
-
'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\HtmlPartialTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/HtmlPartialTestCase.php',
|
| 2489 |
-
'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\HtmlTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/HtmlTestCase.php',
|
| 2490 |
-
'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\TestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/TestCase.php',
|
| 2491 |
-
'Tribe\\Test\\Products\\WPBrowser\\Views\\V2\\ViewTestCase' => $vendorDir . '/moderntribe/tribe-testing-facilities/src/Products/WPBrowser/Views/V2/ViewTestCase.php',
|
| 2492 |
-
'Tribe\\Traits\\Cache_User' => $baseDir . '/src/Tribe/Traits/Cache_User.php',
|
| 2493 |
-
'Tribe\\Utils\\Collection_Interface' => $baseDir . '/src/Tribe/Utils/Collection_Interface.php',
|
| 2494 |
-
'Tribe\\Utils\\Collection_Trait' => $baseDir . '/src/Tribe/Utils/Collection_Trait.php',
|
| 2495 |
-
'Tribe\\Utils\\Element_Classes' => $baseDir . '/src/Tribe/Utils/Element_Classes.php',
|
| 2496 |
-
'Tribe\\Utils\\Lazy_Collection' => $baseDir . '/src/Tribe/Utils/Lazy_Collection.php',
|
| 2497 |
-
'Tribe\\Utils\\Post_Thumbnail' => $baseDir . '/src/Tribe/Utils/Post_Thumbnail.php',
|
| 2498 |
-
'WP_CLI' => $vendorDir . '/wp-cli/wp-cli/php/class-wp-cli.php',
|
| 2499 |
-
'WP_CLI\\AutoloadSplitter' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/AutoloadSplitter.php',
|
| 2500 |
-
'WP_CLI\\AutoloadSplitter\\AutoloadGenerator' => $vendorDir . '/wp-cli/autoload-splitter/src/AutoloadGenerator.php',
|
| 2501 |
-
'WP_CLI\\AutoloadSplitter\\ComposerPlugin' => $vendorDir . '/wp-cli/autoload-splitter/src/ComposerPlugin.php',
|
| 2502 |
-
'WP_CLI\\Autoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Autoloader.php',
|
| 2503 |
-
'WP_CLI\\Bootstrap\\AutoloaderStep' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/AutoloaderStep.php',
|
| 2504 |
-
'WP_CLI\\Bootstrap\\BootstrapState' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/BootstrapState.php',
|
| 2505 |
-
'WP_CLI\\Bootstrap\\BootstrapStep' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/BootstrapStep.php',
|
| 2506 |
-
'WP_CLI\\Bootstrap\\ConfigureRunner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/ConfigureRunner.php',
|
| 2507 |
-
'WP_CLI\\Bootstrap\\DeclareAbstractBaseCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DeclareAbstractBaseCommand.php',
|
| 2508 |
-
'WP_CLI\\Bootstrap\\DeclareMainClass' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DeclareMainClass.php',
|
| 2509 |
-
'WP_CLI\\Bootstrap\\DefineProtectedCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/DefineProtectedCommands.php',
|
| 2510 |
-
'WP_CLI\\Bootstrap\\IncludeBundledAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeBundledAutoloader.php',
|
| 2511 |
-
'WP_CLI\\Bootstrap\\IncludeFallbackAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFallbackAutoloader.php',
|
| 2512 |
-
'WP_CLI\\Bootstrap\\IncludeFrameworkAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludeFrameworkAutoloader.php',
|
| 2513 |
-
'WP_CLI\\Bootstrap\\IncludePackageAutoloader' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/IncludePackageAutoloader.php',
|
| 2514 |
-
'WP_CLI\\Bootstrap\\InitializeColorization' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeColorization.php',
|
| 2515 |
-
'WP_CLI\\Bootstrap\\InitializeLogger' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/InitializeLogger.php',
|
| 2516 |
-
'WP_CLI\\Bootstrap\\LaunchRunner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php',
|
| 2517 |
-
'WP_CLI\\Bootstrap\\LoadDispatcher' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadDispatcher.php',
|
| 2518 |
-
'WP_CLI\\Bootstrap\\LoadRequiredCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadRequiredCommand.php',
|
| 2519 |
-
'WP_CLI\\Bootstrap\\LoadUtilityFunctions' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LoadUtilityFunctions.php',
|
| 2520 |
-
'WP_CLI\\Bootstrap\\RegisterDeferredCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RegisterDeferredCommands.php',
|
| 2521 |
-
'WP_CLI\\Bootstrap\\RegisterFrameworkCommands' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RegisterFrameworkCommands.php',
|
| 2522 |
-
'WP_CLI\\Bootstrap\\RunnerInstance' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Bootstrap/RunnerInstance.php',
|
| 2523 |
-
'WP_CLI\\Completions' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Completions.php',
|
| 2524 |
-
'WP_CLI\\ComposerIO' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ComposerIO.php',
|
| 2525 |
-
'WP_CLI\\Configurator' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Configurator.php',
|
| 2526 |
-
'WP_CLI\\Dispatcher\\CommandAddition' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandAddition.php',
|
| 2527 |
-
'WP_CLI\\Dispatcher\\CommandFactory' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php',
|
| 2528 |
-
'WP_CLI\\Dispatcher\\CommandNamespace' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandNamespace.php',
|
| 2529 |
-
'WP_CLI\\Dispatcher\\CompositeCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CompositeCommand.php',
|
| 2530 |
-
'WP_CLI\\Dispatcher\\RootCommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/RootCommand.php',
|
| 2531 |
-
'WP_CLI\\Dispatcher\\Subcommand' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php',
|
| 2532 |
-
'WP_CLI\\DocParser' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/DocParser.php',
|
| 2533 |
-
'WP_CLI\\ExitException' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ExitException.php',
|
| 2534 |
-
'WP_CLI\\Extractor' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Extractor.php',
|
| 2535 |
-
'WP_CLI\\Fetchers\\Base' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Fetchers/Base.php',
|
| 2536 |
-
'WP_CLI\\FileCache' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/FileCache.php',
|
| 2537 |
-
'WP_CLI\\Formatter' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Formatter.php',
|
| 2538 |
-
'WP_CLI\\Iterators\\CSV' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/CSV.php',
|
| 2539 |
-
'WP_CLI\\Iterators\\Exception' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Exception.php',
|
| 2540 |
-
'WP_CLI\\Iterators\\Query' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Query.php',
|
| 2541 |
-
'WP_CLI\\Iterators\\Table' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Table.php',
|
| 2542 |
-
'WP_CLI\\Iterators\\Transform' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Iterators/Transform.php',
|
| 2543 |
-
'WP_CLI\\Loggers\\Base' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Base.php',
|
| 2544 |
-
'WP_CLI\\Loggers\\Execution' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Execution.php',
|
| 2545 |
-
'WP_CLI\\Loggers\\Quiet' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Quiet.php',
|
| 2546 |
-
'WP_CLI\\Loggers\\Regular' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Loggers/Regular.php',
|
| 2547 |
-
'WP_CLI\\NoOp' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/NoOp.php',
|
| 2548 |
-
'WP_CLI\\PackageManagerEventSubscriber' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/PackageManagerEventSubscriber.php',
|
| 2549 |
-
'WP_CLI\\Process' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Process.php',
|
| 2550 |
-
'WP_CLI\\ProcessRun' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/ProcessRun.php',
|
| 2551 |
-
'WP_CLI\\Runner' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/Runner.php',
|
| 2552 |
-
'WP_CLI\\SynopsisParser' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/SynopsisParser.php',
|
| 2553 |
-
'WP_CLI\\SynopsisValidator' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/SynopsisValidator.php',
|
| 2554 |
-
'WP_CLI\\UpgraderSkin' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/UpgraderSkin.php',
|
| 2555 |
-
'WP_CLI\\WpHttpCacheManager' => $vendorDir . '/wp-cli/wp-cli/php/WP_CLI/WpHttpCacheManager.php',
|
| 2556 |
-
'WP_CLI_Command' => $vendorDir . '/wp-cli/wp-cli/php/class-wp-cli-command.php',
|
| 2557 |
-
'Webmozart\\Assert\\Assert' => $vendorDir . '/webmozart/assert/src/Assert.php',
|
| 2558 |
-
'cli\\Arguments' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Arguments.php',
|
| 2559 |
-
'cli\\Colors' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Colors.php',
|
| 2560 |
-
'cli\\Memoize' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Memoize.php',
|
| 2561 |
-
'cli\\Notify' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Notify.php',
|
| 2562 |
-
'cli\\Progress' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Progress.php',
|
| 2563 |
-
'cli\\Shell' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Shell.php',
|
| 2564 |
-
'cli\\Streams' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Streams.php',
|
| 2565 |
-
'cli\\Table' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Table.php',
|
| 2566 |
-
'cli\\Tree' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/Tree.php',
|
| 2567 |
-
'cli\\arguments\\Argument' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/Argument.php',
|
| 2568 |
-
'cli\\arguments\\HelpScreen' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/HelpScreen.php',
|
| 2569 |
-
'cli\\arguments\\InvalidArguments' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/InvalidArguments.php',
|
| 2570 |
-
'cli\\arguments\\Lexer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/arguments/Lexer.php',
|
| 2571 |
-
'cli\\notify\\Dots' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/notify/Dots.php',
|
| 2572 |
-
'cli\\notify\\Spinner' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/notify/Spinner.php',
|
| 2573 |
-
'cli\\progress\\Bar' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/progress/Bar.php',
|
| 2574 |
-
'cli\\table\\Ascii' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Ascii.php',
|
| 2575 |
-
'cli\\table\\Renderer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Renderer.php',
|
| 2576 |
-
'cli\\table\\Tabular' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/table/Tabular.php',
|
| 2577 |
-
'cli\\tree\\Ascii' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Ascii.php',
|
| 2578 |
-
'cli\\tree\\Markdown' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Markdown.php',
|
| 2579 |
-
'cli\\tree\\Renderer' => $vendorDir . '/wp-cli/php-cli-tools/lib/cli/tree/Renderer.php',
|
| 2580 |
-
'phpDocumentor\\Reflection\\DocBlock' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock.php',
|
| 2581 |
-
'phpDocumentor\\Reflection\\DocBlockFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactory.php',
|
| 2582 |
-
'phpDocumentor\\Reflection\\DocBlockFactoryInterface' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php',
|
| 2583 |
-
'phpDocumentor\\Reflection\\DocBlock\\Description' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Description.php',
|
| 2584 |
-
'phpDocumentor\\Reflection\\DocBlock\\DescriptionFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php',
|
| 2585 |
-
'phpDocumentor\\Reflection\\DocBlock\\ExampleFinder' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php',
|
| 2586 |
-
'phpDocumentor\\Reflection\\DocBlock\\Serializer' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php',
|
| 2587 |
-
'phpDocumentor\\Reflection\\DocBlock\\StandardTagFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php',
|
| 2588 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php',
|
| 2589 |
-
'phpDocumentor\\Reflection\\DocBlock\\TagFactory' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php',
|
| 2590 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Author' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php',
|
| 2591 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\BaseTag' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php',
|
| 2592 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Covers' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php',
|
| 2593 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Deprecated' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php',
|
| 2594 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Example' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php',
|
| 2595 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\StaticMethod' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php',
|
| 2596 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Factory\\Strategy' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Strategy.php',
|
| 2597 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php',
|
| 2598 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\AlignFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php',
|
| 2599 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Formatter\\PassthroughFormatter' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php',
|
| 2600 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Generic' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php',
|
| 2601 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Link' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php',
|
| 2602 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Method' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php',
|
| 2603 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Param' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php',
|
| 2604 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Property' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php',
|
| 2605 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\PropertyRead' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php',
|
| 2606 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\PropertyWrite' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php',
|
| 2607 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Fqsen' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php',
|
| 2608 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Reference' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php',
|
| 2609 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Reference\\Url' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php',
|
| 2610 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Return_' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php',
|
| 2611 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\See' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php',
|
| 2612 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Since' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php',
|
| 2613 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Source' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php',
|
| 2614 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Throws' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php',
|
| 2615 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Uses' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php',
|
| 2616 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Var_' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php',
|
| 2617 |
-
'phpDocumentor\\Reflection\\DocBlock\\Tags\\Version' => $vendorDir . '/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php',
|
| 2618 |
-
'phpDocumentor\\Reflection\\Element' => $vendorDir . '/phpdocumentor/reflection-common/src/Element.php',
|
| 2619 |
-
'phpDocumentor\\Reflection\\File' => $vendorDir . '/phpdocumentor/reflection-common/src/File.php',
|
| 2620 |
-
'phpDocumentor\\Reflection\\Fqsen' => $vendorDir . '/phpdocumentor/reflection-common/src/Fqsen.php',
|
| 2621 |
-
'phpDocumentor\\Reflection\\FqsenResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/FqsenResolver.php',
|
| 2622 |
-
'phpDocumentor\\Reflection\\Location' => $vendorDir . '/phpdocumentor/reflection-common/src/Location.php',
|
| 2623 |
-
'phpDocumentor\\Reflection\\Project' => $vendorDir . '/phpdocumentor/reflection-common/src/Project.php',
|
| 2624 |
-
'phpDocumentor\\Reflection\\ProjectFactory' => $vendorDir . '/phpdocumentor/reflection-common/src/ProjectFactory.php',
|
| 2625 |
-
'phpDocumentor\\Reflection\\Type' => $vendorDir . '/phpdocumentor/type-resolver/src/Type.php',
|
| 2626 |
-
'phpDocumentor\\Reflection\\TypeResolver' => $vendorDir . '/phpdocumentor/type-resolver/src/TypeResolver.php',
|
| 2627 |
-
'phpDocumentor\\Reflection\\Types\\Array_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Array_.php',
|
| 2628 |
-
'phpDocumentor\\Reflection\\Types\\Boolean' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Boolean.php',
|
| 2629 |
-
'phpDocumentor\\Reflection\\Types\\Callable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Callable_.php',
|
| 2630 |
-
'phpDocumentor\\Reflection\\Types\\Compound' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Compound.php',
|
| 2631 |
-
'phpDocumentor\\Reflection\\Types\\Context' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Context.php',
|
| 2632 |
-
'phpDocumentor\\Reflection\\Types\\ContextFactory' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/ContextFactory.php',
|
| 2633 |
-
'phpDocumentor\\Reflection\\Types\\Float_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Float_.php',
|
| 2634 |
-
'phpDocumentor\\Reflection\\Types\\Integer' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Integer.php',
|
| 2635 |
-
'phpDocumentor\\Reflection\\Types\\Iterable_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Iterable_.php',
|
| 2636 |
-
'phpDocumentor\\Reflection\\Types\\Mixed_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Mixed_.php',
|
| 2637 |
-
'phpDocumentor\\Reflection\\Types\\Null_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Null_.php',
|
| 2638 |
-
'phpDocumentor\\Reflection\\Types\\Nullable' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Nullable.php',
|
| 2639 |
-
'phpDocumentor\\Reflection\\Types\\Object_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Object_.php',
|
| 2640 |
-
'phpDocumentor\\Reflection\\Types\\Parent_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Parent_.php',
|
| 2641 |
-
'phpDocumentor\\Reflection\\Types\\Resource_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Resource_.php',
|
| 2642 |
-
'phpDocumentor\\Reflection\\Types\\Scalar' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Scalar.php',
|
| 2643 |
-
'phpDocumentor\\Reflection\\Types\\Self_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Self_.php',
|
| 2644 |
-
'phpDocumentor\\Reflection\\Types\\Static_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Static_.php',
|
| 2645 |
-
'phpDocumentor\\Reflection\\Types\\String_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/String_.php',
|
| 2646 |
-
'phpDocumentor\\Reflection\\Types\\This' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/This.php',
|
| 2647 |
-
'phpDocumentor\\Reflection\\Types\\Void_' => $vendorDir . '/phpdocumentor/type-resolver/src/Types/Void_.php',
|
| 2648 |
-
'tad\\WPBrowser\\Adapters\\WP' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Adapters/WP.php',
|
| 2649 |
-
'tad\\WPBrowser\\Connector\\WordPress' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Connector/WordPress.php',
|
| 2650 |
-
'tad\\WPBrowser\\Documentation\\TableGenerator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Documentation/TableGenerator.php',
|
| 2651 |
-
'tad\\WPBrowser\\Environment\\Constants' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/Constants.php',
|
| 2652 |
-
'tad\\WPBrowser\\Environment\\Executor' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/Executor.php',
|
| 2653 |
-
'tad\\WPBrowser\\Environment\\System' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Environment/System.php',
|
| 2654 |
-
'tad\\WPBrowser\\Extension\\Copier' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Extension/Copier.php',
|
| 2655 |
-
'tad\\WPBrowser\\Extension\\Symlinker' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Extension/Symlinker.php',
|
| 2656 |
-
'tad\\WPBrowser\\Filesystem\\FileReplacers\\AbstractFileReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/AbstractFileReplacer.php',
|
| 2657 |
-
'tad\\WPBrowser\\Filesystem\\FileReplacers\\HtaccesReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/HtaccesReplacer.php',
|
| 2658 |
-
'tad\\WPBrowser\\Filesystem\\FileReplacers\\WPConfigReplacer' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/FileReplacers/WPConfigReplacer.php',
|
| 2659 |
-
'tad\\WPBrowser\\Filesystem\\Filesystem' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/Filesystem.php',
|
| 2660 |
-
'tad\\WPBrowser\\Filesystem\\Utils' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Filesystem/Utils.php',
|
| 2661 |
-
'tad\\WPBrowser\\Generators\\Blog' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Blog.php',
|
| 2662 |
-
'tad\\WPBrowser\\Generators\\Comment' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Comment.php',
|
| 2663 |
-
'tad\\WPBrowser\\Generators\\Date' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Date.php',
|
| 2664 |
-
'tad\\WPBrowser\\Generators\\Links' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Links.php',
|
| 2665 |
-
'tad\\WPBrowser\\Generators\\Post' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Post.php',
|
| 2666 |
-
'tad\\WPBrowser\\Generators\\RedirectingWPConfig' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/RedirectingWPConfig.php',
|
| 2667 |
-
'tad\\WPBrowser\\Generators\\SubdomainHtaccess' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/SubdomainHtaccess.php',
|
| 2668 |
-
'tad\\WPBrowser\\Generators\\SubfolderHtaccess' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/SubfolderHtaccess.php',
|
| 2669 |
-
'tad\\WPBrowser\\Generators\\Tables' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/Tables.php',
|
| 2670 |
-
'tad\\WPBrowser\\Generators\\TemplateProviderInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/TemplateProviderInterface.php',
|
| 2671 |
-
'tad\\WPBrowser\\Generators\\User' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/User.php',
|
| 2672 |
-
'tad\\WPBrowser\\Generators\\User\\Roles' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/User/Roles.php',
|
| 2673 |
-
'tad\\WPBrowser\\Generators\\WpPassword' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Generators/WpPassword.php',
|
| 2674 |
-
'tad\\WPBrowser\\Iterators\\Filters\\ActionsQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/ActionsQueriesFilter.php',
|
| 2675 |
-
'tad\\WPBrowser\\Iterators\\Filters\\ClassMethodQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/ClassMethodQueriesFilter.php',
|
| 2676 |
-
'tad\\WPBrowser\\Iterators\\Filters\\FactoryQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FactoryQueriesFilter.php',
|
| 2677 |
-
'tad\\WPBrowser\\Iterators\\Filters\\FiltersQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FiltersQueriesFilter.php',
|
| 2678 |
-
'tad\\WPBrowser\\Iterators\\Filters\\FunctionQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/FunctionQueriesFilter.php',
|
| 2679 |
-
'tad\\WPBrowser\\Iterators\\Filters\\MainStatementQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/MainStatementQueriesFilter.php',
|
| 2680 |
-
'tad\\WPBrowser\\Iterators\\Filters\\QueriesCallerBasedFilterIterator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/QueriesCallerBasedFilterIterator.php',
|
| 2681 |
-
'tad\\WPBrowser\\Iterators\\Filters\\QueriesCallerBasedKeepingFilterIterator' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/QueriesCallerBasedKeepingFilterIterator.php',
|
| 2682 |
-
'tad\\WPBrowser\\Iterators\\Filters\\SetupTearDownQueriesFilter' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Iterators/Filters/SetupTearDownQueriesFilter.php',
|
| 2683 |
-
'tad\\WPBrowser\\Module\\Support\\DbDump' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/Support/DbDump.php',
|
| 2684 |
-
'tad\\WPBrowser\\Module\\Support\\UriToIndexMapper' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/Support/UriToIndexMapper.php',
|
| 2685 |
-
'tad\\WPBrowser\\Module\\WPLoader\\FactoryStore' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/FactoryStore.php',
|
| 2686 |
-
'tad\\WPBrowser\\Module\\WPLoader\\Filters' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/Filters.php',
|
| 2687 |
-
'tad\\WPBrowser\\Module\\WPLoader\\FiltersGroup' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Module/WPLoader/FiltersGroup.php',
|
| 2688 |
-
'tad\\WPBrowser\\Services\\Db\\MySQLDumpFactory' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpFactory.php',
|
| 2689 |
-
'tad\\WPBrowser\\Services\\Db\\MySQLDumpFactoryInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpFactoryInterface.php',
|
| 2690 |
-
'tad\\WPBrowser\\Services\\Db\\MySQLDumpInterface' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/Db/MySQLDumpInterface.php',
|
| 2691 |
-
'tad\\WPBrowser\\Services\\WP\\Bootstrapper' => $vendorDir . '/lucatume/wp-browser-commons/src/tad/WPBrowser/Services/WP/Bootstrapper.php',
|
| 2692 |
-
'tad\\WPBrowser\\Template\\Data' => $vendorDir . '/lucatume/wp-browser/src/tad/WPBrowser/Template/Data.php',
|
| 2693 |
-
'tad_DI52_Container' => $vendorDir . '/lucatume/di52/src/tad/DI52/Container.php',
|
| 2694 |
-
'tad_DI52_ContainerInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
|
| 2695 |
-
'tad_DI52_ProtectedValue' => $vendorDir . '/lucatume/di52/src/tad/DI52/ProtectedValue.php',
|
| 2696 |
-
'tad_DI52_ServiceProvider' => $vendorDir . '/lucatume/di52/src/tad/DI52/ServiceProvider.php',
|
| 2697 |
-
'tad_DI52_ServiceProviderInterface' => $vendorDir . '/lucatume/di52/src/tad/DI52/ServiceProviderInterface.php',
|
| 2698 |
-
'xrstf\\Composer52\\AutoloadGenerator' => $vendorDir . '/xrstf/composer-php52/lib/xrstf/Composer52/AutoloadGenerator.php',
|
| 2699 |
-
'xrstf\\Composer52\\Generator' => $vendorDir . '/xrstf/composer-php52/lib/xrstf/Composer52/Generator.php',
|
| 2700 |
-
);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/composer/autoload_framework_real.php
DELETED
|
@@ -1,34 +0,0 @@
|
|
| 1 |
-
<?php
|
| 2 |
-
|
| 3 |
-
// autoload_framework_real.php @generated by Composer
|
| 4 |
-
|
| 5 |
-
class ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e
|
| 6 |
-
{
|
| 7 |
-
private static $loader;
|
| 8 |
-
|
| 9 |
-
public static function loadClassLoader($class)
|
| 10 |
-
{
|
| 11 |
-
if ('Composer\Autoload\ClassLoader' === $class) {
|
| 12 |
-
require __DIR__ . '/ClassLoader.php';
|
| 13 |
-
}
|
| 14 |
-
}
|
| 15 |
-
|
| 16 |
-
public static function getLoader()
|
| 17 |
-
{
|
| 18 |
-
if (null !== self::$loader) {
|
| 19 |
-
return self::$loader;
|
| 20 |
-
}
|
| 21 |
-
|
| 22 |
-
spl_autoload_register(array('ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e', 'loadClassLoader'), true, true);
|
| 23 |
-
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('ComposerAutoloaderInit90bb7342d538ff87269d1952e47d935e', 'loadClassLoader'));
|
| 25 |
-
|
| 26 |
-
$classMap = require __DIR__ . '/autoload_framework_classmap.php';
|
| 27 |
-
if ($classMap) {
|
| 28 |
-
$loader->addClassMap($classMap);
|
| 29 |
-
}
|
| 30 |
-
$loader->register(true);
|
| 31 |
-
|
| 32 |
-
return $loader;
|
| 33 |
-
}
|
| 34 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
common/vendor/composer/autoload_psr4.php
CHANGED
|
@@ -7,5 +7,7 @@ $baseDir = dirname($vendorDir);
|
|
| 7 |
|
| 8 |
return array(
|
| 9 |
'Tribe\\' => array($baseDir . '/src/Tribe'),
|
|
|
|
|
|
|
| 10 |
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
|
| 11 |
);
|
| 7 |
|
| 8 |
return array(
|
| 9 |
'Tribe\\' => array($baseDir . '/src/Tribe'),
|
| 10 |
+
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
|
| 11 |
+
'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'),
|
| 12 |
'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'),
|
| 13 |
);
|
common/vendor/composer/autoload_real.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
-
class
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
|
@@ -19,15 +19,15 @@ class ComposerAutoloaderInit1d34b882376a6776c2d50eb2e89c117c
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 25 |
|
| 26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
if ($useStaticLoader) {
|
| 28 |
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
|
| 30 |
-
call_user_func(\Composer\Autoload\
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
| 2 |
|
| 3 |
// autoload_real.php @generated by Composer
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea
|
| 6 |
{
|
| 7 |
private static $loader;
|
| 8 |
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea', 'loadClassLoader'), true, true);
|
| 23 |
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit027cdaf4eefc9bf514c1dc3495f8d3ea', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
| 27 |
if ($useStaticLoader) {
|
| 28 |
require_once __DIR__ . '/autoload_static.php';
|
| 29 |
|
| 30 |
+
call_user_func(\Composer\Autoload\ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::getInitializer($loader));
|
| 31 |
} else {
|
| 32 |
$map = require __DIR__ . '/autoload_namespaces.php';
|
| 33 |
foreach ($map as $namespace => $path) {
|
common/vendor/composer/autoload_real_52.php
CHANGED
|
@@ -2,7 +2,7 @@
|
|
| 2 |
|
| 3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
| 4 |
|
| 5 |
-
class
|
| 6 |
private static $loader;
|
| 7 |
|
| 8 |
public static function loadClassLoader($class) {
|
|
@@ -19,9 +19,9 @@ class ComposerAutoloaderInitc5ddf83a2eb9808a951d3866b13e2b63 {
|
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
-
spl_autoload_register(array('
|
| 23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
| 24 |
-
spl_autoload_unregister(array('
|
| 25 |
|
| 26 |
$vendorDir = dirname(dirname(__FILE__));
|
| 27 |
$baseDir = dirname($vendorDir);
|
| 2 |
|
| 3 |
// autoload_real_52.php generated by xrstf/composer-php52
|
| 4 |
|
| 5 |
+
class ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70 {
|
| 6 |
private static $loader;
|
| 7 |
|
| 8 |
public static function loadClassLoader($class) {
|
| 19 |
return self::$loader;
|
| 20 |
}
|
| 21 |
|
| 22 |
+
spl_autoload_register(array('ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70', 'loadClassLoader'), true /*, true */);
|
| 23 |
self::$loader = $loader = new xrstf_Composer52_ClassLoader();
|
| 24 |
+
spl_autoload_unregister(array('ComposerAutoloaderInit044cb8eae52e11b7ad9604dd31d61d70', 'loadClassLoader'));
|
| 25 |
|
| 26 |
$vendorDir = dirname(dirname(__FILE__));
|
| 27 |
$baseDir = dirname($vendorDir);
|
common/vendor/composer/autoload_static.php
CHANGED
|
@@ -4,13 +4,21 @@
|
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
-
class
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
| 11 |
array (
|
| 12 |
'Tribe\\' => 6,
|
| 13 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 14 |
'F' =>
|
| 15 |
array (
|
| 16 |
'Firebase\\JWT\\' => 13,
|
|
@@ -22,6 +30,14 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
|
|
| 22 |
array (
|
| 23 |
0 => __DIR__ . '/../..' . '/src/Tribe',
|
| 24 |
),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 25 |
'Firebase\\JWT\\' =>
|
| 26 |
array (
|
| 27 |
0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
|
|
@@ -50,6 +66,114 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
|
|
| 50 |
'Firebase\\JWT\\ExpiredException' => __DIR__ . '/..' . '/firebase/php-jwt/src/ExpiredException.php',
|
| 51 |
'Firebase\\JWT\\JWT' => __DIR__ . '/..' . '/firebase/php-jwt/src/JWT.php',
|
| 52 |
'Firebase\\JWT\\SignatureInvalidException' => __DIR__ . '/..' . '/firebase/php-jwt/src/SignatureInvalidException.php',
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 53 |
'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
|
| 54 |
'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
|
| 55 |
'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
|
|
@@ -57,6 +181,8 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
|
|
| 57 |
'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
|
| 58 |
'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
|
| 59 |
'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
|
|
|
|
|
|
|
| 60 |
'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
|
| 61 |
'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
|
| 62 |
'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
|
|
@@ -70,10 +196,10 @@ class ComposerStaticInit1d34b882376a6776c2d50eb2e89c117c
|
|
| 70 |
public static function getInitializer(ClassLoader $loader)
|
| 71 |
{
|
| 72 |
return \Closure::bind(function () use ($loader) {
|
| 73 |
-
$loader->prefixLengthsPsr4 =
|
| 74 |
-
$loader->prefixDirsPsr4 =
|
| 75 |
-
$loader->prefixesPsr0 =
|
| 76 |
-
$loader->classMap =
|
| 77 |
|
| 78 |
}, null, ClassLoader::class);
|
| 79 |
}
|
| 4 |
|
| 5 |
namespace Composer\Autoload;
|
| 6 |
|
| 7 |
+
class ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea
|
| 8 |
{
|
| 9 |
public static $prefixLengthsPsr4 = array (
|
| 10 |
'T' =>
|
| 11 |
array (
|
| 12 |
'Tribe\\' => 6,
|
| 13 |
),
|
| 14 |
+
'P' =>
|
| 15 |
+
array (
|
| 16 |
+
'Psr\\Log\\' => 8,
|
| 17 |
+
),
|
| 18 |
+
'M' =>
|
| 19 |
+
array (
|
| 20 |
+
'Monolog\\' => 8,
|
| 21 |
+
),
|
| 22 |
'F' =>
|
| 23 |
array (
|
| 24 |
'Firebase\\JWT\\' => 13,
|
| 30 |
array (
|
| 31 |
0 => __DIR__ . '/../..' . '/src/Tribe',
|
| 32 |
),
|
| 33 |
+
'Psr\\Log\\' =>
|
| 34 |
+
array (
|
| 35 |
+
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
|
| 36 |
+
),
|
| 37 |
+
'Monolog\\' =>
|
| 38 |
+
array (
|
| 39 |
+
0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog',
|
| 40 |
+
),
|
| 41 |
'Firebase\\JWT\\' =>
|
| 42 |
array (
|
| 43 |
0 => __DIR__ . '/..' . '/firebase/php-jwt/src',
|
| 66 |
'Firebase\\JWT\\ExpiredException' => __DIR__ . '/..' . '/firebase/php-jwt/src/ExpiredException.php',
|
| 67 |
'Firebase\\JWT\\JWT' => __DIR__ . '/..' . '/firebase/php-jwt/src/JWT.php',
|
| 68 |
'Firebase\\JWT\\SignatureInvalidException' => __DIR__ . '/..' . '/firebase/php-jwt/src/SignatureInvalidException.php',
|
| 69 |
+
'Monolog\\ErrorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ErrorHandler.php',
|
| 70 |
+
'Monolog\\Formatter\\ChromePHPFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php',
|
| 71 |
+
'Monolog\\Formatter\\ElasticaFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php',
|
| 72 |
+
'Monolog\\Formatter\\FlowdockFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php',
|
| 73 |
+
'Monolog\\Formatter\\FluentdFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php',
|
| 74 |
+
'Monolog\\Formatter\\FormatterInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php',
|
| 75 |
+
'Monolog\\Formatter\\GelfMessageFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php',
|
| 76 |
+
'Monolog\\Formatter\\HtmlFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php',
|
| 77 |
+
'Monolog\\Formatter\\JsonFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php',
|
| 78 |
+
'Monolog\\Formatter\\LineFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LineFormatter.php',
|
| 79 |
+
'Monolog\\Formatter\\LogglyFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php',
|
| 80 |
+
'Monolog\\Formatter\\LogstashFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php',
|
| 81 |
+
'Monolog\\Formatter\\MongoDBFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php',
|
| 82 |
+
'Monolog\\Formatter\\NormalizerFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php',
|
| 83 |
+
'Monolog\\Formatter\\ScalarFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php',
|
| 84 |
+
'Monolog\\Formatter\\WildfireFormatter' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php',
|
| 85 |
+
'Monolog\\Handler\\AbstractHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractHandler.php',
|
| 86 |
+
'Monolog\\Handler\\AbstractProcessingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php',
|
| 87 |
+
'Monolog\\Handler\\AbstractSyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php',
|
| 88 |
+
'Monolog\\Handler\\AmqpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/AmqpHandler.php',
|
| 89 |
+
'Monolog\\Handler\\BrowserConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php',
|
| 90 |
+
'Monolog\\Handler\\BufferHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/BufferHandler.php',
|
| 91 |
+
'Monolog\\Handler\\ChromePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php',
|
| 92 |
+
'Monolog\\Handler\\CouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php',
|
| 93 |
+
'Monolog\\Handler\\CubeHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/CubeHandler.php',
|
| 94 |
+
'Monolog\\Handler\\Curl\\Util' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Curl/Util.php',
|
| 95 |
+
'Monolog\\Handler\\DeduplicationHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php',
|
| 96 |
+
'Monolog\\Handler\\DoctrineCouchDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php',
|
| 97 |
+
'Monolog\\Handler\\DynamoDbHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php',
|
| 98 |
+
'Monolog\\Handler\\ElasticSearchHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php',
|
| 99 |
+
'Monolog\\Handler\\ErrorLogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php',
|
| 100 |
+
'Monolog\\Handler\\FilterHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FilterHandler.php',
|
| 101 |
+
'Monolog\\Handler\\FingersCrossedHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php',
|
| 102 |
+
'Monolog\\Handler\\FingersCrossed\\ActivationStrategyInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php',
|
| 103 |
+
'Monolog\\Handler\\FingersCrossed\\ChannelLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php',
|
| 104 |
+
'Monolog\\Handler\\FingersCrossed\\ErrorLevelActivationStrategy' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php',
|
| 105 |
+
'Monolog\\Handler\\FirePHPHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php',
|
| 106 |
+
'Monolog\\Handler\\FleepHookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php',
|
| 107 |
+
'Monolog\\Handler\\FlowdockHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php',
|
| 108 |
+
'Monolog\\Handler\\GelfHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GelfHandler.php',
|
| 109 |
+
'Monolog\\Handler\\GroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/GroupHandler.php',
|
| 110 |
+
'Monolog\\Handler\\HandlerInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerInterface.php',
|
| 111 |
+
'Monolog\\Handler\\HandlerWrapper' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php',
|
| 112 |
+
'Monolog\\Handler\\HipChatHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/HipChatHandler.php',
|
| 113 |
+
'Monolog\\Handler\\IFTTTHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php',
|
| 114 |
+
'Monolog\\Handler\\InsightOpsHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php',
|
| 115 |
+
'Monolog\\Handler\\LogEntriesHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php',
|
| 116 |
+
'Monolog\\Handler\\LogglyHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/LogglyHandler.php',
|
| 117 |
+
'Monolog\\Handler\\MailHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MailHandler.php',
|
| 118 |
+
'Monolog\\Handler\\MandrillHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MandrillHandler.php',
|
| 119 |
+
'Monolog\\Handler\\MissingExtensionException' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php',
|
| 120 |
+
'Monolog\\Handler\\MongoDBHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php',
|
| 121 |
+
'Monolog\\Handler\\NativeMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php',
|
| 122 |
+
'Monolog\\Handler\\NewRelicHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php',
|
| 123 |
+
'Monolog\\Handler\\NullHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/NullHandler.php',
|
| 124 |
+
'Monolog\\Handler\\PHPConsoleHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php',
|
| 125 |
+
'Monolog\\Handler\\PsrHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PsrHandler.php',
|
| 126 |
+
'Monolog\\Handler\\PushoverHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/PushoverHandler.php',
|
| 127 |
+
'Monolog\\Handler\\RavenHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RavenHandler.php',
|
| 128 |
+
'Monolog\\Handler\\RedisHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RedisHandler.php',
|
| 129 |
+
'Monolog\\Handler\\RollbarHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RollbarHandler.php',
|
| 130 |
+
'Monolog\\Handler\\RotatingFileHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php',
|
| 131 |
+
'Monolog\\Handler\\SamplingHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SamplingHandler.php',
|
| 132 |
+
'Monolog\\Handler\\SlackHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackHandler.php',
|
| 133 |
+
'Monolog\\Handler\\SlackWebhookHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php',
|
| 134 |
+
'Monolog\\Handler\\Slack\\SlackRecord' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php',
|
| 135 |
+
'Monolog\\Handler\\SlackbotHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php',
|
| 136 |
+
'Monolog\\Handler\\SocketHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SocketHandler.php',
|
| 137 |
+
'Monolog\\Handler\\StreamHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/StreamHandler.php',
|
| 138 |
+
'Monolog\\Handler\\SwiftMailerHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php',
|
| 139 |
+
'Monolog\\Handler\\SyslogHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogHandler.php',
|
| 140 |
+
'Monolog\\Handler\\SyslogUdpHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php',
|
| 141 |
+
'Monolog\\Handler\\SyslogUdp\\UdpSocket' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php',
|
| 142 |
+
'Monolog\\Handler\\TestHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/TestHandler.php',
|
| 143 |
+
'Monolog\\Handler\\WhatFailureGroupHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php',
|
| 144 |
+
'Monolog\\Handler\\ZendMonitorHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php',
|
| 145 |
+
'Monolog\\Logger' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Logger.php',
|
| 146 |
+
'Monolog\\Processor\\GitProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/GitProcessor.php',
|
| 147 |
+
'Monolog\\Processor\\IntrospectionProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php',
|
| 148 |
+
'Monolog\\Processor\\MemoryPeakUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php',
|
| 149 |
+
'Monolog\\Processor\\MemoryProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php',
|
| 150 |
+
'Monolog\\Processor\\MemoryUsageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php',
|
| 151 |
+
'Monolog\\Processor\\MercurialProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php',
|
| 152 |
+
'Monolog\\Processor\\ProcessIdProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php',
|
| 153 |
+
'Monolog\\Processor\\ProcessorInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php',
|
| 154 |
+
'Monolog\\Processor\\PsrLogMessageProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php',
|
| 155 |
+
'Monolog\\Processor\\TagProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/TagProcessor.php',
|
| 156 |
+
'Monolog\\Processor\\UidProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/UidProcessor.php',
|
| 157 |
+
'Monolog\\Processor\\WebProcessor' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Processor/WebProcessor.php',
|
| 158 |
+
'Monolog\\Registry' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Registry.php',
|
| 159 |
+
'Monolog\\ResettableInterface' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/ResettableInterface.php',
|
| 160 |
+
'Monolog\\SignalHandler' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/SignalHandler.php',
|
| 161 |
+
'Monolog\\Utils' => __DIR__ . '/..' . '/monolog/monolog/src/Monolog/Utils.php',
|
| 162 |
+
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
|
| 163 |
+
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
|
| 164 |
+
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
|
| 165 |
+
'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php',
|
| 166 |
+
'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php',
|
| 167 |
+
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
|
| 168 |
+
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
|
| 169 |
+
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
|
| 170 |
+
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 171 |
+
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
|
| 172 |
+
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
|
| 173 |
+
'Tribe\\Log\\Action_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Action_Logger.php',
|
| 174 |
+
'Tribe\\Log\\Canonical_Formatter' => __DIR__ . '/../..' . '/src/Tribe/Log/Canonical_Formatter.php',
|
| 175 |
+
'Tribe\\Log\\Monolog_Logger' => __DIR__ . '/../..' . '/src/Tribe/Log/Monolog_Logger.php',
|
| 176 |
+
'Tribe\\Log\\Service_Provider' => __DIR__ . '/../..' . '/src/Tribe/Log/Service_Provider.php',
|
| 177 |
'Tribe\\PUE\\Update_Prevention' => __DIR__ . '/../..' . '/src/Tribe/PUE/Update_Prevention.php',
|
| 178 |
'Tribe\\Service_Providers\\PUE' => __DIR__ . '/../..' . '/src/Tribe/Service_Providers/PUE.php',
|
| 179 |
'Tribe\\Traits\\Cache_User' => __DIR__ . '/../..' . '/src/Tribe/Traits/Cache_User.php',
|
| 181 |
'Tribe\\Utils\\Collection_Trait' => __DIR__ . '/../..' . '/src/Tribe/Utils/Collection_Trait.php',
|
| 182 |
'Tribe\\Utils\\Element_Classes' => __DIR__ . '/../..' . '/src/Tribe/Utils/Element_Classes.php',
|
| 183 |
'Tribe\\Utils\\Lazy_Collection' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Collection.php',
|
| 184 |
+
'Tribe\\Utils\\Lazy_Events' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_Events.php',
|
| 185 |
+
'Tribe\\Utils\\Lazy_String' => __DIR__ . '/../..' . '/src/Tribe/Utils/Lazy_String.php',
|
| 186 |
'Tribe\\Utils\\Post_Thumbnail' => __DIR__ . '/../..' . '/src/Tribe/Utils/Post_Thumbnail.php',
|
| 187 |
'tad_DI52_Container' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/Container.php',
|
| 188 |
'tad_DI52_ContainerInterface' => __DIR__ . '/..' . '/lucatume/di52/src/tad/DI52/ContainerInterface.php',
|
| 196 |
public static function getInitializer(ClassLoader $loader)
|
| 197 |
{
|
| 198 |
return \Closure::bind(function () use ($loader) {
|
| 199 |
+
$loader->prefixLengthsPsr4 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixLengthsPsr4;
|
| 200 |
+
$loader->prefixDirsPsr4 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixDirsPsr4;
|
| 201 |
+
$loader->prefixesPsr0 = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$prefixesPsr0;
|
| 202 |
+
$loader->classMap = ComposerStaticInit027cdaf4eefc9bf514c1dc3495f8d3ea::$classMap;
|
| 203 |
|
| 204 |
}, null, ClassLoader::class);
|
| 205 |
}
|
common/vendor/composer/installed.json
CHANGED
|
@@ -35,13 +35,13 @@
|
|
| 35 |
"authors": [
|
| 36 |
{
|
| 37 |
"name": "Neuman Vong",
|
| 38 |
-
"
|
| 39 |
-
"
|
| 40 |
},
|
| 41 |
{
|
| 42 |
"name": "Anant Narayanan",
|
| 43 |
-
"
|
| 44 |
-
"
|
| 45 |
}
|
| 46 |
],
|
| 47 |
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
|
|
@@ -92,6 +92,135 @@
|
|
| 92 |
],
|
| 93 |
"description": "A PHP 5.2 compatible dependency injection container."
|
| 94 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
{
|
| 96 |
"name": "xrstf/composer-php52",
|
| 97 |
"version": "v1.0.20",
|
| 35 |
"authors": [
|
| 36 |
{
|
| 37 |
"name": "Neuman Vong",
|
| 38 |
+
"email": "neuman+pear@twilio.com",
|
| 39 |
+
"role": "Developer"
|
| 40 |
},
|
| 41 |
{
|
| 42 |
"name": "Anant Narayanan",
|
| 43 |
+
"email": "anant@php.net",
|
| 44 |
+
"role": "Developer"
|
| 45 |
}
|
| 46 |
],
|
| 47 |
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
|
| 92 |
],
|
| 93 |
"description": "A PHP 5.2 compatible dependency injection container."
|
| 94 |
},
|
| 95 |
+
{
|
| 96 |
+
"name": "monolog/monolog",
|
| 97 |
+
"version": "1.24.0",
|
| 98 |
+
"version_normalized": "1.24.0.0",
|
| 99 |
+
"source": {
|
| 100 |
+
"type": "git",
|
| 101 |
+
"url": "https://github.com/Seldaek/monolog.git",
|
| 102 |
+
"reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
|
| 103 |
+
},
|
| 104 |
+
"dist": {
|
| 105 |
+
"type": "zip",
|
| 106 |
+
"url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
|
| 107 |
+
"reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
|
| 108 |
+
"shasum": ""
|
| 109 |
+
},
|
| 110 |
+
"require": {
|
| 111 |
+
"php": ">=5.3.0",
|
| 112 |
+
"psr/log": "~1.0"
|
| 113 |
+
},
|
| 114 |
+
"provide": {
|
| 115 |
+
"psr/log-implementation": "1.0.0"
|
| 116 |
+
},
|
| 117 |
+
"require-dev": {
|
| 118 |
+
"aws/aws-sdk-php": "^2.4.9 || ^3.0",
|
| 119 |
+
"doctrine/couchdb": "~1.0@dev",
|
| 120 |
+
"graylog2/gelf-php": "~1.0",
|
| 121 |
+
"jakub-onderka/php-parallel-lint": "0.9",
|
| 122 |
+
"php-amqplib/php-amqplib": "~2.4",
|
| 123 |
+
"php-console/php-console": "^3.1.3",
|
| 124 |
+
"phpunit/phpunit": "~4.5",
|
| 125 |
+
"phpunit/phpunit-mock-objects": "2.3.0",
|
| 126 |
+
"ruflin/elastica": ">=0.90 <3.0",
|
| 127 |
+
"sentry/sentry": "^0.13",
|
| 128 |
+
"swiftmailer/swiftmailer": "^5.3|^6.0"
|
| 129 |
+
},
|
| 130 |
+
"suggest": {
|
| 131 |
+
"aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB",
|
| 132 |
+
"doctrine/couchdb": "Allow sending log messages to a CouchDB server",
|
| 133 |
+
"ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)",
|
| 134 |
+
"ext-mongo": "Allow sending log messages to a MongoDB server",
|
| 135 |
+
"graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server",
|
| 136 |
+
"mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver",
|
| 137 |
+
"php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib",
|
| 138 |
+
"php-console/php-console": "Allow sending log messages to Google Chrome",
|
| 139 |
+
"rollbar/rollbar": "Allow sending log messages to Rollbar",
|
| 140 |
+
"ruflin/elastica": "Allow sending log messages to an Elastic Search server",
|
| 141 |
+
"sentry/sentry": "Allow sending log messages to a Sentry server"
|
| 142 |
+
},
|
| 143 |
+
"time": "2018-11-05T09:00:11+00:00",
|
| 144 |
+
"type": "library",
|
| 145 |
+
"extra": {
|
| 146 |
+
"branch-alias": {
|
| 147 |
+
"dev-master": "2.0.x-dev"
|
| 148 |
+
}
|
| 149 |
+
},
|
| 150 |
+
"installation-source": "dist",
|
| 151 |
+
"autoload": {
|
| 152 |
+
"psr-4": {
|
| 153 |
+
"Monolog\\": "src/Monolog"
|
| 154 |
+
}
|
| 155 |
+
},
|
| 156 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 157 |
+
"license": [
|
| 158 |
+
"MIT"
|
| 159 |
+
],
|
| 160 |
+
"authors": [
|
| 161 |
+
{
|
| 162 |
+
"name": "Jordi Boggiano",
|
| 163 |
+
"email": "j.boggiano@seld.be",
|
| 164 |
+
"homepage": "http://seld.be"
|
| 165 |
+
}
|
| 166 |
+
],
|
| 167 |
+
"description": "Sends your logs to files, sockets, inboxes, databases and various web services",
|
| 168 |
+
"homepage": "http://github.com/Seldaek/monolog",
|
| 169 |
+
"keywords": [
|
| 170 |
+
"log",
|
| 171 |
+
"logging",
|
| 172 |
+
"psr-3"
|
| 173 |
+
]
|
| 174 |
+
},
|
| 175 |
+
{
|
| 176 |
+
"name": "psr/log",
|
| 177 |
+
"version": "1.1.0",
|
| 178 |
+
"version_normalized": "1.1.0.0",
|
| 179 |
+
"source": {
|
| 180 |
+
"type": "git",
|
| 181 |
+
"url": "https://github.com/php-fig/log.git",
|
| 182 |
+
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
|
| 183 |
+
},
|
| 184 |
+
"dist": {
|
| 185 |
+
"type": "zip",
|
| 186 |
+
"url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
| 187 |
+
"reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
|
| 188 |
+
"shasum": ""
|
| 189 |
+
},
|
| 190 |
+
"require": {
|
| 191 |
+
"php": ">=5.3.0"
|
| 192 |
+
},
|
| 193 |
+
"time": "2018-11-20T15:27:04+00:00",
|
| 194 |
+
"type": "library",
|
| 195 |
+
"extra": {
|
| 196 |
+
"branch-alias": {
|
| 197 |
+
"dev-master": "1.0.x-dev"
|
| 198 |
+
}
|
| 199 |
+
},
|
| 200 |
+
"installation-source": "dist",
|
| 201 |
+
"autoload": {
|
| 202 |
+
"psr-4": {
|
| 203 |
+
"Psr\\Log\\": "Psr/Log/"
|
| 204 |
+
}
|
| 205 |
+
},
|
| 206 |
+
"notification-url": "https://packagist.org/downloads/",
|
| 207 |
+
"license": [
|
| 208 |
+
"MIT"
|
| 209 |
+
],
|
| 210 |
+
"authors": [
|
| 211 |
+
{
|
| 212 |
+
"name": "PHP-FIG",
|
| 213 |
+
"homepage": "http://www.php-fig.org/"
|
| 214 |
+
}
|
| 215 |
+
],
|
| 216 |
+
"description": "Common interface for logging libraries",
|
| 217 |
+
"homepage": "https://github.com/php-fig/log",
|
| 218 |
+
"keywords": [
|
| 219 |
+
"log",
|
| 220 |
+
"psr",
|
| 221 |
+
"psr-3"
|
| 222 |
+
]
|
| 223 |
+
},
|
| 224 |
{
|
| 225 |
"name": "xrstf/composer-php52",
|
| 226 |
"version": "v1.0.20",
|
common/vendor/monolog/monolog/src/Monolog/ErrorHandler.php
ADDED
|
@@ -0,0 +1,239 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
use Psr\Log\LoggerInterface;
|
| 15 |
+
use Psr\Log\LogLevel;
|
| 16 |
+
use Monolog\Handler\AbstractHandler;
|
| 17 |
+
use Monolog\Registry;
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Monolog error handler
|
| 21 |
+
*
|
| 22 |
+
* A facility to enable logging of runtime errors, exceptions and fatal errors.
|
| 23 |
+
*
|
| 24 |
+
* Quick setup: <code>ErrorHandler::register($logger);</code>
|
| 25 |
+
*
|
| 26 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 27 |
+
*/
|
| 28 |
+
class ErrorHandler
|
| 29 |
+
{
|
| 30 |
+
private $logger;
|
| 31 |
+
|
| 32 |
+
private $previousExceptionHandler;
|
| 33 |
+
private $uncaughtExceptionLevel;
|
| 34 |
+
|
| 35 |
+
private $previousErrorHandler;
|
| 36 |
+
private $errorLevelMap;
|
| 37 |
+
private $handleOnlyReportedErrors;
|
| 38 |
+
|
| 39 |
+
private $hasFatalErrorHandler;
|
| 40 |
+
private $fatalLevel;
|
| 41 |
+
private $reservedMemory;
|
| 42 |
+
private $lastFatalTrace;
|
| 43 |
+
private static $fatalErrors = array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR);
|
| 44 |
+
|
| 45 |
+
public function __construct(LoggerInterface $logger)
|
| 46 |
+
{
|
| 47 |
+
$this->logger = $logger;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* Registers a new ErrorHandler for a given Logger
|
| 52 |
+
*
|
| 53 |
+
* By default it will handle errors, exceptions and fatal errors
|
| 54 |
+
*
|
| 55 |
+
* @param LoggerInterface $logger
|
| 56 |
+
* @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling
|
| 57 |
+
* @param int|false $exceptionLevel a LogLevel::* constant, or false to disable exception handling
|
| 58 |
+
* @param int|false $fatalLevel a LogLevel::* constant, or false to disable fatal error handling
|
| 59 |
+
* @return ErrorHandler
|
| 60 |
+
*/
|
| 61 |
+
public static function register(LoggerInterface $logger, $errorLevelMap = array(), $exceptionLevel = null, $fatalLevel = null)
|
| 62 |
+
{
|
| 63 |
+
//Forces the autoloader to run for LogLevel. Fixes an autoload issue at compile-time on PHP5.3. See https://github.com/Seldaek/monolog/pull/929
|
| 64 |
+
class_exists('\\Psr\\Log\\LogLevel', true);
|
| 65 |
+
|
| 66 |
+
$handler = new static($logger);
|
| 67 |
+
if ($errorLevelMap !== false) {
|
| 68 |
+
$handler->registerErrorHandler($errorLevelMap);
|
| 69 |
+
}
|
| 70 |
+
if ($exceptionLevel !== false) {
|
| 71 |
+
$handler->registerExceptionHandler($exceptionLevel);
|
| 72 |
+
}
|
| 73 |
+
if ($fatalLevel !== false) {
|
| 74 |
+
$handler->registerFatalHandler($fatalLevel);
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
return $handler;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
public function registerExceptionHandler($level = null, $callPrevious = true)
|
| 81 |
+
{
|
| 82 |
+
$prev = set_exception_handler(array($this, 'handleException'));
|
| 83 |
+
$this->uncaughtExceptionLevel = $level;
|
| 84 |
+
if ($callPrevious && $prev) {
|
| 85 |
+
$this->previousExceptionHandler = $prev;
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
public function registerErrorHandler(array $levelMap = array(), $callPrevious = true, $errorTypes = -1, $handleOnlyReportedErrors = true)
|
| 90 |
+
{
|
| 91 |
+
$prev = set_error_handler(array($this, 'handleError'), $errorTypes);
|
| 92 |
+
$this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap);
|
| 93 |
+
if ($callPrevious) {
|
| 94 |
+
$this->previousErrorHandler = $prev ?: true;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
$this->handleOnlyReportedErrors = $handleOnlyReportedErrors;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
public function registerFatalHandler($level = null, $reservedMemorySize = 20)
|
| 101 |
+
{
|
| 102 |
+
register_shutdown_function(array($this, 'handleFatalError'));
|
| 103 |
+
|
| 104 |
+
$this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize);
|
| 105 |
+
$this->fatalLevel = $level;
|
| 106 |
+
$this->hasFatalErrorHandler = true;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
protected function defaultErrorLevelMap()
|
| 110 |
+
{
|
| 111 |
+
return array(
|
| 112 |
+
E_ERROR => LogLevel::CRITICAL,
|
| 113 |
+
E_WARNING => LogLevel::WARNING,
|
| 114 |
+
E_PARSE => LogLevel::ALERT,
|
| 115 |
+
E_NOTICE => LogLevel::NOTICE,
|
| 116 |
+
E_CORE_ERROR => LogLevel::CRITICAL,
|
| 117 |
+
E_CORE_WARNING => LogLevel::WARNING,
|
| 118 |
+
E_COMPILE_ERROR => LogLevel::ALERT,
|
| 119 |
+
E_COMPILE_WARNING => LogLevel::WARNING,
|
| 120 |
+
E_USER_ERROR => LogLevel::ERROR,
|
| 121 |
+
E_USER_WARNING => LogLevel::WARNING,
|
| 122 |
+
E_USER_NOTICE => LogLevel::NOTICE,
|
| 123 |
+
E_STRICT => LogLevel::NOTICE,
|
| 124 |
+
E_RECOVERABLE_ERROR => LogLevel::ERROR,
|
| 125 |
+
E_DEPRECATED => LogLevel::NOTICE,
|
| 126 |
+
E_USER_DEPRECATED => LogLevel::NOTICE,
|
| 127 |
+
);
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
/**
|
| 131 |
+
* @private
|
| 132 |
+
*/
|
| 133 |
+
public function handleException($e)
|
| 134 |
+
{
|
| 135 |
+
$this->logger->log(
|
| 136 |
+
$this->uncaughtExceptionLevel === null ? LogLevel::ERROR : $this->uncaughtExceptionLevel,
|
| 137 |
+
sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()),
|
| 138 |
+
array('exception' => $e)
|
| 139 |
+
);
|
| 140 |
+
|
| 141 |
+
if ($this->previousExceptionHandler) {
|
| 142 |
+
call_user_func($this->previousExceptionHandler, $e);
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
exit(255);
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
/**
|
| 149 |
+
* @private
|
| 150 |
+
*/
|
| 151 |
+
public function handleError($code, $message, $file = '', $line = 0, $context = array())
|
| 152 |
+
{
|
| 153 |
+
if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) {
|
| 154 |
+
return;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
// fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries
|
| 158 |
+
if (!$this->hasFatalErrorHandler || !in_array($code, self::$fatalErrors, true)) {
|
| 159 |
+
$level = isset($this->errorLevelMap[$code]) ? $this->errorLevelMap[$code] : LogLevel::CRITICAL;
|
| 160 |
+
$this->logger->log($level, self::codeToString($code).': '.$message, array('code' => $code, 'message' => $message, 'file' => $file, 'line' => $line));
|
| 161 |
+
} else {
|
| 162 |
+
// http://php.net/manual/en/function.debug-backtrace.php
|
| 163 |
+
// As of 5.3.6, DEBUG_BACKTRACE_IGNORE_ARGS option was added.
|
| 164 |
+
// Any version less than 5.3.6 must use the DEBUG_BACKTRACE_IGNORE_ARGS constant value '2'.
|
| 165 |
+
$trace = debug_backtrace((PHP_VERSION_ID < 50306) ? 2 : DEBUG_BACKTRACE_IGNORE_ARGS);
|
| 166 |
+
array_shift($trace); // Exclude handleError from trace
|
| 167 |
+
$this->lastFatalTrace = $trace;
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
if ($this->previousErrorHandler === true) {
|
| 171 |
+
return false;
|
| 172 |
+
} elseif ($this->previousErrorHandler) {
|
| 173 |
+
return call_user_func($this->previousErrorHandler, $code, $message, $file, $line, $context);
|
| 174 |
+
}
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
/**
|
| 178 |
+
* @private
|
| 179 |
+
*/
|
| 180 |
+
public function handleFatalError()
|
| 181 |
+
{
|
| 182 |
+
$this->reservedMemory = null;
|
| 183 |
+
|
| 184 |
+
$lastError = error_get_last();
|
| 185 |
+
if ($lastError && in_array($lastError['type'], self::$fatalErrors, true)) {
|
| 186 |
+
$this->logger->log(
|
| 187 |
+
$this->fatalLevel === null ? LogLevel::ALERT : $this->fatalLevel,
|
| 188 |
+
'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'],
|
| 189 |
+
array('code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $this->lastFatalTrace)
|
| 190 |
+
);
|
| 191 |
+
|
| 192 |
+
if ($this->logger instanceof Logger) {
|
| 193 |
+
foreach ($this->logger->getHandlers() as $handler) {
|
| 194 |
+
if ($handler instanceof AbstractHandler) {
|
| 195 |
+
$handler->close();
|
| 196 |
+
}
|
| 197 |
+
}
|
| 198 |
+
}
|
| 199 |
+
}
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
private static function codeToString($code)
|
| 203 |
+
{
|
| 204 |
+
switch ($code) {
|
| 205 |
+
case E_ERROR:
|
| 206 |
+
return 'E_ERROR';
|
| 207 |
+
case E_WARNING:
|
| 208 |
+
return 'E_WARNING';
|
| 209 |
+
case E_PARSE:
|
| 210 |
+
return 'E_PARSE';
|
| 211 |
+
case E_NOTICE:
|
| 212 |
+
return 'E_NOTICE';
|
| 213 |
+
case E_CORE_ERROR:
|
| 214 |
+
return 'E_CORE_ERROR';
|
| 215 |
+
case E_CORE_WARNING:
|
| 216 |
+
return 'E_CORE_WARNING';
|
| 217 |
+
case E_COMPILE_ERROR:
|
| 218 |
+
return 'E_COMPILE_ERROR';
|
| 219 |
+
case E_COMPILE_WARNING:
|
| 220 |
+
return 'E_COMPILE_WARNING';
|
| 221 |
+
case E_USER_ERROR:
|
| 222 |
+
return 'E_USER_ERROR';
|
| 223 |
+
case E_USER_WARNING:
|
| 224 |
+
return 'E_USER_WARNING';
|
| 225 |
+
case E_USER_NOTICE:
|
| 226 |
+
return 'E_USER_NOTICE';
|
| 227 |
+
case E_STRICT:
|
| 228 |
+
return 'E_STRICT';
|
| 229 |
+
case E_RECOVERABLE_ERROR:
|
| 230 |
+
return 'E_RECOVERABLE_ERROR';
|
| 231 |
+
case E_DEPRECATED:
|
| 232 |
+
return 'E_DEPRECATED';
|
| 233 |
+
case E_USER_DEPRECATED:
|
| 234 |
+
return 'E_USER_DEPRECATED';
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
return 'Unknown PHP error';
|
| 238 |
+
}
|
| 239 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php
ADDED
|
@@ -0,0 +1,78 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Formats a log message according to the ChromePHP array format
|
| 18 |
+
*
|
| 19 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 20 |
+
*/
|
| 21 |
+
class ChromePHPFormatter implements FormatterInterface
|
| 22 |
+
{
|
| 23 |
+
/**
|
| 24 |
+
* Translates Monolog log levels to Wildfire levels.
|
| 25 |
+
*/
|
| 26 |
+
private $logLevels = array(
|
| 27 |
+
Logger::DEBUG => 'log',
|
| 28 |
+
Logger::INFO => 'info',
|
| 29 |
+
Logger::NOTICE => 'info',
|
| 30 |
+
Logger::WARNING => 'warn',
|
| 31 |
+
Logger::ERROR => 'error',
|
| 32 |
+
Logger::CRITICAL => 'error',
|
| 33 |
+
Logger::ALERT => 'error',
|
| 34 |
+
Logger::EMERGENCY => 'error',
|
| 35 |
+
);
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* {@inheritdoc}
|
| 39 |
+
*/
|
| 40 |
+
public function format(array $record)
|
| 41 |
+
{
|
| 42 |
+
// Retrieve the line and file if set and remove them from the formatted extra
|
| 43 |
+
$backtrace = 'unknown';
|
| 44 |
+
if (isset($record['extra']['file'], $record['extra']['line'])) {
|
| 45 |
+
$backtrace = $record['extra']['file'].' : '.$record['extra']['line'];
|
| 46 |
+
unset($record['extra']['file'], $record['extra']['line']);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
$message = array('message' => $record['message']);
|
| 50 |
+
if ($record['context']) {
|
| 51 |
+
$message['context'] = $record['context'];
|
| 52 |
+
}
|
| 53 |
+
if ($record['extra']) {
|
| 54 |
+
$message['extra'] = $record['extra'];
|
| 55 |
+
}
|
| 56 |
+
if (count($message) === 1) {
|
| 57 |
+
$message = reset($message);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
return array(
|
| 61 |
+
$record['channel'],
|
| 62 |
+
$message,
|
| 63 |
+
$backtrace,
|
| 64 |
+
$this->logLevels[$record['level']],
|
| 65 |
+
);
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
public function formatBatch(array $records)
|
| 69 |
+
{
|
| 70 |
+
$formatted = array();
|
| 71 |
+
|
| 72 |
+
foreach ($records as $record) {
|
| 73 |
+
$formatted[] = $this->format($record);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
return $formatted;
|
| 77 |
+
}
|
| 78 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Elastica\Document;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Format a log message into an Elastica Document
|
| 18 |
+
*
|
| 19 |
+
* @author Jelle Vink <jelle.vink@gmail.com>
|
| 20 |
+
*/
|
| 21 |
+
class ElasticaFormatter extends NormalizerFormatter
|
| 22 |
+
{
|
| 23 |
+
/**
|
| 24 |
+
* @var string Elastic search index name
|
| 25 |
+
*/
|
| 26 |
+
protected $index;
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* @var string Elastic search document type
|
| 30 |
+
*/
|
| 31 |
+
protected $type;
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @param string $index Elastic Search index name
|
| 35 |
+
* @param string $type Elastic Search document type
|
| 36 |
+
*/
|
| 37 |
+
public function __construct($index, $type)
|
| 38 |
+
{
|
| 39 |
+
// elasticsearch requires a ISO 8601 format date with optional millisecond precision.
|
| 40 |
+
parent::__construct('Y-m-d\TH:i:s.uP');
|
| 41 |
+
|
| 42 |
+
$this->index = $index;
|
| 43 |
+
$this->type = $type;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* {@inheritdoc}
|
| 48 |
+
*/
|
| 49 |
+
public function format(array $record)
|
| 50 |
+
{
|
| 51 |
+
$record = parent::format($record);
|
| 52 |
+
|
| 53 |
+
return $this->getDocument($record);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* Getter index
|
| 58 |
+
* @return string
|
| 59 |
+
*/
|
| 60 |
+
public function getIndex()
|
| 61 |
+
{
|
| 62 |
+
return $this->index;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* Getter type
|
| 67 |
+
* @return string
|
| 68 |
+
*/
|
| 69 |
+
public function getType()
|
| 70 |
+
{
|
| 71 |
+
return $this->type;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* Convert a log message into an Elastica Document
|
| 76 |
+
*
|
| 77 |
+
* @param array $record Log message
|
| 78 |
+
* @return Document
|
| 79 |
+
*/
|
| 80 |
+
protected function getDocument($record)
|
| 81 |
+
{
|
| 82 |
+
$document = new Document();
|
| 83 |
+
$document->setData($record);
|
| 84 |
+
$document->setType($this->type);
|
| 85 |
+
$document->setIndex($this->index);
|
| 86 |
+
|
| 87 |
+
return $document;
|
| 88 |
+
}
|
| 89 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* formats the record to be used in the FlowdockHandler
|
| 16 |
+
*
|
| 17 |
+
* @author Dominik Liebler <liebler.dominik@gmail.com>
|
| 18 |
+
*/
|
| 19 |
+
class FlowdockFormatter implements FormatterInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @var string
|
| 23 |
+
*/
|
| 24 |
+
private $source;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @var string
|
| 28 |
+
*/
|
| 29 |
+
private $sourceEmail;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* @param string $source
|
| 33 |
+
* @param string $sourceEmail
|
| 34 |
+
*/
|
| 35 |
+
public function __construct($source, $sourceEmail)
|
| 36 |
+
{
|
| 37 |
+
$this->source = $source;
|
| 38 |
+
$this->sourceEmail = $sourceEmail;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* {@inheritdoc}
|
| 43 |
+
*/
|
| 44 |
+
public function format(array $record)
|
| 45 |
+
{
|
| 46 |
+
$tags = array(
|
| 47 |
+
'#logs',
|
| 48 |
+
'#' . strtolower($record['level_name']),
|
| 49 |
+
'#' . $record['channel'],
|
| 50 |
+
);
|
| 51 |
+
|
| 52 |
+
foreach ($record['extra'] as $value) {
|
| 53 |
+
$tags[] = '#' . $value;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
$subject = sprintf(
|
| 57 |
+
'in %s: %s - %s',
|
| 58 |
+
$this->source,
|
| 59 |
+
$record['level_name'],
|
| 60 |
+
$this->getShortMessage($record['message'])
|
| 61 |
+
);
|
| 62 |
+
|
| 63 |
+
$record['flowdock'] = array(
|
| 64 |
+
'source' => $this->source,
|
| 65 |
+
'from_address' => $this->sourceEmail,
|
| 66 |
+
'subject' => $subject,
|
| 67 |
+
'content' => $record['message'],
|
| 68 |
+
'tags' => $tags,
|
| 69 |
+
'project' => $this->source,
|
| 70 |
+
);
|
| 71 |
+
|
| 72 |
+
return $record;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* {@inheritdoc}
|
| 77 |
+
*/
|
| 78 |
+
public function formatBatch(array $records)
|
| 79 |
+
{
|
| 80 |
+
$formatted = array();
|
| 81 |
+
|
| 82 |
+
foreach ($records as $record) {
|
| 83 |
+
$formatted[] = $this->format($record);
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
return $formatted;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* @param string $message
|
| 91 |
+
*
|
| 92 |
+
* @return string
|
| 93 |
+
*/
|
| 94 |
+
public function getShortMessage($message)
|
| 95 |
+
{
|
| 96 |
+
static $hasMbString;
|
| 97 |
+
|
| 98 |
+
if (null === $hasMbString) {
|
| 99 |
+
$hasMbString = function_exists('mb_strlen');
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
$maxLength = 45;
|
| 103 |
+
|
| 104 |
+
if ($hasMbString) {
|
| 105 |
+
if (mb_strlen($message, 'UTF-8') > $maxLength) {
|
| 106 |
+
$message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...';
|
| 107 |
+
}
|
| 108 |
+
} else {
|
| 109 |
+
if (strlen($message) > $maxLength) {
|
| 110 |
+
$message = substr($message, 0, $maxLength - 4) . ' ...';
|
| 111 |
+
}
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
return $message;
|
| 115 |
+
}
|
| 116 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Class FluentdFormatter
|
| 16 |
+
*
|
| 17 |
+
* Serializes a log message to Fluentd unix socket protocol
|
| 18 |
+
*
|
| 19 |
+
* Fluentd config:
|
| 20 |
+
*
|
| 21 |
+
* <source>
|
| 22 |
+
* type unix
|
| 23 |
+
* path /var/run/td-agent/td-agent.sock
|
| 24 |
+
* </source>
|
| 25 |
+
*
|
| 26 |
+
* Monolog setup:
|
| 27 |
+
*
|
| 28 |
+
* $logger = new Monolog\Logger('fluent.tag');
|
| 29 |
+
* $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock');
|
| 30 |
+
* $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter());
|
| 31 |
+
* $logger->pushHandler($fluentHandler);
|
| 32 |
+
*
|
| 33 |
+
* @author Andrius Putna <fordnox@gmail.com>
|
| 34 |
+
*/
|
| 35 |
+
class FluentdFormatter implements FormatterInterface
|
| 36 |
+
{
|
| 37 |
+
/**
|
| 38 |
+
* @var bool $levelTag should message level be a part of the fluentd tag
|
| 39 |
+
*/
|
| 40 |
+
protected $levelTag = false;
|
| 41 |
+
|
| 42 |
+
public function __construct($levelTag = false)
|
| 43 |
+
{
|
| 44 |
+
if (!function_exists('json_encode')) {
|
| 45 |
+
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter');
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
$this->levelTag = (bool) $levelTag;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function isUsingLevelsInTag()
|
| 52 |
+
{
|
| 53 |
+
return $this->levelTag;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
public function format(array $record)
|
| 57 |
+
{
|
| 58 |
+
$tag = $record['channel'];
|
| 59 |
+
if ($this->levelTag) {
|
| 60 |
+
$tag .= '.' . strtolower($record['level_name']);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
$message = array(
|
| 64 |
+
'message' => $record['message'],
|
| 65 |
+
'context' => $record['context'],
|
| 66 |
+
'extra' => $record['extra'],
|
| 67 |
+
);
|
| 68 |
+
|
| 69 |
+
if (!$this->levelTag) {
|
| 70 |
+
$message['level'] = $record['level'];
|
| 71 |
+
$message['level_name'] = $record['level_name'];
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
return json_encode(array($tag, $record['datetime']->getTimestamp(), $message));
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
public function formatBatch(array $records)
|
| 78 |
+
{
|
| 79 |
+
$message = '';
|
| 80 |
+
foreach ($records as $record) {
|
| 81 |
+
$message .= $this->format($record);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
return $message;
|
| 85 |
+
}
|
| 86 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Interface for formatters
|
| 16 |
+
*
|
| 17 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 18 |
+
*/
|
| 19 |
+
interface FormatterInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* Formats a log record.
|
| 23 |
+
*
|
| 24 |
+
* @param array $record A record to format
|
| 25 |
+
* @return mixed The formatted record
|
| 26 |
+
*/
|
| 27 |
+
public function format(array $record);
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* Formats a set of log records.
|
| 31 |
+
*
|
| 32 |
+
* @param array $records A set of records to format
|
| 33 |
+
* @return mixed The formatted set of records
|
| 34 |
+
*/
|
| 35 |
+
public function formatBatch(array $records);
|
| 36 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Gelf\Message;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Serializes a log message to GELF
|
| 19 |
+
* @see http://www.graylog2.org/about/gelf
|
| 20 |
+
*
|
| 21 |
+
* @author Matt Lehner <mlehner@gmail.com>
|
| 22 |
+
*/
|
| 23 |
+
class GelfMessageFormatter extends NormalizerFormatter
|
| 24 |
+
{
|
| 25 |
+
const DEFAULT_MAX_LENGTH = 32766;
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* @var string the name of the system for the Gelf log message
|
| 29 |
+
*/
|
| 30 |
+
protected $systemName;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @var string a prefix for 'extra' fields from the Monolog record (optional)
|
| 34 |
+
*/
|
| 35 |
+
protected $extraPrefix;
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* @var string a prefix for 'context' fields from the Monolog record (optional)
|
| 39 |
+
*/
|
| 40 |
+
protected $contextPrefix;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* @var int max length per field
|
| 44 |
+
*/
|
| 45 |
+
protected $maxLength;
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Translates Monolog log levels to Graylog2 log priorities.
|
| 49 |
+
*/
|
| 50 |
+
private $logLevels = array(
|
| 51 |
+
Logger::DEBUG => 7,
|
| 52 |
+
Logger::INFO => 6,
|
| 53 |
+
Logger::NOTICE => 5,
|
| 54 |
+
Logger::WARNING => 4,
|
| 55 |
+
Logger::ERROR => 3,
|
| 56 |
+
Logger::CRITICAL => 2,
|
| 57 |
+
Logger::ALERT => 1,
|
| 58 |
+
Logger::EMERGENCY => 0,
|
| 59 |
+
);
|
| 60 |
+
|
| 61 |
+
public function __construct($systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $maxLength = null)
|
| 62 |
+
{
|
| 63 |
+
parent::__construct('U.u');
|
| 64 |
+
|
| 65 |
+
$this->systemName = $systemName ?: gethostname();
|
| 66 |
+
|
| 67 |
+
$this->extraPrefix = $extraPrefix;
|
| 68 |
+
$this->contextPrefix = $contextPrefix;
|
| 69 |
+
$this->maxLength = is_null($maxLength) ? self::DEFAULT_MAX_LENGTH : $maxLength;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* {@inheritdoc}
|
| 74 |
+
*/
|
| 75 |
+
public function format(array $record)
|
| 76 |
+
{
|
| 77 |
+
$record = parent::format($record);
|
| 78 |
+
|
| 79 |
+
if (!isset($record['datetime'], $record['message'], $record['level'])) {
|
| 80 |
+
throw new \InvalidArgumentException('The record should at least contain datetime, message and level keys, '.var_export($record, true).' given');
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
$message = new Message();
|
| 84 |
+
$message
|
| 85 |
+
->setTimestamp($record['datetime'])
|
| 86 |
+
->setShortMessage((string) $record['message'])
|
| 87 |
+
->setHost($this->systemName)
|
| 88 |
+
->setLevel($this->logLevels[$record['level']]);
|
| 89 |
+
|
| 90 |
+
// message length + system name length + 200 for padding / metadata
|
| 91 |
+
$len = 200 + strlen((string) $record['message']) + strlen($this->systemName);
|
| 92 |
+
|
| 93 |
+
if ($len > $this->maxLength) {
|
| 94 |
+
$message->setShortMessage(substr($record['message'], 0, $this->maxLength));
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
if (isset($record['channel'])) {
|
| 98 |
+
$message->setFacility($record['channel']);
|
| 99 |
+
}
|
| 100 |
+
if (isset($record['extra']['line'])) {
|
| 101 |
+
$message->setLine($record['extra']['line']);
|
| 102 |
+
unset($record['extra']['line']);
|
| 103 |
+
}
|
| 104 |
+
if (isset($record['extra']['file'])) {
|
| 105 |
+
$message->setFile($record['extra']['file']);
|
| 106 |
+
unset($record['extra']['file']);
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
foreach ($record['extra'] as $key => $val) {
|
| 110 |
+
$val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
|
| 111 |
+
$len = strlen($this->extraPrefix . $key . $val);
|
| 112 |
+
if ($len > $this->maxLength) {
|
| 113 |
+
$message->setAdditional($this->extraPrefix . $key, substr($val, 0, $this->maxLength));
|
| 114 |
+
break;
|
| 115 |
+
}
|
| 116 |
+
$message->setAdditional($this->extraPrefix . $key, $val);
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
foreach ($record['context'] as $key => $val) {
|
| 120 |
+
$val = is_scalar($val) || null === $val ? $val : $this->toJson($val);
|
| 121 |
+
$len = strlen($this->contextPrefix . $key . $val);
|
| 122 |
+
if ($len > $this->maxLength) {
|
| 123 |
+
$message->setAdditional($this->contextPrefix . $key, substr($val, 0, $this->maxLength));
|
| 124 |
+
break;
|
| 125 |
+
}
|
| 126 |
+
$message->setAdditional($this->contextPrefix . $key, $val);
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
if (null === $message->getFile() && isset($record['context']['exception']['file'])) {
|
| 130 |
+
if (preg_match("/^(.+):([0-9]+)$/", $record['context']['exception']['file'], $matches)) {
|
| 131 |
+
$message->setFile($matches[1]);
|
| 132 |
+
$message->setLine($matches[2]);
|
| 133 |
+
}
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
return $message;
|
| 137 |
+
}
|
| 138 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php
ADDED
|
@@ -0,0 +1,141 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* This file is part of the Monolog package.
|
| 4 |
+
*
|
| 5 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 6 |
+
*
|
| 7 |
+
* For the full copyright and license information, please view the LICENSE
|
| 8 |
+
* file that was distributed with this source code.
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
namespace Monolog\Formatter;
|
| 12 |
+
|
| 13 |
+
use Monolog\Logger;
|
| 14 |
+
|
| 15 |
+
/**
|
| 16 |
+
* Formats incoming records into an HTML table
|
| 17 |
+
*
|
| 18 |
+
* This is especially useful for html email logging
|
| 19 |
+
*
|
| 20 |
+
* @author Tiago Brito <tlfbrito@gmail.com>
|
| 21 |
+
*/
|
| 22 |
+
class HtmlFormatter extends NormalizerFormatter
|
| 23 |
+
{
|
| 24 |
+
/**
|
| 25 |
+
* Translates Monolog log levels to html color priorities.
|
| 26 |
+
*/
|
| 27 |
+
protected $logLevels = array(
|
| 28 |
+
Logger::DEBUG => '#cccccc',
|
| 29 |
+
Logger::INFO => '#468847',
|
| 30 |
+
Logger::NOTICE => '#3a87ad',
|
| 31 |
+
Logger::WARNING => '#c09853',
|
| 32 |
+
Logger::ERROR => '#f0ad4e',
|
| 33 |
+
Logger::CRITICAL => '#FF7708',
|
| 34 |
+
Logger::ALERT => '#C12A19',
|
| 35 |
+
Logger::EMERGENCY => '#000000',
|
| 36 |
+
);
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param string $dateFormat The format of the timestamp: one supported by DateTime::format
|
| 40 |
+
*/
|
| 41 |
+
public function __construct($dateFormat = null)
|
| 42 |
+
{
|
| 43 |
+
parent::__construct($dateFormat);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* Creates an HTML table row
|
| 48 |
+
*
|
| 49 |
+
* @param string $th Row header content
|
| 50 |
+
* @param string $td Row standard cell content
|
| 51 |
+
* @param bool $escapeTd false if td content must not be html escaped
|
| 52 |
+
* @return string
|
| 53 |
+
*/
|
| 54 |
+
protected function addRow($th, $td = ' ', $escapeTd = true)
|
| 55 |
+
{
|
| 56 |
+
$th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8');
|
| 57 |
+
if ($escapeTd) {
|
| 58 |
+
$td = '<pre>'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'</pre>';
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
return "<tr style=\"padding: 4px;text-align: left;\">\n<th style=\"vertical-align: top;background: #ccc;color: #000\" width=\"100\">$th:</th>\n<td style=\"padding: 4px;text-align: left;vertical-align: top;background: #eee;color: #000\">".$td."</td>\n</tr>";
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
/**
|
| 65 |
+
* Create a HTML h1 tag
|
| 66 |
+
*
|
| 67 |
+
* @param string $title Text to be in the h1
|
| 68 |
+
* @param int $level Error level
|
| 69 |
+
* @return string
|
| 70 |
+
*/
|
| 71 |
+
protected function addTitle($title, $level)
|
| 72 |
+
{
|
| 73 |
+
$title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8');
|
| 74 |
+
|
| 75 |
+
return '<h1 style="background: '.$this->logLevels[$level].';color: #ffffff;padding: 5px;" class="monolog-output">'.$title.'</h1>';
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* Formats a log record.
|
| 80 |
+
*
|
| 81 |
+
* @param array $record A record to format
|
| 82 |
+
* @return mixed The formatted record
|
| 83 |
+
*/
|
| 84 |
+
public function format(array $record)
|
| 85 |
+
{
|
| 86 |
+
$output = $this->addTitle($record['level_name'], $record['level']);
|
| 87 |
+
$output .= '<table cellspacing="1" width="100%" class="monolog-output">';
|
| 88 |
+
|
| 89 |
+
$output .= $this->addRow('Message', (string) $record['message']);
|
| 90 |
+
$output .= $this->addRow('Time', $record['datetime']->format($this->dateFormat));
|
| 91 |
+
$output .= $this->addRow('Channel', $record['channel']);
|
| 92 |
+
if ($record['context']) {
|
| 93 |
+
$embeddedTable = '<table cellspacing="1" width="100%">';
|
| 94 |
+
foreach ($record['context'] as $key => $value) {
|
| 95 |
+
$embeddedTable .= $this->addRow($key, $this->convertToString($value));
|
| 96 |
+
}
|
| 97 |
+
$embeddedTable .= '</table>';
|
| 98 |
+
$output .= $this->addRow('Context', $embeddedTable, false);
|
| 99 |
+
}
|
| 100 |
+
if ($record['extra']) {
|
| 101 |
+
$embeddedTable = '<table cellspacing="1" width="100%">';
|
| 102 |
+
foreach ($record['extra'] as $key => $value) {
|
| 103 |
+
$embeddedTable .= $this->addRow($key, $this->convertToString($value));
|
| 104 |
+
}
|
| 105 |
+
$embeddedTable .= '</table>';
|
| 106 |
+
$output .= $this->addRow('Extra', $embeddedTable, false);
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
return $output.'</table>';
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
/**
|
| 113 |
+
* Formats a set of log records.
|
| 114 |
+
*
|
| 115 |
+
* @param array $records A set of records to format
|
| 116 |
+
* @return mixed The formatted set of records
|
| 117 |
+
*/
|
| 118 |
+
public function formatBatch(array $records)
|
| 119 |
+
{
|
| 120 |
+
$message = '';
|
| 121 |
+
foreach ($records as $record) {
|
| 122 |
+
$message .= $this->format($record);
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
return $message;
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
protected function convertToString($data)
|
| 129 |
+
{
|
| 130 |
+
if (null === $data || is_scalar($data)) {
|
| 131 |
+
return (string) $data;
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
$data = $this->normalize($data);
|
| 135 |
+
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
| 136 |
+
return json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
return str_replace('\\/', '/', json_encode($data));
|
| 140 |
+
}
|
| 141 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php
ADDED
|
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Exception;
|
| 15 |
+
use Monolog\Utils;
|
| 16 |
+
use Throwable;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Encodes whatever record data is passed to it as json
|
| 20 |
+
*
|
| 21 |
+
* This can be useful to log to databases or remote APIs
|
| 22 |
+
*
|
| 23 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 24 |
+
*/
|
| 25 |
+
class JsonFormatter extends NormalizerFormatter
|
| 26 |
+
{
|
| 27 |
+
const BATCH_MODE_JSON = 1;
|
| 28 |
+
const BATCH_MODE_NEWLINES = 2;
|
| 29 |
+
|
| 30 |
+
protected $batchMode;
|
| 31 |
+
protected $appendNewline;
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @var bool
|
| 35 |
+
*/
|
| 36 |
+
protected $includeStacktraces = false;
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param int $batchMode
|
| 40 |
+
* @param bool $appendNewline
|
| 41 |
+
*/
|
| 42 |
+
public function __construct($batchMode = self::BATCH_MODE_JSON, $appendNewline = true)
|
| 43 |
+
{
|
| 44 |
+
$this->batchMode = $batchMode;
|
| 45 |
+
$this->appendNewline = $appendNewline;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* The batch mode option configures the formatting style for
|
| 50 |
+
* multiple records. By default, multiple records will be
|
| 51 |
+
* formatted as a JSON-encoded array. However, for
|
| 52 |
+
* compatibility with some API endpoints, alternative styles
|
| 53 |
+
* are available.
|
| 54 |
+
*
|
| 55 |
+
* @return int
|
| 56 |
+
*/
|
| 57 |
+
public function getBatchMode()
|
| 58 |
+
{
|
| 59 |
+
return $this->batchMode;
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* True if newlines are appended to every formatted record
|
| 64 |
+
*
|
| 65 |
+
* @return bool
|
| 66 |
+
*/
|
| 67 |
+
public function isAppendingNewlines()
|
| 68 |
+
{
|
| 69 |
+
return $this->appendNewline;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* {@inheritdoc}
|
| 74 |
+
*/
|
| 75 |
+
public function format(array $record)
|
| 76 |
+
{
|
| 77 |
+
return $this->toJson($this->normalize($record), true) . ($this->appendNewline ? "\n" : '');
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
/**
|
| 81 |
+
* {@inheritdoc}
|
| 82 |
+
*/
|
| 83 |
+
public function formatBatch(array $records)
|
| 84 |
+
{
|
| 85 |
+
switch ($this->batchMode) {
|
| 86 |
+
case static::BATCH_MODE_NEWLINES:
|
| 87 |
+
return $this->formatBatchNewlines($records);
|
| 88 |
+
|
| 89 |
+
case static::BATCH_MODE_JSON:
|
| 90 |
+
default:
|
| 91 |
+
return $this->formatBatchJson($records);
|
| 92 |
+
}
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
/**
|
| 96 |
+
* @param bool $include
|
| 97 |
+
*/
|
| 98 |
+
public function includeStacktraces($include = true)
|
| 99 |
+
{
|
| 100 |
+
$this->includeStacktraces = $include;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
/**
|
| 104 |
+
* Return a JSON-encoded array of records.
|
| 105 |
+
*
|
| 106 |
+
* @param array $records
|
| 107 |
+
* @return string
|
| 108 |
+
*/
|
| 109 |
+
protected function formatBatchJson(array $records)
|
| 110 |
+
{
|
| 111 |
+
return $this->toJson($this->normalize($records), true);
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
/**
|
| 115 |
+
* Use new lines to separate records instead of a
|
| 116 |
+
* JSON-encoded array.
|
| 117 |
+
*
|
| 118 |
+
* @param array $records
|
| 119 |
+
* @return string
|
| 120 |
+
*/
|
| 121 |
+
protected function formatBatchNewlines(array $records)
|
| 122 |
+
{
|
| 123 |
+
$instance = $this;
|
| 124 |
+
|
| 125 |
+
$oldNewline = $this->appendNewline;
|
| 126 |
+
$this->appendNewline = false;
|
| 127 |
+
array_walk($records, function (&$value, $key) use ($instance) {
|
| 128 |
+
$value = $instance->format($value);
|
| 129 |
+
});
|
| 130 |
+
$this->appendNewline = $oldNewline;
|
| 131 |
+
|
| 132 |
+
return implode("\n", $records);
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/**
|
| 136 |
+
* Normalizes given $data.
|
| 137 |
+
*
|
| 138 |
+
* @param mixed $data
|
| 139 |
+
*
|
| 140 |
+
* @return mixed
|
| 141 |
+
*/
|
| 142 |
+
protected function normalize($data, $depth = 0)
|
| 143 |
+
{
|
| 144 |
+
if ($depth > 9) {
|
| 145 |
+
return 'Over 9 levels deep, aborting normalization';
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
if (is_array($data) || $data instanceof \Traversable) {
|
| 149 |
+
$normalized = array();
|
| 150 |
+
|
| 151 |
+
$count = 1;
|
| 152 |
+
foreach ($data as $key => $value) {
|
| 153 |
+
if ($count++ > 1000) {
|
| 154 |
+
$normalized['...'] = 'Over 1000 items ('.count($data).' total), aborting normalization';
|
| 155 |
+
break;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
$normalized[$key] = $this->normalize($value, $depth+1);
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
return $normalized;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
if ($data instanceof Exception || $data instanceof Throwable) {
|
| 165 |
+
return $this->normalizeException($data);
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
return $data;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
/**
|
| 172 |
+
* Normalizes given exception with or without its own stack trace based on
|
| 173 |
+
* `includeStacktraces` property.
|
| 174 |
+
*
|
| 175 |
+
* @param Exception|Throwable $e
|
| 176 |
+
*
|
| 177 |
+
* @return array
|
| 178 |
+
*/
|
| 179 |
+
protected function normalizeException($e)
|
| 180 |
+
{
|
| 181 |
+
// TODO 2.0 only check for Throwable
|
| 182 |
+
if (!$e instanceof Exception && !$e instanceof Throwable) {
|
| 183 |
+
throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
$data = array(
|
| 187 |
+
'class' => Utils::getClass($e),
|
| 188 |
+
'message' => $e->getMessage(),
|
| 189 |
+
'code' => $e->getCode(),
|
| 190 |
+
'file' => $e->getFile().':'.$e->getLine(),
|
| 191 |
+
);
|
| 192 |
+
|
| 193 |
+
if ($this->includeStacktraces) {
|
| 194 |
+
$trace = $e->getTrace();
|
| 195 |
+
foreach ($trace as $frame) {
|
| 196 |
+
if (isset($frame['file'])) {
|
| 197 |
+
$data['trace'][] = $frame['file'].':'.$frame['line'];
|
| 198 |
+
} elseif (isset($frame['function']) && $frame['function'] === '{closure}') {
|
| 199 |
+
// We should again normalize the frames, because it might contain invalid items
|
| 200 |
+
$data['trace'][] = $frame['function'];
|
| 201 |
+
} else {
|
| 202 |
+
// We should again normalize the frames, because it might contain invalid items
|
| 203 |
+
$data['trace'][] = $this->normalize($frame);
|
| 204 |
+
}
|
| 205 |
+
}
|
| 206 |
+
}
|
| 207 |
+
|
| 208 |
+
if ($previous = $e->getPrevious()) {
|
| 209 |
+
$data['previous'] = $this->normalizeException($previous);
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
return $data;
|
| 213 |
+
}
|
| 214 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php
ADDED
|
@@ -0,0 +1,181 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Monolog\Utils;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Formats incoming records into a one-line string
|
| 18 |
+
*
|
| 19 |
+
* This is especially useful for logging to files
|
| 20 |
+
*
|
| 21 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 22 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 23 |
+
*/
|
| 24 |
+
class LineFormatter extends NormalizerFormatter
|
| 25 |
+
{
|
| 26 |
+
const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n";
|
| 27 |
+
|
| 28 |
+
protected $format;
|
| 29 |
+
protected $allowInlineLineBreaks;
|
| 30 |
+
protected $ignoreEmptyContextAndExtra;
|
| 31 |
+
protected $includeStacktraces;
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* @param string $format The format of the message
|
| 35 |
+
* @param string $dateFormat The format of the timestamp: one supported by DateTime::format
|
| 36 |
+
* @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries
|
| 37 |
+
* @param bool $ignoreEmptyContextAndExtra
|
| 38 |
+
*/
|
| 39 |
+
public function __construct($format = null, $dateFormat = null, $allowInlineLineBreaks = false, $ignoreEmptyContextAndExtra = false)
|
| 40 |
+
{
|
| 41 |
+
$this->format = $format ?: static::SIMPLE_FORMAT;
|
| 42 |
+
$this->allowInlineLineBreaks = $allowInlineLineBreaks;
|
| 43 |
+
$this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra;
|
| 44 |
+
parent::__construct($dateFormat);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
public function includeStacktraces($include = true)
|
| 48 |
+
{
|
| 49 |
+
$this->includeStacktraces = $include;
|
| 50 |
+
if ($this->includeStacktraces) {
|
| 51 |
+
$this->allowInlineLineBreaks = true;
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
public function allowInlineLineBreaks($allow = true)
|
| 56 |
+
{
|
| 57 |
+
$this->allowInlineLineBreaks = $allow;
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
public function ignoreEmptyContextAndExtra($ignore = true)
|
| 61 |
+
{
|
| 62 |
+
$this->ignoreEmptyContextAndExtra = $ignore;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* {@inheritdoc}
|
| 67 |
+
*/
|
| 68 |
+
public function format(array $record)
|
| 69 |
+
{
|
| 70 |
+
$vars = parent::format($record);
|
| 71 |
+
|
| 72 |
+
$output = $this->format;
|
| 73 |
+
|
| 74 |
+
foreach ($vars['extra'] as $var => $val) {
|
| 75 |
+
if (false !== strpos($output, '%extra.'.$var.'%')) {
|
| 76 |
+
$output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output);
|
| 77 |
+
unset($vars['extra'][$var]);
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
|
| 82 |
+
foreach ($vars['context'] as $var => $val) {
|
| 83 |
+
if (false !== strpos($output, '%context.'.$var.'%')) {
|
| 84 |
+
$output = str_replace('%context.'.$var.'%', $this->stringify($val), $output);
|
| 85 |
+
unset($vars['context'][$var]);
|
| 86 |
+
}
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
if ($this->ignoreEmptyContextAndExtra) {
|
| 90 |
+
if (empty($vars['context'])) {
|
| 91 |
+
unset($vars['context']);
|
| 92 |
+
$output = str_replace('%context%', '', $output);
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
if (empty($vars['extra'])) {
|
| 96 |
+
unset($vars['extra']);
|
| 97 |
+
$output = str_replace('%extra%', '', $output);
|
| 98 |
+
}
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
foreach ($vars as $var => $val) {
|
| 102 |
+
if (false !== strpos($output, '%'.$var.'%')) {
|
| 103 |
+
$output = str_replace('%'.$var.'%', $this->stringify($val), $output);
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
// remove leftover %extra.xxx% and %context.xxx% if any
|
| 108 |
+
if (false !== strpos($output, '%')) {
|
| 109 |
+
$output = preg_replace('/%(?:extra|context)\..+?%/', '', $output);
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
return $output;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
public function formatBatch(array $records)
|
| 116 |
+
{
|
| 117 |
+
$message = '';
|
| 118 |
+
foreach ($records as $record) {
|
| 119 |
+
$message .= $this->format($record);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
return $message;
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
public function stringify($value)
|
| 126 |
+
{
|
| 127 |
+
return $this->replaceNewlines($this->convertToString($value));
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
protected function normalizeException($e)
|
| 131 |
+
{
|
| 132 |
+
// TODO 2.0 only check for Throwable
|
| 133 |
+
if (!$e instanceof \Exception && !$e instanceof \Throwable) {
|
| 134 |
+
throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$previousText = '';
|
| 138 |
+
if ($previous = $e->getPrevious()) {
|
| 139 |
+
do {
|
| 140 |
+
$previousText .= ', '.Utils::getClass($previous).'(code: '.$previous->getCode().'): '.$previous->getMessage().' at '.$previous->getFile().':'.$previous->getLine();
|
| 141 |
+
} while ($previous = $previous->getPrevious());
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
$str = '[object] ('.Utils::getClass($e).'(code: '.$e->getCode().'): '.$e->getMessage().' at '.$e->getFile().':'.$e->getLine().$previousText.')';
|
| 145 |
+
if ($this->includeStacktraces) {
|
| 146 |
+
$str .= "\n[stacktrace]\n".$e->getTraceAsString()."\n";
|
| 147 |
+
}
|
| 148 |
+
|
| 149 |
+
return $str;
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
protected function convertToString($data)
|
| 153 |
+
{
|
| 154 |
+
if (null === $data || is_bool($data)) {
|
| 155 |
+
return var_export($data, true);
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
if (is_scalar($data)) {
|
| 159 |
+
return (string) $data;
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
| 163 |
+
return $this->toJson($data, true);
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
return str_replace('\\/', '/', @json_encode($data));
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
protected function replaceNewlines($str)
|
| 170 |
+
{
|
| 171 |
+
if ($this->allowInlineLineBreaks) {
|
| 172 |
+
if (0 === strpos($str, '{')) {
|
| 173 |
+
return str_replace(array('\r', '\n'), array("\r", "\n"), $str);
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
return $str;
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
return str_replace(array("\r\n", "\r", "\n"), ' ', $str);
|
| 180 |
+
}
|
| 181 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Encodes message information into JSON in a format compatible with Loggly.
|
| 16 |
+
*
|
| 17 |
+
* @author Adam Pancutt <adam@pancutt.com>
|
| 18 |
+
*/
|
| 19 |
+
class LogglyFormatter extends JsonFormatter
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* Overrides the default batch mode to new lines for compatibility with the
|
| 23 |
+
* Loggly bulk API.
|
| 24 |
+
*
|
| 25 |
+
* @param int $batchMode
|
| 26 |
+
*/
|
| 27 |
+
public function __construct($batchMode = self::BATCH_MODE_NEWLINES, $appendNewline = false)
|
| 28 |
+
{
|
| 29 |
+
parent::__construct($batchMode, $appendNewline);
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Appends the 'timestamp' parameter for indexing by Loggly.
|
| 34 |
+
*
|
| 35 |
+
* @see https://www.loggly.com/docs/automated-parsing/#json
|
| 36 |
+
* @see \Monolog\Formatter\JsonFormatter::format()
|
| 37 |
+
*/
|
| 38 |
+
public function format(array $record)
|
| 39 |
+
{
|
| 40 |
+
if (isset($record["datetime"]) && ($record["datetime"] instanceof \DateTime)) {
|
| 41 |
+
$record["timestamp"] = $record["datetime"]->format("Y-m-d\TH:i:s.uO");
|
| 42 |
+
// TODO 2.0 unset the 'datetime' parameter, retained for BC
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
return parent::format($record);
|
| 46 |
+
}
|
| 47 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php
ADDED
|
@@ -0,0 +1,166 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Serializes a log message to Logstash Event Format
|
| 16 |
+
*
|
| 17 |
+
* @see http://logstash.net/
|
| 18 |
+
* @see https://github.com/logstash/logstash/blob/master/lib/logstash/event.rb
|
| 19 |
+
*
|
| 20 |
+
* @author Tim Mower <timothy.mower@gmail.com>
|
| 21 |
+
*/
|
| 22 |
+
class LogstashFormatter extends NormalizerFormatter
|
| 23 |
+
{
|
| 24 |
+
const V0 = 0;
|
| 25 |
+
const V1 = 1;
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* @var string the name of the system for the Logstash log message, used to fill the @source field
|
| 29 |
+
*/
|
| 30 |
+
protected $systemName;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @var string an application name for the Logstash log message, used to fill the @type field
|
| 34 |
+
*/
|
| 35 |
+
protected $applicationName;
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* @var string a prefix for 'extra' fields from the Monolog record (optional)
|
| 39 |
+
*/
|
| 40 |
+
protected $extraPrefix;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* @var string a prefix for 'context' fields from the Monolog record (optional)
|
| 44 |
+
*/
|
| 45 |
+
protected $contextPrefix;
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @var int logstash format version to use
|
| 49 |
+
*/
|
| 50 |
+
protected $version;
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* @param string $applicationName the application that sends the data, used as the "type" field of logstash
|
| 54 |
+
* @param string $systemName the system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine
|
| 55 |
+
* @param string $extraPrefix prefix for extra keys inside logstash "fields"
|
| 56 |
+
* @param string $contextPrefix prefix for context keys inside logstash "fields", defaults to ctxt_
|
| 57 |
+
* @param int $version the logstash format version to use, defaults to 0
|
| 58 |
+
*/
|
| 59 |
+
public function __construct($applicationName, $systemName = null, $extraPrefix = null, $contextPrefix = 'ctxt_', $version = self::V0)
|
| 60 |
+
{
|
| 61 |
+
// logstash requires a ISO 8601 format date with optional millisecond precision.
|
| 62 |
+
parent::__construct('Y-m-d\TH:i:s.uP');
|
| 63 |
+
|
| 64 |
+
$this->systemName = $systemName ?: gethostname();
|
| 65 |
+
$this->applicationName = $applicationName;
|
| 66 |
+
$this->extraPrefix = $extraPrefix;
|
| 67 |
+
$this->contextPrefix = $contextPrefix;
|
| 68 |
+
$this->version = $version;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* {@inheritdoc}
|
| 73 |
+
*/
|
| 74 |
+
public function format(array $record)
|
| 75 |
+
{
|
| 76 |
+
$record = parent::format($record);
|
| 77 |
+
|
| 78 |
+
if ($this->version === self::V1) {
|
| 79 |
+
$message = $this->formatV1($record);
|
| 80 |
+
} else {
|
| 81 |
+
$message = $this->formatV0($record);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
return $this->toJson($message) . "\n";
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
protected function formatV0(array $record)
|
| 88 |
+
{
|
| 89 |
+
if (empty($record['datetime'])) {
|
| 90 |
+
$record['datetime'] = gmdate('c');
|
| 91 |
+
}
|
| 92 |
+
$message = array(
|
| 93 |
+
'@timestamp' => $record['datetime'],
|
| 94 |
+
'@source' => $this->systemName,
|
| 95 |
+
'@fields' => array(),
|
| 96 |
+
);
|
| 97 |
+
if (isset($record['message'])) {
|
| 98 |
+
$message['@message'] = $record['message'];
|
| 99 |
+
}
|
| 100 |
+
if (isset($record['channel'])) {
|
| 101 |
+
$message['@tags'] = array($record['channel']);
|
| 102 |
+
$message['@fields']['channel'] = $record['channel'];
|
| 103 |
+
}
|
| 104 |
+
if (isset($record['level'])) {
|
| 105 |
+
$message['@fields']['level'] = $record['level'];
|
| 106 |
+
}
|
| 107 |
+
if ($this->applicationName) {
|
| 108 |
+
$message['@type'] = $this->applicationName;
|
| 109 |
+
}
|
| 110 |
+
if (isset($record['extra']['server'])) {
|
| 111 |
+
$message['@source_host'] = $record['extra']['server'];
|
| 112 |
+
}
|
| 113 |
+
if (isset($record['extra']['url'])) {
|
| 114 |
+
$message['@source_path'] = $record['extra']['url'];
|
| 115 |
+
}
|
| 116 |
+
if (!empty($record['extra'])) {
|
| 117 |
+
foreach ($record['extra'] as $key => $val) {
|
| 118 |
+
$message['@fields'][$this->extraPrefix . $key] = $val;
|
| 119 |
+
}
|
| 120 |
+
}
|
| 121 |
+
if (!empty($record['context'])) {
|
| 122 |
+
foreach ($record['context'] as $key => $val) {
|
| 123 |
+
$message['@fields'][$this->contextPrefix . $key] = $val;
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
return $message;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
protected function formatV1(array $record)
|
| 131 |
+
{
|
| 132 |
+
if (empty($record['datetime'])) {
|
| 133 |
+
$record['datetime'] = gmdate('c');
|
| 134 |
+
}
|
| 135 |
+
$message = array(
|
| 136 |
+
'@timestamp' => $record['datetime'],
|
| 137 |
+
'@version' => 1,
|
| 138 |
+
'host' => $this->systemName,
|
| 139 |
+
);
|
| 140 |
+
if (isset($record['message'])) {
|
| 141 |
+
$message['message'] = $record['message'];
|
| 142 |
+
}
|
| 143 |
+
if (isset($record['channel'])) {
|
| 144 |
+
$message['type'] = $record['channel'];
|
| 145 |
+
$message['channel'] = $record['channel'];
|
| 146 |
+
}
|
| 147 |
+
if (isset($record['level_name'])) {
|
| 148 |
+
$message['level'] = $record['level_name'];
|
| 149 |
+
}
|
| 150 |
+
if ($this->applicationName) {
|
| 151 |
+
$message['type'] = $this->applicationName;
|
| 152 |
+
}
|
| 153 |
+
if (!empty($record['extra'])) {
|
| 154 |
+
foreach ($record['extra'] as $key => $val) {
|
| 155 |
+
$message[$this->extraPrefix . $key] = $val;
|
| 156 |
+
}
|
| 157 |
+
}
|
| 158 |
+
if (!empty($record['context'])) {
|
| 159 |
+
foreach ($record['context'] as $key => $val) {
|
| 160 |
+
$message[$this->contextPrefix . $key] = $val;
|
| 161 |
+
}
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
return $message;
|
| 165 |
+
}
|
| 166 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Monolog\Utils;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Formats a record for use with the MongoDBHandler.
|
| 18 |
+
*
|
| 19 |
+
* @author Florian Plattner <me@florianplattner.de>
|
| 20 |
+
*/
|
| 21 |
+
class MongoDBFormatter implements FormatterInterface
|
| 22 |
+
{
|
| 23 |
+
private $exceptionTraceAsString;
|
| 24 |
+
private $maxNestingLevel;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record['context'] is 2
|
| 28 |
+
* @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings
|
| 29 |
+
*/
|
| 30 |
+
public function __construct($maxNestingLevel = 3, $exceptionTraceAsString = true)
|
| 31 |
+
{
|
| 32 |
+
$this->maxNestingLevel = max($maxNestingLevel, 0);
|
| 33 |
+
$this->exceptionTraceAsString = (bool) $exceptionTraceAsString;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* {@inheritDoc}
|
| 38 |
+
*/
|
| 39 |
+
public function format(array $record)
|
| 40 |
+
{
|
| 41 |
+
return $this->formatArray($record);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* {@inheritDoc}
|
| 46 |
+
*/
|
| 47 |
+
public function formatBatch(array $records)
|
| 48 |
+
{
|
| 49 |
+
foreach ($records as $key => $record) {
|
| 50 |
+
$records[$key] = $this->format($record);
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
return $records;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
protected function formatArray(array $record, $nestingLevel = 0)
|
| 57 |
+
{
|
| 58 |
+
if ($this->maxNestingLevel == 0 || $nestingLevel <= $this->maxNestingLevel) {
|
| 59 |
+
foreach ($record as $name => $value) {
|
| 60 |
+
if ($value instanceof \DateTime) {
|
| 61 |
+
$record[$name] = $this->formatDate($value, $nestingLevel + 1);
|
| 62 |
+
} elseif ($value instanceof \Exception) {
|
| 63 |
+
$record[$name] = $this->formatException($value, $nestingLevel + 1);
|
| 64 |
+
} elseif (is_array($value)) {
|
| 65 |
+
$record[$name] = $this->formatArray($value, $nestingLevel + 1);
|
| 66 |
+
} elseif (is_object($value)) {
|
| 67 |
+
$record[$name] = $this->formatObject($value, $nestingLevel + 1);
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
} else {
|
| 71 |
+
$record = '[...]';
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
return $record;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
protected function formatObject($value, $nestingLevel)
|
| 78 |
+
{
|
| 79 |
+
$objectVars = get_object_vars($value);
|
| 80 |
+
$objectVars['class'] = Utils::getClass($value);
|
| 81 |
+
|
| 82 |
+
return $this->formatArray($objectVars, $nestingLevel);
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
protected function formatException(\Exception $exception, $nestingLevel)
|
| 86 |
+
{
|
| 87 |
+
$formattedException = array(
|
| 88 |
+
'class' => Utils::getClass($exception),
|
| 89 |
+
'message' => $exception->getMessage(),
|
| 90 |
+
'code' => $exception->getCode(),
|
| 91 |
+
'file' => $exception->getFile() . ':' . $exception->getLine(),
|
| 92 |
+
);
|
| 93 |
+
|
| 94 |
+
if ($this->exceptionTraceAsString === true) {
|
| 95 |
+
$formattedException['trace'] = $exception->getTraceAsString();
|
| 96 |
+
} else {
|
| 97 |
+
$formattedException['trace'] = $exception->getTrace();
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
return $this->formatArray($formattedException, $nestingLevel);
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
protected function formatDate(\DateTime $value, $nestingLevel)
|
| 104 |
+
{
|
| 105 |
+
return new \MongoDate($value->getTimestamp());
|
| 106 |
+
}
|
| 107 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php
ADDED
|
@@ -0,0 +1,314 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Exception;
|
| 15 |
+
use Monolog\Utils;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Normalizes incoming records to remove objects/resources so it's easier to dump to various targets
|
| 19 |
+
*
|
| 20 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 21 |
+
*/
|
| 22 |
+
class NormalizerFormatter implements FormatterInterface
|
| 23 |
+
{
|
| 24 |
+
const SIMPLE_DATE = "Y-m-d H:i:s";
|
| 25 |
+
|
| 26 |
+
protected $dateFormat;
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* @param string $dateFormat The format of the timestamp: one supported by DateTime::format
|
| 30 |
+
*/
|
| 31 |
+
public function __construct($dateFormat = null)
|
| 32 |
+
{
|
| 33 |
+
$this->dateFormat = $dateFormat ?: static::SIMPLE_DATE;
|
| 34 |
+
if (!function_exists('json_encode')) {
|
| 35 |
+
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter');
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* {@inheritdoc}
|
| 41 |
+
*/
|
| 42 |
+
public function format(array $record)
|
| 43 |
+
{
|
| 44 |
+
return $this->normalize($record);
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* {@inheritdoc}
|
| 49 |
+
*/
|
| 50 |
+
public function formatBatch(array $records)
|
| 51 |
+
{
|
| 52 |
+
foreach ($records as $key => $record) {
|
| 53 |
+
$records[$key] = $this->format($record);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
return $records;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
protected function normalize($data, $depth = 0)
|
| 60 |
+
{
|
| 61 |
+
if ($depth > 9) {
|
| 62 |
+
return 'Over 9 levels deep, aborting normalization';
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
if (null === $data || is_scalar($data)) {
|
| 66 |
+
if (is_float($data)) {
|
| 67 |
+
if (is_infinite($data)) {
|
| 68 |
+
return ($data > 0 ? '' : '-') . 'INF';
|
| 69 |
+
}
|
| 70 |
+
if (is_nan($data)) {
|
| 71 |
+
return 'NaN';
|
| 72 |
+
}
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
return $data;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
if (is_array($data)) {
|
| 79 |
+
$normalized = array();
|
| 80 |
+
|
| 81 |
+
$count = 1;
|
| 82 |
+
foreach ($data as $key => $value) {
|
| 83 |
+
if ($count++ > 1000) {
|
| 84 |
+
$normalized['...'] = 'Over 1000 items ('.count($data).' total), aborting normalization';
|
| 85 |
+
break;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
$normalized[$key] = $this->normalize($value, $depth+1);
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
return $normalized;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
if ($data instanceof \DateTime) {
|
| 95 |
+
return $data->format($this->dateFormat);
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
if (is_object($data)) {
|
| 99 |
+
// TODO 2.0 only check for Throwable
|
| 100 |
+
if ($data instanceof Exception || (PHP_VERSION_ID > 70000 && $data instanceof \Throwable)) {
|
| 101 |
+
return $this->normalizeException($data);
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
// non-serializable objects that implement __toString stringified
|
| 105 |
+
if (method_exists($data, '__toString') && !$data instanceof \JsonSerializable) {
|
| 106 |
+
$value = $data->__toString();
|
| 107 |
+
} else {
|
| 108 |
+
// the rest is json-serialized in some way
|
| 109 |
+
$value = $this->toJson($data, true);
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
return sprintf("[object] (%s: %s)", Utils::getClass($data), $value);
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
if (is_resource($data)) {
|
| 116 |
+
return sprintf('[resource] (%s)', get_resource_type($data));
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
return '[unknown('.gettype($data).')]';
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
protected function normalizeException($e)
|
| 123 |
+
{
|
| 124 |
+
// TODO 2.0 only check for Throwable
|
| 125 |
+
if (!$e instanceof Exception && !$e instanceof \Throwable) {
|
| 126 |
+
throw new \InvalidArgumentException('Exception/Throwable expected, got '.gettype($e).' / '.Utils::getClass($e));
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
$data = array(
|
| 130 |
+
'class' => Utils::getClass($e),
|
| 131 |
+
'message' => $e->getMessage(),
|
| 132 |
+
'code' => $e->getCode(),
|
| 133 |
+
'file' => $e->getFile().':'.$e->getLine(),
|
| 134 |
+
);
|
| 135 |
+
|
| 136 |
+
if ($e instanceof \SoapFault) {
|
| 137 |
+
if (isset($e->faultcode)) {
|
| 138 |
+
$data['faultcode'] = $e->faultcode;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
if (isset($e->faultactor)) {
|
| 142 |
+
$data['faultactor'] = $e->faultactor;
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
if (isset($e->detail)) {
|
| 146 |
+
$data['detail'] = $e->detail;
|
| 147 |
+
}
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
$trace = $e->getTrace();
|
| 151 |
+
foreach ($trace as $frame) {
|
| 152 |
+
if (isset($frame['file'])) {
|
| 153 |
+
$data['trace'][] = $frame['file'].':'.$frame['line'];
|
| 154 |
+
} elseif (isset($frame['function']) && $frame['function'] === '{closure}') {
|
| 155 |
+
// Simplify closures handling
|
| 156 |
+
$data['trace'][] = $frame['function'];
|
| 157 |
+
} else {
|
| 158 |
+
if (isset($frame['args'])) {
|
| 159 |
+
// Make sure that objects present as arguments are not serialized nicely but rather only
|
| 160 |
+
// as a class name to avoid any unexpected leak of sensitive information
|
| 161 |
+
$frame['args'] = array_map(function ($arg) {
|
| 162 |
+
if (is_object($arg) && !($arg instanceof \DateTime || $arg instanceof \DateTimeInterface)) {
|
| 163 |
+
return sprintf("[object] (%s)", Utils::getClass($arg));
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
return $arg;
|
| 167 |
+
}, $frame['args']);
|
| 168 |
+
}
|
| 169 |
+
// We should again normalize the frames, because it might contain invalid items
|
| 170 |
+
$data['trace'][] = $this->toJson($this->normalize($frame), true);
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
if ($previous = $e->getPrevious()) {
|
| 175 |
+
$data['previous'] = $this->normalizeException($previous);
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
return $data;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/**
|
| 182 |
+
* Return the JSON representation of a value
|
| 183 |
+
*
|
| 184 |
+
* @param mixed $data
|
| 185 |
+
* @param bool $ignoreErrors
|
| 186 |
+
* @throws \RuntimeException if encoding fails and errors are not ignored
|
| 187 |
+
* @return string
|
| 188 |
+
*/
|
| 189 |
+
protected function toJson($data, $ignoreErrors = false)
|
| 190 |
+
{
|
| 191 |
+
// suppress json_encode errors since it's twitchy with some inputs
|
| 192 |
+
if ($ignoreErrors) {
|
| 193 |
+
return @$this->jsonEncode($data);
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
$json = $this->jsonEncode($data);
|
| 197 |
+
|
| 198 |
+
if ($json === false) {
|
| 199 |
+
$json = $this->handleJsonError(json_last_error(), $data);
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
return $json;
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
/**
|
| 206 |
+
* @param mixed $data
|
| 207 |
+
* @return string JSON encoded data or null on failure
|
| 208 |
+
*/
|
| 209 |
+
private function jsonEncode($data)
|
| 210 |
+
{
|
| 211 |
+
if (version_compare(PHP_VERSION, '5.4.0', '>=')) {
|
| 212 |
+
return json_encode($data, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
return json_encode($data);
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
/**
|
| 219 |
+
* Handle a json_encode failure.
|
| 220 |
+
*
|
| 221 |
+
* If the failure is due to invalid string encoding, try to clean the
|
| 222 |
+
* input and encode again. If the second encoding attempt fails, the
|
| 223 |
+
* inital error is not encoding related or the input can't be cleaned then
|
| 224 |
+
* raise a descriptive exception.
|
| 225 |
+
*
|
| 226 |
+
* @param int $code return code of json_last_error function
|
| 227 |
+
* @param mixed $data data that was meant to be encoded
|
| 228 |
+
* @throws \RuntimeException if failure can't be corrected
|
| 229 |
+
* @return string JSON encoded data after error correction
|
| 230 |
+
*/
|
| 231 |
+
private function handleJsonError($code, $data)
|
| 232 |
+
{
|
| 233 |
+
if ($code !== JSON_ERROR_UTF8) {
|
| 234 |
+
$this->throwEncodeError($code, $data);
|
| 235 |
+
}
|
| 236 |
+
|
| 237 |
+
if (is_string($data)) {
|
| 238 |
+
$this->detectAndCleanUtf8($data);
|
| 239 |
+
} elseif (is_array($data)) {
|
| 240 |
+
array_walk_recursive($data, array($this, 'detectAndCleanUtf8'));
|
| 241 |
+
} else {
|
| 242 |
+
$this->throwEncodeError($code, $data);
|
| 243 |
+
}
|
| 244 |
+
|
| 245 |
+
$json = $this->jsonEncode($data);
|
| 246 |
+
|
| 247 |
+
if ($json === false) {
|
| 248 |
+
$this->throwEncodeError(json_last_error(), $data);
|
| 249 |
+
}
|
| 250 |
+
|
| 251 |
+
return $json;
|
| 252 |
+
}
|
| 253 |
+
|
| 254 |
+
/**
|
| 255 |
+
* Throws an exception according to a given code with a customized message
|
| 256 |
+
*
|
| 257 |
+
* @param int $code return code of json_last_error function
|
| 258 |
+
* @param mixed $data data that was meant to be encoded
|
| 259 |
+
* @throws \RuntimeException
|
| 260 |
+
*/
|
| 261 |
+
private function throwEncodeError($code, $data)
|
| 262 |
+
{
|
| 263 |
+
switch ($code) {
|
| 264 |
+
case JSON_ERROR_DEPTH:
|
| 265 |
+
$msg = 'Maximum stack depth exceeded';
|
| 266 |
+
break;
|
| 267 |
+
case JSON_ERROR_STATE_MISMATCH:
|
| 268 |
+
$msg = 'Underflow or the modes mismatch';
|
| 269 |
+
break;
|
| 270 |
+
case JSON_ERROR_CTRL_CHAR:
|
| 271 |
+
$msg = 'Unexpected control character found';
|
| 272 |
+
break;
|
| 273 |
+
case JSON_ERROR_UTF8:
|
| 274 |
+
$msg = 'Malformed UTF-8 characters, possibly incorrectly encoded';
|
| 275 |
+
break;
|
| 276 |
+
default:
|
| 277 |
+
$msg = 'Unknown error';
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true));
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
/**
|
| 284 |
+
* Detect invalid UTF-8 string characters and convert to valid UTF-8.
|
| 285 |
+
*
|
| 286 |
+
* Valid UTF-8 input will be left unmodified, but strings containing
|
| 287 |
+
* invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed
|
| 288 |
+
* original encoding of ISO-8859-15. This conversion may result in
|
| 289 |
+
* incorrect output if the actual encoding was not ISO-8859-15, but it
|
| 290 |
+
* will be clean UTF-8 output and will not rely on expensive and fragile
|
| 291 |
+
* detection algorithms.
|
| 292 |
+
*
|
| 293 |
+
* Function converts the input in place in the passed variable so that it
|
| 294 |
+
* can be used as a callback for array_walk_recursive.
|
| 295 |
+
*
|
| 296 |
+
* @param mixed &$data Input to check and convert if needed
|
| 297 |
+
* @private
|
| 298 |
+
*/
|
| 299 |
+
public function detectAndCleanUtf8(&$data)
|
| 300 |
+
{
|
| 301 |
+
if (is_string($data) && !preg_match('//u', $data)) {
|
| 302 |
+
$data = preg_replace_callback(
|
| 303 |
+
'/[\x80-\xFF]+/',
|
| 304 |
+
function ($m) { return utf8_encode($m[0]); },
|
| 305 |
+
$data
|
| 306 |
+
);
|
| 307 |
+
$data = str_replace(
|
| 308 |
+
array('¤', '¦', '¨', '´', '¸', '¼', '½', '¾'),
|
| 309 |
+
array('€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'),
|
| 310 |
+
$data
|
| 311 |
+
);
|
| 312 |
+
}
|
| 313 |
+
}
|
| 314 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Formats data into an associative array of scalar values.
|
| 16 |
+
* Objects and arrays will be JSON encoded.
|
| 17 |
+
*
|
| 18 |
+
* @author Andrew Lawson <adlawson@gmail.com>
|
| 19 |
+
*/
|
| 20 |
+
class ScalarFormatter extends NormalizerFormatter
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* {@inheritdoc}
|
| 24 |
+
*/
|
| 25 |
+
public function format(array $record)
|
| 26 |
+
{
|
| 27 |
+
foreach ($record as $key => $value) {
|
| 28 |
+
$record[$key] = $this->normalizeValue($value);
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
return $record;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* @param mixed $value
|
| 36 |
+
* @return mixed
|
| 37 |
+
*/
|
| 38 |
+
protected function normalizeValue($value)
|
| 39 |
+
{
|
| 40 |
+
$normalized = $this->normalize($value);
|
| 41 |
+
|
| 42 |
+
if (is_array($normalized) || is_object($normalized)) {
|
| 43 |
+
return $this->toJson($normalized, true);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
return $normalized;
|
| 47 |
+
}
|
| 48 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Formatter;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Serializes a log message according to Wildfire's header requirements
|
| 18 |
+
*
|
| 19 |
+
* @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>
|
| 20 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 21 |
+
* @author Kirill chEbba Chebunin <iam@chebba.org>
|
| 22 |
+
*/
|
| 23 |
+
class WildfireFormatter extends NormalizerFormatter
|
| 24 |
+
{
|
| 25 |
+
const TABLE = 'table';
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Translates Monolog log levels to Wildfire levels.
|
| 29 |
+
*/
|
| 30 |
+
private $logLevels = array(
|
| 31 |
+
Logger::DEBUG => 'LOG',
|
| 32 |
+
Logger::INFO => 'INFO',
|
| 33 |
+
Logger::NOTICE => 'INFO',
|
| 34 |
+
Logger::WARNING => 'WARN',
|
| 35 |
+
Logger::ERROR => 'ERROR',
|
| 36 |
+
Logger::CRITICAL => 'ERROR',
|
| 37 |
+
Logger::ALERT => 'ERROR',
|
| 38 |
+
Logger::EMERGENCY => 'ERROR',
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* {@inheritdoc}
|
| 43 |
+
*/
|
| 44 |
+
public function format(array $record)
|
| 45 |
+
{
|
| 46 |
+
// Retrieve the line and file if set and remove them from the formatted extra
|
| 47 |
+
$file = $line = '';
|
| 48 |
+
if (isset($record['extra']['file'])) {
|
| 49 |
+
$file = $record['extra']['file'];
|
| 50 |
+
unset($record['extra']['file']);
|
| 51 |
+
}
|
| 52 |
+
if (isset($record['extra']['line'])) {
|
| 53 |
+
$line = $record['extra']['line'];
|
| 54 |
+
unset($record['extra']['line']);
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
$record = $this->normalize($record);
|
| 58 |
+
$message = array('message' => $record['message']);
|
| 59 |
+
$handleError = false;
|
| 60 |
+
if ($record['context']) {
|
| 61 |
+
$message['context'] = $record['context'];
|
| 62 |
+
$handleError = true;
|
| 63 |
+
}
|
| 64 |
+
if ($record['extra']) {
|
| 65 |
+
$message['extra'] = $record['extra'];
|
| 66 |
+
$handleError = true;
|
| 67 |
+
}
|
| 68 |
+
if (count($message) === 1) {
|
| 69 |
+
$message = reset($message);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
if (isset($record['context'][self::TABLE])) {
|
| 73 |
+
$type = 'TABLE';
|
| 74 |
+
$label = $record['channel'] .': '. $record['message'];
|
| 75 |
+
$message = $record['context'][self::TABLE];
|
| 76 |
+
} else {
|
| 77 |
+
$type = $this->logLevels[$record['level']];
|
| 78 |
+
$label = $record['channel'];
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
// Create JSON object describing the appearance of the message in the console
|
| 82 |
+
$json = $this->toJson(array(
|
| 83 |
+
array(
|
| 84 |
+
'Type' => $type,
|
| 85 |
+
'File' => $file,
|
| 86 |
+
'Line' => $line,
|
| 87 |
+
'Label' => $label,
|
| 88 |
+
),
|
| 89 |
+
$message,
|
| 90 |
+
), $handleError);
|
| 91 |
+
|
| 92 |
+
// The message itself is a serialization of the above JSON object + it's length
|
| 93 |
+
return sprintf(
|
| 94 |
+
'%s|%s|',
|
| 95 |
+
strlen($json),
|
| 96 |
+
$json
|
| 97 |
+
);
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
public function formatBatch(array $records)
|
| 101 |
+
{
|
| 102 |
+
throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter');
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
protected function normalize($data, $depth = 0)
|
| 106 |
+
{
|
| 107 |
+
if (is_object($data) && !$data instanceof \DateTime) {
|
| 108 |
+
return $data;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
return parent::normalize($data, $depth);
|
| 112 |
+
}
|
| 113 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
use Monolog\Formatter\LineFormatter;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
use Monolog\ResettableInterface;
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Base Handler class providing the Handler structure
|
| 21 |
+
*
|
| 22 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 23 |
+
*/
|
| 24 |
+
abstract class AbstractHandler implements HandlerInterface, ResettableInterface
|
| 25 |
+
{
|
| 26 |
+
protected $level = Logger::DEBUG;
|
| 27 |
+
protected $bubble = true;
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* @var FormatterInterface
|
| 31 |
+
*/
|
| 32 |
+
protected $formatter;
|
| 33 |
+
protected $processors = array();
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 37 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 38 |
+
*/
|
| 39 |
+
public function __construct($level = Logger::DEBUG, $bubble = true)
|
| 40 |
+
{
|
| 41 |
+
$this->setLevel($level);
|
| 42 |
+
$this->bubble = $bubble;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
/**
|
| 46 |
+
* {@inheritdoc}
|
| 47 |
+
*/
|
| 48 |
+
public function isHandling(array $record)
|
| 49 |
+
{
|
| 50 |
+
return $record['level'] >= $this->level;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* {@inheritdoc}
|
| 55 |
+
*/
|
| 56 |
+
public function handleBatch(array $records)
|
| 57 |
+
{
|
| 58 |
+
foreach ($records as $record) {
|
| 59 |
+
$this->handle($record);
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* Closes the handler.
|
| 65 |
+
*
|
| 66 |
+
* This will be called automatically when the object is destroyed
|
| 67 |
+
*/
|
| 68 |
+
public function close()
|
| 69 |
+
{
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* {@inheritdoc}
|
| 74 |
+
*/
|
| 75 |
+
public function pushProcessor($callback)
|
| 76 |
+
{
|
| 77 |
+
if (!is_callable($callback)) {
|
| 78 |
+
throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given');
|
| 79 |
+
}
|
| 80 |
+
array_unshift($this->processors, $callback);
|
| 81 |
+
|
| 82 |
+
return $this;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* {@inheritdoc}
|
| 87 |
+
*/
|
| 88 |
+
public function popProcessor()
|
| 89 |
+
{
|
| 90 |
+
if (!$this->processors) {
|
| 91 |
+
throw new \LogicException('You tried to pop from an empty processor stack.');
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
return array_shift($this->processors);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
/**
|
| 98 |
+
* {@inheritdoc}
|
| 99 |
+
*/
|
| 100 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 101 |
+
{
|
| 102 |
+
$this->formatter = $formatter;
|
| 103 |
+
|
| 104 |
+
return $this;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
/**
|
| 108 |
+
* {@inheritdoc}
|
| 109 |
+
*/
|
| 110 |
+
public function getFormatter()
|
| 111 |
+
{
|
| 112 |
+
if (!$this->formatter) {
|
| 113 |
+
$this->formatter = $this->getDefaultFormatter();
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
return $this->formatter;
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
/**
|
| 120 |
+
* Sets minimum logging level at which this handler will be triggered.
|
| 121 |
+
*
|
| 122 |
+
* @param int|string $level Level or level name
|
| 123 |
+
* @return self
|
| 124 |
+
*/
|
| 125 |
+
public function setLevel($level)
|
| 126 |
+
{
|
| 127 |
+
$this->level = Logger::toMonologLevel($level);
|
| 128 |
+
|
| 129 |
+
return $this;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
/**
|
| 133 |
+
* Gets minimum logging level at which this handler will be triggered.
|
| 134 |
+
*
|
| 135 |
+
* @return int
|
| 136 |
+
*/
|
| 137 |
+
public function getLevel()
|
| 138 |
+
{
|
| 139 |
+
return $this->level;
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
/**
|
| 143 |
+
* Sets the bubbling behavior.
|
| 144 |
+
*
|
| 145 |
+
* @param bool $bubble true means that this handler allows bubbling.
|
| 146 |
+
* false means that bubbling is not permitted.
|
| 147 |
+
* @return self
|
| 148 |
+
*/
|
| 149 |
+
public function setBubble($bubble)
|
| 150 |
+
{
|
| 151 |
+
$this->bubble = $bubble;
|
| 152 |
+
|
| 153 |
+
return $this;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
/**
|
| 157 |
+
* Gets the bubbling behavior.
|
| 158 |
+
*
|
| 159 |
+
* @return bool true means that this handler allows bubbling.
|
| 160 |
+
* false means that bubbling is not permitted.
|
| 161 |
+
*/
|
| 162 |
+
public function getBubble()
|
| 163 |
+
{
|
| 164 |
+
return $this->bubble;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
public function __destruct()
|
| 168 |
+
{
|
| 169 |
+
try {
|
| 170 |
+
$this->close();
|
| 171 |
+
} catch (\Exception $e) {
|
| 172 |
+
// do nothing
|
| 173 |
+
} catch (\Throwable $e) {
|
| 174 |
+
// do nothing
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
public function reset()
|
| 179 |
+
{
|
| 180 |
+
foreach ($this->processors as $processor) {
|
| 181 |
+
if ($processor instanceof ResettableInterface) {
|
| 182 |
+
$processor->reset();
|
| 183 |
+
}
|
| 184 |
+
}
|
| 185 |
+
}
|
| 186 |
+
|
| 187 |
+
/**
|
| 188 |
+
* Gets the default formatter.
|
| 189 |
+
*
|
| 190 |
+
* @return FormatterInterface
|
| 191 |
+
*/
|
| 192 |
+
protected function getDefaultFormatter()
|
| 193 |
+
{
|
| 194 |
+
return new LineFormatter();
|
| 195 |
+
}
|
| 196 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\ResettableInterface;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Base Handler class providing the Handler structure
|
| 18 |
+
*
|
| 19 |
+
* Classes extending it should (in most cases) only implement write($record)
|
| 20 |
+
*
|
| 21 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 22 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 23 |
+
*/
|
| 24 |
+
abstract class AbstractProcessingHandler extends AbstractHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* {@inheritdoc}
|
| 28 |
+
*/
|
| 29 |
+
public function handle(array $record)
|
| 30 |
+
{
|
| 31 |
+
if (!$this->isHandling($record)) {
|
| 32 |
+
return false;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
$record = $this->processRecord($record);
|
| 36 |
+
|
| 37 |
+
$record['formatted'] = $this->getFormatter()->format($record);
|
| 38 |
+
|
| 39 |
+
$this->write($record);
|
| 40 |
+
|
| 41 |
+
return false === $this->bubble;
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* Writes the record down to the log of the implementing handler
|
| 46 |
+
*
|
| 47 |
+
* @param array $record
|
| 48 |
+
* @return void
|
| 49 |
+
*/
|
| 50 |
+
abstract protected function write(array $record);
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* Processes a record.
|
| 54 |
+
*
|
| 55 |
+
* @param array $record
|
| 56 |
+
* @return array
|
| 57 |
+
*/
|
| 58 |
+
protected function processRecord(array $record)
|
| 59 |
+
{
|
| 60 |
+
if ($this->processors) {
|
| 61 |
+
foreach ($this->processors as $processor) {
|
| 62 |
+
$record = call_user_func($processor, $record);
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
return $record;
|
| 67 |
+
}
|
| 68 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\LineFormatter;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Common syslog functionality
|
| 19 |
+
*/
|
| 20 |
+
abstract class AbstractSyslogHandler extends AbstractProcessingHandler
|
| 21 |
+
{
|
| 22 |
+
protected $facility;
|
| 23 |
+
|
| 24 |
+
/**
|
| 25 |
+
* Translates Monolog log levels to syslog log priorities.
|
| 26 |
+
*/
|
| 27 |
+
protected $logLevels = array(
|
| 28 |
+
Logger::DEBUG => LOG_DEBUG,
|
| 29 |
+
Logger::INFO => LOG_INFO,
|
| 30 |
+
Logger::NOTICE => LOG_NOTICE,
|
| 31 |
+
Logger::WARNING => LOG_WARNING,
|
| 32 |
+
Logger::ERROR => LOG_ERR,
|
| 33 |
+
Logger::CRITICAL => LOG_CRIT,
|
| 34 |
+
Logger::ALERT => LOG_ALERT,
|
| 35 |
+
Logger::EMERGENCY => LOG_EMERG,
|
| 36 |
+
);
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* List of valid log facility names.
|
| 40 |
+
*/
|
| 41 |
+
protected $facilities = array(
|
| 42 |
+
'auth' => LOG_AUTH,
|
| 43 |
+
'authpriv' => LOG_AUTHPRIV,
|
| 44 |
+
'cron' => LOG_CRON,
|
| 45 |
+
'daemon' => LOG_DAEMON,
|
| 46 |
+
'kern' => LOG_KERN,
|
| 47 |
+
'lpr' => LOG_LPR,
|
| 48 |
+
'mail' => LOG_MAIL,
|
| 49 |
+
'news' => LOG_NEWS,
|
| 50 |
+
'syslog' => LOG_SYSLOG,
|
| 51 |
+
'user' => LOG_USER,
|
| 52 |
+
'uucp' => LOG_UUCP,
|
| 53 |
+
);
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* @param mixed $facility
|
| 57 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 58 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 59 |
+
*/
|
| 60 |
+
public function __construct($facility = LOG_USER, $level = Logger::DEBUG, $bubble = true)
|
| 61 |
+
{
|
| 62 |
+
parent::__construct($level, $bubble);
|
| 63 |
+
|
| 64 |
+
if (!defined('PHP_WINDOWS_VERSION_BUILD')) {
|
| 65 |
+
$this->facilities['local0'] = LOG_LOCAL0;
|
| 66 |
+
$this->facilities['local1'] = LOG_LOCAL1;
|
| 67 |
+
$this->facilities['local2'] = LOG_LOCAL2;
|
| 68 |
+
$this->facilities['local3'] = LOG_LOCAL3;
|
| 69 |
+
$this->facilities['local4'] = LOG_LOCAL4;
|
| 70 |
+
$this->facilities['local5'] = LOG_LOCAL5;
|
| 71 |
+
$this->facilities['local6'] = LOG_LOCAL6;
|
| 72 |
+
$this->facilities['local7'] = LOG_LOCAL7;
|
| 73 |
+
} else {
|
| 74 |
+
$this->facilities['local0'] = 128; // LOG_LOCAL0
|
| 75 |
+
$this->facilities['local1'] = 136; // LOG_LOCAL1
|
| 76 |
+
$this->facilities['local2'] = 144; // LOG_LOCAL2
|
| 77 |
+
$this->facilities['local3'] = 152; // LOG_LOCAL3
|
| 78 |
+
$this->facilities['local4'] = 160; // LOG_LOCAL4
|
| 79 |
+
$this->facilities['local5'] = 168; // LOG_LOCAL5
|
| 80 |
+
$this->facilities['local6'] = 176; // LOG_LOCAL6
|
| 81 |
+
$this->facilities['local7'] = 184; // LOG_LOCAL7
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
// convert textual description of facility to syslog constant
|
| 85 |
+
if (array_key_exists(strtolower($facility), $this->facilities)) {
|
| 86 |
+
$facility = $this->facilities[strtolower($facility)];
|
| 87 |
+
} elseif (!in_array($facility, array_values($this->facilities), true)) {
|
| 88 |
+
throw new \UnexpectedValueException('Unknown facility value "'.$facility.'" given');
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
$this->facility = $facility;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/**
|
| 95 |
+
* {@inheritdoc}
|
| 96 |
+
*/
|
| 97 |
+
protected function getDefaultFormatter()
|
| 98 |
+
{
|
| 99 |
+
return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%');
|
| 100 |
+
}
|
| 101 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php
ADDED
|
@@ -0,0 +1,148 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\JsonFormatter;
|
| 16 |
+
use PhpAmqpLib\Message\AMQPMessage;
|
| 17 |
+
use PhpAmqpLib\Channel\AMQPChannel;
|
| 18 |
+
use AMQPExchange;
|
| 19 |
+
|
| 20 |
+
class AmqpHandler extends AbstractProcessingHandler
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* @var AMQPExchange|AMQPChannel $exchange
|
| 24 |
+
*/
|
| 25 |
+
protected $exchange;
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* @var string
|
| 29 |
+
*/
|
| 30 |
+
protected $exchangeName;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @param AMQPExchange|AMQPChannel $exchange AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use
|
| 34 |
+
* @param string $exchangeName
|
| 35 |
+
* @param int $level
|
| 36 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 37 |
+
*/
|
| 38 |
+
public function __construct($exchange, $exchangeName = 'log', $level = Logger::DEBUG, $bubble = true)
|
| 39 |
+
{
|
| 40 |
+
if ($exchange instanceof AMQPExchange) {
|
| 41 |
+
$exchange->setName($exchangeName);
|
| 42 |
+
} elseif ($exchange instanceof AMQPChannel) {
|
| 43 |
+
$this->exchangeName = $exchangeName;
|
| 44 |
+
} else {
|
| 45 |
+
throw new \InvalidArgumentException('PhpAmqpLib\Channel\AMQPChannel or AMQPExchange instance required');
|
| 46 |
+
}
|
| 47 |
+
$this->exchange = $exchange;
|
| 48 |
+
|
| 49 |
+
parent::__construct($level, $bubble);
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* {@inheritDoc}
|
| 54 |
+
*/
|
| 55 |
+
protected function write(array $record)
|
| 56 |
+
{
|
| 57 |
+
$data = $record["formatted"];
|
| 58 |
+
$routingKey = $this->getRoutingKey($record);
|
| 59 |
+
|
| 60 |
+
if ($this->exchange instanceof AMQPExchange) {
|
| 61 |
+
$this->exchange->publish(
|
| 62 |
+
$data,
|
| 63 |
+
$routingKey,
|
| 64 |
+
0,
|
| 65 |
+
array(
|
| 66 |
+
'delivery_mode' => 2,
|
| 67 |
+
'content_type' => 'application/json',
|
| 68 |
+
)
|
| 69 |
+
);
|
| 70 |
+
} else {
|
| 71 |
+
$this->exchange->basic_publish(
|
| 72 |
+
$this->createAmqpMessage($data),
|
| 73 |
+
$this->exchangeName,
|
| 74 |
+
$routingKey
|
| 75 |
+
);
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
/**
|
| 80 |
+
* {@inheritDoc}
|
| 81 |
+
*/
|
| 82 |
+
public function handleBatch(array $records)
|
| 83 |
+
{
|
| 84 |
+
if ($this->exchange instanceof AMQPExchange) {
|
| 85 |
+
parent::handleBatch($records);
|
| 86 |
+
|
| 87 |
+
return;
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
foreach ($records as $record) {
|
| 91 |
+
if (!$this->isHandling($record)) {
|
| 92 |
+
continue;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
$record = $this->processRecord($record);
|
| 96 |
+
$data = $this->getFormatter()->format($record);
|
| 97 |
+
|
| 98 |
+
$this->exchange->batch_basic_publish(
|
| 99 |
+
$this->createAmqpMessage($data),
|
| 100 |
+
$this->exchangeName,
|
| 101 |
+
$this->getRoutingKey($record)
|
| 102 |
+
);
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
$this->exchange->publish_batch();
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
/**
|
| 109 |
+
* Gets the routing key for the AMQP exchange
|
| 110 |
+
*
|
| 111 |
+
* @param array $record
|
| 112 |
+
* @return string
|
| 113 |
+
*/
|
| 114 |
+
protected function getRoutingKey(array $record)
|
| 115 |
+
{
|
| 116 |
+
$routingKey = sprintf(
|
| 117 |
+
'%s.%s',
|
| 118 |
+
// TODO 2.0 remove substr call
|
| 119 |
+
substr($record['level_name'], 0, 4),
|
| 120 |
+
$record['channel']
|
| 121 |
+
);
|
| 122 |
+
|
| 123 |
+
return strtolower($routingKey);
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* @param string $data
|
| 128 |
+
* @return AMQPMessage
|
| 129 |
+
*/
|
| 130 |
+
private function createAmqpMessage($data)
|
| 131 |
+
{
|
| 132 |
+
return new AMQPMessage(
|
| 133 |
+
(string) $data,
|
| 134 |
+
array(
|
| 135 |
+
'delivery_mode' => 2,
|
| 136 |
+
'content_type' => 'application/json',
|
| 137 |
+
)
|
| 138 |
+
);
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* {@inheritDoc}
|
| 143 |
+
*/
|
| 144 |
+
protected function getDefaultFormatter()
|
| 145 |
+
{
|
| 146 |
+
return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);
|
| 147 |
+
}
|
| 148 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php
ADDED
|
@@ -0,0 +1,240 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Handler sending logs to browser's javascript console with no browser extension required
|
| 18 |
+
*
|
| 19 |
+
* @author Olivier Poitrey <rs@dailymotion.com>
|
| 20 |
+
*/
|
| 21 |
+
class BrowserConsoleHandler extends AbstractProcessingHandler
|
| 22 |
+
{
|
| 23 |
+
protected static $initialized = false;
|
| 24 |
+
protected static $records = array();
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* {@inheritDoc}
|
| 28 |
+
*
|
| 29 |
+
* Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format.
|
| 30 |
+
*
|
| 31 |
+
* Example of formatted string:
|
| 32 |
+
*
|
| 33 |
+
* You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white}
|
| 34 |
+
*/
|
| 35 |
+
protected function getDefaultFormatter()
|
| 36 |
+
{
|
| 37 |
+
return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%');
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* {@inheritDoc}
|
| 42 |
+
*/
|
| 43 |
+
protected function write(array $record)
|
| 44 |
+
{
|
| 45 |
+
// Accumulate records
|
| 46 |
+
static::$records[] = $record;
|
| 47 |
+
|
| 48 |
+
// Register shutdown handler if not already done
|
| 49 |
+
if (!static::$initialized) {
|
| 50 |
+
static::$initialized = true;
|
| 51 |
+
$this->registerShutdownFunction();
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* Convert records to javascript console commands and send it to the browser.
|
| 57 |
+
* This method is automatically called on PHP shutdown if output is HTML or Javascript.
|
| 58 |
+
*/
|
| 59 |
+
public static function send()
|
| 60 |
+
{
|
| 61 |
+
$format = static::getResponseFormat();
|
| 62 |
+
if ($format === 'unknown') {
|
| 63 |
+
return;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
if (count(static::$records)) {
|
| 67 |
+
if ($format === 'html') {
|
| 68 |
+
static::writeOutput('<script>' . static::generateScript() . '</script>');
|
| 69 |
+
} elseif ($format === 'js') {
|
| 70 |
+
static::writeOutput(static::generateScript());
|
| 71 |
+
}
|
| 72 |
+
static::resetStatic();
|
| 73 |
+
}
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
public function close()
|
| 77 |
+
{
|
| 78 |
+
self::resetStatic();
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
public function reset()
|
| 82 |
+
{
|
| 83 |
+
self::resetStatic();
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
/**
|
| 87 |
+
* Forget all logged records
|
| 88 |
+
*/
|
| 89 |
+
public static function resetStatic()
|
| 90 |
+
{
|
| 91 |
+
static::$records = array();
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/**
|
| 95 |
+
* Wrapper for register_shutdown_function to allow overriding
|
| 96 |
+
*/
|
| 97 |
+
protected function registerShutdownFunction()
|
| 98 |
+
{
|
| 99 |
+
if (PHP_SAPI !== 'cli') {
|
| 100 |
+
register_shutdown_function(array('Monolog\Handler\BrowserConsoleHandler', 'send'));
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
/**
|
| 105 |
+
* Wrapper for echo to allow overriding
|
| 106 |
+
*
|
| 107 |
+
* @param string $str
|
| 108 |
+
*/
|
| 109 |
+
protected static function writeOutput($str)
|
| 110 |
+
{
|
| 111 |
+
echo $str;
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
/**
|
| 115 |
+
* Checks the format of the response
|
| 116 |
+
*
|
| 117 |
+
* If Content-Type is set to application/javascript or text/javascript -> js
|
| 118 |
+
* If Content-Type is set to text/html, or is unset -> html
|
| 119 |
+
* If Content-Type is anything else -> unknown
|
| 120 |
+
*
|
| 121 |
+
* @return string One of 'js', 'html' or 'unknown'
|
| 122 |
+
*/
|
| 123 |
+
protected static function getResponseFormat()
|
| 124 |
+
{
|
| 125 |
+
// Check content type
|
| 126 |
+
foreach (headers_list() as $header) {
|
| 127 |
+
if (stripos($header, 'content-type:') === 0) {
|
| 128 |
+
// This handler only works with HTML and javascript outputs
|
| 129 |
+
// text/javascript is obsolete in favour of application/javascript, but still used
|
| 130 |
+
if (stripos($header, 'application/javascript') !== false || stripos($header, 'text/javascript') !== false) {
|
| 131 |
+
return 'js';
|
| 132 |
+
}
|
| 133 |
+
if (stripos($header, 'text/html') === false) {
|
| 134 |
+
return 'unknown';
|
| 135 |
+
}
|
| 136 |
+
break;
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
return 'html';
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
private static function generateScript()
|
| 144 |
+
{
|
| 145 |
+
$script = array();
|
| 146 |
+
foreach (static::$records as $record) {
|
| 147 |
+
$context = static::dump('Context', $record['context']);
|
| 148 |
+
$extra = static::dump('Extra', $record['extra']);
|
| 149 |
+
|
| 150 |
+
if (empty($context) && empty($extra)) {
|
| 151 |
+
$script[] = static::call_array('log', static::handleStyles($record['formatted']));
|
| 152 |
+
} else {
|
| 153 |
+
$script = array_merge($script,
|
| 154 |
+
array(static::call_array('groupCollapsed', static::handleStyles($record['formatted']))),
|
| 155 |
+
$context,
|
| 156 |
+
$extra,
|
| 157 |
+
array(static::call('groupEnd'))
|
| 158 |
+
);
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);";
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
private static function handleStyles($formatted)
|
| 166 |
+
{
|
| 167 |
+
$args = array(static::quote('font-weight: normal'));
|
| 168 |
+
$format = '%c' . $formatted;
|
| 169 |
+
preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
|
| 170 |
+
|
| 171 |
+
foreach (array_reverse($matches) as $match) {
|
| 172 |
+
$args[] = static::quote(static::handleCustomStyles($match[2][0], $match[1][0]));
|
| 173 |
+
$args[] = '"font-weight: normal"';
|
| 174 |
+
|
| 175 |
+
$pos = $match[0][1];
|
| 176 |
+
$format = substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . substr($format, $pos + strlen($match[0][0]));
|
| 177 |
+
}
|
| 178 |
+
|
| 179 |
+
array_unshift($args, static::quote($format));
|
| 180 |
+
|
| 181 |
+
return $args;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
private static function handleCustomStyles($style, $string)
|
| 185 |
+
{
|
| 186 |
+
static $colors = array('blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey');
|
| 187 |
+
static $labels = array();
|
| 188 |
+
|
| 189 |
+
return preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function ($m) use ($string, &$colors, &$labels) {
|
| 190 |
+
if (trim($m[1]) === 'autolabel') {
|
| 191 |
+
// Format the string as a label with consistent auto assigned background color
|
| 192 |
+
if (!isset($labels[$string])) {
|
| 193 |
+
$labels[$string] = $colors[count($labels) % count($colors)];
|
| 194 |
+
}
|
| 195 |
+
$color = $labels[$string];
|
| 196 |
+
|
| 197 |
+
return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px";
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
return $m[1];
|
| 201 |
+
}, $style);
|
| 202 |
+
}
|
| 203 |
+
|
| 204 |
+
private static function dump($title, array $dict)
|
| 205 |
+
{
|
| 206 |
+
$script = array();
|
| 207 |
+
$dict = array_filter($dict);
|
| 208 |
+
if (empty($dict)) {
|
| 209 |
+
return $script;
|
| 210 |
+
}
|
| 211 |
+
$script[] = static::call('log', static::quote('%c%s'), static::quote('font-weight: bold'), static::quote($title));
|
| 212 |
+
foreach ($dict as $key => $value) {
|
| 213 |
+
$value = json_encode($value);
|
| 214 |
+
if (empty($value)) {
|
| 215 |
+
$value = static::quote('');
|
| 216 |
+
}
|
| 217 |
+
$script[] = static::call('log', static::quote('%s: %o'), static::quote($key), $value);
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
return $script;
|
| 221 |
+
}
|
| 222 |
+
|
| 223 |
+
private static function quote($arg)
|
| 224 |
+
{
|
| 225 |
+
return '"' . addcslashes($arg, "\"\n\\") . '"';
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
private static function call()
|
| 229 |
+
{
|
| 230 |
+
$args = func_get_args();
|
| 231 |
+
$method = array_shift($args);
|
| 232 |
+
|
| 233 |
+
return static::call_array($method, $args);
|
| 234 |
+
}
|
| 235 |
+
|
| 236 |
+
private static function call_array($method, array $args)
|
| 237 |
+
{
|
| 238 |
+
return 'c.' . $method . '(' . implode(', ', $args) . ');';
|
| 239 |
+
}
|
| 240 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\ResettableInterface;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Buffers all records until closing the handler and then pass them as batch.
|
| 19 |
+
*
|
| 20 |
+
* This is useful for a MailHandler to send only one mail per request instead of
|
| 21 |
+
* sending one per log message.
|
| 22 |
+
*
|
| 23 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 24 |
+
*/
|
| 25 |
+
class BufferHandler extends AbstractHandler
|
| 26 |
+
{
|
| 27 |
+
protected $handler;
|
| 28 |
+
protected $bufferSize = 0;
|
| 29 |
+
protected $bufferLimit;
|
| 30 |
+
protected $flushOnOverflow;
|
| 31 |
+
protected $buffer = array();
|
| 32 |
+
protected $initialized = false;
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* @param HandlerInterface $handler Handler.
|
| 36 |
+
* @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
|
| 37 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 38 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 39 |
+
* @param bool $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded
|
| 40 |
+
*/
|
| 41 |
+
public function __construct(HandlerInterface $handler, $bufferLimit = 0, $level = Logger::DEBUG, $bubble = true, $flushOnOverflow = false)
|
| 42 |
+
{
|
| 43 |
+
parent::__construct($level, $bubble);
|
| 44 |
+
$this->handler = $handler;
|
| 45 |
+
$this->bufferLimit = (int) $bufferLimit;
|
| 46 |
+
$this->flushOnOverflow = $flushOnOverflow;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* {@inheritdoc}
|
| 51 |
+
*/
|
| 52 |
+
public function handle(array $record)
|
| 53 |
+
{
|
| 54 |
+
if ($record['level'] < $this->level) {
|
| 55 |
+
return false;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
if (!$this->initialized) {
|
| 59 |
+
// __destructor() doesn't get called on Fatal errors
|
| 60 |
+
register_shutdown_function(array($this, 'close'));
|
| 61 |
+
$this->initialized = true;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) {
|
| 65 |
+
if ($this->flushOnOverflow) {
|
| 66 |
+
$this->flush();
|
| 67 |
+
} else {
|
| 68 |
+
array_shift($this->buffer);
|
| 69 |
+
$this->bufferSize--;
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
if ($this->processors) {
|
| 74 |
+
foreach ($this->processors as $processor) {
|
| 75 |
+
$record = call_user_func($processor, $record);
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
$this->buffer[] = $record;
|
| 80 |
+
$this->bufferSize++;
|
| 81 |
+
|
| 82 |
+
return false === $this->bubble;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
public function flush()
|
| 86 |
+
{
|
| 87 |
+
if ($this->bufferSize === 0) {
|
| 88 |
+
return;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
$this->handler->handleBatch($this->buffer);
|
| 92 |
+
$this->clear();
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
public function __destruct()
|
| 96 |
+
{
|
| 97 |
+
// suppress the parent behavior since we already have register_shutdown_function()
|
| 98 |
+
// to call close(), and the reference contained there will prevent this from being
|
| 99 |
+
// GC'd until the end of the request
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
/**
|
| 103 |
+
* {@inheritdoc}
|
| 104 |
+
*/
|
| 105 |
+
public function close()
|
| 106 |
+
{
|
| 107 |
+
$this->flush();
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
/**
|
| 111 |
+
* Clears the buffer without flushing any messages down to the wrapped handler.
|
| 112 |
+
*/
|
| 113 |
+
public function clear()
|
| 114 |
+
{
|
| 115 |
+
$this->bufferSize = 0;
|
| 116 |
+
$this->buffer = array();
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
public function reset()
|
| 120 |
+
{
|
| 121 |
+
$this->flush();
|
| 122 |
+
|
| 123 |
+
parent::reset();
|
| 124 |
+
|
| 125 |
+
if ($this->handler instanceof ResettableInterface) {
|
| 126 |
+
$this->handler->reset();
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\ChromePHPFormatter;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Handler sending logs to the ChromePHP extension (http://www.chromephp.com/)
|
| 19 |
+
*
|
| 20 |
+
* This also works out of the box with Firefox 43+
|
| 21 |
+
*
|
| 22 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 23 |
+
*/
|
| 24 |
+
class ChromePHPHandler extends AbstractProcessingHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* Version of the extension
|
| 28 |
+
*/
|
| 29 |
+
const VERSION = '4.0';
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Header name
|
| 33 |
+
*/
|
| 34 |
+
const HEADER_NAME = 'X-ChromeLogger-Data';
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+)
|
| 38 |
+
*/
|
| 39 |
+
const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}';
|
| 40 |
+
|
| 41 |
+
protected static $initialized = false;
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* Tracks whether we sent too much data
|
| 45 |
+
*
|
| 46 |
+
* Chrome limits the headers to 256KB, so when we sent 240KB we stop sending
|
| 47 |
+
*
|
| 48 |
+
* @var bool
|
| 49 |
+
*/
|
| 50 |
+
protected static $overflowed = false;
|
| 51 |
+
|
| 52 |
+
protected static $json = array(
|
| 53 |
+
'version' => self::VERSION,
|
| 54 |
+
'columns' => array('label', 'log', 'backtrace', 'type'),
|
| 55 |
+
'rows' => array(),
|
| 56 |
+
);
|
| 57 |
+
|
| 58 |
+
protected static $sendHeaders = true;
|
| 59 |
+
|
| 60 |
+
/**
|
| 61 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 62 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 63 |
+
*/
|
| 64 |
+
public function __construct($level = Logger::DEBUG, $bubble = true)
|
| 65 |
+
{
|
| 66 |
+
parent::__construct($level, $bubble);
|
| 67 |
+
if (!function_exists('json_encode')) {
|
| 68 |
+
throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler');
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* {@inheritdoc}
|
| 74 |
+
*/
|
| 75 |
+
public function handleBatch(array $records)
|
| 76 |
+
{
|
| 77 |
+
$messages = array();
|
| 78 |
+
|
| 79 |
+
foreach ($records as $record) {
|
| 80 |
+
if ($record['level'] < $this->level) {
|
| 81 |
+
continue;
|
| 82 |
+
}
|
| 83 |
+
$messages[] = $this->processRecord($record);
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
if (!empty($messages)) {
|
| 87 |
+
$messages = $this->getFormatter()->formatBatch($messages);
|
| 88 |
+
self::$json['rows'] = array_merge(self::$json['rows'], $messages);
|
| 89 |
+
$this->send();
|
| 90 |
+
}
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
/**
|
| 94 |
+
* {@inheritDoc}
|
| 95 |
+
*/
|
| 96 |
+
protected function getDefaultFormatter()
|
| 97 |
+
{
|
| 98 |
+
return new ChromePHPFormatter();
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* Creates & sends header for a record
|
| 103 |
+
*
|
| 104 |
+
* @see sendHeader()
|
| 105 |
+
* @see send()
|
| 106 |
+
* @param array $record
|
| 107 |
+
*/
|
| 108 |
+
protected function write(array $record)
|
| 109 |
+
{
|
| 110 |
+
self::$json['rows'][] = $record['formatted'];
|
| 111 |
+
|
| 112 |
+
$this->send();
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* Sends the log header
|
| 117 |
+
*
|
| 118 |
+
* @see sendHeader()
|
| 119 |
+
*/
|
| 120 |
+
protected function send()
|
| 121 |
+
{
|
| 122 |
+
if (self::$overflowed || !self::$sendHeaders) {
|
| 123 |
+
return;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
if (!self::$initialized) {
|
| 127 |
+
self::$initialized = true;
|
| 128 |
+
|
| 129 |
+
self::$sendHeaders = $this->headersAccepted();
|
| 130 |
+
if (!self::$sendHeaders) {
|
| 131 |
+
return;
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
self::$json['request_uri'] = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : '';
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$json = @json_encode(self::$json);
|
| 138 |
+
$data = base64_encode(utf8_encode($json));
|
| 139 |
+
if (strlen($data) > 240 * 1024) {
|
| 140 |
+
self::$overflowed = true;
|
| 141 |
+
|
| 142 |
+
$record = array(
|
| 143 |
+
'message' => 'Incomplete logs, chrome header size limit reached',
|
| 144 |
+
'context' => array(),
|
| 145 |
+
'level' => Logger::WARNING,
|
| 146 |
+
'level_name' => Logger::getLevelName(Logger::WARNING),
|
| 147 |
+
'channel' => 'monolog',
|
| 148 |
+
'datetime' => new \DateTime(),
|
| 149 |
+
'extra' => array(),
|
| 150 |
+
);
|
| 151 |
+
self::$json['rows'][count(self::$json['rows']) - 1] = $this->getFormatter()->format($record);
|
| 152 |
+
$json = @json_encode(self::$json);
|
| 153 |
+
$data = base64_encode(utf8_encode($json));
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
if (trim($data) !== '') {
|
| 157 |
+
$this->sendHeader(self::HEADER_NAME, $data);
|
| 158 |
+
}
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
/**
|
| 162 |
+
* Send header string to the client
|
| 163 |
+
*
|
| 164 |
+
* @param string $header
|
| 165 |
+
* @param string $content
|
| 166 |
+
*/
|
| 167 |
+
protected function sendHeader($header, $content)
|
| 168 |
+
{
|
| 169 |
+
if (!headers_sent() && self::$sendHeaders) {
|
| 170 |
+
header(sprintf('%s: %s', $header, $content));
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
/**
|
| 175 |
+
* Verifies if the headers are accepted by the current user agent
|
| 176 |
+
*
|
| 177 |
+
* @return bool
|
| 178 |
+
*/
|
| 179 |
+
protected function headersAccepted()
|
| 180 |
+
{
|
| 181 |
+
if (empty($_SERVER['HTTP_USER_AGENT'])) {
|
| 182 |
+
return false;
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
return preg_match(self::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']);
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
/**
|
| 189 |
+
* BC getter for the sendHeaders property that has been made static
|
| 190 |
+
*/
|
| 191 |
+
public function __get($property)
|
| 192 |
+
{
|
| 193 |
+
if ('sendHeaders' !== $property) {
|
| 194 |
+
throw new \InvalidArgumentException('Undefined property '.$property);
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
return static::$sendHeaders;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
/**
|
| 201 |
+
* BC setter for the sendHeaders property that has been made static
|
| 202 |
+
*/
|
| 203 |
+
public function __set($property, $value)
|
| 204 |
+
{
|
| 205 |
+
if ('sendHeaders' !== $property) {
|
| 206 |
+
throw new \InvalidArgumentException('Undefined property '.$property);
|
| 207 |
+
}
|
| 208 |
+
|
| 209 |
+
static::$sendHeaders = $value;
|
| 210 |
+
}
|
| 211 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\JsonFormatter;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* CouchDB handler
|
| 19 |
+
*
|
| 20 |
+
* @author Markus Bachmann <markus.bachmann@bachi.biz>
|
| 21 |
+
*/
|
| 22 |
+
class CouchDBHandler extends AbstractProcessingHandler
|
| 23 |
+
{
|
| 24 |
+
private $options;
|
| 25 |
+
|
| 26 |
+
public function __construct(array $options = array(), $level = Logger::DEBUG, $bubble = true)
|
| 27 |
+
{
|
| 28 |
+
$this->options = array_merge(array(
|
| 29 |
+
'host' => 'localhost',
|
| 30 |
+
'port' => 5984,
|
| 31 |
+
'dbname' => 'logger',
|
| 32 |
+
'username' => null,
|
| 33 |
+
'password' => null,
|
| 34 |
+
), $options);
|
| 35 |
+
|
| 36 |
+
parent::__construct($level, $bubble);
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* {@inheritDoc}
|
| 41 |
+
*/
|
| 42 |
+
protected function write(array $record)
|
| 43 |
+
{
|
| 44 |
+
$basicAuth = null;
|
| 45 |
+
if ($this->options['username']) {
|
| 46 |
+
$basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']);
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
$url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname'];
|
| 50 |
+
$context = stream_context_create(array(
|
| 51 |
+
'http' => array(
|
| 52 |
+
'method' => 'POST',
|
| 53 |
+
'content' => $record['formatted'],
|
| 54 |
+
'ignore_errors' => true,
|
| 55 |
+
'max_redirects' => 0,
|
| 56 |
+
'header' => 'Content-type: application/json',
|
| 57 |
+
),
|
| 58 |
+
));
|
| 59 |
+
|
| 60 |
+
if (false === @file_get_contents($url, null, $context)) {
|
| 61 |
+
throw new \RuntimeException(sprintf('Could not connect to %s', $url));
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* {@inheritDoc}
|
| 67 |
+
*/
|
| 68 |
+
protected function getDefaultFormatter()
|
| 69 |
+
{
|
| 70 |
+
return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false);
|
| 71 |
+
}
|
| 72 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php
ADDED
|
@@ -0,0 +1,151 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Logs to Cube.
|
| 18 |
+
*
|
| 19 |
+
* @link http://square.github.com/cube/
|
| 20 |
+
* @author Wan Chen <kami@kamisama.me>
|
| 21 |
+
*/
|
| 22 |
+
class CubeHandler extends AbstractProcessingHandler
|
| 23 |
+
{
|
| 24 |
+
private $udpConnection;
|
| 25 |
+
private $httpConnection;
|
| 26 |
+
private $scheme;
|
| 27 |
+
private $host;
|
| 28 |
+
private $port;
|
| 29 |
+
private $acceptedSchemes = array('http', 'udp');
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* Create a Cube handler
|
| 33 |
+
*
|
| 34 |
+
* @throws \UnexpectedValueException when given url is not a valid url.
|
| 35 |
+
* A valid url must consist of three parts : protocol://host:port
|
| 36 |
+
* Only valid protocols used by Cube are http and udp
|
| 37 |
+
*/
|
| 38 |
+
public function __construct($url, $level = Logger::DEBUG, $bubble = true)
|
| 39 |
+
{
|
| 40 |
+
$urlInfo = parse_url($url);
|
| 41 |
+
|
| 42 |
+
if (!isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) {
|
| 43 |
+
throw new \UnexpectedValueException('URL "'.$url.'" is not valid');
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
if (!in_array($urlInfo['scheme'], $this->acceptedSchemes)) {
|
| 47 |
+
throw new \UnexpectedValueException(
|
| 48 |
+
'Invalid protocol (' . $urlInfo['scheme'] . ').'
|
| 49 |
+
. ' Valid options are ' . implode(', ', $this->acceptedSchemes));
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
$this->scheme = $urlInfo['scheme'];
|
| 53 |
+
$this->host = $urlInfo['host'];
|
| 54 |
+
$this->port = $urlInfo['port'];
|
| 55 |
+
|
| 56 |
+
parent::__construct($level, $bubble);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Establish a connection to an UDP socket
|
| 61 |
+
*
|
| 62 |
+
* @throws \LogicException when unable to connect to the socket
|
| 63 |
+
* @throws MissingExtensionException when there is no socket extension
|
| 64 |
+
*/
|
| 65 |
+
protected function connectUdp()
|
| 66 |
+
{
|
| 67 |
+
if (!extension_loaded('sockets')) {
|
| 68 |
+
throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler');
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
$this->udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0);
|
| 72 |
+
if (!$this->udpConnection) {
|
| 73 |
+
throw new \LogicException('Unable to create a socket');
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
if (!socket_connect($this->udpConnection, $this->host, $this->port)) {
|
| 77 |
+
throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port);
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
/**
|
| 82 |
+
* Establish a connection to a http server
|
| 83 |
+
* @throws \LogicException when no curl extension
|
| 84 |
+
*/
|
| 85 |
+
protected function connectHttp()
|
| 86 |
+
{
|
| 87 |
+
if (!extension_loaded('curl')) {
|
| 88 |
+
throw new \LogicException('The curl extension is needed to use http URLs with the CubeHandler');
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
$this->httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put');
|
| 92 |
+
|
| 93 |
+
if (!$this->httpConnection) {
|
| 94 |
+
throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST");
|
| 98 |
+
curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true);
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* {@inheritdoc}
|
| 103 |
+
*/
|
| 104 |
+
protected function write(array $record)
|
| 105 |
+
{
|
| 106 |
+
$date = $record['datetime'];
|
| 107 |
+
|
| 108 |
+
$data = array('time' => $date->format('Y-m-d\TH:i:s.uO'));
|
| 109 |
+
unset($record['datetime']);
|
| 110 |
+
|
| 111 |
+
if (isset($record['context']['type'])) {
|
| 112 |
+
$data['type'] = $record['context']['type'];
|
| 113 |
+
unset($record['context']['type']);
|
| 114 |
+
} else {
|
| 115 |
+
$data['type'] = $record['channel'];
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
$data['data'] = $record['context'];
|
| 119 |
+
$data['data']['level'] = $record['level'];
|
| 120 |
+
|
| 121 |
+
if ($this->scheme === 'http') {
|
| 122 |
+
$this->writeHttp(json_encode($data));
|
| 123 |
+
} else {
|
| 124 |
+
$this->writeUdp(json_encode($data));
|
| 125 |
+
}
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
private function writeUdp($data)
|
| 129 |
+
{
|
| 130 |
+
if (!$this->udpConnection) {
|
| 131 |
+
$this->connectUdp();
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
socket_send($this->udpConnection, $data, strlen($data), 0);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
private function writeHttp($data)
|
| 138 |
+
{
|
| 139 |
+
if (!$this->httpConnection) {
|
| 140 |
+
$this->connectHttp();
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']');
|
| 144 |
+
curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, array(
|
| 145 |
+
'Content-Type: application/json',
|
| 146 |
+
'Content-Length: ' . strlen('['.$data.']'),
|
| 147 |
+
));
|
| 148 |
+
|
| 149 |
+
Curl\Util::execute($this->httpConnection, 5, false);
|
| 150 |
+
}
|
| 151 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\Curl;
|
| 13 |
+
|
| 14 |
+
class Util
|
| 15 |
+
{
|
| 16 |
+
private static $retriableErrorCodes = array(
|
| 17 |
+
CURLE_COULDNT_RESOLVE_HOST,
|
| 18 |
+
CURLE_COULDNT_CONNECT,
|
| 19 |
+
CURLE_HTTP_NOT_FOUND,
|
| 20 |
+
CURLE_READ_ERROR,
|
| 21 |
+
CURLE_OPERATION_TIMEOUTED,
|
| 22 |
+
CURLE_HTTP_POST_ERROR,
|
| 23 |
+
CURLE_SSL_CONNECT_ERROR,
|
| 24 |
+
);
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* Executes a CURL request with optional retries and exception on failure
|
| 28 |
+
*
|
| 29 |
+
* @param resource $ch curl handler
|
| 30 |
+
* @throws \RuntimeException
|
| 31 |
+
*/
|
| 32 |
+
public static function execute($ch, $retries = 5, $closeAfterDone = true)
|
| 33 |
+
{
|
| 34 |
+
while ($retries--) {
|
| 35 |
+
if (curl_exec($ch) === false) {
|
| 36 |
+
$curlErrno = curl_errno($ch);
|
| 37 |
+
|
| 38 |
+
if (false === in_array($curlErrno, self::$retriableErrorCodes, true) || !$retries) {
|
| 39 |
+
$curlError = curl_error($ch);
|
| 40 |
+
|
| 41 |
+
if ($closeAfterDone) {
|
| 42 |
+
curl_close($ch);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
throw new \RuntimeException(sprintf('Curl error (code %s): %s', $curlErrno, $curlError));
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
continue;
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
if ($closeAfterDone) {
|
| 52 |
+
curl_close($ch);
|
| 53 |
+
}
|
| 54 |
+
break;
|
| 55 |
+
}
|
| 56 |
+
}
|
| 57 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php
ADDED
|
@@ -0,0 +1,169 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Simple handler wrapper that deduplicates log records across multiple requests
|
| 18 |
+
*
|
| 19 |
+
* It also includes the BufferHandler functionality and will buffer
|
| 20 |
+
* all messages until the end of the request or flush() is called.
|
| 21 |
+
*
|
| 22 |
+
* This works by storing all log records' messages above $deduplicationLevel
|
| 23 |
+
* to the file specified by $deduplicationStore. When further logs come in at the end of the
|
| 24 |
+
* request (or when flush() is called), all those above $deduplicationLevel are checked
|
| 25 |
+
* against the existing stored logs. If they match and the timestamps in the stored log is
|
| 26 |
+
* not older than $time seconds, the new log record is discarded. If no log record is new, the
|
| 27 |
+
* whole data set is discarded.
|
| 28 |
+
*
|
| 29 |
+
* This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers
|
| 30 |
+
* that send messages to people, to avoid spamming with the same message over and over in case of
|
| 31 |
+
* a major component failure like a database server being down which makes all requests fail in the
|
| 32 |
+
* same way.
|
| 33 |
+
*
|
| 34 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 35 |
+
*/
|
| 36 |
+
class DeduplicationHandler extends BufferHandler
|
| 37 |
+
{
|
| 38 |
+
/**
|
| 39 |
+
* @var string
|
| 40 |
+
*/
|
| 41 |
+
protected $deduplicationStore;
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* @var int
|
| 45 |
+
*/
|
| 46 |
+
protected $deduplicationLevel;
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* @var int
|
| 50 |
+
*/
|
| 51 |
+
protected $time;
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* @var bool
|
| 55 |
+
*/
|
| 56 |
+
private $gc = false;
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* @param HandlerInterface $handler Handler.
|
| 60 |
+
* @param string $deduplicationStore The file/path where the deduplication log should be kept
|
| 61 |
+
* @param int $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes
|
| 62 |
+
* @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through
|
| 63 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 64 |
+
*/
|
| 65 |
+
public function __construct(HandlerInterface $handler, $deduplicationStore = null, $deduplicationLevel = Logger::ERROR, $time = 60, $bubble = true)
|
| 66 |
+
{
|
| 67 |
+
parent::__construct($handler, 0, Logger::DEBUG, $bubble, false);
|
| 68 |
+
|
| 69 |
+
$this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore;
|
| 70 |
+
$this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel);
|
| 71 |
+
$this->time = $time;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
public function flush()
|
| 75 |
+
{
|
| 76 |
+
if ($this->bufferSize === 0) {
|
| 77 |
+
return;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
$passthru = null;
|
| 81 |
+
|
| 82 |
+
foreach ($this->buffer as $record) {
|
| 83 |
+
if ($record['level'] >= $this->deduplicationLevel) {
|
| 84 |
+
|
| 85 |
+
$passthru = $passthru || !$this->isDuplicate($record);
|
| 86 |
+
if ($passthru) {
|
| 87 |
+
$this->appendRecord($record);
|
| 88 |
+
}
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
// default of null is valid as well as if no record matches duplicationLevel we just pass through
|
| 93 |
+
if ($passthru === true || $passthru === null) {
|
| 94 |
+
$this->handler->handleBatch($this->buffer);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
$this->clear();
|
| 98 |
+
|
| 99 |
+
if ($this->gc) {
|
| 100 |
+
$this->collectLogs();
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
private function isDuplicate(array $record)
|
| 105 |
+
{
|
| 106 |
+
if (!file_exists($this->deduplicationStore)) {
|
| 107 |
+
return false;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
$store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
|
| 111 |
+
if (!is_array($store)) {
|
| 112 |
+
return false;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
$yesterday = time() - 86400;
|
| 116 |
+
$timestampValidity = $record['datetime']->getTimestamp() - $this->time;
|
| 117 |
+
$expectedMessage = preg_replace('{[\r\n].*}', '', $record['message']);
|
| 118 |
+
|
| 119 |
+
for ($i = count($store) - 1; $i >= 0; $i--) {
|
| 120 |
+
list($timestamp, $level, $message) = explode(':', $store[$i], 3);
|
| 121 |
+
|
| 122 |
+
if ($level === $record['level_name'] && $message === $expectedMessage && $timestamp > $timestampValidity) {
|
| 123 |
+
return true;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
if ($timestamp < $yesterday) {
|
| 127 |
+
$this->gc = true;
|
| 128 |
+
}
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
return false;
|
| 132 |
+
}
|
| 133 |
+
|
| 134 |
+
private function collectLogs()
|
| 135 |
+
{
|
| 136 |
+
if (!file_exists($this->deduplicationStore)) {
|
| 137 |
+
return false;
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
$handle = fopen($this->deduplicationStore, 'rw+');
|
| 141 |
+
flock($handle, LOCK_EX);
|
| 142 |
+
$validLogs = array();
|
| 143 |
+
|
| 144 |
+
$timestampValidity = time() - $this->time;
|
| 145 |
+
|
| 146 |
+
while (!feof($handle)) {
|
| 147 |
+
$log = fgets($handle);
|
| 148 |
+
if (substr($log, 0, 10) >= $timestampValidity) {
|
| 149 |
+
$validLogs[] = $log;
|
| 150 |
+
}
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
ftruncate($handle, 0);
|
| 154 |
+
rewind($handle);
|
| 155 |
+
foreach ($validLogs as $log) {
|
| 156 |
+
fwrite($handle, $log);
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
flock($handle, LOCK_UN);
|
| 160 |
+
fclose($handle);
|
| 161 |
+
|
| 162 |
+
$this->gc = false;
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
private function appendRecord(array $record)
|
| 166 |
+
{
|
| 167 |
+
file_put_contents($this->deduplicationStore, $record['datetime']->getTimestamp() . ':' . $record['level_name'] . ':' . preg_replace('{[\r\n].*}', '', $record['message']) . "\n", FILE_APPEND);
|
| 168 |
+
}
|
| 169 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\NormalizerFormatter;
|
| 16 |
+
use Doctrine\CouchDB\CouchDBClient;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* CouchDB handler for Doctrine CouchDB ODM
|
| 20 |
+
*
|
| 21 |
+
* @author Markus Bachmann <markus.bachmann@bachi.biz>
|
| 22 |
+
*/
|
| 23 |
+
class DoctrineCouchDBHandler extends AbstractProcessingHandler
|
| 24 |
+
{
|
| 25 |
+
private $client;
|
| 26 |
+
|
| 27 |
+
public function __construct(CouchDBClient $client, $level = Logger::DEBUG, $bubble = true)
|
| 28 |
+
{
|
| 29 |
+
$this->client = $client;
|
| 30 |
+
parent::__construct($level, $bubble);
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* {@inheritDoc}
|
| 35 |
+
*/
|
| 36 |
+
protected function write(array $record)
|
| 37 |
+
{
|
| 38 |
+
$this->client->postDocument($record['formatted']);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
protected function getDefaultFormatter()
|
| 42 |
+
{
|
| 43 |
+
return new NormalizerFormatter;
|
| 44 |
+
}
|
| 45 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Aws\Sdk;
|
| 15 |
+
use Aws\DynamoDb\DynamoDbClient;
|
| 16 |
+
use Aws\DynamoDb\Marshaler;
|
| 17 |
+
use Monolog\Formatter\ScalarFormatter;
|
| 18 |
+
use Monolog\Logger;
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/)
|
| 22 |
+
*
|
| 23 |
+
* @link https://github.com/aws/aws-sdk-php/
|
| 24 |
+
* @author Andrew Lawson <adlawson@gmail.com>
|
| 25 |
+
*/
|
| 26 |
+
class DynamoDbHandler extends AbstractProcessingHandler
|
| 27 |
+
{
|
| 28 |
+
const DATE_FORMAT = 'Y-m-d\TH:i:s.uO';
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* @var DynamoDbClient
|
| 32 |
+
*/
|
| 33 |
+
protected $client;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* @var string
|
| 37 |
+
*/
|
| 38 |
+
protected $table;
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* @var int
|
| 42 |
+
*/
|
| 43 |
+
protected $version;
|
| 44 |
+
|
| 45 |
+
/**
|
| 46 |
+
* @var Marshaler
|
| 47 |
+
*/
|
| 48 |
+
protected $marshaler;
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* @param DynamoDbClient $client
|
| 52 |
+
* @param string $table
|
| 53 |
+
* @param int $level
|
| 54 |
+
* @param bool $bubble
|
| 55 |
+
*/
|
| 56 |
+
public function __construct(DynamoDbClient $client, $table, $level = Logger::DEBUG, $bubble = true)
|
| 57 |
+
{
|
| 58 |
+
if (defined('Aws\Sdk::VERSION') && version_compare(Sdk::VERSION, '3.0', '>=')) {
|
| 59 |
+
$this->version = 3;
|
| 60 |
+
$this->marshaler = new Marshaler;
|
| 61 |
+
} else {
|
| 62 |
+
$this->version = 2;
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
$this->client = $client;
|
| 66 |
+
$this->table = $table;
|
| 67 |
+
|
| 68 |
+
parent::__construct($level, $bubble);
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* {@inheritdoc}
|
| 73 |
+
*/
|
| 74 |
+
protected function write(array $record)
|
| 75 |
+
{
|
| 76 |
+
$filtered = $this->filterEmptyFields($record['formatted']);
|
| 77 |
+
if ($this->version === 3) {
|
| 78 |
+
$formatted = $this->marshaler->marshalItem($filtered);
|
| 79 |
+
} else {
|
| 80 |
+
$formatted = $this->client->formatAttributes($filtered);
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
$this->client->putItem(array(
|
| 84 |
+
'TableName' => $this->table,
|
| 85 |
+
'Item' => $formatted,
|
| 86 |
+
));
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* @param array $record
|
| 91 |
+
* @return array
|
| 92 |
+
*/
|
| 93 |
+
protected function filterEmptyFields(array $record)
|
| 94 |
+
{
|
| 95 |
+
return array_filter($record, function ($value) {
|
| 96 |
+
return !empty($value) || false === $value || 0 === $value;
|
| 97 |
+
});
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
/**
|
| 101 |
+
* {@inheritdoc}
|
| 102 |
+
*/
|
| 103 |
+
protected function getDefaultFormatter()
|
| 104 |
+
{
|
| 105 |
+
return new ScalarFormatter(self::DATE_FORMAT);
|
| 106 |
+
}
|
| 107 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/ElasticSearchHandler.php
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
use Monolog\Formatter\ElasticaFormatter;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
use Elastica\Client;
|
| 18 |
+
use Elastica\Exception\ExceptionInterface;
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* Elastic Search handler
|
| 22 |
+
*
|
| 23 |
+
* Usage example:
|
| 24 |
+
*
|
| 25 |
+
* $client = new \Elastica\Client();
|
| 26 |
+
* $options = array(
|
| 27 |
+
* 'index' => 'elastic_index_name',
|
| 28 |
+
* 'type' => 'elastic_doc_type',
|
| 29 |
+
* );
|
| 30 |
+
* $handler = new ElasticSearchHandler($client, $options);
|
| 31 |
+
* $log = new Logger('application');
|
| 32 |
+
* $log->pushHandler($handler);
|
| 33 |
+
*
|
| 34 |
+
* @author Jelle Vink <jelle.vink@gmail.com>
|
| 35 |
+
*/
|
| 36 |
+
class ElasticSearchHandler extends AbstractProcessingHandler
|
| 37 |
+
{
|
| 38 |
+
/**
|
| 39 |
+
* @var Client
|
| 40 |
+
*/
|
| 41 |
+
protected $client;
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* @var array Handler config options
|
| 45 |
+
*/
|
| 46 |
+
protected $options = array();
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* @param Client $client Elastica Client object
|
| 50 |
+
* @param array $options Handler configuration
|
| 51 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 52 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 53 |
+
*/
|
| 54 |
+
public function __construct(Client $client, array $options = array(), $level = Logger::DEBUG, $bubble = true)
|
| 55 |
+
{
|
| 56 |
+
parent::__construct($level, $bubble);
|
| 57 |
+
$this->client = $client;
|
| 58 |
+
$this->options = array_merge(
|
| 59 |
+
array(
|
| 60 |
+
'index' => 'monolog', // Elastic index name
|
| 61 |
+
'type' => 'record', // Elastic document type
|
| 62 |
+
'ignore_error' => false, // Suppress Elastica exceptions
|
| 63 |
+
),
|
| 64 |
+
$options
|
| 65 |
+
);
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* {@inheritDoc}
|
| 70 |
+
*/
|
| 71 |
+
protected function write(array $record)
|
| 72 |
+
{
|
| 73 |
+
$this->bulkSend(array($record['formatted']));
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* {@inheritdoc}
|
| 78 |
+
*/
|
| 79 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 80 |
+
{
|
| 81 |
+
if ($formatter instanceof ElasticaFormatter) {
|
| 82 |
+
return parent::setFormatter($formatter);
|
| 83 |
+
}
|
| 84 |
+
throw new \InvalidArgumentException('ElasticSearchHandler is only compatible with ElasticaFormatter');
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/**
|
| 88 |
+
* Getter options
|
| 89 |
+
* @return array
|
| 90 |
+
*/
|
| 91 |
+
public function getOptions()
|
| 92 |
+
{
|
| 93 |
+
return $this->options;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* {@inheritDoc}
|
| 98 |
+
*/
|
| 99 |
+
protected function getDefaultFormatter()
|
| 100 |
+
{
|
| 101 |
+
return new ElasticaFormatter($this->options['index'], $this->options['type']);
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
/**
|
| 105 |
+
* {@inheritdoc}
|
| 106 |
+
*/
|
| 107 |
+
public function handleBatch(array $records)
|
| 108 |
+
{
|
| 109 |
+
$documents = $this->getFormatter()->formatBatch($records);
|
| 110 |
+
$this->bulkSend($documents);
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
/**
|
| 114 |
+
* Use Elasticsearch bulk API to send list of documents
|
| 115 |
+
* @param array $documents
|
| 116 |
+
* @throws \RuntimeException
|
| 117 |
+
*/
|
| 118 |
+
protected function bulkSend(array $documents)
|
| 119 |
+
{
|
| 120 |
+
try {
|
| 121 |
+
$this->client->addDocuments($documents);
|
| 122 |
+
} catch (ExceptionInterface $e) {
|
| 123 |
+
if (!$this->options['ignore_error']) {
|
| 124 |
+
throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e);
|
| 125 |
+
}
|
| 126 |
+
}
|
| 127 |
+
}
|
| 128 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Stores to PHP error_log() handler.
|
| 19 |
+
*
|
| 20 |
+
* @author Elan Ruusamäe <glen@delfi.ee>
|
| 21 |
+
*/
|
| 22 |
+
class ErrorLogHandler extends AbstractProcessingHandler
|
| 23 |
+
{
|
| 24 |
+
const OPERATING_SYSTEM = 0;
|
| 25 |
+
const SAPI = 4;
|
| 26 |
+
|
| 27 |
+
protected $messageType;
|
| 28 |
+
protected $expandNewlines;
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* @param int $messageType Says where the error should go.
|
| 32 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 33 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 34 |
+
* @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries
|
| 35 |
+
*/
|
| 36 |
+
public function __construct($messageType = self::OPERATING_SYSTEM, $level = Logger::DEBUG, $bubble = true, $expandNewlines = false)
|
| 37 |
+
{
|
| 38 |
+
parent::__construct($level, $bubble);
|
| 39 |
+
|
| 40 |
+
if (false === in_array($messageType, self::getAvailableTypes())) {
|
| 41 |
+
$message = sprintf('The given message type "%s" is not supported', print_r($messageType, true));
|
| 42 |
+
throw new \InvalidArgumentException($message);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
$this->messageType = $messageType;
|
| 46 |
+
$this->expandNewlines = $expandNewlines;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* @return array With all available types
|
| 51 |
+
*/
|
| 52 |
+
public static function getAvailableTypes()
|
| 53 |
+
{
|
| 54 |
+
return array(
|
| 55 |
+
self::OPERATING_SYSTEM,
|
| 56 |
+
self::SAPI,
|
| 57 |
+
);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
/**
|
| 61 |
+
* {@inheritDoc}
|
| 62 |
+
*/
|
| 63 |
+
protected function getDefaultFormatter()
|
| 64 |
+
{
|
| 65 |
+
return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%');
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* {@inheritdoc}
|
| 70 |
+
*/
|
| 71 |
+
protected function write(array $record)
|
| 72 |
+
{
|
| 73 |
+
if ($this->expandNewlines) {
|
| 74 |
+
$lines = preg_split('{[\r\n]+}', (string) $record['formatted']);
|
| 75 |
+
foreach ($lines as $line) {
|
| 76 |
+
error_log($line, $this->messageType);
|
| 77 |
+
}
|
| 78 |
+
} else {
|
| 79 |
+
error_log((string) $record['formatted'], $this->messageType);
|
| 80 |
+
}
|
| 81 |
+
}
|
| 82 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Simple handler wrapper that filters records based on a list of levels
|
| 18 |
+
*
|
| 19 |
+
* It can be configured with an exact list of levels to allow, or a min/max level.
|
| 20 |
+
*
|
| 21 |
+
* @author Hennadiy Verkh
|
| 22 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 23 |
+
*/
|
| 24 |
+
class FilterHandler extends AbstractHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* Handler or factory callable($record, $this)
|
| 28 |
+
*
|
| 29 |
+
* @var callable|\Monolog\Handler\HandlerInterface
|
| 30 |
+
*/
|
| 31 |
+
protected $handler;
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Minimum level for logs that are passed to handler
|
| 35 |
+
*
|
| 36 |
+
* @var int[]
|
| 37 |
+
*/
|
| 38 |
+
protected $acceptedLevels;
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Whether the messages that are handled can bubble up the stack or not
|
| 42 |
+
*
|
| 43 |
+
* @var bool
|
| 44 |
+
*/
|
| 45 |
+
protected $bubble;
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @param callable|HandlerInterface $handler Handler or factory callable($record, $this).
|
| 49 |
+
* @param int|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided
|
| 50 |
+
* @param int $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array
|
| 51 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 52 |
+
*/
|
| 53 |
+
public function __construct($handler, $minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY, $bubble = true)
|
| 54 |
+
{
|
| 55 |
+
$this->handler = $handler;
|
| 56 |
+
$this->bubble = $bubble;
|
| 57 |
+
$this->setAcceptedLevels($minLevelOrList, $maxLevel);
|
| 58 |
+
|
| 59 |
+
if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
|
| 60 |
+
throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
/**
|
| 65 |
+
* @return array
|
| 66 |
+
*/
|
| 67 |
+
public function getAcceptedLevels()
|
| 68 |
+
{
|
| 69 |
+
return array_flip($this->acceptedLevels);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* @param int|string|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided
|
| 74 |
+
* @param int|string $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array
|
| 75 |
+
*/
|
| 76 |
+
public function setAcceptedLevels($minLevelOrList = Logger::DEBUG, $maxLevel = Logger::EMERGENCY)
|
| 77 |
+
{
|
| 78 |
+
if (is_array($minLevelOrList)) {
|
| 79 |
+
$acceptedLevels = array_map('Monolog\Logger::toMonologLevel', $minLevelOrList);
|
| 80 |
+
} else {
|
| 81 |
+
$minLevelOrList = Logger::toMonologLevel($minLevelOrList);
|
| 82 |
+
$maxLevel = Logger::toMonologLevel($maxLevel);
|
| 83 |
+
$acceptedLevels = array_values(array_filter(Logger::getLevels(), function ($level) use ($minLevelOrList, $maxLevel) {
|
| 84 |
+
return $level >= $minLevelOrList && $level <= $maxLevel;
|
| 85 |
+
}));
|
| 86 |
+
}
|
| 87 |
+
$this->acceptedLevels = array_flip($acceptedLevels);
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* {@inheritdoc}
|
| 92 |
+
*/
|
| 93 |
+
public function isHandling(array $record)
|
| 94 |
+
{
|
| 95 |
+
return isset($this->acceptedLevels[$record['level']]);
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* {@inheritdoc}
|
| 100 |
+
*/
|
| 101 |
+
public function handle(array $record)
|
| 102 |
+
{
|
| 103 |
+
if (!$this->isHandling($record)) {
|
| 104 |
+
return false;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
// The same logic as in FingersCrossedHandler
|
| 108 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 109 |
+
$this->handler = call_user_func($this->handler, $record, $this);
|
| 110 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 111 |
+
throw new \RuntimeException("The factory callable should return a HandlerInterface");
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
if ($this->processors) {
|
| 116 |
+
foreach ($this->processors as $processor) {
|
| 117 |
+
$record = call_user_func($processor, $record);
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
$this->handler->handle($record);
|
| 122 |
+
|
| 123 |
+
return false === $this->bubble;
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
/**
|
| 127 |
+
* {@inheritdoc}
|
| 128 |
+
*/
|
| 129 |
+
public function handleBatch(array $records)
|
| 130 |
+
{
|
| 131 |
+
$filtered = array();
|
| 132 |
+
foreach ($records as $record) {
|
| 133 |
+
if ($this->isHandling($record)) {
|
| 134 |
+
$filtered[] = $record;
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
$this->handler->handleBatch($filtered);
|
| 139 |
+
}
|
| 140 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\FingersCrossed;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Interface for activation strategies for the FingersCrossedHandler.
|
| 16 |
+
*
|
| 17 |
+
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
| 18 |
+
*/
|
| 19 |
+
interface ActivationStrategyInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* Returns whether the given record activates the handler.
|
| 23 |
+
*
|
| 24 |
+
* @param array $record
|
| 25 |
+
* @return bool
|
| 26 |
+
*/
|
| 27 |
+
public function isHandlerActivated(array $record);
|
| 28 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\FingersCrossed;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Channel and Error level based monolog activation strategy. Allows to trigger activation
|
| 18 |
+
* based on level per channel. e.g. trigger activation on level 'ERROR' by default, except
|
| 19 |
+
* for records of the 'sql' channel; those should trigger activation on level 'WARN'.
|
| 20 |
+
*
|
| 21 |
+
* Example:
|
| 22 |
+
*
|
| 23 |
+
* <code>
|
| 24 |
+
* $activationStrategy = new ChannelLevelActivationStrategy(
|
| 25 |
+
* Logger::CRITICAL,
|
| 26 |
+
* array(
|
| 27 |
+
* 'request' => Logger::ALERT,
|
| 28 |
+
* 'sensitive' => Logger::ERROR,
|
| 29 |
+
* )
|
| 30 |
+
* );
|
| 31 |
+
* $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy);
|
| 32 |
+
* </code>
|
| 33 |
+
*
|
| 34 |
+
* @author Mike Meessen <netmikey@gmail.com>
|
| 35 |
+
*/
|
| 36 |
+
class ChannelLevelActivationStrategy implements ActivationStrategyInterface
|
| 37 |
+
{
|
| 38 |
+
private $defaultActionLevel;
|
| 39 |
+
private $channelToActionLevel;
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* @param int $defaultActionLevel The default action level to be used if the record's category doesn't match any
|
| 43 |
+
* @param array $channelToActionLevel An array that maps channel names to action levels.
|
| 44 |
+
*/
|
| 45 |
+
public function __construct($defaultActionLevel, $channelToActionLevel = array())
|
| 46 |
+
{
|
| 47 |
+
$this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel);
|
| 48 |
+
$this->channelToActionLevel = array_map('Monolog\Logger::toMonologLevel', $channelToActionLevel);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function isHandlerActivated(array $record)
|
| 52 |
+
{
|
| 53 |
+
if (isset($this->channelToActionLevel[$record['channel']])) {
|
| 54 |
+
return $record['level'] >= $this->channelToActionLevel[$record['channel']];
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
return $record['level'] >= $this->defaultActionLevel;
|
| 58 |
+
}
|
| 59 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\FingersCrossed;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Error level based activation strategy.
|
| 18 |
+
*
|
| 19 |
+
* @author Johannes M. Schmitt <schmittjoh@gmail.com>
|
| 20 |
+
*/
|
| 21 |
+
class ErrorLevelActivationStrategy implements ActivationStrategyInterface
|
| 22 |
+
{
|
| 23 |
+
private $actionLevel;
|
| 24 |
+
|
| 25 |
+
public function __construct($actionLevel)
|
| 26 |
+
{
|
| 27 |
+
$this->actionLevel = Logger::toMonologLevel($actionLevel);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
public function isHandlerActivated(array $record)
|
| 31 |
+
{
|
| 32 |
+
return $record['level'] >= $this->actionLevel;
|
| 33 |
+
}
|
| 34 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php
ADDED
|
@@ -0,0 +1,177 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy;
|
| 15 |
+
use Monolog\Handler\FingersCrossed\ActivationStrategyInterface;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
use Monolog\ResettableInterface;
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Buffers all records until a certain level is reached
|
| 21 |
+
*
|
| 22 |
+
* The advantage of this approach is that you don't get any clutter in your log files.
|
| 23 |
+
* Only requests which actually trigger an error (or whatever your actionLevel is) will be
|
| 24 |
+
* in the logs, but they will contain all records, not only those above the level threshold.
|
| 25 |
+
*
|
| 26 |
+
* You can find the various activation strategies in the
|
| 27 |
+
* Monolog\Handler\FingersCrossed\ namespace.
|
| 28 |
+
*
|
| 29 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 30 |
+
*/
|
| 31 |
+
class FingersCrossedHandler extends AbstractHandler
|
| 32 |
+
{
|
| 33 |
+
protected $handler;
|
| 34 |
+
protected $activationStrategy;
|
| 35 |
+
protected $buffering = true;
|
| 36 |
+
protected $bufferSize;
|
| 37 |
+
protected $buffer = array();
|
| 38 |
+
protected $stopBuffering;
|
| 39 |
+
protected $passthruLevel;
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
|
| 43 |
+
* @param int|ActivationStrategyInterface $activationStrategy Strategy which determines when this handler takes action
|
| 44 |
+
* @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer.
|
| 45 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 46 |
+
* @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true)
|
| 47 |
+
* @param int $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered
|
| 48 |
+
*/
|
| 49 |
+
public function __construct($handler, $activationStrategy = null, $bufferSize = 0, $bubble = true, $stopBuffering = true, $passthruLevel = null)
|
| 50 |
+
{
|
| 51 |
+
if (null === $activationStrategy) {
|
| 52 |
+
$activationStrategy = new ErrorLevelActivationStrategy(Logger::WARNING);
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
// convert simple int activationStrategy to an object
|
| 56 |
+
if (!$activationStrategy instanceof ActivationStrategyInterface) {
|
| 57 |
+
$activationStrategy = new ErrorLevelActivationStrategy($activationStrategy);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
$this->handler = $handler;
|
| 61 |
+
$this->activationStrategy = $activationStrategy;
|
| 62 |
+
$this->bufferSize = $bufferSize;
|
| 63 |
+
$this->bubble = $bubble;
|
| 64 |
+
$this->stopBuffering = $stopBuffering;
|
| 65 |
+
|
| 66 |
+
if ($passthruLevel !== null) {
|
| 67 |
+
$this->passthruLevel = Logger::toMonologLevel($passthruLevel);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
|
| 71 |
+
throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
|
| 72 |
+
}
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* {@inheritdoc}
|
| 77 |
+
*/
|
| 78 |
+
public function isHandling(array $record)
|
| 79 |
+
{
|
| 80 |
+
return true;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
/**
|
| 84 |
+
* Manually activate this logger regardless of the activation strategy
|
| 85 |
+
*/
|
| 86 |
+
public function activate()
|
| 87 |
+
{
|
| 88 |
+
if ($this->stopBuffering) {
|
| 89 |
+
$this->buffering = false;
|
| 90 |
+
}
|
| 91 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 92 |
+
$record = end($this->buffer) ?: null;
|
| 93 |
+
|
| 94 |
+
$this->handler = call_user_func($this->handler, $record, $this);
|
| 95 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 96 |
+
throw new \RuntimeException("The factory callable should return a HandlerInterface");
|
| 97 |
+
}
|
| 98 |
+
}
|
| 99 |
+
$this->handler->handleBatch($this->buffer);
|
| 100 |
+
$this->buffer = array();
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
/**
|
| 104 |
+
* {@inheritdoc}
|
| 105 |
+
*/
|
| 106 |
+
public function handle(array $record)
|
| 107 |
+
{
|
| 108 |
+
if ($this->processors) {
|
| 109 |
+
foreach ($this->processors as $processor) {
|
| 110 |
+
$record = call_user_func($processor, $record);
|
| 111 |
+
}
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
if ($this->buffering) {
|
| 115 |
+
$this->buffer[] = $record;
|
| 116 |
+
if ($this->bufferSize > 0 && count($this->buffer) > $this->bufferSize) {
|
| 117 |
+
array_shift($this->buffer);
|
| 118 |
+
}
|
| 119 |
+
if ($this->activationStrategy->isHandlerActivated($record)) {
|
| 120 |
+
$this->activate();
|
| 121 |
+
}
|
| 122 |
+
} else {
|
| 123 |
+
$this->handler->handle($record);
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
return false === $this->bubble;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
/**
|
| 130 |
+
* {@inheritdoc}
|
| 131 |
+
*/
|
| 132 |
+
public function close()
|
| 133 |
+
{
|
| 134 |
+
$this->flushBuffer();
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
public function reset()
|
| 138 |
+
{
|
| 139 |
+
$this->flushBuffer();
|
| 140 |
+
|
| 141 |
+
parent::reset();
|
| 142 |
+
|
| 143 |
+
if ($this->handler instanceof ResettableInterface) {
|
| 144 |
+
$this->handler->reset();
|
| 145 |
+
}
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
/**
|
| 149 |
+
* Clears the buffer without flushing any messages down to the wrapped handler.
|
| 150 |
+
*
|
| 151 |
+
* It also resets the handler to its initial buffering state.
|
| 152 |
+
*/
|
| 153 |
+
public function clear()
|
| 154 |
+
{
|
| 155 |
+
$this->buffer = array();
|
| 156 |
+
$this->reset();
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
/**
|
| 160 |
+
* Resets the state of the handler. Stops forwarding records to the wrapped handler.
|
| 161 |
+
*/
|
| 162 |
+
private function flushBuffer()
|
| 163 |
+
{
|
| 164 |
+
if (null !== $this->passthruLevel) {
|
| 165 |
+
$level = $this->passthruLevel;
|
| 166 |
+
$this->buffer = array_filter($this->buffer, function ($record) use ($level) {
|
| 167 |
+
return $record['level'] >= $level;
|
| 168 |
+
});
|
| 169 |
+
if (count($this->buffer) > 0) {
|
| 170 |
+
$this->handler->handleBatch($this->buffer);
|
| 171 |
+
}
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
$this->buffer = array();
|
| 175 |
+
$this->buffering = true;
|
| 176 |
+
}
|
| 177 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\WildfireFormatter;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol.
|
| 18 |
+
*
|
| 19 |
+
* @author Eric Clemmons (@ericclemmons) <eric@uxdriven.com>
|
| 20 |
+
*/
|
| 21 |
+
class FirePHPHandler extends AbstractProcessingHandler
|
| 22 |
+
{
|
| 23 |
+
/**
|
| 24 |
+
* WildFire JSON header message format
|
| 25 |
+
*/
|
| 26 |
+
const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2';
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* FirePHP structure for parsing messages & their presentation
|
| 30 |
+
*/
|
| 31 |
+
const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1';
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Must reference a "known" plugin, otherwise headers won't display in FirePHP
|
| 35 |
+
*/
|
| 36 |
+
const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3';
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Header prefix for Wildfire to recognize & parse headers
|
| 40 |
+
*/
|
| 41 |
+
const HEADER_PREFIX = 'X-Wf';
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* Whether or not Wildfire vendor-specific headers have been generated & sent yet
|
| 45 |
+
*/
|
| 46 |
+
protected static $initialized = false;
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* Shared static message index between potentially multiple handlers
|
| 50 |
+
* @var int
|
| 51 |
+
*/
|
| 52 |
+
protected static $messageIndex = 1;
|
| 53 |
+
|
| 54 |
+
protected static $sendHeaders = true;
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* Base header creation function used by init headers & record headers
|
| 58 |
+
*
|
| 59 |
+
* @param array $meta Wildfire Plugin, Protocol & Structure Indexes
|
| 60 |
+
* @param string $message Log message
|
| 61 |
+
* @return array Complete header string ready for the client as key and message as value
|
| 62 |
+
*/
|
| 63 |
+
protected function createHeader(array $meta, $message)
|
| 64 |
+
{
|
| 65 |
+
$header = sprintf('%s-%s', self::HEADER_PREFIX, join('-', $meta));
|
| 66 |
+
|
| 67 |
+
return array($header => $message);
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
/**
|
| 71 |
+
* Creates message header from record
|
| 72 |
+
*
|
| 73 |
+
* @see createHeader()
|
| 74 |
+
* @param array $record
|
| 75 |
+
* @return string
|
| 76 |
+
*/
|
| 77 |
+
protected function createRecordHeader(array $record)
|
| 78 |
+
{
|
| 79 |
+
// Wildfire is extensible to support multiple protocols & plugins in a single request,
|
| 80 |
+
// but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake.
|
| 81 |
+
return $this->createHeader(
|
| 82 |
+
array(1, 1, 1, self::$messageIndex++),
|
| 83 |
+
$record['formatted']
|
| 84 |
+
);
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/**
|
| 88 |
+
* {@inheritDoc}
|
| 89 |
+
*/
|
| 90 |
+
protected function getDefaultFormatter()
|
| 91 |
+
{
|
| 92 |
+
return new WildfireFormatter();
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
/**
|
| 96 |
+
* Wildfire initialization headers to enable message parsing
|
| 97 |
+
*
|
| 98 |
+
* @see createHeader()
|
| 99 |
+
* @see sendHeader()
|
| 100 |
+
* @return array
|
| 101 |
+
*/
|
| 102 |
+
protected function getInitHeaders()
|
| 103 |
+
{
|
| 104 |
+
// Initial payload consists of required headers for Wildfire
|
| 105 |
+
return array_merge(
|
| 106 |
+
$this->createHeader(array('Protocol', 1), self::PROTOCOL_URI),
|
| 107 |
+
$this->createHeader(array(1, 'Structure', 1), self::STRUCTURE_URI),
|
| 108 |
+
$this->createHeader(array(1, 'Plugin', 1), self::PLUGIN_URI)
|
| 109 |
+
);
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
/**
|
| 113 |
+
* Send header string to the client
|
| 114 |
+
*
|
| 115 |
+
* @param string $header
|
| 116 |
+
* @param string $content
|
| 117 |
+
*/
|
| 118 |
+
protected function sendHeader($header, $content)
|
| 119 |
+
{
|
| 120 |
+
if (!headers_sent() && self::$sendHeaders) {
|
| 121 |
+
header(sprintf('%s: %s', $header, $content));
|
| 122 |
+
}
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
/**
|
| 126 |
+
* Creates & sends header for a record, ensuring init headers have been sent prior
|
| 127 |
+
*
|
| 128 |
+
* @see sendHeader()
|
| 129 |
+
* @see sendInitHeaders()
|
| 130 |
+
* @param array $record
|
| 131 |
+
*/
|
| 132 |
+
protected function write(array $record)
|
| 133 |
+
{
|
| 134 |
+
if (!self::$sendHeaders) {
|
| 135 |
+
return;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// WildFire-specific headers must be sent prior to any messages
|
| 139 |
+
if (!self::$initialized) {
|
| 140 |
+
self::$initialized = true;
|
| 141 |
+
|
| 142 |
+
self::$sendHeaders = $this->headersAccepted();
|
| 143 |
+
if (!self::$sendHeaders) {
|
| 144 |
+
return;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
foreach ($this->getInitHeaders() as $header => $content) {
|
| 148 |
+
$this->sendHeader($header, $content);
|
| 149 |
+
}
|
| 150 |
+
}
|
| 151 |
+
|
| 152 |
+
$header = $this->createRecordHeader($record);
|
| 153 |
+
if (trim(current($header)) !== '') {
|
| 154 |
+
$this->sendHeader(key($header), current($header));
|
| 155 |
+
}
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
/**
|
| 159 |
+
* Verifies if the headers are accepted by the current user agent
|
| 160 |
+
*
|
| 161 |
+
* @return bool
|
| 162 |
+
*/
|
| 163 |
+
protected function headersAccepted()
|
| 164 |
+
{
|
| 165 |
+
if (!empty($_SERVER['HTTP_USER_AGENT']) && preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) {
|
| 166 |
+
return true;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
return isset($_SERVER['HTTP_X_FIREPHP_VERSION']);
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
/**
|
| 173 |
+
* BC getter for the sendHeaders property that has been made static
|
| 174 |
+
*/
|
| 175 |
+
public function __get($property)
|
| 176 |
+
{
|
| 177 |
+
if ('sendHeaders' !== $property) {
|
| 178 |
+
throw new \InvalidArgumentException('Undefined property '.$property);
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
return static::$sendHeaders;
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
/**
|
| 185 |
+
* BC setter for the sendHeaders property that has been made static
|
| 186 |
+
*/
|
| 187 |
+
public function __set($property, $value)
|
| 188 |
+
{
|
| 189 |
+
if ('sendHeaders' !== $property) {
|
| 190 |
+
throw new \InvalidArgumentException('Undefined property '.$property);
|
| 191 |
+
}
|
| 192 |
+
|
| 193 |
+
static::$sendHeaders = $value;
|
| 194 |
+
}
|
| 195 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Sends logs to Fleep.io using Webhook integrations
|
| 19 |
+
*
|
| 20 |
+
* You'll need a Fleep.io account to use this handler.
|
| 21 |
+
*
|
| 22 |
+
* @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation
|
| 23 |
+
* @author Ando Roots <ando@sqroot.eu>
|
| 24 |
+
*/
|
| 25 |
+
class FleepHookHandler extends SocketHandler
|
| 26 |
+
{
|
| 27 |
+
const FLEEP_HOST = 'fleep.io';
|
| 28 |
+
|
| 29 |
+
const FLEEP_HOOK_URI = '/hook/';
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* @var string Webhook token (specifies the conversation where logs are sent)
|
| 33 |
+
*/
|
| 34 |
+
protected $token;
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Construct a new Fleep.io Handler.
|
| 38 |
+
*
|
| 39 |
+
* For instructions on how to create a new web hook in your conversations
|
| 40 |
+
* see https://fleep.io/integrations/webhooks/
|
| 41 |
+
*
|
| 42 |
+
* @param string $token Webhook token
|
| 43 |
+
* @param bool|int $level The minimum logging level at which this handler will be triggered
|
| 44 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 45 |
+
* @throws MissingExtensionException
|
| 46 |
+
*/
|
| 47 |
+
public function __construct($token, $level = Logger::DEBUG, $bubble = true)
|
| 48 |
+
{
|
| 49 |
+
if (!extension_loaded('openssl')) {
|
| 50 |
+
throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler');
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
$this->token = $token;
|
| 54 |
+
|
| 55 |
+
$connectionString = 'ssl://' . self::FLEEP_HOST . ':443';
|
| 56 |
+
parent::__construct($connectionString, $level, $bubble);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Returns the default formatter to use with this handler
|
| 61 |
+
*
|
| 62 |
+
* Overloaded to remove empty context and extra arrays from the end of the log message.
|
| 63 |
+
*
|
| 64 |
+
* @return LineFormatter
|
| 65 |
+
*/
|
| 66 |
+
protected function getDefaultFormatter()
|
| 67 |
+
{
|
| 68 |
+
return new LineFormatter(null, null, true, true);
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* Handles a log record
|
| 73 |
+
*
|
| 74 |
+
* @param array $record
|
| 75 |
+
*/
|
| 76 |
+
public function write(array $record)
|
| 77 |
+
{
|
| 78 |
+
parent::write($record);
|
| 79 |
+
$this->closeSocket();
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
/**
|
| 83 |
+
* {@inheritdoc}
|
| 84 |
+
*
|
| 85 |
+
* @param array $record
|
| 86 |
+
* @return string
|
| 87 |
+
*/
|
| 88 |
+
protected function generateDataStream($record)
|
| 89 |
+
{
|
| 90 |
+
$content = $this->buildContent($record);
|
| 91 |
+
|
| 92 |
+
return $this->buildHeader($content) . $content;
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
/**
|
| 96 |
+
* Builds the header of the API Call
|
| 97 |
+
*
|
| 98 |
+
* @param string $content
|
| 99 |
+
* @return string
|
| 100 |
+
*/
|
| 101 |
+
private function buildHeader($content)
|
| 102 |
+
{
|
| 103 |
+
$header = "POST " . self::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n";
|
| 104 |
+
$header .= "Host: " . self::FLEEP_HOST . "\r\n";
|
| 105 |
+
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
| 106 |
+
$header .= "Content-Length: " . strlen($content) . "\r\n";
|
| 107 |
+
$header .= "\r\n";
|
| 108 |
+
|
| 109 |
+
return $header;
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
/**
|
| 113 |
+
* Builds the body of API call
|
| 114 |
+
*
|
| 115 |
+
* @param array $record
|
| 116 |
+
* @return string
|
| 117 |
+
*/
|
| 118 |
+
private function buildContent($record)
|
| 119 |
+
{
|
| 120 |
+
$dataArray = array(
|
| 121 |
+
'message' => $record['formatted'],
|
| 122 |
+
);
|
| 123 |
+
|
| 124 |
+
return http_build_query($dataArray);
|
| 125 |
+
}
|
| 126 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\FlowdockFormatter;
|
| 16 |
+
use Monolog\Formatter\FormatterInterface;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Sends notifications through the Flowdock push API
|
| 20 |
+
*
|
| 21 |
+
* This must be configured with a FlowdockFormatter instance via setFormatter()
|
| 22 |
+
*
|
| 23 |
+
* Notes:
|
| 24 |
+
* API token - Flowdock API token
|
| 25 |
+
*
|
| 26 |
+
* @author Dominik Liebler <liebler.dominik@gmail.com>
|
| 27 |
+
* @see https://www.flowdock.com/api/push
|
| 28 |
+
*/
|
| 29 |
+
class FlowdockHandler extends SocketHandler
|
| 30 |
+
{
|
| 31 |
+
/**
|
| 32 |
+
* @var string
|
| 33 |
+
*/
|
| 34 |
+
protected $apiToken;
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* @param string $apiToken
|
| 38 |
+
* @param bool|int $level The minimum logging level at which this handler will be triggered
|
| 39 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 40 |
+
*
|
| 41 |
+
* @throws MissingExtensionException if OpenSSL is missing
|
| 42 |
+
*/
|
| 43 |
+
public function __construct($apiToken, $level = Logger::DEBUG, $bubble = true)
|
| 44 |
+
{
|
| 45 |
+
if (!extension_loaded('openssl')) {
|
| 46 |
+
throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler');
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
parent::__construct('ssl://api.flowdock.com:443', $level, $bubble);
|
| 50 |
+
$this->apiToken = $apiToken;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* {@inheritdoc}
|
| 55 |
+
*/
|
| 56 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 57 |
+
{
|
| 58 |
+
if (!$formatter instanceof FlowdockFormatter) {
|
| 59 |
+
throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly');
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
return parent::setFormatter($formatter);
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
/**
|
| 66 |
+
* Gets the default formatter.
|
| 67 |
+
*
|
| 68 |
+
* @return FormatterInterface
|
| 69 |
+
*/
|
| 70 |
+
protected function getDefaultFormatter()
|
| 71 |
+
{
|
| 72 |
+
throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly');
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* {@inheritdoc}
|
| 77 |
+
*
|
| 78 |
+
* @param array $record
|
| 79 |
+
*/
|
| 80 |
+
protected function write(array $record)
|
| 81 |
+
{
|
| 82 |
+
parent::write($record);
|
| 83 |
+
|
| 84 |
+
$this->closeSocket();
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/**
|
| 88 |
+
* {@inheritdoc}
|
| 89 |
+
*
|
| 90 |
+
* @param array $record
|
| 91 |
+
* @return string
|
| 92 |
+
*/
|
| 93 |
+
protected function generateDataStream($record)
|
| 94 |
+
{
|
| 95 |
+
$content = $this->buildContent($record);
|
| 96 |
+
|
| 97 |
+
return $this->buildHeader($content) . $content;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
/**
|
| 101 |
+
* Builds the body of API call
|
| 102 |
+
*
|
| 103 |
+
* @param array $record
|
| 104 |
+
* @return string
|
| 105 |
+
*/
|
| 106 |
+
private function buildContent($record)
|
| 107 |
+
{
|
| 108 |
+
return json_encode($record['formatted']['flowdock']);
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* Builds the header of the API Call
|
| 113 |
+
*
|
| 114 |
+
* @param string $content
|
| 115 |
+
* @return string
|
| 116 |
+
*/
|
| 117 |
+
private function buildHeader($content)
|
| 118 |
+
{
|
| 119 |
+
$header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n";
|
| 120 |
+
$header .= "Host: api.flowdock.com\r\n";
|
| 121 |
+
$header .= "Content-Type: application/json\r\n";
|
| 122 |
+
$header .= "Content-Length: " . strlen($content) . "\r\n";
|
| 123 |
+
$header .= "\r\n";
|
| 124 |
+
|
| 125 |
+
return $header;
|
| 126 |
+
}
|
| 127 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Gelf\IMessagePublisher;
|
| 15 |
+
use Gelf\PublisherInterface;
|
| 16 |
+
use Gelf\Publisher;
|
| 17 |
+
use InvalidArgumentException;
|
| 18 |
+
use Monolog\Logger;
|
| 19 |
+
use Monolog\Formatter\GelfMessageFormatter;
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Handler to send messages to a Graylog2 (http://www.graylog2.org) server
|
| 23 |
+
*
|
| 24 |
+
* @author Matt Lehner <mlehner@gmail.com>
|
| 25 |
+
* @author Benjamin Zikarsky <benjamin@zikarsky.de>
|
| 26 |
+
*/
|
| 27 |
+
class GelfHandler extends AbstractProcessingHandler
|
| 28 |
+
{
|
| 29 |
+
/**
|
| 30 |
+
* @var Publisher the publisher object that sends the message to the server
|
| 31 |
+
*/
|
| 32 |
+
protected $publisher;
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* @param PublisherInterface|IMessagePublisher|Publisher $publisher a publisher object
|
| 36 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 37 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 38 |
+
*/
|
| 39 |
+
public function __construct($publisher, $level = Logger::DEBUG, $bubble = true)
|
| 40 |
+
{
|
| 41 |
+
parent::__construct($level, $bubble);
|
| 42 |
+
|
| 43 |
+
if (!$publisher instanceof Publisher && !$publisher instanceof IMessagePublisher && !$publisher instanceof PublisherInterface) {
|
| 44 |
+
throw new InvalidArgumentException('Invalid publisher, expected a Gelf\Publisher, Gelf\IMessagePublisher or Gelf\PublisherInterface instance');
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$this->publisher = $publisher;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* {@inheritdoc}
|
| 52 |
+
*/
|
| 53 |
+
protected function write(array $record)
|
| 54 |
+
{
|
| 55 |
+
$this->publisher->publish($record['formatted']);
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* {@inheritDoc}
|
| 60 |
+
*/
|
| 61 |
+
protected function getDefaultFormatter()
|
| 62 |
+
{
|
| 63 |
+
return new GelfMessageFormatter();
|
| 64 |
+
}
|
| 65 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
use Monolog\ResettableInterface;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Forwards records to multiple handlers
|
| 19 |
+
*
|
| 20 |
+
* @author Lenar Lõhmus <lenar@city.ee>
|
| 21 |
+
*/
|
| 22 |
+
class GroupHandler extends AbstractHandler
|
| 23 |
+
{
|
| 24 |
+
protected $handlers;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @param array $handlers Array of Handlers.
|
| 28 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 29 |
+
*/
|
| 30 |
+
public function __construct(array $handlers, $bubble = true)
|
| 31 |
+
{
|
| 32 |
+
foreach ($handlers as $handler) {
|
| 33 |
+
if (!$handler instanceof HandlerInterface) {
|
| 34 |
+
throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.');
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
$this->handlers = $handlers;
|
| 39 |
+
$this->bubble = $bubble;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* {@inheritdoc}
|
| 44 |
+
*/
|
| 45 |
+
public function isHandling(array $record)
|
| 46 |
+
{
|
| 47 |
+
foreach ($this->handlers as $handler) {
|
| 48 |
+
if ($handler->isHandling($record)) {
|
| 49 |
+
return true;
|
| 50 |
+
}
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
return false;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* {@inheritdoc}
|
| 58 |
+
*/
|
| 59 |
+
public function handle(array $record)
|
| 60 |
+
{
|
| 61 |
+
if ($this->processors) {
|
| 62 |
+
foreach ($this->processors as $processor) {
|
| 63 |
+
$record = call_user_func($processor, $record);
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
foreach ($this->handlers as $handler) {
|
| 68 |
+
$handler->handle($record);
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
return false === $this->bubble;
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* {@inheritdoc}
|
| 76 |
+
*/
|
| 77 |
+
public function handleBatch(array $records)
|
| 78 |
+
{
|
| 79 |
+
if ($this->processors) {
|
| 80 |
+
$processed = array();
|
| 81 |
+
foreach ($records as $record) {
|
| 82 |
+
foreach ($this->processors as $processor) {
|
| 83 |
+
$processed[] = call_user_func($processor, $record);
|
| 84 |
+
}
|
| 85 |
+
}
|
| 86 |
+
$records = $processed;
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
foreach ($this->handlers as $handler) {
|
| 90 |
+
$handler->handleBatch($records);
|
| 91 |
+
}
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
public function reset()
|
| 95 |
+
{
|
| 96 |
+
parent::reset();
|
| 97 |
+
|
| 98 |
+
foreach ($this->handlers as $handler) {
|
| 99 |
+
if ($handler instanceof ResettableInterface) {
|
| 100 |
+
$handler->reset();
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
/**
|
| 106 |
+
* {@inheritdoc}
|
| 107 |
+
*/
|
| 108 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 109 |
+
{
|
| 110 |
+
foreach ($this->handlers as $handler) {
|
| 111 |
+
$handler->setFormatter($formatter);
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
return $this;
|
| 115 |
+
}
|
| 116 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Interface that all Monolog Handlers must implement
|
| 18 |
+
*
|
| 19 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 20 |
+
*/
|
| 21 |
+
interface HandlerInterface
|
| 22 |
+
{
|
| 23 |
+
/**
|
| 24 |
+
* Checks whether the given record will be handled by this handler.
|
| 25 |
+
*
|
| 26 |
+
* This is mostly done for performance reasons, to avoid calling processors for nothing.
|
| 27 |
+
*
|
| 28 |
+
* Handlers should still check the record levels within handle(), returning false in isHandling()
|
| 29 |
+
* is no guarantee that handle() will not be called, and isHandling() might not be called
|
| 30 |
+
* for a given record.
|
| 31 |
+
*
|
| 32 |
+
* @param array $record Partial log record containing only a level key
|
| 33 |
+
*
|
| 34 |
+
* @return bool
|
| 35 |
+
*/
|
| 36 |
+
public function isHandling(array $record);
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Handles a record.
|
| 40 |
+
*
|
| 41 |
+
* All records may be passed to this method, and the handler should discard
|
| 42 |
+
* those that it does not want to handle.
|
| 43 |
+
*
|
| 44 |
+
* The return value of this function controls the bubbling process of the handler stack.
|
| 45 |
+
* Unless the bubbling is interrupted (by returning true), the Logger class will keep on
|
| 46 |
+
* calling further handlers in the stack with a given log record.
|
| 47 |
+
*
|
| 48 |
+
* @param array $record The record to handle
|
| 49 |
+
* @return bool true means that this handler handled the record, and that bubbling is not permitted.
|
| 50 |
+
* false means the record was either not processed or that this handler allows bubbling.
|
| 51 |
+
*/
|
| 52 |
+
public function handle(array $record);
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* Handles a set of records at once.
|
| 56 |
+
*
|
| 57 |
+
* @param array $records The records to handle (an array of record arrays)
|
| 58 |
+
*/
|
| 59 |
+
public function handleBatch(array $records);
|
| 60 |
+
|
| 61 |
+
/**
|
| 62 |
+
* Adds a processor in the stack.
|
| 63 |
+
*
|
| 64 |
+
* @param callable $callback
|
| 65 |
+
* @return self
|
| 66 |
+
*/
|
| 67 |
+
public function pushProcessor($callback);
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* Removes the processor on top of the stack and returns it.
|
| 71 |
+
*
|
| 72 |
+
* @return callable
|
| 73 |
+
*/
|
| 74 |
+
public function popProcessor();
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* Sets the formatter.
|
| 78 |
+
*
|
| 79 |
+
* @param FormatterInterface $formatter
|
| 80 |
+
* @return self
|
| 81 |
+
*/
|
| 82 |
+
public function setFormatter(FormatterInterface $formatter);
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Gets the formatter.
|
| 86 |
+
*
|
| 87 |
+
* @return FormatterInterface
|
| 88 |
+
*/
|
| 89 |
+
public function getFormatter();
|
| 90 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\ResettableInterface;
|
| 15 |
+
use Monolog\Formatter\FormatterInterface;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* This simple wrapper class can be used to extend handlers functionality.
|
| 19 |
+
*
|
| 20 |
+
* Example: A custom filtering that can be applied to any handler.
|
| 21 |
+
*
|
| 22 |
+
* Inherit from this class and override handle() like this:
|
| 23 |
+
*
|
| 24 |
+
* public function handle(array $record)
|
| 25 |
+
* {
|
| 26 |
+
* if ($record meets certain conditions) {
|
| 27 |
+
* return false;
|
| 28 |
+
* }
|
| 29 |
+
* return $this->handler->handle($record);
|
| 30 |
+
* }
|
| 31 |
+
*
|
| 32 |
+
* @author Alexey Karapetov <alexey@karapetov.com>
|
| 33 |
+
*/
|
| 34 |
+
class HandlerWrapper implements HandlerInterface, ResettableInterface
|
| 35 |
+
{
|
| 36 |
+
/**
|
| 37 |
+
* @var HandlerInterface
|
| 38 |
+
*/
|
| 39 |
+
protected $handler;
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* HandlerWrapper constructor.
|
| 43 |
+
* @param HandlerInterface $handler
|
| 44 |
+
*/
|
| 45 |
+
public function __construct(HandlerInterface $handler)
|
| 46 |
+
{
|
| 47 |
+
$this->handler = $handler;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* {@inheritdoc}
|
| 52 |
+
*/
|
| 53 |
+
public function isHandling(array $record)
|
| 54 |
+
{
|
| 55 |
+
return $this->handler->isHandling($record);
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* {@inheritdoc}
|
| 60 |
+
*/
|
| 61 |
+
public function handle(array $record)
|
| 62 |
+
{
|
| 63 |
+
return $this->handler->handle($record);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* {@inheritdoc}
|
| 68 |
+
*/
|
| 69 |
+
public function handleBatch(array $records)
|
| 70 |
+
{
|
| 71 |
+
return $this->handler->handleBatch($records);
|
| 72 |
+
}
|
| 73 |
+
|
| 74 |
+
/**
|
| 75 |
+
* {@inheritdoc}
|
| 76 |
+
*/
|
| 77 |
+
public function pushProcessor($callback)
|
| 78 |
+
{
|
| 79 |
+
$this->handler->pushProcessor($callback);
|
| 80 |
+
|
| 81 |
+
return $this;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* {@inheritdoc}
|
| 86 |
+
*/
|
| 87 |
+
public function popProcessor()
|
| 88 |
+
{
|
| 89 |
+
return $this->handler->popProcessor();
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
/**
|
| 93 |
+
* {@inheritdoc}
|
| 94 |
+
*/
|
| 95 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 96 |
+
{
|
| 97 |
+
$this->handler->setFormatter($formatter);
|
| 98 |
+
|
| 99 |
+
return $this;
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
/**
|
| 103 |
+
* {@inheritdoc}
|
| 104 |
+
*/
|
| 105 |
+
public function getFormatter()
|
| 106 |
+
{
|
| 107 |
+
return $this->handler->getFormatter();
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
public function reset()
|
| 111 |
+
{
|
| 112 |
+
if ($this->handler instanceof ResettableInterface) {
|
| 113 |
+
return $this->handler->reset();
|
| 114 |
+
}
|
| 115 |
+
}
|
| 116 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/HipChatHandler.php
ADDED
|
@@ -0,0 +1,365 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Sends notifications through the hipchat api to a hipchat room
|
| 18 |
+
*
|
| 19 |
+
* Notes:
|
| 20 |
+
* API token - HipChat API token
|
| 21 |
+
* Room - HipChat Room Id or name, where messages are sent
|
| 22 |
+
* Name - Name used to send the message (from)
|
| 23 |
+
* notify - Should the message trigger a notification in the clients
|
| 24 |
+
* version - The API version to use (HipChatHandler::API_V1 | HipChatHandler::API_V2)
|
| 25 |
+
*
|
| 26 |
+
* @author Rafael Dohms <rafael@doh.ms>
|
| 27 |
+
* @see https://www.hipchat.com/docs/api
|
| 28 |
+
*/
|
| 29 |
+
class HipChatHandler extends SocketHandler
|
| 30 |
+
{
|
| 31 |
+
/**
|
| 32 |
+
* Use API version 1
|
| 33 |
+
*/
|
| 34 |
+
const API_V1 = 'v1';
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Use API version v2
|
| 38 |
+
*/
|
| 39 |
+
const API_V2 = 'v2';
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* The maximum allowed length for the name used in the "from" field.
|
| 43 |
+
*/
|
| 44 |
+
const MAXIMUM_NAME_LENGTH = 15;
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* The maximum allowed length for the message.
|
| 48 |
+
*/
|
| 49 |
+
const MAXIMUM_MESSAGE_LENGTH = 9500;
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* @var string
|
| 53 |
+
*/
|
| 54 |
+
private $token;
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* @var string
|
| 58 |
+
*/
|
| 59 |
+
private $room;
|
| 60 |
+
|
| 61 |
+
/**
|
| 62 |
+
* @var string
|
| 63 |
+
*/
|
| 64 |
+
private $name;
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* @var bool
|
| 68 |
+
*/
|
| 69 |
+
private $notify;
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* @var string
|
| 73 |
+
*/
|
| 74 |
+
private $format;
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* @var string
|
| 78 |
+
*/
|
| 79 |
+
private $host;
|
| 80 |
+
|
| 81 |
+
/**
|
| 82 |
+
* @var string
|
| 83 |
+
*/
|
| 84 |
+
private $version;
|
| 85 |
+
|
| 86 |
+
/**
|
| 87 |
+
* @param string $token HipChat API Token
|
| 88 |
+
* @param string $room The room that should be alerted of the message (Id or Name)
|
| 89 |
+
* @param string $name Name used in the "from" field.
|
| 90 |
+
* @param bool $notify Trigger a notification in clients or not
|
| 91 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 92 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 93 |
+
* @param bool $useSSL Whether to connect via SSL.
|
| 94 |
+
* @param string $format The format of the messages (default to text, can be set to html if you have html in the messages)
|
| 95 |
+
* @param string $host The HipChat server hostname.
|
| 96 |
+
* @param string $version The HipChat API version (default HipChatHandler::API_V1)
|
| 97 |
+
*/
|
| 98 |
+
public function __construct($token, $room, $name = 'Monolog', $notify = false, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $format = 'text', $host = 'api.hipchat.com', $version = self::API_V1)
|
| 99 |
+
{
|
| 100 |
+
if ($version == self::API_V1 && !$this->validateStringLength($name, static::MAXIMUM_NAME_LENGTH)) {
|
| 101 |
+
throw new \InvalidArgumentException('The supplied name is too long. HipChat\'s v1 API supports names up to 15 UTF-8 characters.');
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
$connectionString = $useSSL ? 'ssl://'.$host.':443' : $host.':80';
|
| 105 |
+
parent::__construct($connectionString, $level, $bubble);
|
| 106 |
+
|
| 107 |
+
$this->token = $token;
|
| 108 |
+
$this->name = $name;
|
| 109 |
+
$this->notify = $notify;
|
| 110 |
+
$this->room = $room;
|
| 111 |
+
$this->format = $format;
|
| 112 |
+
$this->host = $host;
|
| 113 |
+
$this->version = $version;
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
/**
|
| 117 |
+
* {@inheritdoc}
|
| 118 |
+
*
|
| 119 |
+
* @param array $record
|
| 120 |
+
* @return string
|
| 121 |
+
*/
|
| 122 |
+
protected function generateDataStream($record)
|
| 123 |
+
{
|
| 124 |
+
$content = $this->buildContent($record);
|
| 125 |
+
|
| 126 |
+
return $this->buildHeader($content) . $content;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
/**
|
| 130 |
+
* Builds the body of API call
|
| 131 |
+
*
|
| 132 |
+
* @param array $record
|
| 133 |
+
* @return string
|
| 134 |
+
*/
|
| 135 |
+
private function buildContent($record)
|
| 136 |
+
{
|
| 137 |
+
$dataArray = array(
|
| 138 |
+
'notify' => $this->version == self::API_V1 ?
|
| 139 |
+
($this->notify ? 1 : 0) :
|
| 140 |
+
($this->notify ? 'true' : 'false'),
|
| 141 |
+
'message' => $record['formatted'],
|
| 142 |
+
'message_format' => $this->format,
|
| 143 |
+
'color' => $this->getAlertColor($record['level']),
|
| 144 |
+
);
|
| 145 |
+
|
| 146 |
+
if (!$this->validateStringLength($dataArray['message'], static::MAXIMUM_MESSAGE_LENGTH)) {
|
| 147 |
+
if (function_exists('mb_substr')) {
|
| 148 |
+
$dataArray['message'] = mb_substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]';
|
| 149 |
+
} else {
|
| 150 |
+
$dataArray['message'] = substr($dataArray['message'], 0, static::MAXIMUM_MESSAGE_LENGTH).' [truncated]';
|
| 151 |
+
}
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
// if we are using the legacy API then we need to send some additional information
|
| 155 |
+
if ($this->version == self::API_V1) {
|
| 156 |
+
$dataArray['room_id'] = $this->room;
|
| 157 |
+
}
|
| 158 |
+
|
| 159 |
+
// append the sender name if it is set
|
| 160 |
+
// always append it if we use the v1 api (it is required in v1)
|
| 161 |
+
if ($this->version == self::API_V1 || $this->name !== null) {
|
| 162 |
+
$dataArray['from'] = (string) $this->name;
|
| 163 |
+
}
|
| 164 |
+
|
| 165 |
+
return http_build_query($dataArray);
|
| 166 |
+
}
|
| 167 |
+
|
| 168 |
+
/**
|
| 169 |
+
* Builds the header of the API Call
|
| 170 |
+
*
|
| 171 |
+
* @param string $content
|
| 172 |
+
* @return string
|
| 173 |
+
*/
|
| 174 |
+
private function buildHeader($content)
|
| 175 |
+
{
|
| 176 |
+
if ($this->version == self::API_V1) {
|
| 177 |
+
$header = "POST /v1/rooms/message?format=json&auth_token={$this->token} HTTP/1.1\r\n";
|
| 178 |
+
} else {
|
| 179 |
+
// needed for rooms with special (spaces, etc) characters in the name
|
| 180 |
+
$room = rawurlencode($this->room);
|
| 181 |
+
$header = "POST /v2/room/{$room}/notification?auth_token={$this->token} HTTP/1.1\r\n";
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
$header .= "Host: {$this->host}\r\n";
|
| 185 |
+
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
| 186 |
+
$header .= "Content-Length: " . strlen($content) . "\r\n";
|
| 187 |
+
$header .= "\r\n";
|
| 188 |
+
|
| 189 |
+
return $header;
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
+
/**
|
| 193 |
+
* Assigns a color to each level of log records.
|
| 194 |
+
*
|
| 195 |
+
* @param int $level
|
| 196 |
+
* @return string
|
| 197 |
+
*/
|
| 198 |
+
protected function getAlertColor($level)
|
| 199 |
+
{
|
| 200 |
+
switch (true) {
|
| 201 |
+
case $level >= Logger::ERROR:
|
| 202 |
+
return 'red';
|
| 203 |
+
case $level >= Logger::WARNING:
|
| 204 |
+
return 'yellow';
|
| 205 |
+
case $level >= Logger::INFO:
|
| 206 |
+
return 'green';
|
| 207 |
+
case $level == Logger::DEBUG:
|
| 208 |
+
return 'gray';
|
| 209 |
+
default:
|
| 210 |
+
return 'yellow';
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* {@inheritdoc}
|
| 216 |
+
*
|
| 217 |
+
* @param array $record
|
| 218 |
+
*/
|
| 219 |
+
protected function write(array $record)
|
| 220 |
+
{
|
| 221 |
+
parent::write($record);
|
| 222 |
+
$this->finalizeWrite();
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
/**
|
| 226 |
+
* Finalizes the request by reading some bytes and then closing the socket
|
| 227 |
+
*
|
| 228 |
+
* If we do not read some but close the socket too early, hipchat sometimes
|
| 229 |
+
* drops the request entirely.
|
| 230 |
+
*/
|
| 231 |
+
protected function finalizeWrite()
|
| 232 |
+
{
|
| 233 |
+
$res = $this->getResource();
|
| 234 |
+
if (is_resource($res)) {
|
| 235 |
+
@fread($res, 2048);
|
| 236 |
+
}
|
| 237 |
+
$this->closeSocket();
|
| 238 |
+
}
|
| 239 |
+
|
| 240 |
+
/**
|
| 241 |
+
* {@inheritdoc}
|
| 242 |
+
*/
|
| 243 |
+
public function handleBatch(array $records)
|
| 244 |
+
{
|
| 245 |
+
if (count($records) == 0) {
|
| 246 |
+
return true;
|
| 247 |
+
}
|
| 248 |
+
|
| 249 |
+
$batchRecords = $this->combineRecords($records);
|
| 250 |
+
|
| 251 |
+
$handled = false;
|
| 252 |
+
foreach ($batchRecords as $batchRecord) {
|
| 253 |
+
if ($this->isHandling($batchRecord)) {
|
| 254 |
+
$this->write($batchRecord);
|
| 255 |
+
$handled = true;
|
| 256 |
+
}
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
if (!$handled) {
|
| 260 |
+
return false;
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
return false === $this->bubble;
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
/**
|
| 267 |
+
* Combines multiple records into one. Error level of the combined record
|
| 268 |
+
* will be the highest level from the given records. Datetime will be taken
|
| 269 |
+
* from the first record.
|
| 270 |
+
*
|
| 271 |
+
* @param $records
|
| 272 |
+
* @return array
|
| 273 |
+
*/
|
| 274 |
+
private function combineRecords($records)
|
| 275 |
+
{
|
| 276 |
+
$batchRecord = null;
|
| 277 |
+
$batchRecords = array();
|
| 278 |
+
$messages = array();
|
| 279 |
+
$formattedMessages = array();
|
| 280 |
+
$level = 0;
|
| 281 |
+
$levelName = null;
|
| 282 |
+
$datetime = null;
|
| 283 |
+
|
| 284 |
+
foreach ($records as $record) {
|
| 285 |
+
$record = $this->processRecord($record);
|
| 286 |
+
|
| 287 |
+
if ($record['level'] > $level) {
|
| 288 |
+
$level = $record['level'];
|
| 289 |
+
$levelName = $record['level_name'];
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
if (null === $datetime) {
|
| 293 |
+
$datetime = $record['datetime'];
|
| 294 |
+
}
|
| 295 |
+
|
| 296 |
+
$messages[] = $record['message'];
|
| 297 |
+
$messageStr = implode(PHP_EOL, $messages);
|
| 298 |
+
$formattedMessages[] = $this->getFormatter()->format($record);
|
| 299 |
+
$formattedMessageStr = implode('', $formattedMessages);
|
| 300 |
+
|
| 301 |
+
$batchRecord = array(
|
| 302 |
+
'message' => $messageStr,
|
| 303 |
+
'formatted' => $formattedMessageStr,
|
| 304 |
+
'context' => array(),
|
| 305 |
+
'extra' => array(),
|
| 306 |
+
);
|
| 307 |
+
|
| 308 |
+
if (!$this->validateStringLength($batchRecord['formatted'], static::MAXIMUM_MESSAGE_LENGTH)) {
|
| 309 |
+
// Pop the last message and implode the remaining messages
|
| 310 |
+
$lastMessage = array_pop($messages);
|
| 311 |
+
$lastFormattedMessage = array_pop($formattedMessages);
|
| 312 |
+
$batchRecord['message'] = implode(PHP_EOL, $messages);
|
| 313 |
+
$batchRecord['formatted'] = implode('', $formattedMessages);
|
| 314 |
+
|
| 315 |
+
$batchRecords[] = $batchRecord;
|
| 316 |
+
$messages = array($lastMessage);
|
| 317 |
+
$formattedMessages = array($lastFormattedMessage);
|
| 318 |
+
|
| 319 |
+
$batchRecord = null;
|
| 320 |
+
}
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
if (null !== $batchRecord) {
|
| 324 |
+
$batchRecords[] = $batchRecord;
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
// Set the max level and datetime for all records
|
| 328 |
+
foreach ($batchRecords as &$batchRecord) {
|
| 329 |
+
$batchRecord = array_merge(
|
| 330 |
+
$batchRecord,
|
| 331 |
+
array(
|
| 332 |
+
'level' => $level,
|
| 333 |
+
'level_name' => $levelName,
|
| 334 |
+
'datetime' => $datetime,
|
| 335 |
+
)
|
| 336 |
+
);
|
| 337 |
+
}
|
| 338 |
+
|
| 339 |
+
return $batchRecords;
|
| 340 |
+
}
|
| 341 |
+
|
| 342 |
+
/**
|
| 343 |
+
* Validates the length of a string.
|
| 344 |
+
*
|
| 345 |
+
* If the `mb_strlen()` function is available, it will use that, as HipChat
|
| 346 |
+
* allows UTF-8 characters. Otherwise, it will fall back to `strlen()`.
|
| 347 |
+
*
|
| 348 |
+
* Note that this might cause false failures in the specific case of using
|
| 349 |
+
* a valid name with less than 16 characters, but 16 or more bytes, on a
|
| 350 |
+
* system where `mb_strlen()` is unavailable.
|
| 351 |
+
*
|
| 352 |
+
* @param string $str
|
| 353 |
+
* @param int $length
|
| 354 |
+
*
|
| 355 |
+
* @return bool
|
| 356 |
+
*/
|
| 357 |
+
private function validateStringLength($str, $length)
|
| 358 |
+
{
|
| 359 |
+
if (function_exists('mb_strlen')) {
|
| 360 |
+
return (mb_strlen($str) <= $length);
|
| 361 |
+
}
|
| 362 |
+
|
| 363 |
+
return (strlen($str) <= $length);
|
| 364 |
+
}
|
| 365 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* IFTTTHandler uses cURL to trigger IFTTT Maker actions
|
| 18 |
+
*
|
| 19 |
+
* Register a secret key and trigger/event name at https://ifttt.com/maker
|
| 20 |
+
*
|
| 21 |
+
* value1 will be the channel from monolog's Logger constructor,
|
| 22 |
+
* value2 will be the level name (ERROR, WARNING, ..)
|
| 23 |
+
* value3 will be the log record's message
|
| 24 |
+
*
|
| 25 |
+
* @author Nehal Patel <nehal@nehalpatel.me>
|
| 26 |
+
*/
|
| 27 |
+
class IFTTTHandler extends AbstractProcessingHandler
|
| 28 |
+
{
|
| 29 |
+
private $eventName;
|
| 30 |
+
private $secretKey;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @param string $eventName The name of the IFTTT Maker event that should be triggered
|
| 34 |
+
* @param string $secretKey A valid IFTTT secret key
|
| 35 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 36 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 37 |
+
*/
|
| 38 |
+
public function __construct($eventName, $secretKey, $level = Logger::ERROR, $bubble = true)
|
| 39 |
+
{
|
| 40 |
+
$this->eventName = $eventName;
|
| 41 |
+
$this->secretKey = $secretKey;
|
| 42 |
+
|
| 43 |
+
parent::__construct($level, $bubble);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* {@inheritdoc}
|
| 48 |
+
*/
|
| 49 |
+
public function write(array $record)
|
| 50 |
+
{
|
| 51 |
+
$postData = array(
|
| 52 |
+
"value1" => $record["channel"],
|
| 53 |
+
"value2" => $record["level_name"],
|
| 54 |
+
"value3" => $record["message"],
|
| 55 |
+
);
|
| 56 |
+
$postString = json_encode($postData);
|
| 57 |
+
|
| 58 |
+
$ch = curl_init();
|
| 59 |
+
curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey);
|
| 60 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
| 61 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| 62 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
|
| 63 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
|
| 64 |
+
"Content-Type: application/json",
|
| 65 |
+
));
|
| 66 |
+
|
| 67 |
+
Curl\Util::execute($ch);
|
| 68 |
+
}
|
| 69 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Inspired on LogEntriesHandler.
|
| 18 |
+
*
|
| 19 |
+
* @author Robert Kaufmann III <rok3@rok3.me>
|
| 20 |
+
* @author Gabriel Machado <gabriel.ms1@hotmail.com>
|
| 21 |
+
*/
|
| 22 |
+
class InsightOpsHandler extends SocketHandler
|
| 23 |
+
{
|
| 24 |
+
/**
|
| 25 |
+
* @var string
|
| 26 |
+
*/
|
| 27 |
+
protected $logToken;
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* @param string $token Log token supplied by InsightOps
|
| 31 |
+
* @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'.
|
| 32 |
+
* @param bool $useSSL Whether or not SSL encryption should be used
|
| 33 |
+
* @param int $level The minimum logging level to trigger this handler
|
| 34 |
+
* @param bool $bubble Whether or not messages that are handled should bubble up the stack.
|
| 35 |
+
*
|
| 36 |
+
* @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing
|
| 37 |
+
*/
|
| 38 |
+
public function __construct($token, $region = 'us', $useSSL = true, $level = Logger::DEBUG, $bubble = true)
|
| 39 |
+
{
|
| 40 |
+
if ($useSSL && !extension_loaded('openssl')) {
|
| 41 |
+
throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler');
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
$endpoint = $useSSL
|
| 45 |
+
? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443'
|
| 46 |
+
: $region . '.data.logs.insight.rapid7.com:80';
|
| 47 |
+
|
| 48 |
+
parent::__construct($endpoint, $level, $bubble);
|
| 49 |
+
$this->logToken = $token;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* {@inheritdoc}
|
| 54 |
+
*
|
| 55 |
+
* @param array $record
|
| 56 |
+
* @return string
|
| 57 |
+
*/
|
| 58 |
+
protected function generateDataStream($record)
|
| 59 |
+
{
|
| 60 |
+
return $this->logToken . ' ' . $record['formatted'];
|
| 61 |
+
}
|
| 62 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* @author Robert Kaufmann III <rok3@rok3.me>
|
| 18 |
+
*/
|
| 19 |
+
class LogEntriesHandler extends SocketHandler
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @var string
|
| 23 |
+
*/
|
| 24 |
+
protected $logToken;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @param string $token Log token supplied by LogEntries
|
| 28 |
+
* @param bool $useSSL Whether or not SSL encryption should be used.
|
| 29 |
+
* @param int $level The minimum logging level to trigger this handler
|
| 30 |
+
* @param bool $bubble Whether or not messages that are handled should bubble up the stack.
|
| 31 |
+
*
|
| 32 |
+
* @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing
|
| 33 |
+
*/
|
| 34 |
+
public function __construct($token, $useSSL = true, $level = Logger::DEBUG, $bubble = true, $host = 'data.logentries.com')
|
| 35 |
+
{
|
| 36 |
+
if ($useSSL && !extension_loaded('openssl')) {
|
| 37 |
+
throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler');
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
$endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80';
|
| 41 |
+
parent::__construct($endpoint, $level, $bubble);
|
| 42 |
+
$this->logToken = $token;
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
/**
|
| 46 |
+
* {@inheritdoc}
|
| 47 |
+
*
|
| 48 |
+
* @param array $record
|
| 49 |
+
* @return string
|
| 50 |
+
*/
|
| 51 |
+
protected function generateDataStream($record)
|
| 52 |
+
{
|
| 53 |
+
return $this->logToken . ' ' . $record['formatted'];
|
| 54 |
+
}
|
| 55 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\LogglyFormatter;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Sends errors to Loggly.
|
| 19 |
+
*
|
| 20 |
+
* @author Przemek Sobstel <przemek@sobstel.org>
|
| 21 |
+
* @author Adam Pancutt <adam@pancutt.com>
|
| 22 |
+
* @author Gregory Barchard <gregory@barchard.net>
|
| 23 |
+
*/
|
| 24 |
+
class LogglyHandler extends AbstractProcessingHandler
|
| 25 |
+
{
|
| 26 |
+
const HOST = 'logs-01.loggly.com';
|
| 27 |
+
const ENDPOINT_SINGLE = 'inputs';
|
| 28 |
+
const ENDPOINT_BATCH = 'bulk';
|
| 29 |
+
|
| 30 |
+
protected $token;
|
| 31 |
+
|
| 32 |
+
protected $tag = array();
|
| 33 |
+
|
| 34 |
+
public function __construct($token, $level = Logger::DEBUG, $bubble = true)
|
| 35 |
+
{
|
| 36 |
+
if (!extension_loaded('curl')) {
|
| 37 |
+
throw new \LogicException('The curl extension is needed to use the LogglyHandler');
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
$this->token = $token;
|
| 41 |
+
|
| 42 |
+
parent::__construct($level, $bubble);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
public function setTag($tag)
|
| 46 |
+
{
|
| 47 |
+
$tag = !empty($tag) ? $tag : array();
|
| 48 |
+
$this->tag = is_array($tag) ? $tag : array($tag);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
public function addTag($tag)
|
| 52 |
+
{
|
| 53 |
+
if (!empty($tag)) {
|
| 54 |
+
$tag = is_array($tag) ? $tag : array($tag);
|
| 55 |
+
$this->tag = array_unique(array_merge($this->tag, $tag));
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
protected function write(array $record)
|
| 60 |
+
{
|
| 61 |
+
$this->send($record["formatted"], self::ENDPOINT_SINGLE);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
public function handleBatch(array $records)
|
| 65 |
+
{
|
| 66 |
+
$level = $this->level;
|
| 67 |
+
|
| 68 |
+
$records = array_filter($records, function ($record) use ($level) {
|
| 69 |
+
return ($record['level'] >= $level);
|
| 70 |
+
});
|
| 71 |
+
|
| 72 |
+
if ($records) {
|
| 73 |
+
$this->send($this->getFormatter()->formatBatch($records), self::ENDPOINT_BATCH);
|
| 74 |
+
}
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
protected function send($data, $endpoint)
|
| 78 |
+
{
|
| 79 |
+
$url = sprintf("https://%s/%s/%s/", self::HOST, $endpoint, $this->token);
|
| 80 |
+
|
| 81 |
+
$headers = array('Content-Type: application/json');
|
| 82 |
+
|
| 83 |
+
if (!empty($this->tag)) {
|
| 84 |
+
$headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag);
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
$ch = curl_init();
|
| 88 |
+
|
| 89 |
+
curl_setopt($ch, CURLOPT_URL, $url);
|
| 90 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
| 91 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
| 92 |
+
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
| 93 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| 94 |
+
|
| 95 |
+
Curl\Util::execute($ch);
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
protected function getDefaultFormatter()
|
| 99 |
+
{
|
| 100 |
+
return new LogglyFormatter();
|
| 101 |
+
}
|
| 102 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Base class for all mail handlers
|
| 16 |
+
*
|
| 17 |
+
* @author Gyula Sallai
|
| 18 |
+
*/
|
| 19 |
+
abstract class MailHandler extends AbstractProcessingHandler
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* {@inheritdoc}
|
| 23 |
+
*/
|
| 24 |
+
public function handleBatch(array $records)
|
| 25 |
+
{
|
| 26 |
+
$messages = array();
|
| 27 |
+
|
| 28 |
+
foreach ($records as $record) {
|
| 29 |
+
if ($record['level'] < $this->level) {
|
| 30 |
+
continue;
|
| 31 |
+
}
|
| 32 |
+
$messages[] = $this->processRecord($record);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
if (!empty($messages)) {
|
| 36 |
+
$this->send((string) $this->getFormatter()->formatBatch($messages), $messages);
|
| 37 |
+
}
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* Send a mail with the given content
|
| 42 |
+
*
|
| 43 |
+
* @param string $content formatted email body to be sent
|
| 44 |
+
* @param array $records the array of log records that formed this content
|
| 45 |
+
*/
|
| 46 |
+
abstract protected function send($content, array $records);
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* {@inheritdoc}
|
| 50 |
+
*/
|
| 51 |
+
protected function write(array $record)
|
| 52 |
+
{
|
| 53 |
+
$this->send((string) $record['formatted'], array($record));
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
protected function getHighestRecord(array $records)
|
| 57 |
+
{
|
| 58 |
+
$highestRecord = null;
|
| 59 |
+
foreach ($records as $record) {
|
| 60 |
+
if ($highestRecord === null || $highestRecord['level'] < $record['level']) {
|
| 61 |
+
$highestRecord = $record;
|
| 62 |
+
}
|
| 63 |
+
}
|
| 64 |
+
|
| 65 |
+
return $highestRecord;
|
| 66 |
+
}
|
| 67 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* MandrillHandler uses cURL to send the emails to the Mandrill API
|
| 18 |
+
*
|
| 19 |
+
* @author Adam Nicholson <adamnicholson10@gmail.com>
|
| 20 |
+
*/
|
| 21 |
+
class MandrillHandler extends MailHandler
|
| 22 |
+
{
|
| 23 |
+
protected $message;
|
| 24 |
+
protected $apiKey;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @param string $apiKey A valid Mandrill API key
|
| 28 |
+
* @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced
|
| 29 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 30 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 31 |
+
*/
|
| 32 |
+
public function __construct($apiKey, $message, $level = Logger::ERROR, $bubble = true)
|
| 33 |
+
{
|
| 34 |
+
parent::__construct($level, $bubble);
|
| 35 |
+
|
| 36 |
+
if (!$message instanceof \Swift_Message && is_callable($message)) {
|
| 37 |
+
$message = call_user_func($message);
|
| 38 |
+
}
|
| 39 |
+
if (!$message instanceof \Swift_Message) {
|
| 40 |
+
throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it');
|
| 41 |
+
}
|
| 42 |
+
$this->message = $message;
|
| 43 |
+
$this->apiKey = $apiKey;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* {@inheritdoc}
|
| 48 |
+
*/
|
| 49 |
+
protected function send($content, array $records)
|
| 50 |
+
{
|
| 51 |
+
$message = clone $this->message;
|
| 52 |
+
$message->setBody($content);
|
| 53 |
+
$message->setDate(time());
|
| 54 |
+
|
| 55 |
+
$ch = curl_init();
|
| 56 |
+
|
| 57 |
+
curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json');
|
| 58 |
+
curl_setopt($ch, CURLOPT_POST, 1);
|
| 59 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
| 60 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array(
|
| 61 |
+
'key' => $this->apiKey,
|
| 62 |
+
'raw_message' => (string) $message,
|
| 63 |
+
'async' => false,
|
| 64 |
+
)));
|
| 65 |
+
|
| 66 |
+
Curl\Util::execute($ch);
|
| 67 |
+
}
|
| 68 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Exception can be thrown if an extension for an handler is missing
|
| 16 |
+
*
|
| 17 |
+
* @author Christian Bergau <cbergau86@gmail.com>
|
| 18 |
+
*/
|
| 19 |
+
class MissingExtensionException extends \Exception
|
| 20 |
+
{
|
| 21 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\NormalizerFormatter;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Logs to a MongoDB database.
|
| 19 |
+
*
|
| 20 |
+
* usage example:
|
| 21 |
+
*
|
| 22 |
+
* $log = new Logger('application');
|
| 23 |
+
* $mongodb = new MongoDBHandler(new \Mongo("mongodb://localhost:27017"), "logs", "prod");
|
| 24 |
+
* $log->pushHandler($mongodb);
|
| 25 |
+
*
|
| 26 |
+
* @author Thomas Tourlourat <thomas@tourlourat.com>
|
| 27 |
+
*/
|
| 28 |
+
class MongoDBHandler extends AbstractProcessingHandler
|
| 29 |
+
{
|
| 30 |
+
protected $mongoCollection;
|
| 31 |
+
|
| 32 |
+
public function __construct($mongo, $database, $collection, $level = Logger::DEBUG, $bubble = true)
|
| 33 |
+
{
|
| 34 |
+
if (!($mongo instanceof \MongoClient || $mongo instanceof \Mongo || $mongo instanceof \MongoDB\Client)) {
|
| 35 |
+
throw new \InvalidArgumentException('MongoClient, Mongo or MongoDB\Client instance required');
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
$this->mongoCollection = $mongo->selectCollection($database, $collection);
|
| 39 |
+
|
| 40 |
+
parent::__construct($level, $bubble);
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
protected function write(array $record)
|
| 44 |
+
{
|
| 45 |
+
if ($this->mongoCollection instanceof \MongoDB\Collection) {
|
| 46 |
+
$this->mongoCollection->insertOne($record["formatted"]);
|
| 47 |
+
} else {
|
| 48 |
+
$this->mongoCollection->save($record["formatted"]);
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* {@inheritDoc}
|
| 54 |
+
*/
|
| 55 |
+
protected function getDefaultFormatter()
|
| 56 |
+
{
|
| 57 |
+
return new NormalizerFormatter();
|
| 58 |
+
}
|
| 59 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\LineFormatter;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* NativeMailerHandler uses the mail() function to send the emails
|
| 19 |
+
*
|
| 20 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 21 |
+
* @author Mark Garrett <mark@moderndeveloperllc.com>
|
| 22 |
+
*/
|
| 23 |
+
class NativeMailerHandler extends MailHandler
|
| 24 |
+
{
|
| 25 |
+
/**
|
| 26 |
+
* The email addresses to which the message will be sent
|
| 27 |
+
* @var array
|
| 28 |
+
*/
|
| 29 |
+
protected $to;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* The subject of the email
|
| 33 |
+
* @var string
|
| 34 |
+
*/
|
| 35 |
+
protected $subject;
|
| 36 |
+
|
| 37 |
+
/**
|
| 38 |
+
* Optional headers for the message
|
| 39 |
+
* @var array
|
| 40 |
+
*/
|
| 41 |
+
protected $headers = array();
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* Optional parameters for the message
|
| 45 |
+
* @var array
|
| 46 |
+
*/
|
| 47 |
+
protected $parameters = array();
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* The wordwrap length for the message
|
| 51 |
+
* @var int
|
| 52 |
+
*/
|
| 53 |
+
protected $maxColumnWidth;
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* The Content-type for the message
|
| 57 |
+
* @var string
|
| 58 |
+
*/
|
| 59 |
+
protected $contentType = 'text/plain';
|
| 60 |
+
|
| 61 |
+
/**
|
| 62 |
+
* The encoding for the message
|
| 63 |
+
* @var string
|
| 64 |
+
*/
|
| 65 |
+
protected $encoding = 'utf-8';
|
| 66 |
+
|
| 67 |
+
/**
|
| 68 |
+
* @param string|array $to The receiver of the mail
|
| 69 |
+
* @param string $subject The subject of the mail
|
| 70 |
+
* @param string $from The sender of the mail
|
| 71 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 72 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 73 |
+
* @param int $maxColumnWidth The maximum column width that the message lines will have
|
| 74 |
+
*/
|
| 75 |
+
public function __construct($to, $subject, $from, $level = Logger::ERROR, $bubble = true, $maxColumnWidth = 70)
|
| 76 |
+
{
|
| 77 |
+
parent::__construct($level, $bubble);
|
| 78 |
+
$this->to = is_array($to) ? $to : array($to);
|
| 79 |
+
$this->subject = $subject;
|
| 80 |
+
$this->addHeader(sprintf('From: %s', $from));
|
| 81 |
+
$this->maxColumnWidth = $maxColumnWidth;
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Add headers to the message
|
| 86 |
+
*
|
| 87 |
+
* @param string|array $headers Custom added headers
|
| 88 |
+
* @return self
|
| 89 |
+
*/
|
| 90 |
+
public function addHeader($headers)
|
| 91 |
+
{
|
| 92 |
+
foreach ((array) $headers as $header) {
|
| 93 |
+
if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) {
|
| 94 |
+
throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons');
|
| 95 |
+
}
|
| 96 |
+
$this->headers[] = $header;
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
return $this;
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
/**
|
| 103 |
+
* Add parameters to the message
|
| 104 |
+
*
|
| 105 |
+
* @param string|array $parameters Custom added parameters
|
| 106 |
+
* @return self
|
| 107 |
+
*/
|
| 108 |
+
public function addParameter($parameters)
|
| 109 |
+
{
|
| 110 |
+
$this->parameters = array_merge($this->parameters, (array) $parameters);
|
| 111 |
+
|
| 112 |
+
return $this;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
/**
|
| 116 |
+
* {@inheritdoc}
|
| 117 |
+
*/
|
| 118 |
+
protected function send($content, array $records)
|
| 119 |
+
{
|
| 120 |
+
$content = wordwrap($content, $this->maxColumnWidth);
|
| 121 |
+
$headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n");
|
| 122 |
+
$headers .= 'Content-type: ' . $this->getContentType() . '; charset=' . $this->getEncoding() . "\r\n";
|
| 123 |
+
if ($this->getContentType() == 'text/html' && false === strpos($headers, 'MIME-Version:')) {
|
| 124 |
+
$headers .= 'MIME-Version: 1.0' . "\r\n";
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
$subject = $this->subject;
|
| 128 |
+
if ($records) {
|
| 129 |
+
$subjectFormatter = new LineFormatter($this->subject);
|
| 130 |
+
$subject = $subjectFormatter->format($this->getHighestRecord($records));
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
$parameters = implode(' ', $this->parameters);
|
| 134 |
+
foreach ($this->to as $to) {
|
| 135 |
+
mail($to, $subject, $content, $headers, $parameters);
|
| 136 |
+
}
|
| 137 |
+
}
|
| 138 |
+
|
| 139 |
+
/**
|
| 140 |
+
* @return string $contentType
|
| 141 |
+
*/
|
| 142 |
+
public function getContentType()
|
| 143 |
+
{
|
| 144 |
+
return $this->contentType;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
/**
|
| 148 |
+
* @return string $encoding
|
| 149 |
+
*/
|
| 150 |
+
public function getEncoding()
|
| 151 |
+
{
|
| 152 |
+
return $this->encoding;
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
/**
|
| 156 |
+
* @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML
|
| 157 |
+
* messages.
|
| 158 |
+
* @return self
|
| 159 |
+
*/
|
| 160 |
+
public function setContentType($contentType)
|
| 161 |
+
{
|
| 162 |
+
if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) {
|
| 163 |
+
throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection');
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
$this->contentType = $contentType;
|
| 167 |
+
|
| 168 |
+
return $this;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
/**
|
| 172 |
+
* @param string $encoding
|
| 173 |
+
* @return self
|
| 174 |
+
*/
|
| 175 |
+
public function setEncoding($encoding)
|
| 176 |
+
{
|
| 177 |
+
if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) {
|
| 178 |
+
throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection');
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
$this->encoding = $encoding;
|
| 182 |
+
|
| 183 |
+
return $this;
|
| 184 |
+
}
|
| 185 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\NormalizerFormatter;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Class to record a log on a NewRelic application.
|
| 19 |
+
* Enabling New Relic High Security mode may prevent capture of useful information.
|
| 20 |
+
*
|
| 21 |
+
* This handler requires a NormalizerFormatter to function and expects an array in $record['formatted']
|
| 22 |
+
*
|
| 23 |
+
* @see https://docs.newrelic.com/docs/agents/php-agent
|
| 24 |
+
* @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security
|
| 25 |
+
*/
|
| 26 |
+
class NewRelicHandler extends AbstractProcessingHandler
|
| 27 |
+
{
|
| 28 |
+
/**
|
| 29 |
+
* Name of the New Relic application that will receive logs from this handler.
|
| 30 |
+
*
|
| 31 |
+
* @var string
|
| 32 |
+
*/
|
| 33 |
+
protected $appName;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* Name of the current transaction
|
| 37 |
+
*
|
| 38 |
+
* @var string
|
| 39 |
+
*/
|
| 40 |
+
protected $transactionName;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Some context and extra data is passed into the handler as arrays of values. Do we send them as is
|
| 44 |
+
* (useful if we are using the API), or explode them for display on the NewRelic RPM website?
|
| 45 |
+
*
|
| 46 |
+
* @var bool
|
| 47 |
+
*/
|
| 48 |
+
protected $explodeArrays;
|
| 49 |
+
|
| 50 |
+
/**
|
| 51 |
+
* {@inheritDoc}
|
| 52 |
+
*
|
| 53 |
+
* @param string $appName
|
| 54 |
+
* @param bool $explodeArrays
|
| 55 |
+
* @param string $transactionName
|
| 56 |
+
*/
|
| 57 |
+
public function __construct(
|
| 58 |
+
$level = Logger::ERROR,
|
| 59 |
+
$bubble = true,
|
| 60 |
+
$appName = null,
|
| 61 |
+
$explodeArrays = false,
|
| 62 |
+
$transactionName = null
|
| 63 |
+
) {
|
| 64 |
+
parent::__construct($level, $bubble);
|
| 65 |
+
|
| 66 |
+
$this->appName = $appName;
|
| 67 |
+
$this->explodeArrays = $explodeArrays;
|
| 68 |
+
$this->transactionName = $transactionName;
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
/**
|
| 72 |
+
* {@inheritDoc}
|
| 73 |
+
*/
|
| 74 |
+
protected function write(array $record)
|
| 75 |
+
{
|
| 76 |
+
if (!$this->isNewRelicEnabled()) {
|
| 77 |
+
throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler');
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
if ($appName = $this->getAppName($record['context'])) {
|
| 81 |
+
$this->setNewRelicAppName($appName);
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
if ($transactionName = $this->getTransactionName($record['context'])) {
|
| 85 |
+
$this->setNewRelicTransactionName($transactionName);
|
| 86 |
+
unset($record['formatted']['context']['transaction_name']);
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
if (isset($record['context']['exception']) && ($record['context']['exception'] instanceof \Exception || (PHP_VERSION_ID >= 70000 && $record['context']['exception'] instanceof \Throwable))) {
|
| 90 |
+
newrelic_notice_error($record['message'], $record['context']['exception']);
|
| 91 |
+
unset($record['formatted']['context']['exception']);
|
| 92 |
+
} else {
|
| 93 |
+
newrelic_notice_error($record['message']);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
if (isset($record['formatted']['context']) && is_array($record['formatted']['context'])) {
|
| 97 |
+
foreach ($record['formatted']['context'] as $key => $parameter) {
|
| 98 |
+
if (is_array($parameter) && $this->explodeArrays) {
|
| 99 |
+
foreach ($parameter as $paramKey => $paramValue) {
|
| 100 |
+
$this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue);
|
| 101 |
+
}
|
| 102 |
+
} else {
|
| 103 |
+
$this->setNewRelicParameter('context_' . $key, $parameter);
|
| 104 |
+
}
|
| 105 |
+
}
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
if (isset($record['formatted']['extra']) && is_array($record['formatted']['extra'])) {
|
| 109 |
+
foreach ($record['formatted']['extra'] as $key => $parameter) {
|
| 110 |
+
if (is_array($parameter) && $this->explodeArrays) {
|
| 111 |
+
foreach ($parameter as $paramKey => $paramValue) {
|
| 112 |
+
$this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue);
|
| 113 |
+
}
|
| 114 |
+
} else {
|
| 115 |
+
$this->setNewRelicParameter('extra_' . $key, $parameter);
|
| 116 |
+
}
|
| 117 |
+
}
|
| 118 |
+
}
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
/**
|
| 122 |
+
* Checks whether the NewRelic extension is enabled in the system.
|
| 123 |
+
*
|
| 124 |
+
* @return bool
|
| 125 |
+
*/
|
| 126 |
+
protected function isNewRelicEnabled()
|
| 127 |
+
{
|
| 128 |
+
return extension_loaded('newrelic');
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
/**
|
| 132 |
+
* Returns the appname where this log should be sent. Each log can override the default appname, set in this
|
| 133 |
+
* handler's constructor, by providing the appname in it's context.
|
| 134 |
+
*
|
| 135 |
+
* @param array $context
|
| 136 |
+
* @return null|string
|
| 137 |
+
*/
|
| 138 |
+
protected function getAppName(array $context)
|
| 139 |
+
{
|
| 140 |
+
if (isset($context['appname'])) {
|
| 141 |
+
return $context['appname'];
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
return $this->appName;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
/**
|
| 148 |
+
* Returns the name of the current transaction. Each log can override the default transaction name, set in this
|
| 149 |
+
* handler's constructor, by providing the transaction_name in it's context
|
| 150 |
+
*
|
| 151 |
+
* @param array $context
|
| 152 |
+
*
|
| 153 |
+
* @return null|string
|
| 154 |
+
*/
|
| 155 |
+
protected function getTransactionName(array $context)
|
| 156 |
+
{
|
| 157 |
+
if (isset($context['transaction_name'])) {
|
| 158 |
+
return $context['transaction_name'];
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
return $this->transactionName;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
/**
|
| 165 |
+
* Sets the NewRelic application that should receive this log.
|
| 166 |
+
*
|
| 167 |
+
* @param string $appName
|
| 168 |
+
*/
|
| 169 |
+
protected function setNewRelicAppName($appName)
|
| 170 |
+
{
|
| 171 |
+
newrelic_set_appname($appName);
|
| 172 |
+
}
|
| 173 |
+
|
| 174 |
+
/**
|
| 175 |
+
* Overwrites the name of the current transaction
|
| 176 |
+
*
|
| 177 |
+
* @param string $transactionName
|
| 178 |
+
*/
|
| 179 |
+
protected function setNewRelicTransactionName($transactionName)
|
| 180 |
+
{
|
| 181 |
+
newrelic_name_transaction($transactionName);
|
| 182 |
+
}
|
| 183 |
+
|
| 184 |
+
/**
|
| 185 |
+
* @param string $key
|
| 186 |
+
* @param mixed $value
|
| 187 |
+
*/
|
| 188 |
+
protected function setNewRelicParameter($key, $value)
|
| 189 |
+
{
|
| 190 |
+
if (null === $value || is_scalar($value)) {
|
| 191 |
+
newrelic_add_custom_parameter($key, $value);
|
| 192 |
+
} else {
|
| 193 |
+
newrelic_add_custom_parameter($key, @json_encode($value));
|
| 194 |
+
}
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
/**
|
| 198 |
+
* {@inheritDoc}
|
| 199 |
+
*/
|
| 200 |
+
protected function getDefaultFormatter()
|
| 201 |
+
{
|
| 202 |
+
return new NormalizerFormatter();
|
| 203 |
+
}
|
| 204 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Blackhole
|
| 18 |
+
*
|
| 19 |
+
* Any record it can handle will be thrown away. This can be used
|
| 20 |
+
* to put on top of an existing stack to override it temporarily.
|
| 21 |
+
*
|
| 22 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 23 |
+
*/
|
| 24 |
+
class NullHandler extends AbstractHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 28 |
+
*/
|
| 29 |
+
public function __construct($level = Logger::DEBUG)
|
| 30 |
+
{
|
| 31 |
+
parent::__construct($level, false);
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* {@inheritdoc}
|
| 36 |
+
*/
|
| 37 |
+
public function handle(array $record)
|
| 38 |
+
{
|
| 39 |
+
if ($record['level'] < $this->level) {
|
| 40 |
+
return false;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
return true;
|
| 44 |
+
}
|
| 45 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php
ADDED
|
@@ -0,0 +1,242 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Exception;
|
| 15 |
+
use Monolog\Formatter\LineFormatter;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
use PhpConsole\Connector;
|
| 18 |
+
use PhpConsole\Handler;
|
| 19 |
+
use PhpConsole\Helper;
|
| 20 |
+
|
| 21 |
+
/**
|
| 22 |
+
* Monolog handler for Google Chrome extension "PHP Console"
|
| 23 |
+
*
|
| 24 |
+
* Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely
|
| 25 |
+
*
|
| 26 |
+
* Usage:
|
| 27 |
+
* 1. Install Google Chrome extension https://chrome.google.com/webstore/detail/php-console/nfhmhhlpfleoednkpnnnkolmclajemef
|
| 28 |
+
* 2. See overview https://github.com/barbushin/php-console#overview
|
| 29 |
+
* 3. Install PHP Console library https://github.com/barbushin/php-console#installation
|
| 30 |
+
* 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png)
|
| 31 |
+
*
|
| 32 |
+
* $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler()));
|
| 33 |
+
* \Monolog\ErrorHandler::register($logger);
|
| 34 |
+
* echo $undefinedVar;
|
| 35 |
+
* $logger->addDebug('SELECT * FROM users', array('db', 'time' => 0.012));
|
| 36 |
+
* PC::debug($_SERVER); // PHP Console debugger for any type of vars
|
| 37 |
+
*
|
| 38 |
+
* @author Sergey Barbushin https://www.linkedin.com/in/barbushin
|
| 39 |
+
*/
|
| 40 |
+
class PHPConsoleHandler extends AbstractProcessingHandler
|
| 41 |
+
{
|
| 42 |
+
private $options = array(
|
| 43 |
+
'enabled' => true, // bool Is PHP Console server enabled
|
| 44 |
+
'classesPartialsTraceIgnore' => array('Monolog\\'), // array Hide calls of classes started with...
|
| 45 |
+
'debugTagsKeysInContext' => array(0, 'tag'), // bool Is PHP Console server enabled
|
| 46 |
+
'useOwnErrorsHandler' => false, // bool Enable errors handling
|
| 47 |
+
'useOwnExceptionsHandler' => false, // bool Enable exceptions handling
|
| 48 |
+
'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths
|
| 49 |
+
'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s')
|
| 50 |
+
'serverEncoding' => null, // string|null Server internal encoding
|
| 51 |
+
'headersLimit' => null, // int|null Set headers size limit for your web-server
|
| 52 |
+
'password' => null, // string|null Protect PHP Console connection by password
|
| 53 |
+
'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed
|
| 54 |
+
'ipMasks' => array(), // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1')
|
| 55 |
+
'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required)
|
| 56 |
+
'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings
|
| 57 |
+
'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level
|
| 58 |
+
'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number
|
| 59 |
+
'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item
|
| 60 |
+
'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON
|
| 61 |
+
'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug
|
| 62 |
+
'dataStorage' => null, // PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ)
|
| 63 |
+
);
|
| 64 |
+
|
| 65 |
+
/** @var Connector */
|
| 66 |
+
private $connector;
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details
|
| 70 |
+
* @param Connector|null $connector Instance of \PhpConsole\Connector class (optional)
|
| 71 |
+
* @param int $level
|
| 72 |
+
* @param bool $bubble
|
| 73 |
+
* @throws Exception
|
| 74 |
+
*/
|
| 75 |
+
public function __construct(array $options = array(), Connector $connector = null, $level = Logger::DEBUG, $bubble = true)
|
| 76 |
+
{
|
| 77 |
+
if (!class_exists('PhpConsole\Connector')) {
|
| 78 |
+
throw new Exception('PHP Console library not found. See https://github.com/barbushin/php-console#installation');
|
| 79 |
+
}
|
| 80 |
+
parent::__construct($level, $bubble);
|
| 81 |
+
$this->options = $this->initOptions($options);
|
| 82 |
+
$this->connector = $this->initConnector($connector);
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
private function initOptions(array $options)
|
| 86 |
+
{
|
| 87 |
+
$wrongOptions = array_diff(array_keys($options), array_keys($this->options));
|
| 88 |
+
if ($wrongOptions) {
|
| 89 |
+
throw new Exception('Unknown options: ' . implode(', ', $wrongOptions));
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
return array_replace($this->options, $options);
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
private function initConnector(Connector $connector = null)
|
| 96 |
+
{
|
| 97 |
+
if (!$connector) {
|
| 98 |
+
if ($this->options['dataStorage']) {
|
| 99 |
+
Connector::setPostponeStorage($this->options['dataStorage']);
|
| 100 |
+
}
|
| 101 |
+
$connector = Connector::getInstance();
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
if ($this->options['registerHelper'] && !Helper::isRegistered()) {
|
| 105 |
+
Helper::register();
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
if ($this->options['enabled'] && $connector->isActiveClient()) {
|
| 109 |
+
if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) {
|
| 110 |
+
$handler = Handler::getInstance();
|
| 111 |
+
$handler->setHandleErrors($this->options['useOwnErrorsHandler']);
|
| 112 |
+
$handler->setHandleExceptions($this->options['useOwnExceptionsHandler']);
|
| 113 |
+
$handler->start();
|
| 114 |
+
}
|
| 115 |
+
if ($this->options['sourcesBasePath']) {
|
| 116 |
+
$connector->setSourcesBasePath($this->options['sourcesBasePath']);
|
| 117 |
+
}
|
| 118 |
+
if ($this->options['serverEncoding']) {
|
| 119 |
+
$connector->setServerEncoding($this->options['serverEncoding']);
|
| 120 |
+
}
|
| 121 |
+
if ($this->options['password']) {
|
| 122 |
+
$connector->setPassword($this->options['password']);
|
| 123 |
+
}
|
| 124 |
+
if ($this->options['enableSslOnlyMode']) {
|
| 125 |
+
$connector->enableSslOnlyMode();
|
| 126 |
+
}
|
| 127 |
+
if ($this->options['ipMasks']) {
|
| 128 |
+
$connector->setAllowedIpMasks($this->options['ipMasks']);
|
| 129 |
+
}
|
| 130 |
+
if ($this->options['headersLimit']) {
|
| 131 |
+
$connector->setHeadersLimit($this->options['headersLimit']);
|
| 132 |
+
}
|
| 133 |
+
if ($this->options['detectDumpTraceAndSource']) {
|
| 134 |
+
$connector->getDebugDispatcher()->detectTraceAndSource = true;
|
| 135 |
+
}
|
| 136 |
+
$dumper = $connector->getDumper();
|
| 137 |
+
$dumper->levelLimit = $this->options['dumperLevelLimit'];
|
| 138 |
+
$dumper->itemsCountLimit = $this->options['dumperItemsCountLimit'];
|
| 139 |
+
$dumper->itemSizeLimit = $this->options['dumperItemSizeLimit'];
|
| 140 |
+
$dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit'];
|
| 141 |
+
$dumper->detectCallbacks = $this->options['dumperDetectCallbacks'];
|
| 142 |
+
if ($this->options['enableEvalListener']) {
|
| 143 |
+
$connector->startEvalRequestsListener();
|
| 144 |
+
}
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
return $connector;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
public function getConnector()
|
| 151 |
+
{
|
| 152 |
+
return $this->connector;
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
public function getOptions()
|
| 156 |
+
{
|
| 157 |
+
return $this->options;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
public function handle(array $record)
|
| 161 |
+
{
|
| 162 |
+
if ($this->options['enabled'] && $this->connector->isActiveClient()) {
|
| 163 |
+
return parent::handle($record);
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
return !$this->bubble;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
/**
|
| 170 |
+
* Writes the record down to the log of the implementing handler
|
| 171 |
+
*
|
| 172 |
+
* @param array $record
|
| 173 |
+
* @return void
|
| 174 |
+
*/
|
| 175 |
+
protected function write(array $record)
|
| 176 |
+
{
|
| 177 |
+
if ($record['level'] < Logger::NOTICE) {
|
| 178 |
+
$this->handleDebugRecord($record);
|
| 179 |
+
} elseif (isset($record['context']['exception']) && $record['context']['exception'] instanceof Exception) {
|
| 180 |
+
$this->handleExceptionRecord($record);
|
| 181 |
+
} else {
|
| 182 |
+
$this->handleErrorRecord($record);
|
| 183 |
+
}
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
private function handleDebugRecord(array $record)
|
| 187 |
+
{
|
| 188 |
+
$tags = $this->getRecordTags($record);
|
| 189 |
+
$message = $record['message'];
|
| 190 |
+
if ($record['context']) {
|
| 191 |
+
$message .= ' ' . json_encode($this->connector->getDumper()->dump(array_filter($record['context'])));
|
| 192 |
+
}
|
| 193 |
+
$this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']);
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
private function handleExceptionRecord(array $record)
|
| 197 |
+
{
|
| 198 |
+
$this->connector->getErrorsDispatcher()->dispatchException($record['context']['exception']);
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
private function handleErrorRecord(array $record)
|
| 202 |
+
{
|
| 203 |
+
$context = $record['context'];
|
| 204 |
+
|
| 205 |
+
$this->connector->getErrorsDispatcher()->dispatchError(
|
| 206 |
+
isset($context['code']) ? $context['code'] : null,
|
| 207 |
+
isset($context['message']) ? $context['message'] : $record['message'],
|
| 208 |
+
isset($context['file']) ? $context['file'] : null,
|
| 209 |
+
isset($context['line']) ? $context['line'] : null,
|
| 210 |
+
$this->options['classesPartialsTraceIgnore']
|
| 211 |
+
);
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
private function getRecordTags(array &$record)
|
| 215 |
+
{
|
| 216 |
+
$tags = null;
|
| 217 |
+
if (!empty($record['context'])) {
|
| 218 |
+
$context = & $record['context'];
|
| 219 |
+
foreach ($this->options['debugTagsKeysInContext'] as $key) {
|
| 220 |
+
if (!empty($context[$key])) {
|
| 221 |
+
$tags = $context[$key];
|
| 222 |
+
if ($key === 0) {
|
| 223 |
+
array_shift($context);
|
| 224 |
+
} else {
|
| 225 |
+
unset($context[$key]);
|
| 226 |
+
}
|
| 227 |
+
break;
|
| 228 |
+
}
|
| 229 |
+
}
|
| 230 |
+
}
|
| 231 |
+
|
| 232 |
+
return $tags ?: strtolower($record['level_name']);
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
/**
|
| 236 |
+
* {@inheritDoc}
|
| 237 |
+
*/
|
| 238 |
+
protected function getDefaultFormatter()
|
| 239 |
+
{
|
| 240 |
+
return new LineFormatter('%message%');
|
| 241 |
+
}
|
| 242 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Psr\Log\LoggerInterface;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Proxies log messages to an existing PSR-3 compliant logger.
|
| 19 |
+
*
|
| 20 |
+
* @author Michael Moussa <michael.moussa@gmail.com>
|
| 21 |
+
*/
|
| 22 |
+
class PsrHandler extends AbstractHandler
|
| 23 |
+
{
|
| 24 |
+
/**
|
| 25 |
+
* PSR-3 compliant logger
|
| 26 |
+
*
|
| 27 |
+
* @var LoggerInterface
|
| 28 |
+
*/
|
| 29 |
+
protected $logger;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied
|
| 33 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 34 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 35 |
+
*/
|
| 36 |
+
public function __construct(LoggerInterface $logger, $level = Logger::DEBUG, $bubble = true)
|
| 37 |
+
{
|
| 38 |
+
parent::__construct($level, $bubble);
|
| 39 |
+
|
| 40 |
+
$this->logger = $logger;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* {@inheritDoc}
|
| 45 |
+
*/
|
| 46 |
+
public function handle(array $record)
|
| 47 |
+
{
|
| 48 |
+
if (!$this->isHandling($record)) {
|
| 49 |
+
return false;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
$this->logger->log(strtolower($record['level_name']), $record['message'], $record['context']);
|
| 53 |
+
|
| 54 |
+
return false === $this->bubble;
|
| 55 |
+
}
|
| 56 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php
ADDED
|
@@ -0,0 +1,185 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Sends notifications through the pushover api to mobile phones
|
| 18 |
+
*
|
| 19 |
+
* @author Sebastian Göttschkes <sebastian.goettschkes@googlemail.com>
|
| 20 |
+
* @see https://www.pushover.net/api
|
| 21 |
+
*/
|
| 22 |
+
class PushoverHandler extends SocketHandler
|
| 23 |
+
{
|
| 24 |
+
private $token;
|
| 25 |
+
private $users;
|
| 26 |
+
private $title;
|
| 27 |
+
private $user;
|
| 28 |
+
private $retry;
|
| 29 |
+
private $expire;
|
| 30 |
+
|
| 31 |
+
private $highPriorityLevel;
|
| 32 |
+
private $emergencyLevel;
|
| 33 |
+
private $useFormattedMessage = false;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* All parameters that can be sent to Pushover
|
| 37 |
+
* @see https://pushover.net/api
|
| 38 |
+
* @var array
|
| 39 |
+
*/
|
| 40 |
+
private $parameterNames = array(
|
| 41 |
+
'token' => true,
|
| 42 |
+
'user' => true,
|
| 43 |
+
'message' => true,
|
| 44 |
+
'device' => true,
|
| 45 |
+
'title' => true,
|
| 46 |
+
'url' => true,
|
| 47 |
+
'url_title' => true,
|
| 48 |
+
'priority' => true,
|
| 49 |
+
'timestamp' => true,
|
| 50 |
+
'sound' => true,
|
| 51 |
+
'retry' => true,
|
| 52 |
+
'expire' => true,
|
| 53 |
+
'callback' => true,
|
| 54 |
+
);
|
| 55 |
+
|
| 56 |
+
/**
|
| 57 |
+
* Sounds the api supports by default
|
| 58 |
+
* @see https://pushover.net/api#sounds
|
| 59 |
+
* @var array
|
| 60 |
+
*/
|
| 61 |
+
private $sounds = array(
|
| 62 |
+
'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming',
|
| 63 |
+
'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb',
|
| 64 |
+
'persistent', 'echo', 'updown', 'none',
|
| 65 |
+
);
|
| 66 |
+
|
| 67 |
+
/**
|
| 68 |
+
* @param string $token Pushover api token
|
| 69 |
+
* @param string|array $users Pushover user id or array of ids the message will be sent to
|
| 70 |
+
* @param string $title Title sent to the Pushover API
|
| 71 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 72 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 73 |
+
* @param bool $useSSL Whether to connect via SSL. Required when pushing messages to users that are not
|
| 74 |
+
* the pushover.net app owner. OpenSSL is required for this option.
|
| 75 |
+
* @param int $highPriorityLevel The minimum logging level at which this handler will start
|
| 76 |
+
* sending "high priority" requests to the Pushover API
|
| 77 |
+
* @param int $emergencyLevel The minimum logging level at which this handler will start
|
| 78 |
+
* sending "emergency" requests to the Pushover API
|
| 79 |
+
* @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will send the same notification to the user.
|
| 80 |
+
* @param int $expire The expire parameter specifies how many seconds your notification will continue to be retried for (every retry seconds).
|
| 81 |
+
*/
|
| 82 |
+
public function __construct($token, $users, $title = null, $level = Logger::CRITICAL, $bubble = true, $useSSL = true, $highPriorityLevel = Logger::CRITICAL, $emergencyLevel = Logger::EMERGENCY, $retry = 30, $expire = 25200)
|
| 83 |
+
{
|
| 84 |
+
$connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80';
|
| 85 |
+
parent::__construct($connectionString, $level, $bubble);
|
| 86 |
+
|
| 87 |
+
$this->token = $token;
|
| 88 |
+
$this->users = (array) $users;
|
| 89 |
+
$this->title = $title ?: gethostname();
|
| 90 |
+
$this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel);
|
| 91 |
+
$this->emergencyLevel = Logger::toMonologLevel($emergencyLevel);
|
| 92 |
+
$this->retry = $retry;
|
| 93 |
+
$this->expire = $expire;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
protected function generateDataStream($record)
|
| 97 |
+
{
|
| 98 |
+
$content = $this->buildContent($record);
|
| 99 |
+
|
| 100 |
+
return $this->buildHeader($content) . $content;
|
| 101 |
+
}
|
| 102 |
+
|
| 103 |
+
private function buildContent($record)
|
| 104 |
+
{
|
| 105 |
+
// Pushover has a limit of 512 characters on title and message combined.
|
| 106 |
+
$maxMessageLength = 512 - strlen($this->title);
|
| 107 |
+
|
| 108 |
+
$message = ($this->useFormattedMessage) ? $record['formatted'] : $record['message'];
|
| 109 |
+
$message = substr($message, 0, $maxMessageLength);
|
| 110 |
+
|
| 111 |
+
$timestamp = $record['datetime']->getTimestamp();
|
| 112 |
+
|
| 113 |
+
$dataArray = array(
|
| 114 |
+
'token' => $this->token,
|
| 115 |
+
'user' => $this->user,
|
| 116 |
+
'message' => $message,
|
| 117 |
+
'title' => $this->title,
|
| 118 |
+
'timestamp' => $timestamp,
|
| 119 |
+
);
|
| 120 |
+
|
| 121 |
+
if (isset($record['level']) && $record['level'] >= $this->emergencyLevel) {
|
| 122 |
+
$dataArray['priority'] = 2;
|
| 123 |
+
$dataArray['retry'] = $this->retry;
|
| 124 |
+
$dataArray['expire'] = $this->expire;
|
| 125 |
+
} elseif (isset($record['level']) && $record['level'] >= $this->highPriorityLevel) {
|
| 126 |
+
$dataArray['priority'] = 1;
|
| 127 |
+
}
|
| 128 |
+
|
| 129 |
+
// First determine the available parameters
|
| 130 |
+
$context = array_intersect_key($record['context'], $this->parameterNames);
|
| 131 |
+
$extra = array_intersect_key($record['extra'], $this->parameterNames);
|
| 132 |
+
|
| 133 |
+
// Least important info should be merged with subsequent info
|
| 134 |
+
$dataArray = array_merge($extra, $context, $dataArray);
|
| 135 |
+
|
| 136 |
+
// Only pass sounds that are supported by the API
|
| 137 |
+
if (isset($dataArray['sound']) && !in_array($dataArray['sound'], $this->sounds)) {
|
| 138 |
+
unset($dataArray['sound']);
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
return http_build_query($dataArray);
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
private function buildHeader($content)
|
| 145 |
+
{
|
| 146 |
+
$header = "POST /1/messages.json HTTP/1.1\r\n";
|
| 147 |
+
$header .= "Host: api.pushover.net\r\n";
|
| 148 |
+
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
| 149 |
+
$header .= "Content-Length: " . strlen($content) . "\r\n";
|
| 150 |
+
$header .= "\r\n";
|
| 151 |
+
|
| 152 |
+
return $header;
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
protected function write(array $record)
|
| 156 |
+
{
|
| 157 |
+
foreach ($this->users as $user) {
|
| 158 |
+
$this->user = $user;
|
| 159 |
+
|
| 160 |
+
parent::write($record);
|
| 161 |
+
$this->closeSocket();
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
$this->user = null;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
public function setHighPriorityLevel($value)
|
| 168 |
+
{
|
| 169 |
+
$this->highPriorityLevel = $value;
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
public function setEmergencyLevel($value)
|
| 173 |
+
{
|
| 174 |
+
$this->emergencyLevel = $value;
|
| 175 |
+
}
|
| 176 |
+
|
| 177 |
+
/**
|
| 178 |
+
* Use the formatted message?
|
| 179 |
+
* @param bool $value
|
| 180 |
+
*/
|
| 181 |
+
public function useFormattedMessage($value)
|
| 182 |
+
{
|
| 183 |
+
$this->useFormattedMessage = (bool) $value;
|
| 184 |
+
}
|
| 185 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/RavenHandler.php
ADDED
|
@@ -0,0 +1,232 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
use Monolog\Formatter\FormatterInterface;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
use Raven_Client;
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* Handler to send messages to a Sentry (https://github.com/getsentry/sentry) server
|
| 21 |
+
* using sentry-php (https://github.com/getsentry/sentry-php)
|
| 22 |
+
*
|
| 23 |
+
* @author Marc Abramowitz <marc@marc-abramowitz.com>
|
| 24 |
+
*/
|
| 25 |
+
class RavenHandler extends AbstractProcessingHandler
|
| 26 |
+
{
|
| 27 |
+
/**
|
| 28 |
+
* Translates Monolog log levels to Raven log levels.
|
| 29 |
+
*/
|
| 30 |
+
protected $logLevels = array(
|
| 31 |
+
Logger::DEBUG => Raven_Client::DEBUG,
|
| 32 |
+
Logger::INFO => Raven_Client::INFO,
|
| 33 |
+
Logger::NOTICE => Raven_Client::INFO,
|
| 34 |
+
Logger::WARNING => Raven_Client::WARNING,
|
| 35 |
+
Logger::ERROR => Raven_Client::ERROR,
|
| 36 |
+
Logger::CRITICAL => Raven_Client::FATAL,
|
| 37 |
+
Logger::ALERT => Raven_Client::FATAL,
|
| 38 |
+
Logger::EMERGENCY => Raven_Client::FATAL,
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* @var string should represent the current version of the calling
|
| 43 |
+
* software. Can be any string (git commit, version number)
|
| 44 |
+
*/
|
| 45 |
+
protected $release;
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @var Raven_Client the client object that sends the message to the server
|
| 49 |
+
*/
|
| 50 |
+
protected $ravenClient;
|
| 51 |
+
|
| 52 |
+
/**
|
| 53 |
+
* @var LineFormatter The formatter to use for the logs generated via handleBatch()
|
| 54 |
+
*/
|
| 55 |
+
protected $batchFormatter;
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* @param Raven_Client $ravenClient
|
| 59 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 60 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 61 |
+
*/
|
| 62 |
+
public function __construct(Raven_Client $ravenClient, $level = Logger::DEBUG, $bubble = true)
|
| 63 |
+
{
|
| 64 |
+
parent::__construct($level, $bubble);
|
| 65 |
+
|
| 66 |
+
$this->ravenClient = $ravenClient;
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* {@inheritdoc}
|
| 71 |
+
*/
|
| 72 |
+
public function handleBatch(array $records)
|
| 73 |
+
{
|
| 74 |
+
$level = $this->level;
|
| 75 |
+
|
| 76 |
+
// filter records based on their level
|
| 77 |
+
$records = array_filter($records, function ($record) use ($level) {
|
| 78 |
+
return $record['level'] >= $level;
|
| 79 |
+
});
|
| 80 |
+
|
| 81 |
+
if (!$records) {
|
| 82 |
+
return;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
// the record with the highest severity is the "main" one
|
| 86 |
+
$record = array_reduce($records, function ($highest, $record) {
|
| 87 |
+
if ($record['level'] > $highest['level']) {
|
| 88 |
+
return $record;
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
return $highest;
|
| 92 |
+
});
|
| 93 |
+
|
| 94 |
+
// the other ones are added as a context item
|
| 95 |
+
$logs = array();
|
| 96 |
+
foreach ($records as $r) {
|
| 97 |
+
$logs[] = $this->processRecord($r);
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
if ($logs) {
|
| 101 |
+
$record['context']['logs'] = (string) $this->getBatchFormatter()->formatBatch($logs);
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
$this->handle($record);
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
/**
|
| 108 |
+
* Sets the formatter for the logs generated by handleBatch().
|
| 109 |
+
*
|
| 110 |
+
* @param FormatterInterface $formatter
|
| 111 |
+
*/
|
| 112 |
+
public function setBatchFormatter(FormatterInterface $formatter)
|
| 113 |
+
{
|
| 114 |
+
$this->batchFormatter = $formatter;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
/**
|
| 118 |
+
* Gets the formatter for the logs generated by handleBatch().
|
| 119 |
+
*
|
| 120 |
+
* @return FormatterInterface
|
| 121 |
+
*/
|
| 122 |
+
public function getBatchFormatter()
|
| 123 |
+
{
|
| 124 |
+
if (!$this->batchFormatter) {
|
| 125 |
+
$this->batchFormatter = $this->getDefaultBatchFormatter();
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
return $this->batchFormatter;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
/**
|
| 132 |
+
* {@inheritdoc}
|
| 133 |
+
*/
|
| 134 |
+
protected function write(array $record)
|
| 135 |
+
{
|
| 136 |
+
$previousUserContext = false;
|
| 137 |
+
$options = array();
|
| 138 |
+
$options['level'] = $this->logLevels[$record['level']];
|
| 139 |
+
$options['tags'] = array();
|
| 140 |
+
if (!empty($record['extra']['tags'])) {
|
| 141 |
+
$options['tags'] = array_merge($options['tags'], $record['extra']['tags']);
|
| 142 |
+
unset($record['extra']['tags']);
|
| 143 |
+
}
|
| 144 |
+
if (!empty($record['context']['tags'])) {
|
| 145 |
+
$options['tags'] = array_merge($options['tags'], $record['context']['tags']);
|
| 146 |
+
unset($record['context']['tags']);
|
| 147 |
+
}
|
| 148 |
+
if (!empty($record['context']['fingerprint'])) {
|
| 149 |
+
$options['fingerprint'] = $record['context']['fingerprint'];
|
| 150 |
+
unset($record['context']['fingerprint']);
|
| 151 |
+
}
|
| 152 |
+
if (!empty($record['context']['logger'])) {
|
| 153 |
+
$options['logger'] = $record['context']['logger'];
|
| 154 |
+
unset($record['context']['logger']);
|
| 155 |
+
} else {
|
| 156 |
+
$options['logger'] = $record['channel'];
|
| 157 |
+
}
|
| 158 |
+
foreach ($this->getExtraParameters() as $key) {
|
| 159 |
+
foreach (array('extra', 'context') as $source) {
|
| 160 |
+
if (!empty($record[$source][$key])) {
|
| 161 |
+
$options[$key] = $record[$source][$key];
|
| 162 |
+
unset($record[$source][$key]);
|
| 163 |
+
}
|
| 164 |
+
}
|
| 165 |
+
}
|
| 166 |
+
if (!empty($record['context'])) {
|
| 167 |
+
$options['extra']['context'] = $record['context'];
|
| 168 |
+
if (!empty($record['context']['user'])) {
|
| 169 |
+
$previousUserContext = $this->ravenClient->context->user;
|
| 170 |
+
$this->ravenClient->user_context($record['context']['user']);
|
| 171 |
+
unset($options['extra']['context']['user']);
|
| 172 |
+
}
|
| 173 |
+
}
|
| 174 |
+
if (!empty($record['extra'])) {
|
| 175 |
+
$options['extra']['extra'] = $record['extra'];
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
if (!empty($this->release) && !isset($options['release'])) {
|
| 179 |
+
$options['release'] = $this->release;
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
if (isset($record['context']['exception']) && ($record['context']['exception'] instanceof \Exception || (PHP_VERSION_ID >= 70000 && $record['context']['exception'] instanceof \Throwable))) {
|
| 183 |
+
$options['message'] = $record['formatted'];
|
| 184 |
+
$this->ravenClient->captureException($record['context']['exception'], $options);
|
| 185 |
+
} else {
|
| 186 |
+
$this->ravenClient->captureMessage($record['formatted'], array(), $options);
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
if ($previousUserContext !== false) {
|
| 190 |
+
$this->ravenClient->user_context($previousUserContext);
|
| 191 |
+
}
|
| 192 |
+
}
|
| 193 |
+
|
| 194 |
+
/**
|
| 195 |
+
* {@inheritDoc}
|
| 196 |
+
*/
|
| 197 |
+
protected function getDefaultFormatter()
|
| 198 |
+
{
|
| 199 |
+
return new LineFormatter('[%channel%] %message%');
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
/**
|
| 203 |
+
* Gets the default formatter for the logs generated by handleBatch().
|
| 204 |
+
*
|
| 205 |
+
* @return FormatterInterface
|
| 206 |
+
*/
|
| 207 |
+
protected function getDefaultBatchFormatter()
|
| 208 |
+
{
|
| 209 |
+
return new LineFormatter();
|
| 210 |
+
}
|
| 211 |
+
|
| 212 |
+
/**
|
| 213 |
+
* Gets extra parameters supported by Raven that can be found in "extra" and "context"
|
| 214 |
+
*
|
| 215 |
+
* @return array
|
| 216 |
+
*/
|
| 217 |
+
protected function getExtraParameters()
|
| 218 |
+
{
|
| 219 |
+
return array('contexts', 'checksum', 'release', 'event_id');
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
/**
|
| 223 |
+
* @param string $value
|
| 224 |
+
* @return self
|
| 225 |
+
*/
|
| 226 |
+
public function setRelease($value)
|
| 227 |
+
{
|
| 228 |
+
$this->release = $value;
|
| 229 |
+
|
| 230 |
+
return $this;
|
| 231 |
+
}
|
| 232 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\LineFormatter;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Logs to a Redis key using rpush
|
| 19 |
+
*
|
| 20 |
+
* usage example:
|
| 21 |
+
*
|
| 22 |
+
* $log = new Logger('application');
|
| 23 |
+
* $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs", "prod");
|
| 24 |
+
* $log->pushHandler($redis);
|
| 25 |
+
*
|
| 26 |
+
* @author Thomas Tourlourat <thomas@tourlourat.com>
|
| 27 |
+
*/
|
| 28 |
+
class RedisHandler extends AbstractProcessingHandler
|
| 29 |
+
{
|
| 30 |
+
private $redisClient;
|
| 31 |
+
private $redisKey;
|
| 32 |
+
protected $capSize;
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* @param \Predis\Client|\Redis $redis The redis instance
|
| 36 |
+
* @param string $key The key name to push records to
|
| 37 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 38 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 39 |
+
* @param int $capSize Number of entries to limit list size to
|
| 40 |
+
*/
|
| 41 |
+
public function __construct($redis, $key, $level = Logger::DEBUG, $bubble = true, $capSize = false)
|
| 42 |
+
{
|
| 43 |
+
if (!(($redis instanceof \Predis\Client) || ($redis instanceof \Redis))) {
|
| 44 |
+
throw new \InvalidArgumentException('Predis\Client or Redis instance required');
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
$this->redisClient = $redis;
|
| 48 |
+
$this->redisKey = $key;
|
| 49 |
+
$this->capSize = $capSize;
|
| 50 |
+
|
| 51 |
+
parent::__construct($level, $bubble);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* {@inheritDoc}
|
| 56 |
+
*/
|
| 57 |
+
protected function write(array $record)
|
| 58 |
+
{
|
| 59 |
+
if ($this->capSize) {
|
| 60 |
+
$this->writeCapped($record);
|
| 61 |
+
} else {
|
| 62 |
+
$this->redisClient->rpush($this->redisKey, $record["formatted"]);
|
| 63 |
+
}
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* Write and cap the collection
|
| 68 |
+
* Writes the record to the redis list and caps its
|
| 69 |
+
*
|
| 70 |
+
* @param array $record associative record array
|
| 71 |
+
* @return void
|
| 72 |
+
*/
|
| 73 |
+
protected function writeCapped(array $record)
|
| 74 |
+
{
|
| 75 |
+
if ($this->redisClient instanceof \Redis) {
|
| 76 |
+
$this->redisClient->multi()
|
| 77 |
+
->rpush($this->redisKey, $record["formatted"])
|
| 78 |
+
->ltrim($this->redisKey, -$this->capSize, -1)
|
| 79 |
+
->exec();
|
| 80 |
+
} else {
|
| 81 |
+
$redisKey = $this->redisKey;
|
| 82 |
+
$capSize = $this->capSize;
|
| 83 |
+
$this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) {
|
| 84 |
+
$tx->rpush($redisKey, $record["formatted"]);
|
| 85 |
+
$tx->ltrim($redisKey, -$capSize, -1);
|
| 86 |
+
});
|
| 87 |
+
}
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* {@inheritDoc}
|
| 92 |
+
*/
|
| 93 |
+
protected function getDefaultFormatter()
|
| 94 |
+
{
|
| 95 |
+
return new LineFormatter();
|
| 96 |
+
}
|
| 97 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use RollbarNotifier;
|
| 15 |
+
use Exception;
|
| 16 |
+
use Monolog\Logger;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Sends errors to Rollbar
|
| 20 |
+
*
|
| 21 |
+
* If the context data contains a `payload` key, that is used as an array
|
| 22 |
+
* of payload options to RollbarNotifier's report_message/report_exception methods.
|
| 23 |
+
*
|
| 24 |
+
* Rollbar's context info will contain the context + extra keys from the log record
|
| 25 |
+
* merged, and then on top of that a few keys:
|
| 26 |
+
*
|
| 27 |
+
* - level (rollbar level name)
|
| 28 |
+
* - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8)
|
| 29 |
+
* - channel
|
| 30 |
+
* - datetime (unix timestamp)
|
| 31 |
+
*
|
| 32 |
+
* @author Paul Statezny <paulstatezny@gmail.com>
|
| 33 |
+
*/
|
| 34 |
+
class RollbarHandler extends AbstractProcessingHandler
|
| 35 |
+
{
|
| 36 |
+
/**
|
| 37 |
+
* Rollbar notifier
|
| 38 |
+
*
|
| 39 |
+
* @var RollbarNotifier
|
| 40 |
+
*/
|
| 41 |
+
protected $rollbarNotifier;
|
| 42 |
+
|
| 43 |
+
protected $levelMap = array(
|
| 44 |
+
Logger::DEBUG => 'debug',
|
| 45 |
+
Logger::INFO => 'info',
|
| 46 |
+
Logger::NOTICE => 'info',
|
| 47 |
+
Logger::WARNING => 'warning',
|
| 48 |
+
Logger::ERROR => 'error',
|
| 49 |
+
Logger::CRITICAL => 'critical',
|
| 50 |
+
Logger::ALERT => 'critical',
|
| 51 |
+
Logger::EMERGENCY => 'critical',
|
| 52 |
+
);
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* Records whether any log records have been added since the last flush of the rollbar notifier
|
| 56 |
+
*
|
| 57 |
+
* @var bool
|
| 58 |
+
*/
|
| 59 |
+
private $hasRecords = false;
|
| 60 |
+
|
| 61 |
+
protected $initialized = false;
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* @param RollbarNotifier $rollbarNotifier RollbarNotifier object constructed with valid token
|
| 65 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 66 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 67 |
+
*/
|
| 68 |
+
public function __construct(RollbarNotifier $rollbarNotifier, $level = Logger::ERROR, $bubble = true)
|
| 69 |
+
{
|
| 70 |
+
$this->rollbarNotifier = $rollbarNotifier;
|
| 71 |
+
|
| 72 |
+
parent::__construct($level, $bubble);
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* {@inheritdoc}
|
| 77 |
+
*/
|
| 78 |
+
protected function write(array $record)
|
| 79 |
+
{
|
| 80 |
+
if (!$this->initialized) {
|
| 81 |
+
// __destructor() doesn't get called on Fatal errors
|
| 82 |
+
register_shutdown_function(array($this, 'close'));
|
| 83 |
+
$this->initialized = true;
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
$context = $record['context'];
|
| 87 |
+
$payload = array();
|
| 88 |
+
if (isset($context['payload'])) {
|
| 89 |
+
$payload = $context['payload'];
|
| 90 |
+
unset($context['payload']);
|
| 91 |
+
}
|
| 92 |
+
$context = array_merge($context, $record['extra'], array(
|
| 93 |
+
'level' => $this->levelMap[$record['level']],
|
| 94 |
+
'monolog_level' => $record['level_name'],
|
| 95 |
+
'channel' => $record['channel'],
|
| 96 |
+
'datetime' => $record['datetime']->format('U'),
|
| 97 |
+
));
|
| 98 |
+
|
| 99 |
+
if (isset($context['exception']) && $context['exception'] instanceof Exception) {
|
| 100 |
+
$payload['level'] = $context['level'];
|
| 101 |
+
$exception = $context['exception'];
|
| 102 |
+
unset($context['exception']);
|
| 103 |
+
|
| 104 |
+
$this->rollbarNotifier->report_exception($exception, $context, $payload);
|
| 105 |
+
} else {
|
| 106 |
+
$this->rollbarNotifier->report_message(
|
| 107 |
+
$record['message'],
|
| 108 |
+
$context['level'],
|
| 109 |
+
$context,
|
| 110 |
+
$payload
|
| 111 |
+
);
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
$this->hasRecords = true;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
public function flush()
|
| 118 |
+
{
|
| 119 |
+
if ($this->hasRecords) {
|
| 120 |
+
$this->rollbarNotifier->flush();
|
| 121 |
+
$this->hasRecords = false;
|
| 122 |
+
}
|
| 123 |
+
}
|
| 124 |
+
|
| 125 |
+
/**
|
| 126 |
+
* {@inheritdoc}
|
| 127 |
+
*/
|
| 128 |
+
public function close()
|
| 129 |
+
{
|
| 130 |
+
$this->flush();
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
/**
|
| 134 |
+
* {@inheritdoc}
|
| 135 |
+
*/
|
| 136 |
+
public function reset()
|
| 137 |
+
{
|
| 138 |
+
$this->flush();
|
| 139 |
+
|
| 140 |
+
parent::reset();
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
|
| 144 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php
ADDED
|
@@ -0,0 +1,190 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Stores logs to files that are rotated every day and a limited number of files are kept.
|
| 18 |
+
*
|
| 19 |
+
* This rotation is only intended to be used as a workaround. Using logrotate to
|
| 20 |
+
* handle the rotation is strongly encouraged when you can use it.
|
| 21 |
+
*
|
| 22 |
+
* @author Christophe Coevoet <stof@notk.org>
|
| 23 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 24 |
+
*/
|
| 25 |
+
class RotatingFileHandler extends StreamHandler
|
| 26 |
+
{
|
| 27 |
+
const FILE_PER_DAY = 'Y-m-d';
|
| 28 |
+
const FILE_PER_MONTH = 'Y-m';
|
| 29 |
+
const FILE_PER_YEAR = 'Y';
|
| 30 |
+
|
| 31 |
+
protected $filename;
|
| 32 |
+
protected $maxFiles;
|
| 33 |
+
protected $mustRotate;
|
| 34 |
+
protected $nextRotation;
|
| 35 |
+
protected $filenameFormat;
|
| 36 |
+
protected $dateFormat;
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param string $filename
|
| 40 |
+
* @param int $maxFiles The maximal amount of files to keep (0 means unlimited)
|
| 41 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 42 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 43 |
+
* @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)
|
| 44 |
+
* @param bool $useLocking Try to lock log file before doing any writes
|
| 45 |
+
*/
|
| 46 |
+
public function __construct($filename, $maxFiles = 0, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false)
|
| 47 |
+
{
|
| 48 |
+
$this->filename = $filename;
|
| 49 |
+
$this->maxFiles = (int) $maxFiles;
|
| 50 |
+
$this->nextRotation = new \DateTime('tomorrow');
|
| 51 |
+
$this->filenameFormat = '{filename}-{date}';
|
| 52 |
+
$this->dateFormat = 'Y-m-d';
|
| 53 |
+
|
| 54 |
+
parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking);
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* {@inheritdoc}
|
| 59 |
+
*/
|
| 60 |
+
public function close()
|
| 61 |
+
{
|
| 62 |
+
parent::close();
|
| 63 |
+
|
| 64 |
+
if (true === $this->mustRotate) {
|
| 65 |
+
$this->rotate();
|
| 66 |
+
}
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* {@inheritdoc}
|
| 71 |
+
*/
|
| 72 |
+
public function reset()
|
| 73 |
+
{
|
| 74 |
+
parent::reset();
|
| 75 |
+
|
| 76 |
+
if (true === $this->mustRotate) {
|
| 77 |
+
$this->rotate();
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
public function setFilenameFormat($filenameFormat, $dateFormat)
|
| 82 |
+
{
|
| 83 |
+
if (!preg_match('{^Y(([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) {
|
| 84 |
+
trigger_error(
|
| 85 |
+
'Invalid date format - format must be one of '.
|
| 86 |
+
'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '.
|
| 87 |
+
'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '.
|
| 88 |
+
'date formats using slashes, underscores and/or dots instead of dashes.',
|
| 89 |
+
E_USER_DEPRECATED
|
| 90 |
+
);
|
| 91 |
+
}
|
| 92 |
+
if (substr_count($filenameFormat, '{date}') === 0) {
|
| 93 |
+
trigger_error(
|
| 94 |
+
'Invalid filename format - format should contain at least `{date}`, because otherwise rotating is impossible.',
|
| 95 |
+
E_USER_DEPRECATED
|
| 96 |
+
);
|
| 97 |
+
}
|
| 98 |
+
$this->filenameFormat = $filenameFormat;
|
| 99 |
+
$this->dateFormat = $dateFormat;
|
| 100 |
+
$this->url = $this->getTimedFilename();
|
| 101 |
+
$this->close();
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
/**
|
| 105 |
+
* {@inheritdoc}
|
| 106 |
+
*/
|
| 107 |
+
protected function write(array $record)
|
| 108 |
+
{
|
| 109 |
+
// on the first record written, if the log is new, we should rotate (once per day)
|
| 110 |
+
if (null === $this->mustRotate) {
|
| 111 |
+
$this->mustRotate = !file_exists($this->url);
|
| 112 |
+
}
|
| 113 |
+
|
| 114 |
+
if ($this->nextRotation < $record['datetime']) {
|
| 115 |
+
$this->mustRotate = true;
|
| 116 |
+
$this->close();
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
parent::write($record);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
/**
|
| 123 |
+
* Rotates the files.
|
| 124 |
+
*/
|
| 125 |
+
protected function rotate()
|
| 126 |
+
{
|
| 127 |
+
// update filename
|
| 128 |
+
$this->url = $this->getTimedFilename();
|
| 129 |
+
$this->nextRotation = new \DateTime('tomorrow');
|
| 130 |
+
|
| 131 |
+
// skip GC of old logs if files are unlimited
|
| 132 |
+
if (0 === $this->maxFiles) {
|
| 133 |
+
return;
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
$logFiles = glob($this->getGlobPattern());
|
| 137 |
+
if ($this->maxFiles >= count($logFiles)) {
|
| 138 |
+
// no files to remove
|
| 139 |
+
return;
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
// Sorting the files by name to remove the older ones
|
| 143 |
+
usort($logFiles, function ($a, $b) {
|
| 144 |
+
return strcmp($b, $a);
|
| 145 |
+
});
|
| 146 |
+
|
| 147 |
+
foreach (array_slice($logFiles, $this->maxFiles) as $file) {
|
| 148 |
+
if (is_writable($file)) {
|
| 149 |
+
// suppress errors here as unlink() might fail if two processes
|
| 150 |
+
// are cleaning up/rotating at the same time
|
| 151 |
+
set_error_handler(function ($errno, $errstr, $errfile, $errline) {});
|
| 152 |
+
unlink($file);
|
| 153 |
+
restore_error_handler();
|
| 154 |
+
}
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
$this->mustRotate = false;
|
| 158 |
+
}
|
| 159 |
+
|
| 160 |
+
protected function getTimedFilename()
|
| 161 |
+
{
|
| 162 |
+
$fileInfo = pathinfo($this->filename);
|
| 163 |
+
$timedFilename = str_replace(
|
| 164 |
+
array('{filename}', '{date}'),
|
| 165 |
+
array($fileInfo['filename'], date($this->dateFormat)),
|
| 166 |
+
$fileInfo['dirname'] . '/' . $this->filenameFormat
|
| 167 |
+
);
|
| 168 |
+
|
| 169 |
+
if (!empty($fileInfo['extension'])) {
|
| 170 |
+
$timedFilename .= '.'.$fileInfo['extension'];
|
| 171 |
+
}
|
| 172 |
+
|
| 173 |
+
return $timedFilename;
|
| 174 |
+
}
|
| 175 |
+
|
| 176 |
+
protected function getGlobPattern()
|
| 177 |
+
{
|
| 178 |
+
$fileInfo = pathinfo($this->filename);
|
| 179 |
+
$glob = str_replace(
|
| 180 |
+
array('{filename}', '{date}'),
|
| 181 |
+
array($fileInfo['filename'], '[0-9][0-9][0-9][0-9]*'),
|
| 182 |
+
$fileInfo['dirname'] . '/' . $this->filenameFormat
|
| 183 |
+
);
|
| 184 |
+
if (!empty($fileInfo['extension'])) {
|
| 185 |
+
$glob .= '.'.$fileInfo['extension'];
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
return $glob;
|
| 189 |
+
}
|
| 190 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Sampling handler
|
| 16 |
+
*
|
| 17 |
+
* A sampled event stream can be useful for logging high frequency events in
|
| 18 |
+
* a production environment where you only need an idea of what is happening
|
| 19 |
+
* and are not concerned with capturing every occurrence. Since the decision to
|
| 20 |
+
* handle or not handle a particular event is determined randomly, the
|
| 21 |
+
* resulting sampled log is not guaranteed to contain 1/N of the events that
|
| 22 |
+
* occurred in the application, but based on the Law of large numbers, it will
|
| 23 |
+
* tend to be close to this ratio with a large number of attempts.
|
| 24 |
+
*
|
| 25 |
+
* @author Bryan Davis <bd808@wikimedia.org>
|
| 26 |
+
* @author Kunal Mehta <legoktm@gmail.com>
|
| 27 |
+
*/
|
| 28 |
+
class SamplingHandler extends AbstractHandler
|
| 29 |
+
{
|
| 30 |
+
/**
|
| 31 |
+
* @var callable|HandlerInterface $handler
|
| 32 |
+
*/
|
| 33 |
+
protected $handler;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* @var int $factor
|
| 37 |
+
*/
|
| 38 |
+
protected $factor;
|
| 39 |
+
|
| 40 |
+
/**
|
| 41 |
+
* @param callable|HandlerInterface $handler Handler or factory callable($record, $fingersCrossedHandler).
|
| 42 |
+
* @param int $factor Sample factor
|
| 43 |
+
*/
|
| 44 |
+
public function __construct($handler, $factor)
|
| 45 |
+
{
|
| 46 |
+
parent::__construct();
|
| 47 |
+
$this->handler = $handler;
|
| 48 |
+
$this->factor = $factor;
|
| 49 |
+
|
| 50 |
+
if (!$this->handler instanceof HandlerInterface && !is_callable($this->handler)) {
|
| 51 |
+
throw new \RuntimeException("The given handler (".json_encode($this->handler).") is not a callable nor a Monolog\Handler\HandlerInterface object");
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
public function isHandling(array $record)
|
| 56 |
+
{
|
| 57 |
+
return $this->handler->isHandling($record);
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
public function handle(array $record)
|
| 61 |
+
{
|
| 62 |
+
if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) {
|
| 63 |
+
// The same logic as in FingersCrossedHandler
|
| 64 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 65 |
+
$this->handler = call_user_func($this->handler, $record, $this);
|
| 66 |
+
if (!$this->handler instanceof HandlerInterface) {
|
| 67 |
+
throw new \RuntimeException("The factory callable should return a HandlerInterface");
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
if ($this->processors) {
|
| 72 |
+
foreach ($this->processors as $processor) {
|
| 73 |
+
$record = call_user_func($processor, $record);
|
| 74 |
+
}
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
$this->handler->handle($record);
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
return false === $this->bubble;
|
| 81 |
+
}
|
| 82 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php
ADDED
|
@@ -0,0 +1,294 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\Slack;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\NormalizerFormatter;
|
| 16 |
+
use Monolog\Formatter\FormatterInterface;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Slack record utility helping to log to Slack webhooks or API.
|
| 20 |
+
*
|
| 21 |
+
* @author Greg Kedzierski <greg@gregkedzierski.com>
|
| 22 |
+
* @author Haralan Dobrev <hkdobrev@gmail.com>
|
| 23 |
+
* @see https://api.slack.com/incoming-webhooks
|
| 24 |
+
* @see https://api.slack.com/docs/message-attachments
|
| 25 |
+
*/
|
| 26 |
+
class SlackRecord
|
| 27 |
+
{
|
| 28 |
+
const COLOR_DANGER = 'danger';
|
| 29 |
+
|
| 30 |
+
const COLOR_WARNING = 'warning';
|
| 31 |
+
|
| 32 |
+
const COLOR_GOOD = 'good';
|
| 33 |
+
|
| 34 |
+
const COLOR_DEFAULT = '#e3e4e6';
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Slack channel (encoded ID or name)
|
| 38 |
+
* @var string|null
|
| 39 |
+
*/
|
| 40 |
+
private $channel;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Name of a bot
|
| 44 |
+
* @var string|null
|
| 45 |
+
*/
|
| 46 |
+
private $username;
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* User icon e.g. 'ghost', 'http://example.com/user.png'
|
| 50 |
+
* @var string
|
| 51 |
+
*/
|
| 52 |
+
private $userIcon;
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* Whether the message should be added to Slack as attachment (plain text otherwise)
|
| 56 |
+
* @var bool
|
| 57 |
+
*/
|
| 58 |
+
private $useAttachment;
|
| 59 |
+
|
| 60 |
+
/**
|
| 61 |
+
* Whether the the context/extra messages added to Slack as attachments are in a short style
|
| 62 |
+
* @var bool
|
| 63 |
+
*/
|
| 64 |
+
private $useShortAttachment;
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* Whether the attachment should include context and extra data
|
| 68 |
+
* @var bool
|
| 69 |
+
*/
|
| 70 |
+
private $includeContextAndExtra;
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
|
| 74 |
+
* @var array
|
| 75 |
+
*/
|
| 76 |
+
private $excludeFields;
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* @var FormatterInterface
|
| 80 |
+
*/
|
| 81 |
+
private $formatter;
|
| 82 |
+
|
| 83 |
+
/**
|
| 84 |
+
* @var NormalizerFormatter
|
| 85 |
+
*/
|
| 86 |
+
private $normalizerFormatter;
|
| 87 |
+
|
| 88 |
+
public function __construct($channel = null, $username = null, $useAttachment = true, $userIcon = null, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array(), FormatterInterface $formatter = null)
|
| 89 |
+
{
|
| 90 |
+
$this->channel = $channel;
|
| 91 |
+
$this->username = $username;
|
| 92 |
+
$this->userIcon = trim($userIcon, ':');
|
| 93 |
+
$this->useAttachment = $useAttachment;
|
| 94 |
+
$this->useShortAttachment = $useShortAttachment;
|
| 95 |
+
$this->includeContextAndExtra = $includeContextAndExtra;
|
| 96 |
+
$this->excludeFields = $excludeFields;
|
| 97 |
+
$this->formatter = $formatter;
|
| 98 |
+
|
| 99 |
+
if ($this->includeContextAndExtra) {
|
| 100 |
+
$this->normalizerFormatter = new NormalizerFormatter();
|
| 101 |
+
}
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
public function getSlackData(array $record)
|
| 105 |
+
{
|
| 106 |
+
$dataArray = array();
|
| 107 |
+
$record = $this->excludeFields($record);
|
| 108 |
+
|
| 109 |
+
if ($this->username) {
|
| 110 |
+
$dataArray['username'] = $this->username;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
if ($this->channel) {
|
| 114 |
+
$dataArray['channel'] = $this->channel;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
if ($this->formatter && !$this->useAttachment) {
|
| 118 |
+
$message = $this->formatter->format($record);
|
| 119 |
+
} else {
|
| 120 |
+
$message = $record['message'];
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
if ($this->useAttachment) {
|
| 124 |
+
$attachment = array(
|
| 125 |
+
'fallback' => $message,
|
| 126 |
+
'text' => $message,
|
| 127 |
+
'color' => $this->getAttachmentColor($record['level']),
|
| 128 |
+
'fields' => array(),
|
| 129 |
+
'mrkdwn_in' => array('fields'),
|
| 130 |
+
'ts' => $record['datetime']->getTimestamp()
|
| 131 |
+
);
|
| 132 |
+
|
| 133 |
+
if ($this->useShortAttachment) {
|
| 134 |
+
$attachment['title'] = $record['level_name'];
|
| 135 |
+
} else {
|
| 136 |
+
$attachment['title'] = 'Message';
|
| 137 |
+
$attachment['fields'][] = $this->generateAttachmentField('Level', $record['level_name']);
|
| 138 |
+
}
|
| 139 |
+
|
| 140 |
+
|
| 141 |
+
if ($this->includeContextAndExtra) {
|
| 142 |
+
foreach (array('extra', 'context') as $key) {
|
| 143 |
+
if (empty($record[$key])) {
|
| 144 |
+
continue;
|
| 145 |
+
}
|
| 146 |
+
|
| 147 |
+
if ($this->useShortAttachment) {
|
| 148 |
+
$attachment['fields'][] = $this->generateAttachmentField(
|
| 149 |
+
$key,
|
| 150 |
+
$record[$key]
|
| 151 |
+
);
|
| 152 |
+
} else {
|
| 153 |
+
// Add all extra fields as individual fields in attachment
|
| 154 |
+
$attachment['fields'] = array_merge(
|
| 155 |
+
$attachment['fields'],
|
| 156 |
+
$this->generateAttachmentFields($record[$key])
|
| 157 |
+
);
|
| 158 |
+
}
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
$dataArray['attachments'] = array($attachment);
|
| 163 |
+
} else {
|
| 164 |
+
$dataArray['text'] = $message;
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
if ($this->userIcon) {
|
| 168 |
+
if (filter_var($this->userIcon, FILTER_VALIDATE_URL)) {
|
| 169 |
+
$dataArray['icon_url'] = $this->userIcon;
|
| 170 |
+
} else {
|
| 171 |
+
$dataArray['icon_emoji'] = ":{$this->userIcon}:";
|
| 172 |
+
}
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
return $dataArray;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
/**
|
| 179 |
+
* Returned a Slack message attachment color associated with
|
| 180 |
+
* provided level.
|
| 181 |
+
*
|
| 182 |
+
* @param int $level
|
| 183 |
+
* @return string
|
| 184 |
+
*/
|
| 185 |
+
public function getAttachmentColor($level)
|
| 186 |
+
{
|
| 187 |
+
switch (true) {
|
| 188 |
+
case $level >= Logger::ERROR:
|
| 189 |
+
return self::COLOR_DANGER;
|
| 190 |
+
case $level >= Logger::WARNING:
|
| 191 |
+
return self::COLOR_WARNING;
|
| 192 |
+
case $level >= Logger::INFO:
|
| 193 |
+
return self::COLOR_GOOD;
|
| 194 |
+
default:
|
| 195 |
+
return self::COLOR_DEFAULT;
|
| 196 |
+
}
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
/**
|
| 200 |
+
* Stringifies an array of key/value pairs to be used in attachment fields
|
| 201 |
+
*
|
| 202 |
+
* @param array $fields
|
| 203 |
+
*
|
| 204 |
+
* @return string
|
| 205 |
+
*/
|
| 206 |
+
public function stringify($fields)
|
| 207 |
+
{
|
| 208 |
+
$normalized = $this->normalizerFormatter->format($fields);
|
| 209 |
+
$prettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128;
|
| 210 |
+
|
| 211 |
+
$hasSecondDimension = count(array_filter($normalized, 'is_array'));
|
| 212 |
+
$hasNonNumericKeys = !count(array_filter(array_keys($normalized), 'is_numeric'));
|
| 213 |
+
|
| 214 |
+
return $hasSecondDimension || $hasNonNumericKeys
|
| 215 |
+
? json_encode($normalized, $prettyPrintFlag)
|
| 216 |
+
: json_encode($normalized);
|
| 217 |
+
}
|
| 218 |
+
|
| 219 |
+
/**
|
| 220 |
+
* Sets the formatter
|
| 221 |
+
*
|
| 222 |
+
* @param FormatterInterface $formatter
|
| 223 |
+
*/
|
| 224 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 225 |
+
{
|
| 226 |
+
$this->formatter = $formatter;
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
/**
|
| 230 |
+
* Generates attachment field
|
| 231 |
+
*
|
| 232 |
+
* @param string $title
|
| 233 |
+
* @param string|array $value
|
| 234 |
+
*
|
| 235 |
+
* @return array
|
| 236 |
+
*/
|
| 237 |
+
private function generateAttachmentField($title, $value)
|
| 238 |
+
{
|
| 239 |
+
$value = is_array($value)
|
| 240 |
+
? sprintf('```%s```', $this->stringify($value))
|
| 241 |
+
: $value;
|
| 242 |
+
|
| 243 |
+
return array(
|
| 244 |
+
'title' => ucfirst($title),
|
| 245 |
+
'value' => $value,
|
| 246 |
+
'short' => false
|
| 247 |
+
);
|
| 248 |
+
}
|
| 249 |
+
|
| 250 |
+
/**
|
| 251 |
+
* Generates a collection of attachment fields from array
|
| 252 |
+
*
|
| 253 |
+
* @param array $data
|
| 254 |
+
*
|
| 255 |
+
* @return array
|
| 256 |
+
*/
|
| 257 |
+
private function generateAttachmentFields(array $data)
|
| 258 |
+
{
|
| 259 |
+
$fields = array();
|
| 260 |
+
foreach ($this->normalizerFormatter->format($data) as $key => $value) {
|
| 261 |
+
$fields[] = $this->generateAttachmentField($key, $value);
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
return $fields;
|
| 265 |
+
}
|
| 266 |
+
|
| 267 |
+
/**
|
| 268 |
+
* Get a copy of record with fields excluded according to $this->excludeFields
|
| 269 |
+
*
|
| 270 |
+
* @param array $record
|
| 271 |
+
*
|
| 272 |
+
* @return array
|
| 273 |
+
*/
|
| 274 |
+
private function excludeFields(array $record)
|
| 275 |
+
{
|
| 276 |
+
foreach ($this->excludeFields as $field) {
|
| 277 |
+
$keys = explode('.', $field);
|
| 278 |
+
$node = &$record;
|
| 279 |
+
$lastKey = end($keys);
|
| 280 |
+
foreach ($keys as $key) {
|
| 281 |
+
if (!isset($node[$key])) {
|
| 282 |
+
break;
|
| 283 |
+
}
|
| 284 |
+
if ($lastKey === $key) {
|
| 285 |
+
unset($node[$key]);
|
| 286 |
+
break;
|
| 287 |
+
}
|
| 288 |
+
$node = &$node[$key];
|
| 289 |
+
}
|
| 290 |
+
}
|
| 291 |
+
|
| 292 |
+
return $record;
|
| 293 |
+
}
|
| 294 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php
ADDED
|
@@ -0,0 +1,220 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
use Monolog\Handler\Slack\SlackRecord;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Sends notifications through Slack API
|
| 20 |
+
*
|
| 21 |
+
* @author Greg Kedzierski <greg@gregkedzierski.com>
|
| 22 |
+
* @see https://api.slack.com/
|
| 23 |
+
*/
|
| 24 |
+
class SlackHandler extends SocketHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* Slack API token
|
| 28 |
+
* @var string
|
| 29 |
+
*/
|
| 30 |
+
private $token;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Instance of the SlackRecord util class preparing data for Slack API.
|
| 34 |
+
* @var SlackRecord
|
| 35 |
+
*/
|
| 36 |
+
private $slackRecord;
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param string $token Slack API token
|
| 40 |
+
* @param string $channel Slack channel (encoded ID or name)
|
| 41 |
+
* @param string|null $username Name of a bot
|
| 42 |
+
* @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise)
|
| 43 |
+
* @param string|null $iconEmoji The emoji name to use (or null)
|
| 44 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 45 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 46 |
+
* @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style
|
| 47 |
+
* @param bool $includeContextAndExtra Whether the attachment should include context and extra data
|
| 48 |
+
* @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
|
| 49 |
+
* @throws MissingExtensionException If no OpenSSL PHP extension configured
|
| 50 |
+
*/
|
| 51 |
+
public function __construct($token, $channel, $username = null, $useAttachment = true, $iconEmoji = null, $level = Logger::CRITICAL, $bubble = true, $useShortAttachment = false, $includeContextAndExtra = false, array $excludeFields = array())
|
| 52 |
+
{
|
| 53 |
+
if (!extension_loaded('openssl')) {
|
| 54 |
+
throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler');
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
parent::__construct('ssl://slack.com:443', $level, $bubble);
|
| 58 |
+
|
| 59 |
+
$this->slackRecord = new SlackRecord(
|
| 60 |
+
$channel,
|
| 61 |
+
$username,
|
| 62 |
+
$useAttachment,
|
| 63 |
+
$iconEmoji,
|
| 64 |
+
$useShortAttachment,
|
| 65 |
+
$includeContextAndExtra,
|
| 66 |
+
$excludeFields,
|
| 67 |
+
$this->formatter
|
| 68 |
+
);
|
| 69 |
+
|
| 70 |
+
$this->token = $token;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
public function getSlackRecord()
|
| 74 |
+
{
|
| 75 |
+
return $this->slackRecord;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
public function getToken()
|
| 79 |
+
{
|
| 80 |
+
return $this->token;
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
/**
|
| 84 |
+
* {@inheritdoc}
|
| 85 |
+
*
|
| 86 |
+
* @param array $record
|
| 87 |
+
* @return string
|
| 88 |
+
*/
|
| 89 |
+
protected function generateDataStream($record)
|
| 90 |
+
{
|
| 91 |
+
$content = $this->buildContent($record);
|
| 92 |
+
|
| 93 |
+
return $this->buildHeader($content) . $content;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* Builds the body of API call
|
| 98 |
+
*
|
| 99 |
+
* @param array $record
|
| 100 |
+
* @return string
|
| 101 |
+
*/
|
| 102 |
+
private function buildContent($record)
|
| 103 |
+
{
|
| 104 |
+
$dataArray = $this->prepareContentData($record);
|
| 105 |
+
|
| 106 |
+
return http_build_query($dataArray);
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
/**
|
| 110 |
+
* Prepares content data
|
| 111 |
+
*
|
| 112 |
+
* @param array $record
|
| 113 |
+
* @return array
|
| 114 |
+
*/
|
| 115 |
+
protected function prepareContentData($record)
|
| 116 |
+
{
|
| 117 |
+
$dataArray = $this->slackRecord->getSlackData($record);
|
| 118 |
+
$dataArray['token'] = $this->token;
|
| 119 |
+
|
| 120 |
+
if (!empty($dataArray['attachments'])) {
|
| 121 |
+
$dataArray['attachments'] = json_encode($dataArray['attachments']);
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
return $dataArray;
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
/**
|
| 128 |
+
* Builds the header of the API Call
|
| 129 |
+
*
|
| 130 |
+
* @param string $content
|
| 131 |
+
* @return string
|
| 132 |
+
*/
|
| 133 |
+
private function buildHeader($content)
|
| 134 |
+
{
|
| 135 |
+
$header = "POST /api/chat.postMessage HTTP/1.1\r\n";
|
| 136 |
+
$header .= "Host: slack.com\r\n";
|
| 137 |
+
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
|
| 138 |
+
$header .= "Content-Length: " . strlen($content) . "\r\n";
|
| 139 |
+
$header .= "\r\n";
|
| 140 |
+
|
| 141 |
+
return $header;
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
+
/**
|
| 145 |
+
* {@inheritdoc}
|
| 146 |
+
*
|
| 147 |
+
* @param array $record
|
| 148 |
+
*/
|
| 149 |
+
protected function write(array $record)
|
| 150 |
+
{
|
| 151 |
+
parent::write($record);
|
| 152 |
+
$this->finalizeWrite();
|
| 153 |
+
}
|
| 154 |
+
|
| 155 |
+
/**
|
| 156 |
+
* Finalizes the request by reading some bytes and then closing the socket
|
| 157 |
+
*
|
| 158 |
+
* If we do not read some but close the socket too early, slack sometimes
|
| 159 |
+
* drops the request entirely.
|
| 160 |
+
*/
|
| 161 |
+
protected function finalizeWrite()
|
| 162 |
+
{
|
| 163 |
+
$res = $this->getResource();
|
| 164 |
+
if (is_resource($res)) {
|
| 165 |
+
@fread($res, 2048);
|
| 166 |
+
}
|
| 167 |
+
$this->closeSocket();
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
/**
|
| 171 |
+
* Returned a Slack message attachment color associated with
|
| 172 |
+
* provided level.
|
| 173 |
+
*
|
| 174 |
+
* @param int $level
|
| 175 |
+
* @return string
|
| 176 |
+
* @deprecated Use underlying SlackRecord instead
|
| 177 |
+
*/
|
| 178 |
+
protected function getAttachmentColor($level)
|
| 179 |
+
{
|
| 180 |
+
trigger_error(
|
| 181 |
+
'SlackHandler::getAttachmentColor() is deprecated. Use underlying SlackRecord instead.',
|
| 182 |
+
E_USER_DEPRECATED
|
| 183 |
+
);
|
| 184 |
+
|
| 185 |
+
return $this->slackRecord->getAttachmentColor($level);
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
/**
|
| 189 |
+
* Stringifies an array of key/value pairs to be used in attachment fields
|
| 190 |
+
*
|
| 191 |
+
* @param array $fields
|
| 192 |
+
* @return string
|
| 193 |
+
* @deprecated Use underlying SlackRecord instead
|
| 194 |
+
*/
|
| 195 |
+
protected function stringify($fields)
|
| 196 |
+
{
|
| 197 |
+
trigger_error(
|
| 198 |
+
'SlackHandler::stringify() is deprecated. Use underlying SlackRecord instead.',
|
| 199 |
+
E_USER_DEPRECATED
|
| 200 |
+
);
|
| 201 |
+
|
| 202 |
+
return $this->slackRecord->stringify($fields);
|
| 203 |
+
}
|
| 204 |
+
|
| 205 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 206 |
+
{
|
| 207 |
+
parent::setFormatter($formatter);
|
| 208 |
+
$this->slackRecord->setFormatter($formatter);
|
| 209 |
+
|
| 210 |
+
return $this;
|
| 211 |
+
}
|
| 212 |
+
|
| 213 |
+
public function getFormatter()
|
| 214 |
+
{
|
| 215 |
+
$formatter = parent::getFormatter();
|
| 216 |
+
$this->slackRecord->setFormatter($formatter);
|
| 217 |
+
|
| 218 |
+
return $formatter;
|
| 219 |
+
}
|
| 220 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Formatter\FormatterInterface;
|
| 15 |
+
use Monolog\Logger;
|
| 16 |
+
use Monolog\Handler\Slack\SlackRecord;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Sends notifications through Slack Webhooks
|
| 20 |
+
*
|
| 21 |
+
* @author Haralan Dobrev <hkdobrev@gmail.com>
|
| 22 |
+
* @see https://api.slack.com/incoming-webhooks
|
| 23 |
+
*/
|
| 24 |
+
class SlackWebhookHandler extends AbstractProcessingHandler
|
| 25 |
+
{
|
| 26 |
+
/**
|
| 27 |
+
* Slack Webhook token
|
| 28 |
+
* @var string
|
| 29 |
+
*/
|
| 30 |
+
private $webhookUrl;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Instance of the SlackRecord util class preparing data for Slack API.
|
| 34 |
+
* @var SlackRecord
|
| 35 |
+
*/
|
| 36 |
+
private $slackRecord;
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* @param string $webhookUrl Slack Webhook URL
|
| 40 |
+
* @param string|null $channel Slack channel (encoded ID or name)
|
| 41 |
+
* @param string|null $username Name of a bot
|
| 42 |
+
* @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise)
|
| 43 |
+
* @param string|null $iconEmoji The emoji name to use (or null)
|
| 44 |
+
* @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style
|
| 45 |
+
* @param bool $includeContextAndExtra Whether the attachment should include context and extra data
|
| 46 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 47 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 48 |
+
* @param array $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2']
|
| 49 |
+
*/
|
| 50 |
+
public function __construct($webhookUrl, $channel = null, $username = null, $useAttachment = true, $iconEmoji = null, $useShortAttachment = false, $includeContextAndExtra = false, $level = Logger::CRITICAL, $bubble = true, array $excludeFields = array())
|
| 51 |
+
{
|
| 52 |
+
parent::__construct($level, $bubble);
|
| 53 |
+
|
| 54 |
+
$this->webhookUrl = $webhookUrl;
|
| 55 |
+
|
| 56 |
+
$this->slackRecord = new SlackRecord(
|
| 57 |
+
$channel,
|
| 58 |
+
$username,
|
| 59 |
+
$useAttachment,
|
| 60 |
+
$iconEmoji,
|
| 61 |
+
$useShortAttachment,
|
| 62 |
+
$includeContextAndExtra,
|
| 63 |
+
$excludeFields,
|
| 64 |
+
$this->formatter
|
| 65 |
+
);
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
public function getSlackRecord()
|
| 69 |
+
{
|
| 70 |
+
return $this->slackRecord;
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
public function getWebhookUrl()
|
| 74 |
+
{
|
| 75 |
+
return $this->webhookUrl;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* {@inheritdoc}
|
| 80 |
+
*
|
| 81 |
+
* @param array $record
|
| 82 |
+
*/
|
| 83 |
+
protected function write(array $record)
|
| 84 |
+
{
|
| 85 |
+
$postData = $this->slackRecord->getSlackData($record);
|
| 86 |
+
$postString = json_encode($postData);
|
| 87 |
+
|
| 88 |
+
$ch = curl_init();
|
| 89 |
+
$options = array(
|
| 90 |
+
CURLOPT_URL => $this->webhookUrl,
|
| 91 |
+
CURLOPT_POST => true,
|
| 92 |
+
CURLOPT_RETURNTRANSFER => true,
|
| 93 |
+
CURLOPT_HTTPHEADER => array('Content-type: application/json'),
|
| 94 |
+
CURLOPT_POSTFIELDS => $postString
|
| 95 |
+
);
|
| 96 |
+
if (defined('CURLOPT_SAFE_UPLOAD')) {
|
| 97 |
+
$options[CURLOPT_SAFE_UPLOAD] = true;
|
| 98 |
+
}
|
| 99 |
+
|
| 100 |
+
curl_setopt_array($ch, $options);
|
| 101 |
+
|
| 102 |
+
Curl\Util::execute($ch);
|
| 103 |
+
}
|
| 104 |
+
|
| 105 |
+
public function setFormatter(FormatterInterface $formatter)
|
| 106 |
+
{
|
| 107 |
+
parent::setFormatter($formatter);
|
| 108 |
+
$this->slackRecord->setFormatter($formatter);
|
| 109 |
+
|
| 110 |
+
return $this;
|
| 111 |
+
}
|
| 112 |
+
|
| 113 |
+
public function getFormatter()
|
| 114 |
+
{
|
| 115 |
+
$formatter = parent::getFormatter();
|
| 116 |
+
$this->slackRecord->setFormatter($formatter);
|
| 117 |
+
|
| 118 |
+
return $formatter;
|
| 119 |
+
}
|
| 120 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SlackbotHandler.php
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Sends notifications through Slack's Slackbot
|
| 18 |
+
*
|
| 19 |
+
* @author Haralan Dobrev <hkdobrev@gmail.com>
|
| 20 |
+
* @see https://slack.com/apps/A0F81R8ET-slackbot
|
| 21 |
+
*/
|
| 22 |
+
class SlackbotHandler extends AbstractProcessingHandler
|
| 23 |
+
{
|
| 24 |
+
/**
|
| 25 |
+
* The slug of the Slack team
|
| 26 |
+
* @var string
|
| 27 |
+
*/
|
| 28 |
+
private $slackTeam;
|
| 29 |
+
|
| 30 |
+
/**
|
| 31 |
+
* Slackbot token
|
| 32 |
+
* @var string
|
| 33 |
+
*/
|
| 34 |
+
private $token;
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* Slack channel name
|
| 38 |
+
* @var string
|
| 39 |
+
*/
|
| 40 |
+
private $channel;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* @param string $slackTeam Slack team slug
|
| 44 |
+
* @param string $token Slackbot token
|
| 45 |
+
* @param string $channel Slack channel (encoded ID or name)
|
| 46 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 47 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 48 |
+
*/
|
| 49 |
+
public function __construct($slackTeam, $token, $channel, $level = Logger::CRITICAL, $bubble = true)
|
| 50 |
+
{
|
| 51 |
+
parent::__construct($level, $bubble);
|
| 52 |
+
|
| 53 |
+
$this->slackTeam = $slackTeam;
|
| 54 |
+
$this->token = $token;
|
| 55 |
+
$this->channel = $channel;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* {@inheritdoc}
|
| 60 |
+
*
|
| 61 |
+
* @param array $record
|
| 62 |
+
*/
|
| 63 |
+
protected function write(array $record)
|
| 64 |
+
{
|
| 65 |
+
$slackbotUrl = sprintf(
|
| 66 |
+
'https://%s.slack.com/services/hooks/slackbot?token=%s&channel=%s',
|
| 67 |
+
$this->slackTeam,
|
| 68 |
+
$this->token,
|
| 69 |
+
$this->channel
|
| 70 |
+
);
|
| 71 |
+
|
| 72 |
+
$ch = curl_init();
|
| 73 |
+
curl_setopt($ch, CURLOPT_URL, $slackbotUrl);
|
| 74 |
+
curl_setopt($ch, CURLOPT_POST, true);
|
| 75 |
+
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
| 76 |
+
curl_setopt($ch, CURLOPT_POSTFIELDS, $record['message']);
|
| 77 |
+
|
| 78 |
+
Curl\Util::execute($ch);
|
| 79 |
+
}
|
| 80 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php
ADDED
|
@@ -0,0 +1,385 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Stores to any socket - uses fsockopen() or pfsockopen().
|
| 18 |
+
*
|
| 19 |
+
* @author Pablo de Leon Belloc <pablolb@gmail.com>
|
| 20 |
+
* @see http://php.net/manual/en/function.fsockopen.php
|
| 21 |
+
*/
|
| 22 |
+
class SocketHandler extends AbstractProcessingHandler
|
| 23 |
+
{
|
| 24 |
+
private $connectionString;
|
| 25 |
+
private $connectionTimeout;
|
| 26 |
+
private $resource;
|
| 27 |
+
private $timeout = 0;
|
| 28 |
+
private $writingTimeout = 10;
|
| 29 |
+
private $lastSentBytes = null;
|
| 30 |
+
private $chunkSize = null;
|
| 31 |
+
private $persistent = false;
|
| 32 |
+
private $errno;
|
| 33 |
+
private $errstr;
|
| 34 |
+
private $lastWritingAt;
|
| 35 |
+
|
| 36 |
+
/**
|
| 37 |
+
* @param string $connectionString Socket connection string
|
| 38 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 39 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 40 |
+
*/
|
| 41 |
+
public function __construct($connectionString, $level = Logger::DEBUG, $bubble = true)
|
| 42 |
+
{
|
| 43 |
+
parent::__construct($level, $bubble);
|
| 44 |
+
$this->connectionString = $connectionString;
|
| 45 |
+
$this->connectionTimeout = (float) ini_get('default_socket_timeout');
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* Connect (if necessary) and write to the socket
|
| 50 |
+
*
|
| 51 |
+
* @param array $record
|
| 52 |
+
*
|
| 53 |
+
* @throws \UnexpectedValueException
|
| 54 |
+
* @throws \RuntimeException
|
| 55 |
+
*/
|
| 56 |
+
protected function write(array $record)
|
| 57 |
+
{
|
| 58 |
+
$this->connectIfNotConnected();
|
| 59 |
+
$data = $this->generateDataStream($record);
|
| 60 |
+
$this->writeToSocket($data);
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
/**
|
| 64 |
+
* We will not close a PersistentSocket instance so it can be reused in other requests.
|
| 65 |
+
*/
|
| 66 |
+
public function close()
|
| 67 |
+
{
|
| 68 |
+
if (!$this->isPersistent()) {
|
| 69 |
+
$this->closeSocket();
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* Close socket, if open
|
| 75 |
+
*/
|
| 76 |
+
public function closeSocket()
|
| 77 |
+
{
|
| 78 |
+
if (is_resource($this->resource)) {
|
| 79 |
+
fclose($this->resource);
|
| 80 |
+
$this->resource = null;
|
| 81 |
+
}
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
/**
|
| 85 |
+
* Set socket connection to nbe persistent. It only has effect before the connection is initiated.
|
| 86 |
+
*
|
| 87 |
+
* @param bool $persistent
|
| 88 |
+
*/
|
| 89 |
+
public function setPersistent($persistent)
|
| 90 |
+
{
|
| 91 |
+
$this->persistent = (bool) $persistent;
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
/**
|
| 95 |
+
* Set connection timeout. Only has effect before we connect.
|
| 96 |
+
*
|
| 97 |
+
* @param float $seconds
|
| 98 |
+
*
|
| 99 |
+
* @see http://php.net/manual/en/function.fsockopen.php
|
| 100 |
+
*/
|
| 101 |
+
public function setConnectionTimeout($seconds)
|
| 102 |
+
{
|
| 103 |
+
$this->validateTimeout($seconds);
|
| 104 |
+
$this->connectionTimeout = (float) $seconds;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
/**
|
| 108 |
+
* Set write timeout. Only has effect before we connect.
|
| 109 |
+
*
|
| 110 |
+
* @param float $seconds
|
| 111 |
+
*
|
| 112 |
+
* @see http://php.net/manual/en/function.stream-set-timeout.php
|
| 113 |
+
*/
|
| 114 |
+
public function setTimeout($seconds)
|
| 115 |
+
{
|
| 116 |
+
$this->validateTimeout($seconds);
|
| 117 |
+
$this->timeout = (float) $seconds;
|
| 118 |
+
}
|
| 119 |
+
|
| 120 |
+
/**
|
| 121 |
+
* Set writing timeout. Only has effect during connection in the writing cycle.
|
| 122 |
+
*
|
| 123 |
+
* @param float $seconds 0 for no timeout
|
| 124 |
+
*/
|
| 125 |
+
public function setWritingTimeout($seconds)
|
| 126 |
+
{
|
| 127 |
+
$this->validateTimeout($seconds);
|
| 128 |
+
$this->writingTimeout = (float) $seconds;
|
| 129 |
+
}
|
| 130 |
+
|
| 131 |
+
/**
|
| 132 |
+
* Set chunk size. Only has effect during connection in the writing cycle.
|
| 133 |
+
*
|
| 134 |
+
* @param float $bytes
|
| 135 |
+
*/
|
| 136 |
+
public function setChunkSize($bytes)
|
| 137 |
+
{
|
| 138 |
+
$this->chunkSize = $bytes;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* Get current connection string
|
| 143 |
+
*
|
| 144 |
+
* @return string
|
| 145 |
+
*/
|
| 146 |
+
public function getConnectionString()
|
| 147 |
+
{
|
| 148 |
+
return $this->connectionString;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
/**
|
| 152 |
+
* Get persistent setting
|
| 153 |
+
*
|
| 154 |
+
* @return bool
|
| 155 |
+
*/
|
| 156 |
+
public function isPersistent()
|
| 157 |
+
{
|
| 158 |
+
return $this->persistent;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
/**
|
| 162 |
+
* Get current connection timeout setting
|
| 163 |
+
*
|
| 164 |
+
* @return float
|
| 165 |
+
*/
|
| 166 |
+
public function getConnectionTimeout()
|
| 167 |
+
{
|
| 168 |
+
return $this->connectionTimeout;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
/**
|
| 172 |
+
* Get current in-transfer timeout
|
| 173 |
+
*
|
| 174 |
+
* @return float
|
| 175 |
+
*/
|
| 176 |
+
public function getTimeout()
|
| 177 |
+
{
|
| 178 |
+
return $this->timeout;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
/**
|
| 182 |
+
* Get current local writing timeout
|
| 183 |
+
*
|
| 184 |
+
* @return float
|
| 185 |
+
*/
|
| 186 |
+
public function getWritingTimeout()
|
| 187 |
+
{
|
| 188 |
+
return $this->writingTimeout;
|
| 189 |
+
}
|
| 190 |
+
|
| 191 |
+
/**
|
| 192 |
+
* Get current chunk size
|
| 193 |
+
*
|
| 194 |
+
* @return float
|
| 195 |
+
*/
|
| 196 |
+
public function getChunkSize()
|
| 197 |
+
{
|
| 198 |
+
return $this->chunkSize;
|
| 199 |
+
}
|
| 200 |
+
|
| 201 |
+
/**
|
| 202 |
+
* Check to see if the socket is currently available.
|
| 203 |
+
*
|
| 204 |
+
* UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details.
|
| 205 |
+
*
|
| 206 |
+
* @return bool
|
| 207 |
+
*/
|
| 208 |
+
public function isConnected()
|
| 209 |
+
{
|
| 210 |
+
return is_resource($this->resource)
|
| 211 |
+
&& !feof($this->resource); // on TCP - other party can close connection.
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* Wrapper to allow mocking
|
| 216 |
+
*/
|
| 217 |
+
protected function pfsockopen()
|
| 218 |
+
{
|
| 219 |
+
return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);
|
| 220 |
+
}
|
| 221 |
+
|
| 222 |
+
/**
|
| 223 |
+
* Wrapper to allow mocking
|
| 224 |
+
*/
|
| 225 |
+
protected function fsockopen()
|
| 226 |
+
{
|
| 227 |
+
return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout);
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
+
/**
|
| 231 |
+
* Wrapper to allow mocking
|
| 232 |
+
*
|
| 233 |
+
* @see http://php.net/manual/en/function.stream-set-timeout.php
|
| 234 |
+
*/
|
| 235 |
+
protected function streamSetTimeout()
|
| 236 |
+
{
|
| 237 |
+
$seconds = floor($this->timeout);
|
| 238 |
+
$microseconds = round(($this->timeout - $seconds) * 1e6);
|
| 239 |
+
|
| 240 |
+
return stream_set_timeout($this->resource, $seconds, $microseconds);
|
| 241 |
+
}
|
| 242 |
+
|
| 243 |
+
/**
|
| 244 |
+
* Wrapper to allow mocking
|
| 245 |
+
*
|
| 246 |
+
* @see http://php.net/manual/en/function.stream-set-chunk-size.php
|
| 247 |
+
*/
|
| 248 |
+
protected function streamSetChunkSize()
|
| 249 |
+
{
|
| 250 |
+
return stream_set_chunk_size($this->resource, $this->chunkSize);
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
/**
|
| 254 |
+
* Wrapper to allow mocking
|
| 255 |
+
*/
|
| 256 |
+
protected function fwrite($data)
|
| 257 |
+
{
|
| 258 |
+
return @fwrite($this->resource, $data);
|
| 259 |
+
}
|
| 260 |
+
|
| 261 |
+
/**
|
| 262 |
+
* Wrapper to allow mocking
|
| 263 |
+
*/
|
| 264 |
+
protected function streamGetMetadata()
|
| 265 |
+
{
|
| 266 |
+
return stream_get_meta_data($this->resource);
|
| 267 |
+
}
|
| 268 |
+
|
| 269 |
+
private function validateTimeout($value)
|
| 270 |
+
{
|
| 271 |
+
$ok = filter_var($value, FILTER_VALIDATE_FLOAT);
|
| 272 |
+
if ($ok === false || $value < 0) {
|
| 273 |
+
throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)");
|
| 274 |
+
}
|
| 275 |
+
}
|
| 276 |
+
|
| 277 |
+
private function connectIfNotConnected()
|
| 278 |
+
{
|
| 279 |
+
if ($this->isConnected()) {
|
| 280 |
+
return;
|
| 281 |
+
}
|
| 282 |
+
$this->connect();
|
| 283 |
+
}
|
| 284 |
+
|
| 285 |
+
protected function generateDataStream($record)
|
| 286 |
+
{
|
| 287 |
+
return (string) $record['formatted'];
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
/**
|
| 291 |
+
* @return resource|null
|
| 292 |
+
*/
|
| 293 |
+
protected function getResource()
|
| 294 |
+
{
|
| 295 |
+
return $this->resource;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
private function connect()
|
| 299 |
+
{
|
| 300 |
+
$this->createSocketResource();
|
| 301 |
+
$this->setSocketTimeout();
|
| 302 |
+
$this->setStreamChunkSize();
|
| 303 |
+
}
|
| 304 |
+
|
| 305 |
+
private function createSocketResource()
|
| 306 |
+
{
|
| 307 |
+
if ($this->isPersistent()) {
|
| 308 |
+
$resource = $this->pfsockopen();
|
| 309 |
+
} else {
|
| 310 |
+
$resource = $this->fsockopen();
|
| 311 |
+
}
|
| 312 |
+
if (!$resource) {
|
| 313 |
+
throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)");
|
| 314 |
+
}
|
| 315 |
+
$this->resource = $resource;
|
| 316 |
+
}
|
| 317 |
+
|
| 318 |
+
private function setSocketTimeout()
|
| 319 |
+
{
|
| 320 |
+
if (!$this->streamSetTimeout()) {
|
| 321 |
+
throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()");
|
| 322 |
+
}
|
| 323 |
+
}
|
| 324 |
+
|
| 325 |
+
private function setStreamChunkSize()
|
| 326 |
+
{
|
| 327 |
+
if ($this->chunkSize && !$this->streamSetChunkSize()) {
|
| 328 |
+
throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()");
|
| 329 |
+
}
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
private function writeToSocket($data)
|
| 333 |
+
{
|
| 334 |
+
$length = strlen($data);
|
| 335 |
+
$sent = 0;
|
| 336 |
+
$this->lastSentBytes = $sent;
|
| 337 |
+
while ($this->isConnected() && $sent < $length) {
|
| 338 |
+
if (0 == $sent) {
|
| 339 |
+
$chunk = $this->fwrite($data);
|
| 340 |
+
} else {
|
| 341 |
+
$chunk = $this->fwrite(substr($data, $sent));
|
| 342 |
+
}
|
| 343 |
+
if ($chunk === false) {
|
| 344 |
+
throw new \RuntimeException("Could not write to socket");
|
| 345 |
+
}
|
| 346 |
+
$sent += $chunk;
|
| 347 |
+
$socketInfo = $this->streamGetMetadata();
|
| 348 |
+
if ($socketInfo['timed_out']) {
|
| 349 |
+
throw new \RuntimeException("Write timed-out");
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
if ($this->writingIsTimedOut($sent)) {
|
| 353 |
+
throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)");
|
| 354 |
+
}
|
| 355 |
+
}
|
| 356 |
+
if (!$this->isConnected() && $sent < $length) {
|
| 357 |
+
throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)");
|
| 358 |
+
}
|
| 359 |
+
}
|
| 360 |
+
|
| 361 |
+
private function writingIsTimedOut($sent)
|
| 362 |
+
{
|
| 363 |
+
$writingTimeout = (int) floor($this->writingTimeout);
|
| 364 |
+
if (0 === $writingTimeout) {
|
| 365 |
+
return false;
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
if ($sent !== $this->lastSentBytes) {
|
| 369 |
+
$this->lastWritingAt = time();
|
| 370 |
+
$this->lastSentBytes = $sent;
|
| 371 |
+
|
| 372 |
+
return false;
|
| 373 |
+
} else {
|
| 374 |
+
usleep(100);
|
| 375 |
+
}
|
| 376 |
+
|
| 377 |
+
if ((time() - $this->lastWritingAt) >= $writingTimeout) {
|
| 378 |
+
$this->closeSocket();
|
| 379 |
+
|
| 380 |
+
return true;
|
| 381 |
+
}
|
| 382 |
+
|
| 383 |
+
return false;
|
| 384 |
+
}
|
| 385 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Stores to any stream resource
|
| 18 |
+
*
|
| 19 |
+
* Can be used to store into php://stderr, remote and local files, etc.
|
| 20 |
+
*
|
| 21 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 22 |
+
*/
|
| 23 |
+
class StreamHandler extends AbstractProcessingHandler
|
| 24 |
+
{
|
| 25 |
+
protected $stream;
|
| 26 |
+
protected $url;
|
| 27 |
+
private $errorMessage;
|
| 28 |
+
protected $filePermission;
|
| 29 |
+
protected $useLocking;
|
| 30 |
+
private $dirCreated;
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @param resource|string $stream
|
| 34 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 35 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 36 |
+
* @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write)
|
| 37 |
+
* @param bool $useLocking Try to lock log file before doing any writes
|
| 38 |
+
*
|
| 39 |
+
* @throws \Exception If a missing directory is not buildable
|
| 40 |
+
* @throws \InvalidArgumentException If stream is not a resource or string
|
| 41 |
+
*/
|
| 42 |
+
public function __construct($stream, $level = Logger::DEBUG, $bubble = true, $filePermission = null, $useLocking = false)
|
| 43 |
+
{
|
| 44 |
+
parent::__construct($level, $bubble);
|
| 45 |
+
if (is_resource($stream)) {
|
| 46 |
+
$this->stream = $stream;
|
| 47 |
+
} elseif (is_string($stream)) {
|
| 48 |
+
$this->url = $stream;
|
| 49 |
+
} else {
|
| 50 |
+
throw new \InvalidArgumentException('A stream must either be a resource or a string.');
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
$this->filePermission = $filePermission;
|
| 54 |
+
$this->useLocking = $useLocking;
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* {@inheritdoc}
|
| 59 |
+
*/
|
| 60 |
+
public function close()
|
| 61 |
+
{
|
| 62 |
+
if ($this->url && is_resource($this->stream)) {
|
| 63 |
+
fclose($this->stream);
|
| 64 |
+
}
|
| 65 |
+
$this->stream = null;
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Return the currently active stream if it is open
|
| 70 |
+
*
|
| 71 |
+
* @return resource|null
|
| 72 |
+
*/
|
| 73 |
+
public function getStream()
|
| 74 |
+
{
|
| 75 |
+
return $this->stream;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* Return the stream URL if it was configured with a URL and not an active resource
|
| 80 |
+
*
|
| 81 |
+
* @return string|null
|
| 82 |
+
*/
|
| 83 |
+
public function getUrl()
|
| 84 |
+
{
|
| 85 |
+
return $this->url;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
/**
|
| 89 |
+
* {@inheritdoc}
|
| 90 |
+
*/
|
| 91 |
+
protected function write(array $record)
|
| 92 |
+
{
|
| 93 |
+
if (!is_resource($this->stream)) {
|
| 94 |
+
if (null === $this->url || '' === $this->url) {
|
| 95 |
+
throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().');
|
| 96 |
+
}
|
| 97 |
+
$this->createDir();
|
| 98 |
+
$this->errorMessage = null;
|
| 99 |
+
set_error_handler(array($this, 'customErrorHandler'));
|
| 100 |
+
$this->stream = fopen($this->url, 'a');
|
| 101 |
+
if ($this->filePermission !== null) {
|
| 102 |
+
@chmod($this->url, $this->filePermission);
|
| 103 |
+
}
|
| 104 |
+
restore_error_handler();
|
| 105 |
+
if (!is_resource($this->stream)) {
|
| 106 |
+
$this->stream = null;
|
| 107 |
+
throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened: '.$this->errorMessage, $this->url));
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
if ($this->useLocking) {
|
| 112 |
+
// ignoring errors here, there's not much we can do about them
|
| 113 |
+
flock($this->stream, LOCK_EX);
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
$this->streamWrite($this->stream, $record);
|
| 117 |
+
|
| 118 |
+
if ($this->useLocking) {
|
| 119 |
+
flock($this->stream, LOCK_UN);
|
| 120 |
+
}
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
/**
|
| 124 |
+
* Write to stream
|
| 125 |
+
* @param resource $stream
|
| 126 |
+
* @param array $record
|
| 127 |
+
*/
|
| 128 |
+
protected function streamWrite($stream, array $record)
|
| 129 |
+
{
|
| 130 |
+
fwrite($stream, (string) $record['formatted']);
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
private function customErrorHandler($code, $msg)
|
| 134 |
+
{
|
| 135 |
+
$this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg);
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
/**
|
| 139 |
+
* @param string $stream
|
| 140 |
+
*
|
| 141 |
+
* @return null|string
|
| 142 |
+
*/
|
| 143 |
+
private function getDirFromStream($stream)
|
| 144 |
+
{
|
| 145 |
+
$pos = strpos($stream, '://');
|
| 146 |
+
if ($pos === false) {
|
| 147 |
+
return dirname($stream);
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
if ('file://' === substr($stream, 0, 7)) {
|
| 151 |
+
return dirname(substr($stream, 7));
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
return;
|
| 155 |
+
}
|
| 156 |
+
|
| 157 |
+
private function createDir()
|
| 158 |
+
{
|
| 159 |
+
// Do not try to create dir if it has already been tried.
|
| 160 |
+
if ($this->dirCreated) {
|
| 161 |
+
return;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
$dir = $this->getDirFromStream($this->url);
|
| 165 |
+
if (null !== $dir && !is_dir($dir)) {
|
| 166 |
+
$this->errorMessage = null;
|
| 167 |
+
set_error_handler(array($this, 'customErrorHandler'));
|
| 168 |
+
$status = mkdir($dir, 0777, true);
|
| 169 |
+
restore_error_handler();
|
| 170 |
+
if (false === $status && !is_dir($dir)) {
|
| 171 |
+
throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and its not buildable: '.$this->errorMessage, $dir));
|
| 172 |
+
}
|
| 173 |
+
}
|
| 174 |
+
$this->dirCreated = true;
|
| 175 |
+
}
|
| 176 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SwiftMailerHandler.php
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Formatter\FormatterInterface;
|
| 16 |
+
use Monolog\Formatter\LineFormatter;
|
| 17 |
+
use Swift;
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* SwiftMailerHandler uses Swift_Mailer to send the emails
|
| 21 |
+
*
|
| 22 |
+
* @author Gyula Sallai
|
| 23 |
+
*/
|
| 24 |
+
class SwiftMailerHandler extends MailHandler
|
| 25 |
+
{
|
| 26 |
+
protected $mailer;
|
| 27 |
+
private $messageTemplate;
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* @param \Swift_Mailer $mailer The mailer to use
|
| 31 |
+
* @param callable|\Swift_Message $message An example message for real messages, only the body will be replaced
|
| 32 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 33 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 34 |
+
*/
|
| 35 |
+
public function __construct(\Swift_Mailer $mailer, $message, $level = Logger::ERROR, $bubble = true)
|
| 36 |
+
{
|
| 37 |
+
parent::__construct($level, $bubble);
|
| 38 |
+
|
| 39 |
+
$this->mailer = $mailer;
|
| 40 |
+
$this->messageTemplate = $message;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* {@inheritdoc}
|
| 45 |
+
*/
|
| 46 |
+
protected function send($content, array $records)
|
| 47 |
+
{
|
| 48 |
+
$this->mailer->send($this->buildMessage($content, $records));
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
/**
|
| 52 |
+
* Gets the formatter for the Swift_Message subject.
|
| 53 |
+
*
|
| 54 |
+
* @param string $format The format of the subject
|
| 55 |
+
* @return FormatterInterface
|
| 56 |
+
*/
|
| 57 |
+
protected function getSubjectFormatter($format)
|
| 58 |
+
{
|
| 59 |
+
return new LineFormatter($format);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
/**
|
| 63 |
+
* Creates instance of Swift_Message to be sent
|
| 64 |
+
*
|
| 65 |
+
* @param string $content formatted email body to be sent
|
| 66 |
+
* @param array $records Log records that formed the content
|
| 67 |
+
* @return \Swift_Message
|
| 68 |
+
*/
|
| 69 |
+
protected function buildMessage($content, array $records)
|
| 70 |
+
{
|
| 71 |
+
$message = null;
|
| 72 |
+
if ($this->messageTemplate instanceof \Swift_Message) {
|
| 73 |
+
$message = clone $this->messageTemplate;
|
| 74 |
+
$message->generateId();
|
| 75 |
+
} elseif (is_callable($this->messageTemplate)) {
|
| 76 |
+
$message = call_user_func($this->messageTemplate, $content, $records);
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
if (!$message instanceof \Swift_Message) {
|
| 80 |
+
throw new \InvalidArgumentException('Could not resolve message as instance of Swift_Message or a callable returning it');
|
| 81 |
+
}
|
| 82 |
+
|
| 83 |
+
if ($records) {
|
| 84 |
+
$subjectFormatter = $this->getSubjectFormatter($message->getSubject());
|
| 85 |
+
$message->setSubject($subjectFormatter->format($this->getHighestRecord($records)));
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
$message->setBody($content);
|
| 89 |
+
if (version_compare(Swift::VERSION, '6.0.0', '>=')) {
|
| 90 |
+
$message->setDate(new \DateTimeImmutable());
|
| 91 |
+
} else {
|
| 92 |
+
$message->setDate(time());
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
return $message;
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* BC getter, to be removed in 2.0
|
| 100 |
+
*/
|
| 101 |
+
public function __get($name)
|
| 102 |
+
{
|
| 103 |
+
if ($name === 'message') {
|
| 104 |
+
trigger_error('SwiftMailerHandler->message is deprecated, use ->buildMessage() instead to retrieve the message', E_USER_DEPRECATED);
|
| 105 |
+
|
| 106 |
+
return $this->buildMessage(null, array());
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
throw new \InvalidArgumentException('Invalid property '.$name);
|
| 110 |
+
}
|
| 111 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Logs to syslog service.
|
| 18 |
+
*
|
| 19 |
+
* usage example:
|
| 20 |
+
*
|
| 21 |
+
* $log = new Logger('application');
|
| 22 |
+
* $syslog = new SyslogHandler('myfacility', 'local6');
|
| 23 |
+
* $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%");
|
| 24 |
+
* $syslog->setFormatter($formatter);
|
| 25 |
+
* $log->pushHandler($syslog);
|
| 26 |
+
*
|
| 27 |
+
* @author Sven Paulus <sven@karlsruhe.org>
|
| 28 |
+
*/
|
| 29 |
+
class SyslogHandler extends AbstractSyslogHandler
|
| 30 |
+
{
|
| 31 |
+
protected $ident;
|
| 32 |
+
protected $logopts;
|
| 33 |
+
|
| 34 |
+
/**
|
| 35 |
+
* @param string $ident
|
| 36 |
+
* @param mixed $facility
|
| 37 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 38 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 39 |
+
* @param int $logopts Option flags for the openlog() call, defaults to LOG_PID
|
| 40 |
+
*/
|
| 41 |
+
public function __construct($ident, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $logopts = LOG_PID)
|
| 42 |
+
{
|
| 43 |
+
parent::__construct($facility, $level, $bubble);
|
| 44 |
+
|
| 45 |
+
$this->ident = $ident;
|
| 46 |
+
$this->logopts = $logopts;
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
/**
|
| 50 |
+
* {@inheritdoc}
|
| 51 |
+
*/
|
| 52 |
+
public function close()
|
| 53 |
+
{
|
| 54 |
+
closelog();
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* {@inheritdoc}
|
| 59 |
+
*/
|
| 60 |
+
protected function write(array $record)
|
| 61 |
+
{
|
| 62 |
+
if (!openlog($this->ident, $this->logopts, $this->facility)) {
|
| 63 |
+
throw new \LogicException('Can\'t open syslog for ident "'.$this->ident.'" and facility "'.$this->facility.'"');
|
| 64 |
+
}
|
| 65 |
+
syslog($this->logLevels[$record['level']], (string) $record['formatted']);
|
| 66 |
+
}
|
| 67 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler\SyslogUdp;
|
| 13 |
+
|
| 14 |
+
class UdpSocket
|
| 15 |
+
{
|
| 16 |
+
const DATAGRAM_MAX_LENGTH = 65023;
|
| 17 |
+
|
| 18 |
+
protected $ip;
|
| 19 |
+
protected $port;
|
| 20 |
+
protected $socket;
|
| 21 |
+
|
| 22 |
+
public function __construct($ip, $port = 514)
|
| 23 |
+
{
|
| 24 |
+
$this->ip = $ip;
|
| 25 |
+
$this->port = $port;
|
| 26 |
+
$this->socket = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
public function write($line, $header = "")
|
| 30 |
+
{
|
| 31 |
+
$this->send($this->assembleMessage($line, $header));
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
public function close()
|
| 35 |
+
{
|
| 36 |
+
if (is_resource($this->socket)) {
|
| 37 |
+
socket_close($this->socket);
|
| 38 |
+
$this->socket = null;
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
protected function send($chunk)
|
| 43 |
+
{
|
| 44 |
+
if (!is_resource($this->socket)) {
|
| 45 |
+
throw new \LogicException('The UdpSocket to '.$this->ip.':'.$this->port.' has been closed and can not be written to anymore');
|
| 46 |
+
}
|
| 47 |
+
socket_sendto($this->socket, $chunk, strlen($chunk), $flags = 0, $this->ip, $this->port);
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
protected function assembleMessage($line, $header)
|
| 51 |
+
{
|
| 52 |
+
$chunkSize = self::DATAGRAM_MAX_LENGTH - strlen($header);
|
| 53 |
+
|
| 54 |
+
return $header . substr($line, 0, $chunkSize);
|
| 55 |
+
}
|
| 56 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
use Monolog\Handler\SyslogUdp\UdpSocket;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* A Handler for logging to a remote syslogd server.
|
| 19 |
+
*
|
| 20 |
+
* @author Jesper Skovgaard Nielsen <nulpunkt@gmail.com>
|
| 21 |
+
*/
|
| 22 |
+
class SyslogUdpHandler extends AbstractSyslogHandler
|
| 23 |
+
{
|
| 24 |
+
protected $socket;
|
| 25 |
+
protected $ident;
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* @param string $host
|
| 29 |
+
* @param int $port
|
| 30 |
+
* @param mixed $facility
|
| 31 |
+
* @param int $level The minimum logging level at which this handler will be triggered
|
| 32 |
+
* @param bool $bubble Whether the messages that are handled can bubble up the stack or not
|
| 33 |
+
* @param string $ident Program name or tag for each log message.
|
| 34 |
+
*/
|
| 35 |
+
public function __construct($host, $port = 514, $facility = LOG_USER, $level = Logger::DEBUG, $bubble = true, $ident = 'php')
|
| 36 |
+
{
|
| 37 |
+
parent::__construct($facility, $level, $bubble);
|
| 38 |
+
|
| 39 |
+
$this->ident = $ident;
|
| 40 |
+
|
| 41 |
+
$this->socket = new UdpSocket($host, $port ?: 514);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
protected function write(array $record)
|
| 45 |
+
{
|
| 46 |
+
$lines = $this->splitMessageIntoLines($record['formatted']);
|
| 47 |
+
|
| 48 |
+
$header = $this->makeCommonSyslogHeader($this->logLevels[$record['level']]);
|
| 49 |
+
|
| 50 |
+
foreach ($lines as $line) {
|
| 51 |
+
$this->socket->write($line, $header);
|
| 52 |
+
}
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
public function close()
|
| 56 |
+
{
|
| 57 |
+
$this->socket->close();
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
private function splitMessageIntoLines($message)
|
| 61 |
+
{
|
| 62 |
+
if (is_array($message)) {
|
| 63 |
+
$message = implode("\n", $message);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
return preg_split('/$\R?^/m', $message, -1, PREG_SPLIT_NO_EMPTY);
|
| 67 |
+
}
|
| 68 |
+
|
| 69 |
+
/**
|
| 70 |
+
* Make common syslog header (see rfc5424)
|
| 71 |
+
*/
|
| 72 |
+
protected function makeCommonSyslogHeader($severity)
|
| 73 |
+
{
|
| 74 |
+
$priority = $severity + $this->facility;
|
| 75 |
+
|
| 76 |
+
if (!$pid = getmypid()) {
|
| 77 |
+
$pid = '-';
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
if (!$hostname = gethostname()) {
|
| 81 |
+
$hostname = '-';
|
| 82 |
+
}
|
| 83 |
+
|
| 84 |
+
return "<$priority>1 " .
|
| 85 |
+
$this->getDateTime() . " " .
|
| 86 |
+
$hostname . " " .
|
| 87 |
+
$this->ident . " " .
|
| 88 |
+
$pid . " - - ";
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
+
protected function getDateTime()
|
| 92 |
+
{
|
| 93 |
+
return date(\DateTime::RFC3339);
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
/**
|
| 97 |
+
* Inject your own socket, mainly used for testing
|
| 98 |
+
*/
|
| 99 |
+
public function setSocket($socket)
|
| 100 |
+
{
|
| 101 |
+
$this->socket = $socket;
|
| 102 |
+
}
|
| 103 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Used for testing purposes.
|
| 16 |
+
*
|
| 17 |
+
* It records all records and gives you access to them for verification.
|
| 18 |
+
*
|
| 19 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 20 |
+
*
|
| 21 |
+
* @method bool hasEmergency($record)
|
| 22 |
+
* @method bool hasAlert($record)
|
| 23 |
+
* @method bool hasCritical($record)
|
| 24 |
+
* @method bool hasError($record)
|
| 25 |
+
* @method bool hasWarning($record)
|
| 26 |
+
* @method bool hasNotice($record)
|
| 27 |
+
* @method bool hasInfo($record)
|
| 28 |
+
* @method bool hasDebug($record)
|
| 29 |
+
*
|
| 30 |
+
* @method bool hasEmergencyRecords()
|
| 31 |
+
* @method bool hasAlertRecords()
|
| 32 |
+
* @method bool hasCriticalRecords()
|
| 33 |
+
* @method bool hasErrorRecords()
|
| 34 |
+
* @method bool hasWarningRecords()
|
| 35 |
+
* @method bool hasNoticeRecords()
|
| 36 |
+
* @method bool hasInfoRecords()
|
| 37 |
+
* @method bool hasDebugRecords()
|
| 38 |
+
*
|
| 39 |
+
* @method bool hasEmergencyThatContains($message)
|
| 40 |
+
* @method bool hasAlertThatContains($message)
|
| 41 |
+
* @method bool hasCriticalThatContains($message)
|
| 42 |
+
* @method bool hasErrorThatContains($message)
|
| 43 |
+
* @method bool hasWarningThatContains($message)
|
| 44 |
+
* @method bool hasNoticeThatContains($message)
|
| 45 |
+
* @method bool hasInfoThatContains($message)
|
| 46 |
+
* @method bool hasDebugThatContains($message)
|
| 47 |
+
*
|
| 48 |
+
* @method bool hasEmergencyThatMatches($message)
|
| 49 |
+
* @method bool hasAlertThatMatches($message)
|
| 50 |
+
* @method bool hasCriticalThatMatches($message)
|
| 51 |
+
* @method bool hasErrorThatMatches($message)
|
| 52 |
+
* @method bool hasWarningThatMatches($message)
|
| 53 |
+
* @method bool hasNoticeThatMatches($message)
|
| 54 |
+
* @method bool hasInfoThatMatches($message)
|
| 55 |
+
* @method bool hasDebugThatMatches($message)
|
| 56 |
+
*
|
| 57 |
+
* @method bool hasEmergencyThatPasses($message)
|
| 58 |
+
* @method bool hasAlertThatPasses($message)
|
| 59 |
+
* @method bool hasCriticalThatPasses($message)
|
| 60 |
+
* @method bool hasErrorThatPasses($message)
|
| 61 |
+
* @method bool hasWarningThatPasses($message)
|
| 62 |
+
* @method bool hasNoticeThatPasses($message)
|
| 63 |
+
* @method bool hasInfoThatPasses($message)
|
| 64 |
+
* @method bool hasDebugThatPasses($message)
|
| 65 |
+
*/
|
| 66 |
+
class TestHandler extends AbstractProcessingHandler
|
| 67 |
+
{
|
| 68 |
+
protected $records = array();
|
| 69 |
+
protected $recordsByLevel = array();
|
| 70 |
+
|
| 71 |
+
public function getRecords()
|
| 72 |
+
{
|
| 73 |
+
return $this->records;
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
public function clear()
|
| 77 |
+
{
|
| 78 |
+
$this->records = array();
|
| 79 |
+
$this->recordsByLevel = array();
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
public function hasRecords($level)
|
| 83 |
+
{
|
| 84 |
+
return isset($this->recordsByLevel[$level]);
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
/**
|
| 88 |
+
* @param string|array $record Either a message string or an array containing message and optionally context keys that will be checked against all records
|
| 89 |
+
* @param int $level Logger::LEVEL constant value
|
| 90 |
+
*/
|
| 91 |
+
public function hasRecord($record, $level)
|
| 92 |
+
{
|
| 93 |
+
if (is_string($record)) {
|
| 94 |
+
$record = array('message' => $record);
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
return $this->hasRecordThatPasses(function ($rec) use ($record) {
|
| 98 |
+
if ($rec['message'] !== $record['message']) {
|
| 99 |
+
return false;
|
| 100 |
+
}
|
| 101 |
+
if (isset($record['context']) && $rec['context'] !== $record['context']) {
|
| 102 |
+
return false;
|
| 103 |
+
}
|
| 104 |
+
return true;
|
| 105 |
+
}, $level);
|
| 106 |
+
}
|
| 107 |
+
|
| 108 |
+
public function hasRecordThatContains($message, $level)
|
| 109 |
+
{
|
| 110 |
+
return $this->hasRecordThatPasses(function ($rec) use ($message) {
|
| 111 |
+
return strpos($rec['message'], $message) !== false;
|
| 112 |
+
}, $level);
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
public function hasRecordThatMatches($regex, $level)
|
| 116 |
+
{
|
| 117 |
+
return $this->hasRecordThatPasses(function ($rec) use ($regex) {
|
| 118 |
+
return preg_match($regex, $rec['message']) > 0;
|
| 119 |
+
}, $level);
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
public function hasRecordThatPasses($predicate, $level)
|
| 123 |
+
{
|
| 124 |
+
if (!is_callable($predicate)) {
|
| 125 |
+
throw new \InvalidArgumentException("Expected a callable for hasRecordThatSucceeds");
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
if (!isset($this->recordsByLevel[$level])) {
|
| 129 |
+
return false;
|
| 130 |
+
}
|
| 131 |
+
|
| 132 |
+
foreach ($this->recordsByLevel[$level] as $i => $rec) {
|
| 133 |
+
if (call_user_func($predicate, $rec, $i)) {
|
| 134 |
+
return true;
|
| 135 |
+
}
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
return false;
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
/**
|
| 142 |
+
* {@inheritdoc}
|
| 143 |
+
*/
|
| 144 |
+
protected function write(array $record)
|
| 145 |
+
{
|
| 146 |
+
$this->recordsByLevel[$record['level']][] = $record;
|
| 147 |
+
$this->records[] = $record;
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
public function __call($method, $args)
|
| 151 |
+
{
|
| 152 |
+
if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) {
|
| 153 |
+
$genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3];
|
| 154 |
+
$level = constant('Monolog\Logger::' . strtoupper($matches[2]));
|
| 155 |
+
if (method_exists($this, $genericMethod)) {
|
| 156 |
+
$args[] = $level;
|
| 157 |
+
|
| 158 |
+
return call_user_func_array(array($this, $genericMethod), $args);
|
| 159 |
+
}
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method . '()');
|
| 163 |
+
}
|
| 164 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Handler;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Forwards records to multiple handlers suppressing failures of each handler
|
| 16 |
+
* and continuing through to give every handler a chance to succeed.
|
| 17 |
+
*
|
| 18 |
+
* @author Craig D'Amelio <craig@damelio.ca>
|
| 19 |
+
*/
|
| 20 |
+
class WhatFailureGroupHandler extends GroupHandler
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* {@inheritdoc}
|
| 24 |
+
*/
|
| 25 |
+
public function handle(array $record)
|
| 26 |
+
{
|
| 27 |
+
if ($this->processors) {
|
| 28 |
+
foreach ($this->processors as $processor) {
|
| 29 |
+
$record = call_user_func($processor, $record);
|
| 30 |
+
}
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
foreach ($this->handlers as $handler) {
|
| 34 |
+
try {
|
| 35 |
+
$handler->handle($record);
|
| 36 |
+
} catch (\Exception $e) {
|
| 37 |
+
// What failure?
|
| 38 |
+
} catch (\Throwable $e) {
|
| 39 |
+
// What failure?
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
return false === $this->bubble;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
/**
|
| 47 |
+
* {@inheritdoc}
|
| 48 |
+
*/
|
| 49 |
+
public function handleBatch(array $records)
|
| 50 |
+
{
|
| 51 |
+
if ($this->processors) {
|
| 52 |
+
$processed = array();
|
| 53 |
+
foreach ($records as $record) {
|
| 54 |
+
foreach ($this->processors as $processor) {
|
| 55 |
+
$processed[] = call_user_func($processor, $record);
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
$records = $processed;
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
foreach ($this->handlers as $handler) {
|
| 62 |
+
try {
|
| 63 |
+
$handler->handleBatch($records);
|
| 64 |
+
} catch (\Exception $e) {
|
| 65 |
+
// What failure?
|
| 66 |
+
} catch (\Throwable $e) {
|
| 67 |
+
// What failure?
|
| 68 |
+
}
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php
ADDED
|
@@ -0,0 +1,95 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/*
|
| 3 |
+
* This file is part of the Monolog package.
|
| 4 |
+
*
|
| 5 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 6 |
+
*
|
| 7 |
+
* For the full copyright and license information, please view the LICENSE
|
| 8 |
+
* file that was distributed with this source code.
|
| 9 |
+
*/
|
| 10 |
+
|
| 11 |
+
namespace Monolog\Handler;
|
| 12 |
+
|
| 13 |
+
use Monolog\Formatter\NormalizerFormatter;
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Handler sending logs to Zend Monitor
|
| 18 |
+
*
|
| 19 |
+
* @author Christian Bergau <cbergau86@gmail.com>
|
| 20 |
+
*/
|
| 21 |
+
class ZendMonitorHandler extends AbstractProcessingHandler
|
| 22 |
+
{
|
| 23 |
+
/**
|
| 24 |
+
* Monolog level / ZendMonitor Custom Event priority map
|
| 25 |
+
*
|
| 26 |
+
* @var array
|
| 27 |
+
*/
|
| 28 |
+
protected $levelMap = array(
|
| 29 |
+
Logger::DEBUG => 1,
|
| 30 |
+
Logger::INFO => 2,
|
| 31 |
+
Logger::NOTICE => 3,
|
| 32 |
+
Logger::WARNING => 4,
|
| 33 |
+
Logger::ERROR => 5,
|
| 34 |
+
Logger::CRITICAL => 6,
|
| 35 |
+
Logger::ALERT => 7,
|
| 36 |
+
Logger::EMERGENCY => 0,
|
| 37 |
+
);
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* Construct
|
| 41 |
+
*
|
| 42 |
+
* @param int $level
|
| 43 |
+
* @param bool $bubble
|
| 44 |
+
* @throws MissingExtensionException
|
| 45 |
+
*/
|
| 46 |
+
public function __construct($level = Logger::DEBUG, $bubble = true)
|
| 47 |
+
{
|
| 48 |
+
if (!function_exists('zend_monitor_custom_event')) {
|
| 49 |
+
throw new MissingExtensionException('You must have Zend Server installed in order to use this handler');
|
| 50 |
+
}
|
| 51 |
+
parent::__construct($level, $bubble);
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
/**
|
| 55 |
+
* {@inheritdoc}
|
| 56 |
+
*/
|
| 57 |
+
protected function write(array $record)
|
| 58 |
+
{
|
| 59 |
+
$this->writeZendMonitorCustomEvent(
|
| 60 |
+
$this->levelMap[$record['level']],
|
| 61 |
+
$record['message'],
|
| 62 |
+
$record['formatted']
|
| 63 |
+
);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* Write a record to Zend Monitor
|
| 68 |
+
*
|
| 69 |
+
* @param int $level
|
| 70 |
+
* @param string $message
|
| 71 |
+
* @param array $formatted
|
| 72 |
+
*/
|
| 73 |
+
protected function writeZendMonitorCustomEvent($level, $message, $formatted)
|
| 74 |
+
{
|
| 75 |
+
zend_monitor_custom_event($level, $message, $formatted);
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* {@inheritdoc}
|
| 80 |
+
*/
|
| 81 |
+
public function getDefaultFormatter()
|
| 82 |
+
{
|
| 83 |
+
return new NormalizerFormatter();
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
/**
|
| 87 |
+
* Get the level map
|
| 88 |
+
*
|
| 89 |
+
* @return array
|
| 90 |
+
*/
|
| 91 |
+
public function getLevelMap()
|
| 92 |
+
{
|
| 93 |
+
return $this->levelMap;
|
| 94 |
+
}
|
| 95 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Logger.php
ADDED
|
@@ -0,0 +1,791 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
use Monolog\Handler\HandlerInterface;
|
| 15 |
+
use Monolog\Handler\StreamHandler;
|
| 16 |
+
use Psr\Log\LoggerInterface;
|
| 17 |
+
use Psr\Log\InvalidArgumentException;
|
| 18 |
+
use Exception;
|
| 19 |
+
|
| 20 |
+
/**
|
| 21 |
+
* Monolog log channel
|
| 22 |
+
*
|
| 23 |
+
* It contains a stack of Handlers and a stack of Processors,
|
| 24 |
+
* and uses them to store records that are added to it.
|
| 25 |
+
*
|
| 26 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 27 |
+
*/
|
| 28 |
+
class Logger implements LoggerInterface, ResettableInterface
|
| 29 |
+
{
|
| 30 |
+
/**
|
| 31 |
+
* Detailed debug information
|
| 32 |
+
*/
|
| 33 |
+
const DEBUG = 100;
|
| 34 |
+
|
| 35 |
+
/**
|
| 36 |
+
* Interesting events
|
| 37 |
+
*
|
| 38 |
+
* Examples: User logs in, SQL logs.
|
| 39 |
+
*/
|
| 40 |
+
const INFO = 200;
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* Uncommon events
|
| 44 |
+
*/
|
| 45 |
+
const NOTICE = 250;
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Exceptional occurrences that are not errors
|
| 49 |
+
*
|
| 50 |
+
* Examples: Use of deprecated APIs, poor use of an API,
|
| 51 |
+
* undesirable things that are not necessarily wrong.
|
| 52 |
+
*/
|
| 53 |
+
const WARNING = 300;
|
| 54 |
+
|
| 55 |
+
/**
|
| 56 |
+
* Runtime errors
|
| 57 |
+
*/
|
| 58 |
+
const ERROR = 400;
|
| 59 |
+
|
| 60 |
+
/**
|
| 61 |
+
* Critical conditions
|
| 62 |
+
*
|
| 63 |
+
* Example: Application component unavailable, unexpected exception.
|
| 64 |
+
*/
|
| 65 |
+
const CRITICAL = 500;
|
| 66 |
+
|
| 67 |
+
/**
|
| 68 |
+
* Action must be taken immediately
|
| 69 |
+
*
|
| 70 |
+
* Example: Entire website down, database unavailable, etc.
|
| 71 |
+
* This should trigger the SMS alerts and wake you up.
|
| 72 |
+
*/
|
| 73 |
+
const ALERT = 550;
|
| 74 |
+
|
| 75 |
+
/**
|
| 76 |
+
* Urgent alert.
|
| 77 |
+
*/
|
| 78 |
+
const EMERGENCY = 600;
|
| 79 |
+
|
| 80 |
+
/**
|
| 81 |
+
* Monolog API version
|
| 82 |
+
*
|
| 83 |
+
* This is only bumped when API breaks are done and should
|
| 84 |
+
* follow the major version of the library
|
| 85 |
+
*
|
| 86 |
+
* @var int
|
| 87 |
+
*/
|
| 88 |
+
const API = 1;
|
| 89 |
+
|
| 90 |
+
/**
|
| 91 |
+
* Logging levels from syslog protocol defined in RFC 5424
|
| 92 |
+
*
|
| 93 |
+
* @var array $levels Logging levels
|
| 94 |
+
*/
|
| 95 |
+
protected static $levels = array(
|
| 96 |
+
self::DEBUG => 'DEBUG',
|
| 97 |
+
self::INFO => 'INFO',
|
| 98 |
+
self::NOTICE => 'NOTICE',
|
| 99 |
+
self::WARNING => 'WARNING',
|
| 100 |
+
self::ERROR => 'ERROR',
|
| 101 |
+
self::CRITICAL => 'CRITICAL',
|
| 102 |
+
self::ALERT => 'ALERT',
|
| 103 |
+
self::EMERGENCY => 'EMERGENCY',
|
| 104 |
+
);
|
| 105 |
+
|
| 106 |
+
/**
|
| 107 |
+
* @var \DateTimeZone
|
| 108 |
+
*/
|
| 109 |
+
protected static $timezone;
|
| 110 |
+
|
| 111 |
+
/**
|
| 112 |
+
* @var string
|
| 113 |
+
*/
|
| 114 |
+
protected $name;
|
| 115 |
+
|
| 116 |
+
/**
|
| 117 |
+
* The handler stack
|
| 118 |
+
*
|
| 119 |
+
* @var HandlerInterface[]
|
| 120 |
+
*/
|
| 121 |
+
protected $handlers;
|
| 122 |
+
|
| 123 |
+
/**
|
| 124 |
+
* Processors that will process all log records
|
| 125 |
+
*
|
| 126 |
+
* To process records of a single handler instead, add the processor on that specific handler
|
| 127 |
+
*
|
| 128 |
+
* @var callable[]
|
| 129 |
+
*/
|
| 130 |
+
protected $processors;
|
| 131 |
+
|
| 132 |
+
/**
|
| 133 |
+
* @var bool
|
| 134 |
+
*/
|
| 135 |
+
protected $microsecondTimestamps = true;
|
| 136 |
+
|
| 137 |
+
/**
|
| 138 |
+
* @var callable
|
| 139 |
+
*/
|
| 140 |
+
protected $exceptionHandler;
|
| 141 |
+
|
| 142 |
+
/**
|
| 143 |
+
* @param string $name The logging channel
|
| 144 |
+
* @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc.
|
| 145 |
+
* @param callable[] $processors Optional array of processors
|
| 146 |
+
*/
|
| 147 |
+
public function __construct($name, array $handlers = array(), array $processors = array())
|
| 148 |
+
{
|
| 149 |
+
$this->name = $name;
|
| 150 |
+
$this->setHandlers($handlers);
|
| 151 |
+
$this->processors = $processors;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
/**
|
| 155 |
+
* @return string
|
| 156 |
+
*/
|
| 157 |
+
public function getName()
|
| 158 |
+
{
|
| 159 |
+
return $this->name;
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
/**
|
| 163 |
+
* Return a new cloned instance with the name changed
|
| 164 |
+
*
|
| 165 |
+
* @return static
|
| 166 |
+
*/
|
| 167 |
+
public function withName($name)
|
| 168 |
+
{
|
| 169 |
+
$new = clone $this;
|
| 170 |
+
$new->name = $name;
|
| 171 |
+
|
| 172 |
+
return $new;
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
/**
|
| 176 |
+
* Pushes a handler on to the stack.
|
| 177 |
+
*
|
| 178 |
+
* @param HandlerInterface $handler
|
| 179 |
+
* @return $this
|
| 180 |
+
*/
|
| 181 |
+
public function pushHandler(HandlerInterface $handler)
|
| 182 |
+
{
|
| 183 |
+
array_unshift($this->handlers, $handler);
|
| 184 |
+
|
| 185 |
+
return $this;
|
| 186 |
+
}
|
| 187 |
+
|
| 188 |
+
/**
|
| 189 |
+
* Pops a handler from the stack
|
| 190 |
+
*
|
| 191 |
+
* @return HandlerInterface
|
| 192 |
+
*/
|
| 193 |
+
public function popHandler()
|
| 194 |
+
{
|
| 195 |
+
if (!$this->handlers) {
|
| 196 |
+
throw new \LogicException('You tried to pop from an empty handler stack.');
|
| 197 |
+
}
|
| 198 |
+
|
| 199 |
+
return array_shift($this->handlers);
|
| 200 |
+
}
|
| 201 |
+
|
| 202 |
+
/**
|
| 203 |
+
* Set handlers, replacing all existing ones.
|
| 204 |
+
*
|
| 205 |
+
* If a map is passed, keys will be ignored.
|
| 206 |
+
*
|
| 207 |
+
* @param HandlerInterface[] $handlers
|
| 208 |
+
* @return $this
|
| 209 |
+
*/
|
| 210 |
+
public function setHandlers(array $handlers)
|
| 211 |
+
{
|
| 212 |
+
$this->handlers = array();
|
| 213 |
+
foreach (array_reverse($handlers) as $handler) {
|
| 214 |
+
$this->pushHandler($handler);
|
| 215 |
+
}
|
| 216 |
+
|
| 217 |
+
return $this;
|
| 218 |
+
}
|
| 219 |
+
|
| 220 |
+
/**
|
| 221 |
+
* @return HandlerInterface[]
|
| 222 |
+
*/
|
| 223 |
+
public function getHandlers()
|
| 224 |
+
{
|
| 225 |
+
return $this->handlers;
|
| 226 |
+
}
|
| 227 |
+
|
| 228 |
+
/**
|
| 229 |
+
* Adds a processor on to the stack.
|
| 230 |
+
*
|
| 231 |
+
* @param callable $callback
|
| 232 |
+
* @return $this
|
| 233 |
+
*/
|
| 234 |
+
public function pushProcessor($callback)
|
| 235 |
+
{
|
| 236 |
+
if (!is_callable($callback)) {
|
| 237 |
+
throw new \InvalidArgumentException('Processors must be valid callables (callback or object with an __invoke method), '.var_export($callback, true).' given');
|
| 238 |
+
}
|
| 239 |
+
array_unshift($this->processors, $callback);
|
| 240 |
+
|
| 241 |
+
return $this;
|
| 242 |
+
}
|
| 243 |
+
|
| 244 |
+
/**
|
| 245 |
+
* Removes the processor on top of the stack and returns it.
|
| 246 |
+
*
|
| 247 |
+
* @return callable
|
| 248 |
+
*/
|
| 249 |
+
public function popProcessor()
|
| 250 |
+
{
|
| 251 |
+
if (!$this->processors) {
|
| 252 |
+
throw new \LogicException('You tried to pop from an empty processor stack.');
|
| 253 |
+
}
|
| 254 |
+
|
| 255 |
+
return array_shift($this->processors);
|
| 256 |
+
}
|
| 257 |
+
|
| 258 |
+
/**
|
| 259 |
+
* @return callable[]
|
| 260 |
+
*/
|
| 261 |
+
public function getProcessors()
|
| 262 |
+
{
|
| 263 |
+
return $this->processors;
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
/**
|
| 267 |
+
* Control the use of microsecond resolution timestamps in the 'datetime'
|
| 268 |
+
* member of new records.
|
| 269 |
+
*
|
| 270 |
+
* Generating microsecond resolution timestamps by calling
|
| 271 |
+
* microtime(true), formatting the result via sprintf() and then parsing
|
| 272 |
+
* the resulting string via \DateTime::createFromFormat() can incur
|
| 273 |
+
* a measurable runtime overhead vs simple usage of DateTime to capture
|
| 274 |
+
* a second resolution timestamp in systems which generate a large number
|
| 275 |
+
* of log events.
|
| 276 |
+
*
|
| 277 |
+
* @param bool $micro True to use microtime() to create timestamps
|
| 278 |
+
*/
|
| 279 |
+
public function useMicrosecondTimestamps($micro)
|
| 280 |
+
{
|
| 281 |
+
$this->microsecondTimestamps = (bool) $micro;
|
| 282 |
+
}
|
| 283 |
+
|
| 284 |
+
/**
|
| 285 |
+
* Adds a log record.
|
| 286 |
+
*
|
| 287 |
+
* @param int $level The logging level
|
| 288 |
+
* @param string $message The log message
|
| 289 |
+
* @param array $context The log context
|
| 290 |
+
* @return bool Whether the record has been processed
|
| 291 |
+
*/
|
| 292 |
+
public function addRecord($level, $message, array $context = array())
|
| 293 |
+
{
|
| 294 |
+
if (!$this->handlers) {
|
| 295 |
+
$this->pushHandler(new StreamHandler('php://stderr', static::DEBUG));
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
$levelName = static::getLevelName($level);
|
| 299 |
+
|
| 300 |
+
// check if any handler will handle this message so we can return early and save cycles
|
| 301 |
+
$handlerKey = null;
|
| 302 |
+
reset($this->handlers);
|
| 303 |
+
while ($handler = current($this->handlers)) {
|
| 304 |
+
if ($handler->isHandling(array('level' => $level))) {
|
| 305 |
+
$handlerKey = key($this->handlers);
|
| 306 |
+
break;
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
next($this->handlers);
|
| 310 |
+
}
|
| 311 |
+
|
| 312 |
+
if (null === $handlerKey) {
|
| 313 |
+
return false;
|
| 314 |
+
}
|
| 315 |
+
|
| 316 |
+
if (!static::$timezone) {
|
| 317 |
+
static::$timezone = new \DateTimeZone(date_default_timezone_get() ?: 'UTC');
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
// php7.1+ always has microseconds enabled, so we do not need this hack
|
| 321 |
+
if ($this->microsecondTimestamps && PHP_VERSION_ID < 70100) {
|
| 322 |
+
$ts = \DateTime::createFromFormat('U.u', sprintf('%.6F', microtime(true)), static::$timezone);
|
| 323 |
+
} else {
|
| 324 |
+
$ts = new \DateTime(null, static::$timezone);
|
| 325 |
+
}
|
| 326 |
+
$ts->setTimezone(static::$timezone);
|
| 327 |
+
|
| 328 |
+
$record = array(
|
| 329 |
+
'message' => (string) $message,
|
| 330 |
+
'context' => $context,
|
| 331 |
+
'level' => $level,
|
| 332 |
+
'level_name' => $levelName,
|
| 333 |
+
'channel' => $this->name,
|
| 334 |
+
'datetime' => $ts,
|
| 335 |
+
'extra' => array(),
|
| 336 |
+
);
|
| 337 |
+
|
| 338 |
+
try {
|
| 339 |
+
foreach ($this->processors as $processor) {
|
| 340 |
+
$record = call_user_func($processor, $record);
|
| 341 |
+
}
|
| 342 |
+
|
| 343 |
+
while ($handler = current($this->handlers)) {
|
| 344 |
+
if (true === $handler->handle($record)) {
|
| 345 |
+
break;
|
| 346 |
+
}
|
| 347 |
+
|
| 348 |
+
next($this->handlers);
|
| 349 |
+
}
|
| 350 |
+
} catch (Exception $e) {
|
| 351 |
+
$this->handleException($e, $record);
|
| 352 |
+
}
|
| 353 |
+
|
| 354 |
+
return true;
|
| 355 |
+
}
|
| 356 |
+
|
| 357 |
+
/**
|
| 358 |
+
* Ends a log cycle and frees all resources used by handlers.
|
| 359 |
+
*
|
| 360 |
+
* Closing a Handler means flushing all buffers and freeing any open resources/handles.
|
| 361 |
+
* Handlers that have been closed should be able to accept log records again and re-open
|
| 362 |
+
* themselves on demand, but this may not always be possible depending on implementation.
|
| 363 |
+
*
|
| 364 |
+
* This is useful at the end of a request and will be called automatically on every handler
|
| 365 |
+
* when they get destructed.
|
| 366 |
+
*/
|
| 367 |
+
public function close()
|
| 368 |
+
{
|
| 369 |
+
foreach ($this->handlers as $handler) {
|
| 370 |
+
if (method_exists($handler, 'close')) {
|
| 371 |
+
$handler->close();
|
| 372 |
+
}
|
| 373 |
+
}
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
/**
|
| 377 |
+
* Ends a log cycle and resets all handlers and processors to their initial state.
|
| 378 |
+
*
|
| 379 |
+
* Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal
|
| 380 |
+
* state, and getting it back to a state in which it can receive log records again.
|
| 381 |
+
*
|
| 382 |
+
* This is useful in case you want to avoid logs leaking between two requests or jobs when you
|
| 383 |
+
* have a long running process like a worker or an application server serving multiple requests
|
| 384 |
+
* in one process.
|
| 385 |
+
*/
|
| 386 |
+
public function reset()
|
| 387 |
+
{
|
| 388 |
+
foreach ($this->handlers as $handler) {
|
| 389 |
+
if ($handler instanceof ResettableInterface) {
|
| 390 |
+
$handler->reset();
|
| 391 |
+
}
|
| 392 |
+
}
|
| 393 |
+
|
| 394 |
+
foreach ($this->processors as $processor) {
|
| 395 |
+
if ($processor instanceof ResettableInterface) {
|
| 396 |
+
$processor->reset();
|
| 397 |
+
}
|
| 398 |
+
}
|
| 399 |
+
}
|
| 400 |
+
|
| 401 |
+
/**
|
| 402 |
+
* Adds a log record at the DEBUG level.
|
| 403 |
+
*
|
| 404 |
+
* @param string $message The log message
|
| 405 |
+
* @param array $context The log context
|
| 406 |
+
* @return bool Whether the record has been processed
|
| 407 |
+
*/
|
| 408 |
+
public function addDebug($message, array $context = array())
|
| 409 |
+
{
|
| 410 |
+
return $this->addRecord(static::DEBUG, $message, $context);
|
| 411 |
+
}
|
| 412 |
+
|
| 413 |
+
/**
|
| 414 |
+
* Adds a log record at the INFO level.
|
| 415 |
+
*
|
| 416 |
+
* @param string $message The log message
|
| 417 |
+
* @param array $context The log context
|
| 418 |
+
* @return bool Whether the record has been processed
|
| 419 |
+
*/
|
| 420 |
+
public function addInfo($message, array $context = array())
|
| 421 |
+
{
|
| 422 |
+
return $this->addRecord(static::INFO, $message, $context);
|
| 423 |
+
}
|
| 424 |
+
|
| 425 |
+
/**
|
| 426 |
+
* Adds a log record at the NOTICE level.
|
| 427 |
+
*
|
| 428 |
+
* @param string $message The log message
|
| 429 |
+
* @param array $context The log context
|
| 430 |
+
* @return bool Whether the record has been processed
|
| 431 |
+
*/
|
| 432 |
+
public function addNotice($message, array $context = array())
|
| 433 |
+
{
|
| 434 |
+
return $this->addRecord(static::NOTICE, $message, $context);
|
| 435 |
+
}
|
| 436 |
+
|
| 437 |
+
/**
|
| 438 |
+
* Adds a log record at the WARNING level.
|
| 439 |
+
*
|
| 440 |
+
* @param string $message The log message
|
| 441 |
+
* @param array $context The log context
|
| 442 |
+
* @return bool Whether the record has been processed
|
| 443 |
+
*/
|
| 444 |
+
public function addWarning($message, array $context = array())
|
| 445 |
+
{
|
| 446 |
+
return $this->addRecord(static::WARNING, $message, $context);
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
/**
|
| 450 |
+
* Adds a log record at the ERROR level.
|
| 451 |
+
*
|
| 452 |
+
* @param string $message The log message
|
| 453 |
+
* @param array $context The log context
|
| 454 |
+
* @return bool Whether the record has been processed
|
| 455 |
+
*/
|
| 456 |
+
public function addError($message, array $context = array())
|
| 457 |
+
{
|
| 458 |
+
return $this->addRecord(static::ERROR, $message, $context);
|
| 459 |
+
}
|
| 460 |
+
|
| 461 |
+
/**
|
| 462 |
+
* Adds a log record at the CRITICAL level.
|
| 463 |
+
*
|
| 464 |
+
* @param string $message The log message
|
| 465 |
+
* @param array $context The log context
|
| 466 |
+
* @return bool Whether the record has been processed
|
| 467 |
+
*/
|
| 468 |
+
public function addCritical($message, array $context = array())
|
| 469 |
+
{
|
| 470 |
+
return $this->addRecord(static::CRITICAL, $message, $context);
|
| 471 |
+
}
|
| 472 |
+
|
| 473 |
+
/**
|
| 474 |
+
* Adds a log record at the ALERT level.
|
| 475 |
+
*
|
| 476 |
+
* @param string $message The log message
|
| 477 |
+
* @param array $context The log context
|
| 478 |
+
* @return bool Whether the record has been processed
|
| 479 |
+
*/
|
| 480 |
+
public function addAlert($message, array $context = array())
|
| 481 |
+
{
|
| 482 |
+
return $this->addRecord(static::ALERT, $message, $context);
|
| 483 |
+
}
|
| 484 |
+
|
| 485 |
+
/**
|
| 486 |
+
* Adds a log record at the EMERGENCY level.
|
| 487 |
+
*
|
| 488 |
+
* @param string $message The log message
|
| 489 |
+
* @param array $context The log context
|
| 490 |
+
* @return bool Whether the record has been processed
|
| 491 |
+
*/
|
| 492 |
+
public function addEmergency($message, array $context = array())
|
| 493 |
+
{
|
| 494 |
+
return $this->addRecord(static::EMERGENCY, $message, $context);
|
| 495 |
+
}
|
| 496 |
+
|
| 497 |
+
/**
|
| 498 |
+
* Gets all supported logging levels.
|
| 499 |
+
*
|
| 500 |
+
* @return array Assoc array with human-readable level names => level codes.
|
| 501 |
+
*/
|
| 502 |
+
public static function getLevels()
|
| 503 |
+
{
|
| 504 |
+
return array_flip(static::$levels);
|
| 505 |
+
}
|
| 506 |
+
|
| 507 |
+
/**
|
| 508 |
+
* Gets the name of the logging level.
|
| 509 |
+
*
|
| 510 |
+
* @param int $level
|
| 511 |
+
* @return string
|
| 512 |
+
*/
|
| 513 |
+
public static function getLevelName($level)
|
| 514 |
+
{
|
| 515 |
+
if (!isset(static::$levels[$level])) {
|
| 516 |
+
throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', array_keys(static::$levels)));
|
| 517 |
+
}
|
| 518 |
+
|
| 519 |
+
return static::$levels[$level];
|
| 520 |
+
}
|
| 521 |
+
|
| 522 |
+
/**
|
| 523 |
+
* Converts PSR-3 levels to Monolog ones if necessary
|
| 524 |
+
*
|
| 525 |
+
* @param string|int Level number (monolog) or name (PSR-3)
|
| 526 |
+
* @return int
|
| 527 |
+
*/
|
| 528 |
+
public static function toMonologLevel($level)
|
| 529 |
+
{
|
| 530 |
+
if (is_string($level) && defined(__CLASS__.'::'.strtoupper($level))) {
|
| 531 |
+
return constant(__CLASS__.'::'.strtoupper($level));
|
| 532 |
+
}
|
| 533 |
+
|
| 534 |
+
return $level;
|
| 535 |
+
}
|
| 536 |
+
|
| 537 |
+
/**
|
| 538 |
+
* Checks whether the Logger has a handler that listens on the given level
|
| 539 |
+
*
|
| 540 |
+
* @param int $level
|
| 541 |
+
* @return bool
|
| 542 |
+
*/
|
| 543 |
+
public function isHandling($level)
|
| 544 |
+
{
|
| 545 |
+
$record = array(
|
| 546 |
+
'level' => $level,
|
| 547 |
+
);
|
| 548 |
+
|
| 549 |
+
foreach ($this->handlers as $handler) {
|
| 550 |
+
if ($handler->isHandling($record)) {
|
| 551 |
+
return true;
|
| 552 |
+
}
|
| 553 |
+
}
|
| 554 |
+
|
| 555 |
+
return false;
|
| 556 |
+
}
|
| 557 |
+
|
| 558 |
+
/**
|
| 559 |
+
* Set a custom exception handler
|
| 560 |
+
*
|
| 561 |
+
* @param callable $callback
|
| 562 |
+
* @return $this
|
| 563 |
+
*/
|
| 564 |
+
public function setExceptionHandler($callback)
|
| 565 |
+
{
|
| 566 |
+
if (!is_callable($callback)) {
|
| 567 |
+
throw new \InvalidArgumentException('Exception handler must be valid callable (callback or object with an __invoke method), '.var_export($callback, true).' given');
|
| 568 |
+
}
|
| 569 |
+
$this->exceptionHandler = $callback;
|
| 570 |
+
|
| 571 |
+
return $this;
|
| 572 |
+
}
|
| 573 |
+
|
| 574 |
+
/**
|
| 575 |
+
* @return callable
|
| 576 |
+
*/
|
| 577 |
+
public function getExceptionHandler()
|
| 578 |
+
{
|
| 579 |
+
return $this->exceptionHandler;
|
| 580 |
+
}
|
| 581 |
+
|
| 582 |
+
/**
|
| 583 |
+
* Delegates exception management to the custom exception handler,
|
| 584 |
+
* or throws the exception if no custom handler is set.
|
| 585 |
+
*/
|
| 586 |
+
protected function handleException(Exception $e, array $record)
|
| 587 |
+
{
|
| 588 |
+
if (!$this->exceptionHandler) {
|
| 589 |
+
throw $e;
|
| 590 |
+
}
|
| 591 |
+
|
| 592 |
+
call_user_func($this->exceptionHandler, $e, $record);
|
| 593 |
+
}
|
| 594 |
+
|
| 595 |
+
/**
|
| 596 |
+
* Adds a log record at an arbitrary level.
|
| 597 |
+
*
|
| 598 |
+
* This method allows for compatibility with common interfaces.
|
| 599 |
+
*
|
| 600 |
+
* @param mixed $level The log level
|
| 601 |
+
* @param string $message The log message
|
| 602 |
+
* @param array $context The log context
|
| 603 |
+
* @return bool Whether the record has been processed
|
| 604 |
+
*/
|
| 605 |
+
public function log($level, $message, array $context = array())
|
| 606 |
+
{
|
| 607 |
+
$level = static::toMonologLevel($level);
|
| 608 |
+
|
| 609 |
+
return $this->addRecord($level, $message, $context);
|
| 610 |
+
}
|
| 611 |
+
|
| 612 |
+
/**
|
| 613 |
+
* Adds a log record at the DEBUG level.
|
| 614 |
+
*
|
| 615 |
+
* This method allows for compatibility with common interfaces.
|
| 616 |
+
*
|
| 617 |
+
* @param string $message The log message
|
| 618 |
+
* @param array $context The log context
|
| 619 |
+
* @return bool Whether the record has been processed
|
| 620 |
+
*/
|
| 621 |
+
public function debug($message, array $context = array())
|
| 622 |
+
{
|
| 623 |
+
return $this->addRecord(static::DEBUG, $message, $context);
|
| 624 |
+
}
|
| 625 |
+
|
| 626 |
+
/**
|
| 627 |
+
* Adds a log record at the INFO level.
|
| 628 |
+
*
|
| 629 |
+
* This method allows for compatibility with common interfaces.
|
| 630 |
+
*
|
| 631 |
+
* @param string $message The log message
|
| 632 |
+
* @param array $context The log context
|
| 633 |
+
* @return bool Whether the record has been processed
|
| 634 |
+
*/
|
| 635 |
+
public function info($message, array $context = array())
|
| 636 |
+
{
|
| 637 |
+
return $this->addRecord(static::INFO, $message, $context);
|
| 638 |
+
}
|
| 639 |
+
|
| 640 |
+
/**
|
| 641 |
+
* Adds a log record at the NOTICE level.
|
| 642 |
+
*
|
| 643 |
+
* This method allows for compatibility with common interfaces.
|
| 644 |
+
*
|
| 645 |
+
* @param string $message The log message
|
| 646 |
+
* @param array $context The log context
|
| 647 |
+
* @return bool Whether the record has been processed
|
| 648 |
+
*/
|
| 649 |
+
public function notice($message, array $context = array())
|
| 650 |
+
{
|
| 651 |
+
return $this->addRecord(static::NOTICE, $message, $context);
|
| 652 |
+
}
|
| 653 |
+
|
| 654 |
+
/**
|
| 655 |
+
* Adds a log record at the WARNING level.
|
| 656 |
+
*
|
| 657 |
+
* This method allows for compatibility with common interfaces.
|
| 658 |
+
*
|
| 659 |
+
* @param string $message The log message
|
| 660 |
+
* @param array $context The log context
|
| 661 |
+
* @return bool Whether the record has been processed
|
| 662 |
+
*/
|
| 663 |
+
public function warn($message, array $context = array())
|
| 664 |
+
{
|
| 665 |
+
return $this->addRecord(static::WARNING, $message, $context);
|
| 666 |
+
}
|
| 667 |
+
|
| 668 |
+
/**
|
| 669 |
+
* Adds a log record at the WARNING level.
|
| 670 |
+
*
|
| 671 |
+
* This method allows for compatibility with common interfaces.
|
| 672 |
+
*
|
| 673 |
+
* @param string $message The log message
|
| 674 |
+
* @param array $context The log context
|
| 675 |
+
* @return bool Whether the record has been processed
|
| 676 |
+
*/
|
| 677 |
+
public function warning($message, array $context = array())
|
| 678 |
+
{
|
| 679 |
+
return $this->addRecord(static::WARNING, $message, $context);
|
| 680 |
+
}
|
| 681 |
+
|
| 682 |
+
/**
|
| 683 |
+
* Adds a log record at the ERROR level.
|
| 684 |
+
*
|
| 685 |
+
* This method allows for compatibility with common interfaces.
|
| 686 |
+
*
|
| 687 |
+
* @param string $message The log message
|
| 688 |
+
* @param array $context The log context
|
| 689 |
+
* @return bool Whether the record has been processed
|
| 690 |
+
*/
|
| 691 |
+
public function err($message, array $context = array())
|
| 692 |
+
{
|
| 693 |
+
return $this->addRecord(static::ERROR, $message, $context);
|
| 694 |
+
}
|
| 695 |
+
|
| 696 |
+
/**
|
| 697 |
+
* Adds a log record at the ERROR level.
|
| 698 |
+
*
|
| 699 |
+
* This method allows for compatibility with common interfaces.
|
| 700 |
+
*
|
| 701 |
+
* @param string $message The log message
|
| 702 |
+
* @param array $context The log context
|
| 703 |
+
* @return bool Whether the record has been processed
|
| 704 |
+
*/
|
| 705 |
+
public function error($message, array $context = array())
|
| 706 |
+
{
|
| 707 |
+
return $this->addRecord(static::ERROR, $message, $context);
|
| 708 |
+
}
|
| 709 |
+
|
| 710 |
+
/**
|
| 711 |
+
* Adds a log record at the CRITICAL level.
|
| 712 |
+
*
|
| 713 |
+
* This method allows for compatibility with common interfaces.
|
| 714 |
+
*
|
| 715 |
+
* @param string $message The log message
|
| 716 |
+
* @param array $context The log context
|
| 717 |
+
* @return bool Whether the record has been processed
|
| 718 |
+
*/
|
| 719 |
+
public function crit($message, array $context = array())
|
| 720 |
+
{
|
| 721 |
+
return $this->addRecord(static::CRITICAL, $message, $context);
|
| 722 |
+
}
|
| 723 |
+
|
| 724 |
+
/**
|
| 725 |
+
* Adds a log record at the CRITICAL level.
|
| 726 |
+
*
|
| 727 |
+
* This method allows for compatibility with common interfaces.
|
| 728 |
+
*
|
| 729 |
+
* @param string $message The log message
|
| 730 |
+
* @param array $context The log context
|
| 731 |
+
* @return bool Whether the record has been processed
|
| 732 |
+
*/
|
| 733 |
+
public function critical($message, array $context = array())
|
| 734 |
+
{
|
| 735 |
+
return $this->addRecord(static::CRITICAL, $message, $context);
|
| 736 |
+
}
|
| 737 |
+
|
| 738 |
+
/**
|
| 739 |
+
* Adds a log record at the ALERT level.
|
| 740 |
+
*
|
| 741 |
+
* This method allows for compatibility with common interfaces.
|
| 742 |
+
*
|
| 743 |
+
* @param string $message The log message
|
| 744 |
+
* @param array $context The log context
|
| 745 |
+
* @return bool Whether the record has been processed
|
| 746 |
+
*/
|
| 747 |
+
public function alert($message, array $context = array())
|
| 748 |
+
{
|
| 749 |
+
return $this->addRecord(static::ALERT, $message, $context);
|
| 750 |
+
}
|
| 751 |
+
|
| 752 |
+
/**
|
| 753 |
+
* Adds a log record at the EMERGENCY level.
|
| 754 |
+
*
|
| 755 |
+
* This method allows for compatibility with common interfaces.
|
| 756 |
+
*
|
| 757 |
+
* @param string $message The log message
|
| 758 |
+
* @param array $context The log context
|
| 759 |
+
* @return bool Whether the record has been processed
|
| 760 |
+
*/
|
| 761 |
+
public function emerg($message, array $context = array())
|
| 762 |
+
{
|
| 763 |
+
return $this->addRecord(static::EMERGENCY, $message, $context);
|
| 764 |
+
}
|
| 765 |
+
|
| 766 |
+
/**
|
| 767 |
+
* Adds a log record at the EMERGENCY level.
|
| 768 |
+
*
|
| 769 |
+
* This method allows for compatibility with common interfaces.
|
| 770 |
+
*
|
| 771 |
+
* @param string $message The log message
|
| 772 |
+
* @param array $context The log context
|
| 773 |
+
* @return bool Whether the record has been processed
|
| 774 |
+
*/
|
| 775 |
+
public function emergency($message, array $context = array())
|
| 776 |
+
{
|
| 777 |
+
return $this->addRecord(static::EMERGENCY, $message, $context);
|
| 778 |
+
}
|
| 779 |
+
|
| 780 |
+
/**
|
| 781 |
+
* Set the timezone to be used for the timestamp of log records.
|
| 782 |
+
*
|
| 783 |
+
* This is stored globally for all Logger instances
|
| 784 |
+
*
|
| 785 |
+
* @param \DateTimeZone $tz Timezone object
|
| 786 |
+
*/
|
| 787 |
+
public static function setTimezone(\DateTimeZone $tz)
|
| 788 |
+
{
|
| 789 |
+
self::$timezone = $tz;
|
| 790 |
+
}
|
| 791 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Injects Git branch and Git commit SHA in all records
|
| 18 |
+
*
|
| 19 |
+
* @author Nick Otter
|
| 20 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 21 |
+
*/
|
| 22 |
+
class GitProcessor implements ProcessorInterface
|
| 23 |
+
{
|
| 24 |
+
private $level;
|
| 25 |
+
private static $cache;
|
| 26 |
+
|
| 27 |
+
public function __construct($level = Logger::DEBUG)
|
| 28 |
+
{
|
| 29 |
+
$this->level = Logger::toMonologLevel($level);
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* @param array $record
|
| 34 |
+
* @return array
|
| 35 |
+
*/
|
| 36 |
+
public function __invoke(array $record)
|
| 37 |
+
{
|
| 38 |
+
// return if the level is not high enough
|
| 39 |
+
if ($record['level'] < $this->level) {
|
| 40 |
+
return $record;
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
$record['extra']['git'] = self::getGitInfo();
|
| 44 |
+
|
| 45 |
+
return $record;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
private static function getGitInfo()
|
| 49 |
+
{
|
| 50 |
+
if (self::$cache) {
|
| 51 |
+
return self::$cache;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
$branches = `git branch -v --no-abbrev`;
|
| 55 |
+
if (preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) {
|
| 56 |
+
return self::$cache = array(
|
| 57 |
+
'branch' => $matches[1],
|
| 58 |
+
'commit' => $matches[2],
|
| 59 |
+
);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
return self::$cache = array();
|
| 63 |
+
}
|
| 64 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Injects line/file:class/function where the log message came from
|
| 18 |
+
*
|
| 19 |
+
* Warning: This only works if the handler processes the logs directly.
|
| 20 |
+
* If you put the processor on a handler that is behind a FingersCrossedHandler
|
| 21 |
+
* for example, the processor will only be called once the trigger level is reached,
|
| 22 |
+
* and all the log records will have the same file/line/.. data from the call that
|
| 23 |
+
* triggered the FingersCrossedHandler.
|
| 24 |
+
*
|
| 25 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 26 |
+
*/
|
| 27 |
+
class IntrospectionProcessor implements ProcessorInterface
|
| 28 |
+
{
|
| 29 |
+
private $level;
|
| 30 |
+
|
| 31 |
+
private $skipClassesPartials;
|
| 32 |
+
|
| 33 |
+
private $skipStackFramesCount;
|
| 34 |
+
|
| 35 |
+
private $skipFunctions = array(
|
| 36 |
+
'call_user_func',
|
| 37 |
+
'call_user_func_array',
|
| 38 |
+
);
|
| 39 |
+
|
| 40 |
+
public function __construct($level = Logger::DEBUG, array $skipClassesPartials = array(), $skipStackFramesCount = 0)
|
| 41 |
+
{
|
| 42 |
+
$this->level = Logger::toMonologLevel($level);
|
| 43 |
+
$this->skipClassesPartials = array_merge(array('Monolog\\'), $skipClassesPartials);
|
| 44 |
+
$this->skipStackFramesCount = $skipStackFramesCount;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* @param array $record
|
| 49 |
+
* @return array
|
| 50 |
+
*/
|
| 51 |
+
public function __invoke(array $record)
|
| 52 |
+
{
|
| 53 |
+
// return if the level is not high enough
|
| 54 |
+
if ($record['level'] < $this->level) {
|
| 55 |
+
return $record;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/*
|
| 59 |
+
* http://php.net/manual/en/function.debug-backtrace.php
|
| 60 |
+
* As of 5.3.6, DEBUG_BACKTRACE_IGNORE_ARGS option was added.
|
| 61 |
+
* Any version less than 5.3.6 must use the DEBUG_BACKTRACE_IGNORE_ARGS constant value '2'.
|
| 62 |
+
*/
|
| 63 |
+
$trace = debug_backtrace((PHP_VERSION_ID < 50306) ? 2 : DEBUG_BACKTRACE_IGNORE_ARGS);
|
| 64 |
+
|
| 65 |
+
// skip first since it's always the current method
|
| 66 |
+
array_shift($trace);
|
| 67 |
+
// the call_user_func call is also skipped
|
| 68 |
+
array_shift($trace);
|
| 69 |
+
|
| 70 |
+
$i = 0;
|
| 71 |
+
|
| 72 |
+
while ($this->isTraceClassOrSkippedFunction($trace, $i)) {
|
| 73 |
+
if (isset($trace[$i]['class'])) {
|
| 74 |
+
foreach ($this->skipClassesPartials as $part) {
|
| 75 |
+
if (strpos($trace[$i]['class'], $part) !== false) {
|
| 76 |
+
$i++;
|
| 77 |
+
continue 2;
|
| 78 |
+
}
|
| 79 |
+
}
|
| 80 |
+
} elseif (in_array($trace[$i]['function'], $this->skipFunctions)) {
|
| 81 |
+
$i++;
|
| 82 |
+
continue;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
break;
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
$i += $this->skipStackFramesCount;
|
| 89 |
+
|
| 90 |
+
// we should have the call source now
|
| 91 |
+
$record['extra'] = array_merge(
|
| 92 |
+
$record['extra'],
|
| 93 |
+
array(
|
| 94 |
+
'file' => isset($trace[$i - 1]['file']) ? $trace[$i - 1]['file'] : null,
|
| 95 |
+
'line' => isset($trace[$i - 1]['line']) ? $trace[$i - 1]['line'] : null,
|
| 96 |
+
'class' => isset($trace[$i]['class']) ? $trace[$i]['class'] : null,
|
| 97 |
+
'function' => isset($trace[$i]['function']) ? $trace[$i]['function'] : null,
|
| 98 |
+
)
|
| 99 |
+
);
|
| 100 |
+
|
| 101 |
+
return $record;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
private function isTraceClassOrSkippedFunction(array $trace, $index)
|
| 105 |
+
{
|
| 106 |
+
if (!isset($trace[$index])) {
|
| 107 |
+
return false;
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
return isset($trace[$index]['class']) || in_array($trace[$index]['function'], $this->skipFunctions);
|
| 111 |
+
}
|
| 112 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Injects memory_get_peak_usage in all records
|
| 16 |
+
*
|
| 17 |
+
* @see Monolog\Processor\MemoryProcessor::__construct() for options
|
| 18 |
+
* @author Rob Jensen
|
| 19 |
+
*/
|
| 20 |
+
class MemoryPeakUsageProcessor extends MemoryProcessor
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* @param array $record
|
| 24 |
+
* @return array
|
| 25 |
+
*/
|
| 26 |
+
public function __invoke(array $record)
|
| 27 |
+
{
|
| 28 |
+
$bytes = memory_get_peak_usage($this->realUsage);
|
| 29 |
+
$formatted = $this->formatBytes($bytes);
|
| 30 |
+
|
| 31 |
+
$record['extra']['memory_peak_usage'] = $formatted;
|
| 32 |
+
|
| 33 |
+
return $record;
|
| 34 |
+
}
|
| 35 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Some methods that are common for all memory processors
|
| 16 |
+
*
|
| 17 |
+
* @author Rob Jensen
|
| 18 |
+
*/
|
| 19 |
+
abstract class MemoryProcessor implements ProcessorInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported.
|
| 23 |
+
*/
|
| 24 |
+
protected $realUsage;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* @var bool If true, then format memory size to human readable string (MB, KB, B depending on size)
|
| 28 |
+
*/
|
| 29 |
+
protected $useFormatting;
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* @param bool $realUsage Set this to true to get the real size of memory allocated from system.
|
| 33 |
+
* @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size)
|
| 34 |
+
*/
|
| 35 |
+
public function __construct($realUsage = true, $useFormatting = true)
|
| 36 |
+
{
|
| 37 |
+
$this->realUsage = (bool) $realUsage;
|
| 38 |
+
$this->useFormatting = (bool) $useFormatting;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is
|
| 43 |
+
*
|
| 44 |
+
* @param int $bytes
|
| 45 |
+
* @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as is
|
| 46 |
+
*/
|
| 47 |
+
protected function formatBytes($bytes)
|
| 48 |
+
{
|
| 49 |
+
$bytes = (int) $bytes;
|
| 50 |
+
|
| 51 |
+
if (!$this->useFormatting) {
|
| 52 |
+
return $bytes;
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
if ($bytes > 1024 * 1024) {
|
| 56 |
+
return round($bytes / 1024 / 1024, 2).' MB';
|
| 57 |
+
} elseif ($bytes > 1024) {
|
| 58 |
+
return round($bytes / 1024, 2).' KB';
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
return $bytes . ' B';
|
| 62 |
+
}
|
| 63 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Injects memory_get_usage in all records
|
| 16 |
+
*
|
| 17 |
+
* @see Monolog\Processor\MemoryProcessor::__construct() for options
|
| 18 |
+
* @author Rob Jensen
|
| 19 |
+
*/
|
| 20 |
+
class MemoryUsageProcessor extends MemoryProcessor
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* @param array $record
|
| 24 |
+
* @return array
|
| 25 |
+
*/
|
| 26 |
+
public function __invoke(array $record)
|
| 27 |
+
{
|
| 28 |
+
$bytes = memory_get_usage($this->realUsage);
|
| 29 |
+
$formatted = $this->formatBytes($bytes);
|
| 30 |
+
|
| 31 |
+
$record['extra']['memory_usage'] = $formatted;
|
| 32 |
+
|
| 33 |
+
return $record;
|
| 34 |
+
}
|
| 35 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jonathan A. Schweder <jonathanschweder@gmail.com>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
use Monolog\Logger;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Injects Hg branch and Hg revision number in all records
|
| 18 |
+
*
|
| 19 |
+
* @author Jonathan A. Schweder <jonathanschweder@gmail.com>
|
| 20 |
+
*/
|
| 21 |
+
class MercurialProcessor implements ProcessorInterface
|
| 22 |
+
{
|
| 23 |
+
private $level;
|
| 24 |
+
private static $cache;
|
| 25 |
+
|
| 26 |
+
public function __construct($level = Logger::DEBUG)
|
| 27 |
+
{
|
| 28 |
+
$this->level = Logger::toMonologLevel($level);
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
/**
|
| 32 |
+
* @param array $record
|
| 33 |
+
* @return array
|
| 34 |
+
*/
|
| 35 |
+
public function __invoke(array $record)
|
| 36 |
+
{
|
| 37 |
+
// return if the level is not high enough
|
| 38 |
+
if ($record['level'] < $this->level) {
|
| 39 |
+
return $record;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
$record['extra']['hg'] = self::getMercurialInfo();
|
| 43 |
+
|
| 44 |
+
return $record;
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
private static function getMercurialInfo()
|
| 48 |
+
{
|
| 49 |
+
if (self::$cache) {
|
| 50 |
+
return self::$cache;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
$result = explode(' ', trim(`hg id -nb`));
|
| 54 |
+
if (count($result) >= 3) {
|
| 55 |
+
return self::$cache = array(
|
| 56 |
+
'branch' => $result[1],
|
| 57 |
+
'revision' => $result[2],
|
| 58 |
+
);
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
return self::$cache = array();
|
| 62 |
+
}
|
| 63 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Adds value of getmypid into records
|
| 16 |
+
*
|
| 17 |
+
* @author Andreas Hörnicke
|
| 18 |
+
*/
|
| 19 |
+
class ProcessIdProcessor implements ProcessorInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @param array $record
|
| 23 |
+
* @return array
|
| 24 |
+
*/
|
| 25 |
+
public function __invoke(array $record)
|
| 26 |
+
{
|
| 27 |
+
$record['extra']['process_id'] = getmypid();
|
| 28 |
+
|
| 29 |
+
return $record;
|
| 30 |
+
}
|
| 31 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* An optional interface to allow labelling Monolog processors.
|
| 16 |
+
*
|
| 17 |
+
* @author Nicolas Grekas <p@tchwork.com>
|
| 18 |
+
*/
|
| 19 |
+
interface ProcessorInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @return array The processed records
|
| 23 |
+
*/
|
| 24 |
+
public function __invoke(array $records);
|
| 25 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
use Monolog\Utils;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Processes a record's message according to PSR-3 rules
|
| 18 |
+
*
|
| 19 |
+
* It replaces {foo} with the value from $context['foo']
|
| 20 |
+
*
|
| 21 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 22 |
+
*/
|
| 23 |
+
class PsrLogMessageProcessor implements ProcessorInterface
|
| 24 |
+
{
|
| 25 |
+
/**
|
| 26 |
+
* @param array $record
|
| 27 |
+
* @return array
|
| 28 |
+
*/
|
| 29 |
+
public function __invoke(array $record)
|
| 30 |
+
{
|
| 31 |
+
if (false === strpos($record['message'], '{')) {
|
| 32 |
+
return $record;
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
$replacements = array();
|
| 36 |
+
foreach ($record['context'] as $key => $val) {
|
| 37 |
+
if (is_null($val) || is_scalar($val) || (is_object($val) && method_exists($val, "__toString"))) {
|
| 38 |
+
$replacements['{'.$key.'}'] = $val;
|
| 39 |
+
} elseif (is_object($val)) {
|
| 40 |
+
$replacements['{'.$key.'}'] = '[object '.Utils::getClass($val).']';
|
| 41 |
+
} else {
|
| 42 |
+
$replacements['{'.$key.'}'] = '['.gettype($val).']';
|
| 43 |
+
}
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
$record['message'] = strtr($record['message'], $replacements);
|
| 47 |
+
|
| 48 |
+
return $record;
|
| 49 |
+
}
|
| 50 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Adds a tags array into record
|
| 16 |
+
*
|
| 17 |
+
* @author Martijn Riemers
|
| 18 |
+
*/
|
| 19 |
+
class TagProcessor implements ProcessorInterface
|
| 20 |
+
{
|
| 21 |
+
private $tags;
|
| 22 |
+
|
| 23 |
+
public function __construct(array $tags = array())
|
| 24 |
+
{
|
| 25 |
+
$this->setTags($tags);
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
public function addTags(array $tags = array())
|
| 29 |
+
{
|
| 30 |
+
$this->tags = array_merge($this->tags, $tags);
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
public function setTags(array $tags = array())
|
| 34 |
+
{
|
| 35 |
+
$this->tags = $tags;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function __invoke(array $record)
|
| 39 |
+
{
|
| 40 |
+
$record['extra']['tags'] = $this->tags;
|
| 41 |
+
|
| 42 |
+
return $record;
|
| 43 |
+
}
|
| 44 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
use Monolog\ResettableInterface;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Adds a unique identifier into records
|
| 18 |
+
*
|
| 19 |
+
* @author Simon Mönch <sm@webfactory.de>
|
| 20 |
+
*/
|
| 21 |
+
class UidProcessor implements ProcessorInterface, ResettableInterface
|
| 22 |
+
{
|
| 23 |
+
private $uid;
|
| 24 |
+
|
| 25 |
+
public function __construct($length = 7)
|
| 26 |
+
{
|
| 27 |
+
if (!is_int($length) || $length > 32 || $length < 1) {
|
| 28 |
+
throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32');
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
|
| 32 |
+
$this->uid = $this->generateUid($length);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
public function __invoke(array $record)
|
| 36 |
+
{
|
| 37 |
+
$record['extra']['uid'] = $this->uid;
|
| 38 |
+
|
| 39 |
+
return $record;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
/**
|
| 43 |
+
* @return string
|
| 44 |
+
*/
|
| 45 |
+
public function getUid()
|
| 46 |
+
{
|
| 47 |
+
return $this->uid;
|
| 48 |
+
}
|
| 49 |
+
|
| 50 |
+
public function reset()
|
| 51 |
+
{
|
| 52 |
+
$this->uid = $this->generateUid(strlen($this->uid));
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
private function generateUid($length)
|
| 56 |
+
{
|
| 57 |
+
return substr(hash('md5', uniqid('', true)), 0, $length);
|
| 58 |
+
}
|
| 59 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog\Processor;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Injects url/method and remote IP of the current web request in all records
|
| 16 |
+
*
|
| 17 |
+
* @author Jordi Boggiano <j.boggiano@seld.be>
|
| 18 |
+
*/
|
| 19 |
+
class WebProcessor implements ProcessorInterface
|
| 20 |
+
{
|
| 21 |
+
/**
|
| 22 |
+
* @var array|\ArrayAccess
|
| 23 |
+
*/
|
| 24 |
+
protected $serverData;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* Default fields
|
| 28 |
+
*
|
| 29 |
+
* Array is structured as [key in record.extra => key in $serverData]
|
| 30 |
+
*
|
| 31 |
+
* @var array
|
| 32 |
+
*/
|
| 33 |
+
protected $extraFields = array(
|
| 34 |
+
'url' => 'REQUEST_URI',
|
| 35 |
+
'ip' => 'REMOTE_ADDR',
|
| 36 |
+
'http_method' => 'REQUEST_METHOD',
|
| 37 |
+
'server' => 'SERVER_NAME',
|
| 38 |
+
'referrer' => 'HTTP_REFERER',
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* @param array|\ArrayAccess $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data
|
| 43 |
+
* @param array|null $extraFields Field names and the related key inside $serverData to be added. If not provided it defaults to: url, ip, http_method, server, referrer
|
| 44 |
+
*/
|
| 45 |
+
public function __construct($serverData = null, array $extraFields = null)
|
| 46 |
+
{
|
| 47 |
+
if (null === $serverData) {
|
| 48 |
+
$this->serverData = &$_SERVER;
|
| 49 |
+
} elseif (is_array($serverData) || $serverData instanceof \ArrayAccess) {
|
| 50 |
+
$this->serverData = $serverData;
|
| 51 |
+
} else {
|
| 52 |
+
throw new \UnexpectedValueException('$serverData must be an array or object implementing ArrayAccess.');
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
if (null !== $extraFields) {
|
| 56 |
+
if (isset($extraFields[0])) {
|
| 57 |
+
foreach (array_keys($this->extraFields) as $fieldName) {
|
| 58 |
+
if (!in_array($fieldName, $extraFields)) {
|
| 59 |
+
unset($this->extraFields[$fieldName]);
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
} else {
|
| 63 |
+
$this->extraFields = $extraFields;
|
| 64 |
+
}
|
| 65 |
+
}
|
| 66 |
+
}
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* @param array $record
|
| 70 |
+
* @return array
|
| 71 |
+
*/
|
| 72 |
+
public function __invoke(array $record)
|
| 73 |
+
{
|
| 74 |
+
// skip processing if for some reason request data
|
| 75 |
+
// is not present (CLI or wonky SAPIs)
|
| 76 |
+
if (!isset($this->serverData['REQUEST_URI'])) {
|
| 77 |
+
return $record;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
$record['extra'] = $this->appendExtraFields($record['extra']);
|
| 81 |
+
|
| 82 |
+
return $record;
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
/**
|
| 86 |
+
* @param string $extraName
|
| 87 |
+
* @param string $serverName
|
| 88 |
+
* @return $this
|
| 89 |
+
*/
|
| 90 |
+
public function addExtraField($extraName, $serverName)
|
| 91 |
+
{
|
| 92 |
+
$this->extraFields[$extraName] = $serverName;
|
| 93 |
+
|
| 94 |
+
return $this;
|
| 95 |
+
}
|
| 96 |
+
|
| 97 |
+
/**
|
| 98 |
+
* @param array $extra
|
| 99 |
+
* @return array
|
| 100 |
+
*/
|
| 101 |
+
private function appendExtraFields(array $extra)
|
| 102 |
+
{
|
| 103 |
+
foreach ($this->extraFields as $extraName => $serverName) {
|
| 104 |
+
$extra[$extraName] = isset($this->serverData[$serverName]) ? $this->serverData[$serverName] : null;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
if (isset($this->serverData['UNIQUE_ID'])) {
|
| 108 |
+
$extra['unique_id'] = $this->serverData['UNIQUE_ID'];
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
return $extra;
|
| 112 |
+
}
|
| 113 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Registry.php
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
use InvalidArgumentException;
|
| 15 |
+
|
| 16 |
+
/**
|
| 17 |
+
* Monolog log registry
|
| 18 |
+
*
|
| 19 |
+
* Allows to get `Logger` instances in the global scope
|
| 20 |
+
* via static method calls on this class.
|
| 21 |
+
*
|
| 22 |
+
* <code>
|
| 23 |
+
* $application = new Monolog\Logger('application');
|
| 24 |
+
* $api = new Monolog\Logger('api');
|
| 25 |
+
*
|
| 26 |
+
* Monolog\Registry::addLogger($application);
|
| 27 |
+
* Monolog\Registry::addLogger($api);
|
| 28 |
+
*
|
| 29 |
+
* function testLogger()
|
| 30 |
+
* {
|
| 31 |
+
* Monolog\Registry::api()->addError('Sent to $api Logger instance');
|
| 32 |
+
* Monolog\Registry::application()->addError('Sent to $application Logger instance');
|
| 33 |
+
* }
|
| 34 |
+
* </code>
|
| 35 |
+
*
|
| 36 |
+
* @author Tomas Tatarko <tomas@tatarko.sk>
|
| 37 |
+
*/
|
| 38 |
+
class Registry
|
| 39 |
+
{
|
| 40 |
+
/**
|
| 41 |
+
* List of all loggers in the registry (by named indexes)
|
| 42 |
+
*
|
| 43 |
+
* @var Logger[]
|
| 44 |
+
*/
|
| 45 |
+
private static $loggers = array();
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Adds new logging channel to the registry
|
| 49 |
+
*
|
| 50 |
+
* @param Logger $logger Instance of the logging channel
|
| 51 |
+
* @param string|null $name Name of the logging channel ($logger->getName() by default)
|
| 52 |
+
* @param bool $overwrite Overwrite instance in the registry if the given name already exists?
|
| 53 |
+
* @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists
|
| 54 |
+
*/
|
| 55 |
+
public static function addLogger(Logger $logger, $name = null, $overwrite = false)
|
| 56 |
+
{
|
| 57 |
+
$name = $name ?: $logger->getName();
|
| 58 |
+
|
| 59 |
+
if (isset(self::$loggers[$name]) && !$overwrite) {
|
| 60 |
+
throw new InvalidArgumentException('Logger with the given name already exists');
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
self::$loggers[$name] = $logger;
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
/**
|
| 67 |
+
* Checks if such logging channel exists by name or instance
|
| 68 |
+
*
|
| 69 |
+
* @param string|Logger $logger Name or logger instance
|
| 70 |
+
*/
|
| 71 |
+
public static function hasLogger($logger)
|
| 72 |
+
{
|
| 73 |
+
if ($logger instanceof Logger) {
|
| 74 |
+
$index = array_search($logger, self::$loggers, true);
|
| 75 |
+
|
| 76 |
+
return false !== $index;
|
| 77 |
+
} else {
|
| 78 |
+
return isset(self::$loggers[$logger]);
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
/**
|
| 83 |
+
* Removes instance from registry by name or instance
|
| 84 |
+
*
|
| 85 |
+
* @param string|Logger $logger Name or logger instance
|
| 86 |
+
*/
|
| 87 |
+
public static function removeLogger($logger)
|
| 88 |
+
{
|
| 89 |
+
if ($logger instanceof Logger) {
|
| 90 |
+
if (false !== ($idx = array_search($logger, self::$loggers, true))) {
|
| 91 |
+
unset(self::$loggers[$idx]);
|
| 92 |
+
}
|
| 93 |
+
} else {
|
| 94 |
+
unset(self::$loggers[$logger]);
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
/**
|
| 99 |
+
* Clears the registry
|
| 100 |
+
*/
|
| 101 |
+
public static function clear()
|
| 102 |
+
{
|
| 103 |
+
self::$loggers = array();
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
/**
|
| 107 |
+
* Gets Logger instance from the registry
|
| 108 |
+
*
|
| 109 |
+
* @param string $name Name of the requested Logger instance
|
| 110 |
+
* @throws \InvalidArgumentException If named Logger instance is not in the registry
|
| 111 |
+
* @return Logger Requested instance of Logger
|
| 112 |
+
*/
|
| 113 |
+
public static function getInstance($name)
|
| 114 |
+
{
|
| 115 |
+
if (!isset(self::$loggers[$name])) {
|
| 116 |
+
throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name));
|
| 117 |
+
}
|
| 118 |
+
|
| 119 |
+
return self::$loggers[$name];
|
| 120 |
+
}
|
| 121 |
+
|
| 122 |
+
/**
|
| 123 |
+
* Gets Logger instance from the registry via static method call
|
| 124 |
+
*
|
| 125 |
+
* @param string $name Name of the requested Logger instance
|
| 126 |
+
* @param array $arguments Arguments passed to static method call
|
| 127 |
+
* @throws \InvalidArgumentException If named Logger instance is not in the registry
|
| 128 |
+
* @return Logger Requested instance of Logger
|
| 129 |
+
*/
|
| 130 |
+
public static function __callStatic($name, $arguments)
|
| 131 |
+
{
|
| 132 |
+
return self::getInstance($name);
|
| 133 |
+
}
|
| 134 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/ResettableInterface.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* Handler or Processor implementing this interface will be reset when Logger::reset() is called.
|
| 16 |
+
*
|
| 17 |
+
* Resetting ends a log cycle gets them back to their initial state.
|
| 18 |
+
*
|
| 19 |
+
* Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal
|
| 20 |
+
* state, and getting it back to a state in which it can receive log records again.
|
| 21 |
+
*
|
| 22 |
+
* This is useful in case you want to avoid logs leaking between two requests or jobs when you
|
| 23 |
+
* have a long running process like a worker or an application server serving multiple requests
|
| 24 |
+
* in one process.
|
| 25 |
+
*
|
| 26 |
+
* @author Grégoire Pineau <lyrixx@lyrixx.info>
|
| 27 |
+
*/
|
| 28 |
+
interface ResettableInterface
|
| 29 |
+
{
|
| 30 |
+
public function reset();
|
| 31 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/SignalHandler.php
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
use Psr\Log\LoggerInterface;
|
| 15 |
+
use Psr\Log\LogLevel;
|
| 16 |
+
use ReflectionExtension;
|
| 17 |
+
|
| 18 |
+
/**
|
| 19 |
+
* Monolog POSIX signal handler
|
| 20 |
+
*
|
| 21 |
+
* @author Robert Gust-Bardon <robert@gust-bardon.org>
|
| 22 |
+
*/
|
| 23 |
+
class SignalHandler
|
| 24 |
+
{
|
| 25 |
+
private $logger;
|
| 26 |
+
|
| 27 |
+
private $previousSignalHandler = array();
|
| 28 |
+
private $signalLevelMap = array();
|
| 29 |
+
private $signalRestartSyscalls = array();
|
| 30 |
+
|
| 31 |
+
public function __construct(LoggerInterface $logger)
|
| 32 |
+
{
|
| 33 |
+
$this->logger = $logger;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
public function registerSignalHandler($signo, $level = LogLevel::CRITICAL, $callPrevious = true, $restartSyscalls = true, $async = true)
|
| 37 |
+
{
|
| 38 |
+
if (!extension_loaded('pcntl') || !function_exists('pcntl_signal')) {
|
| 39 |
+
return $this;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
if ($callPrevious) {
|
| 43 |
+
if (function_exists('pcntl_signal_get_handler')) {
|
| 44 |
+
$handler = pcntl_signal_get_handler($signo);
|
| 45 |
+
if ($handler === false) {
|
| 46 |
+
return $this;
|
| 47 |
+
}
|
| 48 |
+
$this->previousSignalHandler[$signo] = $handler;
|
| 49 |
+
} else {
|
| 50 |
+
$this->previousSignalHandler[$signo] = true;
|
| 51 |
+
}
|
| 52 |
+
} else {
|
| 53 |
+
unset($this->previousSignalHandler[$signo]);
|
| 54 |
+
}
|
| 55 |
+
$this->signalLevelMap[$signo] = $level;
|
| 56 |
+
$this->signalRestartSyscalls[$signo] = $restartSyscalls;
|
| 57 |
+
|
| 58 |
+
if (function_exists('pcntl_async_signals') && $async !== null) {
|
| 59 |
+
pcntl_async_signals($async);
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
pcntl_signal($signo, array($this, 'handleSignal'), $restartSyscalls);
|
| 63 |
+
|
| 64 |
+
return $this;
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
public function handleSignal($signo, array $siginfo = null)
|
| 68 |
+
{
|
| 69 |
+
static $signals = array();
|
| 70 |
+
|
| 71 |
+
if (!$signals && extension_loaded('pcntl')) {
|
| 72 |
+
$pcntl = new ReflectionExtension('pcntl');
|
| 73 |
+
$constants = $pcntl->getConstants();
|
| 74 |
+
if (!$constants) {
|
| 75 |
+
// HHVM 3.24.2 returns an empty array.
|
| 76 |
+
$constants = get_defined_constants(true);
|
| 77 |
+
$constants = $constants['Core'];
|
| 78 |
+
}
|
| 79 |
+
foreach ($constants as $name => $value) {
|
| 80 |
+
if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && is_int($value)) {
|
| 81 |
+
$signals[$value] = $name;
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
unset($constants);
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
$level = isset($this->signalLevelMap[$signo]) ? $this->signalLevelMap[$signo] : LogLevel::CRITICAL;
|
| 88 |
+
$signal = isset($signals[$signo]) ? $signals[$signo] : $signo;
|
| 89 |
+
$context = isset($siginfo) ? $siginfo : array();
|
| 90 |
+
$this->logger->log($level, sprintf('Program received signal %s', $signal), $context);
|
| 91 |
+
|
| 92 |
+
if (!isset($this->previousSignalHandler[$signo])) {
|
| 93 |
+
return;
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
if ($this->previousSignalHandler[$signo] === true || $this->previousSignalHandler[$signo] === SIG_DFL) {
|
| 97 |
+
if (extension_loaded('pcntl') && function_exists('pcntl_signal') && function_exists('pcntl_sigprocmask') && function_exists('pcntl_signal_dispatch')
|
| 98 |
+
&& extension_loaded('posix') && function_exists('posix_getpid') && function_exists('posix_kill')) {
|
| 99 |
+
$restartSyscalls = isset($this->restartSyscalls[$signo]) ? $this->restartSyscalls[$signo] : true;
|
| 100 |
+
pcntl_signal($signo, SIG_DFL, $restartSyscalls);
|
| 101 |
+
pcntl_sigprocmask(SIG_UNBLOCK, array($signo), $oldset);
|
| 102 |
+
posix_kill(posix_getpid(), $signo);
|
| 103 |
+
pcntl_signal_dispatch();
|
| 104 |
+
pcntl_sigprocmask(SIG_SETMASK, $oldset);
|
| 105 |
+
pcntl_signal($signo, array($this, 'handleSignal'), $restartSyscalls);
|
| 106 |
+
}
|
| 107 |
+
} elseif (is_callable($this->previousSignalHandler[$signo])) {
|
| 108 |
+
if (PHP_VERSION_ID >= 70100) {
|
| 109 |
+
$this->previousSignalHandler[$signo]($signo, $siginfo);
|
| 110 |
+
} else {
|
| 111 |
+
$this->previousSignalHandler[$signo]($signo);
|
| 112 |
+
}
|
| 113 |
+
}
|
| 114 |
+
}
|
| 115 |
+
}
|
common/vendor/monolog/monolog/src/Monolog/Utils.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/*
|
| 4 |
+
* This file is part of the Monolog package.
|
| 5 |
+
*
|
| 6 |
+
* (c) Jordi Boggiano <j.boggiano@seld.be>
|
| 7 |
+
*
|
| 8 |
+
* For the full copyright and license information, please view the LICENSE
|
| 9 |
+
* file that was distributed with this source code.
|
| 10 |
+
*/
|
| 11 |
+
|
| 12 |
+
namespace Monolog;
|
| 13 |
+
|
| 14 |
+
class Utils
|
| 15 |
+
{
|
| 16 |
+
/**
|
| 17 |
+
* @internal
|
| 18 |
+
*/
|
| 19 |
+
public static function getClass($object)
|
| 20 |
+
{
|
| 21 |
+
$class = \get_class($object);
|
| 22 |
+
|
| 23 |
+
return 'c' === $class[0] && 0 === strpos($class, "class@anonymous\0") ? get_parent_class($class).'@anonymous' : $class;
|
| 24 |
+
}
|
| 25 |
+
}
|
common/vendor/psr/log/Psr/Log/AbstractLogger.php
ADDED
|
@@ -0,0 +1,128 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* This is a simple Logger implementation that other Loggers can inherit from.
|
| 7 |
+
*
|
| 8 |
+
* It simply delegates all log-level-specific methods to the `log` method to
|
| 9 |
+
* reduce boilerplate code that a simple Logger that does the same thing with
|
| 10 |
+
* messages regardless of the error level has to implement.
|
| 11 |
+
*/
|
| 12 |
+
abstract class AbstractLogger implements LoggerInterface
|
| 13 |
+
{
|
| 14 |
+
/**
|
| 15 |
+
* System is unusable.
|
| 16 |
+
*
|
| 17 |
+
* @param string $message
|
| 18 |
+
* @param array $context
|
| 19 |
+
*
|
| 20 |
+
* @return void
|
| 21 |
+
*/
|
| 22 |
+
public function emergency($message, array $context = array())
|
| 23 |
+
{
|
| 24 |
+
$this->log(LogLevel::EMERGENCY, $message, $context);
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Action must be taken immediately.
|
| 29 |
+
*
|
| 30 |
+
* Example: Entire website down, database unavailable, etc. This should
|
| 31 |
+
* trigger the SMS alerts and wake you up.
|
| 32 |
+
*
|
| 33 |
+
* @param string $message
|
| 34 |
+
* @param array $context
|
| 35 |
+
*
|
| 36 |
+
* @return void
|
| 37 |
+
*/
|
| 38 |
+
public function alert($message, array $context = array())
|
| 39 |
+
{
|
| 40 |
+
$this->log(LogLevel::ALERT, $message, $context);
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
/**
|
| 44 |
+
* Critical conditions.
|
| 45 |
+
*
|
| 46 |
+
* Example: Application component unavailable, unexpected exception.
|
| 47 |
+
*
|
| 48 |
+
* @param string $message
|
| 49 |
+
* @param array $context
|
| 50 |
+
*
|
| 51 |
+
* @return void
|
| 52 |
+
*/
|
| 53 |
+
public function critical($message, array $context = array())
|
| 54 |
+
{
|
| 55 |
+
$this->log(LogLevel::CRITICAL, $message, $context);
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
/**
|
| 59 |
+
* Runtime errors that do not require immediate action but should typically
|
| 60 |
+
* be logged and monitored.
|
| 61 |
+
*
|
| 62 |
+
* @param string $message
|
| 63 |
+
* @param array $context
|
| 64 |
+
*
|
| 65 |
+
* @return void
|
| 66 |
+
*/
|
| 67 |
+
public function error($message, array $context = array())
|
| 68 |
+
{
|
| 69 |
+
$this->log(LogLevel::ERROR, $message, $context);
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
/**
|
| 73 |
+
* Exceptional occurrences that are not errors.
|
| 74 |
+
*
|
| 75 |
+
* Example: Use of deprecated APIs, poor use of an API, undesirable things
|
| 76 |
+
* that are not necessarily wrong.
|
| 77 |
+
*
|
| 78 |
+
* @param string $message
|
| 79 |
+
* @param array $context
|
| 80 |
+
*
|
| 81 |
+
* @return void
|
| 82 |
+
*/
|
| 83 |
+
public function warning($message, array $context = array())
|
| 84 |
+
{
|
| 85 |
+
$this->log(LogLevel::WARNING, $message, $context);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
/**
|
| 89 |
+
* Normal but significant events.
|
| 90 |
+
*
|
| 91 |
+
* @param string $message
|
| 92 |
+
* @param array $context
|
| 93 |
+
*
|
| 94 |
+
* @return void
|
| 95 |
+
*/
|
| 96 |
+
public function notice($message, array $context = array())
|
| 97 |
+
{
|
| 98 |
+
$this->log(LogLevel::NOTICE, $message, $context);
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
+
/**
|
| 102 |
+
* Interesting events.
|
| 103 |
+
*
|
| 104 |
+
* Example: User logs in, SQL logs.
|
| 105 |
+
*
|
| 106 |
+
* @param string $message
|
| 107 |
+
* @param array $context
|
| 108 |
+
*
|
| 109 |
+
* @return void
|
| 110 |
+
*/
|
| 111 |
+
public function info($message, array $context = array())
|
| 112 |
+
{
|
| 113 |
+
$this->log(LogLevel::INFO, $message, $context);
|
| 114 |
+
}
|
| 115 |
+
|
| 116 |
+
/**
|
| 117 |
+
* Detailed debug information.
|
| 118 |
+
*
|
| 119 |
+
* @param string $message
|
| 120 |
+
* @param array $context
|
| 121 |
+
*
|
| 122 |
+
* @return void
|
| 123 |
+
*/
|
| 124 |
+
public function debug($message, array $context = array())
|
| 125 |
+
{
|
| 126 |
+
$this->log(LogLevel::DEBUG, $message, $context);
|
| 127 |
+
}
|
| 128 |
+
}
|
common/vendor/psr/log/Psr/Log/InvalidArgumentException.php
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
class InvalidArgumentException extends \InvalidArgumentException
|
| 6 |
+
{
|
| 7 |
+
}
|
common/vendor/psr/log/Psr/Log/LogLevel.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Describes log levels.
|
| 7 |
+
*/
|
| 8 |
+
class LogLevel
|
| 9 |
+
{
|
| 10 |
+
const EMERGENCY = 'emergency';
|
| 11 |
+
const ALERT = 'alert';
|
| 12 |
+
const CRITICAL = 'critical';
|
| 13 |
+
const ERROR = 'error';
|
| 14 |
+
const WARNING = 'warning';
|
| 15 |
+
const NOTICE = 'notice';
|
| 16 |
+
const INFO = 'info';
|
| 17 |
+
const DEBUG = 'debug';
|
| 18 |
+
}
|
common/vendor/psr/log/Psr/Log/LoggerAwareInterface.php
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Describes a logger-aware instance.
|
| 7 |
+
*/
|
| 8 |
+
interface LoggerAwareInterface
|
| 9 |
+
{
|
| 10 |
+
/**
|
| 11 |
+
* Sets a logger instance on the object.
|
| 12 |
+
*
|
| 13 |
+
* @param LoggerInterface $logger
|
| 14 |
+
*
|
| 15 |
+
* @return void
|
| 16 |
+
*/
|
| 17 |
+
public function setLogger(LoggerInterface $logger);
|
| 18 |
+
}
|
common/vendor/psr/log/Psr/Log/LoggerAwareTrait.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Basic Implementation of LoggerAwareInterface.
|
| 7 |
+
*/
|
| 8 |
+
trait LoggerAwareTrait
|
| 9 |
+
{
|
| 10 |
+
/**
|
| 11 |
+
* The logger instance.
|
| 12 |
+
*
|
| 13 |
+
* @var LoggerInterface
|
| 14 |
+
*/
|
| 15 |
+
protected $logger;
|
| 16 |
+
|
| 17 |
+
/**
|
| 18 |
+
* Sets a logger.
|
| 19 |
+
*
|
| 20 |
+
* @param LoggerInterface $logger
|
| 21 |
+
*/
|
| 22 |
+
public function setLogger(LoggerInterface $logger)
|
| 23 |
+
{
|
| 24 |
+
$this->logger = $logger;
|
| 25 |
+
}
|
| 26 |
+
}
|
common/vendor/psr/log/Psr/Log/LoggerInterface.php
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* Describes a logger instance.
|
| 7 |
+
*
|
| 8 |
+
* The message MUST be a string or object implementing __toString().
|
| 9 |
+
*
|
| 10 |
+
* The message MAY contain placeholders in the form: {foo} where foo
|
| 11 |
+
* will be replaced by the context data in key "foo".
|
| 12 |
+
*
|
| 13 |
+
* The context array can contain arbitrary data. The only assumption that
|
| 14 |
+
* can be made by implementors is that if an Exception instance is given
|
| 15 |
+
* to produce a stack trace, it MUST be in a key named "exception".
|
| 16 |
+
*
|
| 17 |
+
* See https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md
|
| 18 |
+
* for the full interface specification.
|
| 19 |
+
*/
|
| 20 |
+
interface LoggerInterface
|
| 21 |
+
{
|
| 22 |
+
/**
|
| 23 |
+
* System is unusable.
|
| 24 |
+
*
|
| 25 |
+
* @param string $message
|
| 26 |
+
* @param array $context
|
| 27 |
+
*
|
| 28 |
+
* @return void
|
| 29 |
+
*/
|
| 30 |
+
public function emergency($message, array $context = array());
|
| 31 |
+
|
| 32 |
+
/**
|
| 33 |
+
* Action must be taken immediately.
|
| 34 |
+
*
|
| 35 |
+
* Example: Entire website down, database unavailable, etc. This should
|
| 36 |
+
* trigger the SMS alerts and wake you up.
|
| 37 |
+
*
|
| 38 |
+
* @param string $message
|
| 39 |
+
* @param array $context
|
| 40 |
+
*
|
| 41 |
+
* @return void
|
| 42 |
+
*/
|
| 43 |
+
public function alert($message, array $context = array());
|
| 44 |
+
|
| 45 |
+
/**
|
| 46 |
+
* Critical conditions.
|
| 47 |
+
*
|
| 48 |
+
* Example: Application component unavailable, unexpected exception.
|
| 49 |
+
*
|
| 50 |
+
* @param string $message
|
| 51 |
+
* @param array $context
|
| 52 |
+
*
|
| 53 |
+
* @return void
|
| 54 |
+
*/
|
| 55 |
+
public function critical($message, array $context = array());
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Runtime errors that do not require immediate action but should typically
|
| 59 |
+
* be logged and monitored.
|
| 60 |
+
*
|
| 61 |
+
* @param string $message
|
| 62 |
+
* @param array $context
|
| 63 |
+
*
|
| 64 |
+
* @return void
|
| 65 |
+
*/
|
| 66 |
+
public function error($message, array $context = array());
|
| 67 |
+
|
| 68 |
+
/**
|
| 69 |
+
* Exceptional occurrences that are not errors.
|
| 70 |
+
*
|
| 71 |
+
* Example: Use of deprecated APIs, poor use of an API, undesirable things
|
| 72 |
+
* that are not necessarily wrong.
|
| 73 |
+
*
|
| 74 |
+
* @param string $message
|
| 75 |
+
* @param array $context
|
| 76 |
+
*
|
| 77 |
+
* @return void
|
| 78 |
+
*/
|
| 79 |
+
public function warning($message, array $context = array());
|
| 80 |
+
|
| 81 |
+
/**
|
| 82 |
+
* Normal but significant events.
|
| 83 |
+
*
|
| 84 |
+
* @param string $message
|
| 85 |
+
* @param array $context
|
| 86 |
+
*
|
| 87 |
+
* @return void
|
| 88 |
+
*/
|
| 89 |
+
public function notice($message, array $context = array());
|
| 90 |
+
|
| 91 |
+
/**
|
| 92 |
+
* Interesting events.
|
| 93 |
+
*
|
| 94 |
+
* Example: User logs in, SQL logs.
|
| 95 |
+
*
|
| 96 |
+
* @param string $message
|
| 97 |
+
* @param array $context
|
| 98 |
+
*
|
| 99 |
+
* @return void
|
| 100 |
+
*/
|
| 101 |
+
public function info($message, array $context = array());
|
| 102 |
+
|
| 103 |
+
/**
|
| 104 |
+
* Detailed debug information.
|
| 105 |
+
*
|
| 106 |
+
* @param string $message
|
| 107 |
+
* @param array $context
|
| 108 |
+
*
|
| 109 |
+
* @return void
|
| 110 |
+
*/
|
| 111 |
+
public function debug($message, array $context = array());
|
| 112 |
+
|
| 113 |
+
/**
|
| 114 |
+
* Logs with an arbitrary level.
|
| 115 |
+
*
|
| 116 |
+
* @param mixed $level
|
| 117 |
+
* @param string $message
|
| 118 |
+
* @param array $context
|
| 119 |
+
*
|
| 120 |
+
* @return void
|
| 121 |
+
*/
|
| 122 |
+
public function log($level, $message, array $context = array());
|
| 123 |
+
}
|
common/vendor/psr/log/Psr/Log/LoggerTrait.php
ADDED
|
@@ -0,0 +1,140 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* This is a simple Logger trait that classes unable to extend AbstractLogger
|
| 7 |
+
* (because they extend another class, etc) can include.
|
| 8 |
+
*
|
| 9 |
+
* It simply delegates all log-level-specific methods to the `log` method to
|
| 10 |
+
* reduce boilerplate code that a simple Logger that does the same thing with
|
| 11 |
+
* messages regardless of the error level has to implement.
|
| 12 |
+
*/
|
| 13 |
+
trait LoggerTrait
|
| 14 |
+
{
|
| 15 |
+
/**
|
| 16 |
+
* System is unusable.
|
| 17 |
+
*
|
| 18 |
+
* @param string $message
|
| 19 |
+
* @param array $context
|
| 20 |
+
*
|
| 21 |
+
* @return void
|
| 22 |
+
*/
|
| 23 |
+
public function emergency($message, array $context = array())
|
| 24 |
+
{
|
| 25 |
+
$this->log(LogLevel::EMERGENCY, $message, $context);
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
/**
|
| 29 |
+
* Action must be taken immediately.
|
| 30 |
+
*
|
| 31 |
+
* Example: Entire website down, database unavailable, etc. This should
|
| 32 |
+
* trigger the SMS alerts and wake you up.
|
| 33 |
+
*
|
| 34 |
+
* @param string $message
|
| 35 |
+
* @param array $context
|
| 36 |
+
*
|
| 37 |
+
* @return void
|
| 38 |
+
*/
|
| 39 |
+
public function alert($message, array $context = array())
|
| 40 |
+
{
|
| 41 |
+
$this->log(LogLevel::ALERT, $message, $context);
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
/**
|
| 45 |
+
* Critical conditions.
|
| 46 |
+
*
|
| 47 |
+
* Example: Application component unavailable, unexpected exception.
|
| 48 |
+
*
|
| 49 |
+
* @param string $message
|
| 50 |
+
* @param array $context
|
| 51 |
+
*
|
| 52 |
+
* @return void
|
| 53 |
+
*/
|
| 54 |
+
public function critical($message, array $context = array())
|
| 55 |
+
{
|
| 56 |
+
$this->log(LogLevel::CRITICAL, $message, $context);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/**
|
| 60 |
+
* Runtime errors that do not require immediate action but should typically
|
| 61 |
+
* be logged and monitored.
|
| 62 |
+
*
|
| 63 |
+
* @param string $message
|
| 64 |
+
* @param array $context
|
| 65 |
+
*
|
| 66 |
+
* @return void
|
| 67 |
+
*/
|
| 68 |
+
public function error($message, array $context = array())
|
| 69 |
+
{
|
| 70 |
+
$this->log(LogLevel::ERROR, $message, $context);
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* Exceptional occurrences that are not errors.
|
| 75 |
+
*
|
| 76 |
+
* Example: Use of deprecated APIs, poor use of an API, undesirable things
|
| 77 |
+
* that are not necessarily wrong.
|
| 78 |
+
*
|
| 79 |
+
* @param string $message
|
| 80 |
+
* @param array $context
|
| 81 |
+
*
|
| 82 |
+
* @return void
|
| 83 |
+
*/
|
| 84 |
+
public function warning($message, array $context = array())
|
| 85 |
+
{
|
| 86 |
+
$this->log(LogLevel::WARNING, $message, $context);
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
/**
|
| 90 |
+
* Normal but significant events.
|
| 91 |
+
*
|
| 92 |
+
* @param string $message
|
| 93 |
+
* @param array $context
|
| 94 |
+
*
|
| 95 |
+
* @return void
|
| 96 |
+
*/
|
| 97 |
+
public function notice($message, array $context = array())
|
| 98 |
+
{
|
| 99 |
+
$this->log(LogLevel::NOTICE, $message, $context);
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
/**
|
| 103 |
+
* Interesting events.
|
| 104 |
+
*
|
| 105 |
+
* Example: User logs in, SQL logs.
|
| 106 |
+
*
|
| 107 |
+
* @param string $message
|
| 108 |
+
* @param array $context
|
| 109 |
+
*
|
| 110 |
+
* @return void
|
| 111 |
+
*/
|
| 112 |
+
public function info($message, array $context = array())
|
| 113 |
+
{
|
| 114 |
+
$this->log(LogLevel::INFO, $message, $context);
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
/**
|
| 118 |
+
* Detailed debug information.
|
| 119 |
+
*
|
| 120 |
+
* @param string $message
|
| 121 |
+
* @param array $context
|
| 122 |
+
*
|
| 123 |
+
* @return void
|
| 124 |
+
*/
|
| 125 |
+
public function debug($message, array $context = array())
|
| 126 |
+
{
|
| 127 |
+
$this->log(LogLevel::DEBUG, $message, $context);
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
/**
|
| 131 |
+
* Logs with an arbitrary level.
|
| 132 |
+
*
|
| 133 |
+
* @param mixed $level
|
| 134 |
+
* @param string $message
|
| 135 |
+
* @param array $context
|
| 136 |
+
*
|
| 137 |
+
* @return void
|
| 138 |
+
*/
|
| 139 |
+
abstract public function log($level, $message, array $context = array());
|
| 140 |
+
}
|
common/vendor/psr/log/Psr/Log/NullLogger.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
namespace Psr\Log;
|
| 4 |
+
|
| 5 |
+
/**
|
| 6 |
+
* This Logger can be used to avoid conditional log calls.
|
| 7 |
+
*
|
| 8 |
+
* Logging should always be optional, and if no logger is provided to your
|
| 9 |
+
* library creating a NullLogger instance to have something to throw logs at
|
| 10 |
+
* is a good way to avoid littering your code with `if ($this->logger) { }`
|
| 11 |
+
* blocks.
|
| 12 |
+
*/
|
| 13 |
+
class NullLogger extends AbstractLogger
|
| 14 |
+
{
|
| 15 |
+
/**
|
| 16 |
+
* Logs with an arbitrary level.
|
| 17 |
+
*
|
| 18 |
+
* @param mixed $level
|
| 19 |
+
* @param string $message
|
| 20 |
+
* @param array $context
|
| 21 |
+
*
|
| 22 |
+
* @return void
|
| 23 |
+
*/
|
| 24 |
+
public function log($level, $message, array $context = array())
|
| 25 |
+
{
|
| 26 |
+
// noop
|
| 27 |
+
}
|
| 28 |
+
}
|
common/vendor/tooltipster/tooltipster.bundle.css
ADDED
|
@@ -0,0 +1,388 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* This is the core CSS of Tooltipster */
|
| 2 |
+
|
| 3 |
+
/* GENERAL STRUCTURE RULES (do not edit this section) */
|
| 4 |
+
|
| 5 |
+
.tooltipster-base {
|
| 6 |
+
/* this ensures that a constrained height set by functionPosition,
|
| 7 |
+
if greater that the natural height of the tooltip, will be enforced
|
| 8 |
+
in browsers that support display:flex */
|
| 9 |
+
display: flex;
|
| 10 |
+
pointer-events: none;
|
| 11 |
+
/* this may be overriden in JS for fixed position origins */
|
| 12 |
+
position: absolute;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
.tooltipster-box {
|
| 16 |
+
/* see .tooltipster-base. flex-shrink 1 is only necessary for IE10-
|
| 17 |
+
and flex-basis auto for IE11- (at least) */
|
| 18 |
+
flex: 1 1 auto;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
.tooltipster-content {
|
| 22 |
+
/* prevents an overflow if the user adds padding to the div */
|
| 23 |
+
box-sizing: border-box;
|
| 24 |
+
/* these make sure we'll be able to detect any overflow */
|
| 25 |
+
max-height: 100%;
|
| 26 |
+
max-width: 100%;
|
| 27 |
+
overflow: auto;
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
.tooltipster-ruler {
|
| 31 |
+
/* these let us test the size of the tooltip without overflowing the window */
|
| 32 |
+
bottom: 0;
|
| 33 |
+
left: 0;
|
| 34 |
+
overflow: hidden;
|
| 35 |
+
position: fixed;
|
| 36 |
+
right: 0;
|
| 37 |
+
top: 0;
|
| 38 |
+
visibility: hidden;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/* ANIMATIONS */
|
| 42 |
+
|
| 43 |
+
/* Open/close animations */
|
| 44 |
+
|
| 45 |
+
/* fade */
|
| 46 |
+
|
| 47 |
+
.tooltipster-fade {
|
| 48 |
+
opacity: 0;
|
| 49 |
+
-webkit-transition-property: opacity;
|
| 50 |
+
-moz-transition-property: opacity;
|
| 51 |
+
-o-transition-property: opacity;
|
| 52 |
+
-ms-transition-property: opacity;
|
| 53 |
+
transition-property: opacity;
|
| 54 |
+
}
|
| 55 |
+
.tooltipster-fade.tooltipster-show {
|
| 56 |
+
opacity: 1;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
/* grow */
|
| 60 |
+
|
| 61 |
+
.tooltipster-grow {
|
| 62 |
+
-webkit-transform: scale(0,0);
|
| 63 |
+
-moz-transform: scale(0,0);
|
| 64 |
+
-o-transform: scale(0,0);
|
| 65 |
+
-ms-transform: scale(0,0);
|
| 66 |
+
transform: scale(0,0);
|
| 67 |
+
-webkit-transition-property: -webkit-transform;
|
| 68 |
+
-moz-transition-property: -moz-transform;
|
| 69 |
+
-o-transition-property: -o-transform;
|
| 70 |
+
-ms-transition-property: -ms-transform;
|
| 71 |
+
transition-property: transform;
|
| 72 |
+
-webkit-backface-visibility: hidden;
|
| 73 |
+
}
|
| 74 |
+
.tooltipster-grow.tooltipster-show {
|
| 75 |
+
-webkit-transform: scale(1,1);
|
| 76 |
+
-moz-transform: scale(1,1);
|
| 77 |
+
-o-transform: scale(1,1);
|
| 78 |
+
-ms-transform: scale(1,1);
|
| 79 |
+
transform: scale(1,1);
|
| 80 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
|
| 81 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 82 |
+
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 83 |
+
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 84 |
+
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 85 |
+
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
/* swing */
|
| 89 |
+
|
| 90 |
+
.tooltipster-swing {
|
| 91 |
+
opacity: 0;
|
| 92 |
+
-webkit-transform: rotateZ(4deg);
|
| 93 |
+
-moz-transform: rotateZ(4deg);
|
| 94 |
+
-o-transform: rotateZ(4deg);
|
| 95 |
+
-ms-transform: rotateZ(4deg);
|
| 96 |
+
transform: rotateZ(4deg);
|
| 97 |
+
-webkit-transition-property: -webkit-transform, opacity;
|
| 98 |
+
-moz-transition-property: -moz-transform;
|
| 99 |
+
-o-transition-property: -o-transform;
|
| 100 |
+
-ms-transition-property: -ms-transform;
|
| 101 |
+
transition-property: transform;
|
| 102 |
+
}
|
| 103 |
+
.tooltipster-swing.tooltipster-show {
|
| 104 |
+
opacity: 1;
|
| 105 |
+
-webkit-transform: rotateZ(0deg);
|
| 106 |
+
-moz-transform: rotateZ(0deg);
|
| 107 |
+
-o-transform: rotateZ(0deg);
|
| 108 |
+
-ms-transform: rotateZ(0deg);
|
| 109 |
+
transform: rotateZ(0deg);
|
| 110 |
+
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 1);
|
| 111 |
+
-webkit-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
|
| 112 |
+
-moz-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
|
| 113 |
+
-ms-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
|
| 114 |
+
-o-transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
|
| 115 |
+
transition-timing-function: cubic-bezier(0.230, 0.635, 0.495, 2.4);
|
| 116 |
+
}
|
| 117 |
+
|
| 118 |
+
/* fall */
|
| 119 |
+
|
| 120 |
+
.tooltipster-fall {
|
| 121 |
+
-webkit-transition-property: top;
|
| 122 |
+
-moz-transition-property: top;
|
| 123 |
+
-o-transition-property: top;
|
| 124 |
+
-ms-transition-property: top;
|
| 125 |
+
transition-property: top;
|
| 126 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
|
| 127 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 128 |
+
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 129 |
+
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 130 |
+
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 131 |
+
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 132 |
+
}
|
| 133 |
+
.tooltipster-fall.tooltipster-initial {
|
| 134 |
+
top: 0 !important;
|
| 135 |
+
}
|
| 136 |
+
.tooltipster-fall.tooltipster-show {
|
| 137 |
+
}
|
| 138 |
+
.tooltipster-fall.tooltipster-dying {
|
| 139 |
+
-webkit-transition-property: all;
|
| 140 |
+
-moz-transition-property: all;
|
| 141 |
+
-o-transition-property: all;
|
| 142 |
+
-ms-transition-property: all;
|
| 143 |
+
transition-property: all;
|
| 144 |
+
top: 0 !important;
|
| 145 |
+
opacity: 0;
|
| 146 |
+
}
|
| 147 |
+
|
| 148 |
+
/* slide */
|
| 149 |
+
|
| 150 |
+
.tooltipster-slide {
|
| 151 |
+
-webkit-transition-property: left;
|
| 152 |
+
-moz-transition-property: left;
|
| 153 |
+
-o-transition-property: left;
|
| 154 |
+
-ms-transition-property: left;
|
| 155 |
+
transition-property: left;
|
| 156 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
|
| 157 |
+
-webkit-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 158 |
+
-moz-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 159 |
+
-ms-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 160 |
+
-o-transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 161 |
+
transition-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1.15);
|
| 162 |
+
}
|
| 163 |
+
.tooltipster-slide.tooltipster-initial {
|
| 164 |
+
left: -40px !important;
|
| 165 |
+
}
|
| 166 |
+
.tooltipster-slide.tooltipster-show {
|
| 167 |
+
}
|
| 168 |
+
.tooltipster-slide.tooltipster-dying {
|
| 169 |
+
-webkit-transition-property: all;
|
| 170 |
+
-moz-transition-property: all;
|
| 171 |
+
-o-transition-property: all;
|
| 172 |
+
-ms-transition-property: all;
|
| 173 |
+
transition-property: all;
|
| 174 |
+
left: 0 !important;
|
| 175 |
+
opacity: 0;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
/* Update animations */
|
| 179 |
+
|
| 180 |
+
/* We use animations rather than transitions here because
|
| 181 |
+
transition durations may be specified in the style tag due to
|
| 182 |
+
animationDuration, and we try to avoid collisions and the use
|
| 183 |
+
of !important */
|
| 184 |
+
|
| 185 |
+
/* fade */
|
| 186 |
+
|
| 187 |
+
@keyframes tooltipster-fading {
|
| 188 |
+
0% {
|
| 189 |
+
opacity: 0;
|
| 190 |
+
}
|
| 191 |
+
100% {
|
| 192 |
+
opacity: 1;
|
| 193 |
+
}
|
| 194 |
+
}
|
| 195 |
+
|
| 196 |
+
.tooltipster-update-fade {
|
| 197 |
+
animation: tooltipster-fading 400ms;
|
| 198 |
+
}
|
| 199 |
+
|
| 200 |
+
/* rotate */
|
| 201 |
+
|
| 202 |
+
@keyframes tooltipster-rotating {
|
| 203 |
+
25% {
|
| 204 |
+
transform: rotate(-2deg);
|
| 205 |
+
}
|
| 206 |
+
75% {
|
| 207 |
+
transform: rotate(2deg);
|
| 208 |
+
}
|
| 209 |
+
100% {
|
| 210 |
+
transform: rotate(0);
|
| 211 |
+
}
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
.tooltipster-update-rotate {
|
| 215 |
+
animation: tooltipster-rotating 600ms;
|
| 216 |
+
}
|
| 217 |
+
|
| 218 |
+
/* scale */
|
| 219 |
+
|
| 220 |
+
@keyframes tooltipster-scaling {
|
| 221 |
+
50% {
|
| 222 |
+
transform: scale(1.1);
|
| 223 |
+
}
|
| 224 |
+
100% {
|
| 225 |
+
transform: scale(1);
|
| 226 |
+
}
|
| 227 |
+
}
|
| 228 |
+
|
| 229 |
+
.tooltipster-update-scale {
|
| 230 |
+
animation: tooltipster-scaling 600ms;
|
| 231 |
+
}
|
| 232 |
+
|
| 233 |
+
/**
|
| 234 |
+
* DEFAULT STYLE OF THE SIDETIP PLUGIN
|
| 235 |
+
*
|
| 236 |
+
* All styles are "namespaced" with .tooltipster-sidetip to prevent
|
| 237 |
+
* conflicts between plugins.
|
| 238 |
+
*/
|
| 239 |
+
|
| 240 |
+
/* .tooltipster-box */
|
| 241 |
+
|
| 242 |
+
.tooltipster-sidetip .tooltipster-box {
|
| 243 |
+
background: #565656;
|
| 244 |
+
border: 2px solid black;
|
| 245 |
+
border-radius: 4px;
|
| 246 |
+
}
|
| 247 |
+
|
| 248 |
+
.tooltipster-sidetip.tooltipster-bottom .tooltipster-box {
|
| 249 |
+
margin-top: 8px;
|
| 250 |
+
}
|
| 251 |
+
|
| 252 |
+
.tooltipster-sidetip.tooltipster-left .tooltipster-box {
|
| 253 |
+
margin-right: 8px;
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
.tooltipster-sidetip.tooltipster-right .tooltipster-box {
|
| 257 |
+
margin-left: 8px;
|
| 258 |
+
}
|
| 259 |
+
|
| 260 |
+
.tooltipster-sidetip.tooltipster-top .tooltipster-box {
|
| 261 |
+
margin-bottom: 8px;
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
/* .tooltipster-content */
|
| 265 |
+
|
| 266 |
+
.tooltipster-sidetip .tooltipster-content {
|
| 267 |
+
color: white;
|
| 268 |
+
line-height: 18px;
|
| 269 |
+
padding: 6px 14px;
|
| 270 |
+
}
|
| 271 |
+
|
| 272 |
+
/* .tooltipster-arrow : will keep only the zone of .tooltipster-arrow-uncropped that
|
| 273 |
+
corresponds to the arrow we want to display */
|
| 274 |
+
|
| 275 |
+
.tooltipster-sidetip .tooltipster-arrow {
|
| 276 |
+
overflow: hidden;
|
| 277 |
+
position: absolute;
|
| 278 |
+
}
|
| 279 |
+
|
| 280 |
+
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow {
|
| 281 |
+
height: 10px;
|
| 282 |
+
/* half the width, for centering */
|
| 283 |
+
margin-left: -10px;
|
| 284 |
+
top: 0;
|
| 285 |
+
width: 20px;
|
| 286 |
+
}
|
| 287 |
+
|
| 288 |
+
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow {
|
| 289 |
+
height: 20px;
|
| 290 |
+
margin-top: -10px;
|
| 291 |
+
right: 0;
|
| 292 |
+
/* top 0 to keep the arrow from overflowing .tooltipster-base when it has not
|
| 293 |
+
been positioned yet */
|
| 294 |
+
top: 0;
|
| 295 |
+
width: 10px;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow {
|
| 299 |
+
height: 20px;
|
| 300 |
+
margin-top: -10px;
|
| 301 |
+
left: 0;
|
| 302 |
+
/* same as .tooltipster-left .tooltipster-arrow */
|
| 303 |
+
top: 0;
|
| 304 |
+
width: 10px;
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow {
|
| 308 |
+
bottom: 0;
|
| 309 |
+
height: 10px;
|
| 310 |
+
margin-left: -10px;
|
| 311 |
+
width: 20px;
|
| 312 |
+
}
|
| 313 |
+
|
| 314 |
+
/* common rules between .tooltipster-arrow-background and .tooltipster-arrow-border */
|
| 315 |
+
|
| 316 |
+
.tooltipster-sidetip .tooltipster-arrow-background, .tooltipster-sidetip .tooltipster-arrow-border {
|
| 317 |
+
height: 0;
|
| 318 |
+
position: absolute;
|
| 319 |
+
width: 0;
|
| 320 |
+
}
|
| 321 |
+
|
| 322 |
+
/* .tooltipster-arrow-background */
|
| 323 |
+
|
| 324 |
+
.tooltipster-sidetip .tooltipster-arrow-background {
|
| 325 |
+
border: 10px solid transparent;
|
| 326 |
+
}
|
| 327 |
+
|
| 328 |
+
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background {
|
| 329 |
+
border-bottom-color: #565656;
|
| 330 |
+
left: 0;
|
| 331 |
+
top: 3px;
|
| 332 |
+
}
|
| 333 |
+
|
| 334 |
+
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background {
|
| 335 |
+
border-left-color: #565656;
|
| 336 |
+
left: -3px;
|
| 337 |
+
top: 0;
|
| 338 |
+
}
|
| 339 |
+
|
| 340 |
+
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background {
|
| 341 |
+
border-right-color: #565656;
|
| 342 |
+
left: 3px;
|
| 343 |
+
top: 0;
|
| 344 |
+
}
|
| 345 |
+
|
| 346 |
+
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background {
|
| 347 |
+
border-top-color: #565656;
|
| 348 |
+
left: 0;
|
| 349 |
+
top: -3px;
|
| 350 |
+
}
|
| 351 |
+
|
| 352 |
+
/* .tooltipster-arrow-border */
|
| 353 |
+
|
| 354 |
+
.tooltipster-sidetip .tooltipster-arrow-border {
|
| 355 |
+
border: 10px solid transparent;
|
| 356 |
+
left: 0;
|
| 357 |
+
top: 0;
|
| 358 |
+
}
|
| 359 |
+
|
| 360 |
+
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border {
|
| 361 |
+
border-bottom-color: black;
|
| 362 |
+
}
|
| 363 |
+
|
| 364 |
+
.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border {
|
| 365 |
+
border-left-color: black;
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border {
|
| 369 |
+
border-right-color: black;
|
| 370 |
+
}
|
| 371 |
+
|
| 372 |
+
.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border {
|
| 373 |
+
border-top-color: black;
|
| 374 |
+
}
|
| 375 |
+
|
| 376 |
+
/* tooltipster-arrow-uncropped */
|
| 377 |
+
|
| 378 |
+
.tooltipster-sidetip .tooltipster-arrow-uncropped {
|
| 379 |
+
position: relative;
|
| 380 |
+
}
|
| 381 |
+
|
| 382 |
+
.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped {
|
| 383 |
+
top: -10px;
|
| 384 |
+
}
|
| 385 |
+
|
| 386 |
+
.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped {
|
| 387 |
+
left: -10px;
|
| 388 |
+
}
|
common/vendor/tooltipster/tooltipster.bundle.js
ADDED
|
@@ -0,0 +1,4273 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/**
|
| 2 |
+
* tooltipster http://iamceege.github.io/tooltipster/
|
| 3 |
+
* A rockin' custom tooltip jQuery plugin
|
| 4 |
+
* Developed by Caleb Jacob and Louis Ameline
|
| 5 |
+
* MIT license
|
| 6 |
+
*/
|
| 7 |
+
(function (root, factory) {
|
| 8 |
+
if (typeof define === 'function' && define.amd) {
|
| 9 |
+
// AMD. Register as an anonymous module unless amdModuleId is set
|
| 10 |
+
define(["jquery"], function (a0) {
|
| 11 |
+
return (factory(a0));
|
| 12 |
+
});
|
| 13 |
+
} else if (typeof exports === 'object') {
|
| 14 |
+
// Node. Does not work with strict CommonJS, but
|
| 15 |
+
// only CommonJS-like environments that support module.exports,
|
| 16 |
+
// like Node.
|
| 17 |
+
module.exports = factory(require("jquery"));
|
| 18 |
+
} else {
|
| 19 |
+
factory(jQuery);
|
| 20 |
+
}
|
| 21 |
+
}(this, function ($) {
|
| 22 |
+
|
| 23 |
+
// This file will be UMDified by a build task.
|
| 24 |
+
|
| 25 |
+
var defaults = {
|
| 26 |
+
animation: 'fade',
|
| 27 |
+
animationDuration: 350,
|
| 28 |
+
content: null,
|
| 29 |
+
contentAsHTML: false,
|
| 30 |
+
contentCloning: false,
|
| 31 |
+
debug: true,
|
| 32 |
+
delay: 300,
|
| 33 |
+
delayTouch: [300, 500],
|
| 34 |
+
functionInit: null,
|
| 35 |
+
functionBefore: null,
|
| 36 |
+
functionReady: null,
|
| 37 |
+
functionAfter: null,
|
| 38 |
+
functionFormat: null,
|
| 39 |
+
IEmin: 6,
|
| 40 |
+
interactive: false,
|
| 41 |
+
multiple: false,
|
| 42 |
+
// will default to document.body, or must be an element positioned at (0, 0)
|
| 43 |
+
// in the document, typically like the very top views of an app.
|
| 44 |
+
parent: null,
|
| 45 |
+
plugins: ['sideTip'],
|
| 46 |
+
repositionOnScroll: false,
|
| 47 |
+
restoration: 'none',
|
| 48 |
+
selfDestruction: true,
|
| 49 |
+
theme: [],
|
| 50 |
+
timer: 0,
|
| 51 |
+
trackerInterval: 500,
|
| 52 |
+
trackOrigin: false,
|
| 53 |
+
trackTooltip: false,
|
| 54 |
+
trigger: 'hover',
|
| 55 |
+
triggerClose: {
|
| 56 |
+
click: false,
|
| 57 |
+
mouseleave: false,
|
| 58 |
+
originClick: false,
|
| 59 |
+
scroll: false,
|
| 60 |
+
tap: false,
|
| 61 |
+
touchleave: false
|
| 62 |
+
},
|
| 63 |
+
triggerOpen: {
|
| 64 |
+
click: false,
|
| 65 |
+
mouseenter: false,
|
| 66 |
+
tap: false,
|
| 67 |
+
touchstart: false
|
| 68 |
+
},
|
| 69 |
+
updateAnimation: 'rotate',
|
| 70 |
+
zIndex: 9999999
|
| 71 |
+
},
|
| 72 |
+
// we'll avoid using the 'window' global as a good practice but npm's
|
| 73 |
+
// jquery@<2.1.0 package actually requires a 'window' global, so not sure
|
| 74 |
+
// it's useful at all
|
| 75 |
+
win = (typeof window != 'undefined') ? window : null,
|
| 76 |
+
// env will be proxied by the core for plugins to have access its properties
|
| 77 |
+
env = {
|
| 78 |
+
// detect if this device can trigger touch events. Better have a false
|
| 79 |
+
// positive (unused listeners, that's ok) than a false negative.
|
| 80 |
+
// https://github.com/Modernizr/Modernizr/blob/master/feature-detects/touchevents.js
|
| 81 |
+
// http://stackoverflow.com/questions/4817029/whats-the-best-way-to-detect-a-touch-screen-device-using-javascript
|
| 82 |
+
hasTouchCapability: !!(
|
| 83 |
+
win
|
| 84 |
+
&& ( 'ontouchstart' in win
|
| 85 |
+
|| (win.DocumentTouch && win.document instanceof win.DocumentTouch)
|
| 86 |
+
|| win.navigator.maxTouchPoints
|
| 87 |
+
)
|
| 88 |
+
),
|
| 89 |
+
hasTransitions: transitionSupport(),
|
| 90 |
+
IE: false,
|
| 91 |
+
// don't set manually, it will be updated by a build task after the manifest
|
| 92 |
+
semVer: '4.2.6',
|
| 93 |
+
window: win
|
| 94 |
+
},
|
| 95 |
+
core = function() {
|
| 96 |
+
|
| 97 |
+
// core variables
|
| 98 |
+
|
| 99 |
+
// the core emitters
|
| 100 |
+
this.__$emitterPrivate = $({});
|
| 101 |
+
this.__$emitterPublic = $({});
|
| 102 |
+
this.__instancesLatestArr = [];
|
| 103 |
+
// collects plugin constructors
|
| 104 |
+
this.__plugins = {};
|
| 105 |
+
// proxy env variables for plugins who might use them
|
| 106 |
+
this._env = env;
|
| 107 |
+
};
|
| 108 |
+
|
| 109 |
+
// core methods
|
| 110 |
+
core.prototype = {
|
| 111 |
+
|
| 112 |
+
/**
|
| 113 |
+
* A function to proxy the public methods of an object onto another
|
| 114 |
+
*
|
| 115 |
+
* @param {object} constructor The constructor to bridge
|
| 116 |
+
* @param {object} obj The object that will get new methods (an instance or the core)
|
| 117 |
+
* @param {string} pluginName A plugin name for the console log message
|
| 118 |
+
* @return {core}
|
| 119 |
+
* @private
|
| 120 |
+
*/
|
| 121 |
+
__bridge: function(constructor, obj, pluginName) {
|
| 122 |
+
|
| 123 |
+
// if it's not already bridged
|
| 124 |
+
if (!obj[pluginName]) {
|
| 125 |
+
|
| 126 |
+
var fn = function() {};
|
| 127 |
+
fn.prototype = constructor;
|
| 128 |
+
|
| 129 |
+
var pluginInstance = new fn();
|
| 130 |
+
|
| 131 |
+
// the _init method has to exist in instance constructors but might be missing
|
| 132 |
+
// in core constructors
|
| 133 |
+
if (pluginInstance.__init) {
|
| 134 |
+
pluginInstance.__init(obj);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$.each(constructor, function(methodName, fn) {
|
| 138 |
+
|
| 139 |
+
// don't proxy "private" methods, only "protected" and public ones
|
| 140 |
+
if (methodName.indexOf('__') != 0) {
|
| 141 |
+
|
| 142 |
+
// if the method does not exist yet
|
| 143 |
+
if (!obj[methodName]) {
|
| 144 |
+
|
| 145 |
+
obj[methodName] = function() {
|
| 146 |
+
return pluginInstance[methodName].apply(pluginInstance, Array.prototype.slice.apply(arguments));
|
| 147 |
+
};
|
| 148 |
+
|
| 149 |
+
// remember to which plugin this method corresponds (several plugins may
|
| 150 |
+
// have methods of the same name, we need to be sure)
|
| 151 |
+
obj[methodName].bridged = pluginInstance;
|
| 152 |
+
}
|
| 153 |
+
else if (defaults.debug) {
|
| 154 |
+
|
| 155 |
+
console.log('The '+ methodName +' method of the '+ pluginName
|
| 156 |
+
+' plugin conflicts with another plugin or native methods');
|
| 157 |
+
}
|
| 158 |
+
}
|
| 159 |
+
});
|
| 160 |
+
|
| 161 |
+
obj[pluginName] = pluginInstance;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
return this;
|
| 165 |
+
},
|
| 166 |
+
|
| 167 |
+
/**
|
| 168 |
+
* For mockup in Node env if need be, for testing purposes
|
| 169 |
+
*
|
| 170 |
+
* @return {core}
|
| 171 |
+
* @private
|
| 172 |
+
*/
|
| 173 |
+
__setWindow: function(window) {
|
| 174 |
+
env.window = window;
|
| 175 |
+
return this;
|
| 176 |
+
},
|
| 177 |
+
|
| 178 |
+
/**
|
| 179 |
+
* Returns a ruler, a tool to help measure the size of a tooltip under
|
| 180 |
+
* various settings. Meant for plugins
|
| 181 |
+
*
|
| 182 |
+
* @see Ruler
|
| 183 |
+
* @return {object} A Ruler instance
|
| 184 |
+
* @protected
|
| 185 |
+
*/
|
| 186 |
+
_getRuler: function($tooltip) {
|
| 187 |
+
return new Ruler($tooltip);
|
| 188 |
+
},
|
| 189 |
+
|
| 190 |
+
/**
|
| 191 |
+
* For internal use by plugins, if needed
|
| 192 |
+
*
|
| 193 |
+
* @return {core}
|
| 194 |
+
* @protected
|
| 195 |
+
*/
|
| 196 |
+
_off: function() {
|
| 197 |
+
this.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 198 |
+
return this;
|
| 199 |
+
},
|
| 200 |
+
|
| 201 |
+
/**
|
| 202 |
+
* For internal use by plugins, if needed
|
| 203 |
+
*
|
| 204 |
+
* @return {core}
|
| 205 |
+
* @protected
|
| 206 |
+
*/
|
| 207 |
+
_on: function() {
|
| 208 |
+
this.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 209 |
+
return this;
|
| 210 |
+
},
|
| 211 |
+
|
| 212 |
+
/**
|
| 213 |
+
* For internal use by plugins, if needed
|
| 214 |
+
*
|
| 215 |
+
* @return {core}
|
| 216 |
+
* @protected
|
| 217 |
+
*/
|
| 218 |
+
_one: function() {
|
| 219 |
+
this.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 220 |
+
return this;
|
| 221 |
+
},
|
| 222 |
+
|
| 223 |
+
/**
|
| 224 |
+
* Returns (getter) or adds (setter) a plugin
|
| 225 |
+
*
|
| 226 |
+
* @param {string|object} plugin Provide a string (in the full form
|
| 227 |
+
* "namespace.name") to use as as getter, an object to use as a setter
|
| 228 |
+
* @return {object|core}
|
| 229 |
+
* @protected
|
| 230 |
+
*/
|
| 231 |
+
_plugin: function(plugin) {
|
| 232 |
+
|
| 233 |
+
var self = this;
|
| 234 |
+
|
| 235 |
+
// getter
|
| 236 |
+
if (typeof plugin == 'string') {
|
| 237 |
+
|
| 238 |
+
var pluginName = plugin,
|
| 239 |
+
p = null;
|
| 240 |
+
|
| 241 |
+
// if the namespace is provided, it's easy to search
|
| 242 |
+
if (pluginName.indexOf('.') > 0) {
|
| 243 |
+
p = self.__plugins[pluginName];
|
| 244 |
+
}
|
| 245 |
+
// otherwise, return the first name that matches
|
| 246 |
+
else {
|
| 247 |
+
$.each(self.__plugins, function(i, plugin) {
|
| 248 |
+
|
| 249 |
+
if (plugin.name.substring(plugin.name.length - pluginName.length - 1) == '.'+ pluginName) {
|
| 250 |
+
p = plugin;
|
| 251 |
+
return false;
|
| 252 |
+
}
|
| 253 |
+
});
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
return p;
|
| 257 |
+
}
|
| 258 |
+
// setter
|
| 259 |
+
else {
|
| 260 |
+
|
| 261 |
+
// force namespaces
|
| 262 |
+
if (plugin.name.indexOf('.') < 0) {
|
| 263 |
+
throw new Error('Plugins must be namespaced');
|
| 264 |
+
}
|
| 265 |
+
|
| 266 |
+
self.__plugins[plugin.name] = plugin;
|
| 267 |
+
|
| 268 |
+
// if the plugin has core features
|
| 269 |
+
if (plugin.core) {
|
| 270 |
+
|
| 271 |
+
// bridge non-private methods onto the core to allow new core methods
|
| 272 |
+
self.__bridge(plugin.core, self, plugin.name);
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
return this;
|
| 276 |
+
}
|
| 277 |
+
},
|
| 278 |
+
|
| 279 |
+
/**
|
| 280 |
+
* Trigger events on the core emitters
|
| 281 |
+
*
|
| 282 |
+
* @returns {core}
|
| 283 |
+
* @protected
|
| 284 |
+
*/
|
| 285 |
+
_trigger: function() {
|
| 286 |
+
|
| 287 |
+
var args = Array.prototype.slice.apply(arguments);
|
| 288 |
+
|
| 289 |
+
if (typeof args[0] == 'string') {
|
| 290 |
+
args[0] = { type: args[0] };
|
| 291 |
+
}
|
| 292 |
+
|
| 293 |
+
// note: the order of emitters matters
|
| 294 |
+
this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);
|
| 295 |
+
this.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);
|
| 296 |
+
|
| 297 |
+
return this;
|
| 298 |
+
},
|
| 299 |
+
|
| 300 |
+
/**
|
| 301 |
+
* Returns instances of all tooltips in the page or an a given element
|
| 302 |
+
*
|
| 303 |
+
* @param {string|HTML object collection} selector optional Use this
|
| 304 |
+
* parameter to restrict the set of objects that will be inspected
|
| 305 |
+
* for the retrieval of instances. By default, all instances in the
|
| 306 |
+
* page are returned.
|
| 307 |
+
* @return {array} An array of instance objects
|
| 308 |
+
* @public
|
| 309 |
+
*/
|
| 310 |
+
instances: function(selector) {
|
| 311 |
+
|
| 312 |
+
var instances = [],
|
| 313 |
+
sel = selector || '.tooltipstered';
|
| 314 |
+
|
| 315 |
+
$(sel).each(function() {
|
| 316 |
+
|
| 317 |
+
var $this = $(this),
|
| 318 |
+
ns = $this.data('tooltipster-ns');
|
| 319 |
+
|
| 320 |
+
if (ns) {
|
| 321 |
+
|
| 322 |
+
$.each(ns, function(i, namespace) {
|
| 323 |
+
instances.push($this.data(namespace));
|
| 324 |
+
});
|
| 325 |
+
}
|
| 326 |
+
});
|
| 327 |
+
|
| 328 |
+
return instances;
|
| 329 |
+
},
|
| 330 |
+
|
| 331 |
+
/**
|
| 332 |
+
* Returns the Tooltipster objects generated by the last initializing call
|
| 333 |
+
*
|
| 334 |
+
* @return {array} An array of instance objects
|
| 335 |
+
* @public
|
| 336 |
+
*/
|
| 337 |
+
instancesLatest: function() {
|
| 338 |
+
return this.__instancesLatestArr;
|
| 339 |
+
},
|
| 340 |
+
|
| 341 |
+
/**
|
| 342 |
+
* For public use only, not to be used by plugins (use ::_off() instead)
|
| 343 |
+
*
|
| 344 |
+
* @return {core}
|
| 345 |
+
* @public
|
| 346 |
+
*/
|
| 347 |
+
off: function() {
|
| 348 |
+
this.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 349 |
+
return this;
|
| 350 |
+
},
|
| 351 |
+
|
| 352 |
+
/**
|
| 353 |
+
* For public use only, not to be used by plugins (use ::_on() instead)
|
| 354 |
+
*
|
| 355 |
+
* @return {core}
|
| 356 |
+
* @public
|
| 357 |
+
*/
|
| 358 |
+
on: function() {
|
| 359 |
+
this.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 360 |
+
return this;
|
| 361 |
+
},
|
| 362 |
+
|
| 363 |
+
/**
|
| 364 |
+
* For public use only, not to be used by plugins (use ::_one() instead)
|
| 365 |
+
*
|
| 366 |
+
* @return {core}
|
| 367 |
+
* @public
|
| 368 |
+
*/
|
| 369 |
+
one: function() {
|
| 370 |
+
this.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 371 |
+
return this;
|
| 372 |
+
},
|
| 373 |
+
|
| 374 |
+
/**
|
| 375 |
+
* Returns all HTML elements which have one or more tooltips
|
| 376 |
+
*
|
| 377 |
+
* @param {string} selector optional Use this to restrict the results
|
| 378 |
+
* to the descendants of an element
|
| 379 |
+
* @return {array} An array of HTML elements
|
| 380 |
+
* @public
|
| 381 |
+
*/
|
| 382 |
+
origins: function(selector) {
|
| 383 |
+
|
| 384 |
+
var sel = selector ?
|
| 385 |
+
selector +' ' :
|
| 386 |
+
'';
|
| 387 |
+
|
| 388 |
+
return $(sel +'.tooltipstered').toArray();
|
| 389 |
+
},
|
| 390 |
+
|
| 391 |
+
/**
|
| 392 |
+
* Change default options for all future instances
|
| 393 |
+
*
|
| 394 |
+
* @param {object} d The options that should be made defaults
|
| 395 |
+
* @return {core}
|
| 396 |
+
* @public
|
| 397 |
+
*/
|
| 398 |
+
setDefaults: function(d) {
|
| 399 |
+
$.extend(defaults, d);
|
| 400 |
+
return this;
|
| 401 |
+
},
|
| 402 |
+
|
| 403 |
+
/**
|
| 404 |
+
* For users to trigger their handlers on the public emitter
|
| 405 |
+
*
|
| 406 |
+
* @returns {core}
|
| 407 |
+
* @public
|
| 408 |
+
*/
|
| 409 |
+
triggerHandler: function() {
|
| 410 |
+
this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 411 |
+
return this;
|
| 412 |
+
}
|
| 413 |
+
};
|
| 414 |
+
|
| 415 |
+
// $.tooltipster will be used to call core methods
|
| 416 |
+
$.tooltipster = new core();
|
| 417 |
+
|
| 418 |
+
// the Tooltipster instance class (mind the capital T)
|
| 419 |
+
$.Tooltipster = function(element, options) {
|
| 420 |
+
|
| 421 |
+
// list of instance variables
|
| 422 |
+
|
| 423 |
+
// stack of custom callbacks provided as parameters to API methods
|
| 424 |
+
this.__callbacks = {
|
| 425 |
+
close: [],
|
| 426 |
+
open: []
|
| 427 |
+
};
|
| 428 |
+
// the schedule time of DOM removal
|
| 429 |
+
this.__closingTime;
|
| 430 |
+
// this will be the user content shown in the tooltip. A capital "C" is used
|
| 431 |
+
// because there is also a method called content()
|
| 432 |
+
this.__Content;
|
| 433 |
+
// for the size tracker
|
| 434 |
+
this.__contentBcr;
|
| 435 |
+
// to disable the tooltip after destruction
|
| 436 |
+
this.__destroyed = false;
|
| 437 |
+
// we can't emit directly on the instance because if a method with the same
|
| 438 |
+
// name as the event exists, it will be called by jQuery. Se we use a plain
|
| 439 |
+
// object as emitter. This emitter is for internal use by plugins,
|
| 440 |
+
// if needed.
|
| 441 |
+
this.__$emitterPrivate = $({});
|
| 442 |
+
// this emitter is for the user to listen to events without risking to mess
|
| 443 |
+
// with our internal listeners
|
| 444 |
+
this.__$emitterPublic = $({});
|
| 445 |
+
this.__enabled = true;
|
| 446 |
+
// the reference to the gc interval
|
| 447 |
+
this.__garbageCollector;
|
| 448 |
+
// various position and size data recomputed before each repositioning
|
| 449 |
+
this.__Geometry;
|
| 450 |
+
// the tooltip position, saved after each repositioning by a plugin
|
| 451 |
+
this.__lastPosition;
|
| 452 |
+
// a unique namespace per instance
|
| 453 |
+
this.__namespace = 'tooltipster-'+ Math.round(Math.random()*1000000);
|
| 454 |
+
this.__options;
|
| 455 |
+
// will be used to support origins in scrollable areas
|
| 456 |
+
this.__$originParents;
|
| 457 |
+
this.__pointerIsOverOrigin = false;
|
| 458 |
+
// to remove themes if needed
|
| 459 |
+
this.__previousThemes = [];
|
| 460 |
+
// the state can be either: appearing, stable, disappearing, closed
|
| 461 |
+
this.__state = 'closed';
|
| 462 |
+
// timeout references
|
| 463 |
+
this.__timeouts = {
|
| 464 |
+
close: [],
|
| 465 |
+
open: null
|
| 466 |
+
};
|
| 467 |
+
// store touch events to be able to detect emulated mouse events
|
| 468 |
+
this.__touchEvents = [];
|
| 469 |
+
// the reference to the tracker interval
|
| 470 |
+
this.__tracker = null;
|
| 471 |
+
// the element to which this tooltip is associated
|
| 472 |
+
this._$origin;
|
| 473 |
+
// this will be the tooltip element (jQuery wrapped HTML element).
|
| 474 |
+
// It's the job of a plugin to create it and append it to the DOM
|
| 475 |
+
this._$tooltip;
|
| 476 |
+
|
| 477 |
+
// launch
|
| 478 |
+
this.__init(element, options);
|
| 479 |
+
};
|
| 480 |
+
|
| 481 |
+
$.Tooltipster.prototype = {
|
| 482 |
+
|
| 483 |
+
/**
|
| 484 |
+
* @param origin
|
| 485 |
+
* @param options
|
| 486 |
+
* @private
|
| 487 |
+
*/
|
| 488 |
+
__init: function(origin, options) {
|
| 489 |
+
|
| 490 |
+
var self = this;
|
| 491 |
+
|
| 492 |
+
self._$origin = $(origin);
|
| 493 |
+
self.__options = $.extend(true, {}, defaults, options);
|
| 494 |
+
|
| 495 |
+
// some options may need to be reformatted
|
| 496 |
+
self.__optionsFormat();
|
| 497 |
+
|
| 498 |
+
// don't run on old IE if asked no to
|
| 499 |
+
if ( !env.IE
|
| 500 |
+
|| env.IE >= self.__options.IEmin
|
| 501 |
+
) {
|
| 502 |
+
|
| 503 |
+
// note: the content is null (empty) by default and can stay that
|
| 504 |
+
// way if the plugin remains initialized but not fed any content. The
|
| 505 |
+
// tooltip will just not appear.
|
| 506 |
+
|
| 507 |
+
// let's save the initial value of the title attribute for later
|
| 508 |
+
// restoration if need be.
|
| 509 |
+
var initialTitle = null;
|
| 510 |
+
|
| 511 |
+
// it will already have been saved in case of multiple tooltips
|
| 512 |
+
if (self._$origin.data('tooltipster-initialTitle') === undefined) {
|
| 513 |
+
|
| 514 |
+
initialTitle = self._$origin.attr('title');
|
| 515 |
+
|
| 516 |
+
// we do not want initialTitle to be "undefined" because
|
| 517 |
+
// of how jQuery's .data() method works
|
| 518 |
+
if (initialTitle === undefined) initialTitle = null;
|
| 519 |
+
|
| 520 |
+
self._$origin.data('tooltipster-initialTitle', initialTitle);
|
| 521 |
+
}
|
| 522 |
+
|
| 523 |
+
// If content is provided in the options, it has precedence over the
|
| 524 |
+
// title attribute.
|
| 525 |
+
// Note: an empty string is considered content, only 'null' represents
|
| 526 |
+
// the absence of content.
|
| 527 |
+
// Also, an existing title="" attribute will result in an empty string
|
| 528 |
+
// content
|
| 529 |
+
if (self.__options.content !== null) {
|
| 530 |
+
self.__contentSet(self.__options.content);
|
| 531 |
+
}
|
| 532 |
+
else {
|
| 533 |
+
|
| 534 |
+
var selector = self._$origin.attr('data-tooltip-content'),
|
| 535 |
+
$el;
|
| 536 |
+
|
| 537 |
+
if (selector){
|
| 538 |
+
$el = $(selector);
|
| 539 |
+
}
|
| 540 |
+
|
| 541 |
+
if ($el && $el[0]) {
|
| 542 |
+
self.__contentSet($el.first());
|
| 543 |
+
}
|
| 544 |
+
else {
|
| 545 |
+
self.__contentSet(initialTitle);
|
| 546 |
+
}
|
| 547 |
+
}
|
| 548 |
+
|
| 549 |
+
self._$origin
|
| 550 |
+
// strip the title off of the element to prevent the default tooltips
|
| 551 |
+
// from popping up
|
| 552 |
+
.removeAttr('title')
|
| 553 |
+
// to be able to find all instances on the page later (upon window
|
| 554 |
+
// events in particular)
|
| 555 |
+
.addClass('tooltipstered');
|
| 556 |
+
|
| 557 |
+
// set listeners on the origin
|
| 558 |
+
self.__prepareOrigin();
|
| 559 |
+
|
| 560 |
+
// set the garbage collector
|
| 561 |
+
self.__prepareGC();
|
| 562 |
+
|
| 563 |
+
// init plugins
|
| 564 |
+
$.each(self.__options.plugins, function(i, pluginName) {
|
| 565 |
+
self._plug(pluginName);
|
| 566 |
+
});
|
| 567 |
+
|
| 568 |
+
// to detect swiping
|
| 569 |
+
if (env.hasTouchCapability) {
|
| 570 |
+
$(env.window.document.body).on('touchmove.'+ self.__namespace +'-triggerOpen', function(event) {
|
| 571 |
+
self._touchRecordEvent(event);
|
| 572 |
+
});
|
| 573 |
+
}
|
| 574 |
+
|
| 575 |
+
self
|
| 576 |
+
// prepare the tooltip when it gets created. This event must
|
| 577 |
+
// be fired by a plugin
|
| 578 |
+
._on('created', function() {
|
| 579 |
+
self.__prepareTooltip();
|
| 580 |
+
})
|
| 581 |
+
// save position information when it's sent by a plugin
|
| 582 |
+
._on('repositioned', function(e) {
|
| 583 |
+
self.__lastPosition = e.position;
|
| 584 |
+
});
|
| 585 |
+
}
|
| 586 |
+
else {
|
| 587 |
+
self.__options.disabled = true;
|
| 588 |
+
}
|
| 589 |
+
},
|
| 590 |
+
|
| 591 |
+
/**
|
| 592 |
+
* Insert the content into the appropriate HTML element of the tooltip
|
| 593 |
+
*
|
| 594 |
+
* @returns {self}
|
| 595 |
+
* @private
|
| 596 |
+
*/
|
| 597 |
+
__contentInsert: function() {
|
| 598 |
+
|
| 599 |
+
var self = this,
|
| 600 |
+
$el = self._$tooltip.find('.tooltipster-content'),
|
| 601 |
+
formattedContent = self.__Content,
|
| 602 |
+
format = function(content) {
|
| 603 |
+
formattedContent = content;
|
| 604 |
+
};
|
| 605 |
+
|
| 606 |
+
self._trigger({
|
| 607 |
+
type: 'format',
|
| 608 |
+
content: self.__Content,
|
| 609 |
+
format: format
|
| 610 |
+
});
|
| 611 |
+
|
| 612 |
+
if (self.__options.functionFormat) {
|
| 613 |
+
|
| 614 |
+
formattedContent = self.__options.functionFormat.call(
|
| 615 |
+
self,
|
| 616 |
+
self,
|
| 617 |
+
{ origin: self._$origin[0] },
|
| 618 |
+
self.__Content
|
| 619 |
+
);
|
| 620 |
+
}
|
| 621 |
+
|
| 622 |
+
if (typeof formattedContent === 'string' && !self.__options.contentAsHTML) {
|
| 623 |
+
$el.text(formattedContent);
|
| 624 |
+
}
|
| 625 |
+
else {
|
| 626 |
+
$el
|
| 627 |
+
.empty()
|
| 628 |
+
.append(formattedContent);
|
| 629 |
+
}
|
| 630 |
+
|
| 631 |
+
return self;
|
| 632 |
+
},
|
| 633 |
+
|
| 634 |
+
/**
|
| 635 |
+
* Save the content, cloning it beforehand if need be
|
| 636 |
+
*
|
| 637 |
+
* @param content
|
| 638 |
+
* @returns {self}
|
| 639 |
+
* @private
|
| 640 |
+
*/
|
| 641 |
+
__contentSet: function(content) {
|
| 642 |
+
|
| 643 |
+
// clone if asked. Cloning the object makes sure that each instance has its
|
| 644 |
+
// own version of the content (in case a same object were provided for several
|
| 645 |
+
// instances)
|
| 646 |
+
// reminder: typeof null === object
|
| 647 |
+
if (content instanceof $ && this.__options.contentCloning) {
|
| 648 |
+
content = content.clone(true);
|
| 649 |
+
}
|
| 650 |
+
|
| 651 |
+
this.__Content = content;
|
| 652 |
+
|
| 653 |
+
this._trigger({
|
| 654 |
+
type: 'updated',
|
| 655 |
+
content: content
|
| 656 |
+
});
|
| 657 |
+
|
| 658 |
+
return this;
|
| 659 |
+
},
|
| 660 |
+
|
| 661 |
+
/**
|
| 662 |
+
* Error message about a method call made after destruction
|
| 663 |
+
*
|
| 664 |
+
* @private
|
| 665 |
+
*/
|
| 666 |
+
__destroyError: function() {
|
| 667 |
+
throw new Error('This tooltip has been destroyed and cannot execute your method call.');
|
| 668 |
+
},
|
| 669 |
+
|
| 670 |
+
/**
|
| 671 |
+
* Gather all information about dimensions and available space,
|
| 672 |
+
* called before every repositioning
|
| 673 |
+
*
|
| 674 |
+
* @private
|
| 675 |
+
* @returns {object}
|
| 676 |
+
*/
|
| 677 |
+
__geometry: function() {
|
| 678 |
+
|
| 679 |
+
var self = this,
|
| 680 |
+
$target = self._$origin,
|
| 681 |
+
originIsArea = self._$origin.is('area');
|
| 682 |
+
|
| 683 |
+
// if this._$origin is a map area, the target we'll need
|
| 684 |
+
// the dimensions of is actually the image using the map,
|
| 685 |
+
// not the area itself
|
| 686 |
+
if (originIsArea) {
|
| 687 |
+
|
| 688 |
+
var mapName = self._$origin.parent().attr('name');
|
| 689 |
+
|
| 690 |
+
$target = $('img[usemap="#'+ mapName +'"]');
|
| 691 |
+
}
|
| 692 |
+
|
| 693 |
+
var bcr = $target[0].getBoundingClientRect(),
|
| 694 |
+
$document = $(env.window.document),
|
| 695 |
+
$window = $(env.window),
|
| 696 |
+
$parent = $target,
|
| 697 |
+
// some useful properties of important elements
|
| 698 |
+
geo = {
|
| 699 |
+
// available space for the tooltip, see down below
|
| 700 |
+
available: {
|
| 701 |
+
document: null,
|
| 702 |
+
window: null
|
| 703 |
+
},
|
| 704 |
+
document: {
|
| 705 |
+
size: {
|
| 706 |
+
height: $document.height(),
|
| 707 |
+
width: $document.width()
|
| 708 |
+
}
|
| 709 |
+
},
|
| 710 |
+
window: {
|
| 711 |
+
scroll: {
|
| 712 |
+
// the second ones are for IE compatibility
|
| 713 |
+
left: env.window.scrollX || env.window.document.documentElement.scrollLeft,
|
| 714 |
+
top: env.window.scrollY || env.window.document.documentElement.scrollTop
|
| 715 |
+
},
|
| 716 |
+
size: {
|
| 717 |
+
height: $window.height(),
|
| 718 |
+
width: $window.width()
|
| 719 |
+
}
|
| 720 |
+
},
|
| 721 |
+
origin: {
|
| 722 |
+
// the origin has a fixed lineage if itself or one of its
|
| 723 |
+
// ancestors has a fixed position
|
| 724 |
+
fixedLineage: false,
|
| 725 |
+
// relative to the document
|
| 726 |
+
offset: {},
|
| 727 |
+
size: {
|
| 728 |
+
height: bcr.bottom - bcr.top,
|
| 729 |
+
width: bcr.right - bcr.left
|
| 730 |
+
},
|
| 731 |
+
usemapImage: originIsArea ? $target[0] : null,
|
| 732 |
+
// relative to the window
|
| 733 |
+
windowOffset: {
|
| 734 |
+
bottom: bcr.bottom,
|
| 735 |
+
left: bcr.left,
|
| 736 |
+
right: bcr.right,
|
| 737 |
+
top: bcr.top
|
| 738 |
+
}
|
| 739 |
+
}
|
| 740 |
+
},
|
| 741 |
+
geoFixed = false;
|
| 742 |
+
|
| 743 |
+
// if the element is a map area, some properties may need
|
| 744 |
+
// to be recalculated
|
| 745 |
+
if (originIsArea) {
|
| 746 |
+
|
| 747 |
+
var shape = self._$origin.attr('shape'),
|
| 748 |
+
coords = self._$origin.attr('coords');
|
| 749 |
+
|
| 750 |
+
if (coords) {
|
| 751 |
+
|
| 752 |
+
coords = coords.split(',');
|
| 753 |
+
|
| 754 |
+
$.map(coords, function(val, i) {
|
| 755 |
+
coords[i] = parseInt(val);
|
| 756 |
+
});
|
| 757 |
+
}
|
| 758 |
+
|
| 759 |
+
// if the image itself is the area, nothing more to do
|
| 760 |
+
if (shape != 'default') {
|
| 761 |
+
|
| 762 |
+
switch(shape) {
|
| 763 |
+
|
| 764 |
+
case 'circle':
|
| 765 |
+
|
| 766 |
+
var circleCenterLeft = coords[0],
|
| 767 |
+
circleCenterTop = coords[1],
|
| 768 |
+
circleRadius = coords[2],
|
| 769 |
+
areaTopOffset = circleCenterTop - circleRadius,
|
| 770 |
+
areaLeftOffset = circleCenterLeft - circleRadius;
|
| 771 |
+
|
| 772 |
+
geo.origin.size.height = circleRadius * 2;
|
| 773 |
+
geo.origin.size.width = geo.origin.size.height;
|
| 774 |
+
|
| 775 |
+
geo.origin.windowOffset.left += areaLeftOffset;
|
| 776 |
+
geo.origin.windowOffset.top += areaTopOffset;
|
| 777 |
+
|
| 778 |
+
break;
|
| 779 |
+
|
| 780 |
+
case 'rect':
|
| 781 |
+
|
| 782 |
+
var areaLeft = coords[0],
|
| 783 |
+
areaTop = coords[1],
|
| 784 |
+
areaRight = coords[2],
|
| 785 |
+
areaBottom = coords[3];
|
| 786 |
+
|
| 787 |
+
geo.origin.size.height = areaBottom - areaTop;
|
| 788 |
+
geo.origin.size.width = areaRight - areaLeft;
|
| 789 |
+
|
| 790 |
+
geo.origin.windowOffset.left += areaLeft;
|
| 791 |
+
geo.origin.windowOffset.top += areaTop;
|
| 792 |
+
|
| 793 |
+
break;
|
| 794 |
+
|
| 795 |
+
case 'poly':
|
| 796 |
+
|
| 797 |
+
var areaSmallestX = 0,
|
| 798 |
+
areaSmallestY = 0,
|
| 799 |
+
areaGreatestX = 0,
|
| 800 |
+
areaGreatestY = 0,
|
| 801 |
+
arrayAlternate = 'even';
|
| 802 |
+
|
| 803 |
+
for (var i = 0; i < coords.length; i++) {
|
| 804 |
+
|
| 805 |
+
var areaNumber = coords[i];
|
| 806 |
+
|
| 807 |
+
if (arrayAlternate == 'even') {
|
| 808 |
+
|
| 809 |
+
if (areaNumber > areaGreatestX) {
|
| 810 |
+
|
| 811 |
+
areaGreatestX = areaNumber;
|
| 812 |
+
|
| 813 |
+
if (i === 0) {
|
| 814 |
+
areaSmallestX = areaGreatestX;
|
| 815 |
+
}
|
| 816 |
+
}
|
| 817 |
+
|
| 818 |
+
if (areaNumber < areaSmallestX) {
|
| 819 |
+
areaSmallestX = areaNumber;
|
| 820 |
+
}
|
| 821 |
+
|
| 822 |
+
arrayAlternate = 'odd';
|
| 823 |
+
}
|
| 824 |
+
else {
|
| 825 |
+
if (areaNumber > areaGreatestY) {
|
| 826 |
+
|
| 827 |
+
areaGreatestY = areaNumber;
|
| 828 |
+
|
| 829 |
+
if (i == 1) {
|
| 830 |
+
areaSmallestY = areaGreatestY;
|
| 831 |
+
}
|
| 832 |
+
}
|
| 833 |
+
|
| 834 |
+
if (areaNumber < areaSmallestY) {
|
| 835 |
+
areaSmallestY = areaNumber;
|
| 836 |
+
}
|
| 837 |
+
|
| 838 |
+
arrayAlternate = 'even';
|
| 839 |
+
}
|
| 840 |
+
}
|
| 841 |
+
|
| 842 |
+
geo.origin.size.height = areaGreatestY - areaSmallestY;
|
| 843 |
+
geo.origin.size.width = areaGreatestX - areaSmallestX;
|
| 844 |
+
|
| 845 |
+
geo.origin.windowOffset.left += areaSmallestX;
|
| 846 |
+
geo.origin.windowOffset.top += areaSmallestY;
|
| 847 |
+
|
| 848 |
+
break;
|
| 849 |
+
}
|
| 850 |
+
}
|
| 851 |
+
}
|
| 852 |
+
|
| 853 |
+
// user callback through an event
|
| 854 |
+
var edit = function(r) {
|
| 855 |
+
geo.origin.size.height = r.height,
|
| 856 |
+
geo.origin.windowOffset.left = r.left,
|
| 857 |
+
geo.origin.windowOffset.top = r.top,
|
| 858 |
+
geo.origin.size.width = r.width
|
| 859 |
+
};
|
| 860 |
+
|
| 861 |
+
self._trigger({
|
| 862 |
+
type: 'geometry',
|
| 863 |
+
edit: edit,
|
| 864 |
+
geometry: {
|
| 865 |
+
height: geo.origin.size.height,
|
| 866 |
+
left: geo.origin.windowOffset.left,
|
| 867 |
+
top: geo.origin.windowOffset.top,
|
| 868 |
+
width: geo.origin.size.width
|
| 869 |
+
}
|
| 870 |
+
});
|
| 871 |
+
|
| 872 |
+
// calculate the remaining properties with what we got
|
| 873 |
+
|
| 874 |
+
geo.origin.windowOffset.right = geo.origin.windowOffset.left + geo.origin.size.width;
|
| 875 |
+
geo.origin.windowOffset.bottom = geo.origin.windowOffset.top + geo.origin.size.height;
|
| 876 |
+
|
| 877 |
+
geo.origin.offset.left = geo.origin.windowOffset.left + geo.window.scroll.left;
|
| 878 |
+
geo.origin.offset.top = geo.origin.windowOffset.top + geo.window.scroll.top;
|
| 879 |
+
geo.origin.offset.bottom = geo.origin.offset.top + geo.origin.size.height;
|
| 880 |
+
geo.origin.offset.right = geo.origin.offset.left + geo.origin.size.width;
|
| 881 |
+
|
| 882 |
+
// the space that is available to display the tooltip relatively to the document
|
| 883 |
+
geo.available.document = {
|
| 884 |
+
bottom: {
|
| 885 |
+
height: geo.document.size.height - geo.origin.offset.bottom,
|
| 886 |
+
width: geo.document.size.width
|
| 887 |
+
},
|
| 888 |
+
left: {
|
| 889 |
+
height: geo.document.size.height,
|
| 890 |
+
width: geo.origin.offset.left
|
| 891 |
+
},
|
| 892 |
+
right: {
|
| 893 |
+
height: geo.document.size.height,
|
| 894 |
+
width: geo.document.size.width - geo.origin.offset.right
|
| 895 |
+
},
|
| 896 |
+
top: {
|
| 897 |
+
height: geo.origin.offset.top,
|
| 898 |
+
width: geo.document.size.width
|
| 899 |
+
}
|
| 900 |
+
};
|
| 901 |
+
|
| 902 |
+
// the space that is available to display the tooltip relatively to the viewport
|
| 903 |
+
// (the resulting values may be negative if the origin overflows the viewport)
|
| 904 |
+
geo.available.window = {
|
| 905 |
+
bottom: {
|
| 906 |
+
// the inner max is here to make sure the available height is no bigger
|
| 907 |
+
// than the viewport height (when the origin is off screen at the top).
|
| 908 |
+
// The outer max just makes sure that the height is not negative (when
|
| 909 |
+
// the origin overflows at the bottom).
|
| 910 |
+
height: Math.max(geo.window.size.height - Math.max(geo.origin.windowOffset.bottom, 0), 0),
|
| 911 |
+
width: geo.window.size.width
|
| 912 |
+
},
|
| 913 |
+
left: {
|
| 914 |
+
height: geo.window.size.height,
|
| 915 |
+
width: Math.max(geo.origin.windowOffset.left, 0)
|
| 916 |
+
},
|
| 917 |
+
right: {
|
| 918 |
+
height: geo.window.size.height,
|
| 919 |
+
width: Math.max(geo.window.size.width - Math.max(geo.origin.windowOffset.right, 0), 0)
|
| 920 |
+
},
|
| 921 |
+
top: {
|
| 922 |
+
height: Math.max(geo.origin.windowOffset.top, 0),
|
| 923 |
+
width: geo.window.size.width
|
| 924 |
+
}
|
| 925 |
+
};
|
| 926 |
+
|
| 927 |
+
while ($parent[0].tagName.toLowerCase() != 'html') {
|
| 928 |
+
|
| 929 |
+
if ($parent.css('position') == 'fixed') {
|
| 930 |
+
geo.origin.fixedLineage = true;
|
| 931 |
+
break;
|
| 932 |
+
}
|
| 933 |
+
|
| 934 |
+
$parent = $parent.parent();
|
| 935 |
+
}
|
| 936 |
+
|
| 937 |
+
return geo;
|
| 938 |
+
},
|
| 939 |
+
|
| 940 |
+
/**
|
| 941 |
+
* Some options may need to be formated before being used
|
| 942 |
+
*
|
| 943 |
+
* @returns {self}
|
| 944 |
+
* @private
|
| 945 |
+
*/
|
| 946 |
+
__optionsFormat: function() {
|
| 947 |
+
|
| 948 |
+
if (typeof this.__options.animationDuration == 'number') {
|
| 949 |
+
this.__options.animationDuration = [this.__options.animationDuration, this.__options.animationDuration];
|
| 950 |
+
}
|
| 951 |
+
|
| 952 |
+
if (typeof this.__options.delay == 'number') {
|
| 953 |
+
this.__options.delay = [this.__options.delay, this.__options.delay];
|
| 954 |
+
}
|
| 955 |
+
|
| 956 |
+
if (typeof this.__options.delayTouch == 'number') {
|
| 957 |
+
this.__options.delayTouch = [this.__options.delayTouch, this.__options.delayTouch];
|
| 958 |
+
}
|
| 959 |
+
|
| 960 |
+
if (typeof this.__options.theme == 'string') {
|
| 961 |
+
this.__options.theme = [this.__options.theme];
|
| 962 |
+
}
|
| 963 |
+
|
| 964 |
+
// determine the future parent
|
| 965 |
+
if (this.__options.parent === null) {
|
| 966 |
+
this.__options.parent = $(env.window.document.body);
|
| 967 |
+
}
|
| 968 |
+
else if (typeof this.__options.parent == 'string') {
|
| 969 |
+
this.__options.parent = $(this.__options.parent);
|
| 970 |
+
}
|
| 971 |
+
|
| 972 |
+
if (this.__options.trigger == 'hover') {
|
| 973 |
+
|
| 974 |
+
this.__options.triggerOpen = {
|
| 975 |
+
mouseenter: true,
|
| 976 |
+
touchstart: true
|
| 977 |
+
};
|
| 978 |
+
|
| 979 |
+
this.__options.triggerClose = {
|
| 980 |
+
mouseleave: true,
|
| 981 |
+
originClick: true,
|
| 982 |
+
touchleave: true
|
| 983 |
+
};
|
| 984 |
+
}
|
| 985 |
+
else if (this.__options.trigger == 'click') {
|
| 986 |
+
|
| 987 |
+
this.__options.triggerOpen = {
|
| 988 |
+
click: true,
|
| 989 |
+
tap: true
|
| 990 |
+
};
|
| 991 |
+
|
| 992 |
+
this.__options.triggerClose = {
|
| 993 |
+
click: true,
|
| 994 |
+
tap: true
|
| 995 |
+
};
|
| 996 |
+
}
|
| 997 |
+
|
| 998 |
+
// for the plugins
|
| 999 |
+
this._trigger('options');
|
| 1000 |
+
|
| 1001 |
+
return this;
|
| 1002 |
+
},
|
| 1003 |
+
|
| 1004 |
+
/**
|
| 1005 |
+
* Schedules or cancels the garbage collector task
|
| 1006 |
+
*
|
| 1007 |
+
* @returns {self}
|
| 1008 |
+
* @private
|
| 1009 |
+
*/
|
| 1010 |
+
__prepareGC: function() {
|
| 1011 |
+
|
| 1012 |
+
var self = this;
|
| 1013 |
+
|
| 1014 |
+
// in case the selfDestruction option has been changed by a method call
|
| 1015 |
+
if (self.__options.selfDestruction) {
|
| 1016 |
+
|
| 1017 |
+
// the GC task
|
| 1018 |
+
self.__garbageCollector = setInterval(function() {
|
| 1019 |
+
|
| 1020 |
+
var now = new Date().getTime();
|
| 1021 |
+
|
| 1022 |
+
// forget the old events
|
| 1023 |
+
self.__touchEvents = $.grep(self.__touchEvents, function(event, i) {
|
| 1024 |
+
// 1 minute
|
| 1025 |
+
return now - event.time > 60000;
|
| 1026 |
+
});
|
| 1027 |
+
|
| 1028 |
+
// auto-destruct if the origin is gone
|
| 1029 |
+
if (!bodyContains(self._$origin)) {
|
| 1030 |
+
|
| 1031 |
+
self.close(function(){
|
| 1032 |
+
self.destroy();
|
| 1033 |
+
});
|
| 1034 |
+
}
|
| 1035 |
+
}, 20000);
|
| 1036 |
+
}
|
| 1037 |
+
else {
|
| 1038 |
+
clearInterval(self.__garbageCollector);
|
| 1039 |
+
}
|
| 1040 |
+
|
| 1041 |
+
return self;
|
| 1042 |
+
},
|
| 1043 |
+
|
| 1044 |
+
/**
|
| 1045 |
+
* Sets listeners on the origin if the open triggers require them.
|
| 1046 |
+
* Unlike the listeners set at opening time, these ones
|
| 1047 |
+
* remain even when the tooltip is closed. It has been made a
|
| 1048 |
+
* separate method so it can be called when the triggers are
|
| 1049 |
+
* changed in the options. Closing is handled in _open()
|
| 1050 |
+
* because of the bindings that may be needed on the tooltip
|
| 1051 |
+
* itself
|
| 1052 |
+
*
|
| 1053 |
+
* @returns {self}
|
| 1054 |
+
* @private
|
| 1055 |
+
*/
|
| 1056 |
+
__prepareOrigin: function() {
|
| 1057 |
+
|
| 1058 |
+
var self = this;
|
| 1059 |
+
|
| 1060 |
+
// in case we're resetting the triggers
|
| 1061 |
+
self._$origin.off('.'+ self.__namespace +'-triggerOpen');
|
| 1062 |
+
|
| 1063 |
+
// if the device is touch capable, even if only mouse triggers
|
| 1064 |
+
// are asked, we need to listen to touch events to know if the mouse
|
| 1065 |
+
// events are actually emulated (so we can ignore them)
|
| 1066 |
+
if (env.hasTouchCapability) {
|
| 1067 |
+
|
| 1068 |
+
self._$origin.on(
|
| 1069 |
+
'touchstart.'+ self.__namespace +'-triggerOpen ' +
|
| 1070 |
+
'touchend.'+ self.__namespace +'-triggerOpen ' +
|
| 1071 |
+
'touchcancel.'+ self.__namespace +'-triggerOpen',
|
| 1072 |
+
function(event){
|
| 1073 |
+
self._touchRecordEvent(event);
|
| 1074 |
+
}
|
| 1075 |
+
);
|
| 1076 |
+
}
|
| 1077 |
+
|
| 1078 |
+
// mouse click and touch tap work the same way
|
| 1079 |
+
if ( self.__options.triggerOpen.click
|
| 1080 |
+
|| (self.__options.triggerOpen.tap && env.hasTouchCapability)
|
| 1081 |
+
) {
|
| 1082 |
+
|
| 1083 |
+
var eventNames = '';
|
| 1084 |
+
if (self.__options.triggerOpen.click) {
|
| 1085 |
+
eventNames += 'click.'+ self.__namespace +'-triggerOpen ';
|
| 1086 |
+
}
|
| 1087 |
+
if (self.__options.triggerOpen.tap && env.hasTouchCapability) {
|
| 1088 |
+
eventNames += 'touchend.'+ self.__namespace +'-triggerOpen';
|
| 1089 |
+
}
|
| 1090 |
+
|
| 1091 |
+
self._$origin.on(eventNames, function(event) {
|
| 1092 |
+
if (self._touchIsMeaningfulEvent(event)) {
|
| 1093 |
+
self._open(event);
|
| 1094 |
+
}
|
| 1095 |
+
});
|
| 1096 |
+
}
|
| 1097 |
+
|
| 1098 |
+
// mouseenter and touch start work the same way
|
| 1099 |
+
if ( self.__options.triggerOpen.mouseenter
|
| 1100 |
+
|| (self.__options.triggerOpen.touchstart && env.hasTouchCapability)
|
| 1101 |
+
) {
|
| 1102 |
+
|
| 1103 |
+
var eventNames = '';
|
| 1104 |
+
if (self.__options.triggerOpen.mouseenter) {
|
| 1105 |
+
eventNames += 'mouseenter.'+ self.__namespace +'-triggerOpen ';
|
| 1106 |
+
}
|
| 1107 |
+
if (self.__options.triggerOpen.touchstart && env.hasTouchCapability) {
|
| 1108 |
+
eventNames += 'touchstart.'+ self.__namespace +'-triggerOpen';
|
| 1109 |
+
}
|
| 1110 |
+
|
| 1111 |
+
self._$origin.on(eventNames, function(event) {
|
| 1112 |
+
if ( self._touchIsTouchEvent(event)
|
| 1113 |
+
|| !self._touchIsEmulatedEvent(event)
|
| 1114 |
+
) {
|
| 1115 |
+
self.__pointerIsOverOrigin = true;
|
| 1116 |
+
self._openShortly(event);
|
| 1117 |
+
}
|
| 1118 |
+
});
|
| 1119 |
+
}
|
| 1120 |
+
|
| 1121 |
+
// info for the mouseleave/touchleave close triggers when they use a delay
|
| 1122 |
+
if ( self.__options.triggerClose.mouseleave
|
| 1123 |
+
|| (self.__options.triggerClose.touchleave && env.hasTouchCapability)
|
| 1124 |
+
) {
|
| 1125 |
+
|
| 1126 |
+
var eventNames = '';
|
| 1127 |
+
if (self.__options.triggerClose.mouseleave) {
|
| 1128 |
+
eventNames += 'mouseleave.'+ self.__namespace +'-triggerOpen ';
|
| 1129 |
+
}
|
| 1130 |
+
if (self.__options.triggerClose.touchleave && env.hasTouchCapability) {
|
| 1131 |
+
eventNames += 'touchend.'+ self.__namespace +'-triggerOpen touchcancel.'+ self.__namespace +'-triggerOpen';
|
| 1132 |
+
}
|
| 1133 |
+
|
| 1134 |
+
self._$origin.on(eventNames, function(event) {
|
| 1135 |
+
|
| 1136 |
+
if (self._touchIsMeaningfulEvent(event)) {
|
| 1137 |
+
self.__pointerIsOverOrigin = false;
|
| 1138 |
+
}
|
| 1139 |
+
});
|
| 1140 |
+
}
|
| 1141 |
+
|
| 1142 |
+
return self;
|
| 1143 |
+
},
|
| 1144 |
+
|
| 1145 |
+
/**
|
| 1146 |
+
* Do the things that need to be done only once after the tooltip
|
| 1147 |
+
* HTML element it has been created. It has been made a separate
|
| 1148 |
+
* method so it can be called when options are changed. Remember
|
| 1149 |
+
* that the tooltip may actually exist in the DOM before it is
|
| 1150 |
+
* opened, and present after it has been closed: it's the display
|
| 1151 |
+
* plugin that takes care of handling it.
|
| 1152 |
+
*
|
| 1153 |
+
* @returns {self}
|
| 1154 |
+
* @private
|
| 1155 |
+
*/
|
| 1156 |
+
__prepareTooltip: function() {
|
| 1157 |
+
|
| 1158 |
+
var self = this,
|
| 1159 |
+
p = self.__options.interactive ? 'auto' : '';
|
| 1160 |
+
|
| 1161 |
+
// this will be useful to know quickly if the tooltip is in
|
| 1162 |
+
// the DOM or not
|
| 1163 |
+
self._$tooltip
|
| 1164 |
+
.attr('id', self.__namespace)
|
| 1165 |
+
.css({
|
| 1166 |
+
// pointer events
|
| 1167 |
+
'pointer-events': p,
|
| 1168 |
+
zIndex: self.__options.zIndex
|
| 1169 |
+
});
|
| 1170 |
+
|
| 1171 |
+
// themes
|
| 1172 |
+
// remove the old ones and add the new ones
|
| 1173 |
+
$.each(self.__previousThemes, function(i, theme) {
|
| 1174 |
+
self._$tooltip.removeClass(theme);
|
| 1175 |
+
});
|
| 1176 |
+
$.each(self.__options.theme, function(i, theme) {
|
| 1177 |
+
self._$tooltip.addClass(theme);
|
| 1178 |
+
});
|
| 1179 |
+
|
| 1180 |
+
self.__previousThemes = $.merge([], self.__options.theme);
|
| 1181 |
+
|
| 1182 |
+
return self;
|
| 1183 |
+
},
|
| 1184 |
+
|
| 1185 |
+
/**
|
| 1186 |
+
* Handles the scroll on any of the parents of the origin (when the
|
| 1187 |
+
* tooltip is open)
|
| 1188 |
+
*
|
| 1189 |
+
* @param {object} event
|
| 1190 |
+
* @returns {self}
|
| 1191 |
+
* @private
|
| 1192 |
+
*/
|
| 1193 |
+
__scrollHandler: function(event) {
|
| 1194 |
+
|
| 1195 |
+
var self = this;
|
| 1196 |
+
|
| 1197 |
+
if (self.__options.triggerClose.scroll) {
|
| 1198 |
+
self._close(event);
|
| 1199 |
+
}
|
| 1200 |
+
else {
|
| 1201 |
+
|
| 1202 |
+
// if the origin or tooltip have been removed: do nothing, the tracker will
|
| 1203 |
+
// take care of it later
|
| 1204 |
+
if (bodyContains(self._$origin) && bodyContains(self._$tooltip)) {
|
| 1205 |
+
|
| 1206 |
+
var geo = null;
|
| 1207 |
+
|
| 1208 |
+
// if the scroll happened on the window
|
| 1209 |
+
if (event.target === env.window.document) {
|
| 1210 |
+
|
| 1211 |
+
// if the origin has a fixed lineage, window scroll will have no
|
| 1212 |
+
// effect on its position nor on the position of the tooltip
|
| 1213 |
+
if (!self.__Geometry.origin.fixedLineage) {
|
| 1214 |
+
|
| 1215 |
+
// we don't need to do anything unless repositionOnScroll is true
|
| 1216 |
+
// because the tooltip will already have moved with the window
|
| 1217 |
+
// (and of course with the origin)
|
| 1218 |
+
if (self.__options.repositionOnScroll) {
|
| 1219 |
+
self.reposition(event);
|
| 1220 |
+
}
|
| 1221 |
+
}
|
| 1222 |
+
}
|
| 1223 |
+
// if the scroll happened on another parent of the tooltip, it means
|
| 1224 |
+
// that it's in a scrollable area and now needs to have its position
|
| 1225 |
+
// adjusted or recomputed, depending ont the repositionOnScroll
|
| 1226 |
+
// option. Also, if the origin is partly hidden due to a parent that
|
| 1227 |
+
// hides its overflow, we'll just hide (not close) the tooltip.
|
| 1228 |
+
else {
|
| 1229 |
+
|
| 1230 |
+
geo = self.__geometry();
|
| 1231 |
+
|
| 1232 |
+
var overflows = false;
|
| 1233 |
+
|
| 1234 |
+
// a fixed position origin is not affected by the overflow hiding
|
| 1235 |
+
// of a parent
|
| 1236 |
+
if (self._$origin.css('position') != 'fixed') {
|
| 1237 |
+
|
| 1238 |
+
self.__$originParents.each(function(i, el) {
|
| 1239 |
+
|
| 1240 |
+
var $el = $(el),
|
| 1241 |
+
overflowX = $el.css('overflow-x'),
|
| 1242 |
+
overflowY = $el.css('overflow-y');
|
| 1243 |
+
|
| 1244 |
+
if (overflowX != 'visible' || overflowY != 'visible') {
|
| 1245 |
+
|
| 1246 |
+
var bcr = el.getBoundingClientRect();
|
| 1247 |
+
|
| 1248 |
+
if (overflowX != 'visible') {
|
| 1249 |
+
|
| 1250 |
+
if ( geo.origin.windowOffset.left < bcr.left
|
| 1251 |
+
|| geo.origin.windowOffset.right > bcr.right
|
| 1252 |
+
) {
|
| 1253 |
+
overflows = true;
|
| 1254 |
+
return false;
|
| 1255 |
+
}
|
| 1256 |
+
}
|
| 1257 |
+
|
| 1258 |
+
if (overflowY != 'visible') {
|
| 1259 |
+
|
| 1260 |
+
if ( geo.origin.windowOffset.top < bcr.top
|
| 1261 |
+
|| geo.origin.windowOffset.bottom > bcr.bottom
|
| 1262 |
+
) {
|
| 1263 |
+
overflows = true;
|
| 1264 |
+
return false;
|
| 1265 |
+
}
|
| 1266 |
+
}
|
| 1267 |
+
}
|
| 1268 |
+
|
| 1269 |
+
// no need to go further if fixed, for the same reason as above
|
| 1270 |
+
if ($el.css('position') == 'fixed') {
|
| 1271 |
+
return false;
|
| 1272 |
+
}
|
| 1273 |
+
});
|
| 1274 |
+
}
|
| 1275 |
+
|
| 1276 |
+
if (overflows) {
|
| 1277 |
+
self._$tooltip.css('visibility', 'hidden');
|
| 1278 |
+
}
|
| 1279 |
+
else {
|
| 1280 |
+
|
| 1281 |
+
self._$tooltip.css('visibility', 'visible');
|
| 1282 |
+
|
| 1283 |
+
// reposition
|
| 1284 |
+
if (self.__options.repositionOnScroll) {
|
| 1285 |
+
self.reposition(event);
|
| 1286 |
+
}
|
| 1287 |
+
// or just adjust offset
|
| 1288 |
+
else {
|
| 1289 |
+
|
| 1290 |
+
// we have to use offset and not windowOffset because this way,
|
| 1291 |
+
// only the scroll distance of the scrollable areas are taken into
|
| 1292 |
+
// account (the scrolltop value of the main window must be
|
| 1293 |
+
// ignored since the tooltip already moves with it)
|
| 1294 |
+
var offsetLeft = geo.origin.offset.left - self.__Geometry.origin.offset.left,
|
| 1295 |
+
offsetTop = geo.origin.offset.top - self.__Geometry.origin.offset.top;
|
| 1296 |
+
|
| 1297 |
+
// add the offset to the position initially computed by the display plugin
|
| 1298 |
+
self._$tooltip.css({
|
| 1299 |
+
left: self.__lastPosition.coord.left + offsetLeft,
|
| 1300 |
+
top: self.__lastPosition.coord.top + offsetTop
|
| 1301 |
+
});
|
| 1302 |
+
}
|
| 1303 |
+
}
|
| 1304 |
+
}
|
| 1305 |
+
|
| 1306 |
+
self._trigger({
|
| 1307 |
+
type: 'scroll',
|
| 1308 |
+
event: event,
|
| 1309 |
+
geo: geo
|
| 1310 |
+
});
|
| 1311 |
+
}
|
| 1312 |
+
}
|
| 1313 |
+
|
| 1314 |
+
return self;
|
| 1315 |
+
},
|
| 1316 |
+
|
| 1317 |
+
/**
|
| 1318 |
+
* Changes the state of the tooltip
|
| 1319 |
+
*
|
| 1320 |
+
* @param {string} state
|
| 1321 |
+
* @returns {self}
|
| 1322 |
+
* @private
|
| 1323 |
+
*/
|
| 1324 |
+
__stateSet: function(state) {
|
| 1325 |
+
|
| 1326 |
+
this.__state = state;
|
| 1327 |
+
|
| 1328 |
+
this._trigger({
|
| 1329 |
+
type: 'state',
|
| 1330 |
+
state: state
|
| 1331 |
+
});
|
| 1332 |
+
|
| 1333 |
+
return this;
|
| 1334 |
+
},
|
| 1335 |
+
|
| 1336 |
+
/**
|
| 1337 |
+
* Clear appearance timeouts
|
| 1338 |
+
*
|
| 1339 |
+
* @returns {self}
|
| 1340 |
+
* @private
|
| 1341 |
+
*/
|
| 1342 |
+
__timeoutsClear: function() {
|
| 1343 |
+
|
| 1344 |
+
// there is only one possible open timeout: the delayed opening
|
| 1345 |
+
// when the mouseenter/touchstart open triggers are used
|
| 1346 |
+
clearTimeout(this.__timeouts.open);
|
| 1347 |
+
this.__timeouts.open = null;
|
| 1348 |
+
|
| 1349 |
+
// ... but several close timeouts: the delayed closing when the
|
| 1350 |
+
// mouseleave close trigger is used and the timer option
|
| 1351 |
+
$.each(this.__timeouts.close, function(i, timeout) {
|
| 1352 |
+
clearTimeout(timeout);
|
| 1353 |
+
});
|
| 1354 |
+
this.__timeouts.close = [];
|
| 1355 |
+
|
| 1356 |
+
return this;
|
| 1357 |
+
},
|
| 1358 |
+
|
| 1359 |
+
/**
|
| 1360 |
+
* Start the tracker that will make checks at regular intervals
|
| 1361 |
+
*
|
| 1362 |
+
* @returns {self}
|
| 1363 |
+
* @private
|
| 1364 |
+
*/
|
| 1365 |
+
__trackerStart: function() {
|
| 1366 |
+
|
| 1367 |
+
var self = this,
|
| 1368 |
+
$content = self._$tooltip.find('.tooltipster-content');
|
| 1369 |
+
|
| 1370 |
+
// get the initial content size
|
| 1371 |
+
if (self.__options.trackTooltip) {
|
| 1372 |
+
self.__contentBcr = $content[0].getBoundingClientRect();
|
| 1373 |
+
}
|
| 1374 |
+
|
| 1375 |
+
self.__tracker = setInterval(function() {
|
| 1376 |
+
|
| 1377 |
+
// if the origin or tooltip elements have been removed.
|
| 1378 |
+
// Note: we could destroy the instance now if the origin has
|
| 1379 |
+
// been removed but we'll leave that task to our garbage collector
|
| 1380 |
+
if (!bodyContains(self._$origin) || !bodyContains(self._$tooltip)) {
|
| 1381 |
+
self._close();
|
| 1382 |
+
}
|
| 1383 |
+
// if everything is alright
|
| 1384 |
+
else {
|
| 1385 |
+
|
| 1386 |
+
// compare the former and current positions of the origin to reposition
|
| 1387 |
+
// the tooltip if need be
|
| 1388 |
+
if (self.__options.trackOrigin) {
|
| 1389 |
+
|
| 1390 |
+
var g = self.__geometry(),
|
| 1391 |
+
identical = false;
|
| 1392 |
+
|
| 1393 |
+
// compare size first (a change requires repositioning too)
|
| 1394 |
+
if (areEqual(g.origin.size, self.__Geometry.origin.size)) {
|
| 1395 |
+
|
| 1396 |
+
// for elements that have a fixed lineage (see __geometry()), we track the
|
| 1397 |
+
// top and left properties (relative to window)
|
| 1398 |
+
if (self.__Geometry.origin.fixedLineage) {
|
| 1399 |
+
if (areEqual(g.origin.windowOffset, self.__Geometry.origin.windowOffset)) {
|
| 1400 |
+
identical = true;
|
| 1401 |
+
}
|
| 1402 |
+
}
|
| 1403 |
+
// otherwise, track total offset (relative to document)
|
| 1404 |
+
else {
|
| 1405 |
+
if (areEqual(g.origin.offset, self.__Geometry.origin.offset)) {
|
| 1406 |
+
identical = true;
|
| 1407 |
+
}
|
| 1408 |
+
}
|
| 1409 |
+
}
|
| 1410 |
+
|
| 1411 |
+
if (!identical) {
|
| 1412 |
+
|
| 1413 |
+
// close the tooltip when using the mouseleave close trigger
|
| 1414 |
+
// (see https://github.com/iamceege/tooltipster/pull/253)
|
| 1415 |
+
if (self.__options.triggerClose.mouseleave) {
|
| 1416 |
+
self._close();
|
| 1417 |
+
}
|
| 1418 |
+
else {
|
| 1419 |
+
self.reposition();
|
| 1420 |
+
}
|
| 1421 |
+
}
|
| 1422 |
+
}
|
| 1423 |
+
|
| 1424 |
+
if (self.__options.trackTooltip) {
|
| 1425 |
+
|
| 1426 |
+
var currentBcr = $content[0].getBoundingClientRect();
|
| 1427 |
+
|
| 1428 |
+
if ( currentBcr.height !== self.__contentBcr.height
|
| 1429 |
+
|| currentBcr.width !== self.__contentBcr.width
|
| 1430 |
+
) {
|
| 1431 |
+
self.reposition();
|
| 1432 |
+
self.__contentBcr = currentBcr;
|
| 1433 |
+
}
|
| 1434 |
+
}
|
| 1435 |
+
}
|
| 1436 |
+
}, self.__options.trackerInterval);
|
| 1437 |
+
|
| 1438 |
+
return self;
|
| 1439 |
+
},
|
| 1440 |
+
|
| 1441 |
+
/**
|
| 1442 |
+
* Closes the tooltip (after the closing delay)
|
| 1443 |
+
*
|
| 1444 |
+
* @param event
|
| 1445 |
+
* @param callback
|
| 1446 |
+
* @param force Set to true to override a potential refusal of the user's function
|
| 1447 |
+
* @returns {self}
|
| 1448 |
+
* @protected
|
| 1449 |
+
*/
|
| 1450 |
+
_close: function(event, callback, force) {
|
| 1451 |
+
|
| 1452 |
+
var self = this,
|
| 1453 |
+
ok = true;
|
| 1454 |
+
|
| 1455 |
+
self._trigger({
|
| 1456 |
+
type: 'close',
|
| 1457 |
+
event: event,
|
| 1458 |
+
stop: function() {
|
| 1459 |
+
ok = false;
|
| 1460 |
+
}
|
| 1461 |
+
});
|
| 1462 |
+
|
| 1463 |
+
// a destroying tooltip (force == true) may not refuse to close
|
| 1464 |
+
if (ok || force) {
|
| 1465 |
+
|
| 1466 |
+
// save the method custom callback and cancel any open method custom callbacks
|
| 1467 |
+
if (callback) self.__callbacks.close.push(callback);
|
| 1468 |
+
self.__callbacks.open = [];
|
| 1469 |
+
|
| 1470 |
+
// clear open/close timeouts
|
| 1471 |
+
self.__timeoutsClear();
|
| 1472 |
+
|
| 1473 |
+
var finishCallbacks = function() {
|
| 1474 |
+
|
| 1475 |
+
// trigger any close method custom callbacks and reset them
|
| 1476 |
+
$.each(self.__callbacks.close, function(i,c) {
|
| 1477 |
+
c.call(self, self, {
|
| 1478 |
+
event: event,
|
| 1479 |
+
origin: self._$origin[0]
|
| 1480 |
+
});
|
| 1481 |
+
});
|
| 1482 |
+
|
| 1483 |
+
self.__callbacks.close = [];
|
| 1484 |
+
};
|
| 1485 |
+
|
| 1486 |
+
if (self.__state != 'closed') {
|
| 1487 |
+
|
| 1488 |
+
var necessary = true,
|
| 1489 |
+
d = new Date(),
|
| 1490 |
+
now = d.getTime(),
|
| 1491 |
+
newClosingTime = now + self.__options.animationDuration[1];
|
| 1492 |
+
|
| 1493 |
+
// the tooltip may already already be disappearing, but if a new
|
| 1494 |
+
// call to close() is made after the animationDuration was changed
|
| 1495 |
+
// to 0 (for example), we ought to actually close it sooner than
|
| 1496 |
+
// previously scheduled. In that case it should be noted that the
|
| 1497 |
+
// browser will not adapt the animation duration to the new
|
| 1498 |
+
// animationDuration that was set after the start of the closing
|
| 1499 |
+
// animation.
|
| 1500 |
+
// Note: the same thing could be considered at opening, but is not
|
| 1501 |
+
// really useful since the tooltip is actually opened immediately
|
| 1502 |
+
// upon a call to _open(). Since it would not make the opening
|
| 1503 |
+
// animation finish sooner, its sole impact would be to trigger the
|
| 1504 |
+
// state event and the open callbacks sooner than the actual end of
|
| 1505 |
+
// the opening animation, which is not great.
|
| 1506 |
+
if (self.__state == 'disappearing') {
|
| 1507 |
+
|
| 1508 |
+
if ( newClosingTime > self.__closingTime
|
| 1509 |
+
// in case closing is actually overdue because the script
|
| 1510 |
+
// execution was suspended. See #679
|
| 1511 |
+
&& self.__options.animationDuration[1] > 0
|
| 1512 |
+
) {
|
| 1513 |
+
necessary = false;
|
| 1514 |
+
}
|
| 1515 |
+
}
|
| 1516 |
+
|
| 1517 |
+
if (necessary) {
|
| 1518 |
+
|
| 1519 |
+
self.__closingTime = newClosingTime;
|
| 1520 |
+
|
| 1521 |
+
if (self.__state != 'disappearing') {
|
| 1522 |
+
self.__stateSet('disappearing');
|
| 1523 |
+
}
|
| 1524 |
+
|
| 1525 |
+
var finish = function() {
|
| 1526 |
+
|
| 1527 |
+
// stop the tracker
|
| 1528 |
+
clearInterval(self.__tracker);
|
| 1529 |
+
|
| 1530 |
+
// a "beforeClose" option has been asked several times but would
|
| 1531 |
+
// probably useless since the content element is still accessible
|
| 1532 |
+
// via ::content(), and because people can always use listeners
|
| 1533 |
+
// inside their content to track what's going on. For the sake of
|
| 1534 |
+
// simplicity, this has been denied. Bur for the rare people who
|
| 1535 |
+
// really need the option (for old browsers or for the case where
|
| 1536 |
+
// detaching the content is actually destructive, for file or
|
| 1537 |
+
// password inputs for example), this event will do the work.
|
| 1538 |
+
self._trigger({
|
| 1539 |
+
type: 'closing',
|
| 1540 |
+
event: event
|
| 1541 |
+
});
|
| 1542 |
+
|
| 1543 |
+
// unbind listeners which are no longer needed
|
| 1544 |
+
|
| 1545 |
+
self._$tooltip
|
| 1546 |
+
.off('.'+ self.__namespace +'-triggerClose')
|
| 1547 |
+
.removeClass('tooltipster-dying');
|
| 1548 |
+
|
| 1549 |
+
// orientationchange, scroll and resize listeners
|
| 1550 |
+
$(env.window).off('.'+ self.__namespace +'-triggerClose');
|
| 1551 |
+
|
| 1552 |
+
// scroll listeners
|
| 1553 |
+
self.__$originParents.each(function(i, el) {
|
| 1554 |
+
$(el).off('scroll.'+ self.__namespace +'-triggerClose');
|
| 1555 |
+
});
|
| 1556 |
+
// clear the array to prevent memory leaks
|
| 1557 |
+
self.__$originParents = null;
|
| 1558 |
+
|
| 1559 |
+
$(env.window.document.body).off('.'+ self.__namespace +'-triggerClose');
|
| 1560 |
+
|
| 1561 |
+
self._$origin.off('.'+ self.__namespace +'-triggerClose');
|
| 1562 |
+
|
| 1563 |
+
self._off('dismissable');
|
| 1564 |
+
|
| 1565 |
+
// a plugin that would like to remove the tooltip from the
|
| 1566 |
+
// DOM when closed should bind on this
|
| 1567 |
+
self.__stateSet('closed');
|
| 1568 |
+
|
| 1569 |
+
// trigger event
|
| 1570 |
+
self._trigger({
|
| 1571 |
+
type: 'after',
|
| 1572 |
+
event: event
|
| 1573 |
+
});
|
| 1574 |
+
|
| 1575 |
+
// call our constructor custom callback function
|
| 1576 |
+
if (self.__options.functionAfter) {
|
| 1577 |
+
self.__options.functionAfter.call(self, self, {
|
| 1578 |
+
event: event,
|
| 1579 |
+
origin: self._$origin[0]
|
| 1580 |
+
});
|
| 1581 |
+
}
|
| 1582 |
+
|
| 1583 |
+
// call our method custom callbacks functions
|
| 1584 |
+
finishCallbacks();
|
| 1585 |
+
};
|
| 1586 |
+
|
| 1587 |
+
if (env.hasTransitions) {
|
| 1588 |
+
|
| 1589 |
+
self._$tooltip.css({
|
| 1590 |
+
'-moz-animation-duration': self.__options.animationDuration[1] + 'ms',
|
| 1591 |
+
'-ms-animation-duration': self.__options.animationDuration[1] + 'ms',
|
| 1592 |
+
'-o-animation-duration': self.__options.animationDuration[1] + 'ms',
|
| 1593 |
+
'-webkit-animation-duration': self.__options.animationDuration[1] + 'ms',
|
| 1594 |
+
'animation-duration': self.__options.animationDuration[1] + 'ms',
|
| 1595 |
+
'transition-duration': self.__options.animationDuration[1] + 'ms'
|
| 1596 |
+
});
|
| 1597 |
+
|
| 1598 |
+
self._$tooltip
|
| 1599 |
+
// clear both potential open and close tasks
|
| 1600 |
+
.clearQueue()
|
| 1601 |
+
.removeClass('tooltipster-show')
|
| 1602 |
+
// for transitions only
|
| 1603 |
+
.addClass('tooltipster-dying');
|
| 1604 |
+
|
| 1605 |
+
if (self.__options.animationDuration[1] > 0) {
|
| 1606 |
+
self._$tooltip.delay(self.__options.animationDuration[1]);
|
| 1607 |
+
}
|
| 1608 |
+
|
| 1609 |
+
self._$tooltip.queue(finish);
|
| 1610 |
+
}
|
| 1611 |
+
else {
|
| 1612 |
+
|
| 1613 |
+
self._$tooltip
|
| 1614 |
+
.stop()
|
| 1615 |
+
.fadeOut(self.__options.animationDuration[1], finish);
|
| 1616 |
+
}
|
| 1617 |
+
}
|
| 1618 |
+
}
|
| 1619 |
+
// if the tooltip is already closed, we still need to trigger
|
| 1620 |
+
// the method custom callbacks
|
| 1621 |
+
else {
|
| 1622 |
+
finishCallbacks();
|
| 1623 |
+
}
|
| 1624 |
+
}
|
| 1625 |
+
|
| 1626 |
+
return self;
|
| 1627 |
+
},
|
| 1628 |
+
|
| 1629 |
+
/**
|
| 1630 |
+
* For internal use by plugins, if needed
|
| 1631 |
+
*
|
| 1632 |
+
* @returns {self}
|
| 1633 |
+
* @protected
|
| 1634 |
+
*/
|
| 1635 |
+
_off: function() {
|
| 1636 |
+
this.__$emitterPrivate.off.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 1637 |
+
return this;
|
| 1638 |
+
},
|
| 1639 |
+
|
| 1640 |
+
/**
|
| 1641 |
+
* For internal use by plugins, if needed
|
| 1642 |
+
*
|
| 1643 |
+
* @returns {self}
|
| 1644 |
+
* @protected
|
| 1645 |
+
*/
|
| 1646 |
+
_on: function() {
|
| 1647 |
+
this.__$emitterPrivate.on.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 1648 |
+
return this;
|
| 1649 |
+
},
|
| 1650 |
+
|
| 1651 |
+
/**
|
| 1652 |
+
* For internal use by plugins, if needed
|
| 1653 |
+
*
|
| 1654 |
+
* @returns {self}
|
| 1655 |
+
* @protected
|
| 1656 |
+
*/
|
| 1657 |
+
_one: function() {
|
| 1658 |
+
this.__$emitterPrivate.one.apply(this.__$emitterPrivate, Array.prototype.slice.apply(arguments));
|
| 1659 |
+
return this;
|
| 1660 |
+
},
|
| 1661 |
+
|
| 1662 |
+
/**
|
| 1663 |
+
* Opens the tooltip right away.
|
| 1664 |
+
*
|
| 1665 |
+
* @param event
|
| 1666 |
+
* @param callback Will be called when the opening animation is over
|
| 1667 |
+
* @returns {self}
|
| 1668 |
+
* @protected
|
| 1669 |
+
*/
|
| 1670 |
+
_open: function(event, callback) {
|
| 1671 |
+
|
| 1672 |
+
var self = this;
|
| 1673 |
+
|
| 1674 |
+
// if the destruction process has not begun and if this was not
|
| 1675 |
+
// triggered by an unwanted emulated click event
|
| 1676 |
+
if (!self.__destroying) {
|
| 1677 |
+
|
| 1678 |
+
// check that the origin is still in the DOM
|
| 1679 |
+
if ( bodyContains(self._$origin)
|
| 1680 |
+
// if the tooltip is enabled
|
| 1681 |
+
&& self.__enabled
|
| 1682 |
+
) {
|
| 1683 |
+
|
| 1684 |
+
var ok = true;
|
| 1685 |
+
|
| 1686 |
+
// if the tooltip is not open yet, we need to call functionBefore.
|
| 1687 |
+
// otherwise we can jst go on
|
| 1688 |
+
if (self.__state == 'closed') {
|
| 1689 |
+
|
| 1690 |
+
// trigger an event. The event.stop function allows the callback
|
| 1691 |
+
// to prevent the opening of the tooltip
|
| 1692 |
+
self._trigger({
|
| 1693 |
+
type: 'before',
|
| 1694 |
+
event: event,
|
| 1695 |
+
stop: function() {
|
| 1696 |
+
ok = false;
|
| 1697 |
+
}
|
| 1698 |
+
});
|
| 1699 |
+
|
| 1700 |
+
if (ok && self.__options.functionBefore) {
|
| 1701 |
+
|
| 1702 |
+
// call our custom function before continuing
|
| 1703 |
+
ok = self.__options.functionBefore.call(self, self, {
|
| 1704 |
+
event: event,
|
| 1705 |
+
origin: self._$origin[0]
|
| 1706 |
+
});
|
| 1707 |
+
}
|
| 1708 |
+
}
|
| 1709 |
+
|
| 1710 |
+
if (ok !== false) {
|
| 1711 |
+
|
| 1712 |
+
// if there is some content
|
| 1713 |
+
if (self.__Content !== null) {
|
| 1714 |
+
|
| 1715 |
+
// save the method callback and cancel close method callbacks
|
| 1716 |
+
if (callback) {
|
| 1717 |
+
self.__callbacks.open.push(callback);
|
| 1718 |
+
}
|
| 1719 |
+
self.__callbacks.close = [];
|
| 1720 |
+
|
| 1721 |
+
// get rid of any appearance timeouts
|
| 1722 |
+
self.__timeoutsClear();
|
| 1723 |
+
|
| 1724 |
+
var extraTime,
|
| 1725 |
+
finish = function() {
|
| 1726 |
+
|
| 1727 |
+
if (self.__state != 'stable') {
|
| 1728 |
+
self.__stateSet('stable');
|
| 1729 |
+
}
|
| 1730 |
+
|
| 1731 |
+
// trigger any open method custom callbacks and reset them
|
| 1732 |
+
$.each(self.__callbacks.open, function(i,c) {
|
| 1733 |
+
c.call(self, self, {
|
| 1734 |
+
origin: self._$origin[0],
|
| 1735 |
+
tooltip: self._$tooltip[0]
|
| 1736 |
+
});
|
| 1737 |
+
});
|
| 1738 |
+
|
| 1739 |
+
self.__callbacks.open = [];
|
| 1740 |
+
};
|
| 1741 |
+
|
| 1742 |
+
// if the tooltip is already open
|
| 1743 |
+
if (self.__state !== 'closed') {
|
| 1744 |
+
|
| 1745 |
+
// the timer (if any) will start (or restart) right now
|
| 1746 |
+
extraTime = 0;
|
| 1747 |
+
|
| 1748 |
+
// if it was disappearing, cancel that
|
| 1749 |
+
if (self.__state === 'disappearing') {
|
| 1750 |
+
|
| 1751 |
+
self.__stateSet('appearing');
|
| 1752 |
+
|
| 1753 |
+
if (env.hasTransitions) {
|
| 1754 |
+
|
| 1755 |
+
self._$tooltip
|
| 1756 |
+
.clearQueue()
|
| 1757 |
+
.removeClass('tooltipster-dying')
|
| 1758 |
+
.addClass('tooltipster-show');
|
| 1759 |
+
|
| 1760 |
+
if (self.__options.animationDuration[0] > 0) {
|
| 1761 |
+
self._$tooltip.delay(self.__options.animationDuration[0]);
|
| 1762 |
+
}
|
| 1763 |
+
|
| 1764 |
+
self._$tooltip.queue(finish);
|
| 1765 |
+
}
|
| 1766 |
+
else {
|
| 1767 |
+
// in case the tooltip was currently fading out, bring it back
|
| 1768 |
+
// to life
|
| 1769 |
+
self._$tooltip
|
| 1770 |
+
.stop()
|
| 1771 |
+
.fadeIn(finish);
|
| 1772 |
+
}
|
| 1773 |
+
}
|
| 1774 |
+
// if the tooltip is already open, we still need to trigger the method
|
| 1775 |
+
// custom callback
|
| 1776 |
+
else if (self.__state == 'stable') {
|
| 1777 |
+
finish();
|
| 1778 |
+
}
|
| 1779 |
+
}
|
| 1780 |
+
// if the tooltip isn't already open, open it
|
| 1781 |
+
else {
|
| 1782 |
+
|
| 1783 |
+
// a plugin must bind on this and store the tooltip in this._$tooltip
|
| 1784 |
+
self.__stateSet('appearing');
|
| 1785 |
+
|
| 1786 |
+
// the timer (if any) will start when the tooltip has fully appeared
|
| 1787 |
+
// after its transition
|
| 1788 |
+
extraTime = self.__options.animationDuration[0];
|
| 1789 |
+
|
| 1790 |
+
// insert the content inside the tooltip
|
| 1791 |
+
self.__contentInsert();
|
| 1792 |
+
|
| 1793 |
+
// reposition the tooltip and attach to the DOM
|
| 1794 |
+
self.reposition(event, true);
|
| 1795 |
+
|
| 1796 |
+
// animate in the tooltip. If the display plugin wants no css
|
| 1797 |
+
// animations, it may override the animation option with a
|
| 1798 |
+
// dummy value that will produce no effect
|
| 1799 |
+
if (env.hasTransitions) {
|
| 1800 |
+
|
| 1801 |
+
// note: there seems to be an issue with start animations which
|
| 1802 |
+
// are randomly not played on fast devices in both Chrome and FF,
|
| 1803 |
+
// couldn't find a way to solve it yet. It seems that applying
|
| 1804 |
+
// the classes before appending to the DOM helps a little, but
|
| 1805 |
+
// it messes up some CSS transitions. The issue almost never
|
| 1806 |
+
// happens when delay[0]==0 though
|
| 1807 |
+
self._$tooltip
|
| 1808 |
+
.addClass('tooltipster-'+ self.__options.animation)
|
| 1809 |
+
.addClass('tooltipster-initial')
|
| 1810 |
+
.css({
|
| 1811 |
+
'-moz-animation-duration': self.__options.animationDuration[0] + 'ms',
|
| 1812 |
+
'-ms-animation-duration': self.__options.animationDuration[0] + 'ms',
|
| 1813 |
+
'-o-animation-duration': self.__options.animationDuration[0] + 'ms',
|
| 1814 |
+
'-webkit-animation-duration': self.__options.animationDuration[0] + 'ms',
|
| 1815 |
+
'animation-duration': self.__options.animationDuration[0] + 'ms',
|
| 1816 |
+
'transition-duration': self.__options.animationDuration[0] + 'ms'
|
| 1817 |
+
});
|
| 1818 |
+
|
| 1819 |
+
setTimeout(
|
| 1820 |
+
function() {
|
| 1821 |
+
|
| 1822 |
+
// a quick hover may have already triggered a mouseleave
|
| 1823 |
+
if (self.__state != 'closed') {
|
| 1824 |
+
|
| 1825 |
+
self._$tooltip
|
| 1826 |
+
.addClass('tooltipster-show')
|
| 1827 |
+
.removeClass('tooltipster-initial');
|
| 1828 |
+
|
| 1829 |
+
if (self.__options.animationDuration[0] > 0) {
|
| 1830 |
+
self._$tooltip.delay(self.__options.animationDuration[0]);
|
| 1831 |
+
}
|
| 1832 |
+
|
| 1833 |
+
self._$tooltip.queue(finish);
|
| 1834 |
+
}
|
| 1835 |
+
},
|
| 1836 |
+
0
|
| 1837 |
+
);
|
| 1838 |
+
}
|
| 1839 |
+
else {
|
| 1840 |
+
|
| 1841 |
+
// old browsers will have to live with this
|
| 1842 |
+
self._$tooltip
|
| 1843 |
+
.css('display', 'none')
|
| 1844 |
+
.fadeIn(self.__options.animationDuration[0], finish);
|
| 1845 |
+
}
|
| 1846 |
+
|
| 1847 |
+
// checks if the origin is removed while the tooltip is open
|
| 1848 |
+
self.__trackerStart();
|
| 1849 |
+
|
| 1850 |
+
// NOTE: the listeners below have a '-triggerClose' namespace
|
| 1851 |
+
// because we'll remove them when the tooltip closes (unlike
|
| 1852 |
+
// the '-triggerOpen' listeners). So some of them are actually
|
| 1853 |
+
// not about close triggers, rather about positioning.
|
| 1854 |
+
|
| 1855 |
+
$(env.window)
|
| 1856 |
+
// reposition on resize
|
| 1857 |
+
.on('resize.'+ self.__namespace +'-triggerClose', function(e) {
|
| 1858 |
+
|
| 1859 |
+
var $ae = $(document.activeElement);
|
| 1860 |
+
|
| 1861 |
+
// reposition only if the resize event was not triggered upon the opening
|
| 1862 |
+
// of a virtual keyboard due to an input field being focused within the tooltip
|
| 1863 |
+
// (otherwise the repositioning would lose the focus)
|
| 1864 |
+
if ( (!$ae.is('input') && !$ae.is('textarea'))
|
| 1865 |
+
|| !$.contains(self._$tooltip[0], $ae[0])
|
| 1866 |
+
) {
|
| 1867 |
+
self.reposition(e);
|
| 1868 |
+
}
|
| 1869 |
+
})
|
| 1870 |
+
// same as below for parents
|
| 1871 |
+
.on('scroll.'+ self.__namespace +'-triggerClose', function(e) {
|
| 1872 |
+
self.__scrollHandler(e);
|
| 1873 |
+
});
|
| 1874 |
+
|
| 1875 |
+
self.__$originParents = self._$origin.parents();
|
| 1876 |
+
|
| 1877 |
+
// scrolling may require the tooltip to be moved or even
|
| 1878 |
+
// repositioned in some cases
|
| 1879 |
+
self.__$originParents.each(function(i, parent) {
|
| 1880 |
+
|
| 1881 |
+
$(parent).on('scroll.'+ self.__namespace +'-triggerClose', function(e) {
|
| 1882 |
+
self.__scrollHandler(e);
|
| 1883 |
+
});
|
| 1884 |
+
});
|
| 1885 |
+
|
| 1886 |
+
if ( self.__options.triggerClose.mouseleave
|
| 1887 |
+
|| (self.__options.triggerClose.touchleave && env.hasTouchCapability)
|
| 1888 |
+
) {
|
| 1889 |
+
|
| 1890 |
+
// we use an event to allow users/plugins to control when the mouseleave/touchleave
|
| 1891 |
+
// close triggers will come to action. It allows to have more triggering elements
|
| 1892 |
+
// than just the origin and the tooltip for example, or to cancel/delay the closing,
|
| 1893 |
+
// or to make the tooltip interactive even if it wasn't when it was open, etc.
|
| 1894 |
+
self._on('dismissable', function(event) {
|
| 1895 |
+
|
| 1896 |
+
if (event.dismissable) {
|
| 1897 |
+
|
| 1898 |
+
if (event.delay) {
|
| 1899 |
+
|
| 1900 |
+
timeout = setTimeout(function() {
|
| 1901 |
+
// event.event may be undefined
|
| 1902 |
+
self._close(event.event);
|
| 1903 |
+
}, event.delay);
|
| 1904 |
+
|
| 1905 |
+
self.__timeouts.close.push(timeout);
|
| 1906 |
+
}
|
| 1907 |
+
else {
|
| 1908 |
+
self._close(event);
|
| 1909 |
+
}
|
| 1910 |
+
}
|
| 1911 |
+
else {
|
| 1912 |
+
clearTimeout(timeout);
|
| 1913 |
+
}
|
| 1914 |
+
});
|
| 1915 |
+
|
| 1916 |
+
// now set the listeners that will trigger 'dismissable' events
|
| 1917 |
+
var $elements = self._$origin,
|
| 1918 |
+
eventNamesIn = '',
|
| 1919 |
+
eventNamesOut = '',
|
| 1920 |
+
timeout = null;
|
| 1921 |
+
|
| 1922 |
+
// if we have to allow interaction, bind on the tooltip too
|
| 1923 |
+
if (self.__options.interactive) {
|
| 1924 |
+
$elements = $elements.add(self._$tooltip);
|
| 1925 |
+
}
|
| 1926 |
+
|
| 1927 |
+
if (self.__options.triggerClose.mouseleave) {
|
| 1928 |
+
eventNamesIn += 'mouseenter.'+ self.__namespace +'-triggerClose ';
|
| 1929 |
+
eventNamesOut += 'mouseleave.'+ self.__namespace +'-triggerClose ';
|
| 1930 |
+
}
|
| 1931 |
+
if (self.__options.triggerClose.touchleave && env.hasTouchCapability) {
|
| 1932 |
+
eventNamesIn += 'touchstart.'+ self.__namespace +'-triggerClose';
|
| 1933 |
+
eventNamesOut += 'touchend.'+ self.__namespace +'-triggerClose touchcancel.'+ self.__namespace +'-triggerClose';
|
| 1934 |
+
}
|
| 1935 |
+
|
| 1936 |
+
$elements
|
| 1937 |
+
// close after some time spent outside of the elements
|
| 1938 |
+
.on(eventNamesOut, function(event) {
|
| 1939 |
+
|
| 1940 |
+
// it's ok if the touch gesture ended up to be a swipe,
|
| 1941 |
+
// it's still a "touch leave" situation
|
| 1942 |
+
if ( self._touchIsTouchEvent(event)
|
| 1943 |
+
|| !self._touchIsEmulatedEvent(event)
|
| 1944 |
+
) {
|
| 1945 |
+
|
| 1946 |
+
var delay = (event.type == 'mouseleave') ?
|
| 1947 |
+
self.__options.delay :
|
| 1948 |
+
self.__options.delayTouch;
|
| 1949 |
+
|
| 1950 |
+
self._trigger({
|
| 1951 |
+
delay: delay[1],
|
| 1952 |
+
dismissable: true,
|
| 1953 |
+
event: event,
|
| 1954 |
+
type: 'dismissable'
|
| 1955 |
+
});
|
| 1956 |
+
}
|
| 1957 |
+
})
|
| 1958 |
+
// suspend the mouseleave timeout when the pointer comes back
|
| 1959 |
+
// over the elements
|
| 1960 |
+
.on(eventNamesIn, function(event) {
|
| 1961 |
+
|
| 1962 |
+
// it's also ok if the touch event is a swipe gesture
|
| 1963 |
+
if ( self._touchIsTouchEvent(event)
|
| 1964 |
+
|| !self._touchIsEmulatedEvent(event)
|
| 1965 |
+
) {
|
| 1966 |
+
self._trigger({
|
| 1967 |
+
dismissable: false,
|
| 1968 |
+
event: event,
|
| 1969 |
+
type: 'dismissable'
|
| 1970 |
+
});
|
| 1971 |
+
}
|
| 1972 |
+
});
|
| 1973 |
+
}
|
| 1974 |
+
|
| 1975 |
+
// close the tooltip when the origin gets a mouse click (common behavior of
|
| 1976 |
+
// native tooltips)
|
| 1977 |
+
if (self.__options.triggerClose.originClick) {
|
| 1978 |
+
|
| 1979 |
+
self._$origin.on('click.'+ self.__namespace + '-triggerClose', function(event) {
|
| 1980 |
+
|
| 1981 |
+
// we could actually let a tap trigger this but this feature just
|
| 1982 |
+
// does not make sense on touch devices
|
| 1983 |
+
if ( !self._touchIsTouchEvent(event)
|
| 1984 |
+
&& !self._touchIsEmulatedEvent(event)
|
| 1985 |
+
) {
|
| 1986 |
+
self._close(event);
|
| 1987 |
+
}
|
| 1988 |
+
});
|
| 1989 |
+
}
|
| 1990 |
+
|
| 1991 |
+
// set the same bindings for click and touch on the body to close the tooltip
|
| 1992 |
+
if ( self.__options.triggerClose.click
|
| 1993 |
+
|| (self.__options.triggerClose.tap && env.hasTouchCapability)
|
| 1994 |
+
) {
|
| 1995 |
+
|
| 1996 |
+
// don't set right away since the click/tap event which triggered this method
|
| 1997 |
+
// (if it was a click/tap) is going to bubble up to the body, we don't want it
|
| 1998 |
+
// to close the tooltip immediately after it opened
|
| 1999 |
+
setTimeout(function() {
|
| 2000 |
+
|
| 2001 |
+
if (self.__state != 'closed') {
|
| 2002 |
+
|
| 2003 |
+
var eventNames = '',
|
| 2004 |
+
$body = $(env.window.document.body);
|
| 2005 |
+
|
| 2006 |
+
if (self.__options.triggerClose.click) {
|
| 2007 |
+
eventNames += 'click.'+ self.__namespace +'-triggerClose ';
|
| 2008 |
+
}
|
| 2009 |
+
if (self.__options.triggerClose.tap && env.hasTouchCapability) {
|
| 2010 |
+
eventNames += 'touchend.'+ self.__namespace +'-triggerClose';
|
| 2011 |
+
}
|
| 2012 |
+
|
| 2013 |
+
$body.on(eventNames, function(event) {
|
| 2014 |
+
|
| 2015 |
+
if (self._touchIsMeaningfulEvent(event)) {
|
| 2016 |
+
|
| 2017 |
+
self._touchRecordEvent(event);
|
| 2018 |
+
|
| 2019 |
+
if (!self.__options.interactive || !$.contains(self._$tooltip[0], event.target)) {
|
| 2020 |
+
self._close(event);
|
| 2021 |
+
}
|
| 2022 |
+
}
|
| 2023 |
+
});
|
| 2024 |
+
|
| 2025 |
+
// needed to detect and ignore swiping
|
| 2026 |
+
if (self.__options.triggerClose.tap && env.hasTouchCapability) {
|
| 2027 |
+
|
| 2028 |
+
$body.on('touchstart.'+ self.__namespace +'-triggerClose', function(event) {
|
| 2029 |
+
self._touchRecordEvent(event);
|
| 2030 |
+
});
|
| 2031 |
+
}
|
| 2032 |
+
}
|
| 2033 |
+
}, 0);
|
| 2034 |
+
}
|
| 2035 |
+
|
| 2036 |
+
self._trigger('ready');
|
| 2037 |
+
|
| 2038 |
+
// call our custom callback
|
| 2039 |
+
if (self.__options.functionReady) {
|
| 2040 |
+
self.__options.functionReady.call(self, self, {
|
| 2041 |
+
origin: self._$origin[0],
|
| 2042 |
+
tooltip: self._$tooltip[0]
|
| 2043 |
+
});
|
| 2044 |
+
}
|
| 2045 |
+
}
|
| 2046 |
+
|
| 2047 |
+
// if we have a timer set, let the countdown begin
|
| 2048 |
+
if (self.__options.timer > 0) {
|
| 2049 |
+
|
| 2050 |
+
var timeout = setTimeout(function() {
|
| 2051 |
+
self._close();
|
| 2052 |
+
}, self.__options.timer + extraTime);
|
| 2053 |
+
|
| 2054 |
+
self.__timeouts.close.push(timeout);
|
| 2055 |
+
}
|
| 2056 |
+
}
|
| 2057 |
+
}
|
| 2058 |
+
}
|
| 2059 |
+
}
|
| 2060 |
+
|
| 2061 |
+
return self;
|
| 2062 |
+
},
|
| 2063 |
+
|
| 2064 |
+
/**
|
| 2065 |
+
* When using the mouseenter/touchstart open triggers, this function will
|
| 2066 |
+
* schedule the opening of the tooltip after the delay, if there is one
|
| 2067 |
+
*
|
| 2068 |
+
* @param event
|
| 2069 |
+
* @returns {self}
|
| 2070 |
+
* @protected
|
| 2071 |
+
*/
|
| 2072 |
+
_openShortly: function(event) {
|
| 2073 |
+
|
| 2074 |
+
var self = this,
|
| 2075 |
+
ok = true;
|
| 2076 |
+
|
| 2077 |
+
if (self.__state != 'stable' && self.__state != 'appearing') {
|
| 2078 |
+
|
| 2079 |
+
// if a timeout is not already running
|
| 2080 |
+
if (!self.__timeouts.open) {
|
| 2081 |
+
|
| 2082 |
+
self._trigger({
|
| 2083 |
+
type: 'start',
|
| 2084 |
+
event: event,
|
| 2085 |
+
stop: function() {
|
| 2086 |
+
ok = false;
|
| 2087 |
+
}
|
| 2088 |
+
});
|
| 2089 |
+
|
| 2090 |
+
if (ok) {
|
| 2091 |
+
|
| 2092 |
+
var delay = (event.type.indexOf('touch') == 0) ?
|
| 2093 |
+
self.__options.delayTouch :
|
| 2094 |
+
self.__options.delay;
|
| 2095 |
+
|
| 2096 |
+
if (delay[0]) {
|
| 2097 |
+
|
| 2098 |
+
self.__timeouts.open = setTimeout(function() {
|
| 2099 |
+
|
| 2100 |
+
self.__timeouts.open = null;
|
| 2101 |
+
|
| 2102 |
+
// open only if the pointer (mouse or touch) is still over the origin.
|
| 2103 |
+
// The check on the "meaningful event" can only be made here, after some
|
| 2104 |
+
// time has passed (to know if the touch was a swipe or not)
|
| 2105 |
+
if (self.__pointerIsOverOrigin && self._touchIsMeaningfulEvent(event)) {
|
| 2106 |
+
|
| 2107 |
+
// signal that we go on
|
| 2108 |
+
self._trigger('startend');
|
| 2109 |
+
|
| 2110 |
+
self._open(event);
|
| 2111 |
+
}
|
| 2112 |
+
else {
|
| 2113 |
+
// signal that we cancel
|
| 2114 |
+
self._trigger('startcancel');
|
| 2115 |
+
}
|
| 2116 |
+
}, delay[0]);
|
| 2117 |
+
}
|
| 2118 |
+
else {
|
| 2119 |
+
// signal that we go on
|
| 2120 |
+
self._trigger('startend');
|
| 2121 |
+
|
| 2122 |
+
self._open(event);
|
| 2123 |
+
}
|
| 2124 |
+
}
|
| 2125 |
+
}
|
| 2126 |
+
}
|
| 2127 |
+
|
| 2128 |
+
return self;
|
| 2129 |
+
},
|
| 2130 |
+
|
| 2131 |
+
/**
|
| 2132 |
+
* Meant for plugins to get their options
|
| 2133 |
+
*
|
| 2134 |
+
* @param {string} pluginName The name of the plugin that asks for its options
|
| 2135 |
+
* @param {object} defaultOptions The default options of the plugin
|
| 2136 |
+
* @returns {object} The options
|
| 2137 |
+
* @protected
|
| 2138 |
+
*/
|
| 2139 |
+
_optionsExtract: function(pluginName, defaultOptions) {
|
| 2140 |
+
|
| 2141 |
+
var self = this,
|
| 2142 |
+
options = $.extend(true, {}, defaultOptions);
|
| 2143 |
+
|
| 2144 |
+
// if the plugin options were isolated in a property named after the
|
| 2145 |
+
// plugin, use them (prevents conflicts with other plugins)
|
| 2146 |
+
var pluginOptions = self.__options[pluginName];
|
| 2147 |
+
|
| 2148 |
+
// if not, try to get them as regular options
|
| 2149 |
+
if (!pluginOptions){
|
| 2150 |
+
|
| 2151 |
+
pluginOptions = {};
|
| 2152 |
+
|
| 2153 |
+
$.each(defaultOptions, function(optionName, value) {
|
| 2154 |
+
|
| 2155 |
+
var o = self.__options[optionName];
|
| 2156 |
+
|
| 2157 |
+
if (o !== undefined) {
|
| 2158 |
+
pluginOptions[optionName] = o;
|
| 2159 |
+
}
|
| 2160 |
+
});
|
| 2161 |
+
}
|
| 2162 |
+
|
| 2163 |
+
// let's merge the default options and the ones that were provided. We'd want
|
| 2164 |
+
// to do a deep copy but not let jQuery merge arrays, so we'll do a shallow
|
| 2165 |
+
// extend on two levels, that will be enough if options are not more than 1
|
| 2166 |
+
// level deep
|
| 2167 |
+
$.each(options, function(optionName, value) {
|
| 2168 |
+
|
| 2169 |
+
if (pluginOptions[optionName] !== undefined) {
|
| 2170 |
+
|
| 2171 |
+
if (( typeof value == 'object'
|
| 2172 |
+
&& !(value instanceof Array)
|
| 2173 |
+
&& value != null
|
| 2174 |
+
)
|
| 2175 |
+
&&
|
| 2176 |
+
( typeof pluginOptions[optionName] == 'object'
|
| 2177 |
+
&& !(pluginOptions[optionName] instanceof Array)
|
| 2178 |
+
&& pluginOptions[optionName] != null
|
| 2179 |
+
)
|
| 2180 |
+
) {
|
| 2181 |
+
$.extend(options[optionName], pluginOptions[optionName]);
|
| 2182 |
+
}
|
| 2183 |
+
else {
|
| 2184 |
+
options[optionName] = pluginOptions[optionName];
|
| 2185 |
+
}
|
| 2186 |
+
}
|
| 2187 |
+
});
|
| 2188 |
+
|
| 2189 |
+
return options;
|
| 2190 |
+
},
|
| 2191 |
+
|
| 2192 |
+
/**
|
| 2193 |
+
* Used at instantiation of the plugin, or afterwards by plugins that activate themselves
|
| 2194 |
+
* on existing instances
|
| 2195 |
+
*
|
| 2196 |
+
* @param {object} pluginName
|
| 2197 |
+
* @returns {self}
|
| 2198 |
+
* @protected
|
| 2199 |
+
*/
|
| 2200 |
+
_plug: function(pluginName) {
|
| 2201 |
+
|
| 2202 |
+
var plugin = $.tooltipster._plugin(pluginName);
|
| 2203 |
+
|
| 2204 |
+
if (plugin) {
|
| 2205 |
+
|
| 2206 |
+
// if there is a constructor for instances
|
| 2207 |
+
if (plugin.instance) {
|
| 2208 |
+
|
| 2209 |
+
// proxy non-private methods on the instance to allow new instance methods
|
| 2210 |
+
$.tooltipster.__bridge(plugin.instance, this, plugin.name);
|
| 2211 |
+
}
|
| 2212 |
+
}
|
| 2213 |
+
else {
|
| 2214 |
+
throw new Error('The "'+ pluginName +'" plugin is not defined');
|
| 2215 |
+
}
|
| 2216 |
+
|
| 2217 |
+
return this;
|
| 2218 |
+
},
|
| 2219 |
+
|
| 2220 |
+
/**
|
| 2221 |
+
* This will return true if the event is a mouse event which was
|
| 2222 |
+
* emulated by the browser after a touch event. This allows us to
|
| 2223 |
+
* really dissociate mouse and touch triggers.
|
| 2224 |
+
*
|
| 2225 |
+
* There is a margin of error if a real mouse event is fired right
|
| 2226 |
+
* after (within the delay shown below) a touch event on the same
|
| 2227 |
+
* element, but hopefully it should not happen often.
|
| 2228 |
+
*
|
| 2229 |
+
* @returns {boolean}
|
| 2230 |
+
* @protected
|
| 2231 |
+
*/
|
| 2232 |
+
_touchIsEmulatedEvent: function(event) {
|
| 2233 |
+
|
| 2234 |
+
var isEmulated = false,
|
| 2235 |
+
now = new Date().getTime();
|
| 2236 |
+
|
| 2237 |
+
for (var i = this.__touchEvents.length - 1; i >= 0; i--) {
|
| 2238 |
+
|
| 2239 |
+
var e = this.__touchEvents[i];
|
| 2240 |
+
|
| 2241 |
+
// delay, in milliseconds. It's supposed to be 300ms in
|
| 2242 |
+
// most browsers (350ms on iOS) to allow a double tap but
|
| 2243 |
+
// can be less (check out FastClick for more info)
|
| 2244 |
+
if (now - e.time < 500) {
|
| 2245 |
+
|
| 2246 |
+
if (e.target === event.target) {
|
| 2247 |
+
isEmulated = true;
|
| 2248 |
+
}
|
| 2249 |
+
}
|
| 2250 |
+
else {
|
| 2251 |
+
break;
|
| 2252 |
+
}
|
| 2253 |
+
}
|
| 2254 |
+
|
| 2255 |
+
return isEmulated;
|
| 2256 |
+
},
|
| 2257 |
+
|
| 2258 |
+
/**
|
| 2259 |
+
* Returns false if the event was an emulated mouse event or
|
| 2260 |
+
* a touch event involved in a swipe gesture.
|
| 2261 |
+
*
|
| 2262 |
+
* @param {object} event
|
| 2263 |
+
* @returns {boolean}
|
| 2264 |
+
* @protected
|
| 2265 |
+
*/
|
| 2266 |
+
_touchIsMeaningfulEvent: function(event) {
|
| 2267 |
+
return (
|
| 2268 |
+
(this._touchIsTouchEvent(event) && !this._touchSwiped(event.target))
|
| 2269 |
+
|| (!this._touchIsTouchEvent(event) && !this._touchIsEmulatedEvent(event))
|
| 2270 |
+
);
|
| 2271 |
+
},
|
| 2272 |
+
|
| 2273 |
+
/**
|
| 2274 |
+
* Checks if an event is a touch event
|
| 2275 |
+
*
|
| 2276 |
+
* @param {object} event
|
| 2277 |
+
* @returns {boolean}
|
| 2278 |
+
* @protected
|
| 2279 |
+
*/
|
| 2280 |
+
_touchIsTouchEvent: function(event){
|
| 2281 |
+
return event.type.indexOf('touch') == 0;
|
| 2282 |
+
},
|
| 2283 |
+
|
| 2284 |
+
/**
|
| 2285 |
+
* Store touch events for a while to detect swiping and emulated mouse events
|
| 2286 |
+
*
|
| 2287 |
+
* @param {object} event
|
| 2288 |
+
* @returns {self}
|
| 2289 |
+
* @protected
|
| 2290 |
+
*/
|
| 2291 |
+
_touchRecordEvent: function(event) {
|
| 2292 |
+
|
| 2293 |
+
if (this._touchIsTouchEvent(event)) {
|
| 2294 |
+
event.time = new Date().getTime();
|
| 2295 |
+
this.__touchEvents.push(event);
|
| 2296 |
+
}
|
| 2297 |
+
|
| 2298 |
+
return this;
|
| 2299 |
+
},
|
| 2300 |
+
|
| 2301 |
+
/**
|
| 2302 |
+
* Returns true if a swipe happened after the last touchstart event fired on
|
| 2303 |
+
* event.target.
|
| 2304 |
+
*
|
| 2305 |
+
* We need to differentiate a swipe from a tap before we let the event open
|
| 2306 |
+
* or close the tooltip. A swipe is when a touchmove (scroll) event happens
|
| 2307 |
+
* on the body between the touchstart and the touchend events of an element.
|
| 2308 |
+
*
|
| 2309 |
+
* @param {object} target The HTML element that may have triggered the swipe
|
| 2310 |
+
* @returns {boolean}
|
| 2311 |
+
* @protected
|
| 2312 |
+
*/
|
| 2313 |
+
_touchSwiped: function(target) {
|
| 2314 |
+
|
| 2315 |
+
var swiped = false;
|
| 2316 |
+
|
| 2317 |
+
for (var i = this.__touchEvents.length - 1; i >= 0; i--) {
|
| 2318 |
+
|
| 2319 |
+
var e = this.__touchEvents[i];
|
| 2320 |
+
|
| 2321 |
+
if (e.type == 'touchmove') {
|
| 2322 |
+
swiped = true;
|
| 2323 |
+
break;
|
| 2324 |
+
}
|
| 2325 |
+
else if (
|
| 2326 |
+
e.type == 'touchstart'
|
| 2327 |
+
&& target === e.target
|
| 2328 |
+
) {
|
| 2329 |
+
break;
|
| 2330 |
+
}
|
| 2331 |
+
}
|
| 2332 |
+
|
| 2333 |
+
return swiped;
|
| 2334 |
+
},
|
| 2335 |
+
|
| 2336 |
+
/**
|
| 2337 |
+
* Triggers an event on the instance emitters
|
| 2338 |
+
*
|
| 2339 |
+
* @returns {self}
|
| 2340 |
+
* @protected
|
| 2341 |
+
*/
|
| 2342 |
+
_trigger: function() {
|
| 2343 |
+
|
| 2344 |
+
var args = Array.prototype.slice.apply(arguments);
|
| 2345 |
+
|
| 2346 |
+
if (typeof args[0] == 'string') {
|
| 2347 |
+
args[0] = { type: args[0] };
|
| 2348 |
+
}
|
| 2349 |
+
|
| 2350 |
+
// add properties to the event
|
| 2351 |
+
args[0].instance = this;
|
| 2352 |
+
args[0].origin = this._$origin ? this._$origin[0] : null;
|
| 2353 |
+
args[0].tooltip = this._$tooltip ? this._$tooltip[0] : null;
|
| 2354 |
+
|
| 2355 |
+
// note: the order of emitters matters
|
| 2356 |
+
this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate, args);
|
| 2357 |
+
$.tooltipster._trigger.apply($.tooltipster, args);
|
| 2358 |
+
this.__$emitterPublic.trigger.apply(this.__$emitterPublic, args);
|
| 2359 |
+
|
| 2360 |
+
return this;
|
| 2361 |
+
},
|
| 2362 |
+
|
| 2363 |
+
/**
|
| 2364 |
+
* Deactivate a plugin on this instance
|
| 2365 |
+
*
|
| 2366 |
+
* @returns {self}
|
| 2367 |
+
* @protected
|
| 2368 |
+
*/
|
| 2369 |
+
_unplug: function(pluginName) {
|
| 2370 |
+
|
| 2371 |
+
var self = this;
|
| 2372 |
+
|
| 2373 |
+
// if the plugin has been activated on this instance
|
| 2374 |
+
if (self[pluginName]) {
|
| 2375 |
+
|
| 2376 |
+
var plugin = $.tooltipster._plugin(pluginName);
|
| 2377 |
+
|
| 2378 |
+
// if there is a constructor for instances
|
| 2379 |
+
if (plugin.instance) {
|
| 2380 |
+
|
| 2381 |
+
// unbridge
|
| 2382 |
+
$.each(plugin.instance, function(methodName, fn) {
|
| 2383 |
+
|
| 2384 |
+
// if the method exists (privates methods do not) and comes indeed from
|
| 2385 |
+
// this plugin (may be missing or come from a conflicting plugin).
|
| 2386 |
+
if ( self[methodName]
|
| 2387 |
+
&& self[methodName].bridged === self[pluginName]
|
| 2388 |
+
) {
|
| 2389 |
+
delete self[methodName];
|
| 2390 |
+
}
|
| 2391 |
+
});
|
| 2392 |
+
}
|
| 2393 |
+
|
| 2394 |
+
// destroy the plugin
|
| 2395 |
+
if (self[pluginName].__destroy) {
|
| 2396 |
+
self[pluginName].__destroy();
|
| 2397 |
+
}
|
| 2398 |
+
|
| 2399 |
+
// remove the reference to the plugin instance
|
| 2400 |
+
delete self[pluginName];
|
| 2401 |
+
}
|
| 2402 |
+
|
| 2403 |
+
return self;
|
| 2404 |
+
},
|
| 2405 |
+
|
| 2406 |
+
/**
|
| 2407 |
+
* @see self::_close
|
| 2408 |
+
* @returns {self}
|
| 2409 |
+
* @public
|
| 2410 |
+
*/
|
| 2411 |
+
close: function(callback) {
|
| 2412 |
+
|
| 2413 |
+
if (!this.__destroyed) {
|
| 2414 |
+
this._close(null, callback);
|
| 2415 |
+
}
|
| 2416 |
+
else {
|
| 2417 |
+
this.__destroyError();
|
| 2418 |
+
}
|
| 2419 |
+
|
| 2420 |
+
return this;
|
| 2421 |
+
},
|
| 2422 |
+
|
| 2423 |
+
/**
|
| 2424 |
+
* Sets or gets the content of the tooltip
|
| 2425 |
+
*
|
| 2426 |
+
* @returns {mixed|self}
|
| 2427 |
+
* @public
|
| 2428 |
+
*/
|
| 2429 |
+
content: function(content) {
|
| 2430 |
+
|
| 2431 |
+
var self = this;
|
| 2432 |
+
|
| 2433 |
+
// getter method
|
| 2434 |
+
if (content === undefined) {
|
| 2435 |
+
return self.__Content;
|
| 2436 |
+
}
|
| 2437 |
+
// setter method
|
| 2438 |
+
else {
|
| 2439 |
+
|
| 2440 |
+
if (!self.__destroyed) {
|
| 2441 |
+
|
| 2442 |
+
// change the content
|
| 2443 |
+
self.__contentSet(content);
|
| 2444 |
+
|
| 2445 |
+
if (self.__Content !== null) {
|
| 2446 |
+
|
| 2447 |
+
// update the tooltip if it is open
|
| 2448 |
+
if (self.__state !== 'closed') {
|
| 2449 |
+
|
| 2450 |
+
// reset the content in the tooltip
|
| 2451 |
+
self.__contentInsert();
|
| 2452 |
+
|
| 2453 |
+
// reposition and resize the tooltip
|
| 2454 |
+
self.reposition();
|
| 2455 |
+
|
| 2456 |
+
// if we want to play a little animation showing the content changed
|
| 2457 |
+
if (self.__options.updateAnimation) {
|
| 2458 |
+
|
| 2459 |
+
if (env.hasTransitions) {
|
| 2460 |
+
|
| 2461 |
+
// keep the reference in the local scope
|
| 2462 |
+
var animation = self.__options.updateAnimation;
|
| 2463 |
+
|
| 2464 |
+
self._$tooltip.addClass('tooltipster-update-'+ animation);
|
| 2465 |
+
|
| 2466 |
+
// remove the class after a while. The actual duration of the
|
| 2467 |
+
// update animation may be shorter, it's set in the CSS rules
|
| 2468 |
+
setTimeout(function() {
|
| 2469 |
+
|
| 2470 |
+
if (self.__state != 'closed') {
|
| 2471 |
+
|
| 2472 |
+
self._$tooltip.removeClass('tooltipster-update-'+ animation);
|
| 2473 |
+
}
|
| 2474 |
+
}, 1000);
|
| 2475 |
+
}
|
| 2476 |
+
else {
|
| 2477 |
+
self._$tooltip.fadeTo(200, 0.5, function() {
|
| 2478 |
+
if (self.__state != 'closed') {
|
| 2479 |
+
self._$tooltip.fadeTo(200, 1);
|
| 2480 |
+
}
|
| 2481 |
+
});
|
| 2482 |
+
}
|
| 2483 |
+
}
|
| 2484 |
+
}
|
| 2485 |
+
}
|
| 2486 |
+
else {
|
| 2487 |
+
self._close();
|
| 2488 |
+
}
|
| 2489 |
+
}
|
| 2490 |
+
else {
|
| 2491 |
+
self.__destroyError();
|
| 2492 |
+
}
|
| 2493 |
+
|
| 2494 |
+
return self;
|
| 2495 |
+
}
|
| 2496 |
+
},
|
| 2497 |
+
|
| 2498 |
+
/**
|
| 2499 |
+
* Destroys the tooltip
|
| 2500 |
+
*
|
| 2501 |
+
* @returns {self}
|
| 2502 |
+
* @public
|
| 2503 |
+
*/
|
| 2504 |
+
destroy: function() {
|
| 2505 |
+
|
| 2506 |
+
var self = this;
|
| 2507 |
+
|
| 2508 |
+
if (!self.__destroyed) {
|
| 2509 |
+
|
| 2510 |
+
if(self.__state != 'closed'){
|
| 2511 |
+
|
| 2512 |
+
// no closing delay
|
| 2513 |
+
self.option('animationDuration', 0)
|
| 2514 |
+
// force closing
|
| 2515 |
+
._close(null, null, true);
|
| 2516 |
+
}
|
| 2517 |
+
else {
|
| 2518 |
+
// there might be an open timeout still running
|
| 2519 |
+
self.__timeoutsClear();
|
| 2520 |
+
}
|
| 2521 |
+
|
| 2522 |
+
// send event
|
| 2523 |
+
self._trigger('destroy');
|
| 2524 |
+
|
| 2525 |
+
self.__destroyed = true;
|
| 2526 |
+
|
| 2527 |
+
self._$origin
|
| 2528 |
+
.removeData(self.__namespace)
|
| 2529 |
+
// remove the open trigger listeners
|
| 2530 |
+
.off('.'+ self.__namespace +'-triggerOpen');
|
| 2531 |
+
|
| 2532 |
+
// remove the touch listener
|
| 2533 |
+
$(env.window.document.body).off('.' + self.__namespace +'-triggerOpen');
|
| 2534 |
+
|
| 2535 |
+
var ns = self._$origin.data('tooltipster-ns');
|
| 2536 |
+
|
| 2537 |
+
// if the origin has been removed from DOM, its data may
|
| 2538 |
+
// well have been destroyed in the process and there would
|
| 2539 |
+
// be nothing to clean up or restore
|
| 2540 |
+
if (ns) {
|
| 2541 |
+
|
| 2542 |
+
// if there are no more tooltips on this element
|
| 2543 |
+
if (ns.length === 1) {
|
| 2544 |
+
|
| 2545 |
+
// optional restoration of a title attribute
|
| 2546 |
+
var title = null;
|
| 2547 |
+
if (self.__options.restoration == 'previous') {
|
| 2548 |
+
title = self._$origin.data('tooltipster-initialTitle');
|
| 2549 |
+
}
|
| 2550 |
+
else if (self.__options.restoration == 'current') {
|
| 2551 |
+
|
| 2552 |
+
// old school technique to stringify when outerHTML is not supported
|
| 2553 |
+
title = (typeof self.__Content == 'string') ?
|
| 2554 |
+
self.__Content :
|
| 2555 |
+
$('<div></div>').append(self.__Content).html();
|
| 2556 |
+
}
|
| 2557 |
+
|
| 2558 |
+
if (title) {
|
| 2559 |
+
self._$origin.attr('title', title);
|
| 2560 |
+
}
|
| 2561 |
+
|
| 2562 |
+
// final cleaning
|
| 2563 |
+
|
| 2564 |
+
self._$origin.removeClass('tooltipstered');
|
| 2565 |
+
|
| 2566 |
+
self._$origin
|
| 2567 |
+
.removeData('tooltipster-ns')
|
| 2568 |
+
.removeData('tooltipster-initialTitle');
|
| 2569 |
+
}
|
| 2570 |
+
else {
|
| 2571 |
+
// remove the instance namespace from the list of namespaces of
|
| 2572 |
+
// tooltips present on the element
|
| 2573 |
+
ns = $.grep(ns, function(el, i) {
|
| 2574 |
+
return el !== self.__namespace;
|
| 2575 |
+
});
|
| 2576 |
+
self._$origin.data('tooltipster-ns', ns);
|
| 2577 |
+
}
|
| 2578 |
+
}
|
| 2579 |
+
|
| 2580 |
+
// last event
|
| 2581 |
+
self._trigger('destroyed');
|
| 2582 |
+
|
| 2583 |
+
// unbind private and public event listeners
|
| 2584 |
+
self._off();
|
| 2585 |
+
self.off();
|
| 2586 |
+
|
| 2587 |
+
// remove external references, just in case
|
| 2588 |
+
self.__Content = null;
|
| 2589 |
+
self.__$emitterPrivate = null;
|
| 2590 |
+
self.__$emitterPublic = null;
|
| 2591 |
+
self.__options.parent = null;
|
| 2592 |
+
self._$origin = null;
|
| 2593 |
+
self._$tooltip = null;
|
| 2594 |
+
|
| 2595 |
+
// make sure the object is no longer referenced in there to prevent
|
| 2596 |
+
// memory leaks
|
| 2597 |
+
$.tooltipster.__instancesLatestArr = $.grep($.tooltipster.__instancesLatestArr, function(el, i) {
|
| 2598 |
+
return self !== el;
|
| 2599 |
+
});
|
| 2600 |
+
|
| 2601 |
+
clearInterval(self.__garbageCollector);
|
| 2602 |
+
}
|
| 2603 |
+
else {
|
| 2604 |
+
self.__destroyError();
|
| 2605 |
+
}
|
| 2606 |
+
|
| 2607 |
+
// we return the scope rather than true so that the call to
|
| 2608 |
+
// .tooltipster('destroy') actually returns the matched elements
|
| 2609 |
+
// and applies to all of them
|
| 2610 |
+
return self;
|
| 2611 |
+
},
|
| 2612 |
+
|
| 2613 |
+
/**
|
| 2614 |
+
* Disables the tooltip
|
| 2615 |
+
*
|
| 2616 |
+
* @returns {self}
|
| 2617 |
+
* @public
|
| 2618 |
+
*/
|
| 2619 |
+
disable: function() {
|
| 2620 |
+
|
| 2621 |
+
if (!this.__destroyed) {
|
| 2622 |
+
|
| 2623 |
+
// close first, in case the tooltip would not disappear on
|
| 2624 |
+
// its own (no close trigger)
|
| 2625 |
+
this._close();
|
| 2626 |
+
this.__enabled = false;
|
| 2627 |
+
|
| 2628 |
+
return this;
|
| 2629 |
+
}
|
| 2630 |
+
else {
|
| 2631 |
+
this.__destroyError();
|
| 2632 |
+
}
|
| 2633 |
+
|
| 2634 |
+
return this;
|
| 2635 |
+
},
|
| 2636 |
+
|
| 2637 |
+
/**
|
| 2638 |
+
* Returns the HTML element of the origin
|
| 2639 |
+
*
|
| 2640 |
+
* @returns {self}
|
| 2641 |
+
* @public
|
| 2642 |
+
*/
|
| 2643 |
+
elementOrigin: function() {
|
| 2644 |
+
|
| 2645 |
+
if (!this.__destroyed) {
|
| 2646 |
+
return this._$origin[0];
|
| 2647 |
+
}
|
| 2648 |
+
else {
|
| 2649 |
+
this.__destroyError();
|
| 2650 |
+
}
|
| 2651 |
+
},
|
| 2652 |
+
|
| 2653 |
+
/**
|
| 2654 |
+
* Returns the HTML element of the tooltip
|
| 2655 |
+
*
|
| 2656 |
+
* @returns {self}
|
| 2657 |
+
* @public
|
| 2658 |
+
*/
|
| 2659 |
+
elementTooltip: function() {
|
| 2660 |
+
return this._$tooltip ? this._$tooltip[0] : null;
|
| 2661 |
+
},
|
| 2662 |
+
|
| 2663 |
+
/**
|
| 2664 |
+
* Enables the tooltip
|
| 2665 |
+
*
|
| 2666 |
+
* @returns {self}
|
| 2667 |
+
* @public
|
| 2668 |
+
*/
|
| 2669 |
+
enable: function() {
|
| 2670 |
+
this.__enabled = true;
|
| 2671 |
+
return this;
|
| 2672 |
+
},
|
| 2673 |
+
|
| 2674 |
+
/**
|
| 2675 |
+
* Alias, deprecated in 4.0.0
|
| 2676 |
+
*
|
| 2677 |
+
* @param {function} callback
|
| 2678 |
+
* @returns {self}
|
| 2679 |
+
* @public
|
| 2680 |
+
*/
|
| 2681 |
+
hide: function(callback) {
|
| 2682 |
+
return this.close(callback);
|
| 2683 |
+
},
|
| 2684 |
+
|
| 2685 |
+
/**
|
| 2686 |
+
* Returns the instance
|
| 2687 |
+
*
|
| 2688 |
+
* @returns {self}
|
| 2689 |
+
* @public
|
| 2690 |
+
*/
|
| 2691 |
+
instance: function() {
|
| 2692 |
+
return this;
|
| 2693 |
+
},
|
| 2694 |
+
|
| 2695 |
+
/**
|
| 2696 |
+
* For public use only, not to be used by plugins (use ::_off() instead)
|
| 2697 |
+
*
|
| 2698 |
+
* @returns {self}
|
| 2699 |
+
* @public
|
| 2700 |
+
*/
|
| 2701 |
+
off: function() {
|
| 2702 |
+
|
| 2703 |
+
if (!this.__destroyed) {
|
| 2704 |
+
this.__$emitterPublic.off.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 2705 |
+
}
|
| 2706 |
+
|
| 2707 |
+
return this;
|
| 2708 |
+
},
|
| 2709 |
+
|
| 2710 |
+
/**
|
| 2711 |
+
* For public use only, not to be used by plugins (use ::_on() instead)
|
| 2712 |
+
*
|
| 2713 |
+
* @returns {self}
|
| 2714 |
+
* @public
|
| 2715 |
+
*/
|
| 2716 |
+
on: function() {
|
| 2717 |
+
|
| 2718 |
+
if (!this.__destroyed) {
|
| 2719 |
+
this.__$emitterPublic.on.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 2720 |
+
}
|
| 2721 |
+
else {
|
| 2722 |
+
this.__destroyError();
|
| 2723 |
+
}
|
| 2724 |
+
|
| 2725 |
+
return this;
|
| 2726 |
+
},
|
| 2727 |
+
|
| 2728 |
+
/**
|
| 2729 |
+
* For public use only, not to be used by plugins
|
| 2730 |
+
*
|
| 2731 |
+
* @returns {self}
|
| 2732 |
+
* @public
|
| 2733 |
+
*/
|
| 2734 |
+
one: function() {
|
| 2735 |
+
|
| 2736 |
+
if (!this.__destroyed) {
|
| 2737 |
+
this.__$emitterPublic.one.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 2738 |
+
}
|
| 2739 |
+
else {
|
| 2740 |
+
this.__destroyError();
|
| 2741 |
+
}
|
| 2742 |
+
|
| 2743 |
+
return this;
|
| 2744 |
+
},
|
| 2745 |
+
|
| 2746 |
+
/**
|
| 2747 |
+
* @see self::_open
|
| 2748 |
+
* @returns {self}
|
| 2749 |
+
* @public
|
| 2750 |
+
*/
|
| 2751 |
+
open: function(callback) {
|
| 2752 |
+
|
| 2753 |
+
if (!this.__destroyed) {
|
| 2754 |
+
this._open(null, callback);
|
| 2755 |
+
}
|
| 2756 |
+
else {
|
| 2757 |
+
this.__destroyError();
|
| 2758 |
+
}
|
| 2759 |
+
|
| 2760 |
+
return this;
|
| 2761 |
+
},
|
| 2762 |
+
|
| 2763 |
+
/**
|
| 2764 |
+
* Get or set options. For internal use and advanced users only.
|
| 2765 |
+
*
|
| 2766 |
+
* @param {string} o Option name
|
| 2767 |
+
* @param {mixed} val optional A new value for the option
|
| 2768 |
+
* @return {mixed|self} If val is omitted, the value of the option
|
| 2769 |
+
* is returned, otherwise the instance itself is returned
|
| 2770 |
+
* @public
|
| 2771 |
+
*/
|
| 2772 |
+
option: function(o, val) {
|
| 2773 |
+
|
| 2774 |
+
// getter
|
| 2775 |
+
if (val === undefined) {
|
| 2776 |
+
return this.__options[o];
|
| 2777 |
+
}
|
| 2778 |
+
// setter
|
| 2779 |
+
else {
|
| 2780 |
+
|
| 2781 |
+
if (!this.__destroyed) {
|
| 2782 |
+
|
| 2783 |
+
// change value
|
| 2784 |
+
this.__options[o] = val;
|
| 2785 |
+
|
| 2786 |
+
// format
|
| 2787 |
+
this.__optionsFormat();
|
| 2788 |
+
|
| 2789 |
+
// re-prepare the triggers if needed
|
| 2790 |
+
if ($.inArray(o, ['trigger', 'triggerClose', 'triggerOpen']) >= 0) {
|
| 2791 |
+
this.__prepareOrigin();
|
| 2792 |
+
}
|
| 2793 |
+
|
| 2794 |
+
if (o === 'selfDestruction') {
|
| 2795 |
+
this.__prepareGC();
|
| 2796 |
+
}
|
| 2797 |
+
}
|
| 2798 |
+
else {
|
| 2799 |
+
this.__destroyError();
|
| 2800 |
+
}
|
| 2801 |
+
|
| 2802 |
+
return this;
|
| 2803 |
+
}
|
| 2804 |
+
},
|
| 2805 |
+
|
| 2806 |
+
/**
|
| 2807 |
+
* This method is in charge of setting the position and size properties of the tooltip.
|
| 2808 |
+
* All the hard work is delegated to the display plugin.
|
| 2809 |
+
* Note: The tooltip may be detached from the DOM at the moment the method is called
|
| 2810 |
+
* but must be attached by the end of the method call.
|
| 2811 |
+
*
|
| 2812 |
+
* @param {object} event For internal use only. Defined if an event such as
|
| 2813 |
+
* window resizing triggered the repositioning
|
| 2814 |
+
* @param {boolean} tooltipIsDetached For internal use only. Set this to true if you
|
| 2815 |
+
* know that the tooltip not being in the DOM is not an issue (typically when the
|
| 2816 |
+
* tooltip element has just been created but has not been added to the DOM yet).
|
| 2817 |
+
* @returns {self}
|
| 2818 |
+
* @public
|
| 2819 |
+
*/
|
| 2820 |
+
reposition: function(event, tooltipIsDetached) {
|
| 2821 |
+
|
| 2822 |
+
var self = this;
|
| 2823 |
+
|
| 2824 |
+
if (!self.__destroyed) {
|
| 2825 |
+
|
| 2826 |
+
// if the tooltip is still open and the origin is still in the DOM
|
| 2827 |
+
if (self.__state != 'closed' && bodyContains(self._$origin)) {
|
| 2828 |
+
|
| 2829 |
+
// if the tooltip has not been removed from DOM manually (or if it
|
| 2830 |
+
// has been detached on purpose)
|
| 2831 |
+
if (tooltipIsDetached || bodyContains(self._$tooltip)) {
|
| 2832 |
+
|
| 2833 |
+
if (!tooltipIsDetached) {
|
| 2834 |
+
// detach in case the tooltip overflows the window and adds
|
| 2835 |
+
// scrollbars to it, so __geometry can be accurate
|
| 2836 |
+
self._$tooltip.detach();
|
| 2837 |
+
}
|
| 2838 |
+
|
| 2839 |
+
// refresh the geometry object before passing it as a helper
|
| 2840 |
+
self.__Geometry = self.__geometry();
|
| 2841 |
+
|
| 2842 |
+
// let a plugin fo the rest
|
| 2843 |
+
self._trigger({
|
| 2844 |
+
type: 'reposition',
|
| 2845 |
+
event: event,
|
| 2846 |
+
helper: {
|
| 2847 |
+
geo: self.__Geometry
|
| 2848 |
+
}
|
| 2849 |
+
});
|
| 2850 |
+
}
|
| 2851 |
+
}
|
| 2852 |
+
}
|
| 2853 |
+
else {
|
| 2854 |
+
self.__destroyError();
|
| 2855 |
+
}
|
| 2856 |
+
|
| 2857 |
+
return self;
|
| 2858 |
+
},
|
| 2859 |
+
|
| 2860 |
+
/**
|
| 2861 |
+
* Alias, deprecated in 4.0.0
|
| 2862 |
+
*
|
| 2863 |
+
* @param callback
|
| 2864 |
+
* @returns {self}
|
| 2865 |
+
* @public
|
| 2866 |
+
*/
|
| 2867 |
+
show: function(callback) {
|
| 2868 |
+
return this.open(callback);
|
| 2869 |
+
},
|
| 2870 |
+
|
| 2871 |
+
/**
|
| 2872 |
+
* Returns some properties about the instance
|
| 2873 |
+
*
|
| 2874 |
+
* @returns {object}
|
| 2875 |
+
* @public
|
| 2876 |
+
*/
|
| 2877 |
+
status: function() {
|
| 2878 |
+
|
| 2879 |
+
return {
|
| 2880 |
+
destroyed: this.__destroyed,
|
| 2881 |
+
enabled: this.__enabled,
|
| 2882 |
+
open: this.__state !== 'closed',
|
| 2883 |
+
state: this.__state
|
| 2884 |
+
};
|
| 2885 |
+
},
|
| 2886 |
+
|
| 2887 |
+
/**
|
| 2888 |
+
* For public use only, not to be used by plugins
|
| 2889 |
+
*
|
| 2890 |
+
* @returns {self}
|
| 2891 |
+
* @public
|
| 2892 |
+
*/
|
| 2893 |
+
triggerHandler: function() {
|
| 2894 |
+
|
| 2895 |
+
if (!this.__destroyed) {
|
| 2896 |
+
this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic, Array.prototype.slice.apply(arguments));
|
| 2897 |
+
}
|
| 2898 |
+
else {
|
| 2899 |
+
this.__destroyError();
|
| 2900 |
+
}
|
| 2901 |
+
|
| 2902 |
+
return this;
|
| 2903 |
+
}
|
| 2904 |
+
};
|
| 2905 |
+
|
| 2906 |
+
$.fn.tooltipster = function() {
|
| 2907 |
+
|
| 2908 |
+
// for using in closures
|
| 2909 |
+
var args = Array.prototype.slice.apply(arguments),
|
| 2910 |
+
// common mistake: an HTML element can't be in several tooltips at the same time
|
| 2911 |
+
contentCloningWarning = 'You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.';
|
| 2912 |
+
|
| 2913 |
+
// this happens with $(sel).tooltipster(...) when $(sel) does not match anything
|
| 2914 |
+
if (this.length === 0) {
|
| 2915 |
+
|
| 2916 |
+
// still chainable
|
| 2917 |
+
return this;
|
| 2918 |
+
}
|
| 2919 |
+
// this happens when calling $(sel).tooltipster('methodName or options')
|
| 2920 |
+
// where $(sel) matches one or more elements
|
| 2921 |
+
else {
|
| 2922 |
+
|
| 2923 |
+
// method calls
|
| 2924 |
+
if (typeof args[0] === 'string') {
|
| 2925 |
+
|
| 2926 |
+
var v = '#*$~&';
|
| 2927 |
+
|
| 2928 |
+
this.each(function() {
|
| 2929 |
+
|
| 2930 |
+
// retrieve the namepaces of the tooltip(s) that exist on that element.
|
| 2931 |
+
// We will interact with the first tooltip only.
|
| 2932 |
+
var ns = $(this).data('tooltipster-ns'),
|
| 2933 |
+
// self represents the instance of the first tooltipster plugin
|
| 2934 |
+
// associated to the current HTML object of the loop
|
| 2935 |
+
self = ns ? $(this).data(ns[0]) : null;
|
| 2936 |
+
|
| 2937 |
+
// if the current element holds a tooltipster instance
|
| 2938 |
+
if (self) {
|
| 2939 |
+
|
| 2940 |
+
if (typeof self[args[0]] === 'function') {
|
| 2941 |
+
|
| 2942 |
+
if ( this.length > 1
|
| 2943 |
+
&& args[0] == 'content'
|
| 2944 |
+
&& ( args[1] instanceof $
|
| 2945 |
+
|| (typeof args[1] == 'object' && args[1] != null && args[1].tagName)
|
| 2946 |
+
)
|
| 2947 |
+
&& !self.__options.contentCloning
|
| 2948 |
+
&& self.__options.debug
|
| 2949 |
+
) {
|
| 2950 |
+
console.log(contentCloningWarning);
|
| 2951 |
+
}
|
| 2952 |
+
|
| 2953 |
+
// note : args[1] and args[2] may not be defined
|
| 2954 |
+
var resp = self[args[0]](args[1], args[2]);
|
| 2955 |
+
}
|
| 2956 |
+
else {
|
| 2957 |
+
throw new Error('Unknown method "'+ args[0] +'"');
|
| 2958 |
+
}
|
| 2959 |
+
|
| 2960 |
+
// if the function returned anything other than the instance
|
| 2961 |
+
// itself (which implies chaining, except for the `instance` method)
|
| 2962 |
+
if (resp !== self || args[0] === 'instance') {
|
| 2963 |
+
|
| 2964 |
+
v = resp;
|
| 2965 |
+
|
| 2966 |
+
// return false to stop .each iteration on the first element
|
| 2967 |
+
// matched by the selector
|
| 2968 |
+
return false;
|
| 2969 |
+
}
|
| 2970 |
+
}
|
| 2971 |
+
else {
|
| 2972 |
+
throw new Error('You called Tooltipster\'s "'+ args[0] +'" method on an uninitialized element');
|
| 2973 |
+
}
|
| 2974 |
+
});
|
| 2975 |
+
|
| 2976 |
+
return (v !== '#*$~&') ? v : this;
|
| 2977 |
+
}
|
| 2978 |
+
// first argument is undefined or an object: the tooltip is initializing
|
| 2979 |
+
else {
|
| 2980 |
+
|
| 2981 |
+
// reset the array of last initialized objects
|
| 2982 |
+
$.tooltipster.__instancesLatestArr = [];
|
| 2983 |
+
|
| 2984 |
+
// is there a defined value for the multiple option in the options object ?
|
| 2985 |
+
var multipleIsSet = args[0] && args[0].multiple !== undefined,
|
| 2986 |
+
// if the multiple option is set to true, or if it's not defined but
|
| 2987 |
+
// set to true in the defaults
|
| 2988 |
+
multiple = (multipleIsSet && args[0].multiple) || (!multipleIsSet && defaults.multiple),
|
| 2989 |
+
// same for content
|
| 2990 |
+
contentIsSet = args[0] && args[0].content !== undefined,
|
| 2991 |
+
content = (contentIsSet && args[0].content) || (!contentIsSet && defaults.content),
|
| 2992 |
+
// same for contentCloning
|
| 2993 |
+
contentCloningIsSet = args[0] && args[0].contentCloning !== undefined,
|
| 2994 |
+
contentCloning =
|
| 2995 |
+
(contentCloningIsSet && args[0].contentCloning)
|
| 2996 |
+
|| (!contentCloningIsSet && defaults.contentCloning),
|
| 2997 |
+
// same for debug
|
| 2998 |
+
debugIsSet = args[0] && args[0].debug !== undefined,
|
| 2999 |
+
debug = (debugIsSet && args[0].debug) || (!debugIsSet && defaults.debug);
|
| 3000 |
+
|
| 3001 |
+
if ( this.length > 1
|
| 3002 |
+
&& ( content instanceof $
|
| 3003 |
+
|| (typeof content == 'object' && content != null && content.tagName)
|
| 3004 |
+
)
|
| 3005 |
+
&& !contentCloning
|
| 3006 |
+
&& debug
|
| 3007 |
+
) {
|
| 3008 |
+
console.log(contentCloningWarning);
|
| 3009 |
+
}
|
| 3010 |
+
|
| 3011 |
+
// create a tooltipster instance for each element if it doesn't
|
| 3012 |
+
// already have one or if the multiple option is set, and attach the
|
| 3013 |
+
// object to it
|
| 3014 |
+
this.each(function() {
|
| 3015 |
+
|
| 3016 |
+
var go = false,
|
| 3017 |
+
$this = $(this),
|
| 3018 |
+
ns = $this.data('tooltipster-ns'),
|
| 3019 |
+
obj = null;
|
| 3020 |
+
|
| 3021 |
+
if (!ns) {
|
| 3022 |
+
go = true;
|
| 3023 |
+
}
|
| 3024 |
+
else if (multiple) {
|
| 3025 |
+
go = true;
|
| 3026 |
+
}
|
| 3027 |
+
else if (debug) {
|
| 3028 |
+
console.log('Tooltipster: one or more tooltips are already attached to the element below. Ignoring.');
|
| 3029 |
+
console.log(this);
|
| 3030 |
+
}
|
| 3031 |
+
|
| 3032 |
+
if (go) {
|
| 3033 |
+
obj = new $.Tooltipster(this, args[0]);
|
| 3034 |
+
|
| 3035 |
+
// save the reference of the new instance
|
| 3036 |
+
if (!ns) ns = [];
|
| 3037 |
+
ns.push(obj.__namespace);
|
| 3038 |
+
$this.data('tooltipster-ns', ns);
|
| 3039 |
+
|
| 3040 |
+
// save the instance itself
|
| 3041 |
+
$this.data(obj.__namespace, obj);
|
| 3042 |
+
|
| 3043 |
+
// call our constructor custom function.
|
| 3044 |
+
// we do this here and not in ::init() because we wanted
|
| 3045 |
+
// the object to be saved in $this.data before triggering
|
| 3046 |
+
// it
|
| 3047 |
+
if (obj.__options.functionInit) {
|
| 3048 |
+
obj.__options.functionInit.call(obj, obj, {
|
| 3049 |
+
origin: this
|
| 3050 |
+
});
|
| 3051 |
+
}
|
| 3052 |
+
|
| 3053 |
+
// and now the event, for the plugins and core emitter
|
| 3054 |
+
obj._trigger('init');
|
| 3055 |
+
}
|
| 3056 |
+
|
| 3057 |
+
$.tooltipster.__instancesLatestArr.push(obj);
|
| 3058 |
+
});
|
| 3059 |
+
|
| 3060 |
+
return this;
|
| 3061 |
+
}
|
| 3062 |
+
}
|
| 3063 |
+
};
|
| 3064 |
+
|
| 3065 |
+
// Utilities
|
| 3066 |
+
|
| 3067 |
+
/**
|
| 3068 |
+
* A class to check if a tooltip can fit in given dimensions
|
| 3069 |
+
*
|
| 3070 |
+
* @param {object} $tooltip The jQuery wrapped tooltip element, or a clone of it
|
| 3071 |
+
*/
|
| 3072 |
+
function Ruler($tooltip) {
|
| 3073 |
+
|
| 3074 |
+
// list of instance variables
|
| 3075 |
+
|
| 3076 |
+
this.$container;
|
| 3077 |
+
this.constraints = null;
|
| 3078 |
+
this.__$tooltip;
|
| 3079 |
+
|
| 3080 |
+
this.__init($tooltip);
|
| 3081 |
+
}
|
| 3082 |
+
|
| 3083 |
+
Ruler.prototype = {
|
| 3084 |
+
|
| 3085 |
+
/**
|
| 3086 |
+
* Move the tooltip into an invisible div that does not allow overflow to make
|
| 3087 |
+
* size tests. Note: the tooltip may or may not be attached to the DOM at the
|
| 3088 |
+
* moment this method is called, it does not matter.
|
| 3089 |
+
*
|
| 3090 |
+
* @param {object} $tooltip The object to test. May be just a clone of the
|
| 3091 |
+
* actual tooltip.
|
| 3092 |
+
* @private
|
| 3093 |
+
*/
|
| 3094 |
+
__init: function($tooltip) {
|
| 3095 |
+
|
| 3096 |
+
this.__$tooltip = $tooltip;
|
| 3097 |
+
|
| 3098 |
+
this.__$tooltip
|
| 3099 |
+
.css({
|
| 3100 |
+
// for some reason we have to specify top and left 0
|
| 3101 |
+
left: 0,
|
| 3102 |
+
// any overflow will be ignored while measuring
|
| 3103 |
+
overflow: 'hidden',
|
| 3104 |
+
// positions at (0,0) without the div using 100% of the available width
|
| 3105 |
+
position: 'absolute',
|
| 3106 |
+
top: 0
|
| 3107 |
+
})
|
| 3108 |
+
// overflow must be auto during the test. We re-set this in case
|
| 3109 |
+
// it were modified by the user
|
| 3110 |
+
.find('.tooltipster-content')
|
| 3111 |
+
.css('overflow', 'auto');
|
| 3112 |
+
|
| 3113 |
+
this.$container = $('<div class="tooltipster-ruler"></div>')
|
| 3114 |
+
.append(this.__$tooltip)
|
| 3115 |
+
.appendTo(env.window.document.body);
|
| 3116 |
+
},
|
| 3117 |
+
|
| 3118 |
+
/**
|
| 3119 |
+
* Force the browser to redraw (re-render) the tooltip immediately. This is required
|
| 3120 |
+
* when you changed some CSS properties and need to make something with it
|
| 3121 |
+
* immediately, without waiting for the browser to redraw at the end of instructions.
|
| 3122 |
+
*
|
| 3123 |
+
* @see http://stackoverflow.com/questions/3485365/how-can-i-force-webkit-to-redraw-repaint-to-propagate-style-changes
|
| 3124 |
+
* @private
|
| 3125 |
+
*/
|
| 3126 |
+
__forceRedraw: function() {
|
| 3127 |
+
|
| 3128 |
+
// note: this would work but for Webkit only
|
| 3129 |
+
//this.__$tooltip.close();
|
| 3130 |
+
//this.__$tooltip[0].offsetHeight;
|
| 3131 |
+
//this.__$tooltip.open();
|
| 3132 |
+
|
| 3133 |
+
// works in FF too
|
| 3134 |
+
var $p = this.__$tooltip.parent();
|
| 3135 |
+
this.__$tooltip.detach();
|
| 3136 |
+
this.__$tooltip.appendTo($p);
|
| 3137 |
+
},
|
| 3138 |
+
|
| 3139 |
+
/**
|
| 3140 |
+
* Set maximum dimensions for the tooltip. A call to ::measure afterwards
|
| 3141 |
+
* will tell us if the content overflows or if it's ok
|
| 3142 |
+
*
|
| 3143 |
+
* @param {int} width
|
| 3144 |
+
* @param {int} height
|
| 3145 |
+
* @return {Ruler}
|
| 3146 |
+
* @public
|
| 3147 |
+
*/
|
| 3148 |
+
constrain: function(width, height) {
|
| 3149 |
+
|
| 3150 |
+
this.constraints = {
|
| 3151 |
+
width: width,
|
| 3152 |
+
height: height
|
| 3153 |
+
};
|
| 3154 |
+
|
| 3155 |
+
this.__$tooltip.css({
|
| 3156 |
+
// we disable display:flex, otherwise the content would overflow without
|
| 3157 |
+
// creating horizontal scrolling (which we need to detect).
|
| 3158 |
+
display: 'block',
|
| 3159 |
+
// reset any previous height
|
| 3160 |
+
height: '',
|
| 3161 |
+
// we'll check if horizontal scrolling occurs
|
| 3162 |
+
overflow: 'auto',
|
| 3163 |
+
// we'll set the width and see what height is generated and if there
|
| 3164 |
+
// is horizontal overflow
|
| 3165 |
+
width: width
|
| 3166 |
+
});
|
| 3167 |
+
|
| 3168 |
+
return this;
|
| 3169 |
+
},
|
| 3170 |
+
|
| 3171 |
+
/**
|
| 3172 |
+
* Reset the tooltip content overflow and remove the test container
|
| 3173 |
+
*
|
| 3174 |
+
* @returns {Ruler}
|
| 3175 |
+
* @public
|
| 3176 |
+
*/
|
| 3177 |
+
destroy: function() {
|
| 3178 |
+
|
| 3179 |
+
// in case the element was not a clone
|
| 3180 |
+
this.__$tooltip
|
| 3181 |
+
.detach()
|
| 3182 |
+
.find('.tooltipster-content')
|
| 3183 |
+
.css({
|
| 3184 |
+
// reset to CSS value
|
| 3185 |
+
display: '',
|
| 3186 |
+
overflow: ''
|
| 3187 |
+
});
|
| 3188 |
+
|
| 3189 |
+
this.$container.remove();
|
| 3190 |
+
},
|
| 3191 |
+
|
| 3192 |
+
/**
|
| 3193 |
+
* Removes any constraints
|
| 3194 |
+
*
|
| 3195 |
+
* @returns {Ruler}
|
| 3196 |
+
* @public
|
| 3197 |
+
*/
|
| 3198 |
+
free: function() {
|
| 3199 |
+
|
| 3200 |
+
this.constraints = null;
|
| 3201 |
+
|
| 3202 |
+
// reset to natural size
|
| 3203 |
+
this.__$tooltip.css({
|
| 3204 |
+
display: '',
|
| 3205 |
+
height: '',
|
| 3206 |
+
overflow: 'visible',
|
| 3207 |
+
width: ''
|
| 3208 |
+
});
|
| 3209 |
+
|
| 3210 |
+
return this;
|
| 3211 |
+
},
|
| 3212 |
+
|
| 3213 |
+
/**
|
| 3214 |
+
* Returns the size of the tooltip. When constraints are applied, also returns
|
| 3215 |
+
* whether the tooltip fits in the provided dimensions.
|
| 3216 |
+
* The idea is to see if the new height is small enough and if the content does
|
| 3217 |
+
* not overflow horizontally.
|
| 3218 |
+
*
|
| 3219 |
+
* @param {int} width
|
| 3220 |
+
* @param {int} height
|
| 3221 |
+
* @returns {object} An object with a bool `fits` property and a `size` property
|
| 3222 |
+
* @public
|
| 3223 |
+
*/
|
| 3224 |
+
measure: function() {
|
| 3225 |
+
|
| 3226 |
+
this.__forceRedraw();
|
| 3227 |
+
|
| 3228 |
+
var tooltipBcr = this.__$tooltip[0].getBoundingClientRect(),
|
| 3229 |
+
result = { size: {
|
| 3230 |
+
// bcr.width/height are not defined in IE8- but in this
|
| 3231 |
+
// case, bcr.right/bottom will have the same value
|
| 3232 |
+
// except in iOS 8+ where tooltipBcr.bottom/right are wrong
|
| 3233 |
+
// after scrolling for reasons yet to be determined.
|
| 3234 |
+
// tooltipBcr.top/left might not be 0, see issue #514
|
| 3235 |
+
height: tooltipBcr.height || (tooltipBcr.bottom - tooltipBcr.top),
|
| 3236 |
+
width: tooltipBcr.width || (tooltipBcr.right - tooltipBcr.left)
|
| 3237 |
+
}};
|
| 3238 |
+
|
| 3239 |
+
if (this.constraints) {
|
| 3240 |
+
|
| 3241 |
+
// note: we used to use offsetWidth instead of boundingRectClient but
|
| 3242 |
+
// it returned rounded values, causing issues with sub-pixel layouts.
|
| 3243 |
+
|
| 3244 |
+
// note2: noticed that the bcrWidth of text content of a div was once
|
| 3245 |
+
// greater than the bcrWidth of its container by 1px, causing the final
|
| 3246 |
+
// tooltip box to be too small for its content. However, evaluating
|
| 3247 |
+
// their widths one against the other (below) surprisingly returned
|
| 3248 |
+
// equality. Happened only once in Chrome 48, was not able to reproduce
|
| 3249 |
+
// => just having fun with float position values...
|
| 3250 |
+
|
| 3251 |
+
var $content = this.__$tooltip.find('.tooltipster-content'),
|
| 3252 |
+
height = this.__$tooltip.outerHeight(),
|
| 3253 |
+
contentBcr = $content[0].getBoundingClientRect(),
|
| 3254 |
+
fits = {
|
| 3255 |
+
height: height <= this.constraints.height,
|
| 3256 |
+
width: (
|
| 3257 |
+
// this condition accounts for min-width property that
|
| 3258 |
+
// may apply
|
| 3259 |
+
tooltipBcr.width <= this.constraints.width
|
| 3260 |
+
// the -1 is here because scrollWidth actually returns
|
| 3261 |
+
// a rounded value, and may be greater than bcr.width if
|
| 3262 |
+
// it was rounded up. This may cause an issue for contents
|
| 3263 |
+
// which actually really overflow by 1px or so, but that
|
| 3264 |
+
// should be rare. Not sure how to solve this efficiently.
|
| 3265 |
+
// See http://blogs.msdn.com/b/ie/archive/2012/02/17/sub-pixel-rendering-and-the-css-object-model.aspx
|
| 3266 |
+
&& contentBcr.width >= $content[0].scrollWidth - 1
|
| 3267 |
+
)
|
| 3268 |
+
};
|
| 3269 |
+
|
| 3270 |
+
result.fits = fits.height && fits.width;
|
| 3271 |
+
}
|
| 3272 |
+
|
| 3273 |
+
// old versions of IE get the width wrong for some reason and it causes
|
| 3274 |
+
// the text to be broken to a new line, so we round it up. If the width
|
| 3275 |
+
// is the width of the screen though, we can assume it is accurate.
|
| 3276 |
+
if ( env.IE
|
| 3277 |
+
&& env.IE <= 11
|
| 3278 |
+
&& result.size.width !== env.window.document.documentElement.clientWidth
|
| 3279 |
+
) {
|
| 3280 |
+
result.size.width = Math.ceil(result.size.width) + 1;
|
| 3281 |
+
}
|
| 3282 |
+
|
| 3283 |
+
return result;
|
| 3284 |
+
}
|
| 3285 |
+
};
|
| 3286 |
+
|
| 3287 |
+
// quick & dirty compare function, not bijective nor multidimensional
|
| 3288 |
+
function areEqual(a,b) {
|
| 3289 |
+
var same = true;
|
| 3290 |
+
$.each(a, function(i, _) {
|
| 3291 |
+
if (b[i] === undefined || a[i] !== b[i]) {
|
| 3292 |
+
same = false;
|
| 3293 |
+
return false;
|
| 3294 |
+
}
|
| 3295 |
+
});
|
| 3296 |
+
return same;
|
| 3297 |
+
}
|
| 3298 |
+
|
| 3299 |
+
/**
|
| 3300 |
+
* A fast function to check if an element is still in the DOM. It
|
| 3301 |
+
* tries to use an id as ids are indexed by the browser, or falls
|
| 3302 |
+
* back to jQuery's `contains` method. May fail if two elements
|
| 3303 |
+
* have the same id, but so be it
|
| 3304 |
+
*
|
| 3305 |
+
* @param {object} $obj A jQuery-wrapped HTML element
|
| 3306 |
+
* @return {boolean}
|
| 3307 |
+
*/
|
| 3308 |
+
function bodyContains($obj) {
|
| 3309 |
+
var id = $obj.attr('id'),
|
| 3310 |
+
el = id ? env.window.document.getElementById(id) : null;
|
| 3311 |
+
// must also check that the element with the id is the one we want
|
| 3312 |
+
return el ? el === $obj[0] : $.contains(env.window.document.body, $obj[0]);
|
| 3313 |
+
}
|
| 3314 |
+
|
| 3315 |
+
// detect IE versions for dirty fixes
|
| 3316 |
+
var uA = navigator.userAgent.toLowerCase();
|
| 3317 |
+
if (uA.indexOf('msie') != -1) env.IE = parseInt(uA.split('msie')[1]);
|
| 3318 |
+
else if (uA.toLowerCase().indexOf('trident') !== -1 && uA.indexOf(' rv:11') !== -1) env.IE = 11;
|
| 3319 |
+
else if (uA.toLowerCase().indexOf('edge/') != -1) env.IE = parseInt(uA.toLowerCase().split('edge/')[1]);
|
| 3320 |
+
|
| 3321 |
+
// detecting support for CSS transitions
|
| 3322 |
+
function transitionSupport() {
|
| 3323 |
+
|
| 3324 |
+
// env.window is not defined yet when this is called
|
| 3325 |
+
if (!win) return false;
|
| 3326 |
+
|
| 3327 |
+
var b = win.document.body || win.document.documentElement,
|
| 3328 |
+
s = b.style,
|
| 3329 |
+
p = 'transition',
|
| 3330 |
+
v = ['Moz', 'Webkit', 'Khtml', 'O', 'ms'];
|
| 3331 |
+
|
| 3332 |
+
if (typeof s[p] == 'string') { return true; }
|
| 3333 |
+
|
| 3334 |
+
p = p.charAt(0).toUpperCase() + p.substr(1);
|
| 3335 |
+
for (var i=0; i<v.length; i++) {
|
| 3336 |
+
if (typeof s[v[i] + p] == 'string') { return true; }
|
| 3337 |
+
}
|
| 3338 |
+
return false;
|
| 3339 |
+
}
|
| 3340 |
+
|
| 3341 |
+
// we'll return jQuery for plugins not to have to declare it as a dependency,
|
| 3342 |
+
// but it's done by a build task since it should be included only once at the
|
| 3343 |
+
// end when we concatenate the main file with a plugin
|
| 3344 |
+
// sideTip is Tooltipster's default plugin.
|
| 3345 |
+
// This file will be UMDified by a build task.
|
| 3346 |
+
|
| 3347 |
+
var pluginName = 'tooltipster.sideTip';
|
| 3348 |
+
|
| 3349 |
+
$.tooltipster._plugin({
|
| 3350 |
+
name: pluginName,
|
| 3351 |
+
instance: {
|
| 3352 |
+
/**
|
| 3353 |
+
* Defaults are provided as a function for an easy override by inheritance
|
| 3354 |
+
*
|
| 3355 |
+
* @return {object} An object with the defaults options
|
| 3356 |
+
* @private
|
| 3357 |
+
*/
|
| 3358 |
+
__defaults: function() {
|
| 3359 |
+
|
| 3360 |
+
return {
|
| 3361 |
+
// if the tooltip should display an arrow that points to the origin
|
| 3362 |
+
arrow: true,
|
| 3363 |
+
// the distance in pixels between the tooltip and the origin
|
| 3364 |
+
distance: 6,
|
| 3365 |
+
// allows to easily change the position of the tooltip
|
| 3366 |
+
functionPosition: null,
|
| 3367 |
+
maxWidth: null,
|
| 3368 |
+
// used to accomodate the arrow of tooltip if there is one.
|
| 3369 |
+
// First to make sure that the arrow target is not too close
|
| 3370 |
+
// to the edge of the tooltip, so the arrow does not overflow
|
| 3371 |
+
// the tooltip. Secondly when we reposition the tooltip to
|
| 3372 |
+
// make sure that it's positioned in such a way that the arrow is
|
| 3373 |
+
// still pointing at the target (and not a few pixels beyond it).
|
| 3374 |
+
// It should be equal to or greater than half the width of
|
| 3375 |
+
// the arrow (by width we mean the size of the side which touches
|
| 3376 |
+
// the side of the tooltip).
|
| 3377 |
+
minIntersection: 16,
|
| 3378 |
+
minWidth: 0,
|
| 3379 |
+
// deprecated in 4.0.0. Listed for _optionsExtract to pick it up
|
| 3380 |
+
position: null,
|
| 3381 |
+
side: 'top',
|
| 3382 |
+
// set to false to position the tooltip relatively to the document rather
|
| 3383 |
+
// than the window when we open it
|
| 3384 |
+
viewportAware: true
|
| 3385 |
+
};
|
| 3386 |
+
},
|
| 3387 |
+
|
| 3388 |
+
/**
|
| 3389 |
+
* Run once: at instantiation of the plugin
|
| 3390 |
+
*
|
| 3391 |
+
* @param {object} instance The tooltipster object that instantiated this plugin
|
| 3392 |
+
* @private
|
| 3393 |
+
*/
|
| 3394 |
+
__init: function(instance) {
|
| 3395 |
+
|
| 3396 |
+
var self = this;
|
| 3397 |
+
|
| 3398 |
+
// list of instance variables
|
| 3399 |
+
|
| 3400 |
+
self.__instance = instance;
|
| 3401 |
+
self.__namespace = 'tooltipster-sideTip-'+ Math.round(Math.random()*1000000);
|
| 3402 |
+
self.__previousState = 'closed';
|
| 3403 |
+
self.__options;
|
| 3404 |
+
|
| 3405 |
+
// initial formatting
|
| 3406 |
+
self.__optionsFormat();
|
| 3407 |
+
|
| 3408 |
+
self.__instance._on('state.'+ self.__namespace, function(event) {
|
| 3409 |
+
|
| 3410 |
+
if (event.state == 'closed') {
|
| 3411 |
+
self.__close();
|
| 3412 |
+
}
|
| 3413 |
+
else if (event.state == 'appearing' && self.__previousState == 'closed') {
|
| 3414 |
+
self.__create();
|
| 3415 |
+
}
|
| 3416 |
+
|
| 3417 |
+
self.__previousState = event.state;
|
| 3418 |
+
});
|
| 3419 |
+
|
| 3420 |
+
// reformat every time the options are changed
|
| 3421 |
+
self.__instance._on('options.'+ self.__namespace, function() {
|
| 3422 |
+
self.__optionsFormat();
|
| 3423 |
+
});
|
| 3424 |
+
|
| 3425 |
+
self.__instance._on('reposition.'+ self.__namespace, function(e) {
|
| 3426 |
+
self.__reposition(e.event, e.helper);
|
| 3427 |
+
});
|
| 3428 |
+
},
|
| 3429 |
+
|
| 3430 |
+
/**
|
| 3431 |
+
* Called when the tooltip has closed
|
| 3432 |
+
*
|
| 3433 |
+
* @private
|
| 3434 |
+
*/
|
| 3435 |
+
__close: function() {
|
| 3436 |
+
|
| 3437 |
+
// detach our content object first, so the next jQuery's remove()
|
| 3438 |
+
// call does not unbind its event handlers
|
| 3439 |
+
if (this.__instance.content() instanceof $) {
|
| 3440 |
+
this.__instance.content().detach();
|
| 3441 |
+
}
|
| 3442 |
+
|
| 3443 |
+
// remove the tooltip from the DOM
|
| 3444 |
+
this.__instance._$tooltip.remove();
|
| 3445 |
+
this.__instance._$tooltip = null;
|
| 3446 |
+
},
|
| 3447 |
+
|
| 3448 |
+
/**
|
| 3449 |
+
* Creates the HTML element of the tooltip.
|
| 3450 |
+
*
|
| 3451 |
+
* @private
|
| 3452 |
+
*/
|
| 3453 |
+
__create: function() {
|
| 3454 |
+
|
| 3455 |
+
// note: we wrap with a .tooltipster-box div to be able to set a margin on it
|
| 3456 |
+
// (.tooltipster-base must not have one)
|
| 3457 |
+
var $html = $(
|
| 3458 |
+
'<div class="tooltipster-base tooltipster-sidetip">' +
|
| 3459 |
+
'<div class="tooltipster-box">' +
|
| 3460 |
+
'<div class="tooltipster-content"></div>' +
|
| 3461 |
+
'</div>' +
|
| 3462 |
+
'<div class="tooltipster-arrow">' +
|
| 3463 |
+
'<div class="tooltipster-arrow-uncropped">' +
|
| 3464 |
+
'<div class="tooltipster-arrow-border"></div>' +
|
| 3465 |
+
'<div class="tooltipster-arrow-background"></div>' +
|
| 3466 |
+
'</div>' +
|
| 3467 |
+
'</div>' +
|
| 3468 |
+
'</div>'
|
| 3469 |
+
);
|
| 3470 |
+
|
| 3471 |
+
// hide arrow if asked
|
| 3472 |
+
if (!this.__options.arrow) {
|
| 3473 |
+
$html
|
| 3474 |
+
.find('.tooltipster-box')
|
| 3475 |
+
.css('margin', 0)
|
| 3476 |
+
.end()
|
| 3477 |
+
.find('.tooltipster-arrow')
|
| 3478 |
+
.hide();
|
| 3479 |
+
}
|
| 3480 |
+
|
| 3481 |
+
// apply min/max width if asked
|
| 3482 |
+
if (this.__options.minWidth) {
|
| 3483 |
+
$html.css('min-width', this.__options.minWidth + 'px');
|
| 3484 |
+
}
|
| 3485 |
+
if (this.__options.maxWidth) {
|
| 3486 |
+
$html.css('max-width', this.__options.maxWidth + 'px');
|
| 3487 |
+
}
|
| 3488 |
+
|
| 3489 |
+
this.__instance._$tooltip = $html;
|
| 3490 |
+
|
| 3491 |
+
// tell the instance that the tooltip element has been created
|
| 3492 |
+
this.__instance._trigger('created');
|
| 3493 |
+
},
|
| 3494 |
+
|
| 3495 |
+
/**
|
| 3496 |
+
* Used when the plugin is to be unplugged
|
| 3497 |
+
*
|
| 3498 |
+
* @private
|
| 3499 |
+
*/
|
| 3500 |
+
__destroy: function() {
|
| 3501 |
+
this.__instance._off('.'+ self.__namespace);
|
| 3502 |
+
},
|
| 3503 |
+
|
| 3504 |
+
/**
|
| 3505 |
+
* (Re)compute this.__options from the options declared to the instance
|
| 3506 |
+
*
|
| 3507 |
+
* @private
|
| 3508 |
+
*/
|
| 3509 |
+
__optionsFormat: function() {
|
| 3510 |
+
|
| 3511 |
+
var self = this;
|
| 3512 |
+
|
| 3513 |
+
// get the options
|
| 3514 |
+
self.__options = self.__instance._optionsExtract(pluginName, self.__defaults());
|
| 3515 |
+
|
| 3516 |
+
// for backward compatibility, deprecated in v4.0.0
|
| 3517 |
+
if (self.__options.position) {
|
| 3518 |
+
self.__options.side = self.__options.position;
|
| 3519 |
+
}
|
| 3520 |
+
|
| 3521 |
+
// options formatting
|
| 3522 |
+
|
| 3523 |
+
// format distance as a four-cell array if it ain't one yet and then make
|
| 3524 |
+
// it an object with top/bottom/left/right properties
|
| 3525 |
+
if (typeof self.__options.distance != 'object') {
|
| 3526 |
+
self.__options.distance = [self.__options.distance];
|
| 3527 |
+
}
|
| 3528 |
+
if (self.__options.distance.length < 4) {
|
| 3529 |
+
|
| 3530 |
+
if (self.__options.distance[1] === undefined) self.__options.distance[1] = self.__options.distance[0];
|
| 3531 |
+
if (self.__options.distance[2] === undefined) self.__options.distance[2] = self.__options.distance[0];
|
| 3532 |
+
if (self.__options.distance[3] === undefined) self.__options.distance[3] = self.__options.distance[1];
|
| 3533 |
+
|
| 3534 |
+
self.__options.distance = {
|
| 3535 |
+
top: self.__options.distance[0],
|
| 3536 |
+
right: self.__options.distance[1],
|
| 3537 |
+
bottom: self.__options.distance[2],
|
| 3538 |
+
left: self.__options.distance[3]
|
| 3539 |
+
};
|
| 3540 |
+
}
|
| 3541 |
+
|
| 3542 |
+
// let's transform:
|
| 3543 |
+
// 'top' into ['top', 'bottom', 'right', 'left']
|
| 3544 |
+
// 'right' into ['right', 'left', 'top', 'bottom']
|
| 3545 |
+
// 'bottom' into ['bottom', 'top', 'right', 'left']
|
| 3546 |
+
// 'left' into ['left', 'right', 'top', 'bottom']
|
| 3547 |
+
if (typeof self.__options.side == 'string') {
|
| 3548 |
+
|
| 3549 |
+
var opposites = {
|
| 3550 |
+
'top': 'bottom',
|
| 3551 |
+
'right': 'left',
|
| 3552 |
+
'bottom': 'top',
|
| 3553 |
+
'left': 'right'
|
| 3554 |
+
};
|
| 3555 |
+
|
| 3556 |
+
self.__options.side = [self.__options.side, opposites[self.__options.side]];
|
| 3557 |
+
|
| 3558 |
+
if (self.__options.side[0] == 'left' || self.__options.side[0] == 'right') {
|
| 3559 |
+
self.__options.side.push('top', 'bottom');
|
| 3560 |
+
}
|
| 3561 |
+
else {
|
| 3562 |
+
self.__options.side.push('right', 'left');
|
| 3563 |
+
}
|
| 3564 |
+
}
|
| 3565 |
+
|
| 3566 |
+
// misc
|
| 3567 |
+
// disable the arrow in IE6 unless the arrow option was explicitly set to true
|
| 3568 |
+
if ( $.tooltipster._env.IE === 6
|
| 3569 |
+
&& self.__options.arrow !== true
|
| 3570 |
+
) {
|
| 3571 |
+
self.__options.arrow = false;
|
| 3572 |
+
}
|
| 3573 |
+
},
|
| 3574 |
+
|
| 3575 |
+
/**
|
| 3576 |
+
* This method must compute and set the positioning properties of the
|
| 3577 |
+
* tooltip (left, top, width, height, etc.). It must also make sure the
|
| 3578 |
+
* tooltip is eventually appended to its parent (since the element may be
|
| 3579 |
+
* detached from the DOM at the moment the method is called).
|
| 3580 |
+
*
|
| 3581 |
+
* We'll evaluate positioning scenarios to find which side can contain the
|
| 3582 |
+
* tooltip in the best way. We'll consider things relatively to the window
|
| 3583 |
+
* (unless the user asks not to), then to the document (if need be, or if the
|
| 3584 |
+
* user explicitly requires the tests to run on the document). For each
|
| 3585 |
+
* scenario, measures are taken, allowing us to know how well the tooltip
|
| 3586 |
+
* is going to fit. After that, a sorting function will let us know what
|
| 3587 |
+
* the best scenario is (we also allow the user to choose his favorite
|
| 3588 |
+
* scenario by using an event).
|
| 3589 |
+
*
|
| 3590 |
+
* @param {object} helper An object that contains variables that plugin
|
| 3591 |
+
* creators may find useful (see below)
|
| 3592 |
+
* @param {object} helper.geo An object with many layout properties
|
| 3593 |
+
* about objects of interest (window, document, origin). This should help
|
| 3594 |
+
* plugin users compute the optimal position of the tooltip
|
| 3595 |
+
* @private
|
| 3596 |
+
*/
|
| 3597 |
+
__reposition: function(event, helper) {
|
| 3598 |
+
|
| 3599 |
+
var self = this,
|
| 3600 |
+
finalResult,
|
| 3601 |
+
// to know where to put the tooltip, we need to know on which point
|
| 3602 |
+
// of the x or y axis we should center it. That coordinate is the target
|
| 3603 |
+
targets = self.__targetFind(helper),
|
| 3604 |
+
testResults = [];
|
| 3605 |
+
|
| 3606 |
+
// make sure the tooltip is detached while we make tests on a clone
|
| 3607 |
+
self.__instance._$tooltip.detach();
|
| 3608 |
+
|
| 3609 |
+
// we could actually provide the original element to the Ruler and
|
| 3610 |
+
// not a clone, but it just feels right to keep it out of the
|
| 3611 |
+
// machinery.
|
| 3612 |
+
var $clone = self.__instance._$tooltip.clone(),
|
| 3613 |
+
// start position tests session
|
| 3614 |
+
ruler = $.tooltipster._getRuler($clone),
|
| 3615 |
+
satisfied = false,
|
| 3616 |
+
animation = self.__instance.option('animation');
|
| 3617 |
+
|
| 3618 |
+
// an animation class could contain properties that distort the size
|
| 3619 |
+
if (animation) {
|
| 3620 |
+
$clone.removeClass('tooltipster-'+ animation);
|
| 3621 |
+
}
|
| 3622 |
+
|
| 3623 |
+
// start evaluating scenarios
|
| 3624 |
+
$.each(['window', 'document'], function(i, container) {
|
| 3625 |
+
|
| 3626 |
+
var takeTest = null;
|
| 3627 |
+
|
| 3628 |
+
// let the user decide to keep on testing or not
|
| 3629 |
+
self.__instance._trigger({
|
| 3630 |
+
container: container,
|
| 3631 |
+
helper: helper,
|
| 3632 |
+
satisfied: satisfied,
|
| 3633 |
+
takeTest: function(bool) {
|
| 3634 |
+
takeTest = bool;
|
| 3635 |
+
},
|
| 3636 |
+
results: testResults,
|
| 3637 |
+
type: 'positionTest'
|
| 3638 |
+
});
|
| 3639 |
+
|
| 3640 |
+
if ( takeTest == true
|
| 3641 |
+
|| ( takeTest != false
|
| 3642 |
+
&& satisfied == false
|
| 3643 |
+
// skip the window scenarios if asked. If they are reintegrated by
|
| 3644 |
+
// the callback of the positionTest event, they will have to be
|
| 3645 |
+
// excluded using the callback of positionTested
|
| 3646 |
+
&& (container != 'window' || self.__options.viewportAware)
|
| 3647 |
+
)
|
| 3648 |
+
) {
|
| 3649 |
+
|
| 3650 |
+
// for each allowed side
|
| 3651 |
+
for (var i=0; i < self.__options.side.length; i++) {
|
| 3652 |
+
|
| 3653 |
+
var distance = {
|
| 3654 |
+
horizontal: 0,
|
| 3655 |
+
vertical: 0
|
| 3656 |
+
},
|
| 3657 |
+
side = self.__options.side[i];
|
| 3658 |
+
|
| 3659 |
+
if (side == 'top' || side == 'bottom') {
|
| 3660 |
+
distance.vertical = self.__options.distance[side];
|
| 3661 |
+
}
|
| 3662 |
+
else {
|
| 3663 |
+
distance.horizontal = self.__options.distance[side];
|
| 3664 |
+
}
|
| 3665 |
+
|
| 3666 |
+
// this may have an effect on the size of the tooltip if there are css
|
| 3667 |
+
// rules for the arrow or something else
|
| 3668 |
+
self.__sideChange($clone, side);
|
| 3669 |
+
|
| 3670 |
+
$.each(['natural', 'constrained'], function(i, mode) {
|
| 3671 |
+
|
| 3672 |
+
takeTest = null;
|
| 3673 |
+
|
| 3674 |
+
// emit an event on the instance
|
| 3675 |
+
self.__instance._trigger({
|
| 3676 |
+
container: container,
|
| 3677 |
+
event: event,
|
| 3678 |
+
helper: helper,
|
| 3679 |
+
mode: mode,
|
| 3680 |
+
results: testResults,
|
| 3681 |
+
satisfied: satisfied,
|
| 3682 |
+
side: side,
|
| 3683 |
+
takeTest: function(bool) {
|
| 3684 |
+
takeTest = bool;
|
| 3685 |
+
},
|
| 3686 |
+
type: 'positionTest'
|
| 3687 |
+
});
|
| 3688 |
+
|
| 3689 |
+
if ( takeTest == true
|
| 3690 |
+
|| ( takeTest != false
|
| 3691 |
+
&& satisfied == false
|
| 3692 |
+
)
|
| 3693 |
+
) {
|
| 3694 |
+
|
| 3695 |
+
var testResult = {
|
| 3696 |
+
container: container,
|
| 3697 |
+
// we let the distance as an object here, it can make things a little easier
|
| 3698 |
+
// during the user's calculations at positionTest/positionTested
|
| 3699 |
+
distance: distance,
|
| 3700 |
+
// whether the tooltip can fit in the size of the viewport (does not mean
|
| 3701 |
+
// that we'll be able to make it initially entirely visible, see 'whole')
|
| 3702 |
+
fits: null,
|
| 3703 |
+
mode: mode,
|
| 3704 |
+
outerSize: null,
|
| 3705 |
+
side: side,
|
| 3706 |
+
size: null,
|
| 3707 |
+
target: targets[side],
|
| 3708 |
+
// check if the origin has enough surface on screen for the tooltip to
|
| 3709 |
+
// aim at it without overflowing the viewport (this is due to the thickness
|
| 3710 |
+
// of the arrow represented by the minIntersection length).
|
| 3711 |
+
// If not, the tooltip will have to be partly or entirely off screen in
|
| 3712 |
+
// order to stay docked to the origin. This value will stay null when the
|
| 3713 |
+
// container is the document, as it is not relevant
|
| 3714 |
+
whole: null
|
| 3715 |
+
};
|
| 3716 |
+
|
| 3717 |
+
// get the size of the tooltip with or without size constraints
|
| 3718 |
+
var rulerConfigured = (mode == 'natural') ?
|
| 3719 |
+
ruler.free() :
|
| 3720 |
+
ruler.constrain(
|
| 3721 |
+
helper.geo.available[container][side].width - distance.horizontal,
|
| 3722 |
+
helper.geo.available[container][side].height - distance.vertical
|
| 3723 |
+
),
|
| 3724 |
+
rulerResults = rulerConfigured.measure();
|
| 3725 |
+
|
| 3726 |
+
testResult.size = rulerResults.size;
|
| 3727 |
+
testResult.outerSize = {
|
| 3728 |
+
height: rulerResults.size.height + distance.vertical,
|
| 3729 |
+
width: rulerResults.size.width + distance.horizontal
|
| 3730 |
+
};
|
| 3731 |
+
|
| 3732 |
+
if (mode == 'natural') {
|
| 3733 |
+
|
| 3734 |
+
if( helper.geo.available[container][side].width >= testResult.outerSize.width
|
| 3735 |
+
&& helper.geo.available[container][side].height >= testResult.outerSize.height
|
| 3736 |
+
) {
|
| 3737 |
+
testResult.fits = true;
|
| 3738 |
+
}
|
| 3739 |
+
else {
|
| 3740 |
+
testResult.fits = false;
|
| 3741 |
+
}
|
| 3742 |
+
}
|
| 3743 |
+
else {
|
| 3744 |
+
testResult.fits = rulerResults.fits;
|
| 3745 |
+
}
|
| 3746 |
+
|
| 3747 |
+
if (container == 'window') {
|
| 3748 |
+
|
| 3749 |
+
if (!testResult.fits) {
|
| 3750 |
+
testResult.whole = false;
|
| 3751 |
+
}
|
| 3752 |
+
else {
|
| 3753 |
+
if (side == 'top' || side == 'bottom') {
|
| 3754 |
+
|
| 3755 |
+
testResult.whole = (
|
| 3756 |
+
helper.geo.origin.windowOffset.right >= self.__options.minIntersection
|
| 3757 |
+
&& helper.geo.window.size.width - helper.geo.origin.windowOffset.left >= self.__options.minIntersection
|
| 3758 |
+
);
|
| 3759 |
+
}
|
| 3760 |
+
else {
|
| 3761 |
+
testResult.whole = (
|
| 3762 |
+
helper.geo.origin.windowOffset.bottom >= self.__options.minIntersection
|
| 3763 |
+
&& helper.geo.window.size.height - helper.geo.origin.windowOffset.top >= self.__options.minIntersection
|
| 3764 |
+
);
|
| 3765 |
+
}
|
| 3766 |
+
}
|
| 3767 |
+
}
|
| 3768 |
+
|
| 3769 |
+
testResults.push(testResult);
|
| 3770 |
+
|
| 3771 |
+
// we don't need to compute more positions if we have one fully on screen
|
| 3772 |
+
if (testResult.whole) {
|
| 3773 |
+
satisfied = true;
|
| 3774 |
+
}
|
| 3775 |
+
else {
|
| 3776 |
+
// don't run the constrained test unless the natural width was greater
|
| 3777 |
+
// than the available width, otherwise it's pointless as we know it
|
| 3778 |
+
// wouldn't fit either
|
| 3779 |
+
if ( testResult.mode == 'natural'
|
| 3780 |
+
&& ( testResult.fits
|
| 3781 |
+
|| testResult.size.width <= helper.geo.available[container][side].width
|
| 3782 |
+
)
|
| 3783 |
+
) {
|
| 3784 |
+
return false;
|
| 3785 |
+
}
|
| 3786 |
+
}
|
| 3787 |
+
}
|
| 3788 |
+
});
|
| 3789 |
+
}
|
| 3790 |
+
}
|
| 3791 |
+
});
|
| 3792 |
+
|
| 3793 |
+
// the user may eliminate the unwanted scenarios from testResults, but he's
|
| 3794 |
+
// not supposed to alter them at this point. functionPosition and the
|
| 3795 |
+
// position event serve that purpose.
|
| 3796 |
+
self.__instance._trigger({
|
| 3797 |
+
edit: function(r) {
|
| 3798 |
+
testResults = r;
|
| 3799 |
+
},
|
| 3800 |
+
event: event,
|
| 3801 |
+
helper: helper,
|
| 3802 |
+
results: testResults,
|
| 3803 |
+
type: 'positionTested'
|
| 3804 |
+
});
|
| 3805 |
+
|
| 3806 |
+
/**
|
| 3807 |
+
* Sort the scenarios to find the favorite one.
|
| 3808 |
+
*
|
| 3809 |
+
* The favorite scenario is when we can fully display the tooltip on screen,
|
| 3810 |
+
* even if it means that the middle of the tooltip is no longer centered on
|
| 3811 |
+
* the middle of the origin (when the origin is near the edge of the screen
|
| 3812 |
+
* or even partly off screen). We want the tooltip on the preferred side,
|
| 3813 |
+
* even if it means that we have to use a constrained size rather than a
|
| 3814 |
+
* natural one (as long as it fits). When the origin is off screen at the top
|
| 3815 |
+
* the tooltip will be positioned at the bottom (if allowed), if the origin
|
| 3816 |
+
* is off screen on the right, it will be positioned on the left, etc.
|
| 3817 |
+
* If there are no scenarios where the tooltip can fit on screen, or if the
|
| 3818 |
+
* user does not want the tooltip to fit on screen (viewportAware == false),
|
| 3819 |
+
* we fall back to the scenarios relative to the document.
|
| 3820 |
+
*
|
| 3821 |
+
* When the tooltip is bigger than the viewport in either dimension, we stop
|
| 3822 |
+
* looking at the window scenarios and consider the document scenarios only,
|
| 3823 |
+
* with the same logic to find on which side it would fit best.
|
| 3824 |
+
*
|
| 3825 |
+
* If the tooltip cannot fit the document on any side, we force it at the
|
| 3826 |
+
* bottom, so at least the user can scroll to see it.
|
| 3827 |
+
*/
|
| 3828 |
+
testResults.sort(function(a, b) {
|
| 3829 |
+
|
| 3830 |
+
// best if it's whole (the tooltip fits and adapts to the viewport)
|
| 3831 |
+
if (a.whole && !b.whole) {
|
| 3832 |
+
return -1;
|
| 3833 |
+
}
|
| 3834 |
+
else if (!a.whole && b.whole) {
|
| 3835 |
+
return 1;
|
| 3836 |
+
}
|
| 3837 |
+
else if (a.whole && b.whole) {
|
| 3838 |
+
|
| 3839 |
+
var ai = self.__options.side.indexOf(a.side),
|
| 3840 |
+
bi = self.__options.side.indexOf(b.side);
|
| 3841 |
+
|
| 3842 |
+
// use the user's sides fallback array
|
| 3843 |
+
if (ai < bi) {
|
| 3844 |
+
return -1;
|
| 3845 |
+
}
|
| 3846 |
+
else if (ai > bi) {
|
| 3847 |
+
return 1;
|
| 3848 |
+
}
|
| 3849 |
+
else {
|
| 3850 |
+
// will be used if the user forced the tests to continue
|
| 3851 |
+
return a.mode == 'natural' ? -1 : 1;
|
| 3852 |
+
}
|
| 3853 |
+
}
|
| 3854 |
+
else {
|
| 3855 |
+
|
| 3856 |
+
// better if it fits
|
| 3857 |
+
if (a.fits && !b.fits) {
|
| 3858 |
+
return -1;
|
| 3859 |
+
}
|
| 3860 |
+
else if (!a.fits && b.fits) {
|
| 3861 |
+
return 1;
|
| 3862 |
+
}
|
| 3863 |
+
else if (a.fits && b.fits) {
|
| 3864 |
+
|
| 3865 |
+
var ai = self.__options.side.indexOf(a.side),
|
| 3866 |
+
bi = self.__options.side.indexOf(b.side);
|
| 3867 |
+
|
| 3868 |
+
// use the user's sides fallback array
|
| 3869 |
+
if (ai < bi) {
|
| 3870 |
+
return -1;
|
| 3871 |
+
}
|
| 3872 |
+
else if (ai > bi) {
|
| 3873 |
+
return 1;
|
| 3874 |
+
}
|
| 3875 |
+
else {
|
| 3876 |
+
// will be used if the user forced the tests to continue
|
| 3877 |
+
return a.mode == 'natural' ? -1 : 1;
|
| 3878 |
+
}
|
| 3879 |
+
}
|
| 3880 |
+
else {
|
| 3881 |
+
|
| 3882 |
+
// if everything failed, this will give a preference to the case where
|
| 3883 |
+
// the tooltip overflows the document at the bottom
|
| 3884 |
+
if ( a.container == 'document'
|
| 3885 |
+
&& a.side == 'bottom'
|
| 3886 |
+
&& a.mode == 'natural'
|
| 3887 |
+
) {
|
| 3888 |
+
return -1;
|
| 3889 |
+
}
|
| 3890 |
+
else {
|
| 3891 |
+
return 1;
|
| 3892 |
+
}
|
| 3893 |
+
}
|
| 3894 |
+
}
|
| 3895 |
+
});
|
| 3896 |
+
|
| 3897 |
+
finalResult = testResults[0];
|
| 3898 |
+
|
| 3899 |
+
|
| 3900 |
+
// now let's find the coordinates of the tooltip relatively to the window
|
| 3901 |
+
finalResult.coord = {};
|
| 3902 |
+
|
| 3903 |
+
switch (finalResult.side) {
|
| 3904 |
+
|
| 3905 |
+
case 'left':
|
| 3906 |
+
case 'right':
|
| 3907 |
+
finalResult.coord.top = Math.floor(finalResult.target - finalResult.size.height / 2);
|
| 3908 |
+
break;
|
| 3909 |
+
|
| 3910 |
+
case 'bottom':
|
| 3911 |
+
case 'top':
|
| 3912 |
+
finalResult.coord.left = Math.floor(finalResult.target - finalResult.size.width / 2);
|
| 3913 |
+
break;
|
| 3914 |
+
}
|
| 3915 |
+
|
| 3916 |
+
switch (finalResult.side) {
|
| 3917 |
+
|
| 3918 |
+
case 'left':
|
| 3919 |
+
finalResult.coord.left = helper.geo.origin.windowOffset.left - finalResult.outerSize.width;
|
| 3920 |
+
break;
|
| 3921 |
+
|
| 3922 |
+
case 'right':
|
| 3923 |
+
finalResult.coord.left = helper.geo.origin.windowOffset.right + finalResult.distance.horizontal;
|
| 3924 |
+
break;
|
| 3925 |
+
|
| 3926 |
+
case 'top':
|
| 3927 |
+
finalResult.coord.top = helper.geo.origin.windowOffset.top - finalResult.outerSize.height;
|
| 3928 |
+
break;
|
| 3929 |
+
|
| 3930 |
+
case 'bottom':
|
| 3931 |
+
finalResult.coord.top = helper.geo.origin.windowOffset.bottom + finalResult.distance.vertical;
|
| 3932 |
+
break;
|
| 3933 |
+
}
|
| 3934 |
+
|
| 3935 |
+
// if the tooltip can potentially be contained within the viewport dimensions
|
| 3936 |
+
// and that we are asked to make it fit on screen
|
| 3937 |
+
if (finalResult.container == 'window') {
|
| 3938 |
+
|
| 3939 |
+
// if the tooltip overflows the viewport, we'll move it accordingly (then it will
|
| 3940 |
+
// not be centered on the middle of the origin anymore). We only move horizontally
|
| 3941 |
+
// for top and bottom tooltips and vice versa.
|
| 3942 |
+
if (finalResult.side == 'top' || finalResult.side == 'bottom') {
|
| 3943 |
+
|
| 3944 |
+
// if there is an overflow on the left
|
| 3945 |
+
if (finalResult.coord.left < 0) {
|
| 3946 |
+
|
| 3947 |
+
// prevent the overflow unless the origin itself gets off screen (minus the
|
| 3948 |
+
// margin needed to keep the arrow pointing at the target)
|
| 3949 |
+
if (helper.geo.origin.windowOffset.right - this.__options.minIntersection >= 0) {
|
| 3950 |
+
finalResult.coord.left = 0;
|
| 3951 |
+
}
|
| 3952 |
+
else {
|
| 3953 |
+
finalResult.coord.left = helper.geo.origin.windowOffset.right - this.__options.minIntersection - 1;
|
| 3954 |
+
}
|
| 3955 |
+
}
|
| 3956 |
+
// or an overflow on the right
|
| 3957 |
+
else if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {
|
| 3958 |
+
|
| 3959 |
+
if (helper.geo.origin.windowOffset.left + this.__options.minIntersection <= helper.geo.window.size.width) {
|
| 3960 |
+
finalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;
|
| 3961 |
+
}
|
| 3962 |
+
else {
|
| 3963 |
+
finalResult.coord.left = helper.geo.origin.windowOffset.left + this.__options.minIntersection + 1 - finalResult.size.width;
|
| 3964 |
+
}
|
| 3965 |
+
}
|
| 3966 |
+
}
|
| 3967 |
+
else {
|
| 3968 |
+
|
| 3969 |
+
// overflow at the top
|
| 3970 |
+
if (finalResult.coord.top < 0) {
|
| 3971 |
+
|
| 3972 |
+
if (helper.geo.origin.windowOffset.bottom - this.__options.minIntersection >= 0) {
|
| 3973 |
+
finalResult.coord.top = 0;
|
| 3974 |
+
}
|
| 3975 |
+
else {
|
| 3976 |
+
finalResult.coord.top = helper.geo.origin.windowOffset.bottom - this.__options.minIntersection - 1;
|
| 3977 |
+
}
|
| 3978 |
+
}
|
| 3979 |
+
// or at the bottom
|
| 3980 |
+
else if (finalResult.coord.top > helper.geo.window.size.height - finalResult.size.height) {
|
| 3981 |
+
|
| 3982 |
+
if (helper.geo.origin.windowOffset.top + this.__options.minIntersection <= helper.geo.window.size.height) {
|
| 3983 |
+
finalResult.coord.top = helper.geo.window.size.height - finalResult.size.height;
|
| 3984 |
+
}
|
| 3985 |
+
else {
|
| 3986 |
+
finalResult.coord.top = helper.geo.origin.windowOffset.top + this.__options.minIntersection + 1 - finalResult.size.height;
|
| 3987 |
+
}
|
| 3988 |
+
}
|
| 3989 |
+
}
|
| 3990 |
+
}
|
| 3991 |
+
else {
|
| 3992 |
+
|
| 3993 |
+
// there might be overflow here too but it's easier to handle. If there has
|
| 3994 |
+
// to be an overflow, we'll make sure it's on the right side of the screen
|
| 3995 |
+
// (because the browser will extend the document size if there is an overflow
|
| 3996 |
+
// on the right, but not on the left). The sort function above has already
|
| 3997 |
+
// made sure that a bottom document overflow is preferred to a top overflow,
|
| 3998 |
+
// so we don't have to care about it.
|
| 3999 |
+
|
| 4000 |
+
// if there is an overflow on the right
|
| 4001 |
+
if (finalResult.coord.left > helper.geo.window.size.width - finalResult.size.width) {
|
| 4002 |
+
|
| 4003 |
+
// this may actually create on overflow on the left but we'll fix it in a sec
|
| 4004 |
+
finalResult.coord.left = helper.geo.window.size.width - finalResult.size.width;
|
| 4005 |
+
}
|
| 4006 |
+
|
| 4007 |
+
// if there is an overflow on the left
|
| 4008 |
+
if (finalResult.coord.left < 0) {
|
| 4009 |
+
|
| 4010 |
+
// don't care if it overflows the right after that, we made our best
|
| 4011 |
+
finalResult.coord.left = 0;
|
| 4012 |
+
}
|
| 4013 |
+
}
|
| 4014 |
+
|
| 4015 |
+
|
| 4016 |
+
// submit the positioning proposal to the user function which may choose to change
|
| 4017 |
+
// the side, size and/or the coordinates
|
| 4018 |
+
|
| 4019 |
+
// first, set the rules that corresponds to the proposed side: it may change
|
| 4020 |
+
// the size of the tooltip, and the custom functionPosition may want to detect the
|
| 4021 |
+
// size of something before making a decision. So let's make things easier for the
|
| 4022 |
+
// implementor
|
| 4023 |
+
self.__sideChange($clone, finalResult.side);
|
| 4024 |
+
|
| 4025 |
+
// add some variables to the helper
|
| 4026 |
+
helper.tooltipClone = $clone[0];
|
| 4027 |
+
helper.tooltipParent = self.__instance.option('parent').parent[0];
|
| 4028 |
+
// move informative values to the helper
|
| 4029 |
+
helper.mode = finalResult.mode;
|
| 4030 |
+
helper.whole = finalResult.whole;
|
| 4031 |
+
// add some variables to the helper for the functionPosition callback (these
|
| 4032 |
+
// will also be added to the event fired by self.__instance._trigger but that's
|
| 4033 |
+
// ok, we're just being consistent)
|
| 4034 |
+
helper.origin = self.__instance._$origin[0];
|
| 4035 |
+
helper.tooltip = self.__instance._$tooltip[0];
|
| 4036 |
+
|
| 4037 |
+
// leave only the actionable values in there for functionPosition
|
| 4038 |
+
delete finalResult.container;
|
| 4039 |
+
delete finalResult.fits;
|
| 4040 |
+
delete finalResult.mode;
|
| 4041 |
+
delete finalResult.outerSize;
|
| 4042 |
+
delete finalResult.whole;
|
| 4043 |
+
|
| 4044 |
+
// keep only the distance on the relevant side, for clarity
|
| 4045 |
+
finalResult.distance = finalResult.distance.horizontal || finalResult.distance.vertical;
|
| 4046 |
+
|
| 4047 |
+
// beginners may not be comfortable with the concept of editing the object
|
| 4048 |
+
// passed by reference, so we provide an edit function and pass a clone
|
| 4049 |
+
var finalResultClone = $.extend(true, {}, finalResult);
|
| 4050 |
+
|
| 4051 |
+
// emit an event on the instance
|
| 4052 |
+
self.__instance._trigger({
|
| 4053 |
+
edit: function(result) {
|
| 4054 |
+
finalResult = result;
|
| 4055 |
+
},
|
| 4056 |
+
event: event,
|
| 4057 |
+
helper: helper,
|
| 4058 |
+
position: finalResultClone,
|
| 4059 |
+
type: 'position'
|
| 4060 |
+
});
|
| 4061 |
+
|
| 4062 |
+
if (self.__options.functionPosition) {
|
| 4063 |
+
|
| 4064 |
+
var result = self.__options.functionPosition.call(self, self.__instance, helper, finalResultClone);
|
| 4065 |
+
|
| 4066 |
+
if (result) finalResult = result;
|
| 4067 |
+
}
|
| 4068 |
+
|
| 4069 |
+
// end the positioning tests session (the user might have had a
|
| 4070 |
+
// use for it during the position event, now it's over)
|
| 4071 |
+
ruler.destroy();
|
| 4072 |
+
|
| 4073 |
+
// compute the position of the target relatively to the tooltip root
|
| 4074 |
+
// element so we can place the arrow and make the needed adjustments
|
| 4075 |
+
var arrowCoord,
|
| 4076 |
+
maxVal;
|
| 4077 |
+
|
| 4078 |
+
if (finalResult.side == 'top' || finalResult.side == 'bottom') {
|
| 4079 |
+
|
| 4080 |
+
arrowCoord = {
|
| 4081 |
+
prop: 'left',
|
| 4082 |
+
val: finalResult.target - finalResult.coord.left
|
| 4083 |
+
};
|
| 4084 |
+
maxVal = finalResult.size.width - this.__options.minIntersection;
|
| 4085 |
+
}
|
| 4086 |
+
else {
|
| 4087 |
+
|
| 4088 |
+
arrowCoord = {
|
| 4089 |
+
prop: 'top',
|
| 4090 |
+
val: finalResult.target - finalResult.coord.top
|
| 4091 |
+
};
|
| 4092 |
+
maxVal = finalResult.size.height - this.__options.minIntersection;
|
| 4093 |
+
}
|
| 4094 |
+
|
| 4095 |
+
// cannot lie beyond the boundaries of the tooltip, minus the
|
| 4096 |
+
// arrow margin
|
| 4097 |
+
if (arrowCoord.val < this.__options.minIntersection) {
|
| 4098 |
+
arrowCoord.val = this.__options.minIntersection;
|
| 4099 |
+
}
|
| 4100 |
+
else if (arrowCoord.val > maxVal) {
|
| 4101 |
+
arrowCoord.val = maxVal;
|
| 4102 |
+
}
|
| 4103 |
+
|
| 4104 |
+
var originParentOffset;
|
| 4105 |
+
|
| 4106 |
+
// let's convert the window-relative coordinates into coordinates relative to the
|
| 4107 |
+
// future positioned parent that the tooltip will be appended to
|
| 4108 |
+
if (helper.geo.origin.fixedLineage) {
|
| 4109 |
+
|
| 4110 |
+
// same as windowOffset when the position is fixed
|
| 4111 |
+
originParentOffset = helper.geo.origin.windowOffset;
|
| 4112 |
+
}
|
| 4113 |
+
else {
|
| 4114 |
+
|
| 4115 |
+
// this assumes that the parent of the tooltip is located at
|
| 4116 |
+
// (0, 0) in the document, typically like when the parent is
|
| 4117 |
+
// <body>.
|
| 4118 |
+
// If we ever allow other types of parent, .tooltipster-ruler
|
| 4119 |
+
// will have to be appended to the parent to inherit css style
|
| 4120 |
+
// values that affect the display of the text and such.
|
| 4121 |
+
originParentOffset = {
|
| 4122 |
+
left: helper.geo.origin.windowOffset.left + helper.geo.window.scroll.left,
|
| 4123 |
+
top: helper.geo.origin.windowOffset.top + helper.geo.window.scroll.top
|
| 4124 |
+
};
|
| 4125 |
+
}
|
| 4126 |
+
|
| 4127 |
+
finalResult.coord = {
|
| 4128 |
+
left: originParentOffset.left + (finalResult.coord.left - helper.geo.origin.windowOffset.left),
|
| 4129 |
+
top: originParentOffset.top + (finalResult.coord.top - helper.geo.origin.windowOffset.top)
|
| 4130 |
+
};
|
| 4131 |
+
|
| 4132 |
+
// set position values on the original tooltip element
|
| 4133 |
+
|
| 4134 |
+
self.__sideChange(self.__instance._$tooltip, finalResult.side);
|
| 4135 |
+
|
| 4136 |
+
if (helper.geo.origin.fixedLineage) {
|
| 4137 |
+
self.__instance._$tooltip
|
| 4138 |
+
.css('position', 'fixed');
|
| 4139 |
+
}
|
| 4140 |
+
else {
|
| 4141 |
+
// CSS default
|
| 4142 |
+
self.__instance._$tooltip
|
| 4143 |
+
.css('position', '');
|
| 4144 |
+
}
|
| 4145 |
+
|
| 4146 |
+
self.__instance._$tooltip
|
| 4147 |
+
.css({
|
| 4148 |
+
left: finalResult.coord.left,
|
| 4149 |
+
top: finalResult.coord.top,
|
| 4150 |
+
// we need to set a size even if the tooltip is in its natural size
|
| 4151 |
+
// because when the tooltip is positioned beyond the width of the body
|
| 4152 |
+
// (which is by default the width of the window; it will happen when
|
| 4153 |
+
// you scroll the window horizontally to get to the origin), its text
|
| 4154 |
+
// content will otherwise break lines at each word to keep up with the
|
| 4155 |
+
// body overflow strategy.
|
| 4156 |
+
height: finalResult.size.height,
|
| 4157 |
+
width: finalResult.size.width
|
| 4158 |
+
})
|
| 4159 |
+
.find('.tooltipster-arrow')
|
| 4160 |
+
.css({
|
| 4161 |
+
'left': '',
|
| 4162 |
+
'top': ''
|
| 4163 |
+
})
|
| 4164 |
+
.css(arrowCoord.prop, arrowCoord.val);
|
| 4165 |
+
|
| 4166 |
+
// append the tooltip HTML element to its parent
|
| 4167 |
+
self.__instance._$tooltip.appendTo(self.__instance.option('parent'));
|
| 4168 |
+
|
| 4169 |
+
self.__instance._trigger({
|
| 4170 |
+
type: 'repositioned',
|
| 4171 |
+
event: event,
|
| 4172 |
+
position: finalResult
|
| 4173 |
+
});
|
| 4174 |
+
},
|
| 4175 |
+
|
| 4176 |
+
/**
|
| 4177 |
+
* Make whatever modifications are needed when the side is changed. This has
|
| 4178 |
+
* been made an independant method for easy inheritance in custom plugins based
|
| 4179 |
+
* on this default plugin.
|
| 4180 |
+
*
|
| 4181 |
+
* @param {object} $obj
|
| 4182 |
+
* @param {string} side
|
| 4183 |
+
* @private
|
| 4184 |
+
*/
|
| 4185 |
+
__sideChange: function($obj, side) {
|
| 4186 |
+
|
| 4187 |
+
$obj
|
| 4188 |
+
.removeClass('tooltipster-bottom')
|
| 4189 |
+
.removeClass('tooltipster-left')
|
| 4190 |
+
.removeClass('tooltipster-right')
|
| 4191 |
+
.removeClass('tooltipster-top')
|
| 4192 |
+
.addClass('tooltipster-'+ side);
|
| 4193 |
+
},
|
| 4194 |
+
|
| 4195 |
+
/**
|
| 4196 |
+
* Returns the target that the tooltip should aim at for a given side.
|
| 4197 |
+
* The calculated value is a distance from the edge of the window
|
| 4198 |
+
* (left edge for top/bottom sides, top edge for left/right side). The
|
| 4199 |
+
* tooltip will be centered on that position and the arrow will be
|
| 4200 |
+
* positioned there (as much as possible).
|
| 4201 |
+
*
|
| 4202 |
+
* @param {object} helper
|
| 4203 |
+
* @return {integer}
|
| 4204 |
+
* @private
|
| 4205 |
+
*/
|
| 4206 |
+
__targetFind: function(helper) {
|
| 4207 |
+
|
| 4208 |
+
var target = {},
|
| 4209 |
+
rects = this.__instance._$origin[0].getClientRects();
|
| 4210 |
+
|
| 4211 |
+
// these lines fix a Chrome bug (issue #491)
|
| 4212 |
+
if (rects.length > 1) {
|
| 4213 |
+
var opacity = this.__instance._$origin.css('opacity');
|
| 4214 |
+
if(opacity == 1) {
|
| 4215 |
+
this.__instance._$origin.css('opacity', 0.99);
|
| 4216 |
+
rects = this.__instance._$origin[0].getClientRects();
|
| 4217 |
+
this.__instance._$origin.css('opacity', 1);
|
| 4218 |
+
}
|
| 4219 |
+
}
|
| 4220 |
+
|
| 4221 |
+
// by default, the target will be the middle of the origin
|
| 4222 |
+
if (rects.length < 2) {
|
| 4223 |
+
|
| 4224 |
+
target.top = Math.floor(helper.geo.origin.windowOffset.left + (helper.geo.origin.size.width / 2));
|
| 4225 |
+
target.bottom = target.top;
|
| 4226 |
+
|
| 4227 |
+
target.left = Math.floor(helper.geo.origin.windowOffset.top + (helper.geo.origin.size.height / 2));
|
| 4228 |
+
target.right = target.left;
|
| 4229 |
+
}
|
| 4230 |
+
// if multiple client rects exist, the element may be text split
|
| 4231 |
+
// up into multiple lines and the middle of the origin may not be
|
| 4232 |
+
// best option anymore. We need to choose the best target client rect
|
| 4233 |
+
else {
|
| 4234 |
+
|
| 4235 |
+
// top: the first
|
| 4236 |
+
var targetRect = rects[0];
|
| 4237 |
+
target.top = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
|
| 4238 |
+
|
| 4239 |
+
// right: the middle line, rounded down in case there is an even
|
| 4240 |
+
// number of lines (looks more centered => check out the
|
| 4241 |
+
// demo with 4 split lines)
|
| 4242 |
+
if (rects.length > 2) {
|
| 4243 |
+
targetRect = rects[Math.ceil(rects.length / 2) - 1];
|
| 4244 |
+
}
|
| 4245 |
+
else {
|
| 4246 |
+
targetRect = rects[0];
|
| 4247 |
+
}
|
| 4248 |
+
target.right = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
|
| 4249 |
+
|
| 4250 |
+
// bottom: the last
|
| 4251 |
+
targetRect = rects[rects.length - 1];
|
| 4252 |
+
target.bottom = Math.floor(targetRect.left + (targetRect.right - targetRect.left) / 2);
|
| 4253 |
+
|
| 4254 |
+
// left: the middle line, rounded up
|
| 4255 |
+
if (rects.length > 2) {
|
| 4256 |
+
targetRect = rects[Math.ceil((rects.length + 1) / 2) - 1];
|
| 4257 |
+
}
|
| 4258 |
+
else {
|
| 4259 |
+
targetRect = rects[rects.length - 1];
|
| 4260 |
+
}
|
| 4261 |
+
|
| 4262 |
+
target.left = Math.floor(targetRect.top + (targetRect.bottom - targetRect.top) / 2);
|
| 4263 |
+
}
|
| 4264 |
+
|
| 4265 |
+
return target;
|
| 4266 |
+
}
|
| 4267 |
+
}
|
| 4268 |
+
});
|
| 4269 |
+
|
| 4270 |
+
/* a build task will add "return $;" here */
|
| 4271 |
+
return $;
|
| 4272 |
+
|
| 4273 |
+
}));
|
common/vendor/tooltipster/tooltipster.bundle.min.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
|
| 1 |
+
.tooltipster-fall,.tooltipster-grow.tooltipster-show{-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-base{display:flex;pointer-events:none;position:absolute}.tooltipster-box{flex:1 1 auto}.tooltipster-content{box-sizing:border-box;max-height:100%;max-width:100%;overflow:auto}.tooltipster-ruler{bottom:0;left:0;overflow:hidden;position:fixed;right:0;top:0;visibility:hidden}.tooltipster-fade{opacity:0;-webkit-transition-property:opacity;-moz-transition-property:opacity;-o-transition-property:opacity;-ms-transition-property:opacity;transition-property:opacity}.tooltipster-fade.tooltipster-show{opacity:1}.tooltipster-grow{-webkit-transform:scale(0,0);-moz-transform:scale(0,0);-o-transform:scale(0,0);-ms-transform:scale(0,0);transform:scale(0,0);-webkit-transition-property:-webkit-transform;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform;-webkit-backface-visibility:hidden}.tooltipster-grow.tooltipster-show{-webkit-transform:scale(1,1);-moz-transform:scale(1,1);-o-transform:scale(1,1);-ms-transform:scale(1,1);transform:scale(1,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-swing{opacity:0;-webkit-transform:rotateZ(4deg);-moz-transform:rotateZ(4deg);-o-transform:rotateZ(4deg);-ms-transform:rotateZ(4deg);transform:rotateZ(4deg);-webkit-transition-property:-webkit-transform,opacity;-moz-transition-property:-moz-transform;-o-transition-property:-o-transform;-ms-transition-property:-ms-transform;transition-property:transform}.tooltipster-swing.tooltipster-show{opacity:1;-webkit-transform:rotateZ(0);-moz-transform:rotateZ(0);-o-transform:rotateZ(0);-ms-transform:rotateZ(0);transform:rotateZ(0);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,1);-webkit-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-moz-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-ms-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);-o-transition-timing-function:cubic-bezier(.23,.635,.495,2.4);transition-timing-function:cubic-bezier(.23,.635,.495,2.4)}.tooltipster-fall{-webkit-transition-property:top;-moz-transition-property:top;-o-transition-property:top;-ms-transition-property:top;transition-property:top;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-fall.tooltipster-initial{top:0!important}.tooltipster-fall.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;top:0!important;opacity:0}.tooltipster-slide{-webkit-transition-property:left;-moz-transition-property:left;-o-transition-property:left;-ms-transition-property:left;transition-property:left;-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1);-webkit-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-moz-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-ms-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);-o-transition-timing-function:cubic-bezier(.175,.885,.32,1.15);transition-timing-function:cubic-bezier(.175,.885,.32,1.15)}.tooltipster-slide.tooltipster-initial{left:-40px!important}.tooltipster-slide.tooltipster-dying{-webkit-transition-property:all;-moz-transition-property:all;-o-transition-property:all;-ms-transition-property:all;transition-property:all;left:0!important;opacity:0}@keyframes tooltipster-fading{0%{opacity:0}100%{opacity:1}}.tooltipster-update-fade{animation:tooltipster-fading .4s}@keyframes tooltipster-rotating{25%{transform:rotate(-2deg)}75%{transform:rotate(2deg)}100%{transform:rotate(0)}}.tooltipster-update-rotate{animation:tooltipster-rotating .6s}@keyframes tooltipster-scaling{50%{transform:scale(1.1)}100%{transform:scale(1)}}.tooltipster-update-scale{animation:tooltipster-scaling .6s}.tooltipster-sidetip .tooltipster-box{background:#565656;border:2px solid #000;border-radius:4px}.tooltipster-sidetip.tooltipster-bottom .tooltipster-box{margin-top:8px}.tooltipster-sidetip.tooltipster-left .tooltipster-box{margin-right:8px}.tooltipster-sidetip.tooltipster-right .tooltipster-box{margin-left:8px}.tooltipster-sidetip.tooltipster-top .tooltipster-box{margin-bottom:8px}.tooltipster-sidetip .tooltipster-content{color:#fff;line-height:18px;padding:6px 14px}.tooltipster-sidetip .tooltipster-arrow{overflow:hidden;position:absolute}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow{height:10px;margin-left:-10px;top:0;width:20px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow{height:20px;margin-top:-10px;right:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow{height:20px;margin-top:-10px;left:0;top:0;width:10px}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow{bottom:0;height:10px;margin-left:-10px;width:20px}.tooltipster-sidetip .tooltipster-arrow-background,.tooltipster-sidetip .tooltipster-arrow-border{height:0;position:absolute;width:0}.tooltipster-sidetip .tooltipster-arrow-background{border:10px solid transparent}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-background{border-bottom-color:#565656;left:0;top:3px}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-background{border-left-color:#565656;left:-3px;top:0}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-background{border-right-color:#565656;left:3px;top:0}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-background{border-top-color:#565656;left:0;top:-3px}.tooltipster-sidetip .tooltipster-arrow-border{border:10px solid transparent;left:0;top:0}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-border{border-bottom-color:#000}.tooltipster-sidetip.tooltipster-left .tooltipster-arrow-border{border-left-color:#000}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-border{border-right-color:#000}.tooltipster-sidetip.tooltipster-top .tooltipster-arrow-border{border-top-color:#000}.tooltipster-sidetip .tooltipster-arrow-uncropped{position:relative}.tooltipster-sidetip.tooltipster-bottom .tooltipster-arrow-uncropped{top:-10px}.tooltipster-sidetip.tooltipster-right .tooltipster-arrow-uncropped{left:-10px}
|
common/vendor/tooltipster/tooltipster.bundle.min.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
|
|
|
|
| 1 |
+
/*! tooltipster v4.2.6 */!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){function b(a){this.$container,this.constraints=null,this.__$tooltip,this.__init(a)}function c(b,c){var d=!0;return a.each(b,function(a,e){return void 0===c[a]||b[a]!==c[a]?(d=!1,!1):void 0}),d}function d(b){var c=b.attr("id"),d=c?h.window.document.getElementById(c):null;return d?d===b[0]:a.contains(h.window.document.body,b[0])}function e(){if(!g)return!1;var a=g.document.body||g.document.documentElement,b=a.style,c="transition",d=["Moz","Webkit","Khtml","O","ms"];if("string"==typeof b[c])return!0;c=c.charAt(0).toUpperCase()+c.substr(1);for(var e=0;e<d.length;e++)if("string"==typeof b[d[e]+c])return!0;return!1}var f={animation:"fade",animationDuration:350,content:null,contentAsHTML:!1,contentCloning:!1,debug:!0,delay:300,delayTouch:[300,500],functionInit:null,functionBefore:null,functionReady:null,functionAfter:null,functionFormat:null,IEmin:6,interactive:!1,multiple:!1,parent:null,plugins:["sideTip"],repositionOnScroll:!1,restoration:"none",selfDestruction:!0,theme:[],timer:0,trackerInterval:500,trackOrigin:!1,trackTooltip:!1,trigger:"hover",triggerClose:{click:!1,mouseleave:!1,originClick:!1,scroll:!1,tap:!1,touchleave:!1},triggerOpen:{click:!1,mouseenter:!1,tap:!1,touchstart:!1},updateAnimation:"rotate",zIndex:9999999},g="undefined"!=typeof window?window:null,h={hasTouchCapability:!(!g||!("ontouchstart"in g||g.DocumentTouch&&g.document instanceof g.DocumentTouch||g.navigator.maxTouchPoints)),hasTransitions:e(),IE:!1,semVer:"4.2.6",window:g},i=function(){this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__instancesLatestArr=[],this.__plugins={},this._env=h};i.prototype={__bridge:function(b,c,d){if(!c[d]){var e=function(){};e.prototype=b;var g=new e;g.__init&&g.__init(c),a.each(b,function(a,b){0!=a.indexOf("__")&&(c[a]?f.debug&&console.log("The "+a+" method of the "+d+" plugin conflicts with another plugin or native methods"):(c[a]=function(){return g[a].apply(g,Array.prototype.slice.apply(arguments))},c[a].bridged=g))}),c[d]=g}return this},__setWindow:function(a){return h.window=a,this},_getRuler:function(a){return new b(a)},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_plugin:function(b){var c=this;if("string"==typeof b){var d=b,e=null;return d.indexOf(".")>0?e=c.__plugins[d]:a.each(c.__plugins,function(a,b){return b.name.substring(b.name.length-d.length-1)=="."+d?(e=b,!1):void 0}),e}if(b.name.indexOf(".")<0)throw new Error("Plugins must be namespaced");return c.__plugins[b.name]=b,b.core&&c.__bridge(b.core,c,b.name),this},_trigger:function(){var a=Array.prototype.slice.apply(arguments);return"string"==typeof a[0]&&(a[0]={type:a[0]}),this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,a),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,a),this},instances:function(b){var c=[],d=b||".tooltipstered";return a(d).each(function(){var b=a(this),d=b.data("tooltipster-ns");d&&a.each(d,function(a,d){c.push(b.data(d))})}),c},instancesLatest:function(){return this.__instancesLatestArr},off:function(){return this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},origins:function(b){var c=b?b+" ":"";return a(c+".tooltipstered").toArray()},setDefaults:function(b){return a.extend(f,b),this},triggerHandler:function(){return this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.tooltipster=new i,a.Tooltipster=function(b,c){this.__callbacks={close:[],open:[]},this.__closingTime,this.__Content,this.__contentBcr,this.__destroyed=!1,this.__$emitterPrivate=a({}),this.__$emitterPublic=a({}),this.__enabled=!0,this.__garbageCollector,this.__Geometry,this.__lastPosition,this.__namespace="tooltipster-"+Math.round(1e6*Math.random()),this.__options,this.__$originParents,this.__pointerIsOverOrigin=!1,this.__previousThemes=[],this.__state="closed",this.__timeouts={close:[],open:null},this.__touchEvents=[],this.__tracker=null,this._$origin,this._$tooltip,this.__init(b,c)},a.Tooltipster.prototype={__init:function(b,c){var d=this;if(d._$origin=a(b),d.__options=a.extend(!0,{},f,c),d.__optionsFormat(),!h.IE||h.IE>=d.__options.IEmin){var e=null;if(void 0===d._$origin.data("tooltipster-initialTitle")&&(e=d._$origin.attr("title"),void 0===e&&(e=null),d._$origin.data("tooltipster-initialTitle",e)),null!==d.__options.content)d.__contentSet(d.__options.content);else{var g,i=d._$origin.attr("data-tooltip-content");i&&(g=a(i)),g&&g[0]?d.__contentSet(g.first()):d.__contentSet(e)}d._$origin.removeAttr("title").addClass("tooltipstered"),d.__prepareOrigin(),d.__prepareGC(),a.each(d.__options.plugins,function(a,b){d._plug(b)}),h.hasTouchCapability&&a(h.window.document.body).on("touchmove."+d.__namespace+"-triggerOpen",function(a){d._touchRecordEvent(a)}),d._on("created",function(){d.__prepareTooltip()})._on("repositioned",function(a){d.__lastPosition=a.position})}else d.__options.disabled=!0},__contentInsert:function(){var a=this,b=a._$tooltip.find(".tooltipster-content"),c=a.__Content,d=function(a){c=a};return a._trigger({type:"format",content:a.__Content,format:d}),a.__options.functionFormat&&(c=a.__options.functionFormat.call(a,a,{origin:a._$origin[0]},a.__Content)),"string"!=typeof c||a.__options.contentAsHTML?b.empty().append(c):b.text(c),a},__contentSet:function(b){return b instanceof a&&this.__options.contentCloning&&(b=b.clone(!0)),this.__Content=b,this._trigger({type:"updated",content:b}),this},__destroyError:function(){throw new Error("This tooltip has been destroyed and cannot execute your method call.")},__geometry:function(){var b=this,c=b._$origin,d=b._$origin.is("area");if(d){var e=b._$origin.parent().attr("name");c=a('img[usemap="#'+e+'"]')}var f=c[0].getBoundingClientRect(),g=a(h.window.document),i=a(h.window),j=c,k={available:{document:null,window:null},document:{size:{height:g.height(),width:g.width()}},window:{scroll:{left:h.window.scrollX||h.window.document.documentElement.scrollLeft,top:h.window.scrollY||h.window.document.documentElement.scrollTop},size:{height:i.height(),width:i.width()}},origin:{fixedLineage:!1,offset:{},size:{height:f.bottom-f.top,width:f.right-f.left},usemapImage:d?c[0]:null,windowOffset:{bottom:f.bottom,left:f.left,right:f.right,top:f.top}}};if(d){var l=b._$origin.attr("shape"),m=b._$origin.attr("coords");if(m&&(m=m.split(","),a.map(m,function(a,b){m[b]=parseInt(a)})),"default"!=l)switch(l){case"circle":var n=m[0],o=m[1],p=m[2],q=o-p,r=n-p;k.origin.size.height=2*p,k.origin.size.width=k.origin.size.height,k.origin.windowOffset.left+=r,k.origin.windowOffset.top+=q;break;case"rect":var s=m[0],t=m[1],u=m[2],v=m[3];k.origin.size.height=v-t,k.origin.size.width=u-s,k.origin.windowOffset.left+=s,k.origin.windowOffset.top+=t;break;case"poly":for(var w=0,x=0,y=0,z=0,A="even",B=0;B<m.length;B++){var C=m[B];"even"==A?(C>y&&(y=C,0===B&&(w=y)),w>C&&(w=C),A="odd"):(C>z&&(z=C,1==B&&(x=z)),x>C&&(x=C),A="even")}k.origin.size.height=z-x,k.origin.size.width=y-w,k.origin.windowOffset.left+=w,k.origin.windowOffset.top+=x}}var D=function(a){k.origin.size.height=a.height,k.origin.windowOffset.left=a.left,k.origin.windowOffset.top=a.top,k.origin.size.width=a.width};for(b._trigger({type:"geometry",edit:D,geometry:{height:k.origin.size.height,left:k.origin.windowOffset.left,top:k.origin.windowOffset.top,width:k.origin.size.width}}),k.origin.windowOffset.right=k.origin.windowOffset.left+k.origin.size.width,k.origin.windowOffset.bottom=k.origin.windowOffset.top+k.origin.size.height,k.origin.offset.left=k.origin.windowOffset.left+k.window.scroll.left,k.origin.offset.top=k.origin.windowOffset.top+k.window.scroll.top,k.origin.offset.bottom=k.origin.offset.top+k.origin.size.height,k.origin.offset.right=k.origin.offset.left+k.origin.size.width,k.available.document={bottom:{height:k.document.size.height-k.origin.offset.bottom,width:k.document.size.width},left:{height:k.document.size.height,width:k.origin.offset.left},right:{height:k.document.size.height,width:k.document.size.width-k.origin.offset.right},top:{height:k.origin.offset.top,width:k.document.size.width}},k.available.window={bottom:{height:Math.max(k.window.size.height-Math.max(k.origin.windowOffset.bottom,0),0),width:k.window.size.width},left:{height:k.window.size.height,width:Math.max(k.origin.windowOffset.left,0)},right:{height:k.window.size.height,width:Math.max(k.window.size.width-Math.max(k.origin.windowOffset.right,0),0)},top:{height:Math.max(k.origin.windowOffset.top,0),width:k.window.size.width}};"html"!=j[0].tagName.toLowerCase();){if("fixed"==j.css("position")){k.origin.fixedLineage=!0;break}j=j.parent()}return k},__optionsFormat:function(){return"number"==typeof this.__options.animationDuration&&(this.__options.animationDuration=[this.__options.animationDuration,this.__options.animationDuration]),"number"==typeof this.__options.delay&&(this.__options.delay=[this.__options.delay,this.__options.delay]),"number"==typeof this.__options.delayTouch&&(this.__options.delayTouch=[this.__options.delayTouch,this.__options.delayTouch]),"string"==typeof this.__options.theme&&(this.__options.theme=[this.__options.theme]),null===this.__options.parent?this.__options.parent=a(h.window.document.body):"string"==typeof this.__options.parent&&(this.__options.parent=a(this.__options.parent)),"hover"==this.__options.trigger?(this.__options.triggerOpen={mouseenter:!0,touchstart:!0},this.__options.triggerClose={mouseleave:!0,originClick:!0,touchleave:!0}):"click"==this.__options.trigger&&(this.__options.triggerOpen={click:!0,tap:!0},this.__options.triggerClose={click:!0,tap:!0}),this._trigger("options"),this},__prepareGC:function(){var b=this;return b.__options.selfDestruction?b.__garbageCollector=setInterval(function(){var c=(new Date).getTime();b.__touchEvents=a.grep(b.__touchEvents,function(a,b){return c-a.time>6e4}),d(b._$origin)||b.close(function(){b.destroy()})},2e4):clearInterval(b.__garbageCollector),b},__prepareOrigin:function(){var a=this;if(a._$origin.off("."+a.__namespace+"-triggerOpen"),h.hasTouchCapability&&a._$origin.on("touchstart."+a.__namespace+"-triggerOpen touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen",function(b){a._touchRecordEvent(b)}),a.__options.triggerOpen.click||a.__options.triggerOpen.tap&&h.hasTouchCapability){var b="";a.__options.triggerOpen.click&&(b+="click."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.tap&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&a._open(b)})}if(a.__options.triggerOpen.mouseenter||a.__options.triggerOpen.touchstart&&h.hasTouchCapability){var b="";a.__options.triggerOpen.mouseenter&&(b+="mouseenter."+a.__namespace+"-triggerOpen "),a.__options.triggerOpen.touchstart&&h.hasTouchCapability&&(b+="touchstart."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){!a._touchIsTouchEvent(b)&&a._touchIsEmulatedEvent(b)||(a.__pointerIsOverOrigin=!0,a._openShortly(b))})}if(a.__options.triggerClose.mouseleave||a.__options.triggerClose.touchleave&&h.hasTouchCapability){var b="";a.__options.triggerClose.mouseleave&&(b+="mouseleave."+a.__namespace+"-triggerOpen "),a.__options.triggerClose.touchleave&&h.hasTouchCapability&&(b+="touchend."+a.__namespace+"-triggerOpen touchcancel."+a.__namespace+"-triggerOpen"),a._$origin.on(b,function(b){a._touchIsMeaningfulEvent(b)&&(a.__pointerIsOverOrigin=!1)})}return a},__prepareTooltip:function(){var b=this,c=b.__options.interactive?"auto":"";return b._$tooltip.attr("id",b.__namespace).css({"pointer-events":c,zIndex:b.__options.zIndex}),a.each(b.__previousThemes,function(a,c){b._$tooltip.removeClass(c)}),a.each(b.__options.theme,function(a,c){b._$tooltip.addClass(c)}),b.__previousThemes=a.merge([],b.__options.theme),b},__scrollHandler:function(b){var c=this;if(c.__options.triggerClose.scroll)c._close(b);else if(d(c._$origin)&&d(c._$tooltip)){var e=null;if(b.target===h.window.document)c.__Geometry.origin.fixedLineage||c.__options.repositionOnScroll&&c.reposition(b);else{e=c.__geometry();var f=!1;if("fixed"!=c._$origin.css("position")&&c.__$originParents.each(function(b,c){var d=a(c),g=d.css("overflow-x"),h=d.css("overflow-y");if("visible"!=g||"visible"!=h){var i=c.getBoundingClientRect();if("visible"!=g&&(e.origin.windowOffset.left<i.left||e.origin.windowOffset.right>i.right))return f=!0,!1;if("visible"!=h&&(e.origin.windowOffset.top<i.top||e.origin.windowOffset.bottom>i.bottom))return f=!0,!1}return"fixed"==d.css("position")?!1:void 0}),f)c._$tooltip.css("visibility","hidden");else if(c._$tooltip.css("visibility","visible"),c.__options.repositionOnScroll)c.reposition(b);else{var g=e.origin.offset.left-c.__Geometry.origin.offset.left,i=e.origin.offset.top-c.__Geometry.origin.offset.top;c._$tooltip.css({left:c.__lastPosition.coord.left+g,top:c.__lastPosition.coord.top+i})}}c._trigger({type:"scroll",event:b,geo:e})}return c},__stateSet:function(a){return this.__state=a,this._trigger({type:"state",state:a}),this},__timeoutsClear:function(){return clearTimeout(this.__timeouts.open),this.__timeouts.open=null,a.each(this.__timeouts.close,function(a,b){clearTimeout(b)}),this.__timeouts.close=[],this},__trackerStart:function(){var a=this,b=a._$tooltip.find(".tooltipster-content");return a.__options.trackTooltip&&(a.__contentBcr=b[0].getBoundingClientRect()),a.__tracker=setInterval(function(){if(d(a._$origin)&&d(a._$tooltip)){if(a.__options.trackOrigin){var e=a.__geometry(),f=!1;c(e.origin.size,a.__Geometry.origin.size)&&(a.__Geometry.origin.fixedLineage?c(e.origin.windowOffset,a.__Geometry.origin.windowOffset)&&(f=!0):c(e.origin.offset,a.__Geometry.origin.offset)&&(f=!0)),f||(a.__options.triggerClose.mouseleave?a._close():a.reposition())}if(a.__options.trackTooltip){var g=b[0].getBoundingClientRect();g.height===a.__contentBcr.height&&g.width===a.__contentBcr.width||(a.reposition(),a.__contentBcr=g)}}else a._close()},a.__options.trackerInterval),a},_close:function(b,c,d){var e=this,f=!0;if(e._trigger({type:"close",event:b,stop:function(){f=!1}}),f||d){c&&e.__callbacks.close.push(c),e.__callbacks.open=[],e.__timeoutsClear();var g=function(){a.each(e.__callbacks.close,function(a,c){c.call(e,e,{event:b,origin:e._$origin[0]})}),e.__callbacks.close=[]};if("closed"!=e.__state){var i=!0,j=new Date,k=j.getTime(),l=k+e.__options.animationDuration[1];if("disappearing"==e.__state&&l>e.__closingTime&&e.__options.animationDuration[1]>0&&(i=!1),i){e.__closingTime=l,"disappearing"!=e.__state&&e.__stateSet("disappearing");var m=function(){clearInterval(e.__tracker),e._trigger({type:"closing",event:b}),e._$tooltip.off("."+e.__namespace+"-triggerClose").removeClass("tooltipster-dying"),a(h.window).off("."+e.__namespace+"-triggerClose"),e.__$originParents.each(function(b,c){a(c).off("scroll."+e.__namespace+"-triggerClose")}),e.__$originParents=null,a(h.window.document.body).off("."+e.__namespace+"-triggerClose"),e._$origin.off("."+e.__namespace+"-triggerClose"),e._off("dismissable"),e.__stateSet("closed"),e._trigger({type:"after",event:b}),e.__options.functionAfter&&e.__options.functionAfter.call(e,e,{event:b,origin:e._$origin[0]}),g()};h.hasTransitions?(e._$tooltip.css({"-moz-animation-duration":e.__options.animationDuration[1]+"ms","-ms-animation-duration":e.__options.animationDuration[1]+"ms","-o-animation-duration":e.__options.animationDuration[1]+"ms","-webkit-animation-duration":e.__options.animationDuration[1]+"ms","animation-duration":e.__options.animationDuration[1]+"ms","transition-duration":e.__options.animationDuration[1]+"ms"}),e._$tooltip.clearQueue().removeClass("tooltipster-show").addClass("tooltipster-dying"),e.__options.animationDuration[1]>0&&e._$tooltip.delay(e.__options.animationDuration[1]),e._$tooltip.queue(m)):e._$tooltip.stop().fadeOut(e.__options.animationDuration[1],m)}}else g()}return e},_off:function(){return this.__$emitterPrivate.off.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_on:function(){return this.__$emitterPrivate.on.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_one:function(){return this.__$emitterPrivate.one.apply(this.__$emitterPrivate,Array.prototype.slice.apply(arguments)),this},_open:function(b,c){var e=this;if(!e.__destroying&&d(e._$origin)&&e.__enabled){var f=!0;if("closed"==e.__state&&(e._trigger({type:"before",event:b,stop:function(){f=!1}}),f&&e.__options.functionBefore&&(f=e.__options.functionBefore.call(e,e,{event:b,origin:e._$origin[0]}))),f!==!1&&null!==e.__Content){c&&e.__callbacks.open.push(c),e.__callbacks.close=[],e.__timeoutsClear();var g,i=function(){"stable"!=e.__state&&e.__stateSet("stable"),a.each(e.__callbacks.open,function(a,b){b.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}),e.__callbacks.open=[]};if("closed"!==e.__state)g=0,"disappearing"===e.__state?(e.__stateSet("appearing"),h.hasTransitions?(e._$tooltip.clearQueue().removeClass("tooltipster-dying").addClass("tooltipster-show"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i)):e._$tooltip.stop().fadeIn(i)):"stable"==e.__state&&i();else{if(e.__stateSet("appearing"),g=e.__options.animationDuration[0],e.__contentInsert(),e.reposition(b,!0),h.hasTransitions?(e._$tooltip.addClass("tooltipster-"+e.__options.animation).addClass("tooltipster-initial").css({"-moz-animation-duration":e.__options.animationDuration[0]+"ms","-ms-animation-duration":e.__options.animationDuration[0]+"ms","-o-animation-duration":e.__options.animationDuration[0]+"ms","-webkit-animation-duration":e.__options.animationDuration[0]+"ms","animation-duration":e.__options.animationDuration[0]+"ms","transition-duration":e.__options.animationDuration[0]+"ms"}),setTimeout(function(){"closed"!=e.__state&&(e._$tooltip.addClass("tooltipster-show").removeClass("tooltipster-initial"),e.__options.animationDuration[0]>0&&e._$tooltip.delay(e.__options.animationDuration[0]),e._$tooltip.queue(i))},0)):e._$tooltip.css("display","none").fadeIn(e.__options.animationDuration[0],i),e.__trackerStart(),a(h.window).on("resize."+e.__namespace+"-triggerClose",function(b){var c=a(document.activeElement);(c.is("input")||c.is("textarea"))&&a.contains(e._$tooltip[0],c[0])||e.reposition(b)}).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)}),e.__$originParents=e._$origin.parents(),e.__$originParents.each(function(b,c){a(c).on("scroll."+e.__namespace+"-triggerClose",function(a){e.__scrollHandler(a)})}),e.__options.triggerClose.mouseleave||e.__options.triggerClose.touchleave&&h.hasTouchCapability){e._on("dismissable",function(a){a.dismissable?a.delay?(m=setTimeout(function(){e._close(a.event)},a.delay),e.__timeouts.close.push(m)):e._close(a):clearTimeout(m)});var j=e._$origin,k="",l="",m=null;e.__options.interactive&&(j=j.add(e._$tooltip)),e.__options.triggerClose.mouseleave&&(k+="mouseenter."+e.__namespace+"-triggerClose ",l+="mouseleave."+e.__namespace+"-triggerClose "),e.__options.triggerClose.touchleave&&h.hasTouchCapability&&(k+="touchstart."+e.__namespace+"-triggerClose",l+="touchend."+e.__namespace+"-triggerClose touchcancel."+e.__namespace+"-triggerClose"),j.on(l,function(a){if(e._touchIsTouchEvent(a)||!e._touchIsEmulatedEvent(a)){var b="mouseleave"==a.type?e.__options.delay:e.__options.delayTouch;e._trigger({delay:b[1],dismissable:!0,event:a,type:"dismissable"})}}).on(k,function(a){!e._touchIsTouchEvent(a)&&e._touchIsEmulatedEvent(a)||e._trigger({dismissable:!1,event:a,type:"dismissable"})})}e.__options.triggerClose.originClick&&e._$origin.on("click."+e.__namespace+"-triggerClose",function(a){e._touchIsTouchEvent(a)||e._touchIsEmulatedEvent(a)||e._close(a)}),(e.__options.triggerClose.click||e.__options.triggerClose.tap&&h.hasTouchCapability)&&setTimeout(function(){if("closed"!=e.__state){var b="",c=a(h.window.document.body);e.__options.triggerClose.click&&(b+="click."+e.__namespace+"-triggerClose "),e.__options.triggerClose.tap&&h.hasTouchCapability&&(b+="touchend."+e.__namespace+"-triggerClose"),c.on(b,function(b){e._touchIsMeaningfulEvent(b)&&(e._touchRecordEvent(b),e.__options.interactive&&a.contains(e._$tooltip[0],b.target)||e._close(b))}),e.__options.triggerClose.tap&&h.hasTouchCapability&&c.on("touchstart."+e.__namespace+"-triggerClose",function(a){e._touchRecordEvent(a)})}},0),e._trigger("ready"),e.__options.functionReady&&e.__options.functionReady.call(e,e,{origin:e._$origin[0],tooltip:e._$tooltip[0]})}if(e.__options.timer>0){var m=setTimeout(function(){e._close()},e.__options.timer+g);e.__timeouts.close.push(m)}}}return e},_openShortly:function(a){var b=this,c=!0;if("stable"!=b.__state&&"appearing"!=b.__state&&!b.__timeouts.open&&(b._trigger({type:"start",event:a,stop:function(){c=!1}}),c)){var d=0==a.type.indexOf("touch")?b.__options.delayTouch:b.__options.delay;d[0]?b.__timeouts.open=setTimeout(function(){b.__timeouts.open=null,b.__pointerIsOverOrigin&&b._touchIsMeaningfulEvent(a)?(b._trigger("startend"),b._open(a)):b._trigger("startcancel")},d[0]):(b._trigger("startend"),b._open(a))}return b},_optionsExtract:function(b,c){var d=this,e=a.extend(!0,{},c),f=d.__options[b];return f||(f={},a.each(c,function(a,b){var c=d.__options[a];void 0!==c&&(f[a]=c)})),a.each(e,function(b,c){void 0!==f[b]&&("object"!=typeof c||c instanceof Array||null==c||"object"!=typeof f[b]||f[b]instanceof Array||null==f[b]?e[b]=f[b]:a.extend(e[b],f[b]))}),e},_plug:function(b){var c=a.tooltipster._plugin(b);if(!c)throw new Error('The "'+b+'" plugin is not defined');return c.instance&&a.tooltipster.__bridge(c.instance,this,c.name),this},_touchIsEmulatedEvent:function(a){for(var b=!1,c=(new Date).getTime(),d=this.__touchEvents.length-1;d>=0;d--){var e=this.__touchEvents[d];if(!(c-e.time<500))break;e.target===a.target&&(b=!0)}return b},_touchIsMeaningfulEvent:function(a){return this._touchIsTouchEvent(a)&&!this._touchSwiped(a.target)||!this._touchIsTouchEvent(a)&&!this._touchIsEmulatedEvent(a)},_touchIsTouchEvent:function(a){return 0==a.type.indexOf("touch")},_touchRecordEvent:function(a){return this._touchIsTouchEvent(a)&&(a.time=(new Date).getTime(),this.__touchEvents.push(a)),this},_touchSwiped:function(a){for(var b=!1,c=this.__touchEvents.length-1;c>=0;c--){var d=this.__touchEvents[c];if("touchmove"==d.type){b=!0;break}if("touchstart"==d.type&&a===d.target)break}return b},_trigger:function(){var b=Array.prototype.slice.apply(arguments);return"string"==typeof b[0]&&(b[0]={type:b[0]}),b[0].instance=this,b[0].origin=this._$origin?this._$origin[0]:null,b[0].tooltip=this._$tooltip?this._$tooltip[0]:null,this.__$emitterPrivate.trigger.apply(this.__$emitterPrivate,b),a.tooltipster._trigger.apply(a.tooltipster,b),this.__$emitterPublic.trigger.apply(this.__$emitterPublic,b),this},_unplug:function(b){var c=this;if(c[b]){var d=a.tooltipster._plugin(b);d.instance&&a.each(d.instance,function(a,d){c[a]&&c[a].bridged===c[b]&&delete c[a]}),c[b].__destroy&&c[b].__destroy(),delete c[b]}return c},close:function(a){return this.__destroyed?this.__destroyError():this._close(null,a),this},content:function(a){var b=this;if(void 0===a)return b.__Content;if(b.__destroyed)b.__destroyError();else if(b.__contentSet(a),null!==b.__Content){if("closed"!==b.__state&&(b.__contentInsert(),b.reposition(),b.__options.updateAnimation))if(h.hasTransitions){var c=b.__options.updateAnimation;b._$tooltip.addClass("tooltipster-update-"+c),setTimeout(function(){"closed"!=b.__state&&b._$tooltip.removeClass("tooltipster-update-"+c)},1e3)}else b._$tooltip.fadeTo(200,.5,function(){"closed"!=b.__state&&b._$tooltip.fadeTo(200,1)})}else b._close();return b},destroy:function(){var b=this;if(b.__destroyed)b.__destroyError();else{"closed"!=b.__state?b.option("animationDuration",0)._close(null,null,!0):b.__timeoutsClear(),b._trigger("destroy"),b.__destroyed=!0,b._$origin.removeData(b.__namespace).off("."+b.__namespace+"-triggerOpen"),a(h.window.document.body).off("."+b.__namespace+"-triggerOpen");var c=b._$origin.data("tooltipster-ns");if(c)if(1===c.length){var d=null;"previous"==b.__options.restoration?d=b._$origin.data("tooltipster-initialTitle"):"current"==b.__options.restoration&&(d="string"==typeof b.__Content?b.__Content:a("<div></div>").append(b.__Content).html()),d&&b._$origin.attr("title",d),b._$origin.removeClass("tooltipstered"),b._$origin.removeData("tooltipster-ns").removeData("tooltipster-initialTitle")}else c=a.grep(c,function(a,c){return a!==b.__namespace}),b._$origin.data("tooltipster-ns",c);b._trigger("destroyed"),b._off(),b.off(),b.__Content=null,b.__$emitterPrivate=null,b.__$emitterPublic=null,b.__options.parent=null,b._$origin=null,b._$tooltip=null,a.tooltipster.__instancesLatestArr=a.grep(a.tooltipster.__instancesLatestArr,function(a,c){return b!==a}),clearInterval(b.__garbageCollector)}return b},disable:function(){return this.__destroyed?(this.__destroyError(),this):(this._close(),this.__enabled=!1,this)},elementOrigin:function(){return this.__destroyed?void this.__destroyError():this._$origin[0]},elementTooltip:function(){return this._$tooltip?this._$tooltip[0]:null},enable:function(){return this.__enabled=!0,this},hide:function(a){return this.close(a)},instance:function(){return this},off:function(){return this.__destroyed||this.__$emitterPublic.off.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},on:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.on.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},one:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.one.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this},open:function(a){return this.__destroyed?this.__destroyError():this._open(null,a),this},option:function(b,c){return void 0===c?this.__options[b]:(this.__destroyed?this.__destroyError():(this.__options[b]=c,this.__optionsFormat(),a.inArray(b,["trigger","triggerClose","triggerOpen"])>=0&&this.__prepareOrigin(),"selfDestruction"===b&&this.__prepareGC()),this)},reposition:function(a,b){var c=this;return c.__destroyed?c.__destroyError():"closed"!=c.__state&&d(c._$origin)&&(b||d(c._$tooltip))&&(b||c._$tooltip.detach(),c.__Geometry=c.__geometry(),c._trigger({type:"reposition",event:a,helper:{geo:c.__Geometry}})),c},show:function(a){return this.open(a)},status:function(){return{destroyed:this.__destroyed,enabled:this.__enabled,open:"closed"!==this.__state,state:this.__state}},triggerHandler:function(){return this.__destroyed?this.__destroyError():this.__$emitterPublic.triggerHandler.apply(this.__$emitterPublic,Array.prototype.slice.apply(arguments)),this}},a.fn.tooltipster=function(){var b=Array.prototype.slice.apply(arguments),c="You are using a single HTML element as content for several tooltips. You probably want to set the contentCloning option to TRUE.";if(0===this.length)return this;if("string"==typeof b[0]){var d="#*$~&";return this.each(function(){var e=a(this).data("tooltipster-ns"),f=e?a(this).data(e[0]):null;if(!f)throw new Error("You called Tooltipster's \""+b[0]+'" method on an uninitialized element');if("function"!=typeof f[b[0]])throw new Error('Unknown method "'+b[0]+'"');this.length>1&&"content"==b[0]&&(b[1]instanceof a||"object"==typeof b[1]&&null!=b[1]&&b[1].tagName)&&!f.__options.contentCloning&&f.__options.debug&&console.log(c);var g=f[b[0]](b[1],b[2]);return g!==f||"instance"===b[0]?(d=g,!1):void 0}),"#*$~&"!==d?d:this}a.tooltipster.__instancesLatestArr=[];var e=b[0]&&void 0!==b[0].multiple,g=e&&b[0].multiple||!e&&f.multiple,h=b[0]&&void 0!==b[0].content,i=h&&b[0].content||!h&&f.content,j=b[0]&&void 0!==b[0].contentCloning,k=j&&b[0].contentCloning||!j&&f.contentCloning,l=b[0]&&void 0!==b[0].debug,m=l&&b[0].debug||!l&&f.debug;return this.length>1&&(i instanceof a||"object"==typeof i&&null!=i&&i.tagName)&&!k&&m&&console.log(c),this.each(function(){var c=!1,d=a(this),e=d.data("tooltipster-ns"),f=null;e?g?c=!0:m&&(console.log("Tooltipster: one or more tooltips are already attached to the element below. Ignoring."),console.log(this)):c=!0,c&&(f=new a.Tooltipster(this,b[0]),e||(e=[]),e.push(f.__namespace),d.data("tooltipster-ns",e),d.data(f.__namespace,f),f.__options.functionInit&&f.__options.functionInit.call(f,f,{origin:this}),f._trigger("init")),a.tooltipster.__instancesLatestArr.push(f)}),this},b.prototype={__init:function(b){this.__$tooltip=b,this.__$tooltip.css({left:0,overflow:"hidden",position:"absolute",top:0}).find(".tooltipster-content").css("overflow","auto"),this.$container=a('<div class="tooltipster-ruler"></div>').append(this.__$tooltip).appendTo(h.window.document.body)},__forceRedraw:function(){var a=this.__$tooltip.parent();this.__$tooltip.detach(),this.__$tooltip.appendTo(a)},constrain:function(a,b){return this.constraints={width:a,height:b},this.__$tooltip.css({display:"block",height:"",overflow:"auto",width:a}),this},destroy:function(){this.__$tooltip.detach().find(".tooltipster-content").css({display:"",overflow:""}),this.$container.remove()},free:function(){return this.constraints=null,this.__$tooltip.css({display:"",height:"",overflow:"visible",width:""}),this},measure:function(){this.__forceRedraw();var a=this.__$tooltip[0].getBoundingClientRect(),b={size:{height:a.height||a.bottom-a.top,width:a.width||a.right-a.left}};if(this.constraints){var c=this.__$tooltip.find(".tooltipster-content"),d=this.__$tooltip.outerHeight(),e=c[0].getBoundingClientRect(),f={height:d<=this.constraints.height,width:a.width<=this.constraints.width&&e.width>=c[0].scrollWidth-1};b.fits=f.height&&f.width}return h.IE&&h.IE<=11&&b.size.width!==h.window.document.documentElement.clientWidth&&(b.size.width=Math.ceil(b.size.width)+1),b}};var j=navigator.userAgent.toLowerCase();-1!=j.indexOf("msie")?h.IE=parseInt(j.split("msie")[1]):-1!==j.toLowerCase().indexOf("trident")&&-1!==j.indexOf(" rv:11")?h.IE=11:-1!=j.toLowerCase().indexOf("edge/")&&(h.IE=parseInt(j.toLowerCase().split("edge/")[1]));var k="tooltipster.sideTip";return a.tooltipster._plugin({name:k,instance:{__defaults:function(){return{arrow:!0,distance:6,functionPosition:null,maxWidth:null,minIntersection:16,minWidth:0,position:null,side:"top",viewportAware:!0}},__init:function(a){var b=this;b.__instance=a,b.__namespace="tooltipster-sideTip-"+Math.round(1e6*Math.random()),b.__previousState="closed",b.__options,b.__optionsFormat(),b.__instance._on("state."+b.__namespace,function(a){"closed"==a.state?b.__close():"appearing"==a.state&&"closed"==b.__previousState&&b.__create(),b.__previousState=a.state}),b.__instance._on("options."+b.__namespace,function(){b.__optionsFormat()}),b.__instance._on("reposition."+b.__namespace,function(a){b.__reposition(a.event,a.helper)})},__close:function(){this.__instance.content()instanceof a&&this.__instance.content().detach(),this.__instance._$tooltip.remove(),this.__instance._$tooltip=null},__create:function(){var b=a('<div class="tooltipster-base tooltipster-sidetip"><div class="tooltipster-box"><div class="tooltipster-content"></div></div><div class="tooltipster-arrow"><div class="tooltipster-arrow-uncropped"><div class="tooltipster-arrow-border"></div><div class="tooltipster-arrow-background"></div></div></div></div>');this.__options.arrow||b.find(".tooltipster-box").css("margin",0).end().find(".tooltipster-arrow").hide(),this.__options.minWidth&&b.css("min-width",this.__options.minWidth+"px"),this.__options.maxWidth&&b.css("max-width",this.__options.maxWidth+"px"),
|
| 2 |
+
this.__instance._$tooltip=b,this.__instance._trigger("created")},__destroy:function(){this.__instance._off("."+self.__namespace)},__optionsFormat:function(){var b=this;if(b.__options=b.__instance._optionsExtract(k,b.__defaults()),b.__options.position&&(b.__options.side=b.__options.position),"object"!=typeof b.__options.distance&&(b.__options.distance=[b.__options.distance]),b.__options.distance.length<4&&(void 0===b.__options.distance[1]&&(b.__options.distance[1]=b.__options.distance[0]),void 0===b.__options.distance[2]&&(b.__options.distance[2]=b.__options.distance[0]),void 0===b.__options.distance[3]&&(b.__options.distance[3]=b.__options.distance[1]),b.__options.distance={top:b.__options.distance[0],right:b.__options.distance[1],bottom:b.__options.distance[2],left:b.__options.distance[3]}),"string"==typeof b.__options.side){var c={top:"bottom",right:"left",bottom:"top",left:"right"};b.__options.side=[b.__options.side,c[b.__options.side]],"left"==b.__options.side[0]||"right"==b.__options.side[0]?b.__options.side.push("top","bottom"):b.__options.side.push("right","left")}6===a.tooltipster._env.IE&&b.__options.arrow!==!0&&(b.__options.arrow=!1)},__reposition:function(b,c){var d,e=this,f=e.__targetFind(c),g=[];e.__instance._$tooltip.detach();var h=e.__instance._$tooltip.clone(),i=a.tooltipster._getRuler(h),j=!1,k=e.__instance.option("animation");switch(k&&h.removeClass("tooltipster-"+k),a.each(["window","document"],function(d,k){var l=null;if(e.__instance._trigger({container:k,helper:c,satisfied:j,takeTest:function(a){l=a},results:g,type:"positionTest"}),1==l||0!=l&&0==j&&("window"!=k||e.__options.viewportAware))for(var d=0;d<e.__options.side.length;d++){var m={horizontal:0,vertical:0},n=e.__options.side[d];"top"==n||"bottom"==n?m.vertical=e.__options.distance[n]:m.horizontal=e.__options.distance[n],e.__sideChange(h,n),a.each(["natural","constrained"],function(a,d){if(l=null,e.__instance._trigger({container:k,event:b,helper:c,mode:d,results:g,satisfied:j,side:n,takeTest:function(a){l=a},type:"positionTest"}),1==l||0!=l&&0==j){var h={container:k,distance:m,fits:null,mode:d,outerSize:null,side:n,size:null,target:f[n],whole:null},o="natural"==d?i.free():i.constrain(c.geo.available[k][n].width-m.horizontal,c.geo.available[k][n].height-m.vertical),p=o.measure();if(h.size=p.size,h.outerSize={height:p.size.height+m.vertical,width:p.size.width+m.horizontal},"natural"==d?c.geo.available[k][n].width>=h.outerSize.width&&c.geo.available[k][n].height>=h.outerSize.height?h.fits=!0:h.fits=!1:h.fits=p.fits,"window"==k&&(h.fits?"top"==n||"bottom"==n?h.whole=c.geo.origin.windowOffset.right>=e.__options.minIntersection&&c.geo.window.size.width-c.geo.origin.windowOffset.left>=e.__options.minIntersection:h.whole=c.geo.origin.windowOffset.bottom>=e.__options.minIntersection&&c.geo.window.size.height-c.geo.origin.windowOffset.top>=e.__options.minIntersection:h.whole=!1),g.push(h),h.whole)j=!0;else if("natural"==h.mode&&(h.fits||h.size.width<=c.geo.available[k][n].width))return!1}})}}),e.__instance._trigger({edit:function(a){g=a},event:b,helper:c,results:g,type:"positionTested"}),g.sort(function(a,b){if(a.whole&&!b.whole)return-1;if(!a.whole&&b.whole)return 1;if(a.whole&&b.whole){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}if(a.fits&&!b.fits)return-1;if(!a.fits&&b.fits)return 1;if(a.fits&&b.fits){var c=e.__options.side.indexOf(a.side),d=e.__options.side.indexOf(b.side);return d>c?-1:c>d?1:"natural"==a.mode?-1:1}return"document"==a.container&&"bottom"==a.side&&"natural"==a.mode?-1:1}),d=g[0],d.coord={},d.side){case"left":case"right":d.coord.top=Math.floor(d.target-d.size.height/2);break;case"bottom":case"top":d.coord.left=Math.floor(d.target-d.size.width/2)}switch(d.side){case"left":d.coord.left=c.geo.origin.windowOffset.left-d.outerSize.width;break;case"right":d.coord.left=c.geo.origin.windowOffset.right+d.distance.horizontal;break;case"top":d.coord.top=c.geo.origin.windowOffset.top-d.outerSize.height;break;case"bottom":d.coord.top=c.geo.origin.windowOffset.bottom+d.distance.vertical}"window"==d.container?"top"==d.side||"bottom"==d.side?d.coord.left<0?c.geo.origin.windowOffset.right-this.__options.minIntersection>=0?d.coord.left=0:d.coord.left=c.geo.origin.windowOffset.right-this.__options.minIntersection-1:d.coord.left>c.geo.window.size.width-d.size.width&&(c.geo.origin.windowOffset.left+this.__options.minIntersection<=c.geo.window.size.width?d.coord.left=c.geo.window.size.width-d.size.width:d.coord.left=c.geo.origin.windowOffset.left+this.__options.minIntersection+1-d.size.width):d.coord.top<0?c.geo.origin.windowOffset.bottom-this.__options.minIntersection>=0?d.coord.top=0:d.coord.top=c.geo.origin.windowOffset.bottom-this.__options.minIntersection-1:d.coord.top>c.geo.window.size.height-d.size.height&&(c.geo.origin.windowOffset.top+this.__options.minIntersection<=c.geo.window.size.height?d.coord.top=c.geo.window.size.height-d.size.height:d.coord.top=c.geo.origin.windowOffset.top+this.__options.minIntersection+1-d.size.height):(d.coord.left>c.geo.window.size.width-d.size.width&&(d.coord.left=c.geo.window.size.width-d.size.width),d.coord.left<0&&(d.coord.left=0)),e.__sideChange(h,d.side),c.tooltipClone=h[0],c.tooltipParent=e.__instance.option("parent").parent[0],c.mode=d.mode,c.whole=d.whole,c.origin=e.__instance._$origin[0],c.tooltip=e.__instance._$tooltip[0],delete d.container,delete d.fits,delete d.mode,delete d.outerSize,delete d.whole,d.distance=d.distance.horizontal||d.distance.vertical;var l=a.extend(!0,{},d);if(e.__instance._trigger({edit:function(a){d=a},event:b,helper:c,position:l,type:"position"}),e.__options.functionPosition){var m=e.__options.functionPosition.call(e,e.__instance,c,l);m&&(d=m)}i.destroy();var n,o;"top"==d.side||"bottom"==d.side?(n={prop:"left",val:d.target-d.coord.left},o=d.size.width-this.__options.minIntersection):(n={prop:"top",val:d.target-d.coord.top},o=d.size.height-this.__options.minIntersection),n.val<this.__options.minIntersection?n.val=this.__options.minIntersection:n.val>o&&(n.val=o);var p;p=c.geo.origin.fixedLineage?c.geo.origin.windowOffset:{left:c.geo.origin.windowOffset.left+c.geo.window.scroll.left,top:c.geo.origin.windowOffset.top+c.geo.window.scroll.top},d.coord={left:p.left+(d.coord.left-c.geo.origin.windowOffset.left),top:p.top+(d.coord.top-c.geo.origin.windowOffset.top)},e.__sideChange(e.__instance._$tooltip,d.side),c.geo.origin.fixedLineage?e.__instance._$tooltip.css("position","fixed"):e.__instance._$tooltip.css("position",""),e.__instance._$tooltip.css({left:d.coord.left,top:d.coord.top,height:d.size.height,width:d.size.width}).find(".tooltipster-arrow").css({left:"",top:""}).css(n.prop,n.val),e.__instance._$tooltip.appendTo(e.__instance.option("parent")),e.__instance._trigger({type:"repositioned",event:b,position:d})},__sideChange:function(a,b){a.removeClass("tooltipster-bottom").removeCla
|
