Version Description
Download this release
Release Info
Developer | ModernTribe |
Plugin | The Events Calendar |
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
|