Compare commits

..

No commits in common. "develop" and "stable" have entirely different histories.

141 changed files with 3558 additions and 4258 deletions

View file

@ -1,11 +1,3 @@
Version 2022.09 (unreleased)
Friendica Core
Friendica Addons
Closed Issues
Version 2022.06 (2022-06-11)
Friendica Core
Added DA DK translation, updates to the translations DE, FR, HU, PL, RU, ZH CN [translation teams]

View file

@ -1 +1 @@
2022.09-dev
2022.06

View file

@ -31,7 +31,7 @@ use Friendica\Model\Contact;
define('FRIENDICA_PLATFORM', 'Friendica');
define('FRIENDICA_CODENAME', 'Giant Rhubarb');
define('FRIENDICA_VERSION', '2022.09-dev');
define('FRIENDICA_VERSION', '2022.06');
define('DFRN_PROTOCOL_VERSION', '2.23');
define('NEW_TABLE_STRUCTURE_VERSION', 1288);

View file

@ -1,6 +1,6 @@
-- ------------------------------------------
-- Friendica 2022.09-dev (Giant Rhubarb)
-- DB_UPDATE_VERSION 1470
-- Friendica 2022.06 (Giant Rhubarb)
-- DB_UPDATE_VERSION 1469
-- ------------------------------------------
@ -1216,12 +1216,12 @@ CREATE TABLE IF NOT EXISTS `post-link` (
CREATE TABLE IF NOT EXISTS `post-media` (
`id` int unsigned NOT NULL auto_increment COMMENT 'sequential ID',
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
`url` text NOT NULL COMMENT 'Media URL',
`url` varbinary(511) NOT NULL COMMENT 'Media URL',
`type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'Media type',
`mimetype` varchar(60) COMMENT '',
`height` smallint unsigned COMMENT 'Height of the media',
`width` smallint unsigned COMMENT 'Width of the media',
`size` mediumint unsigned COMMENT 'Media size',
`size` int unsigned COMMENT 'Media size',
`preview` varbinary(255) COMMENT 'Preview URL',
`preview-height` smallint unsigned COMMENT 'Height of the preview picture',
`preview-width` smallint unsigned COMMENT 'Width of the preview picture',
@ -1234,7 +1234,7 @@ CREATE TABLE IF NOT EXISTS `post-media` (
`publisher-name` varchar(255) COMMENT 'Name of the publisher of the media',
`publisher-image` varbinary(255) COMMENT 'Image of the publisher of the media',
PRIMARY KEY(`id`),
UNIQUE INDEX `uri-id-url` (`uri-id`,`url`(512)),
UNIQUE INDEX `uri-id-url` (`uri-id`,`url`),
INDEX `uri-id-id` (`uri-id`,`id`),
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Attached media';

View file

@ -82,7 +82,6 @@ General
../settings
---------
* o - Account
* 2 - Two-factor authentication
* p - Profiles
* t - Additional features
* w - Social Networks

View file

@ -7,15 +7,15 @@ Fields
------
| Field | Description | Type | Null | Key | Default | Extra |
| --------------- | --------------------------------------------------------- | ------------------ | ---- | --- | ------- | -------------- |
| --------------- | --------------------------------------------------------- | ----------------- | ---- | --- | ------- | -------------- |
| id | sequential ID | int unsigned | NO | PRI | NULL | auto_increment |
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | | NULL | |
| url | Media URL | text | NO | | NULL | |
| url | Media URL | varbinary(511) | NO | | NULL | |
| type | Media type | tinyint unsigned | NO | | 0 | |
| mimetype | | varchar(60) | YES | | NULL | |
| height | Height of the media | smallint unsigned | YES | | NULL | |
| width | Width of the media | smallint unsigned | YES | | NULL | |
| size | Media size | mediumint unsigned | YES | | NULL | |
| size | Media size | int unsigned | YES | | NULL | |
| preview | Preview URL | varbinary(255) | YES | | NULL | |
| preview-height | Height of the preview picture | smallint unsigned | YES | | NULL | |
| preview-width | Width of the preview picture | smallint unsigned | YES | | NULL | |
@ -32,9 +32,9 @@ Indexes
------------
| Name | Fields |
| ---------- | ------------------------ |
| ---------- | ------------------- |
| PRIMARY | id |
| uri-id-url | UNIQUE, uri-id, url(512) |
| uri-id-url | UNIQUE, uri-id, url |
| uri-id-id | uri-id, id |
Foreign Keys

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

View file

@ -1,160 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1000px"
height="1000px"
viewBox="0 0 1000 1000"
version="1.1"
id="SVGRoot"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
sodipodi:docname="GoToSocial_icon1.svg"
inkscape:export-xdpi="95.999992"
inkscape:export-ydpi="95.999992">
<defs
id="defs5117">
<inkscape:path-effect
effect="spiro"
id="path-effect5760"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect5756"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect5752"
is_visible="true" />
<inkscape:path-effect
effect="spiro"
id="path-effect5748"
is_visible="true" />
</defs>
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.70710678"
inkscape:cx="460.72691"
inkscape:cy="522.20279"
inkscape:document-units="px"
inkscape:current-layer="layer3"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1057"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1" />
<metadata
id="metadata5120">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title />
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="background"
inkscape:groupmode="layer"
id="layer1"
style="display:inline">
<rect
style="fill:#d0d0d0;fill-opacity:1;stroke:none;stroke-width:1.51092136;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal"
id="rect5876"
width="1000.0042"
height="1000"
x="0"
y="0" />
</g>
<g
inkscape:groupmode="layer"
id="layer3"
inkscape:label="sloth"
style="display:inline">
<g
id="g5890"
transform="translate(-10)">
<path
sodipodi:nodetypes="ssscccs"
inkscape:connector-curvature="0"
id="path5762"
d="M 861.29285,497.07031 C 861.65556,665.3247 774.21642,807.40548 511.60027,807.86794 270.63622,808.29226 154.54309,691.2756 155.19024,504.19228 155.7289,348.47535 251.17288,227.4551 422.3176,205.3802 c -35.32036,-75.85452 52.24232,-96.94648 73.77615,-32.00508 13.73451,-37.63439 108.24345,-49.1716 62.21106,24.77055 147.95052,3.75658 302.58353,111.28061 302.98804,298.92464 z"
style="display:inline;fill:#767676;fill-opacity:1;stroke:none;stroke-width:2.57058167;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
sodipodi:nodetypes="sssssss"
inkscape:connector-curvature="0"
id="path5780"
d="m 809.15213,517.31679 c -4.83374,150.52526 -109.85544,235.22815 -297.81171,235.31839 -179.6675,0.0863 -290.56109,-70.98245 -298.50223,-235.31839 -4.6366,-95.95095 54.62861,-181.84442 144.83016,-194.18834 80.92123,-11.07393 99.7402,21.01802 153.67207,21.01802 59.21658,0 83.64871,-35.09608 162.84221,-21.85479 87.78391,14.67763 137.90533,103.6017 134.9695,195.02511 z"
style="display:inline;fill:#e8e8e8;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
sodipodi:nodetypes="scssscs"
inkscape:connector-curvature="0"
id="path5780-9"
d="m 809.15213,517.31679 c -1.32872,41.37724 -10.22787,77.78081 -26.33906,108.8204 -46.60931,-39.48031 -99.53509,-10.7281 -171.50115,-39.43334 -44.77145,-17.85808 -51.41659,-56.56453 -51.21999,-81.3542 0.54836,-69.14384 48.17003,-93.45758 95.53601,-97.60875 55.74677,-4.88566 124.5246,36.1482 151.01547,66.79433 2.11531,14.01083 2.97167,28.36512 2.50872,42.78156 z"
style="display:inline;fill:#a1a1a1;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<ellipse
ry="50.575684"
rx="37.800804"
cy="502.64291"
cx="646.85773"
id="path5816"
style="fill:#767676;fill-opacity:1;stroke:none;stroke-width:1.51185882;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
sodipodi:nodetypes="scssscs"
inkscape:connector-curvature="0"
id="path5780-9-1"
d="m 212.51463,517.3246 c 1.32872,41.37724 10.22787,77.78081 26.33906,108.8204 46.60931,-39.48031 99.57415,-10.73591 171.54021,-39.44115 44.77145,-17.85808 51.41659,-56.56453 51.21999,-81.3542 -0.54836,-69.14384 -48.20909,-93.44977 -95.57507,-97.60094 -55.74677,-4.88566 -124.5246,36.1482 -151.01547,66.79433 -2.11531,14.01083 -2.97167,28.36512 -2.50872,42.78156 z"
style="display:inline;fill:#a1a1a1;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<ellipse
transform="scale(-1,1)"
ry="50.575684"
rx="37.800804"
cy="502.64294"
cx="-374.84808"
id="path5816-0"
style="display:inline;fill:#767676;fill-opacity:1;stroke:none;stroke-width:1.51185882;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
sodipodi:nodetypes="sssss"
inkscape:connector-curvature="0"
id="path5862"
d="m 543.96613,556.96185 c 0,11.0622 -14.51648,20.02988 -32.42347,20.02988 -17.90698,0 -32.42347,-8.96769 -32.42347,-20.02988 0,-11.0622 14.14619,-15.58638 32.05318,-15.58638 17.90698,0 32.79376,4.52417 32.79376,15.58638 z"
style="display:inline;fill:#767676;fill-opacity:1;stroke:none;stroke-width:1.60515046;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<path
sodipodi:nodetypes="sssss"
inkscape:connector-curvature="0"
id="path5865"
d="m 552.00195,620.36132 c 7.06643,13.89391 -19.38375,21.24024 -40.2832,21.24024 -20.89945,0 -47.71708,-7.02219 -41.50391,-21.24024 5.71775,-13.08435 20.11619,0.73243 41.01563,0.73243 20.89944,0 34.43888,-13.1835 40.77148,-0.73243 z"
style="display:inline;fill:#767676;fill-opacity:1;stroke:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<ellipse
transform="rotate(-6.669407)"
ry="24.882849"
rx="19.511755"
cy="560.95673"
cx="600.24731"
id="path5818"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.53898752;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
<ellipse
transform="rotate(-6.6694071)"
ry="24.882849"
rx="19.511755"
cy="529.32086"
cx="329.69714"
id="path5818-8"
style="display:inline;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.53898752;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:normal" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

View file

@ -157,9 +157,9 @@ function wall_upload_post(App $a, $desktopmode = true)
" - size: " . $filesize . " - type: " . $filetype);
$imagedata = @file_get_contents($src);
$image = new Image($imagedata, $filetype);
$Image = new Image($imagedata, $filetype);
if (!$image->isValid()) {
if (!$Image->isValid()) {
$msg = DI::l10n()->t('Unable to process image.');
@unlink($src);
if ($r_json) {
@ -170,18 +170,18 @@ function wall_upload_post(App $a, $desktopmode = true)
System::exit();
}
$image->orient($src);
$Image->orient($src);
@unlink($src);
$max_length = DI::config()->get('system', 'max_image_length');
if ($max_length > 0) {
$image->scaleDown($max_length);
$filesize = strlen($image->asString());
$Image->scaleDown($max_length);
$filesize = strlen($Image->asString());
Logger::info("File upload: Scaling picture to new size " . $max_length);
}
$width = $image->getWidth();
$height = $image->getHeight();
$width = $Image->getWidth();
$height = $Image->getHeight();
$maximagesize = DI::config()->get('system', 'maximagesize');
@ -190,10 +190,10 @@ function wall_upload_post(App $a, $desktopmode = true)
foreach ([5120, 2560, 1280, 640] as $pixels) {
if (($filesize > $maximagesize) && (max($width, $height) > $pixels)) {
Logger::info('Resize', ['size' => $filesize, 'width' => $width, 'height' => $height, 'max' => $maximagesize, 'pixels' => $pixels]);
$image->scaleDown($pixels);
$filesize = strlen($image->asString());
$width = $image->getWidth();
$height = $image->getHeight();
$Image->scaleDown($pixels);
$filesize = strlen($Image->asString());
$width = $Image->getWidth();
$height = $Image->getHeight();
}
}
if ($filesize > $maximagesize) {
@ -220,7 +220,7 @@ function wall_upload_post(App $a, $desktopmode = true)
$defperm = '<' . $default_cid . '>';
$r = Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 0, Photo::DEFAULT, $defperm);
$r = Photo::store($Image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 0, Photo::DEFAULT, $defperm);
if (!$r) {
$msg = DI::l10n()->t('Image upload failed.');
@ -233,16 +233,16 @@ function wall_upload_post(App $a, $desktopmode = true)
}
if ($width > 640 || $height > 640) {
$image->scaleDown(640);
$r = Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 1, Photo::DEFAULT, $defperm);
$Image->scaleDown(640);
$r = Photo::store($Image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 1, Photo::DEFAULT, $defperm);
if ($r) {
$smallest = 1;
}
}
if ($width > 320 || $height > 320) {
$image->scaleDown(320);
$r = Photo::store($image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 2, Photo::DEFAULT, $defperm);
$Image->scaleDown(320);
$r = Photo::store($Image, $page_owner_uid, $visitor, $resource_id, $filename, $album, 2, Photo::DEFAULT, $defperm);
if ($r && ($smallest == 0)) {
$smallest = 2;
}
@ -264,8 +264,8 @@ function wall_upload_post(App $a, $desktopmode = true)
$picture["height"] = $photo["height"];
$picture["type"] = $photo["type"];
$picture["albumpage"] = DI::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $resource_id;
$picture["picture"] = DI::baseUrl() . "/photo/{$resource_id}-0." . $image->getExt();
$picture["preview"] = DI::baseUrl() . "/photo/{$resource_id}-{$smallest}." . $image->getExt();
$picture["picture"] = DI::baseUrl() . "/photo/{$resource_id}-0." . $Image->getExt();
$picture["preview"] = DI::baseUrl() . "/photo/{$resource_id}-{$smallest}." . $Image->getExt();
if ($r_json) {
System::jsonExit(['picture' => $picture]);
@ -280,7 +280,7 @@ function wall_upload_post(App $a, $desktopmode = true)
System::jsonExit(['ok' => true]);
}
echo "\n\n" . '[url=' . DI::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $resource_id . '][img]' . DI::baseUrl() . "/photo/{$resource_id}-{$smallest}." . $image->getExt() . "[/img][/url]\n\n";
echo "\n\n" . '[url=' . DI::baseUrl() . '/photos/' . $page_owner_nick . '/image/' . $resource_id . '][img]' . DI::baseUrl() . "/photo/{$resource_id}-{$smallest}.".$Image->getExt()."[/img][/url]\n\n";
System::exit();
// NOTREACHED
}

View file

@ -145,7 +145,7 @@ class App
$this->nickname = $nickname;
}
public function isLoggedIn(): bool
public function isLoggedIn()
{
return local_user() && $this->user_id && ($this->user_id == local_user());
}
@ -155,7 +155,7 @@ class App
*
* @return bool true if user is an admin
*/
public function isSiteAdmin(): bool
public function isSiteAdmin()
{
$admin_email = $this->config->get('config', 'admin_email');
@ -166,18 +166,18 @@ class App
/**
* Fetch the user id
* @return int User id
* @return int
*/
public function getLoggedInUserId(): int
public function getLoggedInUserId()
{
return $this->user_id;
}
/**
* Fetch the user nick name
* @return string User's nickname
* @return string
*/
public function getLoggedInUserNickname(): string
public function getLoggedInUserNickname()
{
return $this->nickname;
}
@ -198,7 +198,7 @@ class App
*
* @return int
*/
public function getProfileOwner(): int
public function getProfileOwner():int
{
return $this->profile_owner;
}
@ -219,7 +219,7 @@ class App
*
* @return int
*/
public function getContactId(): int
public function getContactId():int
{
return $this->contact_id;
}
@ -241,7 +241,7 @@ class App
*
* @return int
*/
public function getTimeZone(): string
public function getTimeZone():string
{
return $this->timezone;
}
@ -260,9 +260,9 @@ class App
/**
* Fetch workerqueue information
*
* @return array Worker queue
* @return array
*/
public function getQueue(): array
public function getQueue()
{
return $this->queue ?? [];
}
@ -270,8 +270,8 @@ class App
/**
* Fetch a specific workerqueue field
*
* @param string $index Work queue record to fetch
* @return mixed Work queue item or NULL if not found
* @param string $index
* @return mixed
*/
public function getQueueValue(string $index)
{
@ -306,9 +306,9 @@ class App
/**
* The basepath of this app
*
* @return string Base path from configuration
* @return string
*/
public function getBasePath(): string
public function getBasePath()
{
// Don't use the basepath of the config table for basepath (it should always be the config-file one)
return $this->config->getCache()->get('system', 'basepath');
@ -396,10 +396,10 @@ class App
/**
* Returns the current theme name. May be overriden by the mobile theme name.
*
* @return string Current theme name or empty string in installation phase
* @return string
* @throws Exception
*/
public function getCurrentTheme(): string
public function getCurrentTheme()
{
if ($this->mode->isInstall()) {
return '';
@ -425,10 +425,10 @@ class App
/**
* Returns the current mobile theme name.
*
* @return string Mobile theme name or empty string if installer
* @return string
* @throws Exception
*/
public function getCurrentMobileTheme(): string
public function getCurrentMobileTheme()
{
if ($this->mode->isInstall()) {
return '';
@ -441,22 +441,12 @@ class App
return $this->currentMobileTheme;
}
/**
* Setter for current theme name
*
* @param string $theme Name of current theme
*/
public function setCurrentTheme(string $theme)
public function setCurrentTheme($theme)
{
$this->currentTheme = $theme;
}
/**
* Setter for current mobile theme name
*
* @param string $theme Name of current mobile theme
*/
public function setCurrentMobileTheme(string $theme)
public function setCurrentMobileTheme($theme)
{
$this->currentMobileTheme = $theme;
}
@ -535,10 +525,10 @@ class App
/**
* Provide a sane default if nothing is chosen or the specified theme does not exist.
*
* @return string Current theme's stylsheet path
* @return string
* @throws Exception
*/
public function getCurrentThemeStylesheetPath(): string
public function getCurrentThemeStylesheetPath()
{
return Core\Theme::getStylesheetPath($this->getCurrentTheme());
}
@ -740,7 +730,7 @@ class App
*
* @throws HTTPException\InternalServerErrorException
*/
public function redirect(string $toUrl)
public function redirect($toUrl)
{
if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) {
Core\System::externalRedirect($toUrl);

View file

@ -78,7 +78,7 @@ class Arguments
/**
* @return string The whole command of this call
*/
public function getCommand(): string
public function getCommand()
{
return $this->command;
}
@ -94,7 +94,7 @@ class Arguments
/**
* @return array All arguments of this call
*/
public function getArgv(): array
public function getArgv()
{
return $this->argv;
}
@ -102,7 +102,7 @@ class Arguments
/**
* @return string The used HTTP method
*/
public function getMethod(): string
public function getMethod()
{
return $this->method;
}
@ -110,7 +110,7 @@ class Arguments
/**
* @return int The count of arguments of this call
*/
public function getArgc(): int
public function getArgc()
{
return $this->argc;
}
@ -145,7 +145,7 @@ class Arguments
*
* @return bool if the argument position exists
*/
public function has(int $position): bool
public function has(int $position)
{
return array_key_exists($position, $this->argv);
}
@ -158,7 +158,7 @@ class Arguments
*
* @return Arguments The determined arguments
*/
public function determine(array $server, array $get): Arguments
public function determine(array $server, array $get)
{
// removing leading / - maybe a nginx problem
$server['QUERY_STRING'] = ltrim($server['QUERY_STRING'] ?? '', '/');

View file

@ -107,7 +107,7 @@ class BaseURL
*
* @return string
*/
public function getHostname(): string
public function getHostname()
{
return $this->hostname;
}
@ -117,7 +117,7 @@ class BaseURL
*
* @return string
*/
public function getScheme(): string
public function getScheme()
{
return $this->scheme;
}
@ -127,7 +127,7 @@ class BaseURL
*
* @return int
*/
public function getSSLPolicy(): int
public function getSSLPolicy()
{
return $this->sslPolicy;
}
@ -137,7 +137,7 @@ class BaseURL
*
* @return string
*/
public function getUrlPath(): string
public function getUrlPath()
{
return $this->urlPath;
}
@ -151,7 +151,7 @@ class BaseURL
*
* @return string
*/
public function get(bool $ssl = false): string
public function get($ssl = false)
{
if ($this->sslPolicy === self::SSL_POLICY_SELFSIGN && $ssl) {
return Network::switchScheme($this->url);
@ -168,9 +168,8 @@ class BaseURL
* @param string? $urlPath
*
* @return bool true, if successful
* @TODO Find proper types
*/
public function save($hostname = null, $sslPolicy = null, $urlPath = null): bool
public function save($hostname = null, $sslPolicy = null, $urlPath = null)
{
$currHostname = $this->hostname;
$currSSLPolicy = $this->sslPolicy;
@ -225,11 +224,11 @@ class BaseURL
/**
* Save the current url as base URL
*
* @param string $url
* @param $url
*
* @return bool true, if the save was successful
*/
public function saveByURL(string $url): bool
public function saveByURL($url)
{
$parsed = @parse_url($url);
@ -422,7 +421,7 @@ class BaseURL
*
* @return string The cleaned url
*/
public function remove(string $origURL): string
public function remove(string $origURL)
{
// Remove the hostname from the url if it is an internal link
$nurl = Strings::normaliseLink($origURL);
@ -446,7 +445,7 @@ class BaseURL
*
* @throws HTTPException\InternalServerErrorException In Case the given URL is not relative to the Friendica node
*/
public function redirect(string $toUrl = '', bool $ssl = false)
public function redirect($toUrl = '', $ssl = false)
{
if (!empty(parse_url($toUrl, PHP_URL_SCHEME))) {
throw new HTTPException\InternalServerErrorException("'$toUrl is not a relative path, please use System::externalRedirectTo");
@ -459,8 +458,8 @@ class BaseURL
/**
* Returns the base url as string
*/
public function __toString(): string
public function __toString()
{
return (string) $this->get();
return $this->get();
}
}

View file

@ -130,7 +130,7 @@ class Mode
*
* @throws \Exception
*/
public function determine(BasePath $basepath, Database $database, Cache $configCache): Mode
public function determine(BasePath $basepath, Database $database, Cache $configCache)
{
$mode = 0;
@ -178,7 +178,7 @@ class Mode
*
* @return Mode returns the determined mode
*/
public function determineRunMode(bool $isBackend, array $server, Arguments $args, MobileDetect $mobileDetect): Mode
public function determineRunMode(bool $isBackend, array $server, Arguments $args, MobileDetect $mobileDetect)
{
foreach (self::BACKEND_CONTENT_TYPES as $type) {
if (strpos(strtolower($server['HTTP_ACCEPT'] ?? ''), $type) !== false) {
@ -201,7 +201,7 @@ class Mode
*
* @return bool returns true, if the mode is set
*/
public function has(int $mode): bool
public function has($mode)
{
return ($this->mode & $mode) > 0;
}
@ -227,7 +227,7 @@ class Mode
*
* @return int Execution Mode
*/
public function getExecutor(): int
public function getExecutor()
{
return $this->executor;
}
@ -235,9 +235,9 @@ class Mode
/**
* Install mode is when the local config file is missing or the DB schema hasn't been installed yet.
*
* @return bool Whether installation mode is active (local/database configuration files present or not)
* @return bool
*/
public function isInstall(): bool
public function isInstall()
{
return !$this->has(Mode::LOCALCONFIGPRESENT) ||
!$this->has(MODE::DBCONFIGAVAILABLE);
@ -248,7 +248,7 @@ class Mode
*
* @return bool
*/
public function isNormal(): bool
public function isNormal()
{
return $this->has(Mode::LOCALCONFIGPRESENT) &&
$this->has(Mode::DBAVAILABLE) &&
@ -261,7 +261,7 @@ class Mode
*
* @return bool Is it a backend call
*/
public function isBackend(): bool
public function isBackend()
{
return $this->isBackend;
}
@ -271,7 +271,7 @@ class Mode
*
* @return bool true if it was an AJAX request
*/
public function isAjax(): bool
public function isAjax()
{
return $this->isAjax;
}
@ -281,7 +281,7 @@ class Mode
*
* @return bool true if it was an mobile request
*/
public function isMobile(): bool
public function isMobile()
{
return $this->isMobile;
}
@ -291,7 +291,7 @@ class Mode
*
* @return bool true if it was an tablet request
*/
public function isTablet(): bool
public function isTablet()
{
return $this->isTablet;
}

View file

@ -195,7 +195,7 @@ class Page implements ArrayAccess
* @param string $media
* @see Page::initHead()
*/
public function registerStylesheet(string $path, string $media = 'screen')
public function registerStylesheet($path, string $media = 'screen')
{
$path = Network::appendQueryParam($path, ['v' => FRIENDICA_VERSION]);
@ -288,7 +288,7 @@ class Page implements ArrayAccess
*
* Taken from http://webcheatsheet.com/php/get_current_page_url.php
*/
private function curPageURL(): string
private function curPageURL()
{
$pageURL = 'http';
if (!empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on")) {

View file

@ -152,7 +152,7 @@ class Router
*
* @throws HTTPException\InternalServerErrorException In case of invalid configs
*/
public function loadRoutes(array $routes): Router
public function loadRoutes(array $routes)
{
$routeCollector = ($this->routeCollector ?? new RouteCollector(new Std(), new GroupCountBased()));
@ -166,13 +166,6 @@ class Router
return $this;
}
/**
* Adds multiple routes to a route collector
*
* @param RouteCollector $routeCollector Route collector instance
* @param array $routes Multiple routes to be added
* @throws HTTPException\InternalServerErrorException If route was wrong (somehow)
*/
private function addRoutes(RouteCollector $routeCollector, array $routes)
{
foreach ($routes as $route => $config) {
@ -228,7 +221,7 @@ class Router
*
* @return bool
*/
private function isRoute(array $config): bool
private function isRoute(array $config)
{
return
// The config array should at least have one entry
@ -260,7 +253,7 @@ class Router
* @throws HTTPException\MethodNotAllowedException If a rule matched but the method didn't
* @throws HTTPException\NotFoundException If no rule matched
*/
private function getModuleClass(): string
private function getModuleClass()
{
$cmd = $this->args->getCommand();
$cmd = '/' . ltrim($cmd, '/');

View file

@ -70,11 +70,9 @@ class BaseCollection extends \ArrayIterator
}
/**
* Getter for total count
*
* @return int Total count
* @return int
*/
public function getTotalCount(): int
public function getTotalCount()
{
return $this->totalCount;
}
@ -87,7 +85,7 @@ class BaseCollection extends \ArrayIterator
* @return array
* @see array_column()
*/
public function column(string $column, $index_key = null): array
public function column($column, $index_key = null)
{
return array_column($this->getArrayCopy(true), $column, $index_key);
}
@ -99,7 +97,7 @@ class BaseCollection extends \ArrayIterator
* @return BaseCollection
* @see array_map()
*/
public function map(callable $callback): BaseCollection
public function map(callable $callback)
{
return new static(array_map($callback, $this->getArrayCopy()), $this->getTotalCount());
}
@ -112,7 +110,7 @@ class BaseCollection extends \ArrayIterator
* @return BaseCollection
* @see array_filter()
*/
public function filter(callable $callback = null, int $flag = 0): BaseCollection
public function filter(callable $callback = null, int $flag = 0)
{
return new static(array_filter($this->getArrayCopy(), $callback, $flag));
}

View file

@ -55,14 +55,14 @@ abstract class BaseEntity extends BaseDataTransferObject
}
/**
* @param mixed $name
* @param $name
* @return bool
* @throws HTTPException\InternalServerErrorException
*/
public function __isset($name): bool
public function __isset($name)
{
if (!property_exists($this, $name)) {
throw new HTTPException\InternalServerErrorException('Unknown property ' . $name . ' of type ' . gettype($name) . ' in Entity ' . static::class);
throw new HTTPException\InternalServerErrorException('Unknown property ' . $name . ' in Entity ' . static::class);
}
return !empty($this->$name);

View file

@ -110,11 +110,11 @@ abstract class BaseModel extends BaseDataTransferObject
* - $model->field (outside of class)
* - $this->field (inside of class)
*
* @param string $name Name of data to fetch
* @param $name
* @return mixed
* @throws HTTPException\InternalServerErrorException
*/
public function __get(string $name)
public function __get($name)
{
$this->checkValid();

View file

@ -331,7 +331,7 @@ abstract class BaseModule implements ICanHandleRequests
* Actually, important actions should not be triggered by Links / GET-Requests at all, but sometimes they still are,
* so this mechanism brings in some damage control (the attacker would be able to forge a request to a form of this type, but not to forms of other types).
*/
public static function getFormSecurityToken(string $typename = '')
public static function getFormSecurityToken($typename = '')
{
$user = User::getById(DI::app()->getLoggedInUserId(), ['guid', 'prvkey']);
$timestamp = time();
@ -340,14 +340,7 @@ abstract class BaseModule implements ICanHandleRequests
return $timestamp . '.' . $sec_hash;
}
/**
* Checks if form's security (CSRF) token is valid.
*
* @param string $typename ???
* @param string $formname Name of form/field (???)
* @return bool Whether it is valid
*/
public static function checkFormSecurityToken(string $typename = '', string $formname = 'form_security_token'): bool
public static function checkFormSecurityToken($typename = '', $formname = 'form_security_token')
{
$hash = null;
@ -379,12 +372,12 @@ abstract class BaseModule implements ICanHandleRequests
return ($sec_hash == $x[1]);
}
public static function getFormSecurityStandardErrorMessage(): string
public static function getFormSecurityStandardErrorMessage()
{
return DI::l10n()->t("The form security token was not correct. This probably happened because the form has been opened for too long \x28>3 hours\x29 before submitting it.") . EOL;
}
public static function checkFormSecurityTokenRedirectOnError(string $err_redirect, string $typename = '', string $formname = 'form_security_token')
public static function checkFormSecurityTokenRedirectOnError($err_redirect, $typename = '', $formname = 'form_security_token')
{
if (!self::checkFormSecurityToken($typename, $formname)) {
Logger::notice('checkFormSecurityToken failed: user ' . DI::app()->getLoggedInUserNickname() . ' - form element ' . $typename);
@ -394,7 +387,7 @@ abstract class BaseModule implements ICanHandleRequests
}
}
public static function checkFormSecurityTokenForbiddenOnError(string $typename = '', string $formname = 'form_security_token')
public static function checkFormSecurityTokenForbiddenOnError($typename = '', $formname = 'form_security_token')
{
if (!self::checkFormSecurityToken($typename, $formname)) {
Logger::notice('checkFormSecurityToken failed: user ' . DI::app()->getLoggedInUserNickname() . ' - form element ' . $typename);

View file

@ -32,6 +32,7 @@ use Friendica\Util\HTTPSignature;
use Friendica\Util\Images;
use Friendica\Util\Network;
use Friendica\Util\Proxy;
use Friendica\Util\Strings;
/**
* functions for handling contact avatar caching
@ -123,7 +124,7 @@ class Avatar
return $fields;
}
private static function getFilename(string $url): string
private static function getFilename(string $url)
{
$guid = Item::guidFromUri($url, parse_url($url, PHP_URL_HOST));
@ -138,19 +139,21 @@ class Avatar
return '';
}
$path = $filename . $size . '.' . $image->getExt();
$path = self::BASE_PATH . $filename . $size . '.' . $image->getExt();
$basepath = self::basePath();
if (empty($basepath)) {
return '';
}
$filepath = DI::basePath() . $path;
$filepath = $basepath . $path;
$dirpath = $basepath;
$dirpath = DI::basePath() . self::BASE_PATH;
DI::profiler()->startRecording('file');
if (!file_exists($dirpath)) {
if (!mkdir($dirpath, 0775)) {
Logger::warning('Base directory could not be created', ['directory' => $dirpath]);
return '';
}
}
// Fetch the permission and group ownership of the "avatar" path and apply to all files
$dir_perm = fileperms($dirpath) & 0777;
$file_perm = fileperms($dirpath) & 0666;
@ -195,7 +198,7 @@ class Avatar
return '';
}
return self::baseUrl() . $path . '?ts=' . $timestamp;
return DI::baseUrl() . $path . '?ts=' . $timestamp;
}
/**
@ -218,17 +221,16 @@ class Avatar
private static function getCacheFile(string $avatar): string
{
$parts = parse_url($avatar);
if (empty($parts['host']) || ($parts['host'] != parse_url(self::baseUrl(), PHP_URL_HOST))) {
if (empty($parts['host']) || ($parts['host'] != DI::baseUrl()->getHostname())) {
return '';
}
$avatarpath = parse_url(self::baseUrl(), PHP_URL_PATH);
$pos = strpos($parts['path'], $avatarpath);
$pos = strpos($parts['path'], DI::baseUrl()->getUrlPath() . self::BASE_PATH);
if ($pos !== 0) {
return '';
}
$filename = self::basePath() . substr($parts['path'], strlen($avatarpath));
$filename = DI::basePath() . $parts['path'];
DI::profiler()->startRecording('file');
$exists = file_exists($filename);
@ -267,47 +269,4 @@ class Avatar
Logger::debug('Unlink avatar', ['avatar' => $avatar]);
}
}
/**
* Fetch the avatar base path
*
* @return string
*/
private static function basePath(): string
{
$basepath = DI::config()->get('system', 'avatar_cache_path');
if (empty($basepath)) {
$basepath = DI::basePath() . self::BASE_PATH;
}
$basepath = rtrim($basepath, '/') . '/';
if (!file_exists($basepath)) {
// We only automatically create the folder when it is in the web root
if (strpos($basepath, DI::basePath()) !== 0) {
Logger::warning('Base directory does not exist', ['directory' => $basepath]);
return '';
}
if (!mkdir($basepath, 0775)) {
Logger::warning('Base directory could not be created', ['directory' => $basepath]);
return '';
}
}
return $basepath;
}
/**
* Fetch the avatar base url
*
* @return string
*/
private static function baseUrl(): string
{
$baseurl = DI::config()->get('system', 'avatar_cache_url');
if (!empty($baseurl)) {
return rtrim($baseurl, '/') . '/';
}
return DI::baseUrl() . self::BASE_PATH;
}
}

View file

@ -49,7 +49,7 @@ class BoundariesPager extends Pager
* @param string $last_item_id The id† of the last item in the displayed item list
* @param integer $itemsPerPage An optional number of items per page to override the default value
*/
public function __construct(L10n $l10n, string $queryString, string $first_item_id = null, string $last_item_id = null, int $itemsPerPage = 50)
public function __construct(L10n $l10n, $queryString, $first_item_id = null, $last_item_id = null, $itemsPerPage = 50)
{
parent::__construct($l10n, $queryString, $itemsPerPage);
@ -102,7 +102,7 @@ class BoundariesPager extends Pager
* @return string HTML string of the pager
* @throws \Exception
*/
public function renderMinimal(int $itemCount): string
public function renderMinimal(int $itemCount)
{
$displayedItemCount = max(0, intval($itemCount));

View file

@ -41,7 +41,7 @@ class ContactSelector
* @param boolean $disabled optional, default false
* @return string
*/
public static function pollInterval(string $current, bool $disabled = false): string
public static function pollInterval($current, $disabled = false)
{
$dis = (($disabled) ? ' disabled="disabled" ' : '');
$o = '';
@ -84,7 +84,7 @@ class ContactSelector
* @return string Server URL
* @throws \Exception
*/
private static function getServerURLForProfile(string $profile): string
private static function getServerURLForProfile($profile)
{
if (!empty(self::$server_url[$profile])) {
return self::$server_url[$profile];
@ -111,16 +111,13 @@ class ContactSelector
}
/**
* Determines network name
*
* @param string $network network of the contact
* @param string $profile optional, default empty
* @param string $protocol (Optional) Protocol that is used for the transmission
* @param int $gsid Server id
* @return string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function networkToName(string $network, string $profile = '', string $protocol = '', int $gsid = null): string
public static function networkToName($network, $profile = '', $protocol = '', $gsid = 0)
{
$nets = [
Protocol::DFRN => DI::l10n()->t('DFRN'),
@ -182,15 +179,12 @@ class ContactSelector
}
/**
* Determines network's icon name
*
* @param string $network network
* @param string $profile optional, default empty
* @param int $gsid Server id
* @return string Name for network icon
* @return string
* @throws \Exception
*/
public static function networkToIcon(string $network, string $profile = "", int $gsid = null): string
public static function networkToIcon($network, $profile = "", $gsid = 0)
{
$nets = [
Protocol::DFRN => 'friendica',

View file

@ -154,7 +154,7 @@ class Conversation
}
// Skip when the causer of the parent is the same as the author of the announce
if (($verb == Activity::ANNOUNCE) && !empty($thread_parent['causer-id']) && ($thread_parent['causer-id'] == $activity['author-id'])) {
if (($verb == Activity::ANNOUNCE) && !empty($thread_parent['causer-id'] && ($thread_parent['causer-id'] == $activity['author-id']))) {
continue;
}
@ -189,7 +189,7 @@ class Conversation
* @return string formatted text
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function formatActivity(array $links, string $verb, int $id): string
public function formatActivity(array $links, $verb, $id)
{
$this->profiler->startRecording('rendering');
$o = '';
@ -275,7 +275,7 @@ class Conversation
return $o;
}
public function statusEditor(array $x = [], int $notes_cid = 0, bool $popup = false): string
public function statusEditor(array $x = [], $notes_cid = 0, $popup = false)
{
$user = User::getById($this->app->getLoggedInUserId(), ['uid', 'nickname', 'allow_location', 'default-location']);
if (empty($user['uid'])) {
@ -414,8 +414,8 @@ class Conversation
* figures out how to determine page owner and other contextual items
* that are based on unique features of the calling module.
* @param array $items
* @param string $mode
* @param $update @TODO Which type?
* @param $mode
* @param $update
* @param bool $preview
* @param string $order
* @param int $uid
@ -423,7 +423,7 @@ class Conversation
* @throws ImagickException
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public function create(array $items, string $mode, $update, bool $preview = false, string $order = 'commented', int $uid = 0): string
public function create(array $items, $mode, $update, $preview = false, $order = 'commented', $uid = 0)
{
$this->profiler->startRecording('rendering');
@ -784,7 +784,7 @@ class Conversation
return $o;
}
private function getBlocklist(): array
private function getBlocklist()
{
if (!local_user()) {
return [];
@ -816,7 +816,7 @@ class Conversation
*
* @return array items with parents and comments
*/
private function addRowInformation(array $row, array $activity, array $thr_parent): array
private function addRowInformation(array $row, array $activity, array $thr_parent)
{
$this->profiler->startRecording('rendering');
@ -911,7 +911,7 @@ class Conversation
* @return array items with parents and comments
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private function addChildren(array $parents, bool $block_authors, string $order, int $uid, string $mode): array
private function addChildren(array $parents, bool $block_authors, string $order, int $uid, string $mode)
{
$this->profiler->startRecording('rendering');
if (count($parents) > 1) {
@ -1005,7 +1005,7 @@ class Conversation
* @param bool $recursive
* @return array
*/
private function getItemChildren(array &$item_list, array $parent, bool $recursive = true): array
private function getItemChildren(array &$item_list, array $parent, $recursive = true)
{
$this->profiler->startRecording('rendering');
$children = [];
@ -1040,7 +1040,7 @@ class Conversation
* @param array $items
* @return array
*/
private function sortItemChildren(array $items): array
private function sortItemChildren(array $items)
{
$this->profiler->startRecording('rendering');
$result = $items;
@ -1086,7 +1086,7 @@ class Conversation
* @param array $parent A tree-like array of items
* @return array
*/
private function smartFlattenConversation(array $parent): array
private function smartFlattenConversation(array $parent)
{
$this->profiler->startRecording('rendering');
if (!isset($parent['children']) || count($parent['children']) == 0) {
@ -1142,7 +1142,7 @@ class Conversation
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private function convSort(array $item_list, string $order): array
private function convSort(array $item_list, $order)
{
$this->profiler->startRecording('rendering');
$parents = [];
@ -1222,7 +1222,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrFeaturedReceived(array $a, array $b): int
private function sortThrFeaturedReceived(array $a, array $b)
{
if ($b['featured'] && !$a['featured']) {
return 1;
@ -1240,7 +1240,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrFeaturedCommented(array $a, array $b): int
private function sortThrFeaturedCommented(array $a, array $b)
{
if ($b['featured'] && !$a['featured']) {
return 1;
@ -1258,7 +1258,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrReceived(array $a, array $b): int
private function sortThrReceived(array $a, array $b)
{
return strcmp($b['received'], $a['received']);
}
@ -1270,7 +1270,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrReceivedRev(array $a, array $b): int
private function sortThrReceivedRev(array $a, array $b)
{
return strcmp($a['received'], $b['received']);
}
@ -1282,7 +1282,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrCommented(array $a, array $b): int
private function sortThrCommented(array $a, array $b)
{
return strcmp($b['commented'], $a['commented']);
}
@ -1294,7 +1294,7 @@ class Conversation
* @param array $b
* @return int
*/
private function sortThrCreated(array $a, array $b): int
private function sortThrCreated(array $a, array $b)
{
return strcmp($b['created'], $a['created']);
}

View file

@ -61,7 +61,7 @@ class HTML
* inner value from an attribute value and disregard the tag children.
* @return bool Whether a replacement was done
*/
private static function tagToBBCodeSub(DOMDocument $doc, string $tag, array $attributes, string $startbb, string $endbb, bool $ignoreChildren = false): bool
private static function tagToBBCodeSub(DOMDocument $doc, string $tag, array $attributes, string $startbb, string $endbb, bool $ignoreChildren = false)
{
$savestart = str_replace('$', '\x01', $startbb);
$replace = false;
@ -141,16 +141,8 @@ class HTML
* @return string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function toBBCode(string $message, string $basepath = ''): string
public static function toBBCode($message, $basepath = '')
{
/*
* Check if message is empty to prevent a lot code below being executed
* for just an empty message.
*/
if (empty($message)) {
return '';
}
DI::profiler()->startRecording('rendering');
$message = str_replace("\r", "", $message);
@ -417,7 +409,7 @@ class HTML
*
* @return string The expanded URL
*/
private static function qualifyURLsSub(array $matches, string $basepath): string
private static function qualifyURLsSub($matches, $basepath)
{
$base = parse_url($basepath);
unset($base['query']);
@ -444,7 +436,7 @@ class HTML
*
* @return string Body with expanded URLs
*/
private static function qualifyURLs(string $body, string $basepath): string
private static function qualifyURLs($body, $basepath)
{
$URLSearchString = "^\[\]";
@ -470,7 +462,7 @@ class HTML
return $body;
}
private static function breakLines(string $line, int $level, int $wraplength = 75): string
private static function breakLines($line, $level, $wraplength = 75)
{
if ($wraplength == 0) {
$wraplength = 2000000;
@ -511,7 +503,7 @@ class HTML
return implode("\n", $newlines);
}
private static function quoteLevel(string $message, int $wraplength = 75): string
private static function quoteLevel($message, $wraplength = 75)
{
$lines = explode("\n", $message);
@ -547,7 +539,7 @@ class HTML
return implode("\n", $newlines);
}
private static function collectURLs(string $message): array
private static function collectURLs($message)
{
$pattern = '/<a.*?href="(.*?)".*?>(.*?)<\/a>/is';
preg_match_all($pattern, $message, $result, PREG_SET_ORDER);
@ -593,7 +585,7 @@ class HTML
* @param bool $compact True: Completely strips image tags; False: Keeps image URLs
* @return string
*/
public static function toPlaintext(string $html, int $wraplength = 75, bool $compact = false): string
public static function toPlaintext(string $html, $wraplength = 75, $compact = false)
{
DI::profiler()->startRecording('rendering');
$message = str_replace("\r", "", $html);
@ -713,7 +705,7 @@ class HTML
* @param string $html
* @return string
*/
public static function toMarkdown(string $html): string
public static function toMarkdown($html)
{
DI::profiler()->startRecording('rendering');
$converter = new HtmlConverter(['hard_break' => true]);
@ -729,7 +721,7 @@ class HTML
* @param string $s
* @return string
*/
public static function toBBCodeVideo(string $s): string
public static function toBBCodeVideo($s)
{
$s = preg_replace(
'#<object[^>]+>(.*?)https?://www.youtube.com/((?:v|cp)/[A-Za-z0-9\-_=]+)(.*?)</object>#ism',
@ -759,7 +751,7 @@ class HTML
* @param string $base base url
* @return string
*/
public static function relToAbs(string $text, string $base): string
public static function relToAbs($text, $base)
{
if (empty($base)) {
return $text;
@ -798,7 +790,7 @@ class HTML
* @return string html for loader
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function scrollLoader(): string
public static function scrollLoader()
{
$tpl = Renderer::getMarkupTemplate("scroll_loader.tpl");
return Renderer::replaceMacros($tpl, [
@ -827,7 +819,7 @@ class HTML
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function micropro(array $contact, bool $redirect = false, string $class = '', bool $textmode = false): string
public static function micropro($contact, $redirect = false, $class = '', $textmode = false)
{
// Use the contact URL if no address is available
if (empty($contact['addr'])) {
@ -867,12 +859,13 @@ class HTML
*
* @param string $s Search query.
* @param string $id HTML id
* @param string $url Search url.
* @param bool $aside Display the search widgit aside.
*
* @return string Formatted HTML.
* @throws \Exception
*/
public static function search(string $s, string $id = 'search-box', bool $aside = true): string
public static function search($s, $id = 'search-box', $aside = true)
{
$mode = 'text';
@ -913,7 +906,7 @@ class HTML
* @param string $s
* @return string
*/
public static function toLink(string $s): string
public static function toLink($s)
{
$s = preg_replace("/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\'\%\$\!\+]*)/", ' <a href="$1" target="_blank" rel="noopener noreferrer">$1</a>', $s);
$s = preg_replace("/\<(.*?)(src|href)=(.*?)\&amp\;(.*?)\>/ism", '<$1$2=$3&$4>', $s);
@ -930,7 +923,7 @@ class HTML
* @return string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function applyContentFilter(string $html, array $reasons): string
public static function applyContentFilter($html, array $reasons)
{
if (count($reasons)) {
$tpl = Renderer::getMarkupTemplate('wall/content_filter.tpl');
@ -950,7 +943,7 @@ class HTML
* @param string $s
* @return string
*/
public static function unamp(string $s): string
public static function unamp($s)
{
return str_replace('&amp;', '&', $s);
}

View file

@ -45,7 +45,7 @@ class Widget
* @return string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function follow(string $value = ''): string
public static function follow($value = "")
{
return Renderer::replaceMacros(Renderer::getMarkupTemplate('widget/follow.tpl'), array(
'$connect' => DI::l10n()->t('Add New Contact'),
@ -58,10 +58,8 @@ class Widget
/**
* Return Find People widget
*
* @return string HTML code respresenting "People Widget"
*/
public static function findPeople(): string
public static function findPeople()
{
$global_dir = Search::getGlobalDirectory();
@ -99,7 +97,7 @@ class Widget
*
* @return array Unsupported networks
*/
public static function unavailableNetworks(): array
public static function unavailableNetworks()
{
// Always hide content from these networks
$networks = [Protocol::PHANTOM, Protocol::FACEBOOK, Protocol::APPNET, Protocol::ZOT];
@ -156,7 +154,7 @@ class Widget
* @return string
* @throws \Exception
*/
private static function filter(string $type, string $title, string $desc, string $all, string $baseUrl, array $options, string $selected = null): string
private static function filter($type, $title, $desc, $all, $baseUrl, array $options, $selected = null)
{
$queryString = parse_url($baseUrl, PHP_URL_QUERY);
$queryArray = [];
@ -193,7 +191,7 @@ class Widget
* @return string
* @throws \Exception
*/
public static function groups(string $baseurl, string $selected = ''): string
public static function groups($baseurl, $selected = '')
{
if (!local_user()) {
return '';

View file

@ -656,7 +656,7 @@ class Installer
* @return bool true if the check was successful, otherwise false
* @throws Exception
*/
public function checkDB(Database $dba): bool
public function checkDB(Database $dba)
{
$dba->reconnect();

View file

@ -60,7 +60,7 @@ class Worker
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function processQueue(bool $run_cron, Process $process)
public static function processQueue($run_cron, Process $process)
{
self::$up_start = microtime(true);
@ -169,7 +169,7 @@ class Worker
*
* @return boolean
*/
public static function isReady(): bool
public static function isReady()
{
// Count active workers and compare them with a maximum value that depends on the load
if (self::tooMuchWorkers()) {
@ -204,7 +204,7 @@ class Worker
* @return boolean Returns "true" if tasks are existing
* @throws \Exception
*/
public static function entriesExists(): bool
public static function entriesExists()
{
$stamp = (float)microtime(true);
$exists = DBA::exists('workerqueue', ["NOT `done` AND `pid` = 0 AND `next_try` < ?", DateTimeFormat::utcNow()]);
@ -218,7 +218,7 @@ class Worker
* @return integer Number of deferred entries in the worker queue
* @throws \Exception
*/
private static function deferredEntries(): int
private static function deferredEntries()
{
$stamp = (float)microtime(true);
$count = DBA::count('workerqueue', ["NOT `done` AND `pid` = 0 AND `retrial` > ?", 0]);
@ -233,7 +233,7 @@ class Worker
* @return integer Number of non executed entries in the worker queue
* @throws \Exception
*/
private static function totalEntries(): int
private static function totalEntries()
{
$stamp = (float)microtime(true);
$count = DBA::count('workerqueue', ['done' => false, 'pid' => 0]);
@ -248,7 +248,7 @@ class Worker
* @return integer Number of active worker processes
* @throws \Exception
*/
private static function highestPriority(): int
private static function highestPriority()
{
$stamp = (float)microtime(true);
$condition = ["`pid` = 0 AND NOT `done` AND `next_try` < ?", DateTimeFormat::utcNow()];
@ -269,7 +269,7 @@ class Worker
* @return integer Is there a process running with that priority?
* @throws \Exception
*/
private static function processWithPriorityActive(int $priority): int
private static function processWithPriorityActive($priority)
{
$condition = ["`priority` <= ? AND `pid` != 0 AND NOT `done`", $priority];
return DBA::exists('workerqueue', $condition);
@ -281,7 +281,7 @@ class Worker
* @param mixed $file
* @return bool
*/
private static function validateInclude(&$file): bool
private static function validateInclude(&$file)
{
$orig_file = $file;
@ -321,7 +321,7 @@ class Worker
* @return boolean "true" if further processing should be stopped
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function execute(array $queue): bool
public static function execute($queue)
{
$mypid = getmypid();
@ -454,7 +454,7 @@ class Worker
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function execFunction(array $queue, string $funcname, array $argv, bool $method_call)
private static function execFunction($queue, $funcname, $argv, $method_call)
{
$a = DI::app();
@ -543,7 +543,7 @@ class Worker
* @return bool Are more than 3/4 of the maximum connections used?
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function maxConnectionsReached(): bool
private static function maxConnectionsReached()
{
// Fetch the max value from the config. This is needed when the system cannot detect the correct value by itself.
$max = DI::config()->get("system", "max_connections");
@ -627,7 +627,7 @@ class Worker
* @return bool Are there too much workers running?
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function tooMuchWorkers(): bool
private static function tooMuchWorkers()
{
$queues = DI::config()->get("system", "worker_queues", 10);
@ -751,7 +751,7 @@ class Worker
* @return integer Number of active worker processes
* @throws \Exception
*/
private static function activeWorkers(): int
private static function activeWorkers()
{
$stamp = (float)microtime(true);
$count = DI::process()->countCommand('Worker.php');
@ -766,7 +766,7 @@ class Worker
* @return array List of worker process ids
* @throws \Exception
*/
private static function getWorkerPIDList(): array
private static function getWorkerPIDList()
{
$ids = [];
$stamp = (float)microtime(true);
@ -787,7 +787,7 @@ class Worker
/**
* Returns waiting jobs for the current process id
*
* @return array|bool waiting workerqueue jobs or FALSE on failture
* @return array waiting workerqueue jobs
* @throws \Exception
*/
private static function getWaitingJobForPID()
@ -809,7 +809,7 @@ class Worker
* @return array array with next jobs
* @throws \Exception
*/
private static function nextProcess(int $limit): array
private static function nextProcess(int $limit)
{
$priority = self::nextPriority();
if (empty($priority)) {
@ -844,7 +844,7 @@ class Worker
/**
* Returns the priority of the next workerqueue job
*
* @return string|bool priority or FALSE on failure
* @return string priority
* @throws \Exception
*/
private static function nextPriority()
@ -915,7 +915,7 @@ class Worker
/**
* Find and claim the next worker process for us
*
* @return void
* @return boolean Have we found something?
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function findWorkerProcesses()
@ -993,7 +993,7 @@ class Worker
* @return array worker processes
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function workerProcess(): array
public static function workerProcess()
{
// There can already be jobs for us in the queue.
$waiting = self::getWaitingJobForPID();
@ -1003,7 +1003,7 @@ class Worker
$stamp = (float)microtime(true);
if (!DI::lock()->acquire(self::LOCK_PROCESS)) {
return [];
return false;
}
self::$lock_duration += (microtime(true) - $stamp);
@ -1011,9 +1011,7 @@ class Worker
DI::lock()->release(self::LOCK_PROCESS);
// Prevents "Return value of Friendica\Core\Worker::workerProcess() must be of the type array, bool returned"
$process = self::getWaitingJobForPID();
return (is_array($process) ? $process : []);
return self::getWaitingJobForPID();
}
/**
@ -1099,7 +1097,7 @@ class Worker
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function spawnWorker(bool $do_cron = false)
public static function spawnWorker($do_cron = false)
{
if (Worker\Daemon::isMode() && DI::config()->get('system', 'worker_fork')) {
self::forkProcess($do_cron);
@ -1233,7 +1231,7 @@ class Worker
return $added;
}
public static function countWorkersByCommand(string $command): int
public static function countWorkersByCommand(string $command)
{
return DBA::count('workerqueue', ['done' => false, 'pid' => 0, 'command' => $command]);
}
@ -1246,7 +1244,7 @@ class Worker
* @param integer $max_level maximum retrial level
* @return integer the next retrial level value
*/
private static function getNextRetrial(array $queue, int $max_level): int
private static function getNextRetrial($queue, $max_level)
{
$created = strtotime($queue['created']);
$retrial_time = time() - $created;
@ -1316,10 +1314,9 @@ class Worker
/**
* Check if the system is inside the defined maintenance window
*
* @param bool $check_last_execution Whether check last execution
* @return boolean
*/
public static function isInMaintenanceWindow(bool $check_last_execution = false): bool
public static function isInMaintenanceWindow(bool $check_last_execution = false)
{
// Calculate the seconds of the start end end of the maintenance window
$start = strtotime(DI::config()->get('system', 'maintenance_start')) % 86400;

View file

@ -427,7 +427,7 @@ class DBA
* @return boolean was the update successfull?
* @throws \Exception
*/
public static function update($table, array $fields, array $condition, $old_fields = [], array $params = [])
public static function update($table, $fields, $condition, $old_fields = [], $params = [])
{
return DI::dba()->update($table, $fields, $condition, $old_fields, $params);
}
@ -443,7 +443,7 @@ class DBA
* @throws \Exception
* @see self::select
*/
public static function selectFirst($table, array $fields = [], array $condition = [], array $params = [])
public static function selectFirst($table, array $fields = [], array $condition = [], $params = [])
{
return DI::dba()->selectFirst($table, $fields, $condition, $params);
}
@ -512,7 +512,7 @@ class DBA
* $count = DBA::count($table, $condition);
* @throws \Exception
*/
public static function count($table, array $condition = [], array $params = []): int
public static function count($table, array $condition = [], array $params = [])
{
return DI::dba()->count($table, $condition, $params);
}
@ -771,7 +771,7 @@ class DBA
*
* @return array Data array
*/
public static function toArray($stmt, $do_close = true, int $count = 0): array
public static function toArray($stmt, $do_close = true, int $count = 0)
{
return DI::dba()->toArray($stmt, $do_close, $count);
}
@ -783,7 +783,7 @@ class DBA
* @param array $fields
* @return array casted fields
*/
public static function castFields(string $table, array $fields): array
public static function castFields(string $table, array $fields)
{
return DI::dba()->castFields($table, $fields);
}
@ -793,7 +793,7 @@ class DBA
*
* @return string Error number (0 if no error)
*/
public static function errorNo(): int
public static function errorNo()
{
return DI::dba()->errorNo();
}
@ -803,7 +803,7 @@ class DBA
*
* @return string Error message ('' if no error)
*/
public static function errorMessage(): string
public static function errorMessage()
{
return DI::dba()->errorMessage();
}
@ -814,7 +814,7 @@ class DBA
* @param object $stmt statement object
* @return boolean was the close successful?
*/
public static function close($stmt): bool
public static function close($stmt)
{
return DI::dba()->close($stmt);
}
@ -827,7 +827,7 @@ class DBA
* 'amount' => Number of concurrent database processes
* @throws \Exception
*/
public static function processlist(): array
public static function processlist()
{
return DI::dba()->processlist();
}

View file

@ -150,9 +150,10 @@ class DBStructure
* Print out database error messages
*
* @param string $message Message to be added to the error message
*
* @return string Error message
*/
private static function printUpdateError(string $message): string
private static function printUpdateError($message)
{
echo DI::l10n()->t("\nError %d occurred during database update:\n%s\n",
DBA::errorNo(), DBA::errorMessage());
@ -163,7 +164,7 @@ class DBStructure
public static function writeStructure()
{
$tables = [];
foreach (self::definition('') as $name => $definition) {
foreach (self::definition(null) as $name => $definition) {
$indexes = [[
'name' => 'Name',
'fields' => 'Fields',
@ -224,8 +225,8 @@ class DBStructure
$field['default'] = $value['default'] ?? 'NULL';
$field['extra'] = $value['extra'] ?? '';
foreach ($field as $fieldName => $fieldvalue) {
$lengths[$fieldName] = max($lengths[$fieldName] ?? 0, strlen($fieldvalue));
foreach ($field as $fieldname => $fieldvalue) {
$lengths[$fieldname] = max($lengths[$fieldname] ?? 0, strlen($fieldvalue));
}
$fields[] = $field;
@ -262,7 +263,7 @@ class DBStructure
file_put_contents($filename, $content);
}
public static function printStructure(string $basePath)
public static function printStructure($basePath)
{
$database = self::definition($basePath, false);
@ -287,12 +288,12 @@ class DBStructure
* On first pass, defines DB_UPDATE_VERSION constant.
*
* @see static/dbstructure.config.php
* @param string $basePath The base path of this application
* @param boolean $with_addons_structure Whether to tack on addons additional tables
* @param string $basePath The base path of this application
* @return array
* @throws Exception
*/
public static function definition(string $basePath, bool $with_addons_structure = true): array
public static function definition($basePath, $with_addons_structure = true)
{
if (!self::$definition) {
if (empty($basePath)) {
@ -302,7 +303,7 @@ class DBStructure
$filename = $basePath . '/static/dbstructure.config.php';
if (!is_readable($filename)) {
throw new Exception('Missing database structure config file static/dbstructure.config.php at basePath=' . $basePath);
throw new Exception('Missing database structure config file static/dbstructure.config.php');
}
$definition = require $filename;
@ -326,23 +327,23 @@ class DBStructure
/**
* Get field data for the given table
*
* @param string $table Tavle to load field definitions for
* @param string $table
* @param array $data data fields
* @return array fields for the given
*/
public static function getFieldsForTable(string $table, array $data = []): array
public static function getFieldsForTable(string $table, array $data = [])
{
$definition = DBStructure::definition('', false);
if (empty($definition[$table])) {
return [];
}
$fieldNames = array_keys($definition[$table]['fields']);
$fieldnames = array_keys($definition[$table]['fields']);
$fields = [];
// Assign all field that are present in the table
foreach ($fieldNames as $field) {
foreach ($fieldnames as $field) {
if (isset($data[$field])) {
// Limit the length of varchar, varbinary, char and binrary fields
if (is_string($data[$field]) && preg_match("/char\((\d*)\)/", $definition[$table]['fields'][$field]['type'], $result)) {
@ -357,54 +358,45 @@ class DBStructure
return $fields;
}
/**
* Creates given table with structure
*
* @param string $name Name of table
* @param array $structure Structure of table
* @param boolean $verbose Output SQL statements
* @param boolean $action Whether to run the SQL commands
* @return Whether the SQL command ran successful
*/
private static function createTable(string $name, array $structure, bool $verbose, bool $action): bool
private static function createTable($name, $structure, $verbose, $action)
{
$r = true;
$engine = '';
$comment = '';
$engine = "";
$comment = "";
$sql_rows = [];
$primary_keys = [];
$foreign_keys = [];
foreach ($structure['fields'] as $fieldName => $field) {
$sql_rows[] = '`' . DBA::escape($fieldName) . '` ' . self::FieldCommand($field);
foreach ($structure["fields"] as $fieldname => $field) {
$sql_rows[] = "`" . DBA::escape($fieldname) . "` " . self::FieldCommand($field);
if (!empty($field['primary'])) {
$primary_keys[] = $fieldName;
$primary_keys[] = $fieldname;
}
if (!empty($field['foreign'])) {
$foreign_keys[$fieldName] = $field;
$foreign_keys[$fieldname] = $field;
}
}
if (!empty($structure['indexes'])) {
foreach ($structure['indexes'] as $indexName => $fieldNames) {
$sql_index = self::createIndex($indexName, $fieldNames, '');
if (!empty($structure["indexes"])) {
foreach ($structure["indexes"] as $indexname => $fieldnames) {
$sql_index = self::createIndex($indexname, $fieldnames, "");
if (!is_null($sql_index)) {
$sql_rows[] = $sql_index;
}
}
}
foreach ($foreign_keys as $fieldName => $parameters) {
$sql_rows[] = self::foreignCommand($name, $fieldName, $parameters);
foreach ($foreign_keys as $fieldname => $parameters) {
$sql_rows[] = self::foreignCommand($name, $fieldname, $parameters);
}
if (isset($structure['engine'])) {
$engine = ' ENGINE=' . $structure['engine'];
if (isset($structure["engine"])) {
$engine = " ENGINE=" . $structure["engine"];
}
if (isset($structure['comment'])) {
$comment = " COMMENT='" . DBA::escape($structure['comment']) . "'";
if (isset($structure["comment"])) {
$comment = " COMMENT='" . DBA::escape($structure["comment"]) . "'";
}
$sql = implode(",\n\t", $sql_rows);
@ -422,77 +414,71 @@ class DBStructure
return $r;
}
/**
* Returns SQL statement for field
*
* @param array $parameters Parameters for SQL statement
* @param boolean $create Whether to include PRIMARY KEY statement (unused)
* @return string SQL statement part
*/
private static function FieldCommand(array $parameters, bool $create = true): string
private static function FieldCommand($parameters, $create = true)
{
$fieldstruct = $parameters['type'];
$fieldstruct = $parameters["type"];
if (isset($parameters['Collation'])) {
$fieldstruct .= ' COLLATE ' . $parameters['Collation'];
if (isset($parameters["Collation"])) {
$fieldstruct .= " COLLATE " . $parameters["Collation"];
}
if (isset($parameters['not null'])) {
$fieldstruct .= ' NOT NULL';
if (isset($parameters["not null"])) {
$fieldstruct .= " NOT NULL";
}
if (isset($parameters['default'])) {
if (strpos(strtolower($parameters['type']), 'int') !== false) {
$fieldstruct .= ' DEFAULT ' . $parameters['default'];
if (isset($parameters["default"])) {
if (strpos(strtolower($parameters["type"]), "int") !== false) {
$fieldstruct .= " DEFAULT " . $parameters["default"];
} else {
$fieldstruct .= " DEFAULT '" . $parameters['default'] . "'";
$fieldstruct .= " DEFAULT '" . $parameters["default"] . "'";
}
}
if (isset($parameters['extra'])) {
$fieldstruct .= ' ' . $parameters['extra'];
if (isset($parameters["extra"])) {
$fieldstruct .= " " . $parameters["extra"];
}
if (isset($parameters['comment'])) {
$fieldstruct .= " COMMENT '" . DBA::escape($parameters['comment']) . "'";
if (isset($parameters["comment"])) {
$fieldstruct .= " COMMENT '" . DBA::escape($parameters["comment"]) . "'";
}
/*if (($parameters['primary'] != '') && $create)
$fieldstruct .= ' PRIMARY KEY';*/
/*if (($parameters["primary"] != "") && $create)
$fieldstruct .= " PRIMARY KEY";*/
return $fieldstruct;
return ($fieldstruct);
}
private static function createIndex(string $indexName, array $fieldNames, string $method = 'ADD')
private static function createIndex($indexname, $fieldnames, $method = "ADD")
{
$method = strtoupper(trim($method));
if ($method != "" && $method != "ADD") {
throw new Exception("Invalid parameter 'method' in self::createIndex(): '$method'");
}
if (in_array($fieldNames[0], ["UNIQUE", "FULLTEXT"])) {
$index_type = array_shift($fieldNames);
if (in_array($fieldnames[0], ["UNIQUE", "FULLTEXT"])) {
$index_type = array_shift($fieldnames);
$method .= " " . $index_type;
}
$names = "";
foreach ($fieldNames as $fieldName) {
foreach ($fieldnames as $fieldname) {
if ($names != "") {
$names .= ",";
}
if (preg_match('|(.+)\((\d+)\)|', $fieldName, $matches)) {
if (preg_match('|(.+)\((\d+)\)|', $fieldname, $matches)) {
$names .= "`" . DBA::escape($matches[1]) . "`(" . intval($matches[2]) . ")";
} else {
$names .= "`" . DBA::escape($fieldName) . "`";
$names .= "`" . DBA::escape($fieldname) . "`";
}
}
if ($indexName == "PRIMARY") {
if ($indexname == "PRIMARY") {
return sprintf("%s PRIMARY KEY(%s)", $method, $names);
}
return sprintf("%s INDEX `%s` (%s)", $method, DBA::escape($indexName), $names);
$sql = sprintf("%s INDEX `%s` (%s)", $method, DBA::escape($indexname), $names);
return ($sql);
}
/**
@ -514,7 +500,7 @@ class DBStructure
* @return string Empty string if the update is successful, error messages otherwise
* @throws Exception
*/
public static function performUpdate(bool $enable_maintenance_mode = true, bool $verbose = false): string
public static function performUpdate(bool $enable_maintenance_mode = true, bool $verbose = false)
{
if ($enable_maintenance_mode) {
DI::config()->set('system', 'maintenance', 1);
@ -538,7 +524,7 @@ class DBStructure
* @return string Empty string if the update is successful, error messages otherwise
* @throws Exception
*/
public static function install(string $basePath): string
public static function install(string $basePath)
{
return self::update($basePath, false, true, true);
}
@ -555,7 +541,7 @@ class DBStructure
* @return string Empty string if the update is successful, error messages otherwise
* @throws Exception
*/
private static function update(string $basePath, bool $verbose, bool $action, bool $install = false, array $tables = null, array $definition = null): string
private static function update($basePath, $verbose, $action, $install = false, array $tables = null, array $definition = null)
{
$in_maintenance_mode = DI::config()->get('system', 'maintenance');
@ -620,15 +606,15 @@ class DBStructure
* or the definition differ from current status
* and index name doesn't start with "local_"
*/
foreach ($database[$name]["indexes"] as $indexName => $fieldNames) {
$current_index_definition = implode(",", $fieldNames);
if (isset($structure["indexes"][$indexName])) {
$new_index_definition = implode(",", $structure["indexes"][$indexName]);
foreach ($database[$name]["indexes"] as $indexname => $fieldnames) {
$current_index_definition = implode(",", $fieldnames);
if (isset($structure["indexes"][$indexname])) {
$new_index_definition = implode(",", $structure["indexes"][$indexname]);
} else {
$new_index_definition = "__NOT_SET__";
}
if ($current_index_definition != $new_index_definition && substr($indexName, 0, 6) != 'local_') {
$sql2 = self::dropIndex($indexName);
if ($current_index_definition != $new_index_definition && substr($indexname, 0, 6) != 'local_') {
$sql2 = self::dropIndex($indexname);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
@ -637,9 +623,9 @@ class DBStructure
}
}
// Compare the field structure field by field
foreach ($structure["fields"] as $fieldName => $parameters) {
if (!isset($database[$name]["fields"][$fieldName])) {
$sql2 = self::addTableField($fieldName, $parameters);
foreach ($structure["fields"] as $fieldname => $parameters) {
if (!isset($database[$name]["fields"][$fieldname])) {
$sql2 = self::addTableField($fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
@ -647,7 +633,7 @@ class DBStructure
}
} else {
// Compare the field definition
$field_definition = $database[$name]["fields"][$fieldName];
$field_definition = $database[$name]["fields"][$fieldname];
// Remove the relation data that is used for the referential integrity
unset($parameters['relation']);
@ -667,7 +653,7 @@ class DBStructure
$current_field_definition = DBA::cleanQuery(implode(",", $field_definition));
$new_field_definition = DBA::cleanQuery(implode(",", $parameters));
if ($current_field_definition != $new_field_definition) {
$sql2 = self::modifyTableField($fieldName, $parameters);
$sql2 = self::modifyTableField($fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
@ -684,15 +670,15 @@ class DBStructure
* Don't create keys if table is new
*/
if (!$is_new_table) {
foreach ($structure["indexes"] as $indexName => $fieldNames) {
if (isset($database[$name]["indexes"][$indexName])) {
$current_index_definition = implode(",", $database[$name]["indexes"][$indexName]);
foreach ($structure["indexes"] as $indexname => $fieldnames) {
if (isset($database[$name]["indexes"][$indexname])) {
$current_index_definition = implode(",", $database[$name]["indexes"][$indexname]);
} else {
$current_index_definition = "__NOT_SET__";
}
$new_index_definition = implode(",", $fieldNames);
$new_index_definition = implode(",", $fieldnames);
if ($current_index_definition != $new_index_definition) {
$sql2 = self::createIndex($indexName, $fieldNames);
$sql2 = self::createIndex($indexname, $fieldnames);
if ($sql2 != "") {
if ($sql3 == "") {
@ -708,17 +694,17 @@ class DBStructure
// Foreign keys
// Compare the field structure field by field
foreach ($structure["fields"] as $fieldName => $parameters) {
foreach ($structure["fields"] as $fieldname => $parameters) {
if (empty($parameters['foreign'])) {
continue;
}
$constraint = self::getConstraintName($name, $fieldName, $parameters);
$constraint = self::getConstraintName($name, $fieldname, $parameters);
unset($existing_foreign_keys[$constraint]);
if (empty($database[$name]['foreign_keys'][$constraint])) {
$sql2 = self::addForeignKey($name, $fieldName, $parameters);
$sql2 = self::addForeignKey($name, $fieldname, $parameters);
if ($sql3 == "") {
$sql3 = "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
@ -781,9 +767,9 @@ class DBStructure
// Now have a look at the field collations
// Compare the field structure field by field
foreach ($structure["fields"] as $fieldName => $parameters) {
foreach ($structure["fields"] as $fieldname => $parameters) {
// Compare the field definition
$field_definition = ($database[$name]["fields"][$fieldName] ?? '') ?: ['Collation' => ''];
$field_definition = ($database[$name]["fields"][$fieldname] ?? '') ?: ['Collation' => ''];
// Define the default collation if not given
if (!isset($parameters['Collation']) && !empty($field_definition['Collation'])) {
@ -793,7 +779,7 @@ class DBStructure
}
if ($field_definition['Collation'] != $parameters['Collation']) {
$sql2 = self::modifyTableField($fieldName, $parameters);
$sql2 = self::modifyTableField($fieldname, $parameters);
if (($sql3 == "") || (substr($sql3, -2, 2) == "; ")) {
$sql3 .= "ALTER" . $ignore . " TABLE `" . $name . "` " . $sql2;
} else {
@ -840,13 +826,7 @@ class DBStructure
return $errors;
}
/**
* Returns an array with table structure information
*
* @param string $table Name of table
* @return array Table structure information
*/
private static function tableStructure(string $table): array
private static function tableStructure($table)
{
// This query doesn't seem to be executable as a prepared statement
$indexes = DBA::toArray(DBA::p("SHOW INDEX FROM " . DBA::quoteIdentifier($table)));
@ -929,42 +909,41 @@ class DBStructure
}
}
return [
'fields' => $fielddata,
'indexes' => $indexdata,
'foreign_keys' => $foreigndata,
'table_status' => $table_status
];
return ["fields" => $fielddata, "indexes" => $indexdata,
"foreign_keys" => $foreigndata, "table_status" => $table_status];
}
private static function dropIndex(string $indexName): string
private static function dropIndex($indexname)
{
return sprintf("DROP INDEX `%s`", DBA::escape($indexName));
$sql = sprintf("DROP INDEX `%s`", DBA::escape($indexname));
return ($sql);
}
private static function addTableField(string $fieldName, array $parameters): string
private static function addTableField($fieldname, $parameters)
{
return sprintf("ADD `%s` %s", DBA::escape($fieldName), self::FieldCommand($parameters));
$sql = sprintf("ADD `%s` %s", DBA::escape($fieldname), self::FieldCommand($parameters));
return ($sql);
}
private static function modifyTableField(string $fieldName, array $parameters): string
private static function modifyTableField($fieldname, $parameters)
{
return sprintf("MODIFY `%s` %s", DBA::escape($fieldName), self::FieldCommand($parameters, false));
$sql = sprintf("MODIFY `%s` %s", DBA::escape($fieldname), self::FieldCommand($parameters, false));
return ($sql);
}
private static function getConstraintName(string $tableName, string $fieldName, array $parameters): string
private static function getConstraintName(string $tablename, string $fieldname, array $parameters)
{
$foreign_table = array_keys($parameters['foreign'])[0];
$foreign_field = array_values($parameters['foreign'])[0];
return $tableName . '-' . $fieldName. '-' . $foreign_table. '-' . $foreign_field;
return $tablename . "-" . $fieldname. "-" . $foreign_table. "-" . $foreign_field;
}
private static function foreignCommand(string $tableName, string $fieldName, array $parameters) {
private static function foreignCommand(string $tablename, string $fieldname, array $parameters) {
$foreign_table = array_keys($parameters['foreign'])[0];
$foreign_field = array_values($parameters['foreign'])[0];
$sql = "FOREIGN KEY (`" . $fieldName . "`) REFERENCES `" . $foreign_table . "` (`" . $foreign_field . "`)";
$sql = "FOREIGN KEY (`" . $fieldname . "`) REFERENCES `" . $foreign_table . "` (`" . $foreign_field . "`)";
if (!empty($parameters['foreign']['on update'])) {
$sql .= " ON UPDATE " . strtoupper($parameters['foreign']['on update']);
@ -981,12 +960,12 @@ class DBStructure
return $sql;
}
private static function addForeignKey(string $tableName, string $fieldName, array $parameters): string
private static function addForeignKey(string $tablename, string $fieldname, array $parameters)
{
return sprintf("ADD %s", self::foreignCommand($tableName, $fieldName, $parameters));
return sprintf("ADD %s", self::foreignCommand($tablename, $fieldname, $parameters));
}
private static function dropForeignKey(string $constraint): string
private static function dropForeignKey(string $constraint)
{
return sprintf("DROP FOREIGN KEY `%s`", $constraint);
}
@ -1004,7 +983,7 @@ class DBStructure
* @return boolean Was the renaming successful?
* @throws Exception
*/
public static function rename(string $table, array $columns, int $type = self::RENAME_COLUMN): bool
public static function rename($table, $columns, $type = self::RENAME_COLUMN)
{
if (empty($table) || empty($columns)) {
return false;
@ -1040,7 +1019,7 @@ class DBStructure
return false;
}
$sql .= ';';
$sql .= ";";
$stmt = DBA::p($sql);
@ -1100,33 +1079,39 @@ class DBStructure
/**
* Check if a foreign key exists for the given table field
*
* @param string $table Table name
* @param string $field Field name
* @return boolean Wether a foreign key exists
* @param string $table
* @param string $field
* @return boolean
*/
public static function existsForeignKeyForField(string $table, string $field): bool
public static function existsForeignKeyForField(string $table, string $field)
{
return DBA::exists(['INFORMATION_SCHEMA' => 'KEY_COLUMN_USAGE'],
["`TABLE_SCHEMA` = ? AND `TABLE_NAME` = ? AND `COLUMN_NAME` = ? AND `REFERENCED_TABLE_SCHEMA` IS NOT NULL",
DBA::databaseName(), $table, $field]);
}
/**
* Check if a table exists
*
* @param string $table Single table name (please loop yourself)
* @param string|array $table Table name
*
* @return boolean Does the table exist?
* @throws Exception
*/
public static function existsTable(string $table): bool
public static function existsTable($table)
{
if (empty($table)) {
return false;
}
if (is_array($table)) {
$condition = ['table_schema' => key($table), 'table_name' => current($table)];
} else {
$condition = ['table_schema' => DBA::databaseName(), 'table_name' => $table];
}
return DBA::exists(['information_schema' => 'tables'], $condition);
$result = DBA::exists(['information_schema' => 'tables'], $condition);
return $result;
}
/**
@ -1137,7 +1122,7 @@ class DBStructure
* @return array An array of the table columns
* @throws Exception
*/
public static function getColumns(string $table): array
public static function getColumns($table)
{
$stmtColumns = DBA::p("SHOW COLUMNS FROM `" . $table . "`");
return DBA::toArray($stmtColumns);
@ -1145,9 +1130,6 @@ class DBStructure
/**
* Check if initial database values do exist - or create them
*
* @param bool $verbose Whether to output messages
* @return void
*/
public static function checkInitialValues(bool $verbose = false)
{
@ -1283,7 +1265,7 @@ class DBStructure
*
* @return boolean
*/
private static function isUpdating(): bool
private static function isUpdating()
{
$isUpdate = false;

View file

@ -541,7 +541,7 @@ class Database
if (!$retval = $this->connection->query($this->replaceParameters($sql, $args))) {
$errorInfo = $this->connection->errorInfo();
$this->error = $errorInfo[2];
$this->errorno = (int) $errorInfo[1];
$this->errorno = $errorInfo[1];
$retval = false;
$is_error = true;
break;
@ -554,7 +554,7 @@ class Database
if (!$stmt = $this->connection->prepare($sql)) {
$errorInfo = $this->connection->errorInfo();
$this->error = $errorInfo[2];
$this->errorno = (int) $errorInfo[1];
$this->errorno = $errorInfo[1];
$retval = false;
$is_error = true;
break;
@ -574,7 +574,7 @@ class Database
if (!$stmt->execute()) {
$errorInfo = $stmt->errorInfo();
$this->error = $errorInfo[2];
$this->errorno = (int) $errorInfo[1];
$this->errorno = $errorInfo[1];
$retval = false;
$is_error = true;
} else {
@ -709,7 +709,7 @@ class Database
}
$this->error = $error;
$this->errorno = (int) $errorno;
$this->errorno = $errorno;
}
$this->profiler->stopRecording();
@ -1541,7 +1541,7 @@ class Database
*
* @return array Data array
*/
public function toArray($stmt, bool $do_close = true, int $count = 0): array
public function toArray($stmt, $do_close = true, int $count = 0)
{
if (is_bool($stmt)) {
return [];
@ -1632,7 +1632,7 @@ class Database
*
* @return string Error number (0 if no error)
*/
public function errorNo(): int
public function errorNo()
{
return $this->errorno;
}
@ -1654,7 +1654,7 @@ class Database
*
* @return boolean was the close successful?
*/
public function close($stmt): bool
public function close($stmt)
{
$this->profiler->startRecording('database');
@ -1696,7 +1696,7 @@ class Database
* 'amount' => Number of concurrent database processes
* @throws \Exception
*/
public function processlist(): array
public function processlist()
{
$ret = $this->p("SHOW PROCESSLIST");
$data = $this->toArray($ret);

View file

@ -133,7 +133,7 @@ class PostUpdate
}
$max_item_delivery_data = DBA::selectFirst('item-delivery-data', ['iid'], ['queue_count > 0 OR queue_done > 0'], ['order' => ['iid']]);
$max_iid = $max_item_delivery_data['iid'] ?? 0;
$max_iid = $max_item_delivery_data['iid'];
Logger::info('Start update1297 with max iid: ' . $max_iid);

View file

@ -57,7 +57,7 @@ class Account extends BaseFactory
* @throws HTTPException\InternalServerErrorException
* @throws ImagickException|HTTPException\NotFoundException
*/
public function createFromContactId(int $contactId, int $uid = 0): \Friendica\Object\Api\Mastodon\Account
public function createFromContactId(int $contactId, $uid = 0): \Friendica\Object\Api\Mastodon\Account
{
$contact = Contact::getById($contactId, ['uri-id']);
if (empty($contact)) {
@ -74,7 +74,7 @@ class Account extends BaseFactory
* @throws HTTPException\InternalServerErrorException
* @throws ImagickException|HTTPException\NotFoundException
*/
public function createFromUriId(int $contactUriId, int $uid = 0): \Friendica\Object\Api\Mastodon\Account
public function createFromUriId(int $contactUriId, $uid = 0): \Friendica\Object\Api\Mastodon\Account
{
$account = DBA::selectFirst('account-user-view', [], ['uri-id' => $contactUriId, 'uid' => [0, $uid]], ['order' => ['id' => true]]);
if (empty($account)) {

View file

@ -70,7 +70,6 @@ class Status extends BaseFactory
/**
* @param int $uriId Uri-ID of the item
* @param int $uid Item user
* @param bool $include_entities Whether to include entities
*
* @return \Friendica\Object\Api\Twitter\Status
* @throws HTTPException\InternalServerErrorException
@ -91,13 +90,12 @@ class Status extends BaseFactory
/**
* @param int $uriId Uri-ID of the item
* @param int $uid Item user
* @param bool $include_entities Whether to include entities
*
* @return \Friendica\Object\Api\Twitter\Status
* @throws HTTPException\InternalServerErrorException
* @throws ImagickException|HTTPException\NotFoundException
*/
public function createFromUriId(int $uriId, int $uid = 0, bool $include_entities = false): \Friendica\Object\Api\Twitter\Status
public function createFromUriId(int $uriId, $uid = 0, $include_entities = false): \Friendica\Object\Api\Twitter\Status
{
$fields = ['parent-uri-id', 'uri-id', 'uid', 'author-id', 'author-link', 'author-network', 'owner-id', 'causer-id',
'starred', 'app', 'title', 'body', 'raw-body', 'created', 'network','post-reason', 'language', 'gravity',
@ -112,7 +110,6 @@ class Status extends BaseFactory
/**
* @param array $item item array
* @param int $uid Item user
* @param bool $include_entities Whether to include entities
*
* @return \Friendica\Object\Api\Twitter\Status
* @throws HTTPException\InternalServerErrorException

View file

@ -51,7 +51,7 @@ class User extends BaseFactory
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public function createFromContactId(int $contactId, int $uid = 0, bool $skip_status = true, bool $include_user_entities = true)
public function createFromContactId(int $contactId, $uid = 0, $skip_status = true, $include_user_entities = true)
{
$cdata = Contact::getPublicAndUserContactID($contactId, $uid);
if (!empty($cdata)) {
@ -78,7 +78,7 @@ class User extends BaseFactory
return new \Friendica\Object\Api\Twitter\User($publicContact, $apcontact, $userContact, $status, $include_user_entities);
}
public function createFromUserId(int $uid, bool $skip_status = true, bool $include_user_entities = true)
public function createFromUserId(int $uid, $skip_status = true, $include_user_entities = true)
{
return $this->createFromContactId(Contact::getPublicIdByUserId($uid), $uid, $skip_status, $include_user_entities);
}

View file

@ -57,7 +57,7 @@ class LegacyModule extends BaseModule
* @param string $file_path
* @throws \Exception
*/
private function setModuleFile(string $file_path)
private function setModuleFile($file_path)
{
if (!is_readable($file_path)) {
throw new \Exception(DI::l10n()->t('Legacy module file not found: %s', $file_path));
@ -87,7 +87,7 @@ class LegacyModule extends BaseModule
* @return string
* @throws \Exception
*/
private function runModuleFunction(string $function_suffix): string
private function runModuleFunction(string $function_suffix)
{
$function_name = $this->moduleName . '_' . $function_suffix;

View file

@ -48,7 +48,7 @@ class APContact
* @param string $addr Address
* @return array webfinger data
*/
private static function fetchWebfingerData(string $addr): array
private static function fetchWebfingerData(string $addr)
{
$addr_parts = explode('@', $addr);
if (count($addr_parts) != 2) {
@ -117,14 +117,14 @@ class APContact
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getByURL(string $url, $update = null): array
public static function getByURL($url, $update = null)
{
if (empty($url) || Network::isUrlBlocked($url)) {
Logger::info('Domain is blocked', ['url' => $url]);
return [];
}
$fetched_contact = [];
$fetched_contact = false;
if (empty($update)) {
if (is_null($update)) {
@ -220,14 +220,14 @@ class APContact
$apcontact['type'] = str_replace('as:', '', JsonLD::fetchElement($compacted, '@type'));
$apcontact['following'] = JsonLD::fetchElement($compacted, 'as:following', '@id');
$apcontact['followers'] = JsonLD::fetchElement($compacted, 'as:followers', '@id');
$apcontact['inbox'] = (JsonLD::fetchElement($compacted, 'ldp:inbox', '@id') ?? '');
$apcontact['inbox'] = JsonLD::fetchElement($compacted, 'ldp:inbox', '@id');
self::unarchiveInbox($apcontact['inbox'], false);
$apcontact['outbox'] = JsonLD::fetchElement($compacted, 'as:outbox', '@id');
$apcontact['sharedinbox'] = '';
if (!empty($compacted['as:endpoints'])) {
$apcontact['sharedinbox'] = (JsonLD::fetchElement($compacted['as:endpoints'], 'as:sharedInbox', '@id') ?? '');
$apcontact['sharedinbox'] = JsonLD::fetchElement($compacted['as:endpoints'], 'as:sharedInbox', '@id');
self::unarchiveInbox($apcontact['sharedinbox'], true);
}
@ -241,10 +241,9 @@ class APContact
$apcontact['name'] = $apcontact['nick'];
}
$apcontact['about'] = HTML::toBBCode(JsonLD::fetchElement($compacted, 'as:summary', '@value') ?? '');
$apcontact['about'] = HTML::toBBCode(JsonLD::fetchElement($compacted, 'as:summary', '@value'));
$ims = JsonLD::fetchElementArray($compacted, 'vcard:hasInstantMessage');
if (!empty($ims)) {
foreach ($ims as $link) {
if (substr($link, 0, 5) == 'xmpp:') {
@ -526,9 +525,8 @@ class APContact
*
* @param string $url inbox url
* @param boolean $shared Shared Inbox
* @return void
*/
private static function unarchiveInbox(string $url, bool $shared)
private static function unarchiveInbox($url, $shared)
{
if (empty($url)) {
return;

View file

@ -44,7 +44,7 @@ class Attach
* @return array field list
* @throws \Exception
*/
private static function getFields(): array
private static function getFields()
{
$allfields = DBStructure::definition(DI::app()->getBasePath(), false);
$fields = array_keys($allfields['attach']['fields']);
@ -59,7 +59,7 @@ class Attach
* @param array $conditions Array of fields for conditions
* @param array $params Array of several parameters
*
* @return array|bool
* @return array
*
* @throws \Exception
* @see \Friendica\Database\DBA::selectToArray
@ -102,7 +102,7 @@ class Attach
* @return boolean
* @throws \Exception
*/
public static function exists(array $conditions): bool
public static function exists(array $conditions)
{
return DBA::exists('attach', $conditions);
}
@ -117,7 +117,7 @@ class Attach
* @throws \Exception
* @see \Friendica\Database\DBA::select
*/
public static function getById(int $id)
public static function getById($id)
{
return self::selectFirst([], ['id' => $id]);
}
@ -132,7 +132,7 @@ class Attach
* @throws \Exception
* @see \Friendica\Database\DBA::select
*/
public static function getByIdWithPermission(int $id)
public static function getByIdWithPermission($id)
{
$r = self::selectFirst(['uid'], ['id' => $id]);
if ($r === false) {
@ -156,10 +156,10 @@ class Attach
*
* @param array $item Attachment data. Needs at least 'id', 'backend-class', 'backend-ref'
*
* @return string|null file data or null on failure
* @return string file data
* @throws \Exception
*/
public static function getData(array $item)
public static function getData($item)
{
if (!empty($item['data'])) {
return $item['data'];
@ -195,10 +195,10 @@ class Attach
* @param string $deny_cid Permissions, denied contacts.optional, default = ''
* @param string $deny_gid Permissions, denied greoup.optional, default = ''
*
* @return boolean|integer Row id on success, False on errors
* @return boolean/integer Row id on success, False on errors
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function store(string $data, int $uid, string $filename, string $filetype = '' , int $filesize = null, string $allow_cid = '', string $allow_gid = '', string $deny_cid = '', string $deny_gid = '')
public static function store($data, $uid, $filename, $filetype = '' , $filesize = null, $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '')
{
if ($filetype === '') {
$filetype = Mimetype::getContentType($filename);
@ -241,17 +241,17 @@ class Attach
/**
* Store new file metadata in db and binary in default backend from existing file
*
* @param string $src Source file name
* @param int $uid User id
* @param string $filename Optional file name
* @param $src
* @param $uid
* @param string $filename
* @param string $allow_cid
* @param string $allow_gid
* @param string $deny_cid
* @param string $deny_gid
* @return boolean|int Insert id or false on failure
* @return boolean True on success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function storeFile(string $src, int $uid, string $filename = '', string $allow_cid = '', string $allow_gid = '', string $deny_cid = '', string $deny_gid = '')
public static function storeFile($src, $uid, $filename = '', $allow_cid = '', $allow_gid = '', $deny_cid = '', $deny_gid = '')
{
if ($filename === '') {
$filename = basename($src);
@ -276,7 +276,7 @@ class Attach
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @see \Friendica\Database\DBA::update
*/
public static function update(array $fields, array $conditions, Image $img = null, array $old_fields = []): bool
public static function update($fields, $conditions, Image $img = null, array $old_fields = [])
{
if (!is_null($img)) {
// get items to update
@ -311,7 +311,7 @@ class Attach
* @throws \Exception
* @see \Friendica\Database\DBA::delete
*/
public static function delete(array $conditions, array $options = []): bool
public static function delete(array $conditions, array $options = [])
{
// get items to delete data info
$items = self::selectToArray(['backend-class','backend-ref'], $conditions);

View file

@ -119,7 +119,7 @@ class Contact
* @return array
* @throws \Exception
*/
public static function selectToArray(array $fields = [], array $condition = [], array $params = []): array
public static function selectToArray(array $fields = [], array $condition = [], array $params = [])
{
return DBA::selectToArray('contact', $fields, $condition, $params);
}
@ -128,7 +128,7 @@ class Contact
* @param array $fields Array of selected fields, empty for all
* @param array $condition Array of fields for condition
* @param array $params Array of several parameters
* @return array|bool
* @return array
* @throws \Exception
*/
public static function selectFirst(array $fields = [], array $condition = [], array $params = [])
@ -148,7 +148,7 @@ class Contact
* @return int id of the created contact
* @throws \Exception
*/
public static function insert(array $fields, int $duplicate_mode = Database::INSERT_DEFAULT): int
public static function insert(array $fields, int $duplicate_mode = Database::INSERT_DEFAULT)
{
if (!empty($fields['baseurl']) && empty($fields['gsid'])) {
$fields['gsid'] = GServer::getID($fields['baseurl'], true);
@ -187,7 +187,6 @@ class Contact
*
* @return boolean was the update successfull?
* @throws \Exception
* @todo Let's get rid of boolean type of $old_fields
*/
public static function update(array $fields, array $condition, $old_fields = [])
{
@ -205,7 +204,7 @@ class Contact
* @return array|boolean Contact record if it exists, false otherwise
* @throws \Exception
*/
public static function getById(int $id, array $fields = [])
public static function getById($id, $fields = [])
{
return DBA::selectFirst('contact', $fields, ['id' => $id]);
}
@ -218,7 +217,7 @@ class Contact
* @return array|boolean Contact record if it exists, false otherwise
* @throws \Exception
*/
public static function getByUriId(int $uri_id, array $fields = [])
public static function getByUriId($uri_id, $fields = [])
{
return DBA::selectFirst('contact', $fields, ['uri-id' => $uri_id], ['order' => ['uid']]);
}
@ -232,7 +231,7 @@ class Contact
* @param integer $uid User ID of the contact
* @return array contact array
*/
public static function getByURL(string $url, $update = null, array $fields = [], int $uid = 0): array
public static function getByURL(string $url, $update = null, array $fields = [], int $uid = 0)
{
if ($update || is_null($update)) {
$cid = self::getIdForURL($url, $uid, $update);
@ -303,7 +302,7 @@ class Contact
* @param array $fields Field list
* @return array contact array
*/
public static function getByURLForUser(string $url, int $uid = 0, $update = false, array $fields = []): array
public static function getByURLForUser(string $url, int $uid = 0, $update = false, array $fields = [])
{
if ($uid != 0) {
$contact = self::getByURL($url, $update, $fields, $uid);
@ -334,7 +333,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isFollower(int $cid, int $uid): bool
public static function isFollower($cid, $uid)
{
if (Contact\User::isBlocked($cid, $uid)) {
return false;
@ -359,7 +358,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isFollowerByURL(string $url, uid $uid): bool
public static function isFollowerByURL($url, $uid)
{
$cid = self::getIdForURL($url, $uid);
@ -371,16 +370,16 @@ class Contact
}
/**
* Tests if the given user shares with the given contact
* Tests if the given user follow the given contact
*
* @param int $cid Either public contact id or user's contact id
* @param int $uid User ID
*
* @return boolean is the contact sharing with given user?
* @return boolean is the contact url being followed?
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isSharing(int $cid, int $uid): bool
public static function isSharing($cid, $uid)
{
if (Contact\User::isBlocked($cid, $uid)) {
return false;
@ -405,7 +404,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isSharingByURL(string $url, int $uid): bool
public static function isSharingByURL($url, $uid)
{
$cid = self::getIdForURL($url, $uid);
@ -426,7 +425,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getBasepath(string $url, bool $dont_update = false): string
public static function getBasepath($url, $dont_update = false)
{
$contact = DBA::selectFirst('contact', ['id', 'baseurl'], ['uid' => 0, 'nurl' => Strings::normaliseLink($url)]);
if (!DBA::isResult($contact)) {
@ -460,7 +459,7 @@ class Contact
*
* @return boolean Is it the same server?
*/
public static function isLocal(string $url): bool
public static function isLocal($url)
{
if (!parse_url($url, PHP_URL_SCHEME)) {
$addr_parts = explode('@', $url);
@ -477,7 +476,7 @@ class Contact
*
* @return boolean Is it the same server?
*/
public static function isLocalById(int $cid): bool
public static function isLocalById(int $cid)
{
$contact = DBA::selectFirst('contact', ['url', 'baseurl'], ['id' => $cid]);
if (!DBA::isResult($contact)) {
@ -501,7 +500,7 @@ class Contact
* @return integer|boolean Public contact id for given user id
* @throws \Exception
*/
public static function getPublicIdByUserId(int $uid)
public static function getPublicIdByUserId($uid)
{
$self = DBA::selectFirst('contact', ['url'], ['self' => true, 'uid' => $uid]);
if (!DBA::isResult($self)) {
@ -520,7 +519,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getPublicAndUserContactID(int $cid, int $uid): array
public static function getPublicAndUserContactID($cid, $uid)
{
// We have to use the legacy function as long as the post update hasn't finished
if (DI::config()->get('system', 'post_update_version') < 1427) {
@ -561,7 +560,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function legacyGetPublicAndUserContactID(int $cid, int $uid): array
private static function legacyGetPublicAndUserContactID($cid, $uid)
{
if (empty($uid) || empty($cid)) {
return [];
@ -1527,7 +1526,7 @@ class Contact
* @param int $type type of contact or account
* @return string
*/
public static function getAccountType(int $type): string
public static function getAccountType(int $type)
{
switch ($type) {
case self::TYPE_ORGANISATION:
@ -1553,11 +1552,11 @@ class Contact
/**
* Blocks a contact
*
* @param int $cid Contact id to block
* @param string $reason Block reason
* @return bool Whether it was successful
* @param int $cid
* @return bool
* @throws \Exception
*/
public static function block(int $cid, string $reason = null): bool
public static function block($cid, $reason = null)
{
$return = self::update(['blocked' => true, 'block_reason' => $reason], ['id' => $cid]);
@ -1567,10 +1566,11 @@ class Contact
/**
* Unblocks a contact
*
* @param int $cid Contact id to unblock
* @return bool Whether it was successfull
* @param int $cid
* @return bool
* @throws \Exception
*/
public static function unblock(int $cid): bool
public static function unblock($cid)
{
$return = self::update(['blocked' => false, 'block_reason' => null], ['id' => $cid]);
@ -1580,7 +1580,7 @@ class Contact
/**
* Ensure that cached avatar exist
*
* @param integer $cid Contact id
* @param integer $cid
*/
public static function checkAvatarCache(int $cid)
{
@ -1620,7 +1620,7 @@ class Contact
* @param bool $no_update Don't perfom an update if no cached avatar was found
* @return string photo path
*/
private static function getAvatarPath(array $contact, string $size, bool $no_update = false): string
private static function getAvatarPath(array $contact, string $size, $no_update = false)
{
$contact = self::checkAvatarCacheByArray($contact, $no_update);
@ -1654,7 +1654,7 @@ class Contact
* @param bool $no_update Don't perfom an update if no cached avatar was found
* @return string photo path
*/
public static function getPhoto(array $contact, bool $no_update = false): string
public static function getPhoto(array $contact, bool $no_update = false)
{
return self::getAvatarPath($contact, Proxy::SIZE_SMALL, $no_update);
}
@ -1666,7 +1666,7 @@ class Contact
* @param bool $no_update Don't perfom an update if no cached avatar was found
* @return string photo path
*/
public static function getThumb(array $contact, bool $no_update = false): string
public static function getThumb(array $contact, bool $no_update = false)
{
return self::getAvatarPath($contact, Proxy::SIZE_THUMB, $no_update);
}
@ -1678,7 +1678,7 @@ class Contact
* @param bool $no_update Don't perfom an update if no cached avatar was found
* @return string photo path
*/
public static function getMicro(array $contact, bool $no_update = false): string
public static function getMicro(array $contact, bool $no_update = false)
{
return self::getAvatarPath($contact, Proxy::SIZE_MICRO, $no_update);
}
@ -1690,7 +1690,7 @@ class Contact
* @param bool $no_update Don't perfom an update if no cached avatar was found
* @return array contact array with avatar cache fields
*/
private static function checkAvatarCacheByArray(array $contact, bool $no_update = false): array
private static function checkAvatarCacheByArray(array $contact, bool $no_update = false)
{
$update = false;
$contact_fields = [];
@ -1796,7 +1796,7 @@ class Contact
* @param string $size Size of the avatar picture
* @return string avatar URL
*/
public static function getDefaultAvatar(array $contact, string $size): string
public static function getDefaultAvatar(array $contact, string $size)
{
switch ($size) {
case Proxy::SIZE_MICRO:
@ -1817,114 +1817,6 @@ class Contact
}
if (!DI::config()->get('system', 'remote_avatar_lookup')) {
$platform = '';
$type = Contact::TYPE_PERSON;
if (!empty($contact['id'])) {
$account = DBA::selectFirst('account-user-view', ['platform', 'contact-type'], ['id' => $contact['id']]);
$platform = $account['platform'] ?? '';
$type = $account['contact-type'] ?? Contact::TYPE_PERSON;
}
if (empty($platform) && !empty($contact['uri-id'])) {
$account = DBA::selectFirst('account-user-view', ['platform', 'contact-type'], ['uri-id' => $contact['uri-id']]);
$platform = $account['platform'] ?? '';
$type = $account['contact-type'] ?? Contact::TYPE_PERSON;
}
switch ($platform) {
case 'corgidon':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/msdos621/corgidon/blob/main/public/avatars/original/missing.png
*/
$default = '/images/default/corgidon.png';
break;
case 'diaspora':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/diaspora/diaspora/
*/
$default = '/images/default/diaspora.png';
break;
case 'gotosocial':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/superseriousbusiness/gotosocial/blob/main/web/assets/default_avatars/GoToSocial_icon1.svg
*/
$default = '/images/default/gotosocial.svg';
break;
case 'hometown':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/hometown-fork/hometown/blob/hometown-dev/public/avatars/original/missing.png
*/
$default = '/images/default/hometown.png';
break;
case 'koyuspace':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/koyuspace/mastodon/blob/main/public/avatars/original/missing.png
*/
$default = '/images/default/koyuspace.png';
break;
case 'ecko':
case 'qoto':
case 'mastodon':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/mastodon/mastodon/tree/main/public/avatars/original/missing.png
*/
$default = '/images/default/mastodon.png';
break;
case 'peertube':
if ($type == Contact::TYPE_COMMUNITY) {
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/Chocobozzz/PeerTube/blob/develop/client/src/assets/images/default-avatar-video-channel.png
*/
$default = '/images/default/peertube-channel.png';
} else {
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/Chocobozzz/PeerTube/blob/develop/client/src/assets/images/default-avatar-account.png
*/
$default = '/images/default/peertube-account.png';
}
break;
case 'pleroma':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://git.pleroma.social/pleroma/pleroma/-/blob/develop/priv/static/images/avi.png
*/
$default = '/images/default/pleroma.png';
break;
case 'plume':
/**
* Picture credits
* @license GNU Affero General Public License v3.0
* @link https://github.com/Plume-org/Plume/blob/main/assets/images/default-avatar.png
*/
$default = '/images/default/plume.png';
break;
}
return DI::baseUrl() . $default;
}
@ -2614,7 +2506,7 @@ class Contact
* @throws HTTPException\NotFoundException
* @throws \ImagickException
*/
public static function createFromProbeForUser(int $uid, string $url, string $network = ''): array
public static function createFromProbeForUser(int $uid, $url, $network = '')
{
$result = ['cid' => -1, 'success' => false, 'message' => ''];
@ -2803,7 +2695,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function addRelationship(array $importer, array $contact, array $datarray, bool $sharing = false, string $note = '')
public static function addRelationship(array $importer, array $contact, array $datarray, $sharing = false, $note = '')
{
// Should always be set
if (empty($datarray['author-id'])) {
@ -3030,7 +2922,7 @@ class Contact
* @return array
* @throws \Exception
*/
public static function pruneUnavailable(array $contact_ids): array
public static function pruneUnavailable(array $contact_ids)
{
if (empty($contact_ids)) {
return [];
@ -3058,7 +2950,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function magicLink(string $contact_url, string $url = ''): string
public static function magicLink($contact_url, $url = '')
{
if (!Session::isAuthenticated()) {
return $url ?: $contact_url; // Equivalent to: ($url != '') ? $url : $contact_url;
@ -3085,7 +2977,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function magicLinkById(int $cid, string $url = ''): string
public static function magicLinkById($cid, $url = '')
{
$contact = DBA::selectFirst('contact', ['id', 'network', 'url', 'uid'], ['id' => $cid]);
@ -3102,7 +2994,7 @@ class Contact
* @throws HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function magicLinkByContact(array $contact, string $url = ''): string
public static function magicLinkByContact($contact, $url = '')
{
$destination = $url ?: $contact['url']; // Equivalent to ($url != '') ? $url : $contact['url'];
@ -3143,7 +3035,7 @@ class Contact
*
* @return boolean "true" if it is a forum
*/
public static function isForum(int $contactid): bool
public static function isForum($contactid)
{
$fields = ['contact-type'];
$condition = ['id' => $contactid];
@ -3162,7 +3054,7 @@ class Contact
* @param array $contact
* @return bool
*/
public static function canReceivePrivateMessages(array $contact): bool
public static function canReceivePrivateMessages(array $contact)
{
$protocol = $contact['network'] ?? $contact['protocol'] ?? Protocol::PHANTOM;
$self = $contact['self'] ?? false;
@ -3180,7 +3072,7 @@ class Contact
* @return array with search results
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function searchByName(string $search, string $mode = '', int $uid = 0): array
public static function searchByName(string $search, string $mode = '', int $uid = 0)
{
if (empty($search)) {
return [];
@ -3223,7 +3115,7 @@ class Contact
* @param array $urls
* @return array result "count", "added" and "updated"
*/
public static function addByUrls(array $urls): array
public static function addByUrls(array $urls)
{
$added = 0;
$updated = 0;
@ -3256,7 +3148,7 @@ class Contact
* @return array The profile array
* @throws Exception
*/
public static function getRandomContact(): array
public static function getRandomContact()
{
$contact = DBA::selectFirst('contact', ['id', 'network', 'url', 'uid'], [
"`uid` = ? AND `network` = ? AND NOT `failed` AND `last-item` > ?",

View file

@ -62,7 +62,7 @@ class Conversation
*/
const RELAY = 3;
public static function getByItemUri(string $item_uri)
public static function getByItemUri($item_uri)
{
return DBA::selectFirst('conversation', [], ['item-uri' => $item_uri]);
}
@ -74,7 +74,7 @@ class Conversation
* @return array Item array with removed conversation data
* @throws \Exception
*/
public static function insert(array $arr): array
public static function insert(array $arr)
{
if (in_array(($arr['network'] ?? '') ?: Protocol::PHANTOM,
[Protocol::ACTIVITYPUB, Protocol::DFRN, Protocol::DIASPORA, Protocol::OSTATUS, Protocol::TWITTER]) && !empty($arr['uri'])) {

View file

@ -41,7 +41,7 @@ use Friendica\Util\XML;
class Event
{
public static function getHTML(array $event, bool $simple = false, int $uriid = 0): string
public static function getHTML(array $event, $simple = false, $uriid = 0)
{
if (empty($event)) {
return '';
@ -127,7 +127,7 @@ class Event
* @param array $event Array which contains the event data.
* @return string The event as a bbcode formatted string.
*/
private static function getBBCode(array $event): string
private static function getBBCode(array $event)
{
$o = '';
@ -157,10 +157,11 @@ class Event
/**
* Extract bbcode formatted event data from a string.
*
* @param string $text The string which should be parsed for event data.
* @params: string $s The string which should be parsed for event data.
* @param $text
* @return array The array with the event information.
*/
public static function fromBBCode(string $text): array
public static function fromBBCode($text)
{
$ev = [];
@ -194,13 +195,13 @@ class Event
return $ev;
}
public static function sortByDate(array $event_list): array
public static function sortByDate($event_list)
{
usort($event_list, ['self', 'compareDatesCallback']);
return $event_list;
}
private static function compareDatesCallback(array $event_a, array $event_b)
private static function compareDatesCallback($event_a, $event_b)
{
$date_a = DateTimeFormat::local($event_a['start']);
$date_b = DateTimeFormat::local($event_b['start']);
@ -222,7 +223,7 @@ class Event
* @return void
* @throws \Exception
*/
public static function delete(int $event_id)
public static function delete($event_id)
{
if ($event_id == 0) {
return;
@ -241,7 +242,7 @@ class Event
* @return int The new event id.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function store(array $arr): int
public static function store($arr)
{
$event = [];
$event['id'] = intval($arr['id'] ?? 0);
@ -316,7 +317,7 @@ class Event
return $event['id'];
}
public static function getItemArrayForId(int $event_id, array $item = []): array
public static function getItemArrayForId(int $event_id, array $item = []):array
{
if (empty($event_id)) {
return $item;
@ -373,7 +374,7 @@ class Event
return $item;
}
public static function getItemArrayForImportedId(int $event_id, array $item = []): array
public static function getItemArrayForImportedId(int $event_id, array $item = []):array
{
if (empty($event_id)) {
return $item;
@ -403,7 +404,7 @@ class Event
* @return array Array with translations strings.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function getStrings(): array
public static function getStrings()
{
// First day of the week (0 = Sunday).
$firstDay = DI::pConfig()->get(local_user(), 'system', 'first_day_of_week', 0);
@ -476,7 +477,7 @@ class Event
*
* @todo We should replace this with a separate update function if there is some time left.
*/
private static function removeDuplicates(array $dates): array
private static function removeDuplicates(array $dates)
{
$dates2 = [];
@ -499,7 +500,7 @@ class Event
* @return array Query result
* @throws \Exception
*/
public static function getListById(int $owner_uid, int $event_id, string $sql_extra = ''): array
public static function getListById($owner_uid, $event_id, $sql_extra = '')
{
$return = [];
@ -535,7 +536,7 @@ class Event
* @return array Query results.
* @throws \Exception
*/
public static function getListByDate(int $owner_uid, array $event_params, string $sql_extra = ''): array
public static function getListByDate($owner_uid, $event_params, $sql_extra = '')
{
$return = [];
@ -569,7 +570,7 @@ class Event
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function prepareListForTemplate(array $event_result): array
public static function prepareListForTemplate(array $event_result)
{
$event_list = [];
@ -650,12 +651,12 @@ class Event
* @param array $events Query result for events.
* @param string $format The output format (ical/csv).
*
* @param string $timezone Timezone (missing parameter!)
* @param $timezone
* @return string Content according to selected export format.
*
* @todo Implement timezone support
*/
private static function formatListForExport(array $events, string $format): string
private static function formatListForExport(array $events, $format)
{
$o = '';
@ -756,7 +757,7 @@ class Event
* @return array Query results.
* @throws \Exception
*/
private static function getListByUserId(int $uid = 0): array
private static function getListByUserId($uid = 0)
{
$return = [];
@ -796,7 +797,7 @@ class Event
* @throws \Exception
* @todo Respect authenticated users with events_by_uid().
*/
public static function exportListByUserId(int $uid, string $format = 'ical'): array
public static function exportListByUserId($uid, $format = 'ical')
{
$process = false;
@ -844,8 +845,7 @@ class Event
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getItemHTML(array $item): string
{
public static function getItemHTML(array $item) {
$same_date = false;
$finish = false;
@ -933,11 +933,10 @@ class Event
* @return array The array with the location data.
* 'name' => The name of the location,<br>
* 'address' => The address of the location,<br>
* 'coordinates' => Latitude and longitude (e.g. '48.864716,2.349014').<br>
* 'coordinates' => Latitude and longitude (e.g. '48.864716,2.349014').<br>
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function locationToArray(string $s = ''): array
{
private static function locationToArray($s = '') {
if ($s == '') {
return [];
}
@ -982,7 +981,7 @@ class Event
* @return bool
* @throws \Exception
*/
public static function createBirthday(array $contact, string $birthday): bool
public static function createBirthday($contact, $birthday)
{
// Check for duplicates
$condition = [
@ -1012,7 +1011,8 @@ class Event
'type' => 'birthday',
];
// Check if self::store() was success
return (self::store($values) > 0);
self::store($values);
return true;
}
}

View file

@ -40,7 +40,7 @@ class FContact
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function getByURL(string $handle, $update = null): array
public static function getByURL($handle, $update = null)
{
$person = DBA::selectFirst('fcontact', [], ['network' => Protocol::DIASPORA, 'addr' => $handle]);
if (!DBA::isResult($person)) {
@ -90,7 +90,7 @@ class FContact
* @param array $arr The fcontact data
* @throws \Exception
*/
public static function updateFromProbeArray(array $arr)
public static function updateFromProbeArray($arr)
{
$uriid = ItemURI::insert(['uri' => $arr['url'], 'guid' => $arr['guid']]);
@ -122,12 +122,12 @@ class FContact
* get a url (scheme://domain.tld/u/user) from a given Diaspora*
* fcontact guid
*
* @param string $fcontact_guid Hexadecimal string guid
* @param mixed $fcontact_guid Hexadecimal string guid
*
* @return string|null the contact url or null
* @return string the contact url or null
* @throws \Exception
*/
public static function getUrlByGuid(string $fcontact_guid)
public static function getUrlByGuid($fcontact_guid)
{
Logger::info('fcontact', ['guid' => $fcontact_guid]);

View file

@ -35,9 +35,10 @@ class FileTag
* URL encode <, >, left and right brackets
*
* @param string $s String to be URL encoded.
*
* @return string The URL encoded string.
*/
private static function encode(string $s): string
private static function encode($s)
{
return str_replace(['<', '>', '[', ']'], ['%3c', '%3e', '%5b', '%5d'], $s);
}
@ -46,9 +47,10 @@ class FileTag
* URL decode <, >, left and right brackets
*
* @param string $s The URL encoded string to be decoded
*
* @return string The decoded string.
*/
private static function decode(string $s): string
private static function decode($s)
{
return str_replace(['%3c', '%3e', '%5b', '%5d'], ['<', '>', '[', ']'], $s);
}
@ -60,9 +62,10 @@ class FileTag
*
* @param array $array A list of tags.
* @param string $type Optional file type.
*
* @return string A list of file tags.
*/
public static function arrayToFile(array $array, string $type = 'file'): string
public static function arrayToFile(array $array, string $type = 'file')
{
$tag_list = '';
if ($type == 'file') {
@ -89,9 +92,10 @@ class FileTag
*
* @param string $file File tags
* @param string $type Optional file type.
*
* @return array List of tag names.
*/
public static function fileToArray(string $file, string $type = 'file'): array
public static function fileToArray(string $file, string $type = 'file')
{
$matches = [];
$return = [];

View file

@ -96,7 +96,7 @@ class GServer
*
* @param string $url
* @param boolean $no_check Don't check if the server hadn't been found
* @return int|null gserver id or NULL on empty URL or failed check
* @return int gserver id
*/
public static function getID(string $url, bool $no_check = false)
{
@ -156,7 +156,7 @@ class GServer
*
* @return boolean 'true' if server seems vital
*/
public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false): bool
public static function reachable(string $profile, string $server = '', string $network = '', bool $force = false)
{
if ($server == '') {
$contact = Contact::getByURL($profile, null, ['baseurl']);
@ -172,7 +172,7 @@ class GServer
return self::check($server, $network, $force);
}
public static function getNextUpdateDate(bool $success, string $created = '', string $last_contact = ''): string
public static function getNextUpdateDate(bool $success, string $created = '', string $last_contact = '')
{
// On successful contact process check again next week
if ($success) {
@ -231,7 +231,7 @@ class GServer
*
* @return boolean 'true' if server seems vital
*/
public static function check(string $server_url, string $network = '', bool $force = false, bool $only_nodeinfo = false): bool
public static function check(string $server_url, string $network = '', bool $force = false, bool $only_nodeinfo = false)
{
$server_url = self::cleanURL($server_url);
if ($server_url == '') {
@ -286,7 +286,7 @@ class GServer
* @param string $url
* @return string cleaned URL
*/
public static function cleanURL(string $url): string
public static function cleanURL(string $url)
{
$url = trim($url, '/');
$url = str_replace('/index.php', '', $url);
@ -305,7 +305,7 @@ class GServer
* @param string $url
* @return string base URL
*/
private static function getBaseURL(string $url): string
private static function getBaseURL(string $url)
{
$urlparts = parse_url(self::cleanURL($url));
unset($urlparts['path']);
@ -322,7 +322,7 @@ class GServer
*
* @return boolean 'true' if server could be detected
*/
public static function detect(string $url, string $network = '', bool $only_nodeinfo = false): bool
public static function detect(string $url, string $network = '', bool $only_nodeinfo = false)
{
Logger::info('Detect server type', ['server' => $url]);
$serverdata = ['detection-method' => self::DETECT_MANUAL];
@ -535,7 +535,7 @@ class GServer
$serverdata['last_contact'] = DateTimeFormat::utcNow();
$serverdata['failed'] = false;
$gserver = DBA::selectFirst('gserver', ['network'], ['nurl' => $serverdata['nurl']]);
$gserver = DBA::selectFirst('gserver', ['network'], ['nurl' => Strings::normaliseLink($url)]);
if (!DBA::isResult($gserver)) {
$serverdata['created'] = DateTimeFormat::utcNow();
$ret = DBA::insert('gserver', $serverdata);
@ -586,7 +586,6 @@ class GServer
* Fetch relay data from a given server url
*
* @param string $server_url address of the server
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function discoverRelay(string $server_url)
@ -686,7 +685,7 @@ class GServer
*
* @return array server data
*/
private static function fetchStatistics(string $url): array
private static function fetchStatistics(string $url)
{
$curlResult = DI::httpClient()->get($url . '/statistics.json', HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -759,7 +758,7 @@ class GServer
* @return array Server data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function fetchNodeinfo(string $url, ICanHandleHttpResponses $httpResult): array
private static function fetchNodeinfo(string $url, ICanHandleHttpResponses $httpResult)
{
if (!$httpResult->isSuccess()) {
return [];
@ -812,7 +811,7 @@ class GServer
* @return array Server data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function parseNodeinfo1(string $nodeinfo_url): array
private static function parseNodeinfo1(string $nodeinfo_url)
{
$curlResult = DI::httpClient()->get($nodeinfo_url, HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -905,7 +904,7 @@ class GServer
* @return array Server data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function parseNodeinfo2(string $nodeinfo_url): array
private static function parseNodeinfo2(string $nodeinfo_url)
{
$curlResult = DI::httpClient()->get($nodeinfo_url, HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -1002,9 +1001,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function fetchSiteinfo(string $url, array $serverdata): array
private static function fetchSiteinfo(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/siteinfo.json', HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -1085,9 +1085,10 @@ class GServer
* Checks if the server contains a valid host meta file
*
* @param string $url URL of the given server
*
* @return boolean 'true' if the server seems to be vital
*/
private static function validHostMeta(string $url): bool
private static function validHostMeta(string $url)
{
$xrd_timeout = DI::config()->get('system', 'xrd_timeout');
$curlResult = DI::httpClient()->get($url . '/.well-known/host-meta', HttpClientAccept::XRD_XML, [HttpClientOptions::TIMEOUT => $xrd_timeout]);
@ -1130,9 +1131,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectNetworkViaContacts(string $url, array $serverdata): array
private static function detectNetworkViaContacts(string $url, array $serverdata)
{
$contacts = [];
@ -1174,9 +1176,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function checkPoCo(string $url, array $serverdata): array
private static function checkPoCo(string $url, array $serverdata)
{
$serverdata['poco'] = '';
@ -1205,9 +1208,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
public static function checkMastodonDirectory(string $url, array $serverdata): array
public static function checkMastodonDirectory(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/api/v1/directory?limit=1', HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -1234,7 +1238,7 @@ class GServer
*
* @return array server data
*/
private static function detectPeertube(string $url, array $serverdata): array
private static function detectPeertube(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/api/v1/config', HttpClientAccept::JSON);
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
@ -1278,9 +1282,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectNextcloud(string $url, array $serverdata): array
private static function detectNextcloud(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/status.php', HttpClientAccept::JSON);
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
@ -1305,15 +1310,7 @@ class GServer
return $serverdata;
}
/**
* Fetches weekly usage data
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
* @return array server data
*/
private static function fetchWeeklyUsage(string $url, array $serverdata): array
{
private static function fetchWeeklyUsage(string $url, array $serverdata) {
$curlResult = DI::httpClient()->get($url . '/api/v1/instance/activity', HttpClientAccept::JSON);
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
return $serverdata;
@ -1349,9 +1346,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectFromContacts(string $url, array $serverdata): array
private static function detectFromContacts(string $url, array $serverdata)
{
$gserver = DBA::selectFirst('gserver', ['id'], ['nurl' => Strings::normaliseLink($url)]);
if (empty($gserver)) {
@ -1376,9 +1374,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectMastodonAlikes(string $url, array $serverdata): array
private static function detectMastodonAlikes(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/api/v1/instance', HttpClientAccept::JSON);
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
@ -1440,9 +1439,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectHubzilla(string $url, array $serverdata): array
private static function detectHubzilla(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/api/statusnet/config.json', HttpClientAccept::JSON);
if (!$curlResult->isSuccess() || ($curlResult->getBody() == '')) {
@ -1517,9 +1517,10 @@ class GServer
* Converts input value to a boolean value
*
* @param string|integer $val
*
* @return boolean
*/
private static function toBoolean($val): bool
private static function toBoolean($val)
{
if (($val == 'true') || ($val == 1)) {
return true;
@ -1535,9 +1536,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectPumpIO(string $url, array $serverdata): array
private static function detectPumpIO(string $url, array $serverdata)
{
$curlResult = DI::httpClient()->get($url . '/.well-known/host-meta.json', HttpClientAccept::JSON);
if (!$curlResult->isSuccess()) {
@ -1547,6 +1549,7 @@ class GServer
$data = json_decode($curlResult->getBody(), true);
if (empty($data['links'])) {
return $serverdata;
}
// We are looking for some endpoints that are typical for pump.io
@ -1583,9 +1586,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectGNUSocial(string $url, array $serverdata): array
private static function detectGNUSocial(string $url, array $serverdata)
{
// Test for GNU Social
$curlResult = DI::httpClient()->get($url . '/api/gnusocial/version.json', HttpClientAccept::JSON);
@ -1637,9 +1641,10 @@ class GServer
*
* @param string $url URL of the given server
* @param array $serverdata array with server data
*
* @return array server data
*/
private static function detectFriendica(string $url, array $serverdata): array
private static function detectFriendica(string $url, array $serverdata)
{
// There is a bug in some versions of Friendica that will return an ActivityStream actor when the content type "application/json" is requested.
// Because of this me must not use ACCEPT_JSON here.
@ -1712,9 +1717,10 @@ class GServer
* @param object $curlResult result of curl execution
* @param array $serverdata array with server data
* @param string $url Server URL
*
* @return array server data
*/
private static function analyseRootBody($curlResult, array $serverdata, string $url): array
private static function analyseRootBody($curlResult, array $serverdata, string $url)
{
if (empty($curlResult->getBody())) {
return $serverdata;
@ -1853,7 +1859,7 @@ class GServer
*
* @return array server data
*/
private static function analyseRootHeader($curlResult, array $serverdata): array
private static function analyseRootHeader($curlResult, array $serverdata)
{
if ($curlResult->getHeader('server') == 'Mastodon') {
$serverdata['platform'] = 'mastodon';
@ -2048,7 +2054,7 @@ class GServer
* @return int
* @throws Exception
*/
public static function getProtocol(int $gsid): int
public static function getProtocol(int $gsid)
{
if (empty($gsid)) {
return null;

View file

@ -39,14 +39,7 @@ class Group
const FOLLOWERS = '~';
const MUTUALS = '&';
/**
* Fetches group record by user id and maybe includes deleted groups as well
*
* @param int $uid User id to fetch group(s) for
* @param bool $includesDeleted Whether deleted groups should be included
* @return array|bool Array on success, bool on error
*/
public static function getByUserId(int $uid, bool $includesDeleted = false)
public static function getByUserId($uid, $includesDeleted = false)
{
$conditions = ['uid' => $uid, 'cid' => null];
@ -58,18 +51,15 @@ class Group
}
/**
* Checks whether given group id is found in database
*
* @param int $group_id Groupd it
* @param int $uid Optional user id
* @param int $group_id
* @return bool
* @throws \Exception
*/
public static function exists(int $group_id, int $uid = null): bool
public static function exists($group_id, $uid = null)
{
$condition = ['id' => $group_id, 'deleted' => false];
if (!is_null($uid)) {
if (isset($uid)) {
$condition = [
'uid' => $uid
];
@ -83,12 +73,12 @@ class Group
*
* Note: If we found a deleted group with the same name, we restore it
*
* @param int $uid User id to create group for
* @param string $name Name of group
* @return int|boolean Id of newly created group or false on error
* @param int $uid
* @param string $name
* @return boolean
* @throws \Exception
*/
public static function create(int $uid, string $name)
public static function create($uid, $name)
{
$return = false;
if (!empty($uid) && !empty($name)) {
@ -124,7 +114,7 @@ class Group
* @return bool Was the update successful?
* @throws \Exception
*/
public static function update(int $id, string $name): bool
public static function update($id, $name)
{
return DBA::update('group', ['name' => $name], ['id' => $id]);
}
@ -132,11 +122,11 @@ class Group
/**
* Get a list of group ids a contact belongs to
*
* @param int $cid Contact id
* @return array Group ids
* @param int $cid
* @return array
* @throws \Exception
*/
public static function getIdsByContactId(int $cid): array
public static function getIdsByContactId($cid)
{
$return = [];
@ -195,12 +185,12 @@ class Group
*
* Returns false if no group has been found.
*
* @param int $uid User id
* @param string $name Group name
* @return int|boolean Groups' id number or false on error
* @param int $uid
* @param string $name
* @return int|boolean
* @throws \Exception
*/
public static function getIdByName(int $uid, string $name)
public static function getIdByName($uid, $name)
{
if (!$uid || !strlen($name)) {
return false;
@ -221,7 +211,7 @@ class Group
* @return boolean
* @throws \Exception
*/
public static function remove(int $gid): bool
public static function remove($gid)
{
if (!$gid) {
return false;
@ -324,14 +314,13 @@ class Group
* Adds contacts to a group
*
* @param int $gid
* @param array $contacts Array with contact ids
* @return void
* @param array $contacts
* @throws \Exception
*/
public static function addMembers(int $gid, array $contacts)
{
if (!$gid || !$contacts) {
return;
return false;
}
// @TODO Backward compatibility with user contacts, remove by version 2022.03
@ -353,9 +342,8 @@ class Group
/**
* Removes contacts from a group
*
* @param int $gid Group id
* @param array $contacts Contact ids
* @return bool
* @param int $gid
* @param array $contacts
* @throws \Exception
*/
public static function removeMembers(int $gid, array $contacts)
@ -381,20 +369,19 @@ class Group
$contactIds[] = $cdata['user'];
}
// Return status of deletion
return DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $contactIds]);
DBA::delete('group_member', ['gid' => $gid, 'contact-id' => $contactIds]);
}
/**
* Returns the combined list of contact ids from a group id list
*
* @param int $uid User id
* @param array $group_ids Groups ids
* @param boolean $check_dead Whether check "dead" records (?)
* @param int $uid
* @param array $group_ids
* @param boolean $check_dead
* @return array
* @throws \Exception
*/
public static function expand(int $uid, array $group_ids, bool $check_dead = false): array
public static function expand($uid, array $group_ids, $check_dead = false)
{
if (!is_array($group_ids) || !count($group_ids)) {
return [];
@ -467,13 +454,13 @@ class Group
/**
* Returns a templated group selection list
*
* @param int $uid User id
* @param int $uid
* @param int $gid An optional pre-selected group
* @param string $label An optional label of the list
* @return string
* @throws \Exception
*/
public static function displayGroupSelection(int $uid, int $gid = 0, string $label = ''): string
public static function displayGroupSelection($uid, $gid = 0, $label = '')
{
$display_groups = [
[
@ -515,12 +502,12 @@ class Group
* 'standard' => include link 'Edit groups'
* 'extended' => include link 'Create new group'
* 'full' => include link 'Create new group' and provide for each group a link to edit this group
* @param string|int $group_id Distinct group id or 'everyone'
* @param int $cid Contact id
* @return string Sidebar widget HTML code
* @param string $group_id
* @param int $cid
* @return string
* @throws \Exception
*/
public static function sidebarWidget(string $every = 'contact', string $each = 'group', string $editmode = 'standard', $group_id = '', int $cid = 0)
public static function sidebarWidget($every = 'contact', $each = 'group', $editmode = 'standard', $group_id = '', $cid = 0)
{
if (!local_user()) {
return '';
@ -602,7 +589,7 @@ class Group
* @param integer $id Contact ID
* @return integer Group IO
*/
public static function getIdForForum(int $id): int
public static function getIdForForum(int $id)
{
Logger::info('Get id for forum id', ['id' => $id]);
$contact = Contact::getById($id, ['uid', 'name', 'contact-type', 'manually-approve']);
@ -630,7 +617,6 @@ class Group
* Fetch the followers of a given contact id and store them as group members
*
* @param integer $id Contact ID
* @return void
*/
public static function updateMembersForForum(int $id)
{

View file

@ -96,8 +96,8 @@ class Item
'event-created', 'event-edited', 'event-start', 'event-finish',
'event-summary', 'event-desc', 'event-location', 'event-type',
'event-nofinish', 'event-ignore', 'event-id',
'question-id', 'question-multiple', 'question-voters', 'question-end-time',
'has-categories', 'has-media',
"question-id", "question-multiple", "question-voters", "question-end-time",
"has-categories", "has-media",
'delivery_queue_count', 'delivery_queue_done', 'delivery_queue_failed'
];
@ -226,7 +226,7 @@ class Item
foreach ($notify_items as $notify_item) {
$post = Post::selectFirst(['uri-id', 'uid'], ['id' => $notify_item]);
Worker::add(PRIORITY_HIGH, 'Notifier', Delivery::POST, (int)$post['uri-id'], (int)$post['uid']);
Worker::add(PRIORITY_HIGH, "Notifier", Delivery::POST, (int)$post['uri-id'], (int)$post['uid']);
}
return $rows;
@ -237,10 +237,9 @@ class Item
*
* @param array $condition The condition for finding the item entries
* @param integer $priority Priority for the notification
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function markForDeletion(array $condition, int $priority = PRIORITY_HIGH)
public static function markForDeletion($condition, $priority = PRIORITY_HIGH)
{
$items = Post::select(['id'], $condition);
while ($item = Post::fetch($items)) {
@ -254,10 +253,9 @@ class Item
*
* @param array $condition The condition for finding the item entries
* @param integer $uid User who wants to delete this item
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function deleteForUser(array $condition, int $uid)
public static function deleteForUser($condition, $uid)
{
if ($uid == 0) {
return;
@ -284,10 +282,11 @@ class Item
*
* @param integer $item_id
* @param integer $priority Priority for the notification
*
* @return boolean success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function markForDeletionById(int $item_id, int $priority = PRIORITY_HIGH): bool
public static function markForDeletionById($item_id, $priority = PRIORITY_HIGH)
{
Logger::info('Mark item for deletion by id', ['id' => $item_id, 'callstack' => System::callstack()]);
// locate item to be deleted
@ -332,7 +331,7 @@ class Item
// If item has attachments, drop them
$attachments = Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT]);
foreach($attachments as $attachment) {
if (preg_match('|attach/(\d+)|', $attachment['url'], $matches)) {
if (preg_match("|attach/(\d+)|", $attachment['url'], $matches)) {
Attach::delete(['id' => $matches[1], 'uid' => $item['uid']]);
}
}
@ -361,7 +360,7 @@ class Item
// send the notification upstream/downstream
if ($priority) {
Worker::add(['priority' => $priority, 'dont_fork' => true], 'Notifier', Delivery::DELETION, (int)$item['uri-id'], (int)$item['uid']);
Worker::add(['priority' => $priority, 'dont_fork' => true], "Notifier", Delivery::DELETION, (int)$item['uri-id'], (int)$item['uid']);
}
} elseif ($item['uid'] != 0) {
Post\User::update($item['uri-id'], $item['uid'], ['hidden' => true]);
@ -373,14 +372,7 @@ class Item
return true;
}
/**
* Get guid from given item record
*
* @param array $item Item record
* @param bool Whether to notify (?)
* @return string Guid
*/
public static function guid(array $item, bool $notify): string
public static function guid($item, $notify)
{
if (!empty($item['guid'])) {
return trim($item['guid']);
@ -433,13 +425,7 @@ class Item
return $guid;
}
/**
* Returns contact id from given item record
*
* @param array $item Item record
* @return int Contact id
*/
private static function contactId(array $item): int
private static function contactId($item)
{
if (!empty($item['contact-id']) && DBA::exists('contact', ['self' => true, 'id' => $item['contact-id']])) {
return $item['contact-id'];
@ -465,17 +451,17 @@ class Item
* @param array $item The item fields that are to be inserted
* @throws \Exception
*/
private static function spool(array $item)
private static function spool($orig_item)
{
// Now we store the data in the spool directory
// We use "microtime" to keep the arrival order and "mt_rand" to avoid duplicates
$file = 'item-' . round(microtime(true) * 10000) . '-' . mt_rand() . '.msg';
$spoolpath = System::getSpoolPath();
if ($spoolpath != '') {
if ($spoolpath != "") {
$spool = $spoolpath . '/' . $file;
file_put_contents($spool, json_encode($item));
file_put_contents($spool, json_encode($orig_item));
Logger::warning("Item wasn't stored - Item was spooled into file", ['file' => $file]);
}
}
@ -483,10 +469,10 @@ class Item
/**
* Check if the item array is a duplicate
*
* @param array $item Item record
* @param array $item
* @return boolean is it a duplicate?
*/
private static function isDuplicate(array $item): bool
private static function isDuplicate(array $item)
{
// Checking if there is already an item with the same guid
$condition = ['guid' => $item['guid'], 'network' => $item['network'], 'uid' => $item['uid']];
@ -535,10 +521,10 @@ class Item
/**
* Check if the item array is valid
*
* @param array $item Item record
* @param array $item
* @return boolean item is valid
*/
public static function isValid(array $item): bool
public static function isValid(array $item)
{
// When there is no content then we don't post it
if (($item['body'] . $item['title'] == '') && (empty($item['uri-id']) || !Post\Media::existsByURIId($item['uri-id']))) {
@ -605,10 +591,10 @@ class Item
/**
* Check if the item array is too old
*
* @param array $item Item record
* @param array $item
* @return boolean item is too old
*/
public static function isTooOld(array $item): bool
public static function isTooOld(array $item)
{
// check for create date and expire time
$expire_interval = DI::config()->get('system', 'dbclean-expire-days', 0);
@ -637,20 +623,15 @@ class Item
/**
* Return the id of the given item array if it has been stored before
*
* @param array $item Item record
* @return integer Item id or zero on error
* @param array $item
* @return integer item id
*/
private static function getDuplicateID(array $item): int
private static function getDuplicateID(array $item)
{
if (empty($item['network']) || in_array($item['network'], Protocol::FEDERATED)) {
$condition = ['`uri-id` = ? AND `uid` = ? AND `network` IN (?, ?, ?, ?)',
$item['uri-id'],
$item['uid'],
Protocol::ACTIVITYPUB,
Protocol::DIASPORA,
Protocol::DFRN,
Protocol::OSTATUS
];
$condition = ["`uri-id` = ? AND `uid` = ? AND `network` IN (?, ?, ?, ?)",
$item['uri-id'], $item['uid'],
Protocol::ACTIVITYPUB, Protocol::DIASPORA, Protocol::DFRN, Protocol::OSTATUS];
$existing = Post::selectFirst(['id', 'network'], $condition);
if (DBA::isResult($existing)) {
// We only log the entries with a different user id than 0. Otherwise we would have too many false positives
@ -659,12 +640,12 @@ class Item
'uri-id' => $item['uri-id'],
'uid' => $item['uid'],
'network' => $item['network'],
'existing_id' => $existing['id'],
'existing_network' => $existing['network']
'existing_id' => $existing["id"],
'existing_network' => $existing["network"]
]);
}
return $existing['id'];
return $existing["id"];
}
}
return 0;
@ -677,7 +658,7 @@ class Item
* @return array item array with parent data
* @throws \Exception
*/
private static function getTopLevelParent(array $item): array
private static function getTopLevelParent(array $item)
{
$fields = ['uid', 'uri', 'parent-uri', 'id', 'deleted',
'uri-id', 'parent-uri-id',
@ -728,7 +709,7 @@ class Item
* @param array $item
* @return integer gravity
*/
private static function getGravity(array $item): int
private static function getGravity(array $item)
{
$activity = DI::activity();
@ -743,20 +724,11 @@ class Item
} elseif ($activity->match($item['verb'], Activity::ANNOUNCE)) {
return GRAVITY_ACTIVITY;
}
Logger::info('Unknown gravity for verb', ['verb' => $item['verb']]);
return GRAVITY_UNKNOWN; // Should not happen
}
/**
* Inserts item record
*
* @param array $item Item array to be inserted
* @param int $notify Notification (type?)
* @param bool $post_local (???)
* @return int Zero means error, otherwise primary key (id) is being returned
*/
public static function insert(array $item, int $notify = 0, bool $post_local = true): int
public static function insert(array $item, int $notify = 0, bool $post_local = true)
{
$orig_item = $item;
@ -897,7 +869,7 @@ class Item
Contact::checkAvatarCache($item['owner-id']);
// The contact-id should be set before "self::insert" was called - but there seems to be issues sometimes
$item['contact-id'] = self::contactId($item);
$item["contact-id"] = self::contactId($item);
if (!empty($item['direction']) && in_array($item['direction'], [Conversation::PUSH, Conversation::RELAY]) &&
empty($item['origin']) &&self::isTooOld($item)) {
@ -972,8 +944,8 @@ class Item
$item['thr-parent-id'] = ItemURI::getIdByURI($item['thr-parent']);
// Is this item available in the global items (with uid=0)?
if ($item['uid'] == 0) {
$item['global'] = true;
if ($item["uid"] == 0) {
$item["global"] = true;
// Set the global flag on all items if this was a global item entry
Post::update(['global' => true], ['uri-id' => $item['uri-id']]);
@ -982,8 +954,8 @@ class Item
}
// ACL settings
if (!empty($item['allow_cid'] . $item['allow_gid'] . $item['deny_cid'] . $item['deny_gid'])) {
$item['private'] = self::PRIVATE;
if (!empty($item["allow_cid"] . $item["allow_gid"] . $item["deny_cid"] . $item["deny_gid"])) {
$item["private"] = self::PRIVATE;
}
if ($notify && $post_local) {
@ -1351,7 +1323,7 @@ class Item
* @param string $signed_text Original text (for Diaspora signatures), JSON encoded.
* @throws \Exception
*/
public static function distribute(int $itemid, string $signed_text = '')
public static function distribute($itemid, $signed_text = '')
{
$condition = ["`id` IN (SELECT `parent` FROM `post-user-view` WHERE `id` = ?)", $itemid];
$parent = Post::selectFirst(['owner-id'], $condition);
@ -1445,7 +1417,7 @@ class Item
* @param integer $source_uid User id of the source post
* @return integer stored item id
*/
public static function storeForUserByUriId(int $uri_id, int $uid, array $fields = [], int $source_uid = 0): int
public static function storeForUserByUriId(int $uri_id, int $uid, array $fields = [], int $source_uid = 0)
{
if ($uid == $source_uid) {
Logger::warning('target UID must not be be equal to the source UID', ['uri-id' => $uri_id, 'uid' => $uid]);
@ -1553,7 +1525,7 @@ class Item
* @return integer stored item id
* @throws \Exception
*/
private static function storeForUser(array $item, int $uid): int
private static function storeForUser(array $item, int $uid)
{
if (Post::exists(['uri-id' => $item['uri-id'], 'uid' => $uid])) {
if (!empty($item['event-id'])) {
@ -1641,7 +1613,7 @@ class Item
* @param integer $itemid Item ID that should be added
* @throws \Exception
*/
private static function addShadow(int $itemid)
private static function addShadow($itemid)
{
$fields = ['uid', 'private', 'visible', 'deleted', 'network', 'uri-id'];
$condition = ['id' => $itemid, 'gravity' => GRAVITY_PARENT];
@ -1704,7 +1676,7 @@ class Item
* @param integer $itemid Item ID that should be added
* @throws \Exception
*/
private static function addShadowPost(int $itemid)
private static function addShadowPost($itemid)
{
$item = Post::selectFirst(self::ITEM_FIELDLIST, ['id' => $itemid]);
if (!DBA::isResult($item)) {
@ -1768,7 +1740,7 @@ class Item
* @return string detected language
* @throws \Text_LanguageDetect_Exception
*/
private static function getLanguage(array $item): string
private static function getLanguage(array $item)
{
if (!empty($item['language'])) {
return $item['language'];
@ -1812,7 +1784,7 @@ class Item
return '';
}
public static function getLanguageMessage(array $item): string
public static function getLanguageMessage(array $item)
{
$iso639 = new \Matriphe\ISO639\ISO639;
@ -1834,7 +1806,7 @@ class Item
* @param string $host hostname for the GUID prefix
* @return string unique guid
*/
public static function guidFromUri(string $uri, string $host): string
public static function guidFromUri($uri, $host)
{
// Our regular guid routine is using this kind of prefix as well
// We have to avoid that different routines could accidentally create the same value
@ -1878,7 +1850,7 @@ class Item
* @param array $arr Contains the just posted item record
* @throws \Exception
*/
private static function updateContact(array $arr)
private static function updateContact($arr)
{
// Unarchive the author
$contact = DBA::selectFirst('contact', [], ['id' => $arr["author-id"]]);
@ -1925,7 +1897,7 @@ class Item
}
}
public static function setHashtags(string $body): string
public static function setHashtags($body)
{
$body = BBCode::performWithEscapedTags($body, ['noparse', 'pre', 'code', 'img'], function ($body) {
$tags = BBCode::getTags($body);
@ -1999,7 +1971,7 @@ class Item
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function tagDeliver(int $uid, int $item_id): bool
private static function tagDeliver($uid, $item_id)
{
$mention = false;
@ -2094,7 +2066,7 @@ class Item
self::performActivity($item['id'], 'announce', $item['uid']);
}
public static function isRemoteSelf(array $contact, array &$datarray): bool
public static function isRemoteSelf($contact, &$datarray)
{
if (!$contact['remote_self']) {
return false;
@ -2188,7 +2160,7 @@ class Item
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function fixPrivatePhotos(string $s, int $uid, array $item = null, int $cid = 0): string
public static function fixPrivatePhotos($s, $uid, $item = null, $cid = 0)
{
if (DI::config()->get('system', 'disable_embedded')) {
return $s;
@ -2282,14 +2254,13 @@ class Item
return $new_body;
}
private static function hasPermissions(array $obj)
private static function hasPermissions($obj)
{
return !empty($obj['allow_cid']) || !empty($obj['allow_gid']) ||
!empty($obj['deny_cid']) || !empty($obj['deny_gid']);
}
// @TODO $uid is unused parameter
private static function samePermissions($uid, array $obj1, array $obj2): bool
private static function samePermissions($uid, $obj1, $obj2)
{
// first part is easy. Check that these are exactly the same.
if (($obj1['allow_cid'] == $obj2['allow_cid'])
@ -2317,7 +2288,7 @@ class Item
* @return array
* @throws \Exception
*/
public static function enumeratePermissions(array $obj, bool $check_dead = false): array
public static function enumeratePermissions(array $obj, bool $check_dead = false)
{
$aclFormater = DI::aclFormatter();
@ -2405,7 +2376,7 @@ class Item
Logger::notice('User ' . $uid . ": expired $expired items; expire items: $expire_items, expire notes: $expire_notes, expire starred: $expire_starred, expire photos: $expire_photos");
}
public static function firstPostDate(int $uid, bool $wall = false)
public static function firstPostDate($uid, $wall = false)
{
$user = User::getById($uid, ['register_date']);
if (empty($user)) {
@ -2446,7 +2417,7 @@ class Item
* array $arr
* 'post_id' => ID of posted item
*/
public static function performActivity(int $item_id, string $verb, int $uid, string $allow_cid = null, string $allow_gid = null, string $deny_cid = null, string $deny_gid = null): bool
public static function performActivity(int $item_id, string $verb, int $uid, string $allow_cid = null, string $allow_gid = null, string $deny_cid = null, string $deny_gid = null)
{
if (empty($uid)) {
return false;
@ -2640,7 +2611,7 @@ class Item
* @param integer $owner_id User ID for which the permissions should be fetched
* @return array condition
*/
public static function getPermissionsConditionArrayByUserId(int $owner_id): array
public static function getPermissionsConditionArrayByUserId(int $owner_id)
{
$local_user = local_user();
$remote_user = Session::getRemoteContactID($owner_id);
@ -2672,7 +2643,7 @@ class Item
* @param string $table
* @return string
*/
public static function getPermissionsSQLByUserId(int $owner_id, string $table = ''): string
public static function getPermissionsSQLByUserId(int $owner_id, string $table = '')
{
$local_user = local_user();
$remote_user = Session::getRemoteContactID($owner_id);
@ -2720,7 +2691,7 @@ class Item
* @param \Friendica\Core\L10n $l10n
* @return string
*/
public static function postType(array $item, \Friendica\Core\L10n $l10n): string
public static function postType(array $item, \Friendica\Core\L10n $l10n)
{
if (!empty($item['event-id'])) {
return $l10n->t('event');
@ -2786,10 +2757,10 @@ class Item
* Given an item array, convert the body element from bbcode to html and add smilie icons.
* If attach is true, also add icons for item attachments.
*
* @param array $item Record from item table
* @param boolean $attach If true, add icons for item attachments as well
* @param boolean $is_preview Whether this is a preview
* @param boolean $only_cache Whether only cached HTML should be updated
* @param array $item
* @param boolean $attach
* @param boolean $is_preview
* @param boolean $only_cache
* @return string item body html
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
@ -2798,7 +2769,7 @@ class Item
* @hook prepare_body ('item'=>item array, 'html'=>body string, 'is_preview'=>boolean, 'filter_reasons'=>string array) after first bbcode to html
* @hook prepare_body_final ('item'=>item array, 'html'=>body string) after attach icons and blockquote special case handling (spoiler, author)
*/
public static function prepareBody(array &$item, bool $attach = false, bool $is_preview = false, bool $only_cache = false): string
public static function prepareBody(array &$item, $attach = false, $is_preview = false, $only_cache = false)
{
$a = DI::app();
Hook::callAll('prepare_body_init', $item);
@ -2840,7 +2811,7 @@ class Item
$s = $item["rendered-html"];
if ($only_cache) {
return '';
return;
}
// Compile eventual content filter reasons
@ -2920,7 +2891,7 @@ class Item
* @param int $type
* @return bool
*/
public static function containsLink(string $body, string $url, int $type = 0): bool
public static function containsLink(string $body, string $url, int $type = 0)
{
// Make sure that for example site parameters aren't used when testing if the link is contained in the body
$urlparts = parse_url($url);
@ -2953,7 +2924,7 @@ class Item
* @param string $body
* @return string modified body
*/
private static function replaceVisualAttachments(array $attachments, string $body): string
private static function replaceVisualAttachments(array $attachments, string $body)
{
DI::profiler()->startRecording('rendering');
@ -2984,7 +2955,7 @@ class Item
* @param string $content
* @return string modified content
*/
private static function addVisualAttachments(array $attachments, array $item, string $content, bool $shared): string
private static function addVisualAttachments(array $attachments, array $item, string $content, bool $shared)
{
DI::profiler()->startRecording('rendering');
$leading = '';
@ -3076,7 +3047,7 @@ class Item
* @param array $ignore_links A list of URLs to ignore
* @return string modified content
*/
private static function addLinkAttachment(int $uriid, array $attachments, string $body, string $content, bool $shared, array $ignore_links): string
private static function addLinkAttachment(int $uriid, array $attachments, string $body, string $content, bool $shared, array $ignore_links)
{
DI::profiler()->startRecording('rendering');
// Don't show a preview when there is a visual attachment (audio or video)
@ -3190,7 +3161,7 @@ class Item
* @param string $content
* @return string modified content
*/
private static function addNonVisualAttachments(array $attachments, array $item, string $content): string
private static function addNonVisualAttachments(array $attachments, array $item, string $content)
{
DI::profiler()->startRecording('rendering');
$trailing = '';
@ -3222,7 +3193,7 @@ class Item
return $content;
}
private static function addQuestions(array $item, string $content): string
private static function addQuestions(array $item, string $content)
{
DI::profiler()->startRecording('rendering');
if (!empty($item['question-id'])) {
@ -3273,7 +3244,7 @@ class Item
* @return boolean|array False if item has not plink, otherwise array('href'=>plink url, 'title'=>translated title)
* @throws \Exception
*/
public static function getPlink(array $item)
public static function getPlink($item)
{
if (!empty($item['plink']) && Network::isValidHttpUrl($item['plink'])) {
$plink = $item['plink'];
@ -3320,7 +3291,7 @@ class Item
*
* @return boolean "true" when it is a forum post
*/
public static function isForumPost(int $uri_id): bool
public static function isForumPost(int $uri_id)
{
foreach (Tag::getByURIId($uri_id, [Tag::EXCLUSIVE_MENTION]) as $tag) {
if (DBA::exists('contact', ['uid' => 0, 'nurl' => Strings::normaliseLink($tag['url']), 'contact-type' => Contact::TYPE_COMMUNITY])) {
@ -3338,7 +3309,7 @@ class Item
*
* @return integer item id
*/
public static function searchByLink(string $uri, int $uid = 0): int
public static function searchByLink($uri, $uid = 0)
{
$ssl_uri = str_replace('http://', 'https://', $uri);
$uris = [$uri, $ssl_uri, Strings::normaliseLink($uri)];
@ -3363,7 +3334,7 @@ class Item
*
* @return string URI
*/
public static function getURIByLink(string $uri): string
public static function getURIByLink(string $uri)
{
$ssl_uri = str_replace('http://', 'https://', $uri);
$uris = [$uri, $ssl_uri, Strings::normaliseLink($uri)];
@ -3389,7 +3360,7 @@ class Item
*
* @return integer item id
*/
public static function fetchByLink(string $uri, int $uid = 0): int
public static function fetchByLink(string $uri, int $uid = 0)
{
Logger::info('Trying to fetch link', ['uid' => $uid, 'uri' => $uri]);
$item_id = self::searchByLink($uri, $uid);
@ -3435,7 +3406,7 @@ class Item
*
* @return array with share information
*/
public static function getShareArray(array $item): array
public static function getShareArray($item)
{
if (!preg_match("/(.*?)\[share(.*?)\]\s?(.*?)\s?\[\/share\]\s?/ism", $item['body'], $matches)) {
return [];
@ -3458,7 +3429,7 @@ class Item
*
* @return array item array with data from the original item
*/
public static function addShareDataFromOriginal(array $item): array
public static function addShareDataFromOriginal(array $item)
{
$shared = self::getShareArray($item);
if (empty($shared)) {
@ -3519,7 +3490,7 @@ class Item
* @return bool
* @throws \Exception
*/
protected static function isAllowedByUser(array $item, int $user_id): bool
protected static function isAllowedByUser(array $item, int $user_id)
{
if (!empty($item['author-id']) && Contact\User::isBlocked($item['author-id'], $user_id)) {
Logger::notice('Author is blocked by user', ['author-link' => $item['author-link'], 'uid' => $user_id, 'item-uri' => $item['uri']]);
@ -3551,7 +3522,7 @@ class Item
* @param array $item
* @return string body
*/
public static function improveSharedDataInBody(array $item): string
public static function improveSharedDataInBody(array $item)
{
$shared = BBCode::fetchShareAttributes($item['body']);
if (empty($shared['link'])) {

View file

@ -30,6 +30,7 @@ class ItemURI
* Insert an item-uri record and return its id
*
* @param array $fields Item-uri fields
*
* @return int|null item-uri id
* @throws \Exception
*/
@ -60,15 +61,12 @@ class ItemURI
* Searched for an id of a given uri. Adds it, if not existing yet.
*
* @param string $uri
*
* @return integer item-uri id
* @throws \Exception
*/
public static function getIdByURI(string $uri): int
public static function getIdByURI($uri)
{
if (empty($uri)) {
return 0;
}
// If the URI gets too long we only take the first parts and hope for best
$uri = substr($uri, 0, 255);
@ -84,10 +82,11 @@ class ItemURI
* Searched for an id of a given guid.
*
* @param string $guid
*
* @return integer item-uri id
* @throws \Exception
*/
public static function getIdByGUID(string $guid): int
public static function getIdByGUID($guid)
{
// If the GUID gets too long we only take the first parts and hope for best
$guid = substr($guid, 0, 255);

View file

@ -60,7 +60,7 @@ class ParsedLogIterator implements \Iterator
* @param string $filename File to open
* @return $this
*/
public function open(string $filename): ParsedLogIterator
public function open(string $filename)
{
$this->reader->open($filename);
return $this;
@ -70,7 +70,7 @@ class ParsedLogIterator implements \Iterator
* @param int $limit Max num of lines to read
* @return $this
*/
public function withLimit(int $limit): ParsedLogIterator
public function withLimit(int $limit)
{
$this->limit = $limit;
return $this;
@ -80,7 +80,7 @@ class ParsedLogIterator implements \Iterator
* @param array $filters filters per column
* @return $this
*/
public function withFilters(array $filters): ParsedLogIterator
public function withFilters(array $filters)
{
$this->filters = $filters;
return $this;
@ -90,7 +90,7 @@ class ParsedLogIterator implements \Iterator
* @param string $search string to search to filter lines
* @return $this
*/
public function withSearch(string $search): ParsedLogIterator
public function withSearch(string $search)
{
$this->search = $search;
return $this;
@ -100,10 +100,10 @@ class ParsedLogIterator implements \Iterator
* Check if parsed log line match filters.
* Always match if no filters are set.
*
* @param ParsedLogLine $parsedlogline ParsedLogLine instance
* @return bool Wether the parse log line matches
* @param ParsedLogLine $parsedlogline
* @return bool
*/
private function filter(ParsedLogLine $parsedlogline): bool
private function filter($parsedlogline)
{
$match = true;
foreach ($this->filters as $filter => $filtervalue) {
@ -126,7 +126,7 @@ class ParsedLogIterator implements \Iterator
* @param ParsedLogLine $parsedlogline
* @return bool
*/
private function search(ParsedLogLine $parsedlogline): bool
private function search($parsedlogline)
{
if ($this->search != "") {
return strstr($parsedlogline->logline, $this->search) !== false;

View file

@ -45,7 +45,7 @@ class Mail
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function insert(array $msg, bool $notification = true)
public static function insert($msg, $notification = true)
{
if (!isset($msg['reply'])) {
$msg['reply'] = DBA::exists('mail', ['parent-uri' => $msg['parent-uri']]);
@ -125,7 +125,7 @@ class Mail
* @return int
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function send(int $recipient = 0, string $body = '', string $subject = '', string $replyto = ''): int
public static function send($recipient = 0, $body = '', $subject = '', $replyto = '')
{
$a = DI::app();
@ -255,7 +255,7 @@ class Mail
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function sendWall(array $recipient = [], string $body = '', string $subject = '', string $replyto = ''): int
public static function sendWall(array $recipient = [], $body = '', $subject = '', $replyto = '')
{
if (!$recipient) {
return -1;

View file

@ -22,7 +22,6 @@
namespace Friendica\Model;
use Friendica\Core\Addon;
use Friendica\Core\Config\Capability\IManageConfigValues;
use Friendica\Database\DBA;
use Friendica\DI;
use stdClass;
@ -102,7 +101,7 @@ class Nodeinfo
*
* @return array with supported services
*/
public static function getServices(): array
public static function getServices()
{
$services = [
'inbound' => [],
@ -157,19 +156,9 @@ class Nodeinfo
return $services;
}
/**
* Gathers organization information and returns it as an array
*
* @param IManageConfigValues $config Configuration instance
* @return array Organization information
*/
public static function getOrganization(IManageConfigValues $config): array
public static function getOrganization($config)
{
$organization = [
'name' => null,
'contact' => null,
'account' => null
];
$organization = ['name' => null, 'contact' => null, 'account' => null];
if (!empty($config->get('config', 'admin_email'))) {
$adminList = explode(',', str_replace(' ', '', $config->get('config', 'admin_email')));

View file

@ -40,16 +40,16 @@ class OpenWebAuthToken
* @return boolean
* @throws \Exception
*/
public static function create(string $type, uid $uid, string $token, string $meta)
public static function create($type, $uid, $token, $meta)
{
$fields = [
'type' => $type,
'uid' => $uid,
'token' => $token,
'meta' => $meta,
'created' => DateTimeFormat::utcNow()
"type" => $type,
"uid" => $uid,
"token" => $token,
"meta" => $meta,
"created" => DateTimeFormat::utcNow()
];
return DBA::insert('openwebauth-token', $fields);
return DBA::insert("openwebauth-token", $fields);
}
/**
@ -62,15 +62,15 @@ class OpenWebAuthToken
* @return string|boolean The meta enry or false if not found.
* @throws \Exception
*/
public static function getMeta(string $type, int $uid, string $token)
public static function getMeta($type, $uid, $token)
{
$condition = ['type' => $type, 'uid' => $uid, 'token' => $token];
$condition = ["type" => $type, "uid" => $uid, "token" => $token];
$entry = DBA::selectFirst('openwebauth-token', ['id', 'meta'], $condition);
$entry = DBA::selectFirst("openwebauth-token", ["id", "meta"], $condition);
if (DBA::isResult($entry)) {
DBA::delete('openwebauth-token', ['id' => $entry['id']]);
DBA::delete("openwebauth-token", ["id" => $entry["id"]]);
return $entry['meta'];
return $entry["meta"];
}
return false;
}
@ -82,10 +82,10 @@ class OpenWebAuthToken
* @param string $interval SQL compatible time interval
* @throws \Exception
*/
public static function purge(string $type, string $interval)
public static function purge($type, $interval)
{
$condition = ["`type` = ? AND `created` < ?", $type, DateTimeFormat::utcNow() . ' - INTERVAL ' . $interval];
DBA::delete('openwebauth-token', $condition);
$condition = ["`type` = ? AND `created` < ?", $type, DateTimeFormat::utcNow() . " - INTERVAL " . $interval];
DBA::delete("openwebauth-token", $condition);
}
}

View file

@ -94,7 +94,7 @@ class Photo
$fields = self::getFields();
}
return DBA::selectFirst('photo', $fields, $conditions, $params);
return DBA::selectFirst("photo", $fields, $conditions, $params);
}
/**
@ -110,10 +110,10 @@ class Photo
* @throws \Exception
* @see \Friendica\Database\DBA::select
*/
public static function getPhotosForUser(int $uid, string $resourceid, array $conditions = [], array $params = [])
public static function getPhotosForUser($uid, $resourceid, array $conditions = [], array $params = [])
{
$conditions['resource-id'] = $resourceid;
$conditions['uid'] = $uid;
$conditions["resource-id"] = $resourceid;
$conditions["uid"] = $uid;
return self::selectToArray([], $conditions, $params);
}
@ -132,11 +132,11 @@ class Photo
* @throws \Exception
* @see \Friendica\Database\DBA::select
*/
public static function getPhotoForUser(int $uid, $resourceid, $scale = 0, array $conditions = [], array $params = [])
public static function getPhotoForUser($uid, $resourceid, $scale = 0, array $conditions = [], array $params = [])
{
$conditions['resource-id'] = $resourceid;
$conditions['uid'] = $uid;
$conditions['scale'] = $scale;
$conditions["resource-id"] = $resourceid;
$conditions["uid"] = $uid;
$conditions["scale"] = $scale;
return self::selectFirst([], $conditions, $params);
}
@ -156,19 +156,19 @@ class Photo
*/
public static function getPhoto(string $resourceid, int $scale = 0)
{
$r = self::selectFirst(['uid'], ['resource-id' => $resourceid]);
$r = self::selectFirst(["uid"], ["resource-id" => $resourceid]);
if (!DBA::isResult($r)) {
return false;
}
$uid = $r['uid'];
$uid = $r["uid"];
$accessible = $uid ? (bool)DI::pConfig()->get($uid, 'system', 'accessible-photos', false) : false;
$sql_acl = Security::getPermissionsSQLByUserId($uid, $accessible);
$conditions = ["`resource-id` = ? AND `scale` <= ? " . $sql_acl, $resourceid, $scale];
$params = ['order' => ['scale' => true]];
$params = ["order" => ["scale" => true]];
$photo = self::selectFirst([], $conditions, $params);
return $photo;
@ -182,9 +182,9 @@ class Photo
* @return boolean
* @throws \Exception
*/
public static function exists(array $conditions): bool
public static function exists(array $conditions)
{
return DBA::exists('photo', $conditions);
return DBA::exists("photo", $conditions);
}
@ -193,7 +193,7 @@ class Photo
*
* @param array $photo Photo data. Needs at least 'id', 'type', 'backend-class', 'backend-ref'
*
* @return \Friendica\Object\Image|null Image object or null on error
* @return \Friendica\Object\Image
*/
public static function getImageDataForPhoto(array $photo)
{
@ -248,11 +248,11 @@ class Photo
* @return array field list
* @throws \Exception
*/
private static function getFields(): array
private static function getFields()
{
$allfields = DBStructure::definition(DI::app()->getBasePath(), false);
$fields = array_keys($allfields['photo']['fields']);
array_splice($fields, array_search('data', $fields), 1);
$fields = array_keys($allfields["photo"]["fields"]);
array_splice($fields, array_search("data", $fields), 1);
return $fields;
}
@ -265,14 +265,14 @@ class Photo
* @return array
* @throws \Exception
*/
public static function createPhotoForSystemResource(string $filename, string $mimetype = ''): array
public static function createPhotoForSystemResource($filename, $mimetype = '')
{
if (empty($mimetype)) {
$mimetype = Images::guessTypeByExtension($filename);
}
$fields = self::getFields();
$values = array_fill(0, count($fields), '');
$values = array_fill(0, count($fields), "");
$photo = array_combine($fields, $values);
$photo['backend-class'] = SystemResource::NAME;
@ -293,14 +293,14 @@ class Photo
* @return array
* @throws \Exception
*/
public static function createPhotoForExternalResource(string $url, int $uid = 0, string $mimetype = ''): array
public static function createPhotoForExternalResource($url, $uid = 0, $mimetype = '')
{
if (empty($mimetype)) {
$mimetype = Images::guessTypeByExtension($url);
}
$fields = self::getFields();
$values = array_fill(0, count($fields), '');
$values = array_fill(0, count($fields), "");
$photo = array_combine($fields, $values);
$photo['backend-class'] = ExternalResource::NAME;
@ -314,14 +314,14 @@ class Photo
/**
* store photo metadata in db and binary in default backend
*
* @param Image $image Image object with data
* @param Image $Image Image object with data
* @param integer $uid User ID
* @param integer $cid Contact ID
* @param string $rid Resource ID
* @param integer $rid Resource ID
* @param string $filename Filename
* @param string $album Album name
* @param integer $scale Scale
* @param integer $type Photo type, optional, default: Photo::DEFAULT
* @param integer $profile Is a profile image? optional, default = 0
* @param string $allow_cid Permissions, allowed contacts. optional, default = ""
* @param string $allow_gid Permissions, allowed groups. optional, default = ""
* @param string $deny_cid Permissions, denied contacts.optional, default = ""
@ -331,71 +331,71 @@ class Photo
* @return boolean True on success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function store(Image $image, int $uid, int $cid, string $rid, string $filename, string $album, int $scale, int $type = self::DEFAULT, string $allow_cid = '', string $allow_gid = '', string $deny_cid = '', string $deny_gid = '', string $desc = ''): bool
public static function store(Image $Image, $uid, $cid, $rid, $filename, $album, $scale, $type = self::DEFAULT, $allow_cid = "", $allow_gid = "", $deny_cid = "", $deny_gid = "", $desc = "")
{
$photo = self::selectFirst(['guid'], ["`resource-id` = ? AND `guid` != ?", $rid, '']);
$photo = self::selectFirst(["guid"], ["`resource-id` = ? AND `guid` != ?", $rid, ""]);
if (DBA::isResult($photo)) {
$guid = $photo['guid'];
$guid = $photo["guid"];
} else {
$guid = System::createGUID();
}
$existing_photo = self::selectFirst(['id', 'created', 'backend-class', 'backend-ref'], ['resource-id' => $rid, 'uid' => $uid, 'contact-id' => $cid, 'scale' => $scale]);
$existing_photo = self::selectFirst(["id", "created", "backend-class", "backend-ref"], ["resource-id" => $rid, "uid" => $uid, "contact-id" => $cid, "scale" => $scale]);
$created = DateTimeFormat::utcNow();
if (DBA::isResult($existing_photo)) {
$created = $existing_photo['created'];
$created = $existing_photo["created"];
}
// Get defined storage backend.
// if no storage backend, we use old "data" column in photo table.
// if is an existing photo, reuse same backend
$data = '';
$backend_ref = '';
$storage = '';
$data = "";
$backend_ref = "";
$storage = "";
try {
if (DBA::isResult($existing_photo)) {
$backend_ref = (string)$existing_photo['backend-ref'];
$storage = DI::storageManager()->getWritableStorageByName($existing_photo['backend-class'] ?? '');
$backend_ref = (string)$existing_photo["backend-ref"];
$storage = DI::storageManager()->getWritableStorageByName($existing_photo["backend-class"] ?? '');
} else {
$storage = DI::storage();
}
$backend_ref = $storage->put($image->asString(), $backend_ref);
$backend_ref = $storage->put($Image->asString(), $backend_ref);
} catch (InvalidClassStorageException $storageException) {
$data = $image->asString();
$data = $Image->asString();
}
$fields = [
'uid' => $uid,
'contact-id' => $cid,
'guid' => $guid,
'resource-id' => $rid,
'hash' => md5($image->asString()),
'created' => $created,
'edited' => DateTimeFormat::utcNow(),
'filename' => basename($filename),
'type' => $image->getType(),
'album' => $album,
'height' => $image->getHeight(),
'width' => $image->getWidth(),
'datasize' => strlen($image->asString()),
'data' => $data,
'scale' => $scale,
'photo-type' => $type,
'profile' => false,
'allow_cid' => $allow_cid,
'allow_gid' => $allow_gid,
'deny_cid' => $deny_cid,
'deny_gid' => $deny_gid,
'desc' => $desc,
'backend-class' => (string)$storage,
'backend-ref' => $backend_ref
"uid" => $uid,
"contact-id" => $cid,
"guid" => $guid,
"resource-id" => $rid,
"hash" => md5($Image->asString()),
"created" => $created,
"edited" => DateTimeFormat::utcNow(),
"filename" => basename($filename),
"type" => $Image->getType(),
"album" => $album,
"height" => $Image->getHeight(),
"width" => $Image->getWidth(),
"datasize" => strlen($Image->asString()),
"data" => $data,
"scale" => $scale,
"photo-type" => $type,
"profile" => false,
"allow_cid" => $allow_cid,
"allow_gid" => $allow_gid,
"deny_cid" => $deny_cid,
"deny_gid" => $deny_gid,
"desc" => $desc,
"backend-class" => (string)$storage,
"backend-ref" => $backend_ref
];
if (DBA::isResult($existing_photo)) {
$r = DBA::update('photo', $fields, ['id' => $existing_photo['id']]);
$r = DBA::update("photo", $fields, ["id" => $existing_photo["id"]]);
} else {
$r = DBA::insert('photo', $fields);
$r = DBA::insert("photo", $fields);
}
return $r;
@ -413,7 +413,7 @@ class Photo
* @throws \Exception
* @see \Friendica\Database\DBA::delete
*/
public static function delete(array $conditions, array $options = []): bool
public static function delete(array $conditions, array $options = [])
{
// get photo to delete data info
$photos = DBA::select('photo', ['id', 'backend-class', 'backend-ref'], $conditions);
@ -423,7 +423,7 @@ class Photo
$backend_class = DI::storageManager()->getWritableStorageByName($photo['backend-class'] ?? '');
$backend_class->delete($photo['backend-ref'] ?? '');
// Delete the photos after they had been deleted successfully
DBA::delete('photo', ['id' => $photo['id']]);
DBA::delete("photo", ['id' => $photo['id']]);
} catch (InvalidClassStorageException $storageException) {
DI::logger()->debug('Storage class not found.', ['conditions' => $conditions, 'exception' => $storageException]);
} catch (ReferenceStorageException $referenceStorageException) {
@ -433,7 +433,7 @@ class Photo
DBA::close($photos);
return DBA::delete('photo', $conditions, $options);
return DBA::delete("photo", $conditions, $options);
}
/**
@ -441,26 +441,26 @@ class Photo
*
* @param array $fields Contains the fields that are updated
* @param array $conditions Condition array with the key values
* @param Image $image Image to update. Optional, default null.
* @param array $old_fields Array with the old field values that are about to be replaced (true = update on duplicate)
* @param Image $img Image to update. Optional, default null.
* @param array|boolean $old_fields Array with the old field values that are about to be replaced (true = update on duplicate)
*
* @return boolean Was the update successfull?
*
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @see \Friendica\Database\DBA::update
*/
public static function update(array $fields, array $conditions, Image $image = null, array $old_fields = []): bool
public static function update($fields, $conditions, Image $img = null, array $old_fields = [])
{
if (!is_null($image)) {
if (!is_null($img)) {
// get photo to update
$photos = self::selectToArray(['backend-class', 'backend-ref'], $conditions);
foreach($photos as $photo) {
try {
$backend_class = DI::storageManager()->getWritableStorageByName($photo['backend-class'] ?? '');
$fields['backend-ref'] = $backend_class->put($image->asString(), $photo['backend-ref']);
$fields["backend-ref"] = $backend_class->put($img->asString(), $photo['backend-ref']);
} catch (InvalidClassStorageException $storageException) {
$fields['data'] = $image->asString();
$fields["data"] = $img->asString();
}
}
$fields['updated'] = DateTimeFormat::utcNow();
@ -468,7 +468,7 @@ class Photo
$fields['edited'] = DateTimeFormat::utcNow();
return DBA::update('photo', $fields, $conditions, $old_fields);
return DBA::update("photo", $fields, $conditions, $old_fields);
}
/**
@ -476,20 +476,20 @@ class Photo
* @param integer $uid user id
* @param integer $cid contact id
* @param boolean $quit_on_error optional, default false
* @return array|bool Array on success, false on error
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function importProfilePhoto(string $image_url, int $uid, int $cid, bool $quit_on_error = false)
public static function importProfilePhoto($image_url, $uid, $cid, $quit_on_error = false)
{
$thumb = '';
$micro = '';
$thumb = "";
$micro = "";
$photo = DBA::selectFirst(
'photo', ['resource-id'], ['uid' => $uid, 'contact-id' => $cid, 'scale' => 4, 'photo-type' => self::CONTACT_AVATAR]
"photo", ["resource-id"], ["uid" => $uid, "contact-id" => $cid, "scale" => 4, "photo-type" => self::CONTACT_AVATAR]
);
if (!empty($photo['resource-id'])) {
$resource_id = $photo['resource-id'];
$resource_id = $photo["resource-id"];
} else {
$resource_id = self::newResource();
}
@ -507,66 +507,66 @@ class Photo
$type = '';
}
if ($quit_on_error && ($img_str == '')) {
if ($quit_on_error && ($img_str == "")) {
return false;
}
$type = Images::getMimeTypeByData($img_str, $image_url, $type);
$image = new Image($img_str, $type);
if ($image->isValid()) {
$image->scaleToSquare(300);
$Image = new Image($img_str, $type);
if ($Image->isValid()) {
$Image->scaleToSquare(300);
$filesize = strlen($image->asString());
$filesize = strlen($Image->asString());
$maximagesize = DI::config()->get('system', 'maximagesize');
if (!empty($maximagesize) && ($filesize > $maximagesize)) {
Logger::info('Avatar exceeds image limit', ['uid' => $uid, 'cid' => $cid, 'maximagesize' => $maximagesize, 'size' => $filesize, 'type' => $image->getType()]);
if ($image->getType() == 'image/gif') {
$image->toStatic();
$image = new Image($image->asString(), 'image/png');
Logger::info('Avatar exceeds image limit', ['uid' => $uid, 'cid' => $cid, 'maximagesize' => $maximagesize, 'size' => $filesize, 'type' => $Image->getType()]);
if ($Image->getType() == 'image/gif') {
$Image->toStatic();
$Image = new Image($Image->asString(), 'image/png');
$filesize = strlen($image->asString());
Logger::info('Converted gif to a static png', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $image->getType()]);
$filesize = strlen($Image->asString());
Logger::info('Converted gif to a static png', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]);
}
if ($filesize > $maximagesize) {
foreach ([160, 80] as $pixels) {
if ($filesize > $maximagesize) {
Logger::info('Resize', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'max' => $maximagesize, 'pixels' => $pixels, 'type' => $image->getType()]);
$image->scaleDown($pixels);
$filesize = strlen($image->asString());
Logger::info('Resize', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'max' => $maximagesize, 'pixels' => $pixels, 'type' => $Image->getType()]);
$Image->scaleDown($pixels);
$filesize = strlen($Image->asString());
}
}
}
Logger::info('Avatar is resized', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $image->getType()]);
Logger::info('Avatar is resized', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]);
}
$r = self::store($image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4, self::CONTACT_AVATAR);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
}
$image->scaleDown(80);
$Image->scaleDown(80);
$r = self::store($image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 5, self::CONTACT_AVATAR);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 5, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
}
$image->scaleDown(48);
$Image->scaleDown(48);
$r = self::store($image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 6, self::CONTACT_AVATAR);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 6, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
}
$suffix = '?ts=' . time();
$suffix = "?ts=" . time();
$image_url = DI::baseUrl() . '/photo/' . $resource_id . '-4.' . $image->getExt() . $suffix;
$thumb = DI::baseUrl() . '/photo/' . $resource_id . '-5.' . $image->getExt() . $suffix;
$micro = DI::baseUrl() . '/photo/' . $resource_id . '-6.' . $image->getExt() . $suffix;
$image_url = DI::baseUrl() . "/photo/" . $resource_id . "-4." . $Image->getExt() . $suffix;
$thumb = DI::baseUrl() . "/photo/" . $resource_id . "-5." . $Image->getExt() . $suffix;
$micro = DI::baseUrl() . "/photo/" . $resource_id . "-6." . $Image->getExt() . $suffix;
} else {
$photo_failure = true;
}
@ -590,33 +590,31 @@ class Photo
* @param string $hemi hemi
* @return float
*/
public static function getGps(array $exifCoord, string $hemi): float
public static function getGps($exifCoord, $hemi)
{
$degrees = count($exifCoord) > 0 ? self::gps2Num($exifCoord[0]) : 0;
$minutes = count($exifCoord) > 1 ? self::gps2Num($exifCoord[1]) : 0;
$seconds = count($exifCoord) > 2 ? self::gps2Num($exifCoord[2]) : 0;
$flip = ($hemi == 'W' || $hemi == 'S') ? -1 : 1;
$flip = ($hemi == "W" || $hemi == "S") ? -1 : 1;
return floatval($flip * ($degrees + ($minutes / 60) + ($seconds / 3600)));
}
/**
* Change GPS to float number
*
* @param string $coordPart coordPart
* @return float
*/
private static function gps2Num(string $coordPart): float
private static function gps2Num($coordPart)
{
$parts = explode('/', $coordPart);
$parts = explode("/", $coordPart);
if (count($parts) <= 0) {
return 0;
}
if (count($parts) == 1) {
return (float)$parts[0];
return $parts[0];
}
return floatval($parts[0]) / floatval($parts[1]);
@ -633,18 +631,17 @@ class Photo
* @return array Returns array of the photo albums
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function getAlbums(int $uid, bool $update = false): array
public static function getAlbums($uid, $update = false)
{
$sql_extra = Security::getPermissionsSQLByUserId($uid);
$avatar_type = (local_user() && (local_user() == $uid)) ? self::USER_AVATAR : self::DEFAULT;
$banner_type = (local_user() && (local_user() == $uid)) ? self::USER_BANNER : self::DEFAULT;
$key = 'photo_albums:' . $uid . ':' . local_user() . ':' . remote_user();
$key = "photo_albums:".$uid.":".local_user().":".remote_user();
$albums = DI::cache()->get($key);
if (is_null($albums) || $update) {
if (!DI::config()->get('system', 'no_count', false)) {
if (!DI::config()->get("system", "no_count", false)) {
/// @todo This query needs to be renewed. It is really slow
// At this time we just store the data in the cache
$albums = DBA::toArray(DBA::p("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created`
@ -677,19 +674,19 @@ class Photo
* @return void
* @throws \Exception
*/
public static function clearAlbumCache(int $uid)
public static function clearAlbumCache($uid)
{
$key = 'photo_albums:' . $uid . ':' . local_user() . ':' . remote_user();
$key = "photo_albums:".$uid.":".local_user().":".remote_user();
DI::cache()->set($key, null, Duration::DAY);
}
/**
* Generate a unique photo ID.
*
* @return string Resource GUID
* @return string
* @throws \Exception
*/
public static function newResource(): string
public static function newResource()
{
return System::createGUID(32, false);
}
@ -700,7 +697,7 @@ class Photo
* @param string $image_uri The URI of the photo
* @return string The rid of the photo, or an empty string if the URI is not local
*/
public static function ridFromURI(string $image_uri): string
public static function ridFromURI(string $image_uri)
{
if (!stristr($image_uri, DI::baseUrl() . '/photo/')) {
return '';
@ -812,7 +809,7 @@ class Photo
* @param string $name Picture link
* @return array
*/
public static function getResourceData(string $name): array
public static function getResourceData(string $name):array
{
$base = DI::baseUrl()->get();
@ -843,9 +840,8 @@ class Photo
* @return boolean
* @throws \Exception
*/
public static function isLocal(string $name): bool
public static function isLocal($name)
{
// @TODO Maybe a proper check here on true condition?
return (bool)self::getIdForName($name);
}
@ -855,7 +851,7 @@ class Photo
* @param string $name Picture link
* @return int
*/
public static function getIdForName(string $name): int
public static function getIdForName($name)
{
$data = self::getResourceData($name);
if (empty($data)) {
@ -876,7 +872,7 @@ class Photo
* @return boolean
* @throws \Exception
*/
public static function isLocalPage(string $name): bool
public static function isLocalPage($name)
{
$base = DI::baseUrl()->get();
@ -889,23 +885,17 @@ class Photo
return DBA::exists('photo', ['resource-id' => $guid]);
}
/**
* Tries to resize image to wanted maximum size
*
* @param Image $image Image instance
* @return Image|null Image instance on success, null on error
*/
private static function fitImageSize(Image $image)
private static function fitImageSize($Image)
{
$max_length = DI::config()->get('system', 'max_image_length');
if ($max_length > 0) {
$image->scaleDown($max_length);
$Image->scaleDown($max_length);
Logger::info('File upload: Scaling picture to new size', ['max-length' => $max_length]);
}
$filesize = strlen($image->asString());
$width = $image->getWidth();
$height = $image->getHeight();
$filesize = strlen($Image->asString());
$width = $Image->getWidth();
$height = $Image->getHeight();
$maximagesize = DI::config()->get('system', 'maximagesize');
@ -914,10 +904,10 @@ class Photo
foreach ([5120, 2560, 1280, 640] as $pixels) {
if (($filesize > $maximagesize) && (max($width, $height) > $pixels)) {
Logger::info('Resize', ['size' => $filesize, 'width' => $width, 'height' => $height, 'max' => $maximagesize, 'pixels' => $pixels]);
$image->scaleDown($pixels);
$filesize = strlen($image->asString());
$width = $image->getWidth();
$height = $image->getHeight();
$Image->scaleDown($pixels);
$filesize = strlen($Image->asString());
$width = $Image->getWidth();
$height = $Image->getHeight();
}
}
if ($filesize > $maximagesize) {
@ -926,16 +916,10 @@ class Photo
}
}
return $image;
return $Image;
}
/**
* Fetches image from URL and returns an array with instance and local file name
*
* @param string $image_url URL to image
* @return array With: 'image' and 'filename' fields or empty array on error
*/
private static function loadImageFromURL(string $image_url): array
private static function loadImageFromURL(string $image_url)
{
$filename = basename($image_url);
if (!empty($image_url)) {
@ -955,23 +939,17 @@ class Photo
$type = Images::getMimeTypeByData($img_str, $image_url, $type);
$image = new Image($img_str, $type);
$Image = new Image($img_str, $type);
$image = self::fitImageSize($image);
if (empty($image)) {
$Image = self::fitImageSize($Image);
if (empty($Image)) {
return [];
}
return ['image' => $image, 'filename' => $filename];
return ['image' => $Image, 'filename' => $filename];
}
/**
* Inserts uploaded image into database and removes local temporary file
*
* @param array $files File array
* @return array With 'image' for Image instance and 'filename' for local file name or empty array on error
*/
private static function uploadImage(array $files): array
private static function uploadImage(array $files)
{
Logger::info('starting new upload');
@ -1030,36 +1008,34 @@ class Photo
Logger::info('File upload', ['src' => $src, 'filename' => $filename, 'size' => $filesize, 'type' => $filetype]);
$imagedata = @file_get_contents($src);
$image = new Image($imagedata, $filetype);
if (!$image->isValid()) {
$Image = new Image($imagedata, $filetype);
if (!$Image->isValid()) {
Logger::notice('Image is unvalid', ['files' => $files]);
return [];
}
$image->orient($src);
$Image->orient($src);
@unlink($src);
$image = self::fitImageSize($image);
if (empty($image)) {
$Image = self::fitImageSize($Image);
if (empty($Image)) {
return [];
}
return ['image' => $image, 'filename' => $filename];
return ['image' => $Image, 'filename' => $filename];
}
/**
* Handles uploaded image and assigns it to given user id
*
* @param int $uid User ID
* @param array $files uploaded file array
* @param string $album Album name (optional)
* @param string $album
* @param string|null $allow_cid
* @param string|null $allow_gid
* @param string $deny_cid
* @param string $deny_gid
* @param string $desc Description (optional)
* @param string $resource_id GUID (optional)
* @return array photo record or empty array on error
* @param string $desc
* @param string $resource_id
* @return array photo record
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function upload(int $uid, array $files, string $album = '', string $allow_cid = null, string $allow_gid = null, string $deny_cid = '', string $deny_gid = '', string $desc = '', string $resource_id = ''): array
@ -1076,10 +1052,10 @@ class Photo
return [];
}
$image = $data['image'];
$Image = $data['image'];
$filename = $data['filename'];
$width = $image->getWidth();
$height = $image->getHeight();
$width = $Image->getWidth();
$height = $Image->getHeight();
$resource_id = $resource_id ?: self::newResource();
$album = $album ?: DI::l10n()->t('Wall Photos');
@ -1091,23 +1067,23 @@ class Photo
$smallest = 0;
$r = self::store($image, $user['uid'], 0, $resource_id, $filename, $album, 0, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
$r = self::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 0, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
if (!$r) {
Logger::notice('Photo could not be stored');
return [];
}
if ($width > 640 || $height > 640) {
$image->scaleDown(640);
$r = self::store($image, $user['uid'], 0, $resource_id, $filename, $album, 1, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
$Image->scaleDown(640);
$r = self::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 1, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
if ($r) {
$smallest = 1;
}
}
if ($width > 320 || $height > 320) {
$image->scaleDown(320);
$r = self::store($image, $user['uid'], 0, $resource_id, $filename, $album, 2, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
$Image->scaleDown(320);
$r = self::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 2, self::DEFAULT, $allow_cid, $allow_gid, $deny_cid, $deny_gid, $desc);
if ($r && ($smallest == 0)) {
$smallest = 2;
}
@ -1129,8 +1105,8 @@ class Photo
$picture['height'] = $photo['height'];
$picture['type'] = $photo['type'];
$picture['albumpage'] = DI::baseUrl() . '/photos/' . $user['nickname'] . '/image/' . $resource_id;
$picture['picture'] = DI::baseUrl() . '/photo/{$resource_id}-0.' . $image->getExt();
$picture['preview'] = DI::baseUrl() . '/photo/{$resource_id}-{$smallest}.' . $image->getExt();
$picture['picture'] = DI::baseUrl() . '/photo/{$resource_id}-0.' . $Image->getExt();
$picture['preview'] = DI::baseUrl() . '/photo/{$resource_id}-{$smallest}.' . $Image->getExt();
Logger::info('upload done', ['picture' => $picture]);
return $picture;
@ -1163,10 +1139,10 @@ class Photo
return '';
}
$image = $data['image'];
$Image = $data['image'];
$filename = $data['filename'];
$width = $image->getWidth();
$height = $image->getHeight();
$width = $Image->getWidth();
$height = $Image->getHeight();
$resource_id = self::newResource();
$album = DI::l10n()->t(self::PROFILE_PHOTOS);
@ -1175,28 +1151,28 @@ class Photo
logger::info('starting new profile image upload');
if ($width > 300 || $height > 300) {
$image->scaleDown(300);
$Image->scaleDown(300);
}
$r = self::store($image, $uid, 0, $resource_id, $filename, $album, 4, self::USER_AVATAR);
$r = self::store($Image, $uid, 0, $resource_id, $filename, $album, 4, self::USER_AVATAR);
if (!$r) {
logger::notice('profile image upload with scale 4 (300) failed');
}
if ($width > 80 || $height > 80) {
$image->scaleDown(80);
$Image->scaleDown(80);
}
$r = self::store($image, $uid, 0, $resource_id, $filename, $album, 5, self::USER_AVATAR);
$r = self::store($Image, $uid, 0, $resource_id, $filename, $album, 5, self::USER_AVATAR);
if (!$r) {
logger::notice('profile image upload with scale 5 (80) failed');
}
if ($width > 48 || $height > 48) {
$image->scaleDown(48);
$Image->scaleDown(48);
}
$r = self::store($image, $uid, 0, $resource_id, $filename, $album, 6, self::USER_AVATAR);
$r = self::store($Image, $uid, 0, $resource_id, $filename, $album, 6, self::USER_AVATAR);
if (!$r) {
logger::notice('profile image upload with scale 6 (48) failed');
}
@ -1241,19 +1217,19 @@ class Photo
return '';
}
$image = $data['image'];
$Image = $data['image'];
$filename = $data['filename'];
$width = $image->getWidth();
$height = $image->getHeight();
$width = $Image->getWidth();
$height = $Image->getHeight();
$resource_id = self::newResource();
$album = DI::l10n()->t(self::BANNER_PHOTOS);
if ($width > 960) {
$image->scaleDown(960);
$Image->scaleDown(960);
}
$r = self::store($image, $uid, 0, $resource_id, $filename, $album, 3, self::USER_BANNER);
$r = self::store($Image, $uid, 0, $resource_id, $filename, $album, 3, self::USER_BANNER);
if (!$r) {
logger::notice('profile banner upload with scale 3 (960) failed');
}
@ -1271,4 +1247,3 @@ class Photo
return $resource_id;
}
}

View file

@ -39,7 +39,7 @@ class Post
* @return int ID of inserted post
* @throws \Exception
*/
public static function insert(int $uri_id, array $data = []): int
public static function insert(int $uri_id, array $data = [])
{
if (empty($uri_id)) {
throw new BadMethodCallException('Empty URI_id');
@ -107,10 +107,8 @@ class Post
* @param object $stmt statement object
* @param bool $do_close
* @return array Data array
* @todo Find proper type-hint for $stmt and maybe avoid boolean
*/
public static function toArray($stmt, bool $do_close = true)
{
public static function toArray($stmt, $do_close = true) {
if (is_bool($stmt)) {
return $stmt;
}
@ -133,8 +131,7 @@ class Post
* @return boolean Are there rows for that condition?
* @throws \Exception
*/
public static function exists(array $condition): bool
{
public static function exists($condition) {
return DBA::exists('post-user-view', $condition);
}
@ -154,7 +151,7 @@ class Post
* $count = Post::count($condition);
* @throws \Exception
*/
public static function count(array $condition = [], array $params = []): int
public static function count(array $condition = [], array $params = [])
{
return DBA::count('post-user-view', $condition, $params);
}
@ -175,7 +172,7 @@ class Post
* $count = Post::count($condition);
* @throws \Exception
*/
public static function countThread(array $condition = [], array $params = []): int
public static function countThread(array $condition = [], array $params = [])
{
return DBA::count('post-thread-user-view', $condition, $params);
}
@ -196,7 +193,7 @@ class Post
* $count = Post::count($condition);
* @throws \Exception
*/
public static function countPosts(array $condition = [], array $params = []): int
public static function countPosts(array $condition = [], array $params = [])
{
return DBA::count('post-view', $condition, $params);
}
@ -212,7 +209,7 @@ class Post
* @throws \Exception
* @see DBA::select
*/
public static function selectFirst(array $fields = [], array $condition = [], array $params = [])
public static function selectFirst(array $fields = [], array $condition = [], $params = [])
{
$params['limit'] = 1;
@ -237,7 +234,7 @@ class Post
* @throws \Exception
* @see DBA::select
*/
public static function selectFirstPost(array $fields = [], array $condition = [], array $params = [])
public static function selectFirstPost(array $fields = [], array $condition = [], $params = [])
{
$params['limit'] = 1;
@ -262,7 +259,7 @@ class Post
* @throws \Exception
* @see DBA::select
*/
public static function selectFirstThread(array $fields = [], array $condition = [], array $params = [])
public static function selectFirstThread(array $fields = [], array $condition = [], $params = [])
{
$params['limit'] = 1;
@ -287,7 +284,7 @@ class Post
* @return array
* @throws \Exception
*/
public static function selectToArray(array $fields = [], array $condition = [], array $params = [])
public static function selectToArray(array $fields = [], array $condition = [], $params = [])
{
$result = self::select($fields, $condition, $params);
@ -315,7 +312,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
private static function selectView(string $view, array $selected = [], array $condition = [], array $params = [])
private static function selectView(string $view, array $selected = [], array $condition = [], $params = [])
{
if (empty($selected)) {
$selected = array_merge(Item::DISPLAY_FIELDLIST, Item::ITEM_FIELDLIST);
@ -340,7 +337,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function select(array $selected = [], array $condition = [], array $params = [])
public static function select(array $selected = [], array $condition = [], $params = [])
{
return self::selectView('post-user-view', $selected, $condition, $params);
}
@ -355,7 +352,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function selectPosts(array $selected = [], array $condition = [], array $params = [])
public static function selectPosts(array $selected = [], array $condition = [], $params = [])
{
return self::selectView('post-view', $selected, $condition, $params);
}
@ -370,7 +367,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function selectThread(array $selected = [], array $condition = [], array $params = [])
public static function selectThread(array $selected = [], array $condition = [], $params = [])
{
return self::selectView('post-thread-user-view', $selected, $condition, $params);
}
@ -387,7 +384,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
private static function selectViewForUser(string $view, int $uid, array $selected = [], array $condition = [], array $params = [])
private static function selectViewForUser(string $view, $uid, array $selected = [], array $condition = [], $params = [])
{
if (empty($selected)) {
$selected = Item::DISPLAY_FIELDLIST;
@ -428,7 +425,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function selectForUser(int $uid, array $selected = [], array $condition = [], array $params = [])
public static function selectForUser($uid, array $selected = [], array $condition = [], $params = [])
{
return self::selectViewForUser('post-user-view', $uid, $selected, $condition, $params);
}
@ -444,7 +441,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function selectPostsForUser(int $uid, array $selected = [], array $condition = [], array $params = [])
public static function selectPostsForUser($uid, array $selected = [], array $condition = [], $params = [])
{
return self::selectViewForUser('post-view', $uid, $selected, $condition, $params);
}
@ -460,7 +457,7 @@ class Post
* @return boolean|object
* @throws \Exception
*/
public static function selectThreadForUser(int $uid, array $selected = [], array $condition = [], array $params = [])
public static function selectThreadForUser($uid, array $selected = [], array $condition = [], $params = [])
{
return self::selectViewForUser('post-thread-user-view', $uid, $selected, $condition, $params);
}
@ -476,7 +473,7 @@ class Post
* @throws \Exception
* @see DBA::select
*/
public static function selectFirstForUser(int $uid, array $selected = [], array $condition = [], array $params = [])
public static function selectFirstForUser($uid, array $selected = [], array $condition = [], $params = [])
{
$params['limit'] = 1;
@ -643,7 +640,7 @@ class Post
* @return boolean was the delete successful?
* @throws \Exception
*/
public static function delete(array $conditions, array $options = []): bool
public static function delete(array $conditions, array $options = [])
{
return DBA::delete('post', $conditions, $options);
}

View file

@ -109,7 +109,7 @@ class Media
* @param array $media
* @return array cleaned media array
*/
private static function unsetEmptyFields(array $media): array
private static function unsetEmptyFields(array $media)
{
$fields = ['mimetype', 'height', 'width', 'size', 'preview', 'preview-height', 'preview-width', 'description'];
foreach ($fields as $field) {
@ -145,7 +145,7 @@ class Media
* @param string $title
* @return string "[attach]" element
*/
public static function getAttachElement(string $href, int $length, string $type, string $title = ''): string
public static function getAttachElement(string $href, int $length, string $type, string $title = '')
{
$media = self::fetchAdditionalData(['type' => self::DOCUMENT, 'url' => $href,
'size' => $length, 'mimetype' => $type, 'description' => $title]);
@ -160,7 +160,7 @@ class Media
* @param array $media
* @return array media array with additional data
*/
public static function fetchAdditionalData(array $media): array
public static function fetchAdditionalData(array $media)
{
if (Network::isLocalLink($media['url'])) {
$media = self::fetchLocalData($media);
@ -235,7 +235,7 @@ class Media
* @param array $media
* @return array media with added data
*/
private static function fetchLocalData(array $media): array
private static function fetchLocalData(array $media)
{
if (!preg_match('|.*?/photo/(.*[a-fA-F0-9])\-(.*[0-9])\..*[\w]|', $media['url'] ?? '', $matches)) {
return $media;
@ -266,7 +266,7 @@ class Media
* @param array $data
* @return array data array with the detected type
*/
public static function addType(array $data): array
public static function addType(array $data)
{
if (empty($data['mimetype'])) {
Logger::info('No MimeType provided', ['media' => $data]);
@ -318,7 +318,7 @@ class Media
* @param string $preview Preview picture
* @return boolean
*/
private static function isPictureLink(string $page, string $preview): bool
private static function isPictureLink(string $page, string $preview)
{
return preg_match('#/photos/.*/image/#ism', $page) && preg_match('#/photo/.*-1\.#ism', $preview);
}
@ -330,7 +330,7 @@ class Media
* @param string $body
* @return string Body without media links
*/
public static function insertFromBody(int $uriid, string $body): string
public static function insertFromBody(int $uriid, string $body)
{
// Simplify image codes
$unshared_body = $body = preg_replace("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism", '[img]$3[/img]', $body);
@ -413,7 +413,6 @@ class Media
*
* @param integer $uriid
* @param string $body
* @return void
*/
public static function insertFromRelevantUrl(int $uriid, string $body)
{
@ -449,7 +448,6 @@ class Media
*
* @param integer $uriid
* @param string $body
* @return void
*/
public static function insertFromAttachmentData(int $uriid, string $body)
{
@ -508,9 +506,9 @@ class Media
/**
* Retrieves the media attachments associated with the provided item ID.
*
* @param int $uri_id URI id
* @param array $types Media types
* @return array|bool Array on success, false on error
* @param int $uri_id
* @param array $types
* @return array
* @throws \Exception
*/
public static function getByURIId(int $uri_id, array $types = [])
@ -527,12 +525,12 @@ class Media
/**
* Checks if media attachments are associated with the provided item ID.
*
* @param int $uri_id URI id
* @param array $types Media types
* @return bool Whether media attachment exists
* @param int $uri_id
* @param array $types
* @return array
* @throws \Exception
*/
public static function existsByURIId(int $uri_id, array $types = []): bool
public static function existsByURIId(int $uri_id, array $types = [])
{
$condition = ['uri-id' => $uri_id];
@ -546,13 +544,13 @@ class Media
/**
* Split the attachment media in the three segments "visual", "link" and "additional"
*
* @param int $uri_id URI id
* @param string $guid GUID
* @param int $uri_id
* @param string $guid
* @param array $links list of links that shouldn't be added
* @param bool $has_media
* @return array attachments
*/
public static function splitAttachments(int $uri_id, string $guid = '', array $links = [], bool $has_media = true): array
public static function splitAttachments(int $uri_id, string $guid = '', array $links = [], bool $has_media = true)
{
$attachments = ['visual' => [], 'link' => [], 'additional' => []];
@ -650,7 +648,7 @@ class Media
* @param string $body
* @return string body
*/
public static function addAttachmentsToBody(int $uriid, string $body = ''): string
public static function addAttachmentsToBody(int $uriid, string $body = '')
{
if (empty($body)) {
$item = Post::selectFirst(['body'], ['uri-id' => $uriid]);
@ -703,7 +701,7 @@ class Media
* @param string $size One of the Proxy::SIZE_* constants
* @return string preview link
*/
public static function getPreviewUrlForId(int $id, string $size = ''): string
public static function getPreviewUrlForId(int $id, string $size = ''):string
{
$url = DI::baseUrl() . '/photo/preview/';
switch ($size) {
@ -733,7 +731,7 @@ class Media
* @param string $size One of the Proxy::SIZE_* constants
* @return string media link
*/
public static function getUrlForId(int $id, string $size = ''): string
public static function getUrlForId(int $id, string $size = ''):string
{
$url = DI::baseUrl() . '/photo/media/';
switch ($size) {

View file

@ -54,10 +54,10 @@ class Profile
*
* @param integer User ID
*
* @return array|bool Profile data or false on error
* @return array Profile data
* @throws \Exception
*/
public static function getByUID(int $uid)
public static function getByUID($uid)
{
return DBA::selectFirst('profile', [], ['uid' => $uid]);
}
@ -69,7 +69,7 @@ class Profile
* @param int $id The contact owner ID
* @param array $fields The selected fields
*
* @return array|bool Profile data for the ID or false on error
* @return array Profile data for the ID
* @throws \Exception
*/
public static function getById(int $uid, int $id, array $fields = [])
@ -81,7 +81,7 @@ class Profile
* Returns profile data for the contact owner
*
* @param int $uid The User ID
* @param array|bool $fields The fields to retrieve or false on error
* @param array $fields The fields to retrieve
*
* @return array Array of profile data
* @throws \Exception
@ -94,9 +94,9 @@ class Profile
/**
* Update a profile entry and distribute the changes if needed
*
* @param array $fields Profile fields to update
* @param integer $uid User id
* @return boolean Whether update was successful
* @param array $fields
* @param integer $uid
* @return boolean
*/
public static function update(array $fields, int $uid): bool
{
@ -136,10 +136,8 @@ class Profile
/**
* Publish a changed profile
*
* @param int $uid User id
* @param int $uid
* @param bool $force Force publishing to the directory
* @return void
*/
public static function publishUpdate(int $uid, bool $force = false)
{
@ -165,7 +163,7 @@ class Profile
*
* @return string Location string
*/
public static function formatLocation(array $profile): string
public static function formatLocation(array $profile)
{
$location = '';
@ -239,7 +237,7 @@ class Profile
if (!local_user()) {
$a->setCurrentTheme($profile['theme']);
$a->setCurrentMobileTheme(DI::pConfig()->get($a->getProfileOwner(), 'system', 'mobile_theme') ?? '');
$a->setCurrentMobileTheme(DI::pConfig()->get($a->getProfileOwner(), 'system', 'mobile_theme'));
}
/*

View file

@ -34,10 +34,9 @@ class PushSubscriber
*
* @param integer $uid User ID
* @param int $default_priority
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function publishFeed(int $uid, int $default_priority = PRIORITY_HIGH)
public static function publishFeed($uid, $default_priority = PRIORITY_HIGH)
{
$condition = ['push' => 0, 'uid' => $uid];
DBA::update('push_subscriber', ['push' => 1, 'next_try' => DBA::NULL_DATETIME], $condition);
@ -49,10 +48,9 @@ class PushSubscriber
* start workers to transmit the feed data
*
* @param int $default_priority
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function requeue(int $default_priority = PRIORITY_HIGH)
public static function requeue($default_priority = PRIORITY_HIGH)
{
// We'll push to each subscriber that has push > 0,
// i.e. there has been an update (set in notifier.php).
@ -82,10 +80,9 @@ class PushSubscriber
* @param string $hub_callback Callback address
* @param string $hub_topic Feed topic
* @param string $hub_secret Subscription secret
* @return void
* @throws \Exception
*/
public static function renew(int $uid, string $nick, int $subscribe, string $hub_callback, string $hub_topic, string $hub_secret)
public static function renew($uid, $nick, $subscribe, $hub_callback, $hub_topic, $hub_secret)
{
// fetch the old subscription if it exists
$subscriber = DBA::selectFirst('push_subscriber', ['last_update', 'push'], ['callback_url' => $hub_callback]);
@ -122,10 +119,9 @@ class PushSubscriber
* Delay the push subscriber
*
* @param integer $id Subscriber ID
* @return void
* @throws \Exception
*/
public static function delay(int $id)
public static function delay($id)
{
$subscriber = DBA::selectFirst('push_subscriber', ['push', 'callback_url', 'renewed', 'nickname'], ['id' => $id]);
if (!DBA::isResult($subscriber)) {
@ -162,10 +158,9 @@ class PushSubscriber
*
* @param integer $id Subscriber ID
* @param string $last_update Date of last transmitted item
* @return void
* @throws \Exception
*/
public static function reset(int $id, string $last_update)
public static function reset($id, $last_update)
{
$subscriber = DBA::selectFirst('push_subscriber', ['callback_url', 'nickname'], ['id' => $id]);
if (!DBA::isResult($subscriber)) {

View file

@ -134,7 +134,7 @@ class User
*
* @return array system account
*/
public static function getSystemAccount(): array
public static function getSystemAccount()
{
$system = Contact::selectFirst([], ['self' => true, 'uid' => 0]);
if (!DBA::isResult($system)) {
@ -244,7 +244,7 @@ class User
*
* @return string actor account name
*/
public static function getActorName(): string
public static function getActorName()
{
$system_actor_name = DI::config()->get('system', 'actor_name');
if (!empty($system_actor_name)) {
@ -278,7 +278,7 @@ class User
* @return boolean
* @throws Exception
*/
public static function exists(int $uid): bool
public static function exists($uid)
{
return DBA::exists('user', ['uid' => $uid]);
}
@ -289,7 +289,7 @@ class User
* @return array|boolean User record if it exists, false otherwise
* @throws Exception
*/
public static function getById(int $uid, array $fields = [])
public static function getById($uid, array $fields = [])
{
return !empty($uid) ? DBA::selectFirst('user', $fields, ['uid' => $uid]) : [];
}
@ -321,7 +321,7 @@ class User
* @return array|boolean User record if it exists, false otherwise
* @throws Exception
*/
public static function getByNickname(string $nickname, array $fields = [])
public static function getByNickname($nickname, array $fields = [])
{
return DBA::selectFirst('user', $fields, ['nickname' => $nickname]);
}
@ -334,7 +334,7 @@ class User
* @return integer user id
* @throws Exception
*/
public static function getIdForURL(string $url): int
public static function getIdForURL(string $url)
{
// Avoid database queries when the local node hostname isn't even part of the url.
if (!Contact::isLocal($url)) {
@ -380,7 +380,7 @@ class User
* @param array $fields
* @return array user
*/
public static function getFirstAdmin(array $fields = []) : array
public static function getFirstAdmin(array $fields = [])
{
if (!empty(DI::config()->get('config', 'admin_nickname'))) {
return self::getByNickname(DI::config()->get('config', 'admin_nickname'), $fields);
@ -469,7 +469,7 @@ class User
* @return boolean|array
* @throws Exception
*/
public static function getOwnerDataByNick(string $nick)
public static function getOwnerDataByNick($nick)
{
$user = DBA::selectFirst('user', ['uid'], ['nickname' => $nick]);
@ -488,7 +488,7 @@ class User
* @return int group id
* @throws Exception
*/
public static function getDefaultGroup(int $uid): int
public static function getDefaultGroup($uid)
{
$user = DBA::selectFirst('user', ['def_gid'], ['uid' => $uid]);
if (DBA::isResult($user)) {
@ -512,7 +512,7 @@ class User
* @throws HTTPException\ForbiddenException
* @throws HTTPException\NotFoundException
*/
public static function getIdFromPasswordAuthentication($user_info, string $password, bool $third_party = false)
public static function getIdFromPasswordAuthentication($user_info, $password, $third_party = false)
{
// Addons registered with the "authenticate" hook may create the user on the
// fly. `getAuthenticationInfo` will fail if the user doesn't exist yet. If
@ -580,7 +580,7 @@ class User
* @return int User Id if authentication is successful
* @throws HTTPException\ForbiddenException
*/
public static function getIdFromAuthenticateHooks(string $username, string $password): int
public static function getIdFromAuthenticateHooks($username, $password)
{
$addon_auth = [
'username' => $username,
@ -613,7 +613,7 @@ class User
* - User array with at least the uid and the hashed password
*
* @param mixed $user_info
* @return array|null Null if not found/determined
* @return array
* @throws HTTPException\NotFoundException
*/
public static function getAuthenticationInfo($user_info)
@ -671,7 +671,7 @@ class User
* @return string
* @throws Exception
*/
public static function generateNewPassword(): string
public static function generateNewPassword()
{
return ucfirst(Strings::getRandomName(8)) . random_int(1000, 9999);
}
@ -683,7 +683,7 @@ class User
* @return bool
* @throws Exception
*/
public static function isPasswordExposed(string $password): bool
public static function isPasswordExposed($password)
{
$cache = new CacheItemPool();
$cache->changeConfig([
@ -712,7 +712,7 @@ class User
* @param string $password
* @return string
*/
private static function hashPasswordLegacy(string $password): string
private static function hashPasswordLegacy($password)
{
return hash('whirlpool', $password);
}
@ -724,7 +724,7 @@ class User
* @return string
* @throws Exception
*/
public static function hashPassword(string $password): string
public static function hashPassword($password)
{
if (!trim($password)) {
throw new Exception(DI::l10n()->t('Password can\'t be empty'));
@ -741,7 +741,7 @@ class User
* @return bool
* @throws Exception
*/
public static function updatePassword(int $uid, string $password): bool
public static function updatePassword($uid, $password)
{
$password = trim($password);
@ -771,7 +771,7 @@ class User
* @return bool
* @throws Exception
*/
private static function updatePasswordHashed(int $uid, string $pasword_hashed): bool
private static function updatePasswordHashed($uid, $pasword_hashed)
{
$fields = [
'password' => $pasword_hashed,
@ -792,7 +792,7 @@ class User
* @param string $nickname The nickname that should be checked
* @return boolean True is the nickname is blocked on the node
*/
public static function isNicknameBlocked(string $nickname): bool
public static function isNicknameBlocked($nickname)
{
$forbidden_nicknames = DI::config()->get('system', 'forbidden_nicknames', '');
if (!empty($forbidden_nicknames)) {
@ -829,7 +829,7 @@ class User
* @return string avatar link
* @throws Exception
*/
public static function getAvatarUrl(array $user, string $size = ''): string
public static function getAvatarUrl(array $user, string $size = ''):string
{
if (empty($user['nickname'])) {
DI::logger()->warning('Missing user nickname key', ['trace' => System::callstack(20)]);
@ -871,7 +871,7 @@ class User
* @return string banner link
* @throws Exception
*/
public static function getBannerUrl(array $user): string
public static function getBannerUrl(array $user):string
{
if (empty($user['nickname'])) {
DI::logger()->warning('Missing user nickname key', ['trace' => System::callstack(20)]);
@ -913,7 +913,7 @@ class User
* @throws ImagickException
* @throws Exception
*/
public static function create(array $data): array
public static function create(array $data)
{
$return = ['user' => null, 'password' => ''];
@ -1255,7 +1255,7 @@ class User
* @throws Exception
*/
public static function block(int $uid, bool $block = true): bool
public static function block(int $uid, bool $block = true)
{
return DBA::update('user', ['blocked' => $block], ['uid' => $uid]);
}
@ -1270,7 +1270,7 @@ class User
* @throws HTTPException\InternalServerErrorException
* @throws Exception
*/
public static function allow(string $hash): bool
public static function allow(string $hash)
{
$register = Register::getByHash($hash);
if (!DBA::isResult($register)) {
@ -1316,7 +1316,7 @@ class User
* @return bool True, if the deny was successfull
* @throws Exception
*/
public static function deny(string $hash): bool
public static function deny(string $hash)
{
$register = Register::getByHash($hash);
if (!DBA::isResult($register)) {
@ -1348,7 +1348,7 @@ class User
* @throws ErrorException
* @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)
{
if (empty($name) ||
empty($email) ||
@ -1418,7 +1418,7 @@ class User
* @return NULL|boolean from notification() and email() inherited
* @throws HTTPException\InternalServerErrorException
*/
public static function sendRegisterPendingEmail(array $user, string $sitename, string $siteurl, string $password)
public static function sendRegisterPendingEmail($user, $sitename, $siteurl, $password)
{
$body = Strings::deindent(DI::l10n()->t(
'
@ -1461,7 +1461,7 @@ class User
* @return NULL|boolean from notification() and email() inherited
* @throws HTTPException\InternalServerErrorException
*/
public static function sendRegisterOpenEmail(L10n $l10n, array $user, string $sitename, string $siteurl, string $password)
public static function sendRegisterOpenEmail(L10n $l10n, $user, $sitename, $siteurl, $password)
{
$preamble = Strings::deindent($l10n->t(
'
@ -1520,7 +1520,7 @@ class User
* @return bool
* @throws HTTPException\InternalServerErrorException
*/
public static function remove(int $uid): bool
public static function remove(int $uid)
{
if (empty($uid)) {
return false;
@ -1574,7 +1574,7 @@ class User
* ]
* @throws Exception
*/
public static function identities(int $uid): array
public static function identities($uid)
{
if (empty($uid)) {
return [];
@ -1646,7 +1646,7 @@ class User
* @param int $uid
* @return bool
*/
public static function hasIdentities(int $uid): bool
public static function hasIdentities(int $uid):bool
{
if (empty($uid)) {
return false;
@ -1679,7 +1679,7 @@ class User
*
* @throws Exception
*/
public static function getStatistics(): array
public static function getStatistics()
{
$statistics = [
'total_users' => 0,
@ -1732,10 +1732,10 @@ class User
* @param string $order Order of the user list (Default is 'contact.name')
* @param bool $descending Order direction (Default is ascending)
*
* @return array|bool The list of the users
* @return array The list of the users
* @throws Exception
*/
public static function getList(int $start = 0, int $count = Pager::ITEMS_PER_PAGE, string $type = 'all', string $order = 'name', bool $descending = false)
public static function getList($start = 0, $count = Pager::ITEMS_PER_PAGE, $type = 'all', $order = 'name', bool $descending = false)
{
$param = ['limit' => [$start, $count], 'order' => [$order => $descending]];
$condition = [];

View file

@ -48,7 +48,7 @@ class BaseSettings extends BaseModule
'label' => DI::l10n()->t('Two-factor authentication'),
'url' => 'settings/2fa',
'selected' => ((DI::args()->getArgc() > 1) && (DI::args()->getArgv()[1] === '2fa') ? 'active' : ''),
'accesskey' => '2',
'accesskey' => 'o',
];
$tabs[] = [

View file

@ -59,13 +59,12 @@ class Notify extends BaseModule
}
}
private static function dispatchPublic(array $postdata)
private static function dispatchPublic($postdata)
{
$msg = Diaspora::decodeRaw($postdata, '', true);
if (!is_array($msg)) {
if (!$msg) {
// We have to fail silently to be able to hand it over to the salmon parser
Logger::warning('Diaspora::decodeRaw() has failed for some reason.');
return;
return false;
}
// Fetch the corresponding public contact
@ -89,10 +88,10 @@ class Notify extends BaseModule
System::xmlExit($ret, 'Done');
}
private static function dispatchPrivate(array $user, string $postdata)
private static function dispatchPrivate($user, $postdata)
{
$msg = Diaspora::decodeRaw($postdata, $user['prvkey'] ?? '');
if (!is_array($msg)) {
if (!$msg) {
System::xmlExit(4, 'Unable to parse message');
}

View file

@ -34,6 +34,6 @@ class Poll extends BaseModule
protected function rawContent(array $request = [])
{
$last_update = $request['last_update'] ?? '';
System::httpExit(OStatus::feed($this->parameters['nickname'], $last_update, 10) ?? '', Response::TYPE_ATOM);
System::httpExit(OStatus::feed($this->parameters['nickname'], $last_update, 10), Response::TYPE_ATOM);
}
}

View file

@ -112,7 +112,7 @@ class Directory extends BaseModule
*
* @throws \Exception
*/
public static function formatEntry(array $contact, string $photo_size = 'photo'): array
public static function formatEntry(array $contact, $photo_size = 'photo')
{
$itemurl = (($contact['addr'] != "") ? $contact['addr'] : $contact['url']);
@ -166,7 +166,7 @@ class Directory extends BaseModule
'img_hover' => $contact['name'],
'name' => $contact['name'],
'details' => $details,
'account_type' => Model\Contact::getAccountType($contact['contact-type'] ?? 0),
'account_type' => Model\Contact::getAccountType($contact['contact-type']),
'profile' => $profile,
'location' => $location_e,
'tags' => $contact['pub_keywords'],

View file

@ -128,7 +128,7 @@ class Photo extends BaseModule
throw new HTTPException\NotFoundException(DI::l10n()->t('The Photo is not available.'));
}
$photo = self::getPhotoById($id, $this->parameters['type'], $customsize ?: Proxy::PIXEL_SMALL);
$photo = self::getPhotoByid($id, $this->parameters['type'], $customsize ?: Proxy::PIXEL_SMALL);
} else {
$photoid = pathinfo($this->parameters['name'], PATHINFO_FILENAME);
$scale = 0;
@ -228,18 +228,10 @@ class Photo extends BaseModule
System::exit();
}
/**
* Fetches photo record by given id number, type and custom size
*
* @param int $id Photo id
* @param string $type Photo type
* @param int $customsize Custom size (?)
* @return array|bool Array on success, false on error
*/
private static function getPhotoById(int $id, string $type, int $customsize)
private static function getPhotoByid(int $id, $type, $customsize)
{
switch($type) {
case 'preview':
case "preview":
$media = DBA::selectFirst('post-media', ['preview', 'url', 'mimetype', 'type', 'uri-id'], ['id' => $id]);
if (empty($media)) {
return false;
@ -259,7 +251,7 @@ class Photo extends BaseModule
}
return MPhoto::createPhotoForExternalResource($url, (int)local_user(), $media['mimetype']);
case 'media':
case "media":
$media = DBA::selectFirst('post-media', ['url', 'mimetype', 'uri-id'], ['id' => $id, 'type' => Post\Media::IMAGE]);
if (empty($media)) {
return false;
@ -270,15 +262,15 @@ class Photo extends BaseModule
}
return MPhoto::createPhotoForExternalResource($media['url'], (int)local_user(), $media['mimetype']);
case 'link':
case "link":
$link = DBA::selectFirst('post-link', ['url', 'mimetype'], ['id' => $id]);
if (empty($link)) {
return false;
}
return MPhoto::createPhotoForExternalResource($link['url'], (int)local_user(), $link['mimetype']);
case 'contact':
$fields = ['uid', 'uri-id', 'url', 'nurl', 'avatar', 'photo', 'xmpp', 'addr', 'network', 'failed', 'updated'];
case "contact":
$fields = ['uid', 'url', 'nurl', 'avatar', 'photo', 'xmpp', 'addr', 'network', 'failed', 'updated'];
$contact = Contact::getById($id, $fields);
if (empty($contact)) {
return false;
@ -295,7 +287,7 @@ class Photo extends BaseModule
} else {
$scale = 4;
}
$photo = MPhoto::selectFirst([], ['scale' => $scale, 'uid' => $contact['uid'], 'profile' => 1]);
$photo = MPhoto::selectFirst([], ["scale" => $scale, "uid" => $contact['uid'], "profile" => 1]);
if (!empty($photo)) {
return $photo;
}
@ -338,7 +330,7 @@ class Photo extends BaseModule
}
if ($update) {
Logger::info('Invalid file, contact update initiated', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]);
Worker::add(PRIORITY_LOW, 'UpdateContact', $id);
Worker::add(PRIORITY_LOW, "UpdateContact", $id);
} else {
Logger::info('Invalid file', ['cid' => $id, 'url' => $contact['url'], 'avatar' => $url]);
}
@ -360,7 +352,7 @@ class Photo extends BaseModule
}
}
return MPhoto::createPhotoForExternalResource($url, 0, $mimetext);
case 'header':
case "header":
$fields = ['uid', 'url', 'header', 'network', 'gsid'];
$contact = Contact::getById($id, $fields);
if (empty($contact)) {
@ -375,37 +367,37 @@ class Photo extends BaseModule
$url = Contact::getDefaultHeader($contact);
}
return MPhoto::createPhotoForExternalResource($url);
case 'banner':
$photo = MPhoto::selectFirst([], ['scale' => 3, 'uid' => $id, 'photo-type' => MPhoto::USER_BANNER]);
case "banner":
$photo = MPhoto::selectFirst([], ["scale" => 3, 'uid' => $id, 'photo-type' => MPhoto::USER_BANNER]);
if (!empty($photo)) {
return $photo;
}
return MPhoto::createPhotoForExternalResource(DI::baseUrl() . '/images/friendica-banner.jpg');
case 'profile':
case 'custom':
case "profile":
case "custom":
$scale = 4;
break;
case 'micro':
case "micro":
$scale = 6;
break;
case 'avatar':
case "avatar":
default:
$scale = 5;
}
$photo = MPhoto::selectFirst([], ['scale' => $scale, 'uid' => $id, 'profile' => 1]);
$photo = MPhoto::selectFirst([], ["scale" => $scale, "uid" => $id, "profile" => 1]);
if (empty($photo)) {
$contact = DBA::selectFirst('contact', [], ['uid' => $id, 'self' => true]) ?: [];
switch($type) {
case 'profile':
case 'custom':
case "profile":
case "custom":
$default = Contact::getDefaultAvatar($contact, Proxy::SIZE_SMALL);
break;
case 'micro':
case "micro":
$default = Contact::getDefaultAvatar($contact, Proxy::SIZE_MICRO);
break;
case 'avatar':
case "avatar":
default:
$default = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB);
}

View file

@ -33,14 +33,14 @@ interface ICanHandleHttpResponses
*
* @return string The Return Code
*/
public function getReturnCode(): string;
public function getReturnCode();
/**
* Returns the Content Type
*
* @return string the Content Type
*/
public function getContentType(): string;
public function getContentType();
/**
* Returns the headers
@ -55,20 +55,21 @@ interface ICanHandleHttpResponses
/**
* Returns all headers
*
* @see MessageInterface::getHeaders()
*
* @return string[][]
*/
public function getHeaders();
/**
* Check if a specified header exists
*
* @see MessageInterface::hasHeader()
*
* @param string $field header field
*
* @return boolean "true" if header exists
*/
public function inHeader(string $field): bool;
public function inHeader(string $field);
/**
* Returns the headers as an associated array
@ -82,22 +83,21 @@ interface ICanHandleHttpResponses
/**
* @return bool
*/
public function isSuccess(): bool;
public function isSuccess();
/**
* @return string
*/
public function getUrl(): string;
public function getUrl();
/**
* @return string
*/
public function getRedirectUrl(): string;
public function getRedirectUrl();
/**
* Getter for body
*
* @see MessageInterface::getBody()
*
* @return string
*/
public function getBody();
@ -105,20 +105,20 @@ interface ICanHandleHttpResponses
/**
* @return boolean
*/
public function isRedirectUrl(): bool;
public function isRedirectUrl();
/**
* @return integer
*/
public function getErrorNumber(): int;
public function getErrorNumber();
/**
* @return string
*/
public function getError(): string;
public function getError();
/**
* @return boolean
*/
public function isTimeout(): bool;
public function isTimeout();
}

View file

@ -1445,7 +1445,7 @@ class Probe
* @return array|bool OStatus data or "false" on error or "true" on short mode
* @throws HTTPException\InternalServerErrorException
*/
private static function ostatus(array $webfinger, bool $short = false)
private static function ostatus($webfinger, $short = false)
{
$data = [];

View file

@ -1008,7 +1008,7 @@ class Post
/**
* @return string
*/
private function getRedirectUrl(): string
private function getRedirectUrl()
{
return $this->redirect_url;
}

View file

@ -110,7 +110,7 @@ class ContactResult implements IResult
/**
* @return string
*/
public function getUrl(): string
public function getUrl()
{
return $this->url;
}

View file

@ -33,9 +33,9 @@ class ProfileFields extends BaseCollection
/**
* @param callable $callback
* @return ProfileFields (as an extended form of BaseCollection)
* @return ProfileFields
*/
public function map(callable $callback): BaseCollection
public function map(callable $callback): ProfileFields
{
return parent::map($callback);
}
@ -43,9 +43,9 @@ class ProfileFields extends BaseCollection
/**
* @param callable|null $callback
* @param int $flag
* @return ProfileFields as an extended version of BaseCollection
* @return ProfileFields
*/
public function filter(callable $callback = null, int $flag = 0): BaseCollection
public function filter(callable $callback = null, int $flag = 0): ProfileFields
{
return parent::filter($callback, $flag);
}

View file

@ -212,7 +212,7 @@ final class Activity
*
* @return bool True, if the activity is hidden
*/
public function isHidden(string $activity): bool
public function isHidden(string $activity)
{
foreach (self::HIDDEN_ACTIVITIES as $hiddenActivity) {
if ($this->match($activity, $hiddenActivity)) {
@ -231,7 +231,7 @@ final class Activity
*
* @return boolean
*/
public function match(string $haystack, string $needle): bool
public function match(string $haystack, string $needle)
{
return (($haystack === $needle) ||
((basename($needle) === $haystack) &&

View file

@ -104,12 +104,12 @@ class ActivityPub
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetchContent(string $url, int $uid = 0): array
public static function fetchContent(string $url, int $uid = 0)
{
return HTTPSignature::fetch($url, $uid);
}
private static function getAccountType(array $apcontact): int
private static function getAccountType($apcontact)
{
$accounttype = -1;
@ -146,7 +146,7 @@ class ActivityPub
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function probeProfile(string $url, bool $update = true): array
public static function probeProfile($url, $update = true)
{
$apcontact = APContact::getByURL($url, $update);
if (empty($apcontact)) {
@ -204,7 +204,7 @@ class ActivityPub
* @param integer $uid User ID
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetchOutbox(string $url, int $uid)
public static function fetchOutbox($url, $uid)
{
$data = self::fetchContent($url, $uid);
if (empty($data)) {
@ -235,7 +235,7 @@ class ActivityPub
* @param integer $uid Optional user id
* @return array Endpoint items
*/
public static function fetchItems(string $url, int $uid = 0): array
public static function fetchItems(string $url, int $uid = 0)
{
$data = self::fetchContent($url, $uid);
if (empty($data)) {
@ -268,7 +268,7 @@ class ActivityPub
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isSupportedByContactUrl(string $url, $update = null)
public static function isSupportedByContactUrl($url, $update = null)
{
return !empty(APContact::getByURL($url, $update));
}

View file

@ -71,7 +71,7 @@ class Processor
* @param array $languages
* @return string language JSON
*/
private static function processLanguages(array $languages): string
private static function processLanguages(array $languages)
{
$codes = array_keys($languages);
$lang = [];
@ -88,13 +88,12 @@ class Processor
/**
* Replaces emojis in the body
*
* @param int $uri_id
* @param string $body
* @param array $emojis
* @param string $body
*
* @return string with replaced emojis
*/
private static function replaceEmojis(int $uri_id, string $body, array $emojis): string
private static function replaceEmojis(int $uri_id, $body, array $emojis)
{
$body = strtr($body,
array_combine(
@ -144,7 +143,7 @@ class Processor
* @param array $activity
* @param array $item
*/
private static function storeAttachments(array $activity, array $item)
private static function storeAttachments($activity, $item)
{
if (empty($activity['attachments'])) {
return;
@ -161,7 +160,7 @@ class Processor
* @param array $activity
* @param array $item
*/
private static function storeQuestion(array $activity, array $item)
private static function storeQuestion($activity, $item)
{
if (empty($activity['question'])) {
return;
@ -192,7 +191,7 @@ class Processor
* @param array $activity Activity array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function updateItem(array $activity)
public static function updateItem($activity)
{
$item = Post::selectFirst(['uri', 'uri-id', 'thr-parent', 'gravity', 'post-type'], ['uri' => $activity['id']]);
if (!DBA::isResult($item)) {
@ -263,7 +262,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function createItem(array $activity): array
public static function createItem($activity)
{
$item = [];
$item['verb'] = Activity::POST;
@ -412,7 +411,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function deleteItem(array $activity)
public static function deleteItem($activity)
{
$owner = Contact::getIdForURL($activity['actor']);
@ -427,7 +426,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function addTag(array $activity)
public static function addTag($activity)
{
if (empty($activity['object_content']) || empty($activity['object_id'])) {
return;
@ -458,7 +457,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function createActivity(array $activity, string $verb)
public static function createActivity($activity, $verb)
{
$item = self::createItem($activity);
if (empty($item)) {
@ -562,7 +561,7 @@ class Processor
* @return int event id
* @throws \Exception
*/
public static function createEvent(array $activity, array $item): int
public static function createEvent($activity, $item)
{
$event['summary'] = HTML::toBBCode($activity['name'] ?: $activity['summary']);
$event['desc'] = HTML::toBBCode($activity['content']);
@ -606,7 +605,7 @@ class Processor
* @return array|bool Returns the item array or false if there was an unexpected occurrence
* @throws \Exception
*/
private static function processContent(array $activity, array $item)
private static function processContent($activity, $item)
{
if (!empty($activity['mediatype']) && ($activity['mediatype'] == 'text/markdown')) {
$item['title'] = strip_tags($activity['name']);
@ -616,8 +615,8 @@ class Processor
$content = $activity['content'];
} else {
// By default assume "text/html"
$item['title'] = HTML::toBBCode($activity['name'] ?? '');
$content = HTML::toBBCode($activity['content'] ?? '');
$item['title'] = HTML::toBBCode($activity['name']);
$content = HTML::toBBCode($activity['content']);
}
$item['title'] = trim(BBCode::toPlaintext($item['title']));
@ -651,7 +650,7 @@ class Processor
$content = self::removeImplicitMentionsFromBody($content, $parent);
}
$item['content-warning'] = HTML::toBBCode($activity['summary'] ?? '');
$item['content-warning'] = HTML::toBBCode($activity['summary']);
$item['raw-body'] = $item['body'] = $content;
}
@ -690,7 +689,7 @@ class Processor
* @param string $url message URL
* @return string with GUID
*/
private static function getGUIDByURL(string $url): string
private static function getGUIDByURL(string $url)
{
$parsed = parse_url($url);
@ -711,7 +710,7 @@ class Processor
* @param array $item
* @return boolean Is the message wanted?
*/
private static function isSolicitedMessage(array $activity, array $item): bool
private static function isSolicitedMessage(array $activity, array $item)
{
// The checks are split to improve the support when searching why a message was accepted.
if (count($activity['receiver']) != 1) {
@ -972,7 +971,7 @@ class Processor
* @return int|bool New mail table row id or false on error
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function postMail(array $activity, array $item)
private static function postMail($activity, $item)
{
if (($item['gravity'] != GRAVITY_PARENT) && !DBA::exists('mail', ['uri' => $item['thr-parent'], 'uid' => $item['uid']])) {
Logger::info('Parent not found, mail will be discarded.', ['uid' => $item['uid'], 'uri' => $item['thr-parent']]);
@ -1113,7 +1112,7 @@ class Processor
* @return string fetched message URL
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '', int $completion = Receiver::COMPLETION_MANUAL): string
public static function fetchMissingActivity(string $url, array $child = [], string $relay_actor = '', int $completion = Receiver::COMPLETION_MANUAL)
{
if (!empty($child['receiver'])) {
$uid = ActivityPub\Receiver::getFirstUserFromReceivers($child['receiver']);
@ -1208,7 +1207,7 @@ class Processor
* @param string $id object ID
* @return boolean true if message is accepted
*/
private static function acceptIncomingMessage(array $activity, string $id): bool
private static function acceptIncomingMessage(array $activity, string $id)
{
if (empty($activity['as:object'])) {
Logger::info('No object field in activity - accepted', ['id' => $id]);
@ -1216,7 +1215,7 @@ class Processor
}
$replyto = JsonLD::fetchElement($activity['as:object'], 'as:inReplyTo', '@id');
$uriid = ItemURI::getIdByURI($replyto ?? '');
$uriid = ItemURI::getIdByURI($replyto);
if (Post::exists(['uri-id' => $uriid])) {
Logger::info('Post is a reply to an existing post - accepted', ['id' => $id, 'uri-id' => $uriid, 'replyto' => $replyto]);
return true;
@ -1225,7 +1224,7 @@ class Processor
$attributed_to = JsonLD::fetchElement($activity['as:object'], 'as:attributedTo', '@id');
$authorid = Contact::getIdForURL($attributed_to);
$body = HTML::toBBCode(JsonLD::fetchElement($activity['as:object'], 'as:content', '@value') ?? '');
$body = HTML::toBBCode(JsonLD::fetchElement($activity['as:object'], 'as:content', '@value'));
$messageTags = [];
$tags = Receiver::processTags(JsonLD::fetchElementArray($activity['as:object'], 'as:tag') ?? []);
@ -1248,7 +1247,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function followUser(array $activity)
public static function followUser($activity)
{
$uid = User::getIdForURL($activity['object_id']);
if (empty($uid)) {
@ -1326,7 +1325,7 @@ class Processor
* @param array $activity
* @throws \Exception
*/
public static function updatePerson(array $activity)
public static function updatePerson($activity)
{
if (empty($activity['object_id'])) {
return;
@ -1342,7 +1341,7 @@ class Processor
* @param array $activity
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function deletePerson(array $activity)
public static function deletePerson($activity)
{
if (empty($activity['object_id']) || empty($activity['actor'])) {
Logger::info('Empty object id or actor.');
@ -1369,7 +1368,7 @@ class Processor
* @param array $activity
* @throws \Exception
*/
public static function blockAccount(array $activity)
public static function blockAccount($activity)
{
$cid = Contact::getIdForURL($activity['actor']);
if (empty($cid)) {
@ -1392,7 +1391,7 @@ class Processor
* @param array $activity
* @throws \Exception
*/
public static function unblockAccount(array $activity)
public static function unblockAccount($activity)
{
$cid = Contact::getIdForURL($activity['actor']);
if (empty($cid)) {
@ -1416,7 +1415,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function acceptFollowUser(array $activity)
public static function acceptFollowUser($activity)
{
$uid = User::getIdForURL($activity['object_actor']);
if (empty($uid)) {
@ -1450,7 +1449,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function rejectFollowUser(array $activity)
public static function rejectFollowUser($activity)
{
$uid = User::getIdForURL($activity['object_actor']);
if (empty($uid)) {
@ -1483,7 +1482,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function undoActivity(array $activity)
public static function undoActivity($activity)
{
if (empty($activity['object_id'])) {
return;
@ -1508,7 +1507,7 @@ class Processor
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function undoFollowUser(array $activity)
public static function undoFollowUser($activity)
{
$uid = User::getIdForURL($activity['object_object']);
if (empty($uid)) {
@ -1543,7 +1542,7 @@ class Processor
* @param integer $cid Contact ID
* @throws \Exception
*/
private static function switchContact(int $cid)
private static function switchContact($cid)
{
$contact = DBA::selectFirst('contact', ['network', 'url'], ['id' => $cid]);
if (!DBA::isResult($contact) || in_array($contact['network'], [Protocol::ACTIVITYPUB, Protocol::DFRN]) || Contact::isLocal($contact['url'])) {
@ -1563,7 +1562,7 @@ class Processor
* @return array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function getImplicitMentionList(array $parent): array
private static function getImplicitMentionList(array $parent)
{
$parent_terms = Tag::getByURIId($parent['uri-id'], [Tag::MENTION, Tag::IMPLICIT_MENTION, Tag::EXCLUSIVE_MENTION]);
@ -1601,7 +1600,7 @@ class Processor
* @param array $parent
* @return string
*/
private static function removeImplicitMentionsFromBody(string $body, array $parent): string
private static function removeImplicitMentionsFromBody(string $body, array $parent)
{
if (DI::config()->get('system', 'disable_implicit_mentions')) {
return $body;

View file

@ -84,9 +84,8 @@ class Receiver
* @param $header
* @param integer $uid User ID
* @throws \Exception
* @todo Find type for $body/$header
*/
public static function processInbox($body, $header, int $uid)
public static function processInbox($body, $header, $uid)
{
$activity = json_decode($body, true);
if (empty($activity)) {
@ -221,11 +220,11 @@ class Receiver
* @param string $object_id Object ID of the the provided object
* @param integer $uid User ID
*
* @return string with object type or NULL
* @return string with object type
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function fetchObjectType(array $activity, string $object_id, int $uid = 0)
private static function fetchObjectType($activity, $object_id, $uid = 0)
{
if (!empty($activity['as:object'])) {
$object_type = JsonLD::fetchElement($activity['as:object'], '@type');
@ -269,7 +268,7 @@ class Receiver
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function prepareObjectData(array $activity, int $uid, bool $push, bool &$trust_source): array
public static function prepareObjectData($activity, $uid, $push, &$trust_source)
{
$id = JsonLD::fetchElement($activity, '@id');
if (!empty($id) && !$trust_source) {
@ -459,7 +458,7 @@ class Receiver
* @param array $receivers Array with receivers
* @return integer user id;
*/
public static function getFirstUserFromReceivers(array $receivers): int
public static function getFirstUserFromReceivers($receivers)
{
foreach ($receivers as $receiver) {
if (!empty($receiver)) {
@ -480,7 +479,7 @@ class Receiver
* @param array $signer The signer of the post
* @throws \Exception
*/
public static function processActivity(array $activity, string $body = '', int $uid = null, bool $trust_source = false, bool $push = false, array $signer = [])
public static function processActivity($activity, string $body = '', int $uid = null, bool $trust_source = false, bool $push = false, array $signer = [])
{
$type = JsonLD::fetchElement($activity, '@type');
if (!$type) {
@ -819,7 +818,7 @@ class Receiver
*
* @return int user id
*/
public static function getBestUserForActivity(array $activity): int
public static function getBestUserForActivity(array $activity)
{
$uid = 0;
$actor = JsonLD::fetchElement($activity, 'as:actor', '@id') ?? '';
@ -845,8 +844,7 @@ class Receiver
return $uid;
}
// @TODO Missing documentation
public static function getReceiverURL(array $activity): array
public static function getReceiverURL($activity)
{
$urls = [];
@ -878,9 +876,9 @@ class Receiver
* @return array with receivers (user id)
* @throws \Exception
*/
private static function getReceivers(array $activity, string $actor, array $tags = [], bool $fetch_unlisted = false): array
private static function getReceivers($activity, $actor, $tags = [], $fetch_unlisted = false)
{
$reply = $receivers = $profile = [];
$reply = $receivers = [];
// When it is an answer, we inherite the receivers from the parent
$replyto = JsonLD::fetchElement($activity, 'as:inReplyTo', '@id');
@ -1007,7 +1005,7 @@ class Receiver
* @return array with receivers (user id)
* @throws \Exception
*/
private static function getReceiverForActor(string $actor, array $tags, array $receivers, int $target_type, array $profile): array
private static function getReceiverForActor($actor, $tags, $receivers, $target_type, $profile)
{
$basecondition = ['rel' => [Contact::SHARING, Contact::FRIEND, Contact::FOLLOWER],
'network' => Protocol::FEDERATED, 'archive' => false, 'pending' => false];
@ -1049,12 +1047,13 @@ class Receiver
* Tests if the contact is a valid receiver for this actor
*
* @param array $contact
* @param string $actor
* @param array $tags
*
* @return bool with receivers (user id)
* @throws \Exception
*/
private static function isValidReceiverForActor(array $contact, array $tags): bool
private static function isValidReceiverForActor($contact, $tags)
{
// Are we following the contact? Then this is a valid receiver
if (in_array($contact['rel'], [Contact::SHARING, Contact::FRIEND])) {
@ -1090,7 +1089,7 @@ class Receiver
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function switchContact(int $cid, int $uid, string $url)
public static function switchContact($cid, $uid, $url)
{
if (DBA::exists('contact', ['id' => $cid, 'network' => Protocol::ACTIVITYPUB])) {
Logger::info('Contact is already ActivityPub', ['id' => $cid, 'uid' => $uid, 'url' => $url]);
@ -1109,7 +1108,7 @@ class Receiver
}
/**
* @TODO Fix documentation and type-hints
*
*
* @param $receivers
* @param $actor
@ -1136,14 +1135,14 @@ class Receiver
}
/**
* @TODO Fix documentation and type-hints
*
*
* @param $object_data
* @param array $activity
*
* @return mixed
*/
private static function addActivityFields($object_data, array $activity)
private static function addActivityFields($object_data, $activity)
{
if (!empty($activity['published']) && empty($object_data['published'])) {
$object_data['published'] = JsonLD::fetchElement($activity, 'as:published', '@value');
@ -1263,7 +1262,7 @@ class Receiver
* @param array $languages
* @return array Languages
*/
public static function processLanguages(array $languages): array
public static function processLanguages(array $languages)
{
if (empty($languages)) {
return [];
@ -1286,7 +1285,7 @@ class Receiver
*
* @return array with tags in a simplified format
*/
public static function processTags(array $tags): array
public static function processTags(array $tags)
{
$taglist = [];
@ -1318,7 +1317,7 @@ class Receiver
* @param array $emojis
* @return array with emojis in a simplified format
*/
private static function processEmojis(array $emojis): array
private static function processEmojis(array $emojis)
{
$emojilist = [];
@ -1344,7 +1343,7 @@ class Receiver
*
* @return array Attachments in a simplified format
*/
private static function processAttachments(array $attachments): array
private static function processAttachments(array $attachments)
{
$attachlist = [];
@ -1461,7 +1460,7 @@ class Receiver
*
* @return array Questions in a simplified format
*/
private static function processQuestion(array $object): array
private static function processQuestion(array $object)
{
$question = [];
@ -1519,10 +1518,10 @@ class Receiver
* @param array $object
* @param array $object_data
*
* @return array Object data (?)
* @return array
* @throws \Exception
*/
private static function getSource(array $object, array $object_data): array
private static function getSource($object, $object_data)
{
$object_data['source'] = JsonLD::fetchElement($object, 'as:source', 'as:content', 'as:mediaType', 'text/bbcode');
$object_data['source'] = JsonLD::fetchElement($object_data, 'source', '@value');
@ -1651,10 +1650,10 @@ class Receiver
*
* @param array $object
*
* @return array|bool Object data or FALSE if $object does not contain @id element
* @return array
* @throws \Exception
*/
private static function processObject(array $object)
private static function processObject($object)
{
if (!JsonLD::fetchElement($object, '@id')) {
return false;
@ -1768,7 +1767,7 @@ class Receiver
$object_data['question'] = self::processQuestion($object);
}
$receiverdata = self::getReceivers($object, $object_data['actor'] ?? '', $object_data['tags'], true);
$receiverdata = self::getReceivers($object, $object_data['actor'], $object_data['tags'], true);
$receivers = $reception_types = [];
foreach ($receiverdata as $key => $data) {
$receivers[$key] = $data['uid'];

View file

@ -68,7 +68,7 @@ class Transmitter
* @param array $inboxes
* @return array inboxes with added relay servers
*/
public static function addRelayServerInboxes(array $inboxes = []): array
public static function addRelayServerInboxes(array $inboxes = [])
{
foreach (Relay::getList(['inbox']) as $contact) {
$inboxes[$contact['inbox']] = $contact['inbox'];
@ -83,7 +83,7 @@ class Transmitter
* @param array $inboxes
* @return array inboxes with added relay servers
*/
public static function addRelayServerInboxesForItem(int $item_id, array $inboxes = []): array
public static function addRelayServerInboxesForItem(int $item_id, array $inboxes = [])
{
$item = Post::selectFirst(['uid'], ['id' => $item_id]);
if (empty($item)) {

View file

@ -72,7 +72,7 @@ class DFRN
* @return array importer
* @throws \Exception
*/
public static function getImporter(int $cid, int $uid = 0): array
public static function getImporter($cid, $uid = 0)
{
$condition = ['id' => $cid, 'blocked' => false, 'pending' => false];
$contact = DBA::selectFirst('contact', [], $condition);
@ -115,7 +115,7 @@ class DFRN
* @throws \ImagickException
* @todo Find proper type-hints
*/
public static function entries(array $items, array $owner): string
public static function entries($items, $owner)
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
@ -152,7 +152,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function itemFeed(int $uri_id, int $uid, bool $conversation = false): string
public static function itemFeed(int $uri_id, int $uid, bool $conversation = false)
{
if ($conversation) {
$condition = ['parent-uri-id' => $uri_id];
@ -222,7 +222,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
public static function mail(array $mail, array $owner): string
public static function mail(array $mail, array $owner)
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
@ -259,7 +259,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
public static function fsuggest(array $item, array $owner): string
public static function fsuggest($item, $owner)
{
$doc = new DOMDocument('1.0', 'utf-8');
$doc->formatOutput = true;
@ -289,7 +289,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
public static function relocate(array $owner, int $uid): string
public static function relocate($owner, $uid)
{
/* get site pubkey. this could be a new installation with no site keys*/
@ -346,9 +346,9 @@ class DFRN
*
* @return object XML root object
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hint for returned type
* @todo Find proper type-hints
*/
private static function addHeader(DOMDocument $doc, array $owner, string $authorelement, string $alternatelink = '', bool $public = false)
private static function addHeader(DOMDocument $doc, $owner, $authorelement, $alternatelink = "", $public = false)
{
if ($alternatelink == "") {
@ -428,12 +428,8 @@ class DFRN
* viewer's timezone also, but first we are going to convert it from the birthday
* person's timezone to GMT - so the viewer may find the birthday starting at
* 6:00PM the day before, but that will correspond to midnight to the birthday person.
*
* @param int $uid User id
* @param string $tz Time zone string, like UTC
* @return string Formatted birthday string
*/
private static function determineNextBirthday(int $uid, string $tz): string
private static function determineNextBirthday($uid, $tz)
{
$birthday = '';
@ -471,7 +467,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
private static function addAuthor(DOMDocument $doc, array $owner, string $authorelement, bool $public)
private static function addAuthor(DOMDocument $doc, array $owner, $authorelement, $public)
{
// Should the profile be "unsearchable" in the net? Then add the "hide" element
$hide = DBA::exists('profile', ['uid' => $owner['uid'], 'net-publish' => false]);
@ -596,7 +592,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
private static function addEntryAuthor(DOMDocument $doc, string $element, string $contact_url, array $item)
private static function addEntryAuthor(DOMDocument $doc, $element, $contact_url, $item)
{
$author = $doc->createElement($element);
@ -641,7 +637,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find proper type-hints
*/
private static function createActivity(DOMDocument $doc, string $element, string $activity, int $uriid)
private static function createActivity(DOMDocument $doc, $element, $activity, $uriid)
{
if ($activity) {
$entry = $doc->createElement($element);
@ -707,7 +703,7 @@ class DFRN
* @return void XML attachment object
* @todo Find proper type-hints
*/
private static function getAttachment($doc, $root, array $item)
private static function getAttachment($doc, $root, $item)
{
foreach (Post\Media::getByURIId($item['uri-id'], [Post\Media::DOCUMENT, Post\Media::TORRENT, Post\Media::UNKNOWN]) as $attachment) {
$attributes = ['rel' => 'enclosure',
@ -741,7 +737,7 @@ class DFRN
* @throws \ImagickException
* @todo Find proper type-hints
*/
private static function entry(DOMDocument $doc, string $type, array $item, array $owner, bool $comment = false, int $cid = 0, bool $single = false)
private static function entry(DOMDocument $doc, $type, array $item, array $owner, $comment = false, $cid = 0, $single = false)
{
$mentioned = [];
@ -965,12 +961,13 @@ class DFRN
* @param array $owner Owner record
* @param array $contact Contact record of the receiver
* @param string $atom Content that will be transmitted
*
* @param bool $public_batch
* @return int Deliver status. Negative values mean an error.
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function transmit(array $owner, array $contact, string $atom, bool $public_batch = false)
public static function transmit($owner, $contact, $atom, $public_batch = false)
{
if (!$public_batch) {
if (empty($contact['addr'])) {
@ -1063,7 +1060,7 @@ class DFRN
* @throws \ImagickException
* @todo Find good type-hints for all parameter
*/
private static function fetchauthor(\DOMXPath $xpath, \DOMNode $context, array $importer, string $element, bool $onlyfetch, string $xml = ''): array
private static function fetchauthor(\DOMXPath $xpath, \DOMNode $context, $importer, $element, $onlyfetch, $xml = "")
{
$author = [];
$author["name"] = XML::getFirstNodeValue($xpath, $element."/atom:name/text()", $context);
@ -1283,7 +1280,7 @@ class DFRN
* @return string XML string
* @todo Find good type-hints for all parameter
*/
private static function transformActivity($xpath, $activity, string $element): string
private static function transformActivity($xpath, $activity, $element)
{
if (!is_object($activity)) {
return "";
@ -1338,7 +1335,7 @@ class DFRN
* @throws \Exception
* @todo Find good type-hints for all parameter
*/
private static function processMail($xpath, $mail, array $importer)
private static function processMail($xpath, $mail, $importer)
{
Logger::notice("Processing mails");
@ -1367,7 +1364,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo Find good type-hints for all parameter
*/
private static function processSuggestion($xpath, $suggestion, array $importer)
private static function processSuggestion($xpath, $suggestion, $importer)
{
Logger::notice('Processing suggestions');
@ -1386,7 +1383,7 @@ class DFRN
* @param integer $from_cid
* @return bool Was the adding successful?
*/
private static function addSuggestion(int $uid, int $cid, int $from_cid, string $note = ''): bool
private static function addSuggestion(int $uid, int $cid, int $from_cid, string $note = '')
{
$owner = User::getOwnerDataById($uid);
$contact = Contact::getById($cid);
@ -1443,7 +1440,7 @@ class DFRN
* @throws \ImagickException
* @todo Find good type-hints for all parameter
*/
private static function processRelocation($xpath, $relocation, array $importer): bool
private static function processRelocation($xpath, $relocation, $importer)
{
Logger::notice("Processing relocations");
@ -1513,7 +1510,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo set proper type-hints (array?)
*/
private static function updateContent(array $current, array $item, array $importer, int $entrytype)
private static function updateContent($current, $item, $importer, $entrytype)
{
$changed = false;
@ -1545,7 +1542,7 @@ class DFRN
* @throws \Exception
* @todo set proper type-hints (array?)
*/
private static function getEntryType(array $importer, array $item): int
private static function getEntryType($importer, $item)
{
if ($item["thr-parent"] != $item["uri"]) {
$community = false;
@ -1641,7 +1638,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @todo set proper type-hints (array?)
*/
private static function processVerbs(int $entrytype, array $importer, array &$item, bool &$is_like)
private static function processVerbs($entrytype, $importer, &$item, &$is_like)
{
Logger::info("Process verb ".$item["verb"]." and object-type ".$item["object-type"]." for entrytype ".$entrytype);
@ -1737,7 +1734,7 @@ class DFRN
* @return void
* @todo set proper type-hints
*/
private static function parseLinks($links, array &$item)
private static function parseLinks($links, &$item)
{
$rel = "";
$href = "";
@ -1775,7 +1772,7 @@ class DFRN
* @param array $imporer
* @return boolean Is the message wanted?
*/
private static function isSolicitedMessage(array $item, array $importer): bool
private static function isSolicitedMessage(array $item, array $importer)
{
if (DBA::exists('contact', ["`nurl` = ? AND `uid` != ? AND `rel` IN (?, ?)",
Strings::normaliseLink($item["author-link"]), 0, Contact::FRIEND, Contact::SHARING])) {
@ -1810,13 +1807,12 @@ class DFRN
* @param object $entry entry elements
* @param array $importer Record of the importer user mixed with contact of the content
* @param string $xml xml
* @param int $protocol Protocol
* @return void
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
* @todo Add type-hints
*/
private static function processEntry(array $header, $xpath, $entry, array $importer, string $xml, int $protocol)
private static function processEntry($header, $xpath, $entry, $importer, $xml, $protocol)
{
Logger::notice("Processing entries");
@ -2074,9 +2070,6 @@ class DFRN
}
}
// Need to initialize variable, otherwise E_NOTICE will happen
$is_like = false;
if (!self::processVerbs($entrytype, $importer, $item, $is_like)) {
Logger::info("Exiting because 'processVerbs' told us so");
return;
@ -2170,7 +2163,7 @@ class DFRN
* @throws \Exception
* @todo set proper type-hints
*/
private static function processDeletion($xpath, $deletion, array $importer)
private static function processDeletion($xpath, $deletion, $importer)
{
Logger::notice("Processing deletions");
$uri = null;
@ -2231,8 +2224,9 @@ class DFRN
* @return integer Import status
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
* @todo set proper type-hints
*/
public static function import(string $xml, array $importer, int $protocol, int $direction): int
public static function import($xml, $importer, $protocol, $direction)
{
if ($xml == "") {
return 400;
@ -2371,7 +2365,7 @@ class DFRN
*
* @return string activity verb
*/
private static function constructVerb(array $item): string
private static function constructVerb(array $item)
{
if ($item['verb']) {
return $item['verb'];
@ -2379,8 +2373,7 @@ class DFRN
return Activity::POST;
}
// @TODO Documentation missing
private static function tgroupCheck(int $uid, array $item): bool
private static function tgroupCheck($uid, $item)
{
$mention = false;
@ -2428,12 +2421,12 @@ class DFRN
* item is assumed to be up-to-date. If the timestamps are equal it
* assumes the update has been seen before and should be ignored.
*
* @param array $existing
* @param array $update
* @param $existing
* @param $update
* @return bool
* @throws \Exception
*/
private static function isEditedTimestampNewer(array $existing, array $update): bool
private static function isEditedTimestampNewer($existing, $update)
{
if (empty($existing['edited'])) {
return true;
@ -2456,7 +2449,7 @@ class DFRN
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
public static function isSupportedByContactUrl(string $url): bool
public static function isSupportedByContactUrl($url)
{
$probe = Probe::uri($url, Protocol::DFRN);
return $probe['network'] == Protocol::DFRN;

File diff suppressed because it is too large Load diff

View file

@ -164,7 +164,7 @@ abstract class MailBuilder
*
* @return string[][]
*/
public function getHeaders(): array
public function getHeaders()
{
return $this->headers;
}
@ -182,7 +182,7 @@ abstract class MailBuilder
* @param string[][] $headers
* @return $this
*/
public function withHeaders(array $headers): MailBuilder
public function withHeaders(array $headers)
{
$this->headers = $headers;

View file

@ -55,7 +55,7 @@ class HTTPSignature
* @return array with verification data
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function verifyMagic(string $key): array
public static function verifyMagic($key)
{
$headers = null;
$spoofable = false;
@ -139,7 +139,7 @@ class HTTPSignature
*
* @return array
*/
public static function createSig(array $head, string $prvkey, string $keyid = 'Key'): array
public static function createSig($head, $prvkey, $keyid = 'Key')
{
$return_headers = [];
if (!empty($head)) {
@ -166,7 +166,7 @@ class HTTPSignature
*
* @return array
*/
private static function sign(array $head, string $prvkey, string $alg = 'sha256'): array
private static function sign($head, $prvkey, $alg = 'sha256')
{
$ret = [];
$headers = '';
@ -204,7 +204,7 @@ class HTTPSignature
* - \e string \b signature
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function parseSigheader(string $header): array
public static function parseSigheader($header)
{
// Remove obsolete folds
$header = preg_replace('/\n\s+/', ' ', $header);
@ -251,7 +251,7 @@ class HTTPSignature
* @return string Decrypted signature string
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
private static function decryptSigheader(array $headers, string $prvkey): string
private static function decryptSigheader(array $headers, string $prvkey)
{
if (!empty($headers['iv']) && !empty($headers['key']) && !empty($headers['data'])) {
return Crypto::unencapsulate($headers, $prvkey);
@ -341,7 +341,7 @@ class HTTPSignature
* @param boolean $success Transmission status
* @param boolean $shared The inbox is a shared inbox
*/
static public function setInboxStatus(string $url, bool $success, bool $shared = false)
static public function setInboxStatus($url, $success, $shared = false)
{
$now = DateTimeFormat::utcNow();
@ -403,21 +403,21 @@ class HTTPSignature
* @return array JSON array
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetch(string $request, int $uid): array
public static function fetch($request, $uid)
{
$curlResult = self::fetchRaw($request, $uid);
if (empty($curlResult)) {
return [];
return false;
}
if (!$curlResult->isSuccess() || empty($curlResult->getBody())) {
return [];
return false;
}
$content = json_decode($curlResult->getBody(), true);
if (empty($content) || !is_array($content)) {
return [];
return false;
}
return $content;
@ -438,7 +438,7 @@ class HTTPSignature
* @return \Friendica\Network\HTTPClient\Capability\ICanHandleHttpResponses CurlResult
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function fetchRaw(string $request, int $uid = 0, array $opts = [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::JSON_AS]])
public static function fetchRaw($request, $uid = 0, $opts = [HttpClientOptions::ACCEPT_CONTENT => [HttpClientAccept::JSON_AS]])
{
$header = [];
@ -488,13 +488,13 @@ class HTTPSignature
/**
* Gets a signer from a given HTTP request
*
* @param string $content
* @param array $http_headers
* @param $content
* @param $http_headers
*
* @return string|null|false Signer
* @return string Signer
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function getSigner(string $content, array $http_headers)
public static function getSigner($content, $http_headers)
{
if (empty($http_headers['HTTP_SIGNATURE'])) {
Logger::debug('No HTTP_SIGNATURE header');
@ -686,13 +686,13 @@ class HTTPSignature
/**
* fetches a key for a given id and actor
*
* @param string $id
* @param string $actor
* @param $id
* @param $actor
*
* @return array with actor url and public key
* @throws \Exception
*/
private static function fetchKey(string $id, string $actor): array
private static function fetchKey($id, $actor)
{
$url = (strpos($id, '#') ? substr($id, 0, strpos($id, '#')) : $id);
@ -709,6 +709,6 @@ class HTTPSignature
}
Logger::notice('Key could not be fetched', ['url' => $url, 'actor' => $actor]);
return [];
return false;
}
}

View file

@ -29,7 +29,7 @@ class Mimetype
* @param string $filename filename
* @return mixed array or string
*/
public static function getContentType(string $filename)
public static function getContentType($filename)
{
$mime_types = [

View file

@ -59,7 +59,7 @@ class ParseUrl
* @param string $accept content-type to accept
* @return array content type
*/
public static function getContentType(string $url, string $accept = HttpClientAccept::DEFAULT): array
public static function getContentType(string $url, string $accept = HttpClientAccept::DEFAULT)
{
$curlResult = DI::httpClient()->head($url, [HttpClientOptions::ACCEPT_CONTENT => $accept]);

View file

@ -165,7 +165,7 @@ class Strings
* @return string Formatted network name
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function formatNetworkName(string $network, string $url = ''): string
public static function formatNetworkName($network, $url = '')
{
if ($network != '') {
if ($url != '') {
@ -176,8 +176,6 @@ class Strings
return $network_name;
}
return '';
}
/**
@ -189,7 +187,7 @@ class Strings
*
* @return string Transformed string.
*/
public static function deindent(string $text, string $chr = "[\t ]", int $count = null)
public static function deindent($text, $chr = "[\t ]", $count = NULL)
{
$lines = explode("\n", $text);

View file

@ -269,7 +269,7 @@ class Delivery
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function deliverDFRN(string $cmd, array $contact, array $owner, array $items, array $target_item, bool $public_message, bool $top_level, bool $followup, int $server_protocol)
private static function deliverDFRN($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup, $server_protocol)
{
// Transmit Diaspora reshares via Diaspora if the Friendica contact support Diaspora
if (Diaspora::isReshare($target_item['body'] ?? '') && !empty(FContact::getByURL($contact['addr'], false))) {
@ -384,7 +384,7 @@ class Delivery
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function deliverDiaspora(string $cmd, array $contact, array $owner, array $items, array $target_item, bool $public_message, bool $top_level, bool $followup)
private static function deliverDiaspora($cmd, $contact, $owner, $items, $target_item, $public_message, $top_level, $followup)
{
// We don't treat Forum posts as "wall-to-wall" to be able to post them via Diaspora
$walltowall = $top_level && ($owner['id'] != $items[0]['contact-id']) & ($owner['account-type'] != Model\User::ACCOUNT_TYPE_COMMUNITY);
@ -478,7 +478,7 @@ class Delivery
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
* @throws \ImagickException
*/
private static function deliverMail(string $cmd, array $contact, array $owner, array $target_item, array $thr_parent)
private static function deliverMail($cmd, $contact, $owner, $target_item, $thr_parent)
{
if (DI::config()->get('system','imap_disabled')) {
return;

View file

@ -34,7 +34,7 @@ use Friendica\Network\HTTPClient\Client\HttpClientAccept;
*/
class Directory
{
public static function execute(string $url = '')
public static function execute($url = '')
{
$dir = Search::getGlobalDirectory();

View file

@ -30,9 +30,9 @@ class MergeContact
/**
* Replace all occurences of the given contact id and replace it
*
* @param integer $new_cid New contact id
* @param integer $old_cid Old contact id
* @param integer $uid User id
* @param integer $new_cid
* @param integer $old_cid
* @param integer $uid
*/
public static function execute(int $new_cid, int $old_cid, int $uid)
{

View file

@ -55,7 +55,7 @@
use Friendica\Database\DBA;
if (!defined('DB_UPDATE_VERSION')) {
define('DB_UPDATE_VERSION', 1470);
define('DB_UPDATE_VERSION', 1469);
}
return [
@ -1252,12 +1252,12 @@ return [
"fields" => [
"id" => ["type" => "int unsigned", "not null" => "1", "extra" => "auto_increment", "primary" => "1", "comment" => "sequential ID"],
"uri-id" => ["type" => "int unsigned", "not null" => "1", "foreign" => ["item-uri" => "id"], "comment" => "Id of the item-uri table entry that contains the item uri"],
"url" => ["type" => "text", "not null" => "1", "comment" => "Media URL"],
"url" => ["type" => "varbinary(511)", "not null" => "1", "comment" => "Media URL"],
"type" => ["type" => "tinyint unsigned", "not null" => "1", "default" => "0", "comment" => "Media type"],
"mimetype" => ["type" => "varchar(60)", "comment" => ""],
"height" => ["type" => "smallint unsigned", "comment" => "Height of the media"],
"width" => ["type" => "smallint unsigned", "comment" => "Width of the media"],
"size" => ["type" => "mediumint unsigned", "comment" => "Media size"],
"size" => ["type" => "int unsigned", "comment" => "Media size"],
"preview" => ["type" => "varbinary(255)", "comment" => "Preview URL"],
"preview-height" => ["type" => "smallint unsigned", "comment" => "Height of the preview picture"],
"preview-width" => ["type" => "smallint unsigned", "comment" => "Width of the preview picture"],
@ -1272,7 +1272,7 @@ return [
],
"indexes" => [
"PRIMARY" => ["id"],
"uri-id-url" => ["UNIQUE", "uri-id", "url(512)"],
"uri-id-url" => ["UNIQUE", "uri-id", "url"],
"uri-id-id" => ["uri-id", "id"],
]
],

View file

@ -122,16 +122,6 @@ return [
// Cache avatar pictures as files (experimental)
'avatar_cache' => false,
// avatar_cache_path (String)
// File path to the avatar cache. Default is /(your basepath)/avatar/
// The value has to be an absolute path and has to end with a "/"
'avatar_cache_path' => '',
// avatar_cache_url (String)
// Base URL of the avatar cache. Default is http(s)://(your hostname)/avatar/
// The value has to start with the scheme and end with a "/"
'avatar_cache_url' => '',
// big_emojis (Boolean)
// Display "Emoji Only" posts in big.
'big_emojis' => false,

View file

@ -43,7 +43,7 @@ class AppDouble extends App
$this->isLoggedIn = $isLoggedIn;
}
public function isLoggedIn(): bool
public function isLoggedIn()
{
return $this->isLoggedIn;
}

View file

@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: 2022.09-dev\n"
"Project-Id-Version: 2022.06\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-06-13 05:45+0000\n"
"POT-Creation-Date: 2022-06-06 07:33+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -37,7 +37,7 @@ msgstr ""
msgid "User not found."
msgstr ""
#: mod/cal.php:122 mod/display.php:262 src/Module/Profile/Profile.php:94
#: mod/cal.php:122 mod/display.php:247 src/Module/Profile/Profile.php:94
#: src/Module/Profile/Profile.php:109 src/Module/Profile/Status.php:110
#: src/Module/Update/Profile.php:56
msgid "Access to this profile has been restricted."
@ -104,17 +104,17 @@ msgstr ""
msgid "calendar"
msgstr ""
#: mod/display.php:143 mod/photos.php:802
#: mod/display.php:142 mod/photos.php:802
#: src/Module/Conversation/Community.php:175 src/Module/Directory.php:49
#: src/Module/Search/Index.php:50
msgid "Public access denied."
msgstr ""
#: mod/display.php:213 mod/display.php:287
#: mod/display.php:198 mod/display.php:272
msgid "The requested item doesn't exist or has been deleted."
msgstr ""
#: mod/display.php:367
#: mod/display.php:352
msgid "The feed for this item is unavailable."
msgstr ""
@ -230,7 +230,7 @@ msgstr ""
#: mod/editpost.php:107 mod/message.php:200 mod/message.php:358
#: mod/photos.php:1489 mod/wallmessage.php:142 src/Content/Conversation.php:368
#: src/Content/Conversation.php:713 src/Module/Item/Compose.php:177
#: src/Content/Conversation.php:712 src/Module/Item/Compose.php:177
#: src/Object/Post.php:528
msgid "Please wait"
msgstr ""
@ -1077,11 +1077,11 @@ msgstr ""
msgid "Comment"
msgstr ""
#: mod/photos.php:1424 src/Content/Conversation.php:629 src/Object/Post.php:247
#: mod/photos.php:1424 src/Content/Conversation.php:628 src/Object/Post.php:247
msgid "Select"
msgstr ""
#: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:630
#: mod/photos.php:1425 mod/settings.php:350 src/Content/Conversation.php:629
#: src/Module/Admin/Users/Active.php:139 src/Module/Admin/Users/Blocked.php:140
#: src/Module/Admin/Users/Index.php:153
msgid "Delete"
@ -1942,7 +1942,7 @@ msgid "%s attends maybe."
msgstr ""
#: src/Content/Conversation.php:222 src/Content/Conversation.php:260
#: src/Content/Conversation.php:873
#: src/Content/Conversation.php:872
#, php-format
msgid "%s reshared this."
msgstr ""
@ -2061,92 +2061,92 @@ msgstr ""
msgid "Scheduled at"
msgstr ""
#: src/Content/Conversation.php:657 src/Object/Post.php:235
#: src/Content/Conversation.php:656 src/Object/Post.php:235
msgid "Pinned item"
msgstr ""
#: src/Content/Conversation.php:673 src/Object/Post.php:476
#: src/Content/Conversation.php:672 src/Object/Post.php:476
#: src/Object/Post.php:477
#, php-format
msgid "View %s's profile @ %s"
msgstr ""
#: src/Content/Conversation.php:686 src/Object/Post.php:464
#: src/Content/Conversation.php:685 src/Object/Post.php:464
msgid "Categories:"
msgstr ""
#: src/Content/Conversation.php:687 src/Object/Post.php:465
#: src/Content/Conversation.php:686 src/Object/Post.php:465
msgid "Filed under:"
msgstr ""
#: src/Content/Conversation.php:695 src/Object/Post.php:490
#: src/Content/Conversation.php:694 src/Object/Post.php:490
#, php-format
msgid "%s from %s"
msgstr ""
#: src/Content/Conversation.php:711
#: src/Content/Conversation.php:710
msgid "View in context"
msgstr ""
#: src/Content/Conversation.php:776
#: src/Content/Conversation.php:775
msgid "remove"
msgstr ""
#: src/Content/Conversation.php:780
#: src/Content/Conversation.php:779
msgid "Delete Selected Items"
msgstr ""
#: src/Content/Conversation.php:845 src/Content/Conversation.php:848
#: src/Content/Conversation.php:851 src/Content/Conversation.php:854
#: src/Content/Conversation.php:844 src/Content/Conversation.php:847
#: src/Content/Conversation.php:850 src/Content/Conversation.php:853
#, php-format
msgid "You had been addressed (%s)."
msgstr ""
#: src/Content/Conversation.php:857
#: src/Content/Conversation.php:856
#, php-format
msgid "You are following %s."
msgstr ""
#: src/Content/Conversation.php:860
#: src/Content/Conversation.php:859
msgid "Tagged"
msgstr ""
#: src/Content/Conversation.php:875
#: src/Content/Conversation.php:874
msgid "Reshared"
msgstr ""
#: src/Content/Conversation.php:875
#: src/Content/Conversation.php:874
#, php-format
msgid "Reshared by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:878
#: src/Content/Conversation.php:877
#, php-format
msgid "%s is participating in this thread."
msgstr ""
#: src/Content/Conversation.php:881
#: src/Content/Conversation.php:880
msgid "Stored"
msgstr ""
#: src/Content/Conversation.php:884
#: src/Content/Conversation.php:883
msgid "Global"
msgstr ""
#: src/Content/Conversation.php:887
#: src/Content/Conversation.php:886
msgid "Relayed"
msgstr ""
#: src/Content/Conversation.php:887
#: src/Content/Conversation.php:886
#, php-format
msgid "Relayed by %s <%s>"
msgstr ""
#: src/Content/Conversation.php:890
#: src/Content/Conversation.php:889
msgid "Fetched"
msgstr ""
#: src/Content/Conversation.php:890
#: src/Content/Conversation.php:889
#, php-format
msgid "Fetched because of %s <%s>"
msgstr ""
@ -3625,63 +3625,63 @@ msgstr ""
msgid "Forum"
msgstr ""
#: src/Model/Contact.php:2550
#: src/Model/Contact.php:2517
msgid "Disallowed profile URL."
msgstr ""
#: src/Model/Contact.php:2555 src/Module/Friendica.php:81
#: src/Model/Contact.php:2522 src/Module/Friendica.php:81
msgid "Blocked domain"
msgstr ""
#: src/Model/Contact.php:2560
#: src/Model/Contact.php:2527
msgid "Connect URL missing."
msgstr ""
#: src/Model/Contact.php:2569
#: src/Model/Contact.php:2536
msgid ""
"The contact could not be added. Please check the relevant network "
"credentials in your Settings -> Social Networks page."
msgstr ""
#: src/Model/Contact.php:2611
#: src/Model/Contact.php:2578
msgid "The profile address specified does not provide adequate information."
msgstr ""
#: src/Model/Contact.php:2613
#: src/Model/Contact.php:2580
msgid "No compatible communication protocols or feeds were discovered."
msgstr ""
#: src/Model/Contact.php:2616
#: src/Model/Contact.php:2583
msgid "An author or name was not found."
msgstr ""
#: src/Model/Contact.php:2619
#: src/Model/Contact.php:2586
msgid "No browser URL could be matched to this address."
msgstr ""
#: src/Model/Contact.php:2622
#: src/Model/Contact.php:2589
msgid ""
"Unable to match @-style Identity Address with a known protocol or email "
"contact."
msgstr ""
#: src/Model/Contact.php:2623
#: src/Model/Contact.php:2590
msgid "Use mailto: in front of address to force email check."
msgstr ""
#: src/Model/Contact.php:2629
#: src/Model/Contact.php:2596
msgid ""
"The profile address specified belongs to a network which has been disabled "
"on this site."
msgstr ""
#: src/Model/Contact.php:2634
#: src/Model/Contact.php:2601
msgid ""
"Limited profile. This person will be unable to receive direct/personal "
"notifications from you."
msgstr ""
#: src/Model/Contact.php:2693
#: src/Model/Contact.php:2660
msgid "Unable to retrieve contact information."
msgstr ""

File diff suppressed because it is too large Load diff

View file

@ -301,6 +301,9 @@ $a->strings['Dislike'] = 'لم يعجبني';
$a->strings['I don\'t like this (toggle)'] = 'لم يعجبني (بدِّل)';
$a->strings['Map'] = 'خريطة';
$a->strings['View Album'] = 'اعرض الألبوم';
$a->strings['{0} wants to be your friend'] = '{0} يريد أن يكون صديقك';
$a->strings['{0} requested registration'] = '{0} طلبَ التسجيل';
$a->strings['{0} and %d others requested registration'] = '{0} و %d أخرون يطلبون التسجيل';
$a->strings['Bad Request.'] = 'طلب خاطئ.';
$a->strings['Contact not found.'] = 'لم يُعثر على المتراسل.';
$a->strings['[Friendica System Notify]'] = '[تنبيه نظام فرنديكا]';
@ -320,6 +323,19 @@ $a->strings['Error'] = [
5 => 'خطأٍ',
];
$a->strings['Failed to connect with email account using the settings provided.'] = 'فشل الاتصال بحساب البريد الإلكتروني باستخدام الإعدادات المقدمة.';
$a->strings['Contact CSV file upload error'] = 'خطأ أثناء رفع ملف CSV';
$a->strings['Importing Contacts done'] = 'أُستورد المتراسلون';
$a->strings['Relocate message has been send to your contacts'] = 'أُرسلت رسالة تنبيه بانتقالك إلى متراسليك';
$a->strings['Passwords do not match.'] = 'كلمتا المرور غير متطابقتين.';
$a->strings['Password update failed. Please try again.'] = 'فشل تحديث كلمة المرور. من فضلك أعد المحاولة.';
$a->strings['Password changed.'] = 'غُيّرت كلمة المرور.';
$a->strings['Password unchanged.'] = 'لم تُغير كلمة المرور.';
$a->strings['Please use a shorter name.'] = 'يرجى استخدام اسم أقصر.';
$a->strings['Name too short.'] = 'الاسم قصير جداً.';
$a->strings['Wrong Password.'] = 'كلمة المرور خاطئة.';
$a->strings['Invalid email.'] = 'البريد الإلكتروني غير صالح.';
$a->strings['Cannot change to that email.'] = 'لا يمكن التغيير إلى هذا البريد الإلكتروني.';
$a->strings['Settings were not updated.'] = 'لم تُحدث الإعدادات.';
$a->strings['Connected Apps'] = 'التطبيقات المتصلة';
$a->strings['Name'] = 'الاسم';
$a->strings['Home Page'] = 'الصفحة الرئيسية';
@ -366,6 +382,115 @@ $a->strings['Action after import:'] = 'الإجراء بعد الاستيراد:
$a->strings['Mark as seen'] = 'علّمه كمُشاهَد';
$a->strings['Move to folder'] = 'انقل إلى مجلد';
$a->strings['Move to folder:'] = 'انقل إلى المجلد:';
$a->strings['Unable to find your profile. Please contact your admin.'] = 'تعذر العثور على ملفك الشخصي. من فضلك اتصال بالمدير.';
$a->strings['Account Types'] = 'أنواع الحسابات';
$a->strings['Personal Page Subtypes'] = 'الأنواع الفرعية للصفحة الشخصية';
$a->strings['Community Forum Subtypes'] = 'الأنواع الفرعية للمنتدى المجتمعي';
$a->strings['Personal Page'] = 'صفحة شخصية';
$a->strings['Account for a personal profile.'] = 'حساب ملف شخصي خاص.';
$a->strings['Organisation Page'] = 'صفحة منظمة';
$a->strings['Account for an organisation that automatically approves contact requests as "Followers".'] = 'حساب المنظمة يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['News Page'] = 'صفحة إخبارية';
$a->strings['Account for a news reflector that automatically approves contact requests as "Followers".'] = 'حساب إخباري يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['Community Forum'] = 'منتدى مجتمعي';
$a->strings['Account for community discussions.'] = 'حساب مناقشات مجتمعية.';
$a->strings['Normal Account Page'] = 'صفحة حساب عادي';
$a->strings['Account for a regular personal profile that requires manual approval of "Friends" and "Followers".'] = 'حساب ملف شخصي عادي يتطلب الموافقة اليدوية على "الأصدقاء" و "المتابعين".';
$a->strings['Soapbox Page'] = 'صفحة سياسي';
$a->strings['Account for a public profile that automatically approves contact requests as "Followers".'] = 'حساب شخصي علني يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['Public Forum'] = 'منتدى عمومي';
$a->strings['Automatically approves all contact requests.'] = 'يوافق تلقائياً على جميع طلبات المراسلة.';
$a->strings['Automatic Friend Page'] = 'صفحة اشترك تلقائي';
$a->strings['Account for a popular profile that automatically approves contact requests as "Friends".'] = 'حساب ملف شخصي لمشهور يوافق تلقائياً على طلبات المراسلة كـ"أصدقاء".';
$a->strings['Private Forum [Experimental]'] = 'منتدى خاص [تجريبي]';
$a->strings['Requires manual approval of contact requests.'] = 'يتطلب الموافقة اليدوية على طلبات المراسلة.';
$a->strings['OpenID:'] = 'OpenID:';
$a->strings['(Optional) Allow this OpenID to login to this account.'] = '(اختياري) اسمح لمعرف OpenID بالولوج إلى هذا الحساب.';
$a->strings['Publish your profile in your local site directory?'] = 'أتريد نشر ملفك الشخصي في الدليل المحلي للموقع؟';
$a->strings['Your profile will be published in this node\'s <a href="%s">local directory</a>. Your profile details may be publicly visible depending on the system settings.'] = 'سينشر ملفك الشخصي في <a href="%s"> الدليل المحلي</a> لهذه العقدة. تعتمد خصوصية معلوماتك على إعدادات النظام.';
$a->strings['Your profile will also be published in the global friendica directories (e.g. <a href="%s">%s</a>).'] = 'سينشر ملفك الشخصي كذلك في الأدلة العالمية لفرَندِيكا (مثال <a href="%s">%s</a>).';
$a->strings['Your Identity Address is <strong>\'%s\'</strong> or \'%s\'.'] = 'عنوان معرفك هو <strong>\'%s\'</strong> أو \'%s\'.';
$a->strings['Account Settings'] = 'إعدادات الحساب';
$a->strings['Password Settings'] = 'إعدادات كلمة المرور';
$a->strings['New Password:'] = 'كلمة المرور الجديدة:';
$a->strings['Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces, accentuated letters and colon (:).'] = 'المحارف المسموح بها هي a-z، A-Z، 0-9 والأحرف الخاصة باستثناء المساحات، الأحرف المنبورة ونقطتي التفسير (:).';
$a->strings['Confirm:'] = 'التأكيد:';
$a->strings['Leave password fields blank unless changing'] = 'اترك حقول كلمة المرور فارغة ما لم ترد تغييرها';
$a->strings['Current Password:'] = 'كلمة المرور الحالية:';
$a->strings['Your current password to confirm the changes'] = 'اكتب كلمة المرور الحالية لتأكيد التغييرات';
$a->strings['Password:'] = 'كلمة المرور:';
$a->strings['Your current password to confirm the changes of the email address'] = 'اكتب كلمة المرور الحالية لتأكيد تغيير بريدك الإلكتروني';
$a->strings['Delete OpenID URL'] = 'احذف معرف OpenID';
$a->strings['Basic Settings'] = 'الإعدادات الأساسيّة';
$a->strings['Full Name:'] = 'الاسم الكامل:';
$a->strings['Email Address:'] = 'البريد الإلكتروني:';
$a->strings['Your Timezone:'] = 'المنطقة الزمنية:';
$a->strings['Your Language:'] = 'لغتك:';
$a->strings['Set the language we use to show you friendica interface and to send you emails'] = 'عيّن لغة واجهة فرَندِيكا ورسائل البريد الإلكتروني';
$a->strings['Default Post Location:'] = 'موقع النشر الافتراضي:';
$a->strings['Use Browser Location:'] = 'استخدم موقع المتصفح:';
$a->strings['Security and Privacy Settings'] = 'إعدادات الأمان والخصوصية';
$a->strings['Maximum Friend Requests/Day:'] = 'حدُ طلبات الصداقة لليوم الواحد:';
$a->strings['(to prevent spam abuse)'] = '(لمنع الرسائل المزعجة)';
$a->strings['Allow your profile to be searchable globally?'] = 'أتريد السماح لملفك الشخصي بالظهور في نتائج البحث العالمي؟';
$a->strings['Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.'] = 'فعّل هذا الإعداد إن أردت أن يُعثر عليك بسهولة. سيتمكن المستخدمون في المواقع البعيد من العثور عليك، وأيضا سيسمح بظهور ملفك الشخصي في محركات البحث.';
$a->strings['Hide your contact/friend list from viewers of your profile?'] = 'أتريد إخفاء قائمة المتراسلين/الأصدقاء عن متصفحي ملفك الشخصي؟';
$a->strings['A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.'] = 'عادة تُعرض قائمة المتراسلين على صفحة ملفك الشخصي. إن قمت بتفعيل هذا الخيار ستخفى القائمة.';
$a->strings['Hide your profile details from anonymous viewers?'] = 'اخف معلومات ملفك الشخص عن المتصفحين المجهولين؟';
$a->strings['Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.'] = 'سيرى الزوار المجهولون صورة ملفك الشخصي واسمك العلني ولقبك فقط. لكن ستبقى مشاركتك العامة وردودك متاحة عبر وسائل أخرى.';
$a->strings['Make public posts unlisted'] = 'لا تدرج المشاركات العلنية';
$a->strings['Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.'] = 'لن تظهر مشاركتك العلنية على صفحات المجتمع أو في نتائج البحث لهذا الموقع، ولن يتم إرسالها إلى خوادم الترحيل. غير أنها ستبقى تظهر في التغذيات العمومية للخوادم البعيدة.';
$a->strings['Make all posted pictures accessible'] = 'أتح كل الصور المنشورة';
$a->strings['This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can\'t handle permissions on pictures. Non public pictures still won\'t be visible for the public on your photo albums though.'] = 'يسمح هذا الخيار بالوصول للصورة المنشورة عبر رابط مباشر. هذا حل لمعظم الشبكات التي لا يمكنها التعامل مع الأذونات. صورك غير العلنية ستبقى مخفية.';
$a->strings['Allow friends to post to your profile page?'] = 'أتسمح لأصدقائك بالنشر في صفحة ملفك الشخصي؟';
$a->strings['Your contacts may write posts on your profile wall. These posts will be distributed to your contacts'] = 'يمكن للمتراسلين كتابة مشاركات على حائط ملفك الشخصي. ستكون هذه المشركات مرئية لكل المتراسلين';
$a->strings['Allow friends to tag your posts?'] = 'أتسمح لأصدقائك بوسم مشاركاتك؟';
$a->strings['Your contacts can add additional tags to your posts.'] = 'يمكن لأصدقائك إضافة وسوم لمشاركاتك.';
$a->strings['Permit unknown people to send you private mail?'] = 'أتسمح لأشخاص مجهولين بإرسال بريد خاص لك؟';
$a->strings['Friendica network users may send you private messages even if they are not in your contact list.'] = 'يمكن لمستخدمي شبكة فرَندِكا إرسال رسائل خاصة لك حتى إن لم يكونوا في قائمة المتراسلين.';
$a->strings['Maximum private messages per day from unknown people:'] = 'حد الرسائل اليومي المستلمة من مجهولين:';
$a->strings['Default Post Permissions'] = 'أذونات النشر الافتراضية';
$a->strings['Expiration settings'] = 'إعدادات انتهاء الصلاحية';
$a->strings['Automatically expire posts after this many days:'] = 'أنه صَلاحِيَة المشاركات تلقائياً بعد هذا العدد من الأيام:';
$a->strings['If empty, posts will not expire. Expired posts will be deleted'] = 'إذا كان فارغاً، لن تنتهي صلاحية المشاركات. وإلا بعد المهلة ستحذف المشاركات المنتهية صلاحيتها';
$a->strings['Expire posts'] = 'أنه صَلاحِيَة المشاركات';
$a->strings['When activated, posts and comments will be expired.'] = 'عند تفعيله، ستنهى صلاحية المشاركات والتعليقات.';
$a->strings['Expire personal notes'] = 'أنه صَلاحِيَة الملاحظات الشخصية';
$a->strings['When activated, the personal notes on your profile page will be expired.'] = 'عند تفعيله، ستنهى صلاحية الملاحظات الشخصية على صفحة ملفك الشخصي.';
$a->strings['Expire starred posts'] = 'أنتهي صلاحية المشاركات المفضلة';
$a->strings['Starring posts keeps them from being expired. That behaviour is overwritten by this setting.'] = 'تفضيل مشاركة تقيها من انتهاء الصلاحية. هذا السلوك يُتجاوز من خلال هذا الإعداد.';
$a->strings['Expire photos'] = 'أنه صَلاحِيَة الصور';
$a->strings['When activated, photos will be expired.'] = 'عند تفعيله، ستنهى صلاحية الصور.';
$a->strings['Only expire posts by others'] = 'أنه صَلاحِيَة مشاركات الآخرين فقط';
$a->strings['When activated, your own posts never expire. Then the settings above are only valid for posts you received.'] = 'عند تفعيله، لا نهاية لصلاحية مشاركاتك. ثم تكون الإعدادات أعلاه صالحة فقط للمشاركات التي استلمتها.';
$a->strings['Notification Settings'] = 'إعدادات التنبيهات';
$a->strings['Send a notification email when:'] = 'أرسل تنبيها للبريدي الإلكتروني عند:';
$a->strings['You receive an introduction'] = 'تلقي تقديم';
$a->strings['Your introductions are confirmed'] = 'أُكدت تقديماتك';
$a->strings['Someone writes on your profile wall'] = 'يكتب شخص ما على جدار ملفك الشخصي';
$a->strings['Someone writes a followup comment'] = 'شخص ما يعلق على ما نشرت';
$a->strings['You receive a private message'] = 'تلقي رسالة خاصة';
$a->strings['You receive a friend suggestion'] = 'تلقي اقتراح صداقة';
$a->strings['You are tagged in a post'] = 'ذُكرتَ في مشاركة';
$a->strings['Create a desktop notification when:'] = 'أنشئ تنبيه سطح المكتب عند:';
$a->strings['Someone liked your content'] = 'أُعجب شخص بمحتواك';
$a->strings['Someone shared your content'] = 'شارك شخص محتواك';
$a->strings['Activate desktop notifications'] = 'نشّط تنبيهات سطح المكتب';
$a->strings['Show desktop popup on new notifications'] = 'أظهر منبثقات للتنبيهات الجديدة';
$a->strings['Text-only notification emails'] = 'رسائل تنبيه نصية فقط';
$a->strings['Send text only notification emails, without the html part'] = 'أرسل بريد التنبيه كنص فقط، دون وسوم html';
$a->strings['Show detailled notifications'] = 'اعرض تنبيهات مفصلة';
$a->strings['Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed.'] = 'افتراضيًا ، يعرض أحدث تنبيه فقط لكل محادثة. عند تفعيله ستعرض جميع التنبيهات.';
$a->strings['Show notifications of ignored contacts'] = 'أظهر تنبيهات للمتراسلين المتجاهلين';
$a->strings['You don\'t see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not.'] = 'أنت لا ترى مشاركات المتراسلين المتجاهلين. لكن لا يزال بإمكانك رؤية تعليقاتهم. هذا الإعداد يتحكم إذا كنت ترغب في الاستمرار في تلقي تنبيهات سببها المتراسلون المتجاهلون.';
$a->strings['Advanced Account/Page Type Settings'] = 'الإعدادات المتقدمة للحساب/للصفحة';
$a->strings['Change the behaviour of this account for special situations'] = 'غيّر سلوك هذا الحساب للحالات الخاصة';
$a->strings['Import Contacts'] = 'استيراد متراسلين';
$a->strings['Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account.'] = 'ارفع ملف CSV معرفات المتراسلين لحسابك القديم، معرفات المتابَعين تكون في العمود الأول.';
$a->strings['Upload File'] = 'ارفع ملفًا';
$a->strings['Relocate'] = 'الانتقال';
$a->strings['If you have moved this profile from another server, and some of your contacts don\'t receive your updates, try pushing this button.'] = 'إذا كنت قد نقلت هذا الملف الشخصي من خادم آخر، وبعض المتراسلين لا يتلقون تحديثاتك، أنقر هذا الزر.';
$a->strings['Resend relocate message to contacts'] = 'أعد إرسال رسالة الانتقال للمتراسلين';
$a->strings['No suggestions available. If this is a new site, please try again in 24 hours.'] = 'لا توجد اقتراحات متاحة. إذا كان هذا الموقع جديد، من فضلك أعد المحاولة في غضون 24 ساعة.';
$a->strings['Friend Suggestions'] = 'اقتراحات الأصدقاء';
$a->strings['photo'] = 'صورة';
@ -426,8 +551,6 @@ $a->strings['Execute pending post updates.'] = 'نفذ التحديثات الم
$a->strings['All pending post updates are done.'] = 'تمت كل تحديثات المعلقة للمشاركة.';
$a->strings['Enter user nickname: '] = 'أدخل لقب المستخدم: ';
$a->strings['Enter new password: '] = 'أدخل كلمة مرور جديدة: ';
$a->strings['Password update failed. Please try again.'] = 'فشل تحديث كلمة المرور. من فضلك أعد المحاولة.';
$a->strings['Password changed.'] = 'غُيّرت كلمة المرور.';
$a->strings['Enter user name: '] = 'أدخل اسم المستخدم: ';
$a->strings['Enter user email address: '] = 'أدخل عنوان البريد الإلكتروني: ';
$a->strings['Enter a language (optional): '] = 'أدخل اللغة (اختياري): ';
@ -493,7 +616,6 @@ $a->strings['Share'] = 'شارك';
$a->strings['Image'] = 'صورة';
$a->strings['Video'] = 'فيديو';
$a->strings['Scheduled at'] = 'بُرمِج في';
$a->strings['Pinned item'] = 'عنصر مثبت';
$a->strings['View %s\'s profile @ %s'] = 'اعرض ملف %s الشخصي @ %s';
$a->strings['Categories:'] = 'الفئات:';
$a->strings['Filed under:'] = 'مصنف كـ:';
@ -666,7 +788,6 @@ $a->strings['Archives'] = 'الأرشيفات';
$a->strings['Persons'] = 'الأشخاص';
$a->strings['Organisations'] = 'المنظّمات';
$a->strings['News'] = 'الأخبار';
$a->strings['Account Types'] = 'أنواع الحسابات';
$a->strings['All'] = 'الكل';
$a->strings['Export'] = 'صدّر';
$a->strings['Export calendar as ical'] = 'صدّر الرزنامة كملف ical';
@ -1130,15 +1251,7 @@ $a->strings['Blocked'] = 'محجوب';
$a->strings['List of blocked users'] = 'قائمة المستخدمين المحجوبين';
$a->strings['Deleted'] = 'حُذف';
$a->strings['List of pending user deletions'] = 'قائمة الحذف المعلق للمستخدمين';
$a->strings['Normal Account Page'] = 'صفحة حساب عادي';
$a->strings['Soapbox Page'] = 'صفحة سياسي';
$a->strings['Public Forum'] = 'منتدى عمومي';
$a->strings['Automatic Friend Page'] = 'صفحة اشترك تلقائي';
$a->strings['Private Forum'] = 'منتدى خاص';
$a->strings['Personal Page'] = 'صفحة شخصية';
$a->strings['Organisation Page'] = 'صفحة منظمة';
$a->strings['News Page'] = 'صفحة إخبارية';
$a->strings['Community Forum'] = 'منتدى مجتمعي';
$a->strings['Relay'] = 'مُرحِل';
$a->strings['%s contact unblocked'] = [
0 => 'لم يُرفع الحجب عن مستخدم %s',
@ -1233,7 +1346,9 @@ $a->strings['Other'] = 'أخرى';
$a->strings['unknown'] = 'مجهول';
$a->strings['%s total systems'] = '%s نظام';
$a->strings['%s active users last month'] = '%s مستخدم نشط في آخر شهر';
$a->strings['%s active users last six month'] = '%s مستخدم نشط في آخر ستة أشهر';
$a->strings['%s registered users'] = '%s مستخدم مسجل';
$a->strings['%s local posts'] = '%s مشاركة محلية';
$a->strings['%s posts per user'] = '%s مشاركة لكل مستخدم';
$a->strings['%s users per system'] = '%s مستخدم لكل نظام';
$a->strings['This page offers you some numbers to the known part of the federated social network your Friendica node is part of. These numbers are not complete but only reflect the part of the network your node is aware of.'] = 'تقدم لك هذه الصفحة بعض الإحصائيات للجزء المعروف من الشبكة الاجتماعية الموحدة المتصلة بعقدتك. هذه الإحصائيات ليست كاملة ولكنها تتضمن المواقع المعروفة لعقدتك من الشبكة.';
@ -1290,6 +1405,8 @@ $a->strings['ID'] = 'المعرف';
$a->strings['Command'] = 'أمر';
$a->strings['Job Parameters'] = 'معطيات العملية';
$a->strings['Priority'] = 'الأولوية';
$a->strings['Can not parse base url. Must have at least <scheme>://<domain>'] = 'يتعذر تحليل الرابط الأساسي. يجب أن يكون <scheme>://<domain>';
$a->strings['Relocation started. Could take a while to complete.'] = 'بدأ النقل. قد يستغرق بعض الوقت.';
$a->strings['No special theme for mobile devices'] = 'لا توجد سمة مخصصة للهاتف';
$a->strings['%s - (Experimental)'] = '%s - (اختباري)';
$a->strings['No community page for local users'] = 'لا توجد صفحة مجتمع للمستخدمين المحليين';
@ -1320,6 +1437,8 @@ $a->strings['Worker'] = 'مهمة';
$a->strings['Message Relay'] = 'ترحيل الرسالة';
$a->strings['The system is not subscribed to any relays at the moment.'] = 'هذا الخادم ليس مشترك في أي مرحلات حاليًا.';
$a->strings['The system is currently subscribed to the following relays:'] = 'هذا الخادم مشترك حاليًا في المرحلات التالية:';
$a->strings['Relocate Instance'] = 'انقل المثيل';
$a->strings['<strong>Warning!</strong> Advanced function. Could make this server unreachable.'] = '<strong>تحذير!</strong> وظيفة متقدمة. يمكن أن تجعل هذا الخادم غير قابل للوصول.';
$a->strings['Site name'] = 'اسم الموقع';
$a->strings['Sender Email'] = 'بريد المرسل';
$a->strings['The email address your server shall use to send notification emails from.'] = 'عنوان البريد الإلكتروني الذي سيستخدمه الخادم لإرسال رسائل التنبيه.';
@ -1335,6 +1454,7 @@ $a->strings['Additional Info'] = 'معلومات إضافية';
$a->strings['For public servers: you can add additional information here that will be listed at %s/servers.'] = 'للخوادم العامة: يمكنك إضافة معلومات إضافية لتدرج في %s/servers.';
$a->strings['System language'] = 'لغة النظام';
$a->strings['System theme'] = 'سمة النظام';
$a->strings['Default system theme - may be over-ridden by user profiles - <a href="/admin/themes" id="cnftheme">Change default theme settings</a>'] = 'مظهر الموقع الافتراضي يختلف بناءً على الملف الشخصي الذي تمت زيارته - <a href="/admin/themes" id="cnftheme"> غيّر إعدادات السمة الافتراضية</a>';
$a->strings['Mobile system theme'] = 'سمة الهاتف';
$a->strings['Theme for mobile devices'] = 'سمة للأجهزة المحمولة';
$a->strings['SSL link policy'] = 'سياسة روابط SSL';
@ -1435,6 +1555,7 @@ $a->strings['Temp path'] = 'مسار التخزين المؤقت';
$a->strings['If you have a restricted system where the webserver can\'t access the system temp path, enter another path here.'] = 'إذا كان نظامك مقيد حيث لا يستطيع خادم الويب الوصول إلى مسار مجلد التخزين المؤقت (temp)، أدخل مسار آخر هنا.';
$a->strings['Only search in tags'] = 'ابحث في الوسوم فقط';
$a->strings['On large systems the text search can slow down the system extremely.'] = 'في النّظم الكبيرة، يمكن أن يؤدي البحث عن النصوص إلى إبطاء النظام.';
$a->strings['New base url'] = 'رابط أساسي جديد';
$a->strings['Maximum number of parallel workers'] = 'الحد الأقصى لعدد المهام';
$a->strings['Can be "all" or "tags". "all" means that every public post should be received. "tags" means that only posts with selected tags should be received.'] = 'إما أن يكون "الكل" أو "الوسوم". يعني "الكل" وُجوب تلقي كل المشاركات العلنية. تعني "الوسوم" وجوب تلقي المشاركات ذات الوسوم المحددة فقط.';
$a->strings['Disabled'] = 'معطّل';
@ -1951,8 +2072,6 @@ $a->strings['System Notifications'] = 'تنبيهات النظام';
$a->strings['Personal Notifications'] = 'تنبيهات شخصية';
$a->strings['Home Notifications'] = 'تنبيهات الصفحة الرئيسية';
$a->strings['Show unread'] = 'اعرض غير المقروءة';
$a->strings['{0} requested registration'] = '{0} طلبَ التسجيل';
$a->strings['{0} and %d others requested registration'] = '{0} و %d أخرون يطلبون التسجيل';
$a->strings['Authorize application connection'] = 'خول لهذا التطبيق الاتصال';
$a->strings['Do you want to authorize this application to access your posts and contacts, and/or create new posts for you?'] = 'هل تخول لهذا التطبيق الوصول إلى مشاركاتك ومتراسليك، و/أو إنشاء مشاركات جديدة باسمك؟';
$a->strings['Unsupported or missing response type'] = 'نوع الاستجابة غير مدعومة أو مفقودة';
@ -1970,7 +2089,6 @@ $a->strings['Invalid photo with id %s.'] = 'الصورة ذات المعرف %s
$a->strings['No contacts.'] = 'لا متراسلين.';
$a->strings['Profile not found.'] = 'لم يُعثر على الملف الشخصي.';
$a->strings['You\'re currently viewing your profile as <b>%s</b> <a href="%s" class="btn btn-sm pull-right">Cancel</a>'] = 'أنت حاليا تستعرض ملفك الشخصي كـ <b>%s</b><a href="%s" class="btn btn-sm pull-right"> ألغ</a>';
$a->strings['Full Name:'] = 'الاسم الكامل:';
$a->strings['Member since:'] = 'عضو منذ:';
$a->strings['j F, Y'] = 'j F, Y';
$a->strings['j F'] = 'j F';
@ -2003,8 +2121,6 @@ $a->strings['Membership on this site is by invitation only.'] = 'العضوية
$a->strings['Your invitation code: '] = 'رمز الدعوة: ';
$a->strings['Your Full Name (e.g. Joe Smith, real or real-looking): '] = 'اسمك الكامل (على سبيل المثال جو سميث): ';
$a->strings['Please repeat your e-mail address:'] = 'رجاء أعد إدخال عنوان بريدك الإلكتروني:';
$a->strings['New Password:'] = 'كلمة المرور الجديدة:';
$a->strings['Confirm:'] = 'التأكيد:';
$a->strings['Choose a nickname: '] = 'اختر لقبًا: ';
$a->strings['Import your profile to this friendica instance'] = 'استورد ملفك الشخصي لهذا المثيل';
$a->strings['Parent Password:'] = 'كلمة المرور الولي:';
@ -2052,112 +2168,6 @@ $a->strings['<p>Open the two-factor authentication app on your device to get an
$a->strings['Please enter a code from your authentication app'] = 'يرجى إدخال رمز من تطبيق الاستيثاق';
$a->strings['This is my two-factor authenticator app device'] = 'هذا هو جهاز الذي استخدمه للاستيثاق بعاملين';
$a->strings['Verify code and complete login'] = 'تحقق من الرمز وأكمل الولوج';
$a->strings['Passwords do not match.'] = 'كلمتا المرور غير متطابقتين.';
$a->strings['Password unchanged.'] = 'لم تُغير كلمة المرور.';
$a->strings['Please use a shorter name.'] = 'يرجى استخدام اسم أقصر.';
$a->strings['Name too short.'] = 'الاسم قصير جداً.';
$a->strings['Wrong Password.'] = 'كلمة المرور خاطئة.';
$a->strings['Invalid email.'] = 'البريد الإلكتروني غير صالح.';
$a->strings['Cannot change to that email.'] = 'لا يمكن التغيير إلى هذا البريد الإلكتروني.';
$a->strings['Settings were not updated.'] = 'لم تُحدث الإعدادات.';
$a->strings['Contact CSV file upload error'] = 'خطأ أثناء رفع ملف CSV';
$a->strings['Importing Contacts done'] = 'أُستورد المتراسلون';
$a->strings['Relocate message has been send to your contacts'] = 'أُرسلت رسالة تنبيه بانتقالك إلى متراسليك';
$a->strings['Unable to find your profile. Please contact your admin.'] = 'تعذر العثور على ملفك الشخصي. من فضلك اتصال بالمدير.';
$a->strings['Personal Page Subtypes'] = 'الأنواع الفرعية للصفحة الشخصية';
$a->strings['Community Forum Subtypes'] = 'الأنواع الفرعية للمنتدى المجتمعي';
$a->strings['Account for a personal profile.'] = 'حساب ملف شخصي خاص.';
$a->strings['Account for an organisation that automatically approves contact requests as "Followers".'] = 'حساب المنظمة يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['Account for a news reflector that automatically approves contact requests as "Followers".'] = 'حساب إخباري يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['Account for community discussions.'] = 'حساب مناقشات مجتمعية.';
$a->strings['Account for a regular personal profile that requires manual approval of "Friends" and "Followers".'] = 'حساب ملف شخصي عادي يتطلب الموافقة اليدوية على "الأصدقاء" و "المتابعين".';
$a->strings['Account for a public profile that automatically approves contact requests as "Followers".'] = 'حساب شخصي علني يوافق تلقائياً على طلبات المراسلة "كمتابعين".';
$a->strings['Automatically approves all contact requests.'] = 'يوافق تلقائياً على جميع طلبات المراسلة.';
$a->strings['Account for a popular profile that automatically approves contact requests as "Friends".'] = 'حساب ملف شخصي لمشهور يوافق تلقائياً على طلبات المراسلة كـ"أصدقاء".';
$a->strings['Private Forum [Experimental]'] = 'منتدى خاص [تجريبي]';
$a->strings['Requires manual approval of contact requests.'] = 'يتطلب الموافقة اليدوية على طلبات المراسلة.';
$a->strings['OpenID:'] = 'OpenID:';
$a->strings['(Optional) Allow this OpenID to login to this account.'] = '(اختياري) اسمح لمعرف OpenID بالولوج إلى هذا الحساب.';
$a->strings['Publish your profile in your local site directory?'] = 'أتريد نشر ملفك الشخصي في الدليل المحلي للموقع؟';
$a->strings['Your profile will be published in this node\'s <a href="%s">local directory</a>. Your profile details may be publicly visible depending on the system settings.'] = 'سينشر ملفك الشخصي في <a href="%s"> الدليل المحلي</a> لهذه العقدة. تعتمد خصوصية معلوماتك على إعدادات النظام.';
$a->strings['Your profile will also be published in the global friendica directories (e.g. <a href="%s">%s</a>).'] = 'سينشر ملفك الشخصي كذلك في الأدلة العالمية لفرَندِيكا (مثال <a href="%s">%s</a>).';
$a->strings['Account Settings'] = 'إعدادات الحساب';
$a->strings['Your Identity Address is <strong>\'%s\'</strong> or \'%s\'.'] = 'عنوان معرفك هو <strong>\'%s\'</strong> أو \'%s\'.';
$a->strings['Password Settings'] = 'إعدادات كلمة المرور';
$a->strings['Allowed characters are a-z, A-Z, 0-9 and special characters except white spaces, accentuated letters and colon (:).'] = 'المحارف المسموح بها هي a-z، A-Z، 0-9 والأحرف الخاصة باستثناء المساحات، الأحرف المنبورة ونقطتي التفسير (:).';
$a->strings['Leave password fields blank unless changing'] = 'اترك حقول كلمة المرور فارغة ما لم ترد تغييرها';
$a->strings['Current Password:'] = 'كلمة المرور الحالية:';
$a->strings['Your current password to confirm the changes'] = 'اكتب كلمة المرور الحالية لتأكيد التغييرات';
$a->strings['Password:'] = 'كلمة المرور:';
$a->strings['Your current password to confirm the changes of the email address'] = 'اكتب كلمة المرور الحالية لتأكيد تغيير بريدك الإلكتروني';
$a->strings['Delete OpenID URL'] = 'احذف معرف OpenID';
$a->strings['Basic Settings'] = 'الإعدادات الأساسيّة';
$a->strings['Email Address:'] = 'البريد الإلكتروني:';
$a->strings['Your Timezone:'] = 'المنطقة الزمنية:';
$a->strings['Your Language:'] = 'لغتك:';
$a->strings['Set the language we use to show you friendica interface and to send you emails'] = 'عيّن لغة واجهة فرَندِيكا ورسائل البريد الإلكتروني';
$a->strings['Default Post Location:'] = 'موقع النشر الافتراضي:';
$a->strings['Use Browser Location:'] = 'استخدم موقع المتصفح:';
$a->strings['Security and Privacy Settings'] = 'إعدادات الأمان والخصوصية';
$a->strings['Maximum Friend Requests/Day:'] = 'حدُ طلبات الصداقة لليوم الواحد:';
$a->strings['(to prevent spam abuse)'] = '(لمنع الرسائل المزعجة)';
$a->strings['Allow your profile to be searchable globally?'] = 'أتريد السماح لملفك الشخصي بالظهور في نتائج البحث العالمي؟';
$a->strings['Activate this setting if you want others to easily find and follow you. Your profile will be searchable on remote systems. This setting also determines whether Friendica will inform search engines that your profile should be indexed or not.'] = 'فعّل هذا الإعداد إن أردت أن يُعثر عليك بسهولة. سيتمكن المستخدمون في المواقع البعيد من العثور عليك، وأيضا سيسمح بظهور ملفك الشخصي في محركات البحث.';
$a->strings['Hide your contact/friend list from viewers of your profile?'] = 'أتريد إخفاء قائمة المتراسلين/الأصدقاء عن متصفحي ملفك الشخصي؟';
$a->strings['A list of your contacts is displayed on your profile page. Activate this option to disable the display of your contact list.'] = 'عادة تُعرض قائمة المتراسلين على صفحة ملفك الشخصي. إن قمت بتفعيل هذا الخيار ستخفى القائمة.';
$a->strings['Hide your profile details from anonymous viewers?'] = 'اخف معلومات ملفك الشخص عن المتصفحين المجهولين؟';
$a->strings['Anonymous visitors will only see your profile picture, your display name and the nickname you are using on your profile page. Your public posts and replies will still be accessible by other means.'] = 'سيرى الزوار المجهولون صورة ملفك الشخصي واسمك العلني ولقبك فقط. لكن ستبقى مشاركتك العامة وردودك متاحة عبر وسائل أخرى.';
$a->strings['Make public posts unlisted'] = 'لا تدرج المشاركات العلنية';
$a->strings['Your public posts will not appear on the community pages or in search results, nor be sent to relay servers. However they can still appear on public feeds on remote servers.'] = 'لن تظهر مشاركتك العلنية على صفحات المجتمع أو في نتائج البحث لهذا الموقع، ولن يتم إرسالها إلى خوادم الترحيل. غير أنها ستبقى تظهر في التغذيات العمومية للخوادم البعيدة.';
$a->strings['Make all posted pictures accessible'] = 'أتح كل الصور المنشورة';
$a->strings['This option makes every posted picture accessible via the direct link. This is a workaround for the problem that most other networks can\'t handle permissions on pictures. Non public pictures still won\'t be visible for the public on your photo albums though.'] = 'يسمح هذا الخيار بالوصول للصورة المنشورة عبر رابط مباشر. هذا حل لمعظم الشبكات التي لا يمكنها التعامل مع الأذونات. صورك غير العلنية ستبقى مخفية.';
$a->strings['Allow friends to post to your profile page?'] = 'أتسمح لأصدقائك بالنشر في صفحة ملفك الشخصي؟';
$a->strings['Your contacts may write posts on your profile wall. These posts will be distributed to your contacts'] = 'يمكن للمتراسلين كتابة مشاركات على حائط ملفك الشخصي. ستكون هذه المشركات مرئية لكل المتراسلين';
$a->strings['Allow friends to tag your posts?'] = 'أتسمح لأصدقائك بوسم مشاركاتك؟';
$a->strings['Your contacts can add additional tags to your posts.'] = 'يمكن لأصدقائك إضافة وسوم لمشاركاتك.';
$a->strings['Permit unknown people to send you private mail?'] = 'أتسمح لأشخاص مجهولين بإرسال بريد خاص لك؟';
$a->strings['Friendica network users may send you private messages even if they are not in your contact list.'] = 'يمكن لمستخدمي شبكة فرَندِكا إرسال رسائل خاصة لك حتى إن لم يكونوا في قائمة المتراسلين.';
$a->strings['Maximum private messages per day from unknown people:'] = 'حد الرسائل اليومي المستلمة من مجهولين:';
$a->strings['Default Post Permissions'] = 'أذونات النشر الافتراضية';
$a->strings['Expiration settings'] = 'إعدادات انتهاء الصلاحية';
$a->strings['Automatically expire posts after this many days:'] = 'أنه صَلاحِيَة المشاركات تلقائياً بعد هذا العدد من الأيام:';
$a->strings['If empty, posts will not expire. Expired posts will be deleted'] = 'إذا كان فارغاً، لن تنتهي صلاحية المشاركات. وإلا بعد المهلة ستحذف المشاركات المنتهية صلاحيتها';
$a->strings['Expire posts'] = 'أنه صَلاحِيَة المشاركات';
$a->strings['When activated, posts and comments will be expired.'] = 'عند تفعيله، ستنهى صلاحية المشاركات والتعليقات.';
$a->strings['Expire personal notes'] = 'أنه صَلاحِيَة الملاحظات الشخصية';
$a->strings['When activated, the personal notes on your profile page will be expired.'] = 'عند تفعيله، ستنهى صلاحية الملاحظات الشخصية على صفحة ملفك الشخصي.';
$a->strings['Expire starred posts'] = 'أنتهي صلاحية المشاركات المفضلة';
$a->strings['Starring posts keeps them from being expired. That behaviour is overwritten by this setting.'] = 'تفضيل مشاركة تقيها من انتهاء الصلاحية. هذا السلوك يُتجاوز من خلال هذا الإعداد.';
$a->strings['Only expire posts by others'] = 'أنه صَلاحِيَة مشاركات الآخرين فقط';
$a->strings['When activated, your own posts never expire. Then the settings above are only valid for posts you received.'] = 'عند تفعيله، لا نهاية لصلاحية مشاركاتك. ثم تكون الإعدادات أعلاه صالحة فقط للمشاركات التي استلمتها.';
$a->strings['Notification Settings'] = 'إعدادات التنبيهات';
$a->strings['Send a notification email when:'] = 'أرسل تنبيها للبريدي الإلكتروني عند:';
$a->strings['You receive an introduction'] = 'تلقي تقديم';
$a->strings['Your introductions are confirmed'] = 'أُكدت تقديماتك';
$a->strings['Someone writes on your profile wall'] = 'يكتب شخص ما على جدار ملفك الشخصي';
$a->strings['Someone writes a followup comment'] = 'شخص ما يعلق على ما نشرت';
$a->strings['You receive a private message'] = 'تلقي رسالة خاصة';
$a->strings['You receive a friend suggestion'] = 'تلقي اقتراح صداقة';
$a->strings['You are tagged in a post'] = 'ذُكرتَ في مشاركة';
$a->strings['Create a desktop notification when:'] = 'أنشئ تنبيه سطح المكتب عند:';
$a->strings['Someone liked your content'] = 'أُعجب شخص بمحتواك';
$a->strings['Someone shared your content'] = 'شارك شخص محتواك';
$a->strings['Activate desktop notifications'] = 'نشّط تنبيهات سطح المكتب';
$a->strings['Show desktop popup on new notifications'] = 'أظهر منبثقات للتنبيهات الجديدة';
$a->strings['Text-only notification emails'] = 'رسائل تنبيه نصية فقط';
$a->strings['Send text only notification emails, without the html part'] = 'أرسل بريد التنبيه كنص فقط، دون وسوم html';
$a->strings['Show detailled notifications'] = 'اعرض تنبيهات مفصلة';
$a->strings['Per default, notifications are condensed to a single notification per item. When enabled every notification is displayed.'] = 'افتراضيًا ، يعرض أحدث تنبيه فقط لكل محادثة. عند تفعيله ستعرض جميع التنبيهات.';
$a->strings['Show notifications of ignored contacts'] = 'أظهر تنبيهات للمتراسلين المتجاهلين';
$a->strings['You don\'t see posts from ignored contacts. But you still see their comments. This setting controls if you want to still receive regular notifications that are caused by ignored contacts or not.'] = 'أنت لا ترى مشاركات المتراسلين المتجاهلين. لكن لا يزال بإمكانك رؤية تعليقاتهم. هذا الإعداد يتحكم إذا كنت ترغب في الاستمرار في تلقي تنبيهات سببها المتراسلون المتجاهلون.';
$a->strings['Advanced Account/Page Type Settings'] = 'الإعدادات المتقدمة للحساب/للصفحة';
$a->strings['Change the behaviour of this account for special situations'] = 'غيّر سلوك هذا الحساب للحالات الخاصة';
$a->strings['Import Contacts'] = 'استيراد متراسلين';
$a->strings['Upload a CSV file that contains the handle of your followed accounts in the first column you exported from the old account.'] = 'ارفع ملف CSV معرفات المتراسلين لحسابك القديم، معرفات المتابَعين تكون في العمود الأول.';
$a->strings['Upload File'] = 'ارفع ملفًا';
$a->strings['Relocate'] = 'الانتقال';
$a->strings['If you have moved this profile from another server, and some of your contacts don\'t receive your updates, try pushing this button.'] = 'إذا كنت قد نقلت هذا الملف الشخصي من خادم آخر، وبعض المتراسلين لا يتلقون تحديثاتك، أنقر هذا الزر.';
$a->strings['Resend relocate message to contacts'] = 'أعد إرسال رسالة الانتقال للمتراسلين';
$a->strings['Delegation successfully granted.'] = 'منح التفويض بنجاح.';
$a->strings['Parent user not found, unavailable or password doesn\'t match.'] = 'لم يُعثر على الولي أو هو غير متوفر أو كلمة مرور غير صحيحة.';
$a->strings['Delegation successfully revoked.'] = 'نجح إبطال التفويض.';
@ -2351,7 +2361,6 @@ $a->strings['Friendica respects your privacy. By default, your posts will only s
$a->strings['Getting Help'] = 'الحصول على مساعدة';
$a->strings['Go to the Help Section'] = 'انتقل إلى القسم المساعدة';
$a->strings['Our <strong>help</strong> pages may be consulted for detail on other program features and resources.'] = 'يمكنك الاطلاع على صفحات <strong>المساعدة</strong> للحصول على تفاصيل حول ميزات البرامج الأخرى ومصادرها.';
$a->strings['{0} wants to follow you'] = '{0} يريد متابعتك';
$a->strings['%s liked %s\'s post'] = 'أُعجب %s بمشاركة %s';
$a->strings['%s disliked %s\'s post'] = 'لم يُعجب %s بمشاركة %s';
$a->strings['%s is attending %s\'s event'] = 'يحضر %s حدث %s';
@ -2364,7 +2373,10 @@ $a->strings['Friend Suggestion'] = 'اقتراح صديق';
$a->strings['Friend/Connect Request'] = 'طلب صداقة/اقتران';
$a->strings['New Follower'] = 'متابِع جديد';
$a->strings['%1$s wants to follow you'] = '%1$s يريد متابعتك';
$a->strings['%1$s had started following you'] = '%1$s يتابعك';
$a->strings['%1$s liked your comment %2$s'] = 'أعجب %1$s بتعليقك %2$s';
$a->strings['%1$s liked your post %2$s'] = 'أعجب %1$s بمشاركتك %2$s';
$a->strings['%1$s disliked your comment %2$s'] = 'لم يعجب %1$s تعليقك %2$s';
$a->strings['%1$s disliked your post %2$s'] = 'لم يعجب %1$s مشاركتك %2$s';
$a->strings['%1$s shared your comment %2$s'] = 'شارك %1$s تعليقك %2$s';
$a->strings['%1$s shared your post %2$s'] = 'شارك %1$s مشاركتك %2$s';
@ -2440,6 +2452,7 @@ $a->strings['%s posted an update.'] = 'نشر %s تحديثاً.';
$a->strings['Private Message'] = 'رسالة خاصة';
$a->strings['This entry was edited'] = 'عدّل المدخل';
$a->strings['Edit'] = 'تعديل';
$a->strings['Pinned item'] = 'عنصر مثبت';
$a->strings['Delete globally'] = 'احذفه عالميًا';
$a->strings['Remove locally'] = 'أزله محليًا';
$a->strings['Block %s'] = 'احجب %s';

View file

@ -6604,7 +6604,7 @@ msgstr "Tester une adresse"
#: src/Module/BaseAdmin.php:115
msgid "check webfinger"
msgstr "Vérifier le webfinger"
msgstr "vérification de webfinger"
#: src/Module/BaseAdmin.php:117
msgid "Babel"

View file

@ -1679,7 +1679,7 @@ $a->strings['Server Blocklist'] = 'Serveurs bloqués';
$a->strings['Diagnostics'] = 'Diagnostics';
$a->strings['PHP Info'] = 'PHP Info';
$a->strings['probe address'] = 'Tester une adresse';
$a->strings['check webfinger'] = 'Vérifier le webfinger';
$a->strings['check webfinger'] = 'vérification de webfinger';
$a->strings['Babel'] = 'Babel';
$a->strings['ActivityPub Conversion'] = 'Conversion ActivityPub';
$a->strings['Addon Features'] = 'Fonctionnalités des addons';

View file

@ -9071,7 +9071,7 @@ msgstr "Valaki kedvelte az Ön tartalmát"
#: src/Module/Settings/Account.php:622 src/Module/Settings/Account.php:623
msgid "Can only be enabled, when the direct comment notification is enabled."
msgstr "Csak akkor engedélyezhető, ha a közvetlen hozzászólási értesítés engedélyezve van."
msgstr ""
#: src/Module/Settings/Account.php:623
msgid "Someone shared your content"
@ -9079,7 +9079,7 @@ msgstr "Valaki megosztotta az Ön tartalmát"
#: src/Module/Settings/Account.php:624
msgid "Someone commented in your thread"
msgstr "Valaki hozzászólt az Ön szálában"
msgstr ""
#: src/Module/Settings/Account.php:625
msgid "Someone commented in a thread where you commented"
@ -9087,7 +9087,7 @@ msgstr "Valaki hozzászólt egy olyan szálban, ahol Ön hozzászólt"
#: src/Module/Settings/Account.php:626
msgid "Someone commented in a thread where you interacted"
msgstr "Valaki hozzászólt egy olyan szálban, ahol Ön interakcióba került"
msgstr ""
#: src/Module/Settings/Account.php:628
msgid "Activate desktop notifications"

View file

@ -2263,11 +2263,8 @@ $a->strings['Create a desktop notification when:'] = 'Asztali értesítés létr
$a->strings['Someone tagged you'] = 'Valaki megjelölte Önt';
$a->strings['Someone directly commented on your post'] = 'Valaki közvetlenül hozzászólt a bejegyzéséhez';
$a->strings['Someone liked your content'] = 'Valaki kedvelte az Ön tartalmát';
$a->strings['Can only be enabled, when the direct comment notification is enabled.'] = 'Csak akkor engedélyezhető, ha a közvetlen hozzászólási értesítés engedélyezve van.';
$a->strings['Someone shared your content'] = 'Valaki megosztotta az Ön tartalmát';
$a->strings['Someone commented in your thread'] = 'Valaki hozzászólt az Ön szálában';
$a->strings['Someone commented in a thread where you commented'] = 'Valaki hozzászólt egy olyan szálban, ahol Ön hozzászólt';
$a->strings['Someone commented in a thread where you interacted'] = 'Valaki hozzászólt egy olyan szálban, ahol Ön interakcióba került';
$a->strings['Activate desktop notifications'] = 'Asztali értesítések bekapcsolása';
$a->strings['Show desktop popup on new notifications'] = 'Felugró üzenet megjelenítése az asztalon új értesítések esetén.';
$a->strings['Text-only notification emails'] = 'Csak szöveges értesítési e-mailek';

View file

Some files were not shown because too many files have changed in this diff Show more