mirror of
https://github.com/friendica/friendica
synced 2024-11-18 00:23:47 +00:00
Merge remote-tracking branch 'upstream/develop' into channel-relay
This commit is contained in:
commit
7a13d8b8ac
63 changed files with 621 additions and 512 deletions
|
@ -29,12 +29,12 @@
|
||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"asika/simple-console": "^1.0",
|
"asika/simple-console": "^1.0",
|
||||||
"bacon/bacon-qr-code": "^2.0.0",
|
"bacon/bacon-qr-code": "^2.0.0",
|
||||||
"divineomega/password_exposed": "^2.8",
|
"divineomega/password_exposed": "^3",
|
||||||
"enyo/dropzone": "^5.9",
|
"enyo/dropzone": "^5.9",
|
||||||
"ezyang/htmlpurifier": "^4.7",
|
"ezyang/htmlpurifier": "^4.7",
|
||||||
"friendica/json-ld": "^1.0",
|
"friendica/json-ld": "^1.0",
|
||||||
"geekwright/po": "^2.0",
|
"geekwright/po": "^2.0",
|
||||||
"guzzlehttp/guzzle": "^6.5",
|
"guzzlehttp/guzzle": "^7",
|
||||||
"guzzlehttp/oauth-subscriber": "^0.6",
|
"guzzlehttp/oauth-subscriber": "^0.6",
|
||||||
"kornrunner/blurhash": "^1.2",
|
"kornrunner/blurhash": "^1.2",
|
||||||
"league/html-to-markdown": "^4.8",
|
"league/html-to-markdown": "^4.8",
|
||||||
|
|
625
composer.lock
generated
625
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "082b16e2c88895f1a03d5b0ffe678ba7",
|
"content-hash": "356019e5d0c92aae938f5292dd0fd103",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "asika/simple-console",
|
"name": "asika/simple-console",
|
||||||
|
@ -507,38 +507,101 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "divineomega/password_exposed",
|
"name": "divineomega/password_exposed",
|
||||||
"version": "v2.8.0",
|
"version": "v3.2.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/DivineOmega/password_exposed.git",
|
"url": "https://github.com/DivineOmega/password_exposed.git",
|
||||||
"reference": "908ed8e62ef95411bd0f866e29c69cef2bbca880"
|
"reference": "327f93ee5cab54622077bcae721412b55be16720"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/DivineOmega/password_exposed/zipball/908ed8e62ef95411bd0f866e29c69cef2bbca880",
|
"url": "https://api.github.com/repos/DivineOmega/password_exposed/zipball/327f93ee5cab54622077bcae721412b55be16720",
|
||||||
"reference": "908ed8e62ef95411bd0f866e29c69cef2bbca880",
|
"reference": "327f93ee5cab54622077bcae721412b55be16720",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"divineomega/do-file-cache-psr-6": "^2.0",
|
"divineomega/do-file-cache-psr-6": "^2.0",
|
||||||
"guzzlehttp/guzzle": "^6.3",
|
"divineomega/psr-18-guzzle-adapter": "^1.0",
|
||||||
"paragonie/certainty": "^1|^2",
|
"nyholm/psr7": "^1.0",
|
||||||
"php": ">=5.6"
|
"paragonie/certainty": "^2.4",
|
||||||
|
"php": "^7.1||^8.0",
|
||||||
|
"php-http/discovery": "^1.6",
|
||||||
|
"psr/cache": "^1.0",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"psr/http-factory-implementation": "^1.0",
|
||||||
|
"psr/http-message": "^1.0",
|
||||||
|
"psr/http-message-implementation": "^1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"fzaninotto/faker": "^1.7",
|
"fzaninotto/faker": "^1.7",
|
||||||
|
"kriswallsmith/buzz": "^1.0",
|
||||||
"php-coveralls/php-coveralls": "^2.1",
|
"php-coveralls/php-coveralls": "^2.1",
|
||||||
"phpunit/phpunit": "^6.5",
|
"phpunit/phpunit": "^7.0||^8.0",
|
||||||
"vimeo/psalm": "^1"
|
"symfony/cache": "^4.2.12",
|
||||||
|
"vimeo/psalm": "^4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.0-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/PasswordExposedFunction.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"DivineOmega\\PasswordExposed\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"LGPL-3.0-only"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Jordan Hall",
|
||||||
|
"email": "jordan@hall05.co.uk"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Contributors",
|
||||||
|
"homepage": "https://github.com/DivineOmega/password_exposed/graphs/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "This PHP package provides a `password_exposed` helper function, that uses the haveibeenpwned.com API to check if a password has been exposed in a data breach.",
|
||||||
|
"homepage": "https://github.com/DivineOmega/password_exposed",
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/DivineOmega",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2021-04-20T09:34:23+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "divineomega/psr-18-guzzle-adapter",
|
||||||
|
"version": "v1.2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/DivineOmega/psr-18-guzzle-adapter.git",
|
||||||
|
"reference": "a2bdcddd4d4a17aac460e58d1e064e6bd2de5e57"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/DivineOmega/psr-18-guzzle-adapter/zipball/a2bdcddd4d4a17aac460e58d1e064e6bd2de5e57",
|
||||||
|
"reference": "a2bdcddd4d4a17aac460e58d1e064e6bd2de5e57",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"guzzlehttp/guzzle": "^6.3||^7.0",
|
||||||
|
"php": "^7.1||^8.0",
|
||||||
|
"psr/http-client": "^1.0"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"DivineOmega\\PasswordExposed\\": "src/"
|
"DivineOmega\\Psr18GuzzleAdapter\\": "src/"
|
||||||
},
|
}
|
||||||
"files": [
|
|
||||||
"src/PasswordExposedFunction.php"
|
|
||||||
]
|
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
"license": [
|
"license": [
|
||||||
|
@ -550,8 +613,14 @@
|
||||||
"email": "jordan@hall05.co.uk"
|
"email": "jordan@hall05.co.uk"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "This PHP package provides a `password_exposed` helper function, that uses the haveibeenpwned.com API to check if a password has been exposed in a data breach.",
|
"description": "PSR-18 adapter for the Guzzle HTTP client",
|
||||||
"time": "2019-01-25T12:00:28+00:00"
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/DivineOmega",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2021-04-20T08:50:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "enyo/dropzone",
|
"name": "enyo/dropzone",
|
||||||
|
@ -871,37 +940,47 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/guzzle",
|
"name": "guzzlehttp/guzzle",
|
||||||
"version": "6.5.8",
|
"version": "7.8.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/guzzle.git",
|
"url": "https://github.com/guzzle/guzzle.git",
|
||||||
"reference": "a52f0440530b54fa079ce76e8c5d196a42cad981"
|
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/a52f0440530b54fa079ce76e8c5d196a42cad981",
|
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||||
"reference": "a52f0440530b54fa079ce76e8c5d196a42cad981",
|
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"guzzlehttp/promises": "^1.0",
|
"guzzlehttp/promises": "^1.5.3 || ^2.0.1",
|
||||||
"guzzlehttp/psr7": "^1.9",
|
"guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
|
||||||
"php": ">=5.5",
|
"php": "^7.2.5 || ^8.0",
|
||||||
"symfony/polyfill-intl-idn": "^1.17"
|
"psr/http-client": "^1.0",
|
||||||
|
"symfony/deprecation-contracts": "^2.2 || ^3.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/http-client-implementation": "1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0",
|
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
|
||||||
"psr/log": "^1.1"
|
"php-http/message-factory": "^1.1",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15",
|
||||||
|
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
|
"ext-curl": "Required for CURL handler support",
|
||||||
|
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
|
||||||
"psr/log": "Required for using the Log middleware"
|
"psr/log": "Required for using the Log middleware"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"bamarni-bin": {
|
||||||
"dev-master": "6.5-dev"
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -954,13 +1033,14 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Guzzle is a PHP HTTP client library",
|
"description": "Guzzle is a PHP HTTP client library",
|
||||||
"homepage": "http://guzzlephp.org/",
|
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"client",
|
"client",
|
||||||
"curl",
|
"curl",
|
||||||
"framework",
|
"framework",
|
||||||
"http",
|
"http",
|
||||||
"http client",
|
"http client",
|
||||||
|
"psr-18",
|
||||||
|
"psr-7",
|
||||||
"rest",
|
"rest",
|
||||||
"web service"
|
"web service"
|
||||||
],
|
],
|
||||||
|
@ -978,7 +1058,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2022-06-20T22:16:07+00:00"
|
"time": "2023-12-03T20:35:24+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/oauth-subscriber",
|
"name": "guzzlehttp/oauth-subscriber",
|
||||||
|
@ -1037,29 +1117,33 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/promises",
|
"name": "guzzlehttp/promises",
|
||||||
"version": "1.5.3",
|
"version": "2.0.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/promises.git",
|
"url": "https://github.com/guzzle/promises.git",
|
||||||
"reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e"
|
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/67ab6e18aaa14d753cc148911d273f6e6cb6721e",
|
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||||
"reference": "67ab6e18aaa14d753cc148911d273f6e6cb6721e",
|
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.5"
|
"php": "^7.2.5 || ^8.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"symfony/phpunit-bridge": "^4.4 || ^5.1"
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"bamarni-bin": {
|
||||||
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
|
}
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"files": [
|
|
||||||
"src/functions_include.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"GuzzleHttp\\Promise\\": "src/"
|
"GuzzleHttp\\Promise\\": "src/"
|
||||||
}
|
}
|
||||||
|
@ -1108,42 +1192,48 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-05-21T12:31:43+00:00"
|
"time": "2023-12-03T20:19:20+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "guzzlehttp/psr7",
|
"name": "guzzlehttp/psr7",
|
||||||
"version": "1.9.1",
|
"version": "2.6.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/guzzle/psr7.git",
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b"
|
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||||
"reference": "e4490cabc77465aaee90b20cfc9a770f8c04be6b",
|
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=5.4.0",
|
"php": "^7.2.5 || ^8.0",
|
||||||
"psr/http-message": "~1.0",
|
"psr/http-factory": "^1.0",
|
||||||
"ralouphie/getallheaders": "^2.0.5 || ^3.0.0"
|
"psr/http-message": "^1.1 || ^2.0",
|
||||||
|
"ralouphie/getallheaders": "^3.0"
|
||||||
},
|
},
|
||||||
"provide": {
|
"provide": {
|
||||||
|
"psr/http-factory-implementation": "1.0",
|
||||||
"psr/http-message-implementation": "1.0"
|
"psr/http-message-implementation": "1.0"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ext-zlib": "*",
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
"phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.14 || ^7.5.20 || ^8.5.8 || ^9.3.10"
|
"http-interop/http-factory-tests": "^0.9",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||||
},
|
},
|
||||||
"suggest": {
|
"suggest": {
|
||||||
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||||
},
|
},
|
||||||
"type": "library",
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"bamarni-bin": {
|
||||||
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
|
}
|
||||||
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"files": [
|
|
||||||
"src/functions_include.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
"GuzzleHttp\\Psr7\\": "src/"
|
"GuzzleHttp\\Psr7\\": "src/"
|
||||||
}
|
}
|
||||||
|
@ -1182,6 +1272,11 @@
|
||||||
"name": "Tobias Schultze",
|
"name": "Tobias Schultze",
|
||||||
"email": "webmaster@tubo-world.de",
|
"email": "webmaster@tubo-world.de",
|
||||||
"homepage": "https://github.com/Tobion"
|
"homepage": "https://github.com/Tobion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://sagikazarmark.hu"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "PSR-7 message implementation that also provides common utility methods",
|
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||||
|
@ -1209,7 +1304,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-04-17T16:00:37+00:00"
|
"time": "2023-12-03T20:05:35+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "kornrunner/blurhash",
|
"name": "kornrunner/blurhash",
|
||||||
|
@ -2316,11 +2411,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "npm-asset/moment",
|
"name": "npm-asset/moment",
|
||||||
"version": "2.29.4",
|
"version": "2.30.1",
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "tar",
|
"type": "tar",
|
||||||
"url": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz",
|
"url": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
|
||||||
"shasum": "3dbe052889fe7c1b2ed966fcb3a77328964ef108"
|
"shasum": "f8c91c07b7a786e30c59926df530b4eac96974ae"
|
||||||
},
|
},
|
||||||
"type": "npm-asset-library",
|
"type": "npm-asset-library",
|
||||||
"extra": {
|
"extra": {
|
||||||
|
@ -2394,7 +2489,7 @@
|
||||||
"time",
|
"time",
|
||||||
"validate"
|
"validate"
|
||||||
],
|
],
|
||||||
"time": "2022-07-06T16:01:32+00:00"
|
"time": "2023-12-27T10:38:43+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "npm-asset/perfect-scrollbar",
|
"name": "npm-asset/perfect-scrollbar",
|
||||||
|
@ -2680,6 +2775,80 @@
|
||||||
],
|
],
|
||||||
"time": "2018-01-24T10:49:39+00:00"
|
"time": "2018-01-24T10:49:39+00:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "nyholm/psr7",
|
||||||
|
"version": "1.8.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/Nyholm/psr7.git",
|
||||||
|
"reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/Nyholm/psr7/zipball/aa5fc277a4f5508013d571341ade0c3886d4d00e",
|
||||||
|
"reference": "aa5fc277a4f5508013d571341ade0c3886d4d00e",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.2",
|
||||||
|
"psr/http-factory": "^1.0",
|
||||||
|
"psr/http-message": "^1.1 || ^2.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"php-http/message-factory-implementation": "1.0",
|
||||||
|
"psr/http-factory-implementation": "1.0",
|
||||||
|
"psr/http-message-implementation": "1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"http-interop/http-factory-tests": "^0.9",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"php-http/psr7-integration-tests": "^1.0",
|
||||||
|
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.4",
|
||||||
|
"symfony/error-handler": "^4.4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.8-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Nyholm\\Psr7\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Martijn van der Ven",
|
||||||
|
"email": "martijn@vanderven.se"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A fast PHP7 implementation of PSR-7",
|
||||||
|
"homepage": "https://tnyholm.se",
|
||||||
|
"keywords": [
|
||||||
|
"psr-17",
|
||||||
|
"psr-7"
|
||||||
|
],
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Zegnat",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/nyholm",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-11-13T09:31:12+00:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "paragonie/certainty",
|
"name": "paragonie/certainty",
|
||||||
"version": "v2.8.2",
|
"version": "v2.8.2",
|
||||||
|
@ -3083,17 +3252,91 @@
|
||||||
"time": "2018-01-25T20:47:17+00:00"
|
"time": "2018-01-25T20:47:17+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpseclib/phpseclib",
|
"name": "php-http/discovery",
|
||||||
"version": "3.0.34",
|
"version": "1.19.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/phpseclib/phpseclib.git",
|
"url": "https://github.com/php-http/discovery.git",
|
||||||
"reference": "56c79f16a6ae17e42089c06a2144467acc35348a"
|
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/56c79f16a6ae17e42089c06a2144467acc35348a",
|
"url": "https://api.github.com/repos/php-http/discovery/zipball/61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
|
||||||
"reference": "56c79f16a6ae17e42089c06a2144467acc35348a",
|
"reference": "61e1a1eb69c92741f5896d9e05fb8e9d7e8bb0cb",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-plugin-api": "^1.0|^2.0",
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"nyholm/psr7": "<1.0",
|
||||||
|
"zendframework/zend-diactoros": "*"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"php-http/async-client-implementation": "*",
|
||||||
|
"php-http/client-implementation": "*",
|
||||||
|
"psr/http-client-implementation": "*",
|
||||||
|
"psr/http-factory-implementation": "*",
|
||||||
|
"psr/http-message-implementation": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/composer": "^1.0.2|^2.0",
|
||||||
|
"graham-campbell/phpspec-skip-example-extension": "^5.0",
|
||||||
|
"php-http/httplug": "^1.0 || ^2.0",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
|
||||||
|
"symfony/phpunit-bridge": "^6.2"
|
||||||
|
},
|
||||||
|
"type": "composer-plugin",
|
||||||
|
"extra": {
|
||||||
|
"class": "Http\\Discovery\\Composer\\Plugin",
|
||||||
|
"plugin-optional": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Discovery\\": "src/"
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"src/Composer/Plugin.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"adapter",
|
||||||
|
"client",
|
||||||
|
"discovery",
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr17",
|
||||||
|
"psr7"
|
||||||
|
],
|
||||||
|
"time": "2023-11-30T16:49:05+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "phpseclib/phpseclib",
|
||||||
|
"version": "3.0.35",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/phpseclib/phpseclib.git",
|
||||||
|
"reference": "4b1827beabce71953ca479485c0ae9c51287f2fe"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/4b1827beabce71953ca479485c0ae9c51287f2fe",
|
||||||
|
"reference": "4b1827beabce71953ca479485c0ae9c51287f2fe",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -3186,7 +3429,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-11-27T11:13:31+00:00"
|
"time": "2023-12-29T01:59:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pragmarx/google2fa",
|
"name": "pragmarx/google2fa",
|
||||||
|
@ -3922,128 +4165,35 @@
|
||||||
"time": "2020-11-03T09:10:25+00:00"
|
"time": "2020-11-03T09:10:25+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-intl-idn",
|
"name": "symfony/deprecation-contracts",
|
||||||
"version": "v1.28.0",
|
"version": "v2.5.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||||
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d"
|
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d",
|
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
|
||||||
"reference": "ecaafce9f77234a6a449d29e49267ba10499116d",
|
"reference": "e8b495ea28c1d97b5e0c121748d6f9b53d075c66",
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1",
|
|
||||||
"symfony/polyfill-intl-normalizer": "^1.10",
|
|
||||||
"symfony/polyfill-php72": "^1.10"
|
|
||||||
},
|
|
||||||
"suggest": {
|
|
||||||
"ext-intl": "For best performance"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/polyfill",
|
|
||||||
"url": "https://github.com/symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Intl\\Idn\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Laurent Bassin",
|
|
||||||
"email": "laurent@bassin.info"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Trevor Rowbotham",
|
|
||||||
"email": "trevor.rowbotham@pm.me"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"idn",
|
|
||||||
"intl",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2023-01-26T09:30:37+00:00"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-intl-normalizer",
|
|
||||||
"version": "v1.28.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
|
||||||
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
|
|
||||||
"reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92",
|
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.1"
|
"php": ">=7.1"
|
||||||
},
|
},
|
||||||
"suggest": {
|
|
||||||
"ext-intl": "For best performance"
|
|
||||||
},
|
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.28-dev"
|
"dev-main": "2.5-dev"
|
||||||
},
|
},
|
||||||
"thanks": {
|
"thanks": {
|
||||||
"name": "symfony/polyfill",
|
"name": "symfony/contracts",
|
||||||
"url": "https://github.com/symfony/polyfill"
|
"url": "https://github.com/symfony/contracts"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"files": [
|
"files": [
|
||||||
"bootstrap.php"
|
"function.php"
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Intl\\Normalizer\\": ""
|
|
||||||
},
|
|
||||||
"classmap": [
|
|
||||||
"Resources/stubs"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
@ -4060,16 +4210,8 @@
|
||||||
"homepage": "https://symfony.com/contributors"
|
"homepage": "https://symfony.com/contributors"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Symfony polyfill for intl's Normalizer class and related functions",
|
"description": "A generic function and convention to trigger deprecation notices",
|
||||||
"homepage": "https://symfony.com",
|
"homepage": "https://symfony.com",
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"intl",
|
|
||||||
"normalizer",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"funding": [
|
"funding": [
|
||||||
{
|
{
|
||||||
"url": "https://symfony.com/sponsor",
|
"url": "https://symfony.com/sponsor",
|
||||||
|
@ -4084,7 +4226,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-01-26T09:26:14+00:00"
|
"time": "2022-01-02T09:53:40+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/polyfill-php56",
|
"name": "symfony/polyfill-php56",
|
||||||
|
@ -4151,79 +4293,6 @@
|
||||||
],
|
],
|
||||||
"time": "2020-10-23T14:02:19+00:00"
|
"time": "2020-10-23T14:02:19+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "symfony/polyfill-php72",
|
|
||||||
"version": "v1.28.0",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
|
||||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179",
|
|
||||||
"reference": "70f4aebd92afca2f865444d30a4d2151c13c3179",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"php": ">=7.1"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-main": "1.28-dev"
|
|
||||||
},
|
|
||||||
"thanks": {
|
|
||||||
"name": "symfony/polyfill",
|
|
||||||
"url": "https://github.com/symfony/polyfill"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"bootstrap.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Symfony\\Polyfill\\Php72\\": ""
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Nicolas Grekas",
|
|
||||||
"email": "p@tchwork.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Symfony Community",
|
|
||||||
"homepage": "https://symfony.com/contributors"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions",
|
|
||||||
"homepage": "https://symfony.com",
|
|
||||||
"keywords": [
|
|
||||||
"compatibility",
|
|
||||||
"polyfill",
|
|
||||||
"portable",
|
|
||||||
"shim"
|
|
||||||
],
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"url": "https://symfony.com/sponsor",
|
|
||||||
"type": "custom"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://github.com/fabpot",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
|
||||||
"type": "tidelift"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"time": "2023-01-26T09:26:14+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "ua-parser/uap-php",
|
"name": "ua-parser/uap-php",
|
||||||
"version": "v3.9.14",
|
"version": "v3.9.14",
|
||||||
|
@ -5024,25 +5093,27 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "nikic/php-parser",
|
"name": "nikic/php-parser",
|
||||||
"version": "v4.18.0",
|
"version": "v5.0.0",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||||
"reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999"
|
"reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999",
|
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
|
||||||
"reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999",
|
"reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
"ext-ctype": "*",
|
||||||
|
"ext-json": "*",
|
||||||
"ext-tokenizer": "*",
|
"ext-tokenizer": "*",
|
||||||
"php": ">=7.0"
|
"php": ">=7.4"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"ircmaxell/php-yacc": "^0.0.7",
|
"ircmaxell/php-yacc": "^0.0.7",
|
||||||
"phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0"
|
"phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
|
||||||
},
|
},
|
||||||
"bin": [
|
"bin": [
|
||||||
"bin/php-parse"
|
"bin/php-parse"
|
||||||
|
@ -5050,7 +5121,7 @@
|
||||||
"type": "library",
|
"type": "library",
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-master": "4.9-dev"
|
"dev-master": "5.0-dev"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
|
@ -5072,7 +5143,7 @@
|
||||||
"parser",
|
"parser",
|
||||||
"php"
|
"php"
|
||||||
],
|
],
|
||||||
"time": "2023-12-10T21:03:43+00:00"
|
"time": "2024-01-07T17:17:35+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phar-io/manifest",
|
"name": "phar-io/manifest",
|
||||||
|
@ -5179,23 +5250,23 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-code-coverage",
|
"name": "phpunit/php-code-coverage",
|
||||||
"version": "9.2.29",
|
"version": "9.2.30",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||||
"reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76"
|
"reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76",
|
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/ca2bd87d2f9215904682a9cb9bb37dda98e76089",
|
||||||
"reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76",
|
"reference": "ca2bd87d2f9215904682a9cb9bb37dda98e76089",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-dom": "*",
|
"ext-dom": "*",
|
||||||
"ext-libxml": "*",
|
"ext-libxml": "*",
|
||||||
"ext-xmlwriter": "*",
|
"ext-xmlwriter": "*",
|
||||||
"nikic/php-parser": "^4.15",
|
"nikic/php-parser": "^4.18 || ^5.0",
|
||||||
"php": ">=7.3",
|
"php": ">=7.3",
|
||||||
"phpunit/php-file-iterator": "^3.0.3",
|
"phpunit/php-file-iterator": "^3.0.3",
|
||||||
"phpunit/php-text-template": "^2.0.2",
|
"phpunit/php-text-template": "^2.0.2",
|
||||||
|
@ -5248,7 +5319,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2023-09-19T04:57:46+00:00"
|
"time": "2023-12-22T06:47:57+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "phpunit/php-file-iterator",
|
"name": "phpunit/php-file-iterator",
|
||||||
|
@ -5800,20 +5871,20 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/complexity",
|
"name": "sebastian/complexity",
|
||||||
"version": "2.0.2",
|
"version": "2.0.3",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/complexity.git",
|
"url": "https://github.com/sebastianbergmann/complexity.git",
|
||||||
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88"
|
"reference": "25f207c40d62b8b7aa32f5ab026c53561964053a"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88",
|
"url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a",
|
||||||
"reference": "739b35e53379900cc9ac327b2147867b8b6efd88",
|
"reference": "25f207c40d62b8b7aa32f5ab026c53561964053a",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"nikic/php-parser": "^4.7",
|
"nikic/php-parser": "^4.18 || ^5.0",
|
||||||
"php": ">=7.3"
|
"php": ">=7.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
@ -5849,7 +5920,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-10-26T15:52:27+00:00"
|
"time": "2023-12-22T06:19:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/diff",
|
"name": "sebastian/diff",
|
||||||
|
@ -6107,20 +6178,20 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/lines-of-code",
|
"name": "sebastian/lines-of-code",
|
||||||
"version": "1.0.3",
|
"version": "1.0.4",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
|
"url": "https://github.com/sebastianbergmann/lines-of-code.git",
|
||||||
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc"
|
"reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc",
|
"url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5",
|
||||||
"reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc",
|
"reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"nikic/php-parser": "^4.6",
|
"nikic/php-parser": "^4.18 || ^5.0",
|
||||||
"php": ">=7.3"
|
"php": ">=7.3"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
|
@ -6156,7 +6227,7 @@
|
||||||
"type": "github"
|
"type": "github"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-11-28T06:42:11+00:00"
|
"time": "2023-12-22T06:20:34+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "sebastian/object-enumerator",
|
"name": "sebastian/object-enumerator",
|
||||||
|
|
|
@ -58,7 +58,7 @@ class User extends \Asika\SimpleConsole\Console
|
||||||
console user - Modify user settings per console commands.
|
console user - Modify user settings per console commands.
|
||||||
Usage
|
Usage
|
||||||
bin/console user password <nickname> [<password>] [-h|--help|-?] [-v]
|
bin/console user password <nickname> [<password>] [-h|--help|-?] [-v]
|
||||||
bin/console user add [<name> [<nickname> [<email> [<language>]]]] [-h|--help|-?] [-v]
|
bin/console user add [<name> [<nickname> [<email> [<language> [<avatar_url>]]]]] [-h|--help|-?] [-v]
|
||||||
bin/console user delete [<nickname>] [-y] [-h|--help|-?] [-v]
|
bin/console user delete [<nickname>] [-y] [-h|--help|-?] [-v]
|
||||||
bin/console user allow [<nickname>] [-h|--help|-?] [-v]
|
bin/console user allow [<nickname>] [-h|--help|-?] [-v]
|
||||||
bin/console user deny [<nickname>] [-h|--help|-?] [-v]
|
bin/console user deny [<nickname>] [-h|--help|-?] [-v]
|
||||||
|
@ -228,10 +228,11 @@ HELP;
|
||||||
*/
|
*/
|
||||||
private function addUser()
|
private function addUser()
|
||||||
{
|
{
|
||||||
$name = $this->getArgument(1);
|
$name = $this->getArgument(1);
|
||||||
$nick = $this->getArgument(2);
|
$nick = $this->getArgument(2);
|
||||||
$email = $this->getArgument(3);
|
$email = $this->getArgument(3);
|
||||||
$lang = $this->getArgument(4);
|
$lang = $this->getArgument(4);
|
||||||
|
$avatar = $this->getArgument(5);
|
||||||
|
|
||||||
if (empty($name)) {
|
if (empty($name)) {
|
||||||
$this->out($this->l10n->t('Enter user name: '));
|
$this->out($this->l10n->t('Enter user name: '));
|
||||||
|
@ -262,10 +263,15 @@ HELP;
|
||||||
$lang = CliPrompt::prompt();
|
$lang = CliPrompt::prompt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (empty($avatar)) {
|
||||||
|
$this->out($this->l10n->t('Enter URL of an image to use as avatar (optional): '));
|
||||||
|
$avatar = CliPrompt::prompt();
|
||||||
|
}
|
||||||
|
|
||||||
if (empty($lang)) {
|
if (empty($lang)) {
|
||||||
return UserModel::createMinimal($name, $email, $nick);
|
return UserModel::createMinimal($name, $email, $nick);
|
||||||
} else {
|
} else {
|
||||||
return UserModel::createMinimal($name, $email, $nick, $lang);
|
return UserModel::createMinimal($name, $email, $nick, $lang, $avatar);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -80,7 +80,7 @@ class Avatar
|
||||||
return $fields;
|
return $fields;
|
||||||
}
|
}
|
||||||
|
|
||||||
$img_str = $fetchResult->getBody();
|
$img_str = $fetchResult->getBodyString();
|
||||||
if (empty($img_str)) {
|
if (empty($img_str)) {
|
||||||
Logger::debug('Avatar is invalid', ['avatar' => $avatar]);
|
Logger::debug('Avatar is invalid', ['avatar' => $avatar]);
|
||||||
return $fields;
|
return $fields;
|
||||||
|
|
|
@ -383,7 +383,7 @@ class Item
|
||||||
'url' => $item['author-link'],
|
'url' => $item['author-link'],
|
||||||
'alias' => $item['author-alias'],
|
'alias' => $item['author-alias'],
|
||||||
];
|
];
|
||||||
$profile_link = Contact::magicLinkByContact($author, $item['author-link']);
|
$profile_link = Contact::magicLinkByContact($author, Contact::getProfileLink($author));
|
||||||
if (strpos($profile_link, 'contact/redir/') === 0) {
|
if (strpos($profile_link, 'contact/redir/') === 0) {
|
||||||
$status_link = $profile_link . '?' . http_build_query(['url' => $item['author-link'] . '/status']);
|
$status_link = $profile_link . '?' . http_build_query(['url' => $item['author-link'] . '/status']);
|
||||||
$photos_link = $profile_link . '?' . http_build_query(['url' => $item['author-link'] . '/photos']);
|
$photos_link = $profile_link . '?' . http_build_query(['url' => $item['author-link'] . '/photos']);
|
||||||
|
|
|
@ -120,7 +120,7 @@ class OEmbed
|
||||||
['https://www.youtube.com/', 'https://player.vimeo.com/'], $href);
|
['https://www.youtube.com/', 'https://player.vimeo.com/'], $href);
|
||||||
$result = DI::httpClient()->fetchFull($href . '&maxwidth=' . $a->getThemeInfoValue('videowidth'));
|
$result = DI::httpClient()->fetchFull($href . '&maxwidth=' . $a->getThemeInfoValue('videowidth'));
|
||||||
if ($result->getReturnCode() === 200) {
|
if ($result->getReturnCode() === 200) {
|
||||||
$json_string = $result->getBody();
|
$json_string = $result->getBodyString();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,19 +45,21 @@ class Hovercard
|
||||||
$actions = [];
|
$actions = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$contact_url = Contact::getProfileLink($contact);
|
||||||
|
|
||||||
// Move the contact data to the profile array so we can deliver it to
|
// Move the contact data to the profile array so we can deliver it to
|
||||||
$tpl = Renderer::getMarkupTemplate('hovercard.tpl');
|
$tpl = Renderer::getMarkupTemplate('hovercard.tpl');
|
||||||
return Renderer::replaceMacros($tpl, [
|
return Renderer::replaceMacros($tpl, [
|
||||||
'$profile' => [
|
'$profile' => [
|
||||||
'name' => $contact['name'],
|
'name' => $contact['name'],
|
||||||
'nick' => $contact['nick'],
|
'nick' => $contact['nick'],
|
||||||
'addr' => $contact['addr'] ?: $contact['url'],
|
'addr' => $contact['addr'] ?: $contact_url,
|
||||||
'thumb' => Contact::getThumb($contact),
|
'thumb' => Contact::getThumb($contact),
|
||||||
'url' => Contact::magicLinkByContact($contact),
|
'url' => Contact::magicLinkByContact($contact),
|
||||||
'nurl' => $contact['nurl'],
|
'nurl' => $contact['nurl'],
|
||||||
'location' => $contact['location'],
|
'location' => $contact['location'],
|
||||||
'about' => $contact['about'],
|
'about' => $contact['about'],
|
||||||
'network_link' => Strings::formatNetworkName($contact['network'], $contact['url']),
|
'network_link' => Strings::formatNetworkName($contact['network'], $contact_url),
|
||||||
'tags' => $contact['keywords'],
|
'tags' => $contact['keywords'],
|
||||||
'bd' => $contact['bd'] <= DBA::NULL_DATE ? '' : $contact['bd'],
|
'bd' => $contact['bd'] <= DBA::NULL_DATE ? '' : $contact['bd'],
|
||||||
'account_type' => Contact::getAccountType($contact['contact-type']),
|
'account_type' => Contact::getAccountType($contact['contact-type']),
|
||||||
|
|
|
@ -50,11 +50,7 @@ class VCard
|
||||||
Logger::warning('Incomplete contact', ['contact' => $contact ?? []]);
|
Logger::warning('Incomplete contact', ['contact' => $contact ?? []]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Network::isValidHttpUrl($contact['url']) && Network::isValidHttpUrl($contact['alias'])) {
|
$contact_url = Contact::getProfileLink($contact);
|
||||||
$contact_url = $contact['alias'];
|
|
||||||
} else {
|
|
||||||
$contact_url = $contact['url'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($contact['network'] != '') {
|
if ($contact['network'] != '') {
|
||||||
$network_link = Strings::formatNetworkName($contact['network'], $contact_url);
|
$network_link = Strings::formatNetworkName($contact['network'], $contact_url);
|
||||||
|
|
|
@ -263,7 +263,7 @@ class ErrorHandler
|
||||||
public function handleError(int $code, string $message, string $file = '', int $line = 0, ?array $context = []): bool
|
public function handleError(int $code, string $message, string $file = '', int $line = 0, ?array $context = []): bool
|
||||||
{
|
{
|
||||||
if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) {
|
if ($this->handleOnlyReportedErrors && !(error_reporting() & $code)) {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries
|
// fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries
|
||||||
|
|
|
@ -234,7 +234,7 @@ class Search
|
||||||
$p = $page > 1 ? 'p=' . $page : '';
|
$p = $page > 1 ? 'p=' . $page : '';
|
||||||
$curlResult = DI::httpClient()->get(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get(self::getGlobalDirectory() . '/search/people?' . $p . '&q=' . urlencode($search), HttpClientAccept::JSON);
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
$searchResult = json_decode($curlResult->getBody(), true);
|
$searchResult = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!empty($searchResult['profiles'])) {
|
if (!empty($searchResult['profiles'])) {
|
||||||
// Converting Directory Search results into contact-looking records
|
// Converting Directory Search results into contact-looking records
|
||||||
$return = array_map(function ($result) {
|
$return = array_map(function ($result) {
|
||||||
|
|
|
@ -70,12 +70,12 @@ class ExternalResource implements ICanReadFromStorage
|
||||||
}
|
}
|
||||||
if (!empty($fetchResult) && $fetchResult->isSuccess()) {
|
if (!empty($fetchResult) && $fetchResult->isSuccess()) {
|
||||||
$this->logger->debug('Got picture', ['Content-Type' => $fetchResult->getHeader('Content-Type'), 'uid' => $data->uid, 'url' => $data->url]);
|
$this->logger->debug('Got picture', ['Content-Type' => $fetchResult->getHeader('Content-Type'), 'uid' => $data->uid, 'url' => $data->url]);
|
||||||
return $fetchResult->getBody();
|
return $fetchResult->getBodyString();
|
||||||
} else {
|
} else {
|
||||||
if (empty($fetchResult)) {
|
if (empty($fetchResult)) {
|
||||||
throw new ReferenceStorageException(sprintf('External resource failed to get %s', $reference));
|
throw new ReferenceStorageException(sprintf('External resource failed to get %s', $reference));
|
||||||
} else {
|
} else {
|
||||||
throw new ReferenceStorageException(sprintf('External resource failed to get %s', $reference), $fetchResult->getReturnCode(), new Exception($fetchResult->getBody()));
|
throw new ReferenceStorageException(sprintf('External resource failed to get %s', $reference), $fetchResult->getReturnCode(), new Exception($fetchResult->getBodyString()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -230,7 +230,7 @@ class System
|
||||||
* @param int $offset How many calls to shave off the top of the stack, for example if
|
* @param int $offset How many calls to shave off the top of the stack, for example if
|
||||||
* this is called from a centralized method that isn't relevant to the callstack
|
* this is called from a centralized method that isn't relevant to the callstack
|
||||||
* @param bool $full If enabled, the callstack is not compacted
|
* @param bool $full If enabled, the callstack is not compacted
|
||||||
* @param array $exclude
|
* @param array $exclude
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function callstack(int $depth = 4, int $offset = 0, bool $full = false, array $exclude = []): string
|
public static function callstack(int $depth = 4, int $offset = 0, bool $full = false, array $exclude = []): string
|
||||||
|
|
|
@ -198,11 +198,11 @@ class APContact
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$curlResult = HTTPSignature::fetchRaw($url);
|
$curlResult = HTTPSignature::fetchRaw($url);
|
||||||
$failed = empty($curlResult) || empty($curlResult->getBody()) ||
|
$failed = empty($curlResult) || empty($curlResult->getBodyString()) ||
|
||||||
(!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410));
|
(!$curlResult->isSuccess() && ($curlResult->getReturnCode() != 410));
|
||||||
|
|
||||||
if (!$failed) {
|
if (!$failed) {
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
$failed = empty($data) || !is_array($data);
|
$failed = empty($data) || !is_array($data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2305,7 +2305,7 @@ class Contact
|
||||||
try {
|
try {
|
||||||
$fetchResult = HTTPSignature::fetchRaw($avatar, 0, [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::IMAGE]]);
|
$fetchResult = HTTPSignature::fetchRaw($avatar, 0, [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::IMAGE]]);
|
||||||
|
|
||||||
$img_str = $fetchResult->getBody();
|
$img_str = $fetchResult->getBodyString();
|
||||||
if (!empty($img_str)) {
|
if (!empty($img_str)) {
|
||||||
$image = new Image($img_str, Images::getMimeTypeByData($img_str));
|
$image = new Image($img_str, Images::getMimeTypeByData($img_str));
|
||||||
if ($image->isValid()) {
|
if ($image->isValid()) {
|
||||||
|
@ -3495,6 +3495,21 @@ class Contact
|
||||||
return array_column($contacts, 'id');
|
return array_column($contacts, 'id');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return the link to the profile
|
||||||
|
*
|
||||||
|
* @param array $contact
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getProfileLink(array $contact): string
|
||||||
|
{
|
||||||
|
if (!empty($contact['alias']) && Network::isValidHttpUrl($contact['alias']) && (($contact['network'] ?? '') != Protocol::DFRN)) {
|
||||||
|
return $contact['alias'];
|
||||||
|
} else {
|
||||||
|
return $contact['url'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a magic link to authenticate remote visitors
|
* Returns a magic link to authenticate remote visitors
|
||||||
*
|
*
|
||||||
|
@ -3553,7 +3568,7 @@ class Contact
|
||||||
*/
|
*/
|
||||||
public static function magicLinkByContact(array $contact, string $url = ''): string
|
public static function magicLinkByContact(array $contact, string $url = ''): string
|
||||||
{
|
{
|
||||||
$destination = $url ?: (!Network::isValidHttpUrl($contact['url']) && !empty($contact['alias']) && Network::isValidHttpUrl($contact['alias']) ? $contact['alias'] : $contact['url']);
|
$destination = $url ?: self::getProfileLink($contact);
|
||||||
|
|
||||||
if (!DI::userSession()->isAuthenticated()) {
|
if (!DI::userSession()->isAuthenticated()) {
|
||||||
return $destination;
|
return $destination;
|
||||||
|
|
|
@ -649,7 +649,7 @@ class GServer
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
$json = json_decode($curlResult->getBody(), true);
|
$json = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!empty($json) && is_array($json)) {
|
if (!empty($json) && is_array($json)) {
|
||||||
$data = self::fetchDataFromSystemActor($json, $serverdata);
|
$data = self::fetchDataFromSystemActor($json, $serverdata);
|
||||||
$serverdata = $data['server'];
|
$serverdata = $data['server'];
|
||||||
|
@ -657,7 +657,7 @@ class GServer
|
||||||
if (!$html_fetched && !in_array($serverdata['detection-method'], [self::DETECT_SYSTEM_ACTOR, self::DETECT_AP_COLLECTION])) {
|
if (!$html_fetched && !in_array($serverdata['detection-method'], [self::DETECT_SYSTEM_ACTOR, self::DETECT_AP_COLLECTION])) {
|
||||||
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML);
|
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML);
|
||||||
}
|
}
|
||||||
} elseif (!$html_fetched && (strlen($curlResult->getBody()) < 1000)) {
|
} elseif (!$html_fetched && (strlen($curlResult->getBodyString()) < 1000)) {
|
||||||
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML);
|
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -667,7 +667,7 @@ class GServer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
|
if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) {
|
||||||
self::setFailureByUrl($url);
|
self::setFailureByUrl($url);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -677,7 +677,7 @@ class GServer
|
||||||
$serverdata['network'] = Protocol::ACTIVITYPUB;
|
$serverdata['network'] = Protocol::ACTIVITYPUB;
|
||||||
$serverdata['platform'] = 'threads';
|
$serverdata['platform'] = 'threads';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($serverdata['network'] == Protocol::PHANTOM) || in_array($serverdata['detection-method'], self::DETECT_UNSPECIFIC)) {
|
if (($serverdata['network'] == Protocol::PHANTOM) || in_array($serverdata['detection-method'], self::DETECT_UNSPECIFIC)) {
|
||||||
$serverdata = self::detectMastodonAlikes($url, $serverdata);
|
$serverdata = self::detectMastodonAlikes($url, $serverdata);
|
||||||
}
|
}
|
||||||
|
@ -872,7 +872,7 @@ class GServer
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!is_array($data)) {
|
if (!is_array($data)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -967,7 +967,7 @@ class GServer
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1059,7 +1059,7 @@ class GServer
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$nodeinfo = json_decode($httpResult->getBody(), true);
|
$nodeinfo = json_decode($httpResult->getBodyString(), true);
|
||||||
|
|
||||||
if (!is_array($nodeinfo) || empty($nodeinfo['links'])) {
|
if (!is_array($nodeinfo) || empty($nodeinfo['links'])) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -1114,7 +1114,7 @@ class GServer
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$nodeinfo = json_decode($curlResult->getBody(), true);
|
$nodeinfo = json_decode($curlResult->getBodyString(), true);
|
||||||
|
|
||||||
if (!is_array($nodeinfo)) {
|
if (!is_array($nodeinfo)) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -1214,7 +1214,7 @@ class GServer
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$nodeinfo = json_decode($curlResult->getBody(), true);
|
$nodeinfo = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!is_array($nodeinfo)) {
|
if (!is_array($nodeinfo)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -1331,7 +1331,7 @@ class GServer
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$nodeinfo = json_decode($httpResult->getBody(), true);
|
$nodeinfo = json_decode($httpResult->getBodyString(), true);
|
||||||
|
|
||||||
if (!is_array($nodeinfo)) {
|
if (!is_array($nodeinfo)) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -1434,7 +1434,7 @@ class GServer
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1587,11 +1587,11 @@ class GServer
|
||||||
{
|
{
|
||||||
$name = 'nomad';
|
$name = 'nomad';
|
||||||
$curlResult = DI::httpClient()->get($url . '/manifest', 'application/manifest+json');
|
$curlResult = DI::httpClient()->get($url . '/manifest', 'application/manifest+json');
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $name;
|
return $name;
|
||||||
}
|
}
|
||||||
|
@ -1608,11 +1608,11 @@ class GServer
|
||||||
private static function getNomadVersion(string $url): string
|
private static function getNomadVersion(string $url): string
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/z/1.0/version', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/z/1.0/version', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
@ -1634,7 +1634,7 @@ class GServer
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$xrd = XML::parseString($curlResult->getBody(), true);
|
$xrd = XML::parseString($curlResult->getBodyString(), true);
|
||||||
if (!is_object($xrd)) {
|
if (!is_object($xrd)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1733,7 +1733,7 @@ class GServer
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1763,7 +1763,7 @@ class GServer
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1786,11 +1786,11 @@ class GServer
|
||||||
private static function detectPeertube(string $url, array $serverdata): array
|
private static function detectPeertube(string $url, array $serverdata): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/v1/config', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/v1/config', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1834,11 +1834,11 @@ class GServer
|
||||||
private static function detectNextcloud(string $url, array $serverdata, bool $validHostMeta): array
|
private static function detectNextcloud(string $url, array $serverdata, bool $validHostMeta): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/status.php', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/status.php', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1870,11 +1870,11 @@ class GServer
|
||||||
private static function fetchWeeklyUsage(string $url, array $serverdata): array
|
private static function fetchWeeklyUsage(string $url, array $serverdata): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/v1/instance/activity', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/v1/instance/activity', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1910,11 +1910,11 @@ class GServer
|
||||||
private static function detectMastodonAlikes(string $url, array $serverdata): array
|
private static function detectMastodonAlikes(string $url, array $serverdata): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/v1/instance', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/v1/instance', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data)) {
|
if (empty($data)) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -1982,11 +1982,11 @@ class GServer
|
||||||
private static function detectHubzilla(string $url, array $serverdata): array
|
private static function detectHubzilla(string $url, array $serverdata): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/statusnet/config.json', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/statusnet/config.json', HttpClientAccept::JSON);
|
||||||
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
|
if (!$curlResult->isSuccess() || ($curlResult->getBodyString() == '')) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data) || empty($data['site'])) {
|
if (empty($data) || empty($data['site'])) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -2079,11 +2079,11 @@ class GServer
|
||||||
{
|
{
|
||||||
// Test for GNU Social
|
// Test for GNU Social
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/gnusocial/version.json', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/gnusocial/version.json', HttpClientAccept::JSON);
|
||||||
if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
|
if ($curlResult->isSuccess() && ($curlResult->getBodyString() != '{"error":"not implemented"}') &&
|
||||||
($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
|
($curlResult->getBodyString() != '') && (strlen($curlResult->getBodyString()) < 30)) {
|
||||||
$serverdata['platform'] = 'gnusocial';
|
$serverdata['platform'] = 'gnusocial';
|
||||||
// Remove junk that some GNU Social servers return
|
// Remove junk that some GNU Social servers return
|
||||||
$serverdata['version'] = str_replace(chr(239) . chr(187) . chr(191), '', $curlResult->getBody());
|
$serverdata['version'] = str_replace(chr(239) . chr(187) . chr(191), '', $curlResult->getBodyString());
|
||||||
$serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']);
|
$serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']);
|
||||||
$serverdata['version'] = trim($serverdata['version'], '"');
|
$serverdata['version'] = trim($serverdata['version'], '"');
|
||||||
$serverdata['network'] = Protocol::OSTATUS;
|
$serverdata['network'] = Protocol::OSTATUS;
|
||||||
|
@ -2097,11 +2097,11 @@ class GServer
|
||||||
|
|
||||||
// Test for Statusnet
|
// Test for Statusnet
|
||||||
$curlResult = DI::httpClient()->get($url . '/api/statusnet/version.json', HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($url . '/api/statusnet/version.json', HttpClientAccept::JSON);
|
||||||
if ($curlResult->isSuccess() && ($curlResult->getBody() != '{"error":"not implemented"}') &&
|
if ($curlResult->isSuccess() && ($curlResult->getBodyString() != '{"error":"not implemented"}') &&
|
||||||
($curlResult->getBody() != '') && (strlen($curlResult->getBody()) < 30)) {
|
($curlResult->getBodyString() != '') && (strlen($curlResult->getBodyString()) < 30)) {
|
||||||
|
|
||||||
// Remove junk that some GNU Social servers return
|
// Remove junk that some GNU Social servers return
|
||||||
$serverdata['version'] = str_replace(chr(239).chr(187).chr(191), '', $curlResult->getBody());
|
$serverdata['version'] = str_replace(chr(239).chr(187).chr(191), '', $curlResult->getBodyString());
|
||||||
$serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']);
|
$serverdata['version'] = str_replace(["\r", "\n", "\t"], '', $serverdata['version']);
|
||||||
$serverdata['version'] = trim($serverdata['version'], '"');
|
$serverdata['version'] = trim($serverdata['version'], '"');
|
||||||
|
|
||||||
|
@ -2148,7 +2148,7 @@ class GServer
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
|
||||||
$data = json_decode($curlResult->getBody(), true);
|
$data = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($data) || empty($data['version'])) {
|
if (empty($data) || empty($data['version'])) {
|
||||||
return $serverdata;
|
return $serverdata;
|
||||||
}
|
}
|
||||||
|
@ -2466,7 +2466,7 @@ class GServer
|
||||||
$api = 'https://instances.social/api/1.0/instances/list?count=0';
|
$api = 'https://instances.social/api/1.0/instances/list?count=0';
|
||||||
$curlResult = DI::httpClient()->get($api, HttpClientAccept::JSON, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . $accesstoken]]]);
|
$curlResult = DI::httpClient()->get($api, HttpClientAccept::JSON, [HttpClientOptions::HEADERS => ['Authorization' => ['Bearer ' . $accesstoken]]]);
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
$servers = json_decode($curlResult->getBody(), true);
|
$servers = json_decode($curlResult->getBodyString(), true);
|
||||||
|
|
||||||
if (!empty($servers['instances'])) {
|
if (!empty($servers['instances'])) {
|
||||||
foreach ($servers['instances'] as $server) {
|
foreach ($servers['instances'] as $server) {
|
||||||
|
|
|
@ -597,7 +597,7 @@ class Photo
|
||||||
if (!empty($image_url)) {
|
if (!empty($image_url)) {
|
||||||
$ret = DI::httpClient()->get($image_url, HttpClientAccept::IMAGE);
|
$ret = DI::httpClient()->get($image_url, HttpClientAccept::IMAGE);
|
||||||
Logger::debug('Got picture', ['Content-Type' => $ret->getHeader('Content-Type'), 'url' => $image_url]);
|
Logger::debug('Got picture', ['Content-Type' => $ret->getHeader('Content-Type'), 'url' => $image_url]);
|
||||||
$img_str = $ret->getBody();
|
$img_str = $ret->getBodyString();
|
||||||
$type = $ret->getContentType();
|
$type = $ret->getContentType();
|
||||||
} else {
|
} else {
|
||||||
$img_str = '';
|
$img_str = '';
|
||||||
|
@ -1047,7 +1047,7 @@ class Photo
|
||||||
if (!empty($image_url)) {
|
if (!empty($image_url)) {
|
||||||
$ret = DI::httpClient()->get($image_url, HttpClientAccept::IMAGE);
|
$ret = DI::httpClient()->get($image_url, HttpClientAccept::IMAGE);
|
||||||
Logger::debug('Got picture', ['Content-Type' => $ret->getHeader('Content-Type'), 'url' => $image_url]);
|
Logger::debug('Got picture', ['Content-Type' => $ret->getHeader('Content-Type'), 'url' => $image_url]);
|
||||||
$img_str = $ret->getBody();
|
$img_str = $ret->getBodyString();
|
||||||
$type = $ret->getContentType();
|
$type = $ret->getContentType();
|
||||||
} else {
|
} else {
|
||||||
$img_str = '';
|
$img_str = '';
|
||||||
|
|
|
@ -135,7 +135,7 @@ class Link
|
||||||
}
|
}
|
||||||
$fields = ['mimetype' => $curlResult->getHeader('Content-Type')[0]];
|
$fields = ['mimetype' => $curlResult->getHeader('Content-Type')[0]];
|
||||||
|
|
||||||
$img_str = $curlResult->getBody();
|
$img_str = $curlResult->getBodyString();
|
||||||
$image = new Image($img_str, Images::getMimeTypeByData($img_str));
|
$image = new Image($img_str, Images::getMimeTypeByData($img_str));
|
||||||
if ($image->isValid()) {
|
if ($image->isValid()) {
|
||||||
$fields['mimetype'] = $image->getType();
|
$fields['mimetype'] = $image->getType();
|
||||||
|
|
|
@ -208,13 +208,17 @@ class Media
|
||||||
$filetype = !empty($media['mimetype']) ? strtolower(current(explode('/', $media['mimetype']))) : '';
|
$filetype = !empty($media['mimetype']) ? strtolower(current(explode('/', $media['mimetype']))) : '';
|
||||||
|
|
||||||
if (($media['type'] == self::IMAGE) || ($filetype == 'image')) {
|
if (($media['type'] == self::IMAGE) || ($filetype == 'image')) {
|
||||||
$imagedata = Images::getInfoFromURLCached($media['url']);
|
$imagedata = Images::getInfoFromURLCached($media['url'], empty($media['description']));
|
||||||
if ($imagedata) {
|
if ($imagedata) {
|
||||||
$media['mimetype'] = $imagedata['mime'];
|
$media['mimetype'] = $imagedata['mime'];
|
||||||
$media['size'] = $imagedata['size'];
|
$media['size'] = $imagedata['size'];
|
||||||
$media['width'] = $imagedata[0];
|
$media['width'] = $imagedata[0];
|
||||||
$media['height'] = $imagedata[1];
|
$media['height'] = $imagedata[1];
|
||||||
$media['blurhash'] = $imagedata['blurhash'] ?? null;
|
$media['blurhash'] = $imagedata['blurhash'] ?? null;
|
||||||
|
if (!empty($imagedata['description']) && empty($media['description'])) {
|
||||||
|
$media['description'] = $imagedata['description'];
|
||||||
|
Logger::debug('Detected text for image', $media);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Logger::notice('No image data', ['media' => $media]);
|
Logger::notice('No image data', ['media' => $media]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1393,7 +1393,7 @@ class User
|
||||||
$curlResult = DI::httpClient()->get($photo, HttpClientAccept::IMAGE);
|
$curlResult = DI::httpClient()->get($photo, HttpClientAccept::IMAGE);
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
Logger::debug('Got picture', ['Content-Type' => $curlResult->getHeader('Content-Type'), 'url' => $photo]);
|
Logger::debug('Got picture', ['Content-Type' => $curlResult->getHeader('Content-Type'), 'url' => $photo]);
|
||||||
$img_str = $curlResult->getBody();
|
$img_str = $curlResult->getBodyString();
|
||||||
$type = $curlResult->getContentType();
|
$type = $curlResult->getContentType();
|
||||||
} else {
|
} else {
|
||||||
$img_str = '';
|
$img_str = '';
|
||||||
|
@ -1563,16 +1563,17 @@ class User
|
||||||
/**
|
/**
|
||||||
* Creates a new user based on a minimal set and sends an email to this user
|
* Creates a new user based on a minimal set and sends an email to this user
|
||||||
*
|
*
|
||||||
* @param string $name The user's name
|
* @param string $name The user's name
|
||||||
* @param string $email The user's email address
|
* @param string $email The user's email address
|
||||||
* @param string $nick The user's nick name
|
* @param string $nick The user's nick name
|
||||||
* @param string $lang The user's language (default is english)
|
* @param string $lang The user's language (default is english)
|
||||||
|
* @param string $avatar URL to an image to use as avatar (default is to prompt user at first login)
|
||||||
* @return bool True, if the user was created successfully
|
* @return bool True, if the user was created successfully
|
||||||
* @throws HTTPException\InternalServerErrorException
|
* @throws HTTPException\InternalServerErrorException
|
||||||
* @throws ErrorException
|
* @throws ErrorException
|
||||||
* @throws ImagickException
|
* @throws ImagickException
|
||||||
*/
|
*/
|
||||||
public static function createMinimal(string $name, string $email, string $nick, string $lang = L10n::DEFAULT): bool
|
public static function createMinimal(string $name, string $email, string $nick, string $lang = L10n::DEFAULT, string $avatar = ''): bool
|
||||||
{
|
{
|
||||||
if (empty($name) ||
|
if (empty($name) ||
|
||||||
empty($email) ||
|
empty($email) ||
|
||||||
|
@ -1585,7 +1586,8 @@ class User
|
||||||
'email' => $email,
|
'email' => $email,
|
||||||
'nickname' => $nick,
|
'nickname' => $nick,
|
||||||
'verified' => 1,
|
'verified' => 1,
|
||||||
'language' => $lang
|
'language' => $lang,
|
||||||
|
'photo' => $avatar
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$user = $result['user'];
|
$user = $result['user'];
|
||||||
|
@ -1607,8 +1609,8 @@ class User
|
||||||
You may also wish to add some basic information to your default profile
|
You may also wish to add some basic information to your default profile
|
||||||
(on the "Profiles" page) so that other people can easily find you.
|
(on the "Profiles" page) so that other people can easily find you.
|
||||||
|
|
||||||
We recommend adding a profile photo, adding some profile "keywords"
|
We recommend adding a profile photo, adding some profile "keywords"
|
||||||
(very useful in making new friends) - and perhaps what country you live in;
|
(very useful in making new friends) - and perhaps what country you live in;
|
||||||
if you do not wish to be more specific than that.
|
if you do not wish to be more specific than that.
|
||||||
|
|
||||||
We fully respect your right to privacy, and none of these items are necessary.
|
We fully respect your right to privacy, and none of these items are necessary.
|
||||||
|
|
|
@ -132,7 +132,7 @@ class MatchInterests extends BaseModule
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$entries = $this->parseContacts(json_decode($result->getBody()), $entries, $limit);
|
$entries = $this->parseContacts(json_decode($result->getBodyString()), $entries, $limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (empty($entries)) {
|
if (empty($entries)) {
|
||||||
|
|
|
@ -132,8 +132,8 @@ class Community extends Timeline
|
||||||
$pager = new BoundariesPager(
|
$pager = new BoundariesPager(
|
||||||
$this->l10n,
|
$this->l10n,
|
||||||
$this->args->getQueryString(),
|
$this->args->getQueryString(),
|
||||||
$items[0]['received'],
|
$items[array_key_first($items)]['received'],
|
||||||
$items[count($items) - 1]['received'],
|
$items[array_key_last($items)]['received'],
|
||||||
$this->itemsPerPage
|
$this->itemsPerPage
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -155,7 +155,7 @@ class Magic extends BaseModule
|
||||||
System::externalRedirect($dest);
|
System::externalRedirect($dest);
|
||||||
}
|
}
|
||||||
|
|
||||||
$j = json_decode($curlResult->getBody(), true);
|
$j = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($j) || !$j['success']) {
|
if (empty($j) || !$j['success']) {
|
||||||
$this->logger->notice('Invalid JSON, redirecting to destination.', ['json' => $j, 'dest' => $dest]);
|
$this->logger->notice('Invalid JSON, redirecting to destination.', ['json' => $j, 'dest' => $dest]);
|
||||||
$this->app->redirect($dest);
|
$this->app->redirect($dest);
|
||||||
|
|
|
@ -154,7 +154,7 @@ class PubSubHubBub extends \Friendica\BaseModule
|
||||||
$separator = parse_url($hub_callback, PHP_URL_QUERY) === null ? '?' : '&';
|
$separator = parse_url($hub_callback, PHP_URL_QUERY) === null ? '?' : '&';
|
||||||
|
|
||||||
$fetchResult = $this->httpClient->fetchFull($hub_callback . $separator . $params);
|
$fetchResult = $this->httpClient->fetchFull($hub_callback . $separator . $params);
|
||||||
$body = $fetchResult->getBody();
|
$body = $fetchResult->getBodyString();
|
||||||
$returnCode = $fetchResult->getReturnCode();
|
$returnCode = $fetchResult->getReturnCode();
|
||||||
|
|
||||||
// give up if the HTTP return code wasn't a success (2xx)
|
// give up if the HTTP return code wasn't a success (2xx)
|
||||||
|
|
|
@ -96,7 +96,7 @@ class Subscribe extends \Friendica\BaseModule
|
||||||
return $o . $this->t('Couldn\'t fetch friends for contact.');
|
return $o . $this->t('Couldn\'t fetch friends for contact.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$friends = $curlResult->getBody();
|
$friends = $curlResult->getBodyString();
|
||||||
if (empty($friends)) {
|
if (empty($friends)) {
|
||||||
$this->pConfig->delete($uid, 'ostatus', 'legacy_contact');
|
$this->pConfig->delete($uid, 'ostatus', 'legacy_contact');
|
||||||
return $o . $this->t('Couldn\'t fetch following contacts.');
|
return $o . $this->t('Couldn\'t fetch following contacts.');
|
||||||
|
|
|
@ -85,7 +85,7 @@ class Proxy extends BaseModule
|
||||||
// Fetch the content with the local user
|
// Fetch the content with the local user
|
||||||
try {
|
try {
|
||||||
$fetchResult = HTTPSignature::fetchRaw($request['url'], DI::userSession()->getLocalUserId(), [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::IMAGE], 'timeout' => 10]);
|
$fetchResult = HTTPSignature::fetchRaw($request['url'], DI::userSession()->getLocalUserId(), [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::IMAGE], 'timeout' => 10]);
|
||||||
$img_str = $fetchResult->getBody();
|
$img_str = $fetchResult->getBodyString();
|
||||||
|
|
||||||
if (!$fetchResult->isSuccess() || empty($img_str)) {
|
if (!$fetchResult->isSuccess() || empty($img_str)) {
|
||||||
Logger::notice('Error fetching image', ['image' => $request['url'], 'return' => $fetchResult->getReturnCode(), 'empty' => empty($img_str)]);
|
Logger::notice('Error fetching image', ['image' => $request['url'], 'return' => $fetchResult->getReturnCode(), 'empty' => empty($img_str)]);
|
||||||
|
|
|
@ -97,10 +97,9 @@ interface ICanHandleHttpResponses
|
||||||
/**
|
/**
|
||||||
* Getter for body
|
* Getter for body
|
||||||
*
|
*
|
||||||
* @see MessageInterface::getBody()
|
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public function getBody();
|
public function getBodyString();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return boolean
|
* @return boolean
|
||||||
|
|
|
@ -73,7 +73,7 @@ class HttpClient implements ICanSendHttpRequests
|
||||||
throw new \InvalidArgumentException('Unable to retrieve the host in URL: ' . $url);
|
throw new \InvalidArgumentException('Unable to retrieve the host in URL: ' . $url);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!filter_var($host, FILTER_VALIDATE_IP) && !@dns_get_record($host . '.', DNS_A + DNS_AAAA)) {
|
if(!filter_var($host, FILTER_VALIDATE_IP) && !@dns_get_record($host . '.', DNS_A) && !@dns_get_record($host . '.', DNS_AAAA)) {
|
||||||
$this->logger->debug('URL cannot be resolved.', ['url' => $url]);
|
$this->logger->debug('URL cannot be resolved.', ['url' => $url]);
|
||||||
$this->profiler->stopRecording();
|
$this->profiler->stopRecording();
|
||||||
return CurlResult::createErrorCurl($this->logger, $url);
|
return CurlResult::createErrorCurl($this->logger, $url);
|
||||||
|
@ -271,7 +271,7 @@ class HttpClient implements ICanSendHttpRequests
|
||||||
{
|
{
|
||||||
$ret = $this->fetchFull($url, $accept_content, $timeout, $cookiejar);
|
$ret = $this->fetchFull($url, $accept_content, $timeout, $cookiejar);
|
||||||
|
|
||||||
return $ret->getBody();
|
return $ret->getBodyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -330,7 +330,7 @@ class CurlResult implements ICanHandleHttpResponses
|
||||||
}
|
}
|
||||||
|
|
||||||
/** {@inheritDoc} */
|
/** {@inheritDoc} */
|
||||||
public function getBody(): string
|
public function getBodyString(): string
|
||||||
{
|
{
|
||||||
return $this->body;
|
return $this->body;
|
||||||
}
|
}
|
||||||
|
|
|
@ -163,8 +163,7 @@ class GuzzleResponse extends Response implements ICanHandleHttpResponses, Respon
|
||||||
return $this->isTimeout;
|
return $this->isTimeout;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// @todo - fix mismatching use of "getBody()" as string here and parent "getBody()" as streaminterface
|
public function getBodyString(): string
|
||||||
public function getBody(): string
|
|
||||||
{
|
{
|
||||||
return (string) parent::getBody();
|
return (string) parent::getBody();
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,7 +225,7 @@ class Probe
|
||||||
$curlResult = DI::httpClient()->get($ssl_url, HttpClientAccept::XRD_XML, [HttpClientOptions::TIMEOUT => $xrd_timeout]);
|
$curlResult = DI::httpClient()->get($ssl_url, HttpClientAccept::XRD_XML, [HttpClientOptions::TIMEOUT => $xrd_timeout]);
|
||||||
$ssl_connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0);
|
$ssl_connection_error = ($curlResult->getErrorNumber() == CURLE_COULDNT_CONNECT) || ($curlResult->getReturnCode() == 0);
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
$xrd = XML::parseString($xml, true);
|
$xrd = XML::parseString($xml, true);
|
||||||
if (!empty($url)) {
|
if (!empty($url)) {
|
||||||
$host_url = 'https://' . $host;
|
$host_url = 'https://' . $host;
|
||||||
|
@ -250,7 +250,7 @@ class Probe
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
$xrd = XML::parseString($xml, true);
|
$xrd = XML::parseString($xml, true);
|
||||||
$host_url = 'http://'.$host;
|
$host_url = 'http://'.$host;
|
||||||
}
|
}
|
||||||
|
@ -426,7 +426,7 @@ class Probe
|
||||||
|
|
||||||
if (!empty($data['baseurl']) && empty($data['gsid'])) {
|
if (!empty($data['baseurl']) && empty($data['gsid'])) {
|
||||||
$data['gsid'] = GServer::getID($data['baseurl']);
|
$data['gsid'] = GServer::getID($data['baseurl']);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure that local connections always are DFRN
|
// Ensure that local connections always are DFRN
|
||||||
if (($network == '') && ($data['network'] != Protocol::PHANTOM) && (self::ownHost($data['baseurl'] ?? '') || self::ownHost($data['url']))) {
|
if (($network == '') && ($data['network'] != Protocol::PHANTOM) && (self::ownHost($data['baseurl'] ?? '') || self::ownHost($data['url']))) {
|
||||||
|
@ -459,7 +459,7 @@ class Probe
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$body = $curlResult->getBody();
|
$body = $curlResult->getBodyString();
|
||||||
if (empty($body)) {
|
if (empty($body)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -865,7 +865,7 @@ class Probe
|
||||||
if ($curlResult->isTimeout()) {
|
if ($curlResult->isTimeout()) {
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
$content = $curlResult->getBody();
|
$content = $curlResult->getBodyString();
|
||||||
if (!$content) {
|
if (!$content) {
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
@ -971,7 +971,7 @@ class Probe
|
||||||
self::$isTimeout = true;
|
self::$isTimeout = true;
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$data = $curlResult->getBody();
|
$data = $curlResult->getBodyString();
|
||||||
|
|
||||||
$webfinger = json_decode($data, true);
|
$webfinger = json_decode($data, true);
|
||||||
if (!empty($webfinger)) {
|
if (!empty($webfinger)) {
|
||||||
|
@ -1040,7 +1040,7 @@ class Probe
|
||||||
self::$isTimeout = true;
|
self::$isTimeout = true;
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
$content = $curlResult->getBody();
|
$content = $curlResult->getBodyString();
|
||||||
if (!$content) {
|
if (!$content) {
|
||||||
Logger::info('Empty body', ['url' => $noscrape_url]);
|
Logger::info('Empty body', ['url' => $noscrape_url]);
|
||||||
return $data;
|
return $data;
|
||||||
|
@ -1303,7 +1303,7 @@ class Probe
|
||||||
self::$isTimeout = true;
|
self::$isTimeout = true;
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$content = $curlResult->getBody();
|
$content = $curlResult->getBodyString();
|
||||||
if (empty($content)) {
|
if (empty($content)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
@ -1580,7 +1580,7 @@ class Probe
|
||||||
return $short ? false : [];
|
return $short ? false : [];
|
||||||
}
|
}
|
||||||
Logger::debug('Fetched public key', ['Content-Type' => $curlResult->getHeader('Content-Type'), 'url' => $pubkey]);
|
Logger::debug('Fetched public key', ['Content-Type' => $curlResult->getHeader('Content-Type'), 'url' => $pubkey]);
|
||||||
$pubkey = $curlResult->getBody();
|
$pubkey = $curlResult->getBodyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -1612,7 +1612,7 @@ class Probe
|
||||||
self::$isTimeout = true;
|
self::$isTimeout = true;
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
$feed = $curlResult->getBody();
|
$feed = $curlResult->getBodyString();
|
||||||
$feed_data = Feed::import($feed);
|
$feed_data = Feed::import($feed);
|
||||||
if (!$feed_data) {
|
if (!$feed_data) {
|
||||||
return [];
|
return [];
|
||||||
|
@ -1660,12 +1660,12 @@ class Probe
|
||||||
private static function pumpioProfileData(string $profile_link, string $baseurl): array
|
private static function pumpioProfileData(string $profile_link, string $baseurl): array
|
||||||
{
|
{
|
||||||
$curlResult = DI::httpClient()->get($profile_link, HttpClientAccept::HTML);
|
$curlResult = DI::httpClient()->get($profile_link, HttpClientAccept::HTML);
|
||||||
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
|
if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
if (!@$doc->loadHTML($curlResult->getBody())) {
|
if (!@$doc->loadHTML($curlResult->getBodyString())) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1887,7 +1887,7 @@ class Probe
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$feed = $curlResult->getBody();
|
$feed = $curlResult->getBodyString();
|
||||||
$feed_data = Feed::import($feed);
|
$feed_data = Feed::import($feed);
|
||||||
|
|
||||||
if (!$feed_data) {
|
if (!$feed_data) {
|
||||||
|
@ -2112,8 +2112,8 @@ class Probe
|
||||||
|
|
||||||
$curlResult = DI::httpClient()->get($gserver['noscrape'] . '/' . $data['nick'], HttpClientAccept::JSON);
|
$curlResult = DI::httpClient()->get($gserver['noscrape'] . '/' . $data['nick'], HttpClientAccept::JSON);
|
||||||
|
|
||||||
if ($curlResult->isSuccess() && !empty($curlResult->getBody())) {
|
if ($curlResult->isSuccess() && !empty($curlResult->getBodyString())) {
|
||||||
$noscrape = json_decode($curlResult->getBody(), true);
|
$noscrape = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!empty($noscrape) && !empty($noscrape['updated'])) {
|
if (!empty($noscrape) && !empty($noscrape['updated'])) {
|
||||||
return DateTimeFormat::utc($noscrape['updated'], DateTimeFormat::MYSQL);
|
return DateTimeFormat::utc($noscrape['updated'], DateTimeFormat::MYSQL);
|
||||||
}
|
}
|
||||||
|
@ -2187,12 +2187,12 @@ class Probe
|
||||||
{
|
{
|
||||||
// Search for the newest entry in the feed
|
// Search for the newest entry in the feed
|
||||||
$curlResult = DI::httpClient()->get($data['poll'], HttpClientAccept::ATOM_XML);
|
$curlResult = DI::httpClient()->get($data['poll'], HttpClientAccept::ATOM_XML);
|
||||||
if (!$curlResult->isSuccess() || !$curlResult->getBody()) {
|
if (!$curlResult->isSuccess() || !$curlResult->getBodyString()) {
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
@$doc->loadXML($curlResult->getBody());
|
@$doc->loadXML($curlResult->getBodyString());
|
||||||
|
|
||||||
$xpath = new DOMXPath($doc);
|
$xpath = new DOMXPath($doc);
|
||||||
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
|
$xpath->registerNamespace('atom', 'http://www.w3.org/2005/Atom');
|
||||||
|
|
|
@ -614,7 +614,7 @@ class Processor
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
$object = json_decode($curlResult->getBody(), true);
|
$object = json_decode($curlResult->getBodyString(), true);
|
||||||
if (!empty($object)) {
|
if (!empty($object)) {
|
||||||
$activity = JsonLD::compact($object);
|
$activity = JsonLD::compact($object);
|
||||||
if (JsonLD::fetchElement($activity, '@type') == 'as:Tombstone') {
|
if (JsonLD::fetchElement($activity, '@type') == 'as:Tombstone') {
|
||||||
|
@ -1584,7 +1584,7 @@ class Processor
|
||||||
return '';
|
return '';
|
||||||
}
|
}
|
||||||
|
|
||||||
$body = $curlResult->getBody();
|
$body = $curlResult->getBodyString();
|
||||||
if (!$curlResult->isSuccess() || empty($body)) {
|
if (!$curlResult->isSuccess() || empty($body)) {
|
||||||
if (in_array($curlResult->getReturnCode(), [403, 404, 406, 410])) {
|
if (in_array($curlResult->getReturnCode(), [403, 404, 406, 410])) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -1012,7 +1012,7 @@ class DFRN
|
||||||
$content_type = ($public_batch ? 'application/magic-envelope+xml' : 'application/json');
|
$content_type = ($public_batch ? 'application/magic-envelope+xml' : 'application/json');
|
||||||
|
|
||||||
$postResult = DI::httpClient()->post($dest_url, $envelope, ['Content-Type' => $content_type]);
|
$postResult = DI::httpClient()->post($dest_url, $envelope, ['Content-Type' => $content_type]);
|
||||||
$xml = $postResult->getBody();
|
$xml = $postResult->getBodyString();
|
||||||
|
|
||||||
$curl_stat = $postResult->getReturnCode();
|
$curl_stat = $postResult->getReturnCode();
|
||||||
if (!empty($contact['gsid']) && ($postResult->isTimeout() || empty($curl_stat))) {
|
if (!empty($contact['gsid']) && ($postResult->isTimeout() || empty($curl_stat))) {
|
||||||
|
|
|
@ -736,7 +736,7 @@ class OStatus
|
||||||
$stored = false;
|
$stored = false;
|
||||||
$curlResult = DI::httpClient()->get($related, HttpClientAccept::ATOM_XML);
|
$curlResult = DI::httpClient()->get($related, HttpClientAccept::ATOM_XML);
|
||||||
|
|
||||||
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
|
if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -745,12 +745,12 @@ class OStatus
|
||||||
if ($curlResult->inHeader('Content-Type') &&
|
if ($curlResult->inHeader('Content-Type') &&
|
||||||
in_array('application/atom+xml', $curlResult->getHeader('Content-Type'))) {
|
in_array('application/atom+xml', $curlResult->getHeader('Content-Type'))) {
|
||||||
Logger::info('Directly fetched XML for URI ' . $related_uri);
|
Logger::info('Directly fetched XML for URI ' . $related_uri);
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($xml == '') {
|
if ($xml == '') {
|
||||||
$doc = new DOMDocument();
|
$doc = new DOMDocument();
|
||||||
if (!@$doc->loadHTML($curlResult->getBody())) {
|
if (!@$doc->loadHTML($curlResult->getBodyString())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
$xpath = new DOMXPath($doc);
|
$xpath = new DOMXPath($doc);
|
||||||
|
@ -770,7 +770,7 @@ class OStatus
|
||||||
|
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
Logger::info('Fetched XML for URI ' . $related_uri);
|
Logger::info('Fetched XML for URI ' . $related_uri);
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -782,7 +782,7 @@ class OStatus
|
||||||
|
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
Logger::info('GNU Social workaround to fetch XML for URI ' . $related_uri);
|
Logger::info('GNU Social workaround to fetch XML for URI ' . $related_uri);
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -793,7 +793,7 @@ class OStatus
|
||||||
|
|
||||||
if ($curlResult->isSuccess()) {
|
if ($curlResult->isSuccess()) {
|
||||||
Logger::info('GNU Social workaround 2 to fetch XML for URI ' . $related_uri);
|
Logger::info('GNU Social workaround 2 to fetch XML for URI ' . $related_uri);
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -250,7 +250,7 @@ class ExAuth
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$json = @json_decode($curlResult->getBody());
|
$json = @json_decode($curlResult->getBodyString());
|
||||||
if (!is_object($json)) {
|
if (!is_object($json)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -433,12 +433,12 @@ class HTTPSignature
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
|
if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) {
|
||||||
Logger::debug('Fetching was unsuccessful', ['url' => $request, 'return-code' => $curlResult->getReturnCode(), 'error-number' => $curlResult->getErrorNumber(), 'error' => $curlResult->getError()]);
|
Logger::debug('Fetching was unsuccessful', ['url' => $request, 'return-code' => $curlResult->getReturnCode(), 'error-number' => $curlResult->getErrorNumber(), 'error' => $curlResult->getError()]);
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
$content = json_decode($curlResult->getBody(), true);
|
$content = json_decode($curlResult->getBodyString(), true);
|
||||||
if (empty($content) || !is_array($content)) {
|
if (empty($content) || !is_array($content)) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
|
|
||||||
namespace Friendica\Util;
|
namespace Friendica\Util;
|
||||||
|
|
||||||
|
use Friendica\Core\Hook;
|
||||||
use Friendica\Core\Logger;
|
use Friendica\Core\Logger;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Photo;
|
use Friendica\Model\Photo;
|
||||||
|
@ -181,10 +182,11 @@ class Images
|
||||||
* Gets info array from given URL, cached data has priority
|
* Gets info array from given URL, cached data has priority
|
||||||
*
|
*
|
||||||
* @param string $url
|
* @param string $url
|
||||||
|
* @param bool $ocr
|
||||||
* @return array Info
|
* @return array Info
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public static function getInfoFromURLCached(string $url): array
|
public static function getInfoFromURLCached(string $url, bool $ocr = false): array
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
@ -192,12 +194,12 @@ class Images
|
||||||
return $data;
|
return $data;
|
||||||
}
|
}
|
||||||
|
|
||||||
$cacheKey = 'getInfoFromURL:' . sha1($url);
|
$cacheKey = 'getInfoFromURL:' . sha1($url . $ocr);
|
||||||
|
|
||||||
$data = DI::cache()->get($cacheKey);
|
$data = DI::cache()->get($cacheKey);
|
||||||
|
|
||||||
if (empty($data) || !is_array($data)) {
|
if (empty($data) || !is_array($data)) {
|
||||||
$data = self::getInfoFromURL($url);
|
$data = self::getInfoFromURL($url, $ocr);
|
||||||
|
|
||||||
DI::cache()->set($cacheKey, $data);
|
DI::cache()->set($cacheKey, $data);
|
||||||
}
|
}
|
||||||
|
@ -209,10 +211,11 @@ class Images
|
||||||
* Gets info from URL uncached
|
* Gets info from URL uncached
|
||||||
*
|
*
|
||||||
* @param string $url
|
* @param string $url
|
||||||
|
* @param bool $ocr
|
||||||
* @return array Info array
|
* @return array Info array
|
||||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||||
*/
|
*/
|
||||||
public static function getInfoFromURL(string $url): array
|
public static function getInfoFromURL(string $url, bool $ocr = false): array
|
||||||
{
|
{
|
||||||
$data = [];
|
$data = [];
|
||||||
|
|
||||||
|
@ -257,6 +260,14 @@ class Images
|
||||||
|
|
||||||
if ($image->isValid()) {
|
if ($image->isValid()) {
|
||||||
$data['blurhash'] = $image->getBlurHash();
|
$data['blurhash'] = $image->getBlurHash();
|
||||||
|
|
||||||
|
if ($ocr) {
|
||||||
|
$media = ['img_str' => $img_str];
|
||||||
|
Hook::callAll('ocr-detection', $media);
|
||||||
|
if (!empty($media['description'])) {
|
||||||
|
$data['description'] = $media['description'];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$data['size'] = $filesize;
|
$data['size'] = $filesize;
|
||||||
|
|
|
@ -238,7 +238,7 @@ class ParseUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::CONTENT_LENGTH => 1000000]);
|
$curlResult = DI::httpClient()->get($url, HttpClientAccept::HTML, [HttpClientOptions::CONTENT_LENGTH => 1000000]);
|
||||||
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
|
if (!$curlResult->isSuccess() || empty($curlResult->getBodyString())) {
|
||||||
Logger::info('Empty body or error when fetching', ['url' => $url, 'success' => $curlResult->isSuccess(), 'code' => $curlResult->getReturnCode()]);
|
Logger::info('Empty body or error when fetching', ['url' => $url, 'success' => $curlResult->isSuccess(), 'code' => $curlResult->getReturnCode()]);
|
||||||
return $siteinfo;
|
return $siteinfo;
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ class ParseUrl
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$body = $curlResult->getBody();
|
$body = $curlResult->getBodyString();
|
||||||
|
|
||||||
if ($do_oembed) {
|
if ($do_oembed) {
|
||||||
$oembed_data = OEmbed::fetchURL($url, false, false);
|
$oembed_data = OEmbed::fetchURL($url, false, false);
|
||||||
|
|
|
@ -70,7 +70,7 @@ class CheckRelMeProfileLink
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$content = $curlResult->getBody();
|
$content = $curlResult->getBodyString();
|
||||||
if (!$content) {
|
if (!$content) {
|
||||||
Logger::notice('Empty body of the fetched homepage link). Cannot verify the relation to profile of UID %s.', ['uid' => $uid, 'owner homepage' => $owner['homepage']]);
|
Logger::notice('Empty body of the fetched homepage link). Cannot verify the relation to profile of UID %s.', ['uid' => $uid, 'owner homepage' => $owner['homepage']]);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -172,7 +172,7 @@ class OnePoll
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$xml = $curlResult->getBody();
|
$xml = $curlResult->getBodyString();
|
||||||
if (empty($xml)) {
|
if (empty($xml)) {
|
||||||
Logger::notice('Empty content', ['id' => $contact['id'], 'url' => $contact['poll']]);
|
Logger::notice('Empty content', ['id' => $contact['id'], 'url' => $contact['poll']]);
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -45,12 +45,12 @@ class UpdateServerPeers
|
||||||
}
|
}
|
||||||
|
|
||||||
$ret = DI::httpClient()->get($url . '/api/v1/instance/peers', HttpClientAccept::JSON);
|
$ret = DI::httpClient()->get($url . '/api/v1/instance/peers', HttpClientAccept::JSON);
|
||||||
if (!$ret->isSuccess() || empty($ret->getBody())) {
|
if (!$ret->isSuccess() || empty($ret->getBodyString())) {
|
||||||
Logger::info('Server is not reachable or does not offer the "peers" endpoint', ['url' => $url]);
|
Logger::info('Server is not reachable or does not offer the "peers" endpoint', ['url' => $url]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$peers = json_decode($ret->getBody());
|
$peers = json_decode($ret->getBodyString());
|
||||||
if (empty($peers) || !is_array($peers)) {
|
if (empty($peers) || !is_array($peers)) {
|
||||||
Logger::info('Server does not have any peers listed', ['url' => $url]);
|
Logger::info('Server does not have any peers listed', ['url' => $url]);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -47,7 +47,7 @@ class CurlResultTest extends TestCase
|
||||||
self::assertFalse($curlResult->isTimeout());
|
self::assertFalse($curlResult->isTimeout());
|
||||||
self::assertFalse($curlResult->isRedirectUrl());
|
self::assertFalse($curlResult->isRedirectUrl());
|
||||||
self::assertSame($headerArray, $curlResult->getHeaders());
|
self::assertSame($headerArray, $curlResult->getHeaders());
|
||||||
self::assertSame($body, $curlResult->getBody());
|
self::assertSame($body, $curlResult->getBodyString());
|
||||||
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
||||||
self::assertSame('https://test.local', $curlResult->getUrl());
|
self::assertSame('https://test.local', $curlResult->getUrl());
|
||||||
self::assertSame('https://test.local', $curlResult->getRedirectUrl());
|
self::assertSame('https://test.local', $curlResult->getRedirectUrl());
|
||||||
|
@ -76,7 +76,7 @@ class CurlResultTest extends TestCase
|
||||||
self::assertFalse($curlResult->isTimeout());
|
self::assertFalse($curlResult->isTimeout());
|
||||||
self::assertTrue($curlResult->isRedirectUrl());
|
self::assertTrue($curlResult->isRedirectUrl());
|
||||||
self::assertSame($headerArray, $curlResult->getHeaders());
|
self::assertSame($headerArray, $curlResult->getHeaders());
|
||||||
self::assertSame($body, $curlResult->getBody());
|
self::assertSame($body, $curlResult->getBodyString());
|
||||||
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
||||||
self::assertSame('https://test.local/test/it', $curlResult->getUrl());
|
self::assertSame('https://test.local/test/it', $curlResult->getUrl());
|
||||||
self::assertSame('https://test.other/test/it', $curlResult->getRedirectUrl());
|
self::assertSame('https://test.other/test/it', $curlResult->getRedirectUrl());
|
||||||
|
@ -103,7 +103,7 @@ class CurlResultTest extends TestCase
|
||||||
self::assertTrue($curlResult->isTimeout());
|
self::assertTrue($curlResult->isTimeout());
|
||||||
self::assertFalse($curlResult->isRedirectUrl());
|
self::assertFalse($curlResult->isRedirectUrl());
|
||||||
self::assertSame($headerArray, $curlResult->getHeaders());
|
self::assertSame($headerArray, $curlResult->getHeaders());
|
||||||
self::assertSame($body, $curlResult->getBody());
|
self::assertSame($body, $curlResult->getBodyString());
|
||||||
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
||||||
self::assertSame('https://test.local/test/it', $curlResult->getRedirectUrl());
|
self::assertSame('https://test.local/test/it', $curlResult->getRedirectUrl());
|
||||||
self::assertSame('Tested error', $curlResult->getError());
|
self::assertSame('Tested error', $curlResult->getError());
|
||||||
|
@ -131,7 +131,7 @@ class CurlResultTest extends TestCase
|
||||||
self::assertFalse($curlResult->isTimeout());
|
self::assertFalse($curlResult->isTimeout());
|
||||||
self::assertTrue($curlResult->isRedirectUrl());
|
self::assertTrue($curlResult->isRedirectUrl());
|
||||||
self::assertSame($headerArray, $curlResult->getHeaders());
|
self::assertSame($headerArray, $curlResult->getHeaders());
|
||||||
self::assertSame($body, $curlResult->getBody());
|
self::assertSame($body, $curlResult->getBodyString());
|
||||||
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
self::assertSame('text/html; charset=utf-8', $curlResult->getContentType());
|
||||||
self::assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
|
self::assertSame('https://test.local/test/it?key=value', $curlResult->getUrl());
|
||||||
self::assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl());
|
self::assertSame('https://test.other/some/?key=value', $curlResult->getRedirectUrl());
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: 2024.03-dev\n"
|
"Project-Id-Version: 2024.03-dev\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2024-01-07 19:57+0000\n"
|
"POT-Creation-Date: 2024-01-15 06:14+0000\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -953,7 +953,7 @@ msgstr ""
|
||||||
msgid "All pending post updates are done."
|
msgid "All pending post updates are done."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:158 src/Console/User.php:245
|
#: src/Console/User.php:158 src/Console/User.php:246
|
||||||
msgid "Enter user nickname: "
|
msgid "Enter user nickname: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -980,44 +980,48 @@ msgstr ""
|
||||||
msgid "Password changed."
|
msgid "Password changed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:237
|
#: src/Console/User.php:238
|
||||||
msgid "Enter user name: "
|
msgid "Enter user name: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:253
|
#: src/Console/User.php:254
|
||||||
msgid "Enter user email address: "
|
msgid "Enter user email address: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:261
|
#: src/Console/User.php:262
|
||||||
msgid "Enter a language (optional): "
|
msgid "Enter a language (optional): "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:286
|
#: src/Console/User.php:267
|
||||||
|
msgid "Enter URL of an image to use as avatar (optional): "
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: src/Console/User.php:292
|
||||||
msgid "User is not pending."
|
msgid "User is not pending."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:318
|
#: src/Console/User.php:324
|
||||||
msgid "User has already been marked for deletion."
|
msgid "User has already been marked for deletion."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:323
|
#: src/Console/User.php:329
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Type \"yes\" to delete %s"
|
msgid "Type \"yes\" to delete %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:325
|
#: src/Console/User.php:331
|
||||||
msgid "Deletion aborted."
|
msgid "Deletion aborted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:450
|
#: src/Console/User.php:456
|
||||||
msgid "Enter category: "
|
msgid "Enter category: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:460
|
#: src/Console/User.php:466
|
||||||
msgid "Enter key: "
|
msgid "Enter key: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Console/User.php:494
|
#: src/Console/User.php:500
|
||||||
msgid "Enter value: "
|
msgid "Enter value: "
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1377,7 +1381,7 @@ msgstr ""
|
||||||
msgid "Public post"
|
msgid "Public post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Conversation.php:426 src/Content/Widget/VCard.php:131
|
#: src/Content/Conversation.php:426 src/Content/Widget/VCard.php:127
|
||||||
#: src/Model/Profile.php:483 src/Module/Admin/Logs/View.php:92
|
#: src/Model/Profile.php:483 src/Module/Admin/Logs/View.php:92
|
||||||
#: src/Module/Post/Edit.php:181
|
#: src/Module/Post/Edit.php:181
|
||||||
msgid "Message"
|
msgid "Message"
|
||||||
|
@ -1766,7 +1770,7 @@ msgstr ""
|
||||||
msgid "Create new group"
|
msgid "Create new group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:332 src/Model/Item.php:3205
|
#: src/Content/Item.php:332 src/Model/Item.php:3234
|
||||||
msgid "event"
|
msgid "event"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1774,7 +1778,7 @@ msgstr ""
|
||||||
msgid "status"
|
msgid "status"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Item.php:341 src/Model/Item.php:3207
|
#: src/Content/Item.php:341 src/Model/Item.php:3236
|
||||||
#: src/Module/Post/Tag/Add.php:123
|
#: src/Module/Post/Tag/Add.php:123
|
||||||
msgid "photo"
|
msgid "photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2176,39 +2180,39 @@ msgstr ""
|
||||||
msgid "last"
|
msgid "last"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:751 src/Content/Text/BBCode.php:1696
|
#: src/Content/Text/BBCode.php:755 src/Content/Text/BBCode.php:1700
|
||||||
#: src/Content/Text/BBCode.php:1697
|
#: src/Content/Text/BBCode.php:1701
|
||||||
msgid "Image/photo"
|
msgid "Image/photo"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:969
|
#: src/Content/Text/BBCode.php:973
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
|
"<a href=\"%1$s\" target=\"_blank\" rel=\"noopener noreferrer\">%2$s</a> %3$s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:994 src/Model/Item.php:3938
|
#: src/Content/Text/BBCode.php:998 src/Model/Item.php:3967
|
||||||
#: src/Model/Item.php:3944 src/Model/Item.php:3945
|
#: src/Model/Item.php:3973 src/Model/Item.php:3974
|
||||||
msgid "Link to source"
|
msgid "Link to source"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1603 src/Content/Text/HTML.php:904
|
#: src/Content/Text/BBCode.php:1607 src/Content/Text/HTML.php:904
|
||||||
msgid "Click to open/close"
|
msgid "Click to open/close"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1636
|
#: src/Content/Text/BBCode.php:1640
|
||||||
msgid "$1 wrote:"
|
msgid "$1 wrote:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1701 src/Content/Text/BBCode.php:1702
|
#: src/Content/Text/BBCode.php:1705 src/Content/Text/BBCode.php:1706
|
||||||
msgid "Encrypted content"
|
msgid "Encrypted content"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1957
|
#: src/Content/Text/BBCode.php:1961
|
||||||
msgid "Invalid source protocol"
|
msgid "Invalid source protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/BBCode.php:1976
|
#: src/Content/Text/BBCode.php:1980
|
||||||
msgid "Invalid link protocol"
|
msgid "Invalid link protocol"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -2220,7 +2224,7 @@ msgstr ""
|
||||||
msgid "The end"
|
msgid "The end"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Text/HTML.php:859 src/Content/Widget/VCard.php:127
|
#: src/Content/Text/HTML.php:859 src/Content/Widget/VCard.php:123
|
||||||
#: src/Model/Profile.php:477 src/Module/Contact/Profile.php:471
|
#: src/Model/Profile.php:477 src/Module/Contact/Profile.php:471
|
||||||
msgid "Follow"
|
msgid "Follow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2420,27 +2424,27 @@ msgstr[1] ""
|
||||||
msgid "More Trending Tags"
|
msgid "More Trending Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:106 src/Model/Contact.php:1209
|
#: src/Content/Widget/VCard.php:102 src/Model/Contact.php:1209
|
||||||
#: src/Model/Profile.php:461
|
#: src/Model/Profile.php:461
|
||||||
msgid "Post to group"
|
msgid "Post to group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:110 src/Model/Contact.php:1214
|
#: src/Content/Widget/VCard.php:106 src/Model/Contact.php:1214
|
||||||
#: src/Model/Profile.php:466 src/Module/Moderation/Item/Source.php:85
|
#: src/Model/Profile.php:466 src/Module/Moderation/Item/Source.php:85
|
||||||
msgid "Mention"
|
msgid "Mention"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:120 src/Model/Profile.php:380
|
#: src/Content/Widget/VCard.php:116 src/Model/Profile.php:380
|
||||||
#: src/Module/Contact/Profile.php:408 src/Module/Profile/Profile.php:199
|
#: src/Module/Contact/Profile.php:408 src/Module/Profile/Profile.php:199
|
||||||
msgid "XMPP:"
|
msgid "XMPP:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:121 src/Model/Profile.php:381
|
#: src/Content/Widget/VCard.php:117 src/Model/Profile.php:381
|
||||||
#: src/Module/Contact/Profile.php:410 src/Module/Profile/Profile.php:203
|
#: src/Module/Contact/Profile.php:410 src/Module/Profile/Profile.php:203
|
||||||
msgid "Matrix:"
|
msgid "Matrix:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:122 src/Model/Event.php:82
|
#: src/Content/Widget/VCard.php:118 src/Model/Event.php:82
|
||||||
#: src/Model/Event.php:109 src/Model/Event.php:471 src/Model/Event.php:963
|
#: src/Model/Event.php:109 src/Model/Event.php:471 src/Model/Event.php:963
|
||||||
#: src/Model/Profile.php:375 src/Module/Contact/Profile.php:406
|
#: src/Model/Profile.php:375 src/Module/Contact/Profile.php:406
|
||||||
#: src/Module/Directory.php:147 src/Module/Notifications/Introductions.php:187
|
#: src/Module/Directory.php:147 src/Module/Notifications/Introductions.php:187
|
||||||
|
@ -2448,18 +2452,18 @@ msgstr ""
|
||||||
msgid "Location:"
|
msgid "Location:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:125 src/Model/Profile.php:490
|
#: src/Content/Widget/VCard.php:121 src/Model/Profile.php:490
|
||||||
#: src/Module/Notifications/Introductions.php:201
|
#: src/Module/Notifications/Introductions.php:201
|
||||||
msgid "Network:"
|
msgid "Network:"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:129 src/Model/Contact.php:1242
|
#: src/Content/Widget/VCard.php:125 src/Model/Contact.php:1242
|
||||||
#: src/Model/Contact.php:1254 src/Model/Profile.php:479
|
#: src/Model/Contact.php:1254 src/Model/Profile.php:479
|
||||||
#: src/Module/Contact/Profile.php:463
|
#: src/Module/Contact/Profile.php:463
|
||||||
msgid "Unfollow"
|
msgid "Unfollow"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Content/Widget/VCard.php:135 src/Model/Contact.php:1211
|
#: src/Content/Widget/VCard.php:131 src/Model/Contact.php:1211
|
||||||
#: src/Model/Profile.php:463
|
#: src/Model/Profile.php:463
|
||||||
msgid "View group"
|
msgid "View group"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
@ -2851,7 +2855,7 @@ msgstr ""
|
||||||
msgid "Could not connect to database."
|
msgid "Could not connect to database."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Core/L10n.php:441 src/Model/Item.php:2249
|
#: src/Core/L10n.php:441 src/Model/Item.php:2278
|
||||||
msgid "Undetermined"
|
msgid "Undetermined"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3409,95 +3413,95 @@ msgstr ""
|
||||||
msgid "Happy Birthday %s"
|
msgid "Happy Birthday %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2256
|
#: src/Model/Item.php:2285
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (%s - %s): %s"
|
msgid "%s (%s - %s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2258
|
#: src/Model/Item.php:2287
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s (%s): %s"
|
msgid "%s (%s): %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:2261
|
#: src/Model/Item.php:2290
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Detected languages in this post:\\n%s"
|
msgid "Detected languages in this post:\\n%s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3209
|
#: src/Model/Item.php:3238
|
||||||
msgid "activity"
|
msgid "activity"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3211
|
#: src/Model/Item.php:3240
|
||||||
msgid "comment"
|
msgid "comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3214 src/Module/Post/Tag/Add.php:123
|
#: src/Model/Item.php:3243 src/Module/Post/Tag/Add.php:123
|
||||||
msgid "post"
|
msgid "post"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3384
|
#: src/Model/Item.php:3413
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s is blocked"
|
msgid "%s is blocked"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3386
|
#: src/Model/Item.php:3415
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%s is ignored"
|
msgid "%s is ignored"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3388
|
#: src/Model/Item.php:3417
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Content from %s is collapsed"
|
msgid "Content from %s is collapsed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3392
|
#: src/Model/Item.php:3421
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Content warning: %s"
|
msgid "Content warning: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3845
|
#: src/Model/Item.php:3874
|
||||||
msgid "bytes"
|
msgid "bytes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3876
|
#: src/Model/Item.php:3905
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%2$s (%3$d%%, %1$d vote)"
|
msgid "%2$s (%3$d%%, %1$d vote)"
|
||||||
msgid_plural "%2$s (%3$d%%, %1$d votes)"
|
msgid_plural "%2$s (%3$d%%, %1$d votes)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3878
|
#: src/Model/Item.php:3907
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%2$s (%1$d vote)"
|
msgid "%2$s (%1$d vote)"
|
||||||
msgid_plural "%2$s (%1$d votes)"
|
msgid_plural "%2$s (%1$d votes)"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3883
|
#: src/Model/Item.php:3912
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d voter. Poll end: %s"
|
msgid "%d voter. Poll end: %s"
|
||||||
msgid_plural "%d voters. Poll end: %s"
|
msgid_plural "%d voters. Poll end: %s"
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3885
|
#: src/Model/Item.php:3914
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "%d voter."
|
msgid "%d voter."
|
||||||
msgid_plural "%d voters."
|
msgid_plural "%d voters."
|
||||||
msgstr[0] ""
|
msgstr[0] ""
|
||||||
msgstr[1] ""
|
msgstr[1] ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3887
|
#: src/Model/Item.php:3916
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Poll end: %s"
|
msgid "Poll end: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Item.php:3921 src/Model/Item.php:3922
|
#: src/Model/Item.php:3950 src/Model/Item.php:3951
|
||||||
msgid "View on separate page"
|
msgid "View on separate page"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/Mail.php:135
|
#: src/Model/Mail.php:137 src/Model/Mail.php:266
|
||||||
msgid "[no subject]"
|
msgid "[no subject]"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -3789,7 +3793,7 @@ msgstr ""
|
||||||
msgid "Profile Photos"
|
msgid "Profile Photos"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1592
|
#: src/Model/User.php:1594
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -3797,7 +3801,7 @@ msgid ""
|
||||||
"\t\t\tthe administrator of %2$s has set up an account for you."
|
"\t\t\tthe administrator of %2$s has set up an account for you."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1595
|
#: src/Model/User.php:1597
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -3817,9 +3821,9 @@ msgid ""
|
||||||
"\t\tYou may also wish to add some basic information to your default profile\n"
|
"\t\tYou may also wish to add some basic information to your default profile\n"
|
||||||
"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
|
"\t\t(on the \"Profiles\" page) so that other people can easily find you.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\t\tWe recommend adding a profile photo, adding some profile \"keywords\" \n"
|
"\t\tWe recommend adding a profile photo, adding some profile \"keywords\"\n"
|
||||||
"\t\t(very useful in making new friends) - and perhaps what country you live "
|
"\t\t(very useful in making new friends) - and perhaps what country you live "
|
||||||
"in; \n"
|
"in;\n"
|
||||||
"\t\tif you do not wish to be more specific than that.\n"
|
"\t\tif you do not wish to be more specific than that.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"\t\tWe fully respect your right to privacy, and none of these items are "
|
"\t\tWe fully respect your right to privacy, and none of these items are "
|
||||||
|
@ -3833,12 +3837,12 @@ msgid ""
|
||||||
"\t\tThank you and welcome to %4$s."
|
"\t\tThank you and welcome to %4$s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1627 src/Model/User.php:1733
|
#: src/Model/User.php:1629 src/Model/User.php:1735
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Registration details for %s"
|
msgid "Registration details for %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1647
|
#: src/Model/User.php:1649
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -3854,12 +3858,12 @@ msgid ""
|
||||||
"\t\t"
|
"\t\t"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1666
|
#: src/Model/User.php:1668
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid "Registration at %s"
|
msgid "Registration at %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1690
|
#: src/Model/User.php:1692
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -3868,7 +3872,7 @@ msgid ""
|
||||||
"\t\t\t"
|
"\t\t\t"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1698
|
#: src/Model/User.php:1700
|
||||||
#, php-format
|
#, php-format
|
||||||
msgid ""
|
msgid ""
|
||||||
"\n"
|
"\n"
|
||||||
|
@ -3906,7 +3910,7 @@ msgid ""
|
||||||
"\t\t\tThank you and welcome to %2$s."
|
"\t\t\tThank you and welcome to %2$s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: src/Model/User.php:1760
|
#: src/Model/User.php:1762
|
||||||
msgid ""
|
msgid ""
|
||||||
"User with delegates can't be removed, please remove delegate users first"
|
"User with delegates can't be removed, please remove delegate users first"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="field checkbox" id="div_id_{{$field.0}}">
|
<div class="field checkbox" id="div_id_{{$field.0}}">
|
||||||
<label id="id_{{$field.0}}_label" for="id_{{$field.0}}">{{$field.1}}</label>
|
<label id="id_{{$field.0}}_label" for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<input type="hidden" name="{{$field.0}}" value="0">
|
<input type="hidden" name="{{$field.0}}" value="0">
|
||||||
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" aria-describedby="{{$field.0}}_tip" value="1" {{if $field.2}}checked="checked"{{/if}} {{if $field.4}}{{$field.4}}{{/if}}>
|
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" aria-describedby="{{$field.0}}_tip" value="1" {{if $field.2}}checked{{/if}} {{$field.4 nofilter}}>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,12 +1,12 @@
|
||||||
<div class='field combobox'>
|
<div class="field combobox">
|
||||||
<label for='id_{{$field.0}}' id='id_{{$field.0}}_label'>{{$field.1}}</label>
|
<label for="id_{{$field.0}}" id="id_{{$field.0}}_label">{{$field.1}}</label>
|
||||||
{{* html5 don't work on Chrome, Safari and IE9
|
{{* html5 don't work on Chrome, Safari and IE9
|
||||||
<input id="id_{{$field.0}}" type="text" list="data_{{$field.0}}">
|
<input id="id_{{$field.0}}" type="text" list="data_{{$field.0}}">
|
||||||
<datalist id="data_{{$field.0}}">
|
<datalist id="data_{{$field.0}}">
|
||||||
{{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{/foreach}}
|
{{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{/foreach}}
|
||||||
</datalist> *}}
|
</datalist> *}}
|
||||||
|
|
||||||
<input id="id_{{$field.0}}" type="text" value="{{$field.2}}" aria-describedby='{{$field.0}}_tip'>
|
<input id="id_{{$field.0}}" type="text" value="{{$field.2}}" aria-describedby="{{$field.0}}_tip">
|
||||||
<select id="select_{{$field.0}}" onChange="$('#id_{{$field.0}}').val($(this).val())">
|
<select id="select_{{$field.0}}" onChange="$('#id_{{$field.0}}').val($(this).val())">
|
||||||
<option value="">{{$field.5}}</option>
|
<option value="">{{$field.5}}</option>
|
||||||
{{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{$val}}</option>{{/foreach}}
|
{{foreach $field.4 as $opt=>$val}}<option value="{{$val}}">{{$val}}</option>{{/foreach}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
|
|
||||||
<div class='field custom'>
|
<div class="field custom">
|
||||||
<label for='{{$field.0}}'>{{$field.1}}</label>
|
<label for="{{$field.0}}">{{$field.1}}</label>
|
||||||
{{$field.2 nofilter}}
|
{{$field.2 nofilter}}
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
{{include file='field_input.tpl' field=$field}}
|
{{include file="field_input.tpl" field=$field}}
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(function () {
|
$(function () {
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
<div class="field input" id="wrapper_{{$field.0}}">
|
<div class="field input" id="wrapper_{{$field.0}}">
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
<input type="{{$field.6|default:'text'}}" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5 nofilter}}{{/if}} aria-describedby="{{$field.0}}_tip" dir="auto">
|
<input type="{{$field.6|default:'text'}}" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.4}} required{{/if}} {{$field.5 nofilter}} aria-describedby="{{$field.0}}_tip" dir="auto">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
|
|
||||||
|
|
||||||
<div class='field checkbox'>
|
<div class="field checkbox">
|
||||||
<label for='id_{{$field.0}}'>{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<input type="checkbox" name='{{$field.0}}' id='id_{{$field.0}}' value="{{$field.3}}" {{if $field.2}}checked="true"{{/if}} aria-describedby='{{$field.0}}_tip'>
|
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.3}}" {{if $field.2}}checked{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.4}}
|
{{if $field.4}}
|
||||||
<span class='field_help' role='tooltip' id='{{$field.0}}_tip'>{{$field.4 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.4 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class='field input openid' id='wrapper_{{$field.0}}'>
|
<div class="field input openid" id="wrapper_{{$field.0}}">
|
||||||
<label for='id_{{$field.0}}'>{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<input name='{{$field.0}}' id='id_{{$field.0}}' type="text" value="{{$field.2}}" {{if $field.4}} readonly="readonly" {{/if}} aria-describedby='{{$field.0}}_tip'>
|
<input name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}" {{if $field.4}}readonly{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="field password" id="wrapper_{{$field.0}}">
|
<div class="field password" id="wrapper_{{$field.0}}">
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
<input type="password" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}"{{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}}{{if $field.6}} pattern="(($field.6}}"{{/if}} aria-describedby="{{$field.0}}_tip">
|
<input type="password" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.2}}" {{if $field.4}}required{{/if}} {{$field.5 nofilter}} {{if $field.6}}pattern="(($field.6}}"{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class='field radio'>
|
<div class="field radio">
|
||||||
<label for='id_{{$field.0}}_{{$field.2}}'>{{$field.1}}</label>
|
<label for="id_{{$field.0}}_{{$field.2}}">{{$field.1}}</label>
|
||||||
<input type="radio" name='{{$field.0}}' id='id_{{$field.0}}_{{$field.2}}' value="{{$field.2}}" {{if $field.4}}checked{{/if}} aria-describedby={{$field.0}}_{{$field.2}}_tip'>
|
<input type="radio" name="{{$field.0}}" id="id_{{$field.0}}_{{$field.2}}" value="{{$field.2}}" {{if $field.4}}checked{{/if}} aria-describedby="{{$field.0}}_{{$field.2}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class='field_help' role='tooltip' id='{{$field.0}}_{{$field.2}}_tip'>{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_{{$field.2}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<select name="{{$field.0}}" id="id_{{$field.0}}" aria-describedby="{{$field.0}}_tip" {{$field.5 nofilter}}>
|
<select name="{{$field.0}}" id="id_{{$field.0}}" aria-describedby="{{$field.0}}_tip" {{$field.5 nofilter}}>
|
||||||
{{foreach $field.4 as $opt => $val}}
|
{{foreach $field.4 as $opt => $val}}
|
||||||
{{if $field.5 == 'multiple'}}
|
{{if $field.5 == "multiple"}}
|
||||||
<option value="{{$opt}}" dir="auto"{{if in_array($opt, $field.2)}} selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" dir="auto" {{if in_array($opt, $field.2)}}selected{{/if}}>{{$val}}</option>
|
||||||
{{else}}
|
{{else}}
|
||||||
<option value="{{$opt}}" dir="auto"{{if $opt == $field.2}} selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" dir="auto" {{if $opt == $field.2}}selected{{/if}}>{{$val}}</option>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</select>
|
</select>
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
<div class="field textarea">
|
<div class="field textarea">
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
<textarea class="form-control text-autosize" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.4}} required{{/if}}{{if $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip" dir="auto">{{$field.2}}</textarea>
|
<textarea class="form-control text-autosize" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.4}}required{{/if}} {{$field.5 nofilter}} aria-describedby="{{$field.0}}_tip" dir="auto">{{$field.2}}</textarea>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
<span class="field_help" role="tooltip" id="{{$field.0}}_tip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<select name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.5}}onchange="previewTheme(this);"{{/if}} aria-describedby="{{$field.0}}_tip">
|
<select name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.5}}onchange="previewTheme(this);"{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{foreach $field.4 as $opt=>$val}}
|
{{foreach $field.4 as $opt=>$val}}
|
||||||
<option value="{{$opt}}" dir="auto"{{if $opt==$field.2}} selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" dir="auto" {{if $opt==$field.2}}selected{{/if}}>{{$val}}</option>
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</select>
|
</select>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
|
||||||
<div class="field checkbox" id="div_id_{{$field.0}}">
|
<div class="field checkbox" id="div_id_{{$field.0}}">
|
||||||
<input type="hidden" name="{{$field.0}}" value="0">
|
<input type="hidden" name="{{$field.0}}" value="0">
|
||||||
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="1" {{if $field.2}}checked="checked"{{/if}} {{if $field.3}}aria-describedby="{{$field.0}}_tip"{{/if}} {{if $field.4}}{{$field.4}}{{/if}}>
|
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="1" {{if $field.2}}checked{{/if}} {{if $field.3}}aria-describedby="{{$field.0}}_tip"{{/if}} {{$field.4 nofilter}}>
|
||||||
<label for="id_{{$field.0}}">
|
<label for="id_{{$field.0}}">
|
||||||
{{$field.1}}
|
{{$field.1}}
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<div class="form-group field input file">
|
<div class="form-group field input file">
|
||||||
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
<div class="input-group" id="{{$field.0}}">
|
<div class="input-group" id="{{$field.0}}">
|
||||||
<input class="form-control file" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}"{{if $field.4}} required{{/if}} aria-describedby="{{$field.0}}_tip">
|
<input class="form-control file" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}" {{if $field.4}}required{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
<span class="input-group-addon image-select"><i class="fa fa-picture-o"></i></span>
|
<span class="input-group-addon image-select"><i class="fa fa-picture-o"></i></span>
|
||||||
</div>
|
</div>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{{if !isset($label) || $label != false }}
|
{{if !isset($label) || $label != false }}
|
||||||
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1 nofilter}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1 nofilter}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="{{$field.6|default:'text'}}" value="{{$field.2}}"{{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5 nofilter}}{{/if}} aria-describedby="{{$field.0}}_tip">
|
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="{{$field.6|default:'text'}}" value="{{$field.2}}" {{if $field.4}}required{{/if}} {{$field.5 nofilter}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
<div class="form-group field checkbox">
|
<div class="form-group field checkbox">
|
||||||
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.3}}" {{if $field.2}}checked="checked"{{/if}} aria-checked="{{if $field.2}}true{{else}}false{{/if}}" aria-describedby="{{$field.0}}_tip">
|
<input type="checkbox" name="{{$field.0}}" id="id_{{$field.0}}" value="{{$field.3}}" {{if $field.2}}checked{{/if}} aria-checked="{{if $field.2}}true{{else}}false{{/if}}" aria-describedby="{{$field.0}}_tip">
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
{{if $field.4}}
|
{{if $field.4}}
|
||||||
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.4 nofilter}}</span>
|
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.4 nofilter}}</span>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div id="id_{{$field.0}}_wrapper" class="form-group field input openid">
|
<div id="id_{{$field.0}}_wrapper" class="form-group field input openid">
|
||||||
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}</label>
|
||||||
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}" {{if $field.4}} readonly="readonly" {{/if}} aria-describedby="{{$field.0}}_tip">
|
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="text" value="{{$field.2}}" {{if $field.4}}readonly{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div id="id_{{$field.0}}_wrapper" class="form-group field input password">
|
<div id="id_{{$field.0}}_wrapper" class="form-group field input password">
|
||||||
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}" id="label_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="password" value="{{$field.2}}" {{if $field.4}} required{{/if}}{{if $field.5 eq "autofocus"}} autofocus{{elseif $field.5}} {{$field.5}}{{/if}}{{if $field.6}} pattern="{{$field.6}}"{{/if}} aria-describedby="{{$field.0}}_tip">
|
<input class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" type="password" value="{{$field.2}}" {{if $field.4}}required{{/if}} {{$field.5 nofilter}} {{if $field.6}}pattern="{{$field.6}}"{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -3,10 +3,10 @@
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<select name="{{$field.0}}" id="id_{{$field.0}}" class="form-control" aria-describedby="{{$field.0}}_tip" {{$field.5 nofilter}}>
|
<select name="{{$field.0}}" id="id_{{$field.0}}" class="form-control" aria-describedby="{{$field.0}}_tip" {{$field.5 nofilter}}>
|
||||||
{{foreach $field.4 as $opt => $val}}
|
{{foreach $field.4 as $opt => $val}}
|
||||||
{{if $field.5 == 'multiple'}}
|
{{if $field.5 == "multiple"}}
|
||||||
<option value="{{$opt}}" {{if in_array($opt, $field.2)}}selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" {{if in_array($opt, $field.2)}}selected{{/if}}>{{$val}}</option>
|
||||||
{{else}}
|
{{else}}
|
||||||
<option value="{{$opt}}" {{if $opt == $field.2}}selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" {{if $opt == $field.2}}selected{{/if}}>{{$val}}</option>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</select>
|
</select>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
{{if $field.1}}
|
{{if $field.1}}
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}{{if $field.4}} <span class="required" title="{{$field.4}}">*</span>{{/if}}</label>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
<textarea class="form-control text-autosize" name="{{$field.0}}" id="id_{{$field.0}}"{{if $field.4}} required{{/if}}{{if $field.5}} {{$field.5}}{{/if}} aria-describedby="{{$field.0}}_tip">{{$field.2}}</textarea>
|
<textarea class="form-control text-autosize" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.4}}required{{/if}} {{$field.5 nofilter}} aria-describedby="{{$field.0}}_tip">{{$field.2}}</textarea>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
<span class="help-block" id="{{$field.0}}_tip" role="tooltip">{{$field.3 nofilter}}</span>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
<label for="id_{{$field.0}}">{{$field.1}}</label>
|
||||||
<select class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.5=="preview"}}onchange="previewTheme(this);"{{/if}} aria-describedby="{{$field.0}}_tip">
|
<select class="form-control" name="{{$field.0}}" id="id_{{$field.0}}" {{if $field.5=="preview"}}onchange="previewTheme(this);"{{/if}} aria-describedby="{{$field.0}}_tip">
|
||||||
{{foreach $field.4 as $opt=>$val}}
|
{{foreach $field.4 as $opt=>$val}}
|
||||||
<option value="{{$opt}}" {{if $opt==$field.2}}selected="selected"{{/if}}>{{$val}}</option>
|
<option value="{{$opt}}" {{if $opt==$field.2}}selected{{/if}}>{{$val}}</option>
|
||||||
{{/foreach}}
|
{{/foreach}}
|
||||||
</select>
|
</select>
|
||||||
{{if $field.3}}
|
{{if $field.3}}
|
||||||
|
|
Loading…
Reference in a new issue