diff options
Diffstat (limited to 'vendor')
20 files changed, 2040 insertions, 0 deletions
diff --git a/vendor/commerceguys/intl/resources/currency/en-CA.json b/vendor/commerceguys/intl/resources/currency/en-CA.json new file mode 100644 index 000000000..2a4df8ddd --- /dev/null +++ b/vendor/commerceguys/intl/resources/currency/en-CA.json @@ -0,0 +1,497 @@ +{ + "AFN": { + "name": "Afghan Afghani" + }, + "ALL": { + "name": "Albanian Lek" + }, + "DZD": { + "name": "Algerian Dinar" + }, + "AOA": { + "name": "Angolan Kwanza" + }, + "ARS": { + "name": "Argentine Peso" + }, + "AMD": { + "name": "Armenian Dram" + }, + "AWG": { + "name": "Aruban Florin" + }, + "AUD": { + "name": "Australian Dollar", + "symbol": "A$" + }, + "AZN": { + "name": "Azerbaijani Manat" + }, + "BSD": { + "name": "Bahamian Dollar" + }, + "BHD": { + "name": "Bahraini Dinar" + }, + "BDT": { + "name": "Bangladeshi Taka" + }, + "BBD": { + "name": "Barbadian Dollar" + }, + "BYN": { + "name": "Belarusian Rouble" + }, + "BZD": { + "name": "Belize Dollar" + }, + "BMD": { + "name": "Bermudian Dollar" + }, + "BTN": { + "name": "Bhutanese Ngultrum" + }, + "BOB": { + "name": "Bolivian Boliviano" + }, + "BAM": { + "name": "Bosnia-Herzegovina Convertible Mark" + }, + "BWP": { + "name": "Botswanan Pula" + }, + "BRL": { + "name": "Brazilian Real", + "symbol": "R$" + }, + "GBP": { + "name": "British Pound", + "symbol": "£" + }, + "BND": { + "name": "Brunei Dollar" + }, + "BGN": { + "name": "Bulgarian Lev" + }, + "BIF": { + "name": "Burundian Franc" + }, + "KHR": { + "name": "Cambodian Riel" + }, + "CAD": { + "name": "Canadian Dollar", + "symbol": "$" + }, + "CVE": { + "name": "Cape Verdean Escudo" + }, + "KYD": { + "name": "Cayman Islands Dollar" + }, + "XAF": { + "name": "Central African CFA Franc", + "symbol": "FCFA" + }, + "XPF": { + "name": "CFP Franc", + "symbol": "CFPF" + }, + "CLP": { + "name": "Chilean Peso" + }, + "CNY": { + "name": "Chinese Yuan", + "symbol": "CN¥" + }, + "COP": { + "name": "Colombian Peso" + }, + "KMF": { + "name": "Comorian Franc" + }, + "CDF": { + "name": "Congolese Franc" + }, + "CRC": { + "name": "Costa Rican Colón" + }, + "HRK": { + "name": "Croatian Kuna" + }, + "CUC": { + "name": "Cuban Convertible Peso" + }, + "CUP": { + "name": "Cuban Peso" + }, + "CZK": { + "name": "Czech Koruna" + }, + "DKK": { + "name": "Danish Krone" + }, + "DJF": { + "name": "Djiboutian Franc" + }, + "DOP": { + "name": "Dominican Peso" + }, + "XCD": { + "name": "East Caribbean Dollar", + "symbol": "EC$" + }, + "EGP": { + "name": "Egyptian Pound" + }, + "ERN": { + "name": "Eritrean Nakfa" + }, + "ETB": { + "name": "Ethiopian Birr" + }, + "EUR": { + "name": "Euro", + "symbol": "€" + }, + "FKP": { + "name": "Falkland Islands Pound" + }, + "FJD": { + "name": "Fijian Dollar" + }, + "GMD": { + "name": "Gambian Dalasi" + }, + "GEL": { + "name": "Georgian Lari" + }, + "GHS": { + "name": "Ghanaian Cedi" + }, + "GIP": { + "name": "Gibraltar Pound" + }, + "GTQ": { + "name": "Guatemalan Quetzal" + }, + "GNF": { + "name": "Guinean Franc" + }, + "GYD": { + "name": "Guyanaese Dollar" + }, + "HTG": { + "name": "Haitian Gourde" + }, + "HNL": { + "name": "Honduran Lempira" + }, + "HKD": { + "name": "Hong Kong Dollar", + "symbol": "HK$" + }, + "HUF": { + "name": "Hungarian Forint" + }, + "ISK": { + "name": "Icelandic Króna" + }, + "INR": { + "name": "Indian Rupee", + "symbol": "₹" + }, + "IDR": { + "name": "Indonesian Rupiah" + }, + "IRR": { + "name": "Iranian Rial" + }, + "IQD": { + "name": "Iraqi Dinar" + }, + "ILS": { + "name": "Israeli New Shekel", + "symbol": "₪" + }, + "JMD": { + "name": "Jamaican Dollar" + }, + "JPY": { + "name": "Japanese Yen", + "symbol": "JP¥" + }, + "JOD": { + "name": "Jordanian Dinar" + }, + "KZT": { + "name": "Kazakhstani Tenge" + }, + "KES": { + "name": "Kenyan Shilling" + }, + "KWD": { + "name": "Kuwaiti Dinar" + }, + "KGS": { + "name": "Kyrgystani Som" + }, + "LAK": { + "name": "Laotian Kip" + }, + "LBP": { + "name": "Lebanese Pound" + }, + "LSL": { + "name": "Lesotho Loti" + }, + "LRD": { + "name": "Liberian Dollar" + }, + "LYD": { + "name": "Libyan Dinar" + }, + "MOP": { + "name": "Macanese Pataca" + }, + "MKD": { + "name": "Macedonian Denar" + }, + "MGA": { + "name": "Malagasy Ariary" + }, + "MWK": { + "name": "Malawian Kwacha" + }, + "MYR": { + "name": "Malaysian Ringgit" + }, + "MVR": { + "name": "Maldivian Rufiyaa" + }, + "MRU": { + "name": "Mauritanian Ouguiya" + }, + "MUR": { + "name": "Mauritian Rupee" + }, + "MXN": { + "name": "Mexican Peso", + "symbol": "MX$" + }, + "MDL": { + "name": "Moldovan Leu" + }, + "MNT": { + "name": "Mongolian Tugrik" + }, + "MAD": { + "name": "Moroccan Dirham" + }, + "MZN": { + "name": "Mozambican Metical" + }, + "MMK": { + "name": "Myanmar Kyat" + }, + "NAD": { + "name": "Namibian Dollar" + }, + "NPR": { + "name": "Nepalese Rupee" + }, + "ANG": { + "name": "Netherlands Antillean Guilder" + }, + "TWD": { + "name": "New Taiwan Dollar", + "symbol": "NT$" + }, + "NZD": { + "name": "New Zealand Dollar", + "symbol": "NZ$" + }, + "NIO": { + "name": "Nicaraguan Córdoba" + }, + "NGN": { + "name": "Nigerian Naira" + }, + "KPW": { + "name": "North Korean Won" + }, + "NOK": { + "name": "Norwegian Krone" + }, + "OMR": { + "name": "Omani Rial" + }, + "PKR": { + "name": "Pakistani Rupee" + }, + "PAB": { + "name": "Panamanian Balboa" + }, + "PGK": { + "name": "Papua New Guinean Kina" + }, + "PYG": { + "name": "Paraguayan Guarani" + }, + "PEN": { + "name": "Peruvian Sol" + }, + "PHP": { + "name": "Philippine Peso", + "symbol": "₱" + }, + "PLN": { + "name": "Polish Zloty" + }, + "QAR": { + "name": "Qatari Rial" + }, + "RON": { + "name": "Romanian Leu" + }, + "RUB": { + "name": "Russian Rouble" + }, + "RWF": { + "name": "Rwandan Franc" + }, + "SVC": { + "name": "Salvadoran Colón" + }, + "WST": { + "name": "Samoan Tala" + }, + "STN": { + "name": "São Tomé and Príncipe Dobra" + }, + "SAR": { + "name": "Saudi Riyal" + }, + "RSD": { + "name": "Serbian Dinar" + }, + "SCR": { + "name": "Seychellois Rupee" + }, + "SLL": { + "name": "Sierra Leonean Leone" + }, + "SGD": { + "name": "Singapore Dollar" + }, + "SBD": { + "name": "Solomon Islands Dollar" + }, + "SOS": { + "name": "Somali Shilling" + }, + "ZAR": { + "name": "South African Rand" + }, + "KRW": { + "name": "South Korean Won", + "symbol": "₩" + }, + "SSP": { + "name": "South Sudanese Pound" + }, + "LKR": { + "name": "Sri Lankan Rupee" + }, + "SHP": { + "name": "St Helena Pound" + }, + "SDG": { + "name": "Sudanese Pound" + }, + "SRD": { + "name": "Surinamese Dollar" + }, + "SZL": { + "name": "Swazi Lilangeni" + }, + "SEK": { + "name": "Swedish Krona" + }, + "CHF": { + "name": "Swiss Franc" + }, + "SYP": { + "name": "Syrian Pound" + }, + "TJS": { + "name": "Tajikistani Somoni" + }, + "TZS": { + "name": "Tanzanian Shilling" + }, + "THB": { + "name": "Thai Baht" + }, + "TOP": { + "name": "Tongan Paʻanga" + }, + "TTD": { + "name": "Trinidad and Tobago Dollar" + }, + "TND": { + "name": "Tunisian Dinar" + }, + "TRY": { + "name": "Turkish Lira" + }, + "TMT": { + "name": "Turkmenistani Manat" + }, + "USD": { + "name": "U.S. Dollar", + "symbol": "US$" + }, + "UGX": { + "name": "Ugandan Shilling" + }, + "UAH": { + "name": "Ukrainian Hryvnia" + }, + "AED": { + "name": "United Arab Emirates Dirham" + }, + "UYW": { + "name": "Uruguayan Nominal Wage Index Unit" + }, + "UYU": { + "name": "Uruguayan Peso" + }, + "UZS": { + "name": "Uzbekistani Som" + }, + "VUV": { + "name": "Vanuatu Vatu" + }, + "VES": { + "name": "Venezuelan Bolívar" + }, + "VND": { + "name": "Vietnamese Dong", + "symbol": "₫" + }, + "XOF": { + "name": "West African CFA Franc", + "symbol": "F CFA" + }, + "YER": { + "name": "Yemeni Rial" + }, + "ZMW": { + "name": "Zambian Kwacha" + }, + "ZWL": { + "name": "Zimbabwean Dollar (2009)" + } +}
\ No newline at end of file diff --git a/vendor/commerceguys/intl/resources/currency/en-PH.json b/vendor/commerceguys/intl/resources/currency/en-PH.json new file mode 100644 index 000000000..c4921b070 --- /dev/null +++ b/vendor/commerceguys/intl/resources/currency/en-PH.json @@ -0,0 +1,497 @@ +{ + "AFN": { + "name": "Afghan Afghani" + }, + "ALL": { + "name": "Albanian Lek" + }, + "DZD": { + "name": "Algerian Dinar" + }, + "AOA": { + "name": "Angolan Kwanza" + }, + "ARS": { + "name": "Argentine Peso" + }, + "AMD": { + "name": "Armenian Dram" + }, + "AWG": { + "name": "Aruban Florin" + }, + "AUD": { + "name": "Australian Dollar", + "symbol": "A$" + }, + "AZN": { + "name": "Azerbaijani Manat" + }, + "BSD": { + "name": "Bahamian Dollar" + }, + "BHD": { + "name": "Bahraini Dinar" + }, + "BDT": { + "name": "Bangladeshi Taka" + }, + "BBD": { + "name": "Barbadian Dollar" + }, + "BYN": { + "name": "Belarusian Ruble" + }, + "BZD": { + "name": "Belize Dollar" + }, + "BMD": { + "name": "Bermudan Dollar" + }, + "BTN": { + "name": "Bhutanese Ngultrum" + }, + "BOB": { + "name": "Bolivian Boliviano" + }, + "BAM": { + "name": "Bosnia-Herzegovina Convertible Mark" + }, + "BWP": { + "name": "Botswanan Pula" + }, + "BRL": { + "name": "Brazilian Real", + "symbol": "R$" + }, + "GBP": { + "name": "British Pound", + "symbol": "£" + }, + "BND": { + "name": "Brunei Dollar" + }, + "BGN": { + "name": "Bulgarian Lev" + }, + "BIF": { + "name": "Burundian Franc" + }, + "KHR": { + "name": "Cambodian Riel" + }, + "CAD": { + "name": "Canadian Dollar", + "symbol": "CA$" + }, + "CVE": { + "name": "Cape Verdean Escudo" + }, + "KYD": { + "name": "Cayman Islands Dollar" + }, + "XAF": { + "name": "Central African CFA Franc", + "symbol": "FCFA" + }, + "XPF": { + "name": "CFP Franc", + "symbol": "CFPF" + }, + "CLP": { + "name": "Chilean Peso" + }, + "CNY": { + "name": "Chinese Yuan", + "symbol": "CN¥" + }, + "COP": { + "name": "Colombian Peso" + }, + "KMF": { + "name": "Comorian Franc" + }, + "CDF": { + "name": "Congolese Franc" + }, + "CRC": { + "name": "Costa Rican Colón" + }, + "HRK": { + "name": "Croatian Kuna" + }, + "CUC": { + "name": "Cuban Convertible Peso" + }, + "CUP": { + "name": "Cuban Peso" + }, + "CZK": { + "name": "Czech Koruna" + }, + "DKK": { + "name": "Danish Krone" + }, + "DJF": { + "name": "Djiboutian Franc" + }, + "DOP": { + "name": "Dominican Peso" + }, + "XCD": { + "name": "East Caribbean Dollar", + "symbol": "EC$" + }, + "EGP": { + "name": "Egyptian Pound" + }, + "ERN": { + "name": "Eritrean Nakfa" + }, + "ETB": { + "name": "Ethiopian Birr" + }, + "EUR": { + "name": "Euro", + "symbol": "€" + }, + "FKP": { + "name": "Falkland Islands Pound" + }, + "FJD": { + "name": "Fijian Dollar" + }, + "GMD": { + "name": "Gambian Dalasi" + }, + "GEL": { + "name": "Georgian Lari" + }, + "GHS": { + "name": "Ghanaian Cedi" + }, + "GIP": { + "name": "Gibraltar Pound" + }, + "GTQ": { + "name": "Guatemalan Quetzal" + }, + "GNF": { + "name": "Guinean Franc" + }, + "GYD": { + "name": "Guyanaese Dollar" + }, + "HTG": { + "name": "Haitian Gourde" + }, + "HNL": { + "name": "Honduran Lempira" + }, + "HKD": { + "name": "Hong Kong Dollar", + "symbol": "HK$" + }, + "HUF": { + "name": "Hungarian Forint" + }, + "ISK": { + "name": "Icelandic Króna" + }, + "INR": { + "name": "Indian Rupee", + "symbol": "₹" + }, + "IDR": { + "name": "Indonesian Rupiah" + }, + "IRR": { + "name": "Iranian Rial" + }, + "IQD": { + "name": "Iraqi Dinar" + }, + "ILS": { + "name": "Israeli New Shekel", + "symbol": "₪" + }, + "JMD": { + "name": "Jamaican Dollar" + }, + "JPY": { + "name": "Japanese Yen", + "symbol": "¥" + }, + "JOD": { + "name": "Jordanian Dinar" + }, + "KZT": { + "name": "Kazakhstani Tenge" + }, + "KES": { + "name": "Kenyan Shilling" + }, + "KWD": { + "name": "Kuwaiti Dinar" + }, + "KGS": { + "name": "Kyrgystani Som" + }, + "LAK": { + "name": "Laotian Kip" + }, + "LBP": { + "name": "Lebanese Pound" + }, + "LSL": { + "name": "Lesotho Loti" + }, + "LRD": { + "name": "Liberian Dollar" + }, + "LYD": { + "name": "Libyan Dinar" + }, + "MOP": { + "name": "Macanese Pataca" + }, + "MKD": { + "name": "Macedonian Denar" + }, + "MGA": { + "name": "Malagasy Ariary" + }, + "MWK": { + "name": "Malawian Kwacha" + }, + "MYR": { + "name": "Malaysian Ringgit" + }, + "MVR": { + "name": "Maldivian Rufiyaa" + }, + "MRU": { + "name": "Mauritanian Ouguiya" + }, + "MUR": { + "name": "Mauritian Rupee" + }, + "MXN": { + "name": "Mexican Peso", + "symbol": "MX$" + }, + "MDL": { + "name": "Moldovan Leu" + }, + "MNT": { + "name": "Mongolian Tugrik" + }, + "MAD": { + "name": "Moroccan Dirham" + }, + "MZN": { + "name": "Mozambican Metical" + }, + "MMK": { + "name": "Myanmar Kyat" + }, + "NAD": { + "name": "Namibian Dollar" + }, + "NPR": { + "name": "Nepalese Rupee" + }, + "ANG": { + "name": "Netherlands Antillean Guilder" + }, + "TWD": { + "name": "New Taiwan Dollar", + "symbol": "NT$" + }, + "NZD": { + "name": "New Zealand Dollar", + "symbol": "NZ$" + }, + "NIO": { + "name": "Nicaraguan Córdoba" + }, + "NGN": { + "name": "Nigerian Naira" + }, + "KPW": { + "name": "North Korean Won" + }, + "NOK": { + "name": "Norwegian Krone" + }, + "OMR": { + "name": "Omani Rial" + }, + "PKR": { + "name": "Pakistani Rupee" + }, + "PAB": { + "name": "Panamanian Balboa" + }, + "PGK": { + "name": "Papua New Guinean Kina" + }, + "PYG": { + "name": "Paraguayan Guarani" + }, + "PEN": { + "name": "Peruvian Sol" + }, + "PHP": { + "name": "Philippine Piso", + "symbol": "₱" + }, + "PLN": { + "name": "Polish Zloty" + }, + "QAR": { + "name": "Qatari Rial" + }, + "RON": { + "name": "Romanian Leu" + }, + "RUB": { + "name": "Russian Ruble" + }, + "RWF": { + "name": "Rwandan Franc" + }, + "SVC": { + "name": "Salvadoran Colón" + }, + "WST": { + "name": "Samoan Tala" + }, + "STN": { + "name": "São Tomé & Príncipe Dobra" + }, + "SAR": { + "name": "Saudi Riyal" + }, + "RSD": { + "name": "Serbian Dinar" + }, + "SCR": { + "name": "Seychellois Rupee" + }, + "SLL": { + "name": "Sierra Leonean Leone" + }, + "SGD": { + "name": "Singapore Dollar" + }, + "SBD": { + "name": "Solomon Islands Dollar" + }, + "SOS": { + "name": "Somali Shilling" + }, + "ZAR": { + "name": "South African Rand" + }, + "KRW": { + "name": "South Korean Won", + "symbol": "₩" + }, + "SSP": { + "name": "South Sudanese Pound" + }, + "LKR": { + "name": "Sri Lankan Rupee" + }, + "SHP": { + "name": "St. Helena Pound" + }, + "SDG": { + "name": "Sudanese Pound" + }, + "SRD": { + "name": "Surinamese Dollar" + }, + "SZL": { + "name": "Swazi Lilangeni" + }, + "SEK": { + "name": "Swedish Krona" + }, + "CHF": { + "name": "Swiss Franc" + }, + "SYP": { + "name": "Syrian Pound" + }, + "TJS": { + "name": "Tajikistani Somoni" + }, + "TZS": { + "name": "Tanzanian Shilling" + }, + "THB": { + "name": "Thai Baht" + }, + "TOP": { + "name": "Tongan Paʻanga" + }, + "TTD": { + "name": "Trinidad & Tobago Dollar" + }, + "TND": { + "name": "Tunisian Dinar" + }, + "TRY": { + "name": "Turkish Lira" + }, + "TMT": { + "name": "Turkmenistani Manat" + }, + "UGX": { + "name": "Ugandan Shilling" + }, + "UAH": { + "name": "Ukrainian Hryvnia" + }, + "AED": { + "name": "United Arab Emirates Dirham" + }, + "UYW": { + "name": "Uruguayan Nominal Wage Index Unit" + }, + "UYU": { + "name": "Uruguayan Peso" + }, + "USD": { + "name": "US Dollar", + "symbol": "$" + }, + "UZS": { + "name": "Uzbekistani Som" + }, + "VUV": { + "name": "Vanuatu Vatu" + }, + "VES": { + "name": "Venezuelan Bolívar" + }, + "VND": { + "name": "Vietnamese Dong", + "symbol": "₫" + }, + "XOF": { + "name": "West African CFA Franc", + "symbol": "F CFA" + }, + "YER": { + "name": "Yemeni Rial" + }, + "ZMW": { + "name": "Zambian Kwacha" + }, + "ZWL": { + "name": "Zimbabwean Dollar (2009)" + } +}
\ No newline at end of file diff --git a/vendor/jbroadway/urlify/.github/workflows/ci.yml b/vendor/jbroadway/urlify/.github/workflows/ci.yml new file mode 100644 index 000000000..869334f57 --- /dev/null +++ b/vendor/jbroadway/urlify/.github/workflows/ci.yml @@ -0,0 +1,41 @@ +name: "Continuous Integration" + +on: + - push + - pull_request + +env: + COMPOSER_FLAGS: "--no-interaction --prefer-dist" + +jobs: + tests: + name: "CI" + + runs-on: ubuntu-latest + + strategy: + matrix: + php-version: + - "7.2" + - "7.3" + - "7.4" + - "8.0" + + dependencies: [highest] + + steps: + - name: "Checkout" + uses: "actions/checkout@v2" + + - name: "Setup PHP" + uses: "shivammathur/setup-php@v2" + with: + coverage: "none" + php-version: "${{ matrix.php-version }}" + + - name: "Install dependencies" + run: | + composer update ${{ env.COMPOSER_FLAGS }} + + - name: "Run tests" + run: "composer exec phpunit -- --verbose" diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml new file mode 100644 index 000000000..7f267b208 --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/1_Conversion_error.yaml @@ -0,0 +1,25 @@ +name: "📃 Bug Report (Incorrect Markdown)" +description: I'm not getting the Markdown I expect +body: + - type: input + id: affected-versions + attributes: + label: Version(s) affected + placeholder: x.y.z + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: how-to-reproduce + attributes: + label: How to reproduce + description: | + Provide the HTML input and any other information that would help us reproduce the problem. + validations: + required: true diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml new file mode 100644 index 000000000..2045fb79a --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/2_Bug_report.yaml @@ -0,0 +1,43 @@ +name: "🐛 Bug Report (Other)" +description: Report all other errors and problems +body: + - type: input + id: affected-versions + attributes: + label: Version(s) affected + placeholder: x.y.z + validations: + required: true + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: how-to-reproduce + attributes: + label: How to reproduce + description: | + HTML and/or any other information needed to reproduce the problem. + validations: + required: true + - type: textarea + id: possible-solution + attributes: + label: Possible solution + description: | + Optional: only if you have suggestions on a fix/reason for the bug + - type: textarea + id: additional-context + attributes: + label: Additional context + description: | + Optional: any other context about the problem: log messages, screenshots, etc. + - type: textarea + id: feedback + attributes: + label: Did this project help you today? Did it make you happy in any way? + description: | + Optional: Sometimes we get tired of reading bug reports and working on complex features, so if you have anything positive to share about how this library might have helped you we'd love to hear it! diff --git a/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml new file mode 100644 index 000000000..2d91a58d0 --- /dev/null +++ b/vendor/league/html-to-markdown/.github/ISSUE_TEMPLATE/3_Feature_request.yaml @@ -0,0 +1,27 @@ +name: "🚀 Feature Request" +description: RFC and ideas for new features and improvements +labels: + - enhancement +body: + - type: textarea + id: description + attributes: + label: Description + description: A clear and concise description of the problem. + validations: + required: true + - type: textarea + id: example + attributes: + label: Example + description: | + A simple example of the new feature in action (include PHP code, sample HTML/Markdown, etc.) + If the new feature changes an existing feature, include a simple before/after comparison. + validations: + required: true + - type: textarea + id: feedback + attributes: + label: Did this project help you today? Did it make you happy in any way? + description: | + Optional: Sometimes we get tired of reading bug reports and working on complex features, so if you have anything positive to share about how this library might have helped you we'd love to hear it! diff --git a/vendor/sabre/dav/.github/workflows/ci.yml b/vendor/sabre/dav/.github/workflows/ci.yml new file mode 100644 index 000000000..f41b38535 --- /dev/null +++ b/vendor/sabre/dav/.github/workflows/ci.yml @@ -0,0 +1,127 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: + +jobs: + code-analysis: + runs-on: ubuntu-latest + name: Code Analysis (PHP ${{ matrix.php-versions }}) + strategy: + fail-fast: false + matrix: + php-versions: [ '7.4' ] + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: PHP CS-Fixer + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: PHPStan + run: composer phpstan + + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: [ '7.1', '7.2', '7.3', '7.4', '8.0' ] + coverage: [ 'none' ] + streaming: [ false ] + include: + - php-versions: '8.1' + coverage: 'pcov' + streaming: true + + services: + mariadb: + image: mariadb + env: + MARIADB_DATABASE: 'sabredav_test' + MARIADB_ROOT_PASSWORD: root + ports: + - 3306:3306 + postgres: + image: postgres + env: + POSTGRES_DB: 'sabredav_test' + POSTGRES_PASSWORD: postgres + ports: + - 5432:5432 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, pdo_sqlite, pgsql, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install Composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: PHPUnit + if: matrix.streaming == false + run: vendor/bin/phpunit --verbose --configuration tests/phpunit.xml --coverage-clover=coverage.xml + env: + SABRE_MYSQLUSER: root + SABRE_MYSQLPASS: root + SABRE_MYSQLDSN: "mysql:host=127.0.0.1;port=3306;dbname=sabredav_test" + SABRE_PGSQLDSN: "pgsql:host=127.0.0.1;port=5432;dbname=sabredav_test;user=postgres;password=postgres" + + - name: PHPUnit (with streaming) + if: matrix.streaming == true + run: vendor/bin/phpunit --verbose --configuration tests/phpunit.xml --coverage-clover=coverage.xml + env: + SABRE_MYSQLUSER: root + SABRE_MYSQLPASS: root + SABRE_MYSQLDSN: "mysql:host=127.0.0.1;port=3306;dbname=sabredav_test" + SABRE_PGSQLDSN: "pgsql:host=127.0.0.1;port=5432;dbname=sabredav_test;user=postgres;password=postgres" + RUN_TEST_WITH_STREAMING_PROPFIND: "true" + + - uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php new file mode 100644 index 000000000..39324e4db --- /dev/null +++ b/vendor/sabre/dav/lib/DAV/Auth/Backend/PDOBasicAuth.php @@ -0,0 +1,114 @@ +<?php + +namespace Sabre\DAV\Auth\Backend; + +/** + * This is an authentication backend that uses a database to manage passwords. + * + * @copyright Copyright (C) fruux GmbH (https://fruux.com/) + * @license http://sabre.io/license/ Modified BSD License + */ +class PDOBasicAuth extends AbstractBasic +{ + /** + * Reference to PDO connection. + * + * @var PDO + */ + protected $pdo; + + /** + * PDO table name we'll be using. + * + * @var string + */ + protected $tableName; + + /** + * PDO digest column name we'll be using + * (i.e. digest, password, password_hash). + * + * @var string + */ + protected $digestColumn; + + /** + * PDO uuid(unique user identifier) column name we'll be using + * (i.e. username, email). + * + * @var string + */ + protected $uuidColumn; + + /** + * Digest prefix: + * if the backend you are using for is prefixing + * your password hashes set this option to your prefix to + * cut it off before verfiying. + * + * @var string + */ + protected $digestPrefix; + + /** + * Creates the backend object. + * + * If the filename argument is passed in, it will parse out the specified file fist. + */ + public function __construct(\PDO $pdo, array $options = []) + { + $this->pdo = $pdo; + if (isset($options['tableName'])) { + $this->tableName = $options['tableName']; + } else { + $this->tableName = 'users'; + } + if (isset($options['digestColumn'])) { + $this->digestColumn = $options['digestColumn']; + } else { + $this->digestColumn = 'digest'; + } + if (isset($options['uuidColumn'])) { + $this->uuidColumn = $options['uuidColumn']; + } else { + $this->uuidColumn = 'username'; + } + if (isset($options['digestPrefix'])) { + $this->digestPrefix = $options['digestPrefix']; + } + } + + /** + * Validates a username and password. + * + * This method should return true or false depending on if login + * succeeded. + * + * @param string $username + * @param string $password + * + * @return bool + */ + public function validateUserPass($username, $password) + { + $stmt = $this->pdo->prepare('SELECT '.$this->digestColumn.' FROM '.$this->tableName.' WHERE '.$this->uuidColumn.' = ?'); + $stmt->execute([$username]); + $result = $stmt->fetchAll(); + + if (!count($result)) { + return false; + } else { + $digest = $result[0][$this->digestColumn]; + + if (isset($this->digestPrefix)) { + $digest = substr($digest, strlen($this->digestPrefix)); + } + + if (password_verify($password, $digest)) { + return true; + } + + return false; + } + } +} diff --git a/vendor/sabre/event/.github/workflows/ci.yml b/vendor/sabre/event/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/event/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/http/.github/workflows/ci.yml b/vendor/sabre/http/.github/workflows/ci.yml new file mode 100644 index 000000000..91b509bf0 --- /dev/null +++ b/vendor/sabre/http/.github/workflows/ci.yml @@ -0,0 +1,64 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: ctype, curl, mbstring + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Run application server + run: php -S localhost:8000 -t tests/www 2>/dev/null & + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/uri/.github/workflows/ci.yml b/vendor/sabre/uri/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/uri/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/vobject/.github/workflows/ci.yml b/vendor/sabre/vobject/.github/workflows/ci.yml new file mode 100644 index 000000000..3a019fe77 --- /dev/null +++ b/vendor/sabre/vobject/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php new file mode 100644 index 000000000..990ac9692 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromOffset.php @@ -0,0 +1,31 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromOffset implements TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // Maybe the author was hyper-lazy and just included an offset. We + // support it, but we aren't happy about it. + if (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) { + // Note that the path in the source will never be taken from PHP 5.5.10 + // onwards. PHP 5.5.10 supports the "GMT+0100" style of format, so it + // already gets returned early in this function. Once we drop support + // for versions under PHP 5.5.10, this bit can be taken out of the + // source. + // @codeCoverageIgnoreStart + return new DateTimeZone('Etc/GMT'.$matches[1].ltrim(substr($matches[2], 0, 2), '0')); + // @codeCoverageIgnoreEnd + } + + return null; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php new file mode 100644 index 000000000..d8c6d5d3b --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneIdentifier.php @@ -0,0 +1,71 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Exception; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromTimezoneIdentifier implements TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // First we will just see if the tzid is a support timezone identifier. + // + // The only exception is if the timezone starts with (. This is to + // handle cases where certain microsoft products generate timezone + // identifiers that for instance look like: + // + // (GMT+01.00) Sarajevo/Warsaw/Zagreb + // + // Since PHP 5.5.10, the first bit will be used as the timezone and + // this method will return just GMT+01:00. This is wrong, because it + // doesn't take DST into account + if (!isset($tzid[0])) { + return null; + } + if ('(' === $tzid[0]) { + return null; + } + // PHP has a bug that logs PHP warnings even it shouldn't: + // https://bugs.php.net/bug.php?id=67881 + // + // That's why we're checking if we'll be able to successfully instantiate + // \DateTimeZone() before doing so. Otherwise we could simply instantiate + // and catch the exception. + $tzIdentifiers = DateTimeZone::listIdentifiers(); + + try { + if ( + (in_array($tzid, $tzIdentifiers)) || + (preg_match('/^GMT(\+|-)([0-9]{4})$/', $tzid, $matches)) || + (in_array($tzid, $this->getIdentifiersBC())) + ) { + return new DateTimeZone($tzid); + } + } catch (Exception $e) { + } + + return null; + } + + /** + * This method returns an array of timezone identifiers, that are supported + * by DateTimeZone(), but not returned by DateTimeZone::listIdentifiers(). + * + * We're not using DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC) because: + * - It's not supported by some PHP versions as well as HHVM. + * - It also returns identifiers, that are invalid values for new DateTimeZone() on some PHP versions. + * (See timezonedata/php-bc.php and timezonedata php-workaround.php) + * + * @return array + */ + private function getIdentifiersBC() + { + return include __DIR__.'/../timezonedata/php-bc.php'; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php new file mode 100644 index 000000000..b52ba6a19 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/FindFromTimezoneMap.php @@ -0,0 +1,78 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class FindFromTimezoneMap implements TimezoneFinder +{ + private $map = []; + + private $patterns = [ + '/^\((UTC|GMT)(\+|\-)[\d]{2}\:[\d]{2}\) (.*)/', + '/^\((UTC|GMT)(\+|\-)[\d]{2}\.[\d]{2}\) (.*)/', + ]; + + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone + { + // Next, we check if the tzid is somewhere in our tzid map. + if ($this->hasTzInMap($tzid)) { + return new DateTimeZone($this->getTzFromMap($tzid)); + } + + // Some Microsoft products prefix the offset first, so let's strip that off + // and see if it is our tzid map. We don't want to check for this first just + // in case there are overrides in our tzid map. + foreach ($this->patterns as $pattern) { + if (!preg_match($pattern, $tzid, $matches)) { + continue; + } + $tzidAlternate = $matches[3]; + if ($this->hasTzInMap($tzidAlternate)) { + return new DateTimeZone($this->getTzFromMap($tzidAlternate)); + } + } + + return null; + } + + /** + * This method returns an array of timezone identifiers, that are supported + * by DateTimeZone(), but not returned by DateTimeZone::listIdentifiers(). + * + * We're not using DateTimeZone::listIdentifiers(DateTimeZone::ALL_WITH_BC) because: + * - It's not supported by some PHP versions as well as HHVM. + * - It also returns identifiers, that are invalid values for new DateTimeZone() on some PHP versions. + * (See timezonedata/php-bc.php and timezonedata php-workaround.php) + * + * @return array + */ + private function getTzMaps() + { + if ([] === $this->map) { + $this->map = array_merge( + include __DIR__.'/../timezonedata/windowszones.php', + include __DIR__.'/../timezonedata/lotuszones.php', + include __DIR__.'/../timezonedata/exchangezones.php', + include __DIR__.'/../timezonedata/php-workaround.php' + ); + } + + return $this->map; + } + + private function getTzFromMap(string $tzid): string + { + return $this->getTzMaps()[$tzid]; + } + + private function hasTzInMap(string $tzid): bool + { + return isset($this->getTzMaps()[$tzid]); + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php new file mode 100644 index 000000000..f340a3962 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromLicEntry.php @@ -0,0 +1,33 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; +use Sabre\VObject\TimeZoneUtil; + +/** + * Some clients add 'X-LIC-LOCATION' with the olson name. + */ +class GuessFromLicEntry implements TimezoneGuesser +{ + public function guess(VTimeZone $vtimezone, bool $failIfUncertain = false): ?DateTimeZone + { + if (!isset($vtimezone->{'X-LIC-LOCATION'})) { + return null; + } + + $lic = (string) $vtimezone->{'X-LIC-LOCATION'}; + + // Libical generators may specify strings like + // "SystemV/EST5EDT". For those we must remove the + // SystemV part. + if ('SystemV/' === substr($lic, 0, 8)) { + $lic = substr($lic, 8); + } + + return TimeZoneUtil::getTimeZone($lic, null, $failIfUncertain); + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php new file mode 100644 index 000000000..b11ce1832 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/GuessFromMsTzId.php @@ -0,0 +1,119 @@ +<?php + +declare(strict_types=1); + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; + +class GuessFromMsTzId implements TimezoneGuesser +{ + /** + * List of microsoft exchange timezone ids. + * + * Source: http://msdn.microsoft.com/en-us/library/aa563018(loband).aspx + */ + public static $microsoftExchangeMap = [ + 0 => 'UTC', + 31 => 'Africa/Casablanca', + + // Insanely, id #2 is used for both Europe/Lisbon, and Europe/Sarajevo. + // I'm not even kidding.. We handle this special case in the + // getTimeZone method. + 2 => 'Europe/Lisbon', + 1 => 'Europe/London', + 4 => 'Europe/Berlin', + 6 => 'Europe/Prague', + 3 => 'Europe/Paris', + 69 => 'Africa/Luanda', // This was a best guess + 7 => 'Europe/Athens', + 5 => 'Europe/Bucharest', + 49 => 'Africa/Cairo', + 50 => 'Africa/Harare', + 59 => 'Europe/Helsinki', + 27 => 'Asia/Jerusalem', + 26 => 'Asia/Baghdad', + 74 => 'Asia/Kuwait', + 51 => 'Europe/Moscow', + 56 => 'Africa/Nairobi', + 25 => 'Asia/Tehran', + 24 => 'Asia/Muscat', // Best guess + 54 => 'Asia/Baku', + 48 => 'Asia/Kabul', + 58 => 'Asia/Yekaterinburg', + 47 => 'Asia/Karachi', + 23 => 'Asia/Calcutta', + 62 => 'Asia/Kathmandu', + 46 => 'Asia/Almaty', + 71 => 'Asia/Dhaka', + 66 => 'Asia/Colombo', + 61 => 'Asia/Rangoon', + 22 => 'Asia/Bangkok', + 64 => 'Asia/Krasnoyarsk', + 45 => 'Asia/Shanghai', + 63 => 'Asia/Irkutsk', + 21 => 'Asia/Singapore', + 73 => 'Australia/Perth', + 75 => 'Asia/Taipei', + 20 => 'Asia/Tokyo', + 72 => 'Asia/Seoul', + 70 => 'Asia/Yakutsk', + 19 => 'Australia/Adelaide', + 44 => 'Australia/Darwin', + 18 => 'Australia/Brisbane', + 76 => 'Australia/Sydney', + 43 => 'Pacific/Guam', + 42 => 'Australia/Hobart', + 68 => 'Asia/Vladivostok', + 41 => 'Asia/Magadan', + 17 => 'Pacific/Auckland', + 40 => 'Pacific/Fiji', + 67 => 'Pacific/Tongatapu', + 29 => 'Atlantic/Azores', + 53 => 'Atlantic/Cape_Verde', + 30 => 'America/Noronha', + 8 => 'America/Sao_Paulo', // Best guess + 32 => 'America/Argentina/Buenos_Aires', + 60 => 'America/Godthab', + 28 => 'America/St_Johns', + 9 => 'America/Halifax', + 33 => 'America/Caracas', + 65 => 'America/Santiago', + 35 => 'America/Bogota', + 10 => 'America/New_York', + 34 => 'America/Indiana/Indianapolis', + 55 => 'America/Guatemala', + 11 => 'America/Chicago', + 37 => 'America/Mexico_City', + 36 => 'America/Edmonton', + 38 => 'America/Phoenix', + 12 => 'America/Denver', // Best guess + 13 => 'America/Los_Angeles', // Best guess + 14 => 'America/Anchorage', + 15 => 'Pacific/Honolulu', + 16 => 'Pacific/Midway', + 39 => 'Pacific/Kwajalein', + ]; + + public function guess(VTimeZone $vtimezone, bool $throwIfUnsure = false): ?DateTimeZone + { + // Microsoft may add a magic number, which we also have an + // answer for. + if (!isset($vtimezone->{'X-MICROSOFT-CDO-TZID'})) { + return null; + } + $cdoId = (int) $vtimezone->{'X-MICROSOFT-CDO-TZID'}->getValue(); + + // 2 can mean both Europe/Lisbon and Europe/Sarajevo. + if (2 === $cdoId && false !== strpos((string) $vtimezone->TZID, 'Sarajevo')) { + return new DateTimeZone('Europe/Sarajevo'); + } + + if (isset(self::$microsoftExchangeMap[$cdoId])) { + return new DateTimeZone(self::$microsoftExchangeMap[$cdoId]); + } + + return null; + } +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php new file mode 100644 index 000000000..5aa880a1c --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneFinder.php @@ -0,0 +1,10 @@ +<?php + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; + +interface TimezoneFinder +{ + public function find(string $tzid, bool $failIfUncertain = false): ?DateTimeZone; +} diff --git a/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php new file mode 100644 index 000000000..5e193bb52 --- /dev/null +++ b/vendor/sabre/vobject/lib/TimezoneGuesser/TimezoneGuesser.php @@ -0,0 +1,11 @@ +<?php + +namespace Sabre\VObject\TimezoneGuesser; + +use DateTimeZone; +use Sabre\VObject\Component\VTimeZone; + +interface TimezoneGuesser +{ + public function guess(VTimeZone $vtimezone, bool $failIfUncertain = false): ?DateTimeZone; +} diff --git a/vendor/sabre/xml/.github/workflows/ci.yml b/vendor/sabre/xml/.github/workflows/ci.yml new file mode 100644 index 000000000..3473cd2de --- /dev/null +++ b/vendor/sabre/xml/.github/workflows/ci.yml @@ -0,0 +1,63 @@ +name: continuous-integration +on: + push: + branches: + - master + - release/* + pull_request: +jobs: + unit-testing: + name: PHPUnit (PHP ${{ matrix.php-versions }}) + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + php-versions: ['7.2', '7.3', '7.4', '8.0', '8.1'] + coverage: ['pcov'] + code-analysis: ['no'] + include: + - php-versions: '7.1' + coverage: 'none' + code-analysis: 'yes' + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Setup PHP, with composer and extensions + uses: shivammathur/setup-php@v2 #https://github.com/shivammathur/setup-php + with: + php-version: ${{ matrix.php-versions }} + extensions: mbstring, dom, fileinfo, mysql, redis, opcache + coverage: ${{ matrix.coverage }} + tools: composer + + - name: Get composer cache directory + id: composer-cache + run: echo "::set-output name=dir::$(composer config cache-files-dir)" + + - name: Cache composer dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.composer-cache.outputs.dir }} + # Use composer.json for key, if composer.lock is not committed. + # key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.json') }} + key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} + restore-keys: ${{ runner.os }}-composer- + + - name: Install composer dependencies + run: composer install --no-progress --prefer-dist --optimize-autoloader + + - name: Code Analysis (PHP CS-Fixer) + if: matrix.code-analysis == 'yes' + run: php vendor/bin/php-cs-fixer fix --dry-run --diff + + - name: Code Analysis (PHPStan) + if: matrix.code-analysis == 'yes' + run: composer phpstan + + - name: Test with phpunit + run: vendor/bin/phpunit --configuration tests/phpunit.xml --coverage-clover clover.xml + + - name: Code Coverage + uses: codecov/codecov-action@v2 + if: matrix.coverage != 'none' |