Merge branch '2024.03-rc' into stable
This commit is contained in:
commit
4aa53beaea
|
@ -83,8 +83,9 @@ venv/
|
||||||
#Ignore temporary installed phpunit
|
#Ignore temporary installed phpunit
|
||||||
/bin/phpunit
|
/bin/phpunit
|
||||||
|
|
||||||
#Ignore cache file
|
#Ignore cache files
|
||||||
.php_cs.cache
|
.php_cs.cache
|
||||||
|
.php-cs-fixer.cache
|
||||||
|
|
||||||
#ignore avatar picture cache path
|
#ignore avatar picture cache path
|
||||||
/avatar
|
/avatar
|
||||||
|
|
|
@ -0,0 +1,93 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
$finder = PhpCsFixer\Finder::create()
|
||||||
|
->in(__DIR__)
|
||||||
|
->notPath('addon')
|
||||||
|
->notPath('bin/dev')
|
||||||
|
->notPath('config')
|
||||||
|
->notPath('doc')
|
||||||
|
->notPath('images')
|
||||||
|
->notPath('mods')
|
||||||
|
->notPath('spec')
|
||||||
|
->notPath('vendor')
|
||||||
|
->notPath('view/asset')
|
||||||
|
->notPath('lang')
|
||||||
|
->notPath('view/smarty3/compiled');
|
||||||
|
|
||||||
|
$config = new PhpCsFixer\Config();
|
||||||
|
return $config
|
||||||
|
->setRules([
|
||||||
|
'@PSR1' => true,
|
||||||
|
'@PSR2' => true,
|
||||||
|
'@PSR12' => true,
|
||||||
|
'align_multiline_comment' => true,
|
||||||
|
'array_indentation' => true,
|
||||||
|
'array_syntax' => [
|
||||||
|
'syntax' => 'short',
|
||||||
|
],
|
||||||
|
'binary_operator_spaces' => [
|
||||||
|
'default' => 'single_space',
|
||||||
|
'operators' => [
|
||||||
|
'=>' => 'align_single_space_minimal',
|
||||||
|
'=' => 'align_single_space_minimal',
|
||||||
|
'??' => 'align_single_space_minimal',
|
||||||
|
],
|
||||||
|
],
|
||||||
|
'blank_line_after_namespace' => true,
|
||||||
|
'braces' => [
|
||||||
|
'position_after_anonymous_constructs' => 'same',
|
||||||
|
'position_after_control_structures' => 'same',
|
||||||
|
'position_after_functions_and_oop_constructs' => 'next',
|
||||||
|
],
|
||||||
|
'elseif' => true,
|
||||||
|
'encoding' => true,
|
||||||
|
'full_opening_tag' => true,
|
||||||
|
'function_declaration' => [
|
||||||
|
'closure_function_spacing' => 'one',
|
||||||
|
],
|
||||||
|
'indentation_type' => true,
|
||||||
|
'line_ending' => true,
|
||||||
|
'list_syntax' => [
|
||||||
|
'syntax' => 'long',
|
||||||
|
],
|
||||||
|
'lowercase_keywords' => true,
|
||||||
|
'method_argument_space' => [],
|
||||||
|
'no_closing_tag' => true,
|
||||||
|
'no_spaces_after_function_name' => true,
|
||||||
|
'no_spaces_inside_parenthesis' => true,
|
||||||
|
'no_trailing_whitespace' => true,
|
||||||
|
'no_trailing_whitespace_in_comment' => true,
|
||||||
|
'no_unused_imports' => true,
|
||||||
|
'single_blank_line_at_eof' => true,
|
||||||
|
'single_class_element_per_statement' => true,
|
||||||
|
'single_import_per_statement' => true,
|
||||||
|
'single_line_after_imports' => true,
|
||||||
|
'switch_case_space' => true,
|
||||||
|
'ternary_operator_spaces' => false,
|
||||||
|
'visibility_required' => [
|
||||||
|
'elements' => ['property', 'method']
|
||||||
|
],
|
||||||
|
'new_with_braces' => true,
|
||||||
|
])
|
||||||
|
->setFinder($finder)
|
||||||
|
->setIndent("\t");
|
|
@ -6,6 +6,7 @@ require_once __DIR__ . '/bin/dev/php-cs-fixer/vendor/autoload.php';
|
||||||
|
|
||||||
$finder = PhpCsFixer\Finder::create()
|
$finder = PhpCsFixer\Finder::create()
|
||||||
->in(__DIR__)
|
->in(__DIR__)
|
||||||
|
->notPath('addon')
|
||||||
->notPath('bin/dev')
|
->notPath('bin/dev')
|
||||||
->notPath('config')
|
->notPath('config')
|
||||||
->notPath('doc')
|
->notPath('doc')
|
||||||
|
|
|
@ -39,7 +39,7 @@ steps:
|
||||||
branch: [ develop, '*-rc' ]
|
branch: [ develop, '*-rc' ]
|
||||||
event: push
|
event: push
|
||||||
composer_install:
|
composer_install:
|
||||||
image: friendicaci/php7.4:php7.4.33
|
image: friendicaci/php8.2:php8.2.16
|
||||||
commands:
|
commands:
|
||||||
- export COMPOSER_HOME=.composer
|
- export COMPOSER_HOME=.composer
|
||||||
- composer validate
|
- composer validate
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- PHP_MAJOR_VERSION: 7.4
|
- PHP_MAJOR_VERSION: 8.2
|
||||||
PHP_VERSION: 7.4.33
|
PHP_VERSION: 8.2.16
|
||||||
|
|
||||||
branches:
|
when:
|
||||||
|
- branch:
|
||||||
exclude: [ stable ]
|
exclude: [ stable ]
|
||||||
|
|
||||||
# This forces CI executions at the "opensocial" labeled location (because of much more power...)
|
# This forces CI executions at the "opensocial" labeled location (because of much more power...)
|
||||||
|
|
|
@ -8,5 +8,6 @@ steps:
|
||||||
commands:
|
commands:
|
||||||
- /check-messages.sh
|
- /check-messages.sh
|
||||||
|
|
||||||
branches:
|
when:
|
||||||
|
- branch:
|
||||||
exclude: [ stable ]
|
exclude: [ stable ]
|
||||||
|
|
|
@ -5,9 +5,11 @@ matrix:
|
||||||
- PHP_MAJOR_VERSION: 8.0
|
- PHP_MAJOR_VERSION: 8.0
|
||||||
PHP_VERSION: 8.0.30
|
PHP_VERSION: 8.0.30
|
||||||
- PHP_MAJOR_VERSION: 8.1
|
- PHP_MAJOR_VERSION: 8.1
|
||||||
PHP_VERSION: 8.1.23
|
PHP_VERSION: 8.1.27
|
||||||
- PHP_MAJOR_VERSION: 8.2
|
- PHP_MAJOR_VERSION: 8.2
|
||||||
PHP_VERSION: 8.2.11
|
PHP_VERSION: 8.2.16
|
||||||
|
- PHP_MAJOR_VERSION: 8.3
|
||||||
|
PHP_VERSION: 8.3.3
|
||||||
|
|
||||||
# This forces PHP Unit executions at the "opensocial" labeled location (because of much more power...)
|
# This forces PHP Unit executions at the "opensocial" labeled location (because of much more power...)
|
||||||
labels:
|
labels:
|
||||||
|
@ -16,7 +18,6 @@ labels:
|
||||||
steps:
|
steps:
|
||||||
php-lint:
|
php-lint:
|
||||||
image: php:${PHP_MAJOR_VERSION}
|
image: php:${PHP_MAJOR_VERSION}
|
||||||
group: lint
|
|
||||||
commands:
|
commands:
|
||||||
- find . -name \*.php -not -path './vendor/*' -not -path './view/asset/*' -print0 | xargs -0 -n1 php -l
|
- find . -name \*.php -not -path './vendor/*' -not -path './view/asset/*' -print0 | xargs -0 -n1 php -l
|
||||||
restore_cache:
|
restore_cache:
|
||||||
|
@ -64,7 +65,7 @@ steps:
|
||||||
- cp config/local-sample.config.php config/local.config.php
|
- cp config/local-sample.config.php config/local.config.php
|
||||||
- if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
|
- if ! bin/wait-for-connection $MYSQL_HOST $MYSQL_PORT 300; then echo "[ERROR] Waited 300 seconds, no response" >&2; exit 1; fi
|
||||||
- mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
|
- mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
|
||||||
- if [ "${PHP_MAJOR_VERSION}" = "7.4" -a "${CI_REPO}" = "friendica/friendica" ]; then
|
- if [ "${PHP_MAJOR_VERSION}" = "8.2" -a "${CI_REPO}" = "friendica/friendica" ]; then
|
||||||
phpenmod xdebug;
|
phpenmod xdebug;
|
||||||
export XDEBUG_MODE=coverage;
|
export XDEBUG_MODE=coverage;
|
||||||
phpunit --configuration tests/phpunit.xml -d memory_limit=-1 --coverage-clover clover.xml;
|
phpunit --configuration tests/phpunit.xml -d memory_limit=-1 --coverage-clover clover.xml;
|
||||||
|
@ -75,8 +76,8 @@ steps:
|
||||||
image: friendicaci/codecov
|
image: friendicaci/codecov
|
||||||
when:
|
when:
|
||||||
matrix:
|
matrix:
|
||||||
PHP_MAJOR_VERSION: 7.4
|
PHP_MAJOR_VERSION: 8.2
|
||||||
PHP_VERSION: 7.4.33
|
PHP_VERSION: 8.2.16
|
||||||
repo:
|
repo:
|
||||||
- friendica/friendica
|
- friendica/friendica
|
||||||
commands:
|
commands:
|
||||||
|
|
|
@ -37,7 +37,7 @@ steps:
|
||||||
branch: stable
|
branch: stable
|
||||||
event: tag
|
event: tag
|
||||||
composer_install:
|
composer_install:
|
||||||
image: friendicaci/php7.4:php7.4.33
|
image: friendicaci/php8.2:php8.2.16
|
||||||
commands:
|
commands:
|
||||||
- export COMPOSER_HOME=.composer
|
- export COMPOSER_HOME=.composer
|
||||||
- composer validate
|
- composer validate
|
||||||
|
|
62
CHANGELOG
62
CHANGELOG
|
@ -1,3 +1,65 @@
|
||||||
|
Version 2024.03 (2024-03-21)
|
||||||
|
Friendica Core
|
||||||
|
Updates to the translations AR, BG, CS, DE, EO, ES, FR, GD, HU, IS, IT, JA, PL, RO, RU, SV
|
||||||
|
Updates to the themes (frio, vier) [annando, foss-, haheute, MrPetovan, Raroun, toddy15]
|
||||||
|
Improved the channel feature [annando]
|
||||||
|
Improved the search performance [annando]
|
||||||
|
Improved spam detection [annando]
|
||||||
|
Improved the account overview on the moderation page [annando]
|
||||||
|
Improved account creation via CLI console [mexon]
|
||||||
|
Improved the Mastodon compatible API [annando, MrPetovan]
|
||||||
|
Improved logging of the system load value [annando]
|
||||||
|
Improved image handling [annando]
|
||||||
|
Improved detection of user activity [annando]
|
||||||
|
Improved display of embedded videos [annando]
|
||||||
|
Fixed an issue that could lead to empty URLs in the server block list [annando]
|
||||||
|
Fixed XSS attacks [leoOliver, MrPetovan, snajafov]
|
||||||
|
Fixed an issue when importing emails [annando]
|
||||||
|
Fixed an issue that blocked users could still use the API [annando]
|
||||||
|
Fixed an issue when fetching remote content [annando, arcanicanis]
|
||||||
|
Fixed an issue with unescaped HTML characters for RSS feeds [MrPetovan, r1pu5u]
|
||||||
|
Fixed an issue when showing the post preview [annando]
|
||||||
|
General code cleanup [annando, MrPetovan]
|
||||||
|
Updated the PasswordExposed usage [mexon]
|
||||||
|
Removed fpostit (Friendica post bookmarklet) [MrPetovan]
|
||||||
|
Removed the possibility for users to follow relays directly [annando]
|
||||||
|
Removed unused OEmbed functionality [annando]
|
||||||
|
Removed legacy schemes from frio theme [MrPetovan]
|
||||||
|
Added blur effect to sensitive images and user setting against it [annando]
|
||||||
|
Added account type Channel Relay [annando]
|
||||||
|
Added OCR generated image descriptions via tesseract addon [annando]
|
||||||
|
Added WebP and BMP support [annando]
|
||||||
|
Added blocked email addresses for registration [annando]
|
||||||
|
|
||||||
|
Friendica Addons
|
||||||
|
advancedcontentfilter
|
||||||
|
Updated dependency for PHP8.2 compatibility [MrPetovan]
|
||||||
|
blockbot
|
||||||
|
Fixed an issue preventing the creation of previews on remote systems [annando]
|
||||||
|
Updated block lists [annando]
|
||||||
|
bluesky
|
||||||
|
Overhaul of the Bluesky connector [annando]
|
||||||
|
Fixed problem with empty quoted shares [annando]
|
||||||
|
openstreetmap
|
||||||
|
Fix a config problem [haheute]
|
||||||
|
pnut:
|
||||||
|
Connector addon was added [spacenerdmo]
|
||||||
|
tesseract
|
||||||
|
Added the addon to generate image descriptions from images via OCR [annando]
|
||||||
|
tumblr
|
||||||
|
Improved handling of quoted shares [annando]
|
||||||
|
url_replace
|
||||||
|
Added addon to replace URLs from Twitter, Youtube and some others using 12ft.io [toddy15]
|
||||||
|
Fixed an issue with empty config vars [MrPetovan]
|
||||||
|
|
||||||
|
Closed Issues
|
||||||
|
903, 7732, 8768, 11142, 13220, 13293, 13765, 13768, 13809,
|
||||||
|
13814, 13814, 13818, 13819, 13822, 13823, 13828, 13837, 13839,
|
||||||
|
13844, 13845, 13859, 13863, 13873, 13877, 13886, 13887, 13897,
|
||||||
|
13899, 13905, 13909, 13922, 13925, 13930, 13939, 13940, 13946,
|
||||||
|
13947, 13949, 13950, 13953, 13955, 13959, 13968, 13969, 13972,
|
||||||
|
13984, 13985, 13986
|
||||||
|
|
||||||
Version 2023.12 (2023-12-24)
|
Version 2023.12 (2023-12-24)
|
||||||
Friendica Core
|
Friendica Core
|
||||||
Raised minimal PHP version to 7.4
|
Raised minimal PHP version to 7.4
|
||||||
|
|
|
@ -32,6 +32,7 @@ Anthronaut
|
||||||
Anton
|
Anton
|
||||||
Antron Samurai
|
Antron Samurai
|
||||||
Anubis2814
|
Anubis2814
|
||||||
|
arcanicanis
|
||||||
Arian - Cazare Muncitori
|
Arian - Cazare Muncitori
|
||||||
Asher Pen
|
Asher Pen
|
||||||
atjn
|
atjn
|
||||||
|
@ -136,6 +137,7 @@ gudzpoz
|
||||||
GunChleoc
|
GunChleoc
|
||||||
guzzisti
|
guzzisti
|
||||||
Haakon Meland Eriksen
|
Haakon Meland Eriksen
|
||||||
|
haheute
|
||||||
Hank Grabowski
|
Hank Grabowski
|
||||||
Hannes Heute
|
Hannes Heute
|
||||||
Hans Meine
|
Hans Meine
|
||||||
|
@ -147,6 +149,7 @@ hlad
|
||||||
hoergen
|
hoergen
|
||||||
Hubert Kościański
|
Hubert Kościański
|
||||||
Hypolite Petovan
|
Hypolite Petovan
|
||||||
|
ike
|
||||||
Ilmari
|
Ilmari
|
||||||
ImgBotApp
|
ImgBotApp
|
||||||
irhen
|
irhen
|
||||||
|
@ -222,6 +225,7 @@ Michal Šupler
|
||||||
Michalina
|
Michalina
|
||||||
Mike Macgirvin
|
Mike Macgirvin
|
||||||
miqrogroove
|
miqrogroove
|
||||||
|
Morgan McMillian
|
||||||
mpanhans
|
mpanhans
|
||||||
mytbk
|
mytbk
|
||||||
nathilia-peirce
|
nathilia-peirce
|
||||||
|
@ -255,8 +259,10 @@ Pierre Bernardeau
|
||||||
Pierre Rudloff
|
Pierre Rudloff
|
||||||
Piotr Blonkowski
|
Piotr Blonkowski
|
||||||
Piotr Strębski
|
Piotr Strębski
|
||||||
|
pixelroot
|
||||||
pokerazor
|
pokerazor
|
||||||
R C
|
R C
|
||||||
|
r1pu5u
|
||||||
Rabuzarus
|
Rabuzarus
|
||||||
Radek
|
Radek
|
||||||
Rafael Garau
|
Rafael Garau
|
||||||
|
@ -294,9 +300,11 @@ Senex Petrovic
|
||||||
Seth
|
Seth
|
||||||
SickShark X
|
SickShark X
|
||||||
Silke Meyer
|
Silke Meyer
|
||||||
|
Simon
|
||||||
Simon L'nu
|
Simon L'nu
|
||||||
Simon Rupf
|
Simon Rupf
|
||||||
Simó Albert i Beltran
|
Simó Albert i Beltran
|
||||||
|
snajafov
|
||||||
softmetz
|
softmetz
|
||||||
soko1
|
soko1
|
||||||
Spencer Dub
|
Spencer Dub
|
||||||
|
|
23
README.md
23
README.md
|
@ -3,27 +3,28 @@ Friendica - your open and free social network
|
||||||
|
|
||||||
Welcome to the free social web. Friendica is a platform for decentralised social communication linking to other independent social and corporate services.
|
Welcome to the free social web. Friendica is a platform for decentralised social communication linking to other independent social and corporate services.
|
||||||
|
|
||||||
Friendica connects you to a federated communications network of thousands of servers called the Fediverse. Through various protocols you can interact with anyone on [Friendica]( https://friendi.ca), [Mastodon](https://joinmastodon.org), [Lemmy](https://join-lemmy.org/), [Diaspora](https://diasporafoundation.org), [Misskey](https://join.misskey.page), [Peertube](https://joinpeertube.org/), [Pixelfed](https://pixelfed.org/), [Pleroma](https://pleroma.social) and many more. Receiving content from Tumblr, Wordpress and RSS is also possible. Friendica allows to import and mirror your content via add-ons such as ITTT and Buffer. You can customize and control how publicly or privately you want to share your content.
|
Friendica connects you to a federated communications network of thousands of servers called the Fediverse.
|
||||||
|
Through various protocols you can interact with anyone on [Friendica]( https://friendi.ca), [Mastodon](https://joinmastodon.org), [Lemmy](https://join-lemmy.org/), [Diaspora](https://diasporafoundation.org), [Misskey](https://join.misskey.page), [Peertube](https://joinpeertube.org/), [Pixelfed](https://pixelfed.org/), [Pleroma](https://pleroma.social) and many more.
|
||||||
|
Receiving content from Tumblr, WordPress and RSS is also possible.
|
||||||
|
Friendica allows to import and mirror your content via add-ons such as ITTT and Buffer.
|
||||||
|
You can control the privacy scope of your content.
|
||||||
|
|
||||||
Being part of the Fediverse allows you to be free from data-harvesting corporations. Enjoy open social communication, independent of any specific provider.
|
Being part of the Fediverse allows you to be free from data-harvesting corporations.
|
||||||
|
Enjoy open social communication, independent of any specific provider.
|
||||||
|
|
||||||
[Join Friendica](https://dir.friendica.social/servers) today or setup [your own Friendica instance](doc/Install.md).
|
[Join Friendica](https://dir.friendica.social/servers) today or set up [your own Friendica instance](doc/Install.md).
|
||||||
|
|
||||||
### Friendica on desktop
|
### Friendica on desktop
|
||||||
|
|
||||||
![Frio theme in desktop browser](images/screenshots/friendica-2023-10-frio-desktop.png?raw=true "Frio theme in desktop browser")
|
![Frio theme in desktop browser](images/screenshots/friendica-2023-12-frio-desktop.png?raw=true "Frio theme in desktop browser")
|
||||||
|
|
||||||
### Friendica on mobile
|
### Friendica on mobile
|
||||||
|
|
||||||
<p float="left">
|
<p float="left">
|
||||||
<img src ="https://github.com/friendica/friendica/blob/2023.09-rc/images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png" width="370" alt="frio on mobile, dark color scheme">
|
<img src="images/screenshots/friendica-2023-10-frio-mobile-timeline-dark-blue.png" width="370" alt="frio on mobile, dark color scheme">
|
||||||
<img src="https://github.com/friendica/friendica/blob/2023.09-rc/images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png" width="370" alt="frio on mobile, light color scheme">
|
<img src="images/screenshots/friendica-2023-10-frio-mobile-options-light-blue.png" width="370" alt="frio on mobile, light color scheme">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
### Alternative Theme "Vier"
|
|
||||||
|
|
||||||
![Vier theme in desktop browser](images/screenshots/friendica-vier-community.png?raw=true "Vier theme in desktop browser")
|
|
||||||
|
|
||||||
## Endorsements
|
## Endorsements
|
||||||
|
|
||||||
- [![Awesome Humane Tech](images/humane-tech-badge.svg)](https://codeberg.org/teaserbot-labs/delightful-humane-design) In August 2020 Friendica was added to the curated delightful humane design resources in the [Fediverse category](https://codeberg.org/teaserbot-labs/delightful-humane-design#fediverse).
|
- Friendica is listed on [![Awesome Humane Tech](images/humane-tech-badge.svg)](https://codeberg.org/teaserbot-labs/delightful-humane-design) in the [Fediverse category](https://codeberg.org/teaserbot-labs/delightful-humane-design#fediverse).
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/php
|
#!/usr/bin/php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env php
|
#!/usr/bin/env php
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -29,12 +29,12 @@
|
||||||
"ext-xml": "*",
|
"ext-xml": "*",
|
||||||
"asika/simple-console": "^1.0",
|
"asika/simple-console": "^1.0",
|
||||||
"bacon/bacon-qr-code": "^2.0.0",
|
"bacon/bacon-qr-code": "^2.0.0",
|
||||||
"divineomega/password_exposed": "^2.8",
|
"divineomega/password_exposed": "^3",
|
||||||
"enyo/dropzone": "^5.9",
|
"enyo/dropzone": "^5.9",
|
||||||
"ezyang/htmlpurifier": "^4.7",
|
"ezyang/htmlpurifier": "^4.7",
|
||||||
"friendica/json-ld": "^1.0",
|
"friendica/json-ld": "^1.0",
|
||||||
"geekwright/po": "^2.0",
|
"geekwright/po": "^2.0",
|
||||||
"guzzlehttp/guzzle": "^6.5",
|
"guzzlehttp/guzzle": "^7",
|
||||||
"guzzlehttp/oauth-subscriber": "^0.6",
|
"guzzlehttp/oauth-subscriber": "^0.6",
|
||||||
"kornrunner/blurhash": "^1.2",
|
"kornrunner/blurhash": "^1.2",
|
||||||
"league/html-to-markdown": "^4.8",
|
"league/html-to-markdown": "^4.8",
|
||||||
|
@ -135,7 +135,8 @@
|
||||||
"mockery/mockery": "^1.3",
|
"mockery/mockery": "^1.3",
|
||||||
"mikey179/vfsstream": "^1.6",
|
"mikey179/vfsstream": "^1.6",
|
||||||
"phpunit/phpunit": "^9",
|
"phpunit/phpunit": "^9",
|
||||||
"dms/phpunit-arraysubset-asserts": "^0.3.1"
|
"dms/phpunit-arraysubset-asserts": "^0.3.1",
|
||||||
|
"friendsofphp/php-cs-fixer": "^3.46"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "phpunit",
|
"test": "phpunit",
|
||||||
|
@ -149,6 +150,8 @@
|
||||||
"cs:fix": [
|
"cs:fix": [
|
||||||
"@cs:install",
|
"@cs:install",
|
||||||
"bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer fix"
|
"bin/dev/php-cs-fixer/vendor/bin/php-cs-fixer fix"
|
||||||
]
|
],
|
||||||
|
"cs:check-v3": "vendor/bin/php-cs-fixer check --diff",
|
||||||
|
"cs:fix-v3": "vendor/bin/php-cs-fixer fix"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
111
database.sql
111
database.sql
|
@ -1,6 +1,6 @@
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
-- Friendica 2023.12 (Yellow archangel)
|
-- Friendica 2024.03-rc (Yellow Archangel)
|
||||||
-- DB_UPDATE_VERSION 1542
|
-- DB_UPDATE_VERSION 1557
|
||||||
-- ------------------------------------------
|
-- ------------------------------------------
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,8 +73,6 @@ CREATE TABLE IF NOT EXISTS `user` (
|
||||||
`blockwall` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to post to the profile page of the user',
|
`blockwall` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to post to the profile page of the user',
|
||||||
`hidewall` boolean NOT NULL DEFAULT '0' COMMENT 'Hide profile details from unknown viewers',
|
`hidewall` boolean NOT NULL DEFAULT '0' COMMENT 'Hide profile details from unknown viewers',
|
||||||
`blocktags` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to tag the post of this user',
|
`blocktags` boolean NOT NULL DEFAULT '0' COMMENT 'Prohibit contacts to tag the post of this user',
|
||||||
`unkmail` boolean NOT NULL DEFAULT '0' COMMENT 'Permit unknown people to send private mails to this user',
|
|
||||||
`cntunkmail` int unsigned NOT NULL DEFAULT 10 COMMENT '',
|
|
||||||
`notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT 'email notification options',
|
`notify-flags` smallint unsigned NOT NULL DEFAULT 65535 COMMENT 'email notification options',
|
||||||
`page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'page/profile type',
|
`page-flags` tinyint unsigned NOT NULL DEFAULT 0 COMMENT 'page/profile type',
|
||||||
`account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
|
`account-type` tinyint unsigned NOT NULL DEFAULT 0 COMMENT '',
|
||||||
|
@ -504,8 +502,13 @@ CREATE TABLE IF NOT EXISTS `channel` (
|
||||||
`access-key` varchar(1) COMMENT 'Access key',
|
`access-key` varchar(1) COMMENT 'Access key',
|
||||||
`include-tags` varchar(1023) COMMENT 'Comma separated list of tags that will be included in the channel',
|
`include-tags` varchar(1023) COMMENT 'Comma separated list of tags that will be included in the channel',
|
||||||
`exclude-tags` varchar(1023) COMMENT 'Comma separated list of tags that aren\'t allowed in the channel',
|
`exclude-tags` varchar(1023) COMMENT 'Comma separated list of tags that aren\'t allowed in the channel',
|
||||||
|
`min-size` int unsigned COMMENT 'Minimum post size',
|
||||||
|
`max-size` int unsigned COMMENT 'Maximum post size',
|
||||||
`full-text-search` varchar(1023) COMMENT 'Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode',
|
`full-text-search` varchar(1023) COMMENT 'Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode',
|
||||||
`media-type` smallint unsigned COMMENT 'Filtered media types',
|
`media-type` smallint unsigned COMMENT 'Filtered media types',
|
||||||
|
`languages` mediumtext COMMENT 'Desired languages',
|
||||||
|
`publish` boolean COMMENT 'publish channel content',
|
||||||
|
`valid` boolean COMMENT 'Set, when the full-text-search is valid',
|
||||||
PRIMARY KEY(`id`),
|
PRIMARY KEY(`id`),
|
||||||
INDEX `uid` (`uid`),
|
INDEX `uid` (`uid`),
|
||||||
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
|
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
|
@ -536,6 +539,7 @@ CREATE TABLE IF NOT EXISTS `contact-relation` (
|
||||||
`relation-score` smallint unsigned COMMENT 'score for interactions of relation-cid on cid',
|
`relation-score` smallint unsigned COMMENT 'score for interactions of relation-cid on cid',
|
||||||
`thread-score` smallint unsigned COMMENT 'score for interactions of cid on threads of relation-cid',
|
`thread-score` smallint unsigned COMMENT 'score for interactions of cid on threads of relation-cid',
|
||||||
`relation-thread-score` smallint unsigned COMMENT 'score for interactions of relation-cid on threads of cid',
|
`relation-thread-score` smallint unsigned COMMENT 'score for interactions of relation-cid on threads of cid',
|
||||||
|
`post-score` smallint unsigned COMMENT 'score for the amount of posts from cid that can be seen by relation-cid',
|
||||||
PRIMARY KEY(`cid`,`relation-cid`),
|
PRIMARY KEY(`cid`,`relation-cid`),
|
||||||
INDEX `relation-cid` (`relation-cid`),
|
INDEX `relation-cid` (`relation-cid`),
|
||||||
FOREIGN KEY (`cid`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
FOREIGN KEY (`cid`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
||||||
|
@ -1236,6 +1240,23 @@ CREATE TABLE IF NOT EXISTS `post-category` (
|
||||||
FOREIGN KEY (`tid`) REFERENCES `tag` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
|
FOREIGN KEY (`tid`) REFERENCES `tag` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT
|
||||||
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='post relation to categories';
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='post relation to categories';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TABLE post-counts
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS `post-counts` (
|
||||||
|
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
|
||||||
|
`vid` smallint unsigned NOT NULL COMMENT 'Id of the verb table entry that contains the activity verbs',
|
||||||
|
`reaction` varchar(4) NOT NULL COMMENT 'Emoji Reaction',
|
||||||
|
`parent-uri-id` int unsigned COMMENT 'Id of the item-uri table that contains the parent uri',
|
||||||
|
`count` int unsigned DEFAULT 0 COMMENT 'Number of activities',
|
||||||
|
PRIMARY KEY(`uri-id`,`vid`,`reaction`),
|
||||||
|
INDEX `vid` (`vid`),
|
||||||
|
INDEX `parent-uri-id` (`parent-uri-id`),
|
||||||
|
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (`vid`) REFERENCES `verb` (`id`) ON UPDATE RESTRICT ON DELETE RESTRICT,
|
||||||
|
FOREIGN KEY (`parent-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Original remote activity';
|
||||||
|
|
||||||
--
|
--
|
||||||
-- TABLE post-collection
|
-- TABLE post-collection
|
||||||
--
|
--
|
||||||
|
@ -1263,6 +1284,7 @@ CREATE TABLE IF NOT EXISTS `post-content` (
|
||||||
`location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
|
`location` varchar(255) NOT NULL DEFAULT '' COMMENT 'text location where this item originated',
|
||||||
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
|
`coord` varchar(255) NOT NULL DEFAULT '' COMMENT 'longitude/latitude pair representing location where this item originated',
|
||||||
`language` text COMMENT 'Language information about this post',
|
`language` text COMMENT 'Language information about this post',
|
||||||
|
`sensitive` boolean COMMENT 'If true, this post contains sensitive content',
|
||||||
`app` varchar(255) NOT NULL DEFAULT '' COMMENT 'application which generated this item',
|
`app` varchar(255) NOT NULL DEFAULT '' COMMENT 'application which generated this item',
|
||||||
`rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '',
|
`rendered-hash` varchar(32) NOT NULL DEFAULT '' COMMENT '',
|
||||||
`rendered-html` mediumtext COMMENT 'item.body converted to html',
|
`rendered-html` mediumtext COMMENT 'item.body converted to html',
|
||||||
|
@ -1275,7 +1297,6 @@ CREATE TABLE IF NOT EXISTS `post-content` (
|
||||||
PRIMARY KEY(`uri-id`),
|
PRIMARY KEY(`uri-id`),
|
||||||
INDEX `plink` (`plink`(191)),
|
INDEX `plink` (`plink`(191)),
|
||||||
INDEX `resource-id` (`resource-id`),
|
INDEX `resource-id` (`resource-id`),
|
||||||
FULLTEXT INDEX `title-content-warning-body` (`title`,`content-warning`,`body`),
|
|
||||||
INDEX `quote-uri-id` (`quote-uri-id`),
|
INDEX `quote-uri-id` (`quote-uri-id`),
|
||||||
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
||||||
FOREIGN KEY (`quote-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
FOREIGN KEY (`quote-uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
|
@ -1327,9 +1348,11 @@ CREATE TABLE IF NOT EXISTS `post-engagement` (
|
||||||
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
|
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
|
||||||
`contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay',
|
`contact-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Person, organisation, news, community, relay',
|
||||||
`media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio',
|
`media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio',
|
||||||
`language` varbinary(128) COMMENT 'Language information about this post',
|
`language` char(2) COMMENT 'Language information about this post in the ISO 639-1 format',
|
||||||
`searchtext` mediumtext COMMENT 'Simplified text for the full text search',
|
`searchtext` mediumtext COMMENT 'Simplified text for the full text search',
|
||||||
|
`size` int unsigned COMMENT 'Body size',
|
||||||
`created` datetime COMMENT '',
|
`created` datetime COMMENT '',
|
||||||
|
`network` char(4) COMMENT '',
|
||||||
`restricted` boolean NOT NULL DEFAULT '0' COMMENT 'If true, this post is either unlisted or not from a federated network',
|
`restricted` boolean NOT NULL DEFAULT '0' COMMENT 'If true, this post is either unlisted or not from a federated network',
|
||||||
`comments` mediumint unsigned COMMENT 'Number of comments',
|
`comments` mediumint unsigned COMMENT 'Number of comments',
|
||||||
`activities` mediumint unsigned COMMENT 'Number of activities (like, dislike, ...)',
|
`activities` mediumint unsigned COMMENT 'Number of activities (like, dislike, ...)',
|
||||||
|
@ -1442,6 +1465,26 @@ CREATE TABLE IF NOT EXISTS `post-question-option` (
|
||||||
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Question option';
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Question option';
|
||||||
|
|
||||||
|
--
|
||||||
|
-- TABLE post-searchindex
|
||||||
|
--
|
||||||
|
CREATE TABLE IF NOT EXISTS `post-searchindex` (
|
||||||
|
`uri-id` int unsigned NOT NULL COMMENT 'Id of the item-uri table entry that contains the item uri',
|
||||||
|
`owner-id` int unsigned NOT NULL DEFAULT 0 COMMENT 'Item owner',
|
||||||
|
`media-type` tinyint NOT NULL DEFAULT 0 COMMENT 'Type of media in a bit array (1 = image, 2 = video, 4 = audio',
|
||||||
|
`language` char(2) COMMENT 'Language information about this post in the ISO 639-1 format',
|
||||||
|
`searchtext` mediumtext COMMENT 'Simplified text for the full text search',
|
||||||
|
`size` int unsigned COMMENT 'Body size',
|
||||||
|
`created` datetime COMMENT '',
|
||||||
|
`restricted` boolean NOT NULL DEFAULT '0' COMMENT 'If true, this post is either unlisted or not from a federated network',
|
||||||
|
PRIMARY KEY(`uri-id`),
|
||||||
|
INDEX `owner-id` (`owner-id`),
|
||||||
|
INDEX `created` (`created`),
|
||||||
|
FULLTEXT INDEX `searchtext` (`searchtext`),
|
||||||
|
FOREIGN KEY (`uri-id`) REFERENCES `item-uri` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (`owner-id`) REFERENCES `contact` (`id`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='Content for all posts';
|
||||||
|
|
||||||
--
|
--
|
||||||
-- TABLE post-tag
|
-- TABLE post-tag
|
||||||
--
|
--
|
||||||
|
@ -1693,7 +1736,6 @@ CREATE TABLE IF NOT EXISTS `profile` (
|
||||||
`net-publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish profile in global directory',
|
`net-publish` boolean NOT NULL DEFAULT '0' COMMENT 'publish profile in global directory',
|
||||||
PRIMARY KEY(`id`),
|
PRIMARY KEY(`id`),
|
||||||
INDEX `uid_is-default` (`uid`,`is-default`),
|
INDEX `uid_is-default` (`uid`,`is-default`),
|
||||||
FULLTEXT INDEX `pub_keywords` (`pub_keywords`),
|
|
||||||
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
|
FOREIGN KEY (`uid`) REFERENCES `user` (`uid`) ON UPDATE RESTRICT ON DELETE CASCADE
|
||||||
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='user profiles data';
|
) DEFAULT COLLATE utf8mb4_general_ci COMMENT='user profiles data';
|
||||||
|
|
||||||
|
@ -1975,7 +2017,8 @@ CREATE VIEW `application-view` AS SELECT
|
||||||
`application-token`.`follow` AS `follow`,
|
`application-token`.`follow` AS `follow`,
|
||||||
`application-token`.`push` AS `push`
|
`application-token`.`push` AS `push`
|
||||||
FROM `application-token`
|
FROM `application-token`
|
||||||
INNER JOIN `application` ON `application-token`.`application-id` = `application`.`id`;
|
INNER JOIN `application` ON `application-token`.`application-id` = `application`.`id`
|
||||||
|
INNER JOIN `user` ON `user`.`uid` = `application-token`.`uid` AND `user`.`verified` AND NOT `user`.`blocked` AND NOT `user`.`account_removed` AND NOT `user`.`account_expired`;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- VIEW circle-member-view
|
-- VIEW circle-member-view
|
||||||
|
@ -2008,6 +2051,20 @@ CREATE VIEW `circle-member-view` AS SELECT
|
||||||
INNER JOIN `contact` ON `group_member`.`contact-id` = `contact`.`id`
|
INNER JOIN `contact` ON `group_member`.`contact-id` = `contact`.`id`
|
||||||
INNER JOIN `group` ON `group_member`.`gid` = `group`.`id`;
|
INNER JOIN `group` ON `group_member`.`gid` = `group`.`id`;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- VIEW post-counts-view
|
||||||
|
--
|
||||||
|
DROP VIEW IF EXISTS `post-counts-view`;
|
||||||
|
CREATE VIEW `post-counts-view` AS SELECT
|
||||||
|
`post-counts`.`uri-id` AS `uri-id`,
|
||||||
|
`post-counts`.`vid` AS `vid`,
|
||||||
|
`verb`.`name` AS `verb`,
|
||||||
|
`post-counts`.`reaction` AS `reaction`,
|
||||||
|
`post-counts`.`parent-uri-id` AS `parent-uri-id`,
|
||||||
|
`post-counts`.`count` AS `count`
|
||||||
|
FROM `post-counts`
|
||||||
|
INNER JOIN `verb` ON `verb`.`id` = `post-counts`.`vid`;
|
||||||
|
|
||||||
--
|
--
|
||||||
-- VIEW post-timeline-view
|
-- VIEW post-timeline-view
|
||||||
--
|
--
|
||||||
|
@ -2053,6 +2110,38 @@ CREATE VIEW `post-timeline-view` AS SELECT
|
||||||
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id`
|
STRAIGHT_JOIN `contact` AS `owner` ON `owner`.`id` = `post-user`.`owner-id`
|
||||||
LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`;
|
LEFT JOIN `contact` AS `causer` ON `causer`.`id` = `post-user`.`causer-id`;
|
||||||
|
|
||||||
|
--
|
||||||
|
-- VIEW post-searchindex-user-view
|
||||||
|
--
|
||||||
|
DROP VIEW IF EXISTS `post-searchindex-user-view`;
|
||||||
|
CREATE VIEW `post-searchindex-user-view` AS SELECT
|
||||||
|
`post-thread-user`.`uid` AS `uid`,
|
||||||
|
`post-searchindex`.`uri-id` AS `uri-id`,
|
||||||
|
`post-searchindex`.`owner-id` AS `owner-id`,
|
||||||
|
`post-searchindex`.`media-type` AS `media-type`,
|
||||||
|
`post-searchindex`.`language` AS `language`,
|
||||||
|
`post-searchindex`.`searchtext` AS `searchtext`,
|
||||||
|
`post-searchindex`.`size` AS `size`,
|
||||||
|
`post-thread-user`.`commented` AS `commented`,
|
||||||
|
`post-thread-user`.`received` AS `received`,
|
||||||
|
`post-thread-user`.`created` AS `created`,
|
||||||
|
`post-thread-user`.`network` AS `network`,
|
||||||
|
`post-searchindex`.`language` AS `restricted`,
|
||||||
|
0 AS `comments`,
|
||||||
|
0 AS `activities`
|
||||||
|
FROM `post-thread-user`
|
||||||
|
INNER JOIN `post-searchindex` ON `post-searchindex`.`uri-id` = `post-thread-user`.`uri-id`
|
||||||
|
INNER JOIN `post-user` ON `post-user`.`id` = `post-thread-user`.`post-user-id`
|
||||||
|
STRAIGHT_JOIN `contact` ON `contact`.`id` = `post-thread-user`.`contact-id`
|
||||||
|
STRAIGHT_JOIN `contact` AS `authorcontact` ON `authorcontact`.`id` = `post-thread-user`.`author-id`
|
||||||
|
STRAIGHT_JOIN `contact` AS `ownercontact` ON `ownercontact`.`id` = `post-thread-user`.`owner-id`
|
||||||
|
WHERE `post-user`.`visible` AND NOT `post-user`.`deleted`
|
||||||
|
AND (NOT `contact`.`readonly` AND NOT `contact`.`blocked` AND NOT `contact`.`pending`)
|
||||||
|
AND (`post-thread-user`.`hidden` IS NULL OR NOT `post-thread-user`.`hidden`)
|
||||||
|
AND NOT `authorcontact`.`blocked` AND NOT `ownercontact`.`blocked`
|
||||||
|
AND NOT EXISTS(SELECT `cid` FROM `user-contact` WHERE `uid` = `post-thread-user`.`uid` AND `cid` IN (`authorcontact`.`id`, `ownercontact`.`id`) AND (`blocked` OR `ignored`))
|
||||||
|
AND NOT EXISTS(SELECT `gsid` FROM `user-gserver` WHERE `uid` = `post-thread-user`.`uid` AND `gsid` IN (`authorcontact`.`gsid`, `ownercontact`.`gsid`) AND `ignored`);
|
||||||
|
|
||||||
--
|
--
|
||||||
-- VIEW post-user-view
|
-- VIEW post-user-view
|
||||||
--
|
--
|
||||||
|
@ -2110,6 +2199,7 @@ CREATE VIEW `post-user-view` AS SELECT
|
||||||
`post-content`.`plink` AS `plink`,
|
`post-content`.`plink` AS `plink`,
|
||||||
`post-content`.`location` AS `location`,
|
`post-content`.`location` AS `location`,
|
||||||
`post-content`.`coord` AS `coord`,
|
`post-content`.`coord` AS `coord`,
|
||||||
|
`post-content`.`sensitive` AS `sensitive`,
|
||||||
`post-content`.`app` AS `app`,
|
`post-content`.`app` AS `app`,
|
||||||
`post-content`.`object-type` AS `object-type`,
|
`post-content`.`object-type` AS `object-type`,
|
||||||
`post-content`.`object` AS `object`,
|
`post-content`.`object` AS `object`,
|
||||||
|
@ -2294,6 +2384,7 @@ CREATE VIEW `post-thread-user-view` AS SELECT
|
||||||
`post-content`.`plink` AS `plink`,
|
`post-content`.`plink` AS `plink`,
|
||||||
`post-content`.`location` AS `location`,
|
`post-content`.`location` AS `location`,
|
||||||
`post-content`.`coord` AS `coord`,
|
`post-content`.`coord` AS `coord`,
|
||||||
|
`post-content`.`sensitive` AS `sensitive`,
|
||||||
`post-content`.`app` AS `app`,
|
`post-content`.`app` AS `app`,
|
||||||
`post-content`.`object-type` AS `object-type`,
|
`post-content`.`object-type` AS `object-type`,
|
||||||
`post-content`.`object` AS `object`,
|
`post-content`.`object` AS `object`,
|
||||||
|
@ -2464,6 +2555,7 @@ CREATE VIEW `post-view` AS SELECT
|
||||||
`post-content`.`plink` AS `plink`,
|
`post-content`.`plink` AS `plink`,
|
||||||
`post-content`.`location` AS `location`,
|
`post-content`.`location` AS `location`,
|
||||||
`post-content`.`coord` AS `coord`,
|
`post-content`.`coord` AS `coord`,
|
||||||
|
`post-content`.`sensitive` AS `sensitive`,
|
||||||
`post-content`.`app` AS `app`,
|
`post-content`.`app` AS `app`,
|
||||||
`post-content`.`object-type` AS `object-type`,
|
`post-content`.`object-type` AS `object-type`,
|
||||||
`post-content`.`object` AS `object`,
|
`post-content`.`object` AS `object`,
|
||||||
|
@ -2610,6 +2702,7 @@ CREATE VIEW `post-thread-view` AS SELECT
|
||||||
`post-content`.`plink` AS `plink`,
|
`post-content`.`plink` AS `plink`,
|
||||||
`post-content`.`location` AS `location`,
|
`post-content`.`location` AS `location`,
|
||||||
`post-content`.`coord` AS `coord`,
|
`post-content`.`coord` AS `coord`,
|
||||||
|
`post-content`.`sensitive` AS `sensitive`,
|
||||||
`post-content`.`app` AS `app`,
|
`post-content`.`app` AS `app`,
|
||||||
`post-content`.`object-type` AS `object-type`,
|
`post-content`.`object-type` AS `object-type`,
|
||||||
`post-content`.`object` AS `object`,
|
`post-content`.`object` AS `object`,
|
||||||
|
@ -2936,8 +3029,6 @@ CREATE VIEW `owner-view` AS SELECT
|
||||||
`user`.`blockwall` AS `blockwall`,
|
`user`.`blockwall` AS `blockwall`,
|
||||||
`user`.`hidewall` AS `hidewall`,
|
`user`.`hidewall` AS `hidewall`,
|
||||||
`user`.`blocktags` AS `blocktags`,
|
`user`.`blocktags` AS `blocktags`,
|
||||||
`user`.`unkmail` AS `unkmail`,
|
|
||||||
`user`.`cntunkmail` AS `cntunkmail`,
|
|
||||||
`user`.`notify-flags` AS `notify-flags`,
|
`user`.`notify-flags` AS `notify-flags`,
|
||||||
`user`.`page-flags` AS `page-flags`,
|
`user`.`page-flags` AS `page-flags`,
|
||||||
`user`.`account-type` AS `account-type`,
|
`user`.`account-type` AS `account-type`,
|
||||||
|
|
|
@ -11,21 +11,7 @@ Authentication is the same as described in [Using the APIs](help/api#Authenticat
|
||||||
|
|
||||||
## Clients
|
## Clients
|
||||||
|
|
||||||
### Supported apps
|
Please find a list of supported apps at [FAQ](help/FAQ#clients).
|
||||||
|
|
||||||
For supported apps please have a look at the [FAQ](help/FAQ#clients)
|
|
||||||
|
|
||||||
### Unsupported apps
|
|
||||||
|
|
||||||
#### Android
|
|
||||||
|
|
||||||
- [Fedilab](https://framagit.org/tom79/fedilab) Automatically uses the legacy API, see issue: https://framagit.org/tom79/fedilab/-/issues/520
|
|
||||||
- [Mammut](https://github.com/jamiesanson/Mammut) There are problems with the token request, see issue https://github.com/jamiesanson/Mammut/issues/19
|
|
||||||
|
|
||||||
#### iOS
|
|
||||||
|
|
||||||
- [Mast](https://github.com/Beesitech/Mast) Doesn't accept the entered instance name. Claims that it is invalid (Message is: "Not a valid instance (may be closed or dead)")
|
|
||||||
- [Toot!](https://apps.apple.com/app/toot/id1229021451)
|
|
||||||
|
|
||||||
## Entities
|
## Entities
|
||||||
|
|
||||||
|
@ -170,7 +156,8 @@ Example:
|
||||||
|
|
||||||
- [`GET /api/v1/followed_tags`](https://docs.joinmastodon.org/methods/followed_tags/)
|
- [`GET /api/v1/followed_tags`](https://docs.joinmastodon.org/methods/followed_tags/)
|
||||||
- [`GET /api/v1/instance`](https://docs.joinmastodon.org/methods/instance/#v1)
|
- [`GET /api/v1/instance`](https://docs.joinmastodon.org/methods/instance/#v1)
|
||||||
- `GET /api/v1/instance/rules` Undocumented, returns Terms of Service
|
- [`GET /api/v1/instance/extended_description`](https://docs.joinmastodon.org/methods/instance/#extended_description)
|
||||||
|
- [`GET /api/v1/instance/rules`](https://docs.joinmastodon.org/methods/instance/#rules)
|
||||||
- [`GET /api/v1/instance/peers`](https://docs.joinmastodon.org/methods/instance#list-of-connected-domains)
|
- [`GET /api/v1/instance/peers`](https://docs.joinmastodon.org/methods/instance#list-of-connected-domains)
|
||||||
- [`GET /api/v1/lists`](https://docs.joinmastodon.org/methods/timelines/lists/)
|
- [`GET /api/v1/lists`](https://docs.joinmastodon.org/methods/timelines/lists/)
|
||||||
- [`POST /api/v1/lists`](https://docs.joinmastodon.org/methods/timelines/lists/)
|
- [`POST /api/v1/lists`](https://docs.joinmastodon.org/methods/timelines/lists/)
|
||||||
|
@ -314,7 +301,6 @@ They refer to features or data that don't exist in Friendica yet.
|
||||||
- [`PUT /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
|
- [`PUT /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
|
||||||
- [`DELETE /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
|
- [`DELETE /api/v1/filters/:id`](https://docs.joinmastodon.org/methods/accounts/filters/)
|
||||||
- [`GET /api/v1/instance/activity`](https://docs.joinmastodon.org/methods/instance#weekly-activity)
|
- [`GET /api/v1/instance/activity`](https://docs.joinmastodon.org/methods/instance#weekly-activity)
|
||||||
- [`POST /api/v1/markers`](https://docs.joinmastodon.org/methods/timelines/markers/)
|
|
||||||
- [`PUT /api/v1/scheduled_statuses/:id`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
|
- [`PUT /api/v1/scheduled_statuses/:id`](https://docs.joinmastodon.org/methods/statuses/scheduled_statuses/)
|
||||||
- [`GET /api/v1/statuses/{id:\d+}/history`](https://github.com/mastodon/mastodon/pull/16697)
|
- [`GET /api/v1/statuses/{id:\d+}/history`](https://github.com/mastodon/mastodon/pull/16697)
|
||||||
- [`GET /api/v1/streaming`](https://docs.joinmastodon.org/methods/timelines/streaming/)
|
- [`GET /api/v1/streaming`](https://docs.joinmastodon.org/methods/timelines/streaming/)
|
||||||
|
|
|
@ -34,6 +34,7 @@ General
|
||||||
* y - for you
|
* y - for you
|
||||||
* f - followers
|
* f - followers
|
||||||
* r - sharers of sharers
|
* r - sharers of sharers
|
||||||
|
* q - quiet sharers
|
||||||
* h - what's hot
|
* h - what's hot
|
||||||
* i - Images
|
* i - Images
|
||||||
* v - Videos
|
* v - Videos
|
||||||
|
|
|
@ -376,8 +376,8 @@ code</code></td>
|
||||||
[li] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/ul]<br>
|
[/ul]<br>
|
||||||
[list]<br>
|
[list]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listbullet" style="list-style-type: circle;">
|
<ul class="listbullet" style="list-style-type: circle;">
|
||||||
|
@ -388,12 +388,12 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[ol]<br>
|
<td>[ol]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/ol]<br>
|
[/ol]<br>
|
||||||
[list=1]<br>
|
[list=1]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listdecimal" style="list-style-type: decimal;">
|
<ul class="listdecimal" style="list-style-type: decimal;">
|
||||||
|
@ -404,8 +404,8 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=]<br>
|
<td>[list=]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listnone" style="list-style-type: none;">
|
<ul class="listnone" style="list-style-type: none;">
|
||||||
|
@ -416,8 +416,8 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=i]<br>
|
<td>[list=i]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listlowerroman" style="list-style-type: lower-roman;">
|
<ul class="listlowerroman" style="list-style-type: lower-roman;">
|
||||||
|
@ -428,8 +428,8 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=I]<br>
|
<td>[list=I]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listupperroman" style="list-style-type: upper-roman;">
|
<ul class="listupperroman" style="list-style-type: upper-roman;">
|
||||||
|
@ -440,8 +440,8 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=a]<br>
|
<td>[list=a]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listloweralpha" style="list-style-type: lower-alpha;">
|
<ul class="listloweralpha" style="list-style-type: lower-alpha;">
|
||||||
|
@ -452,8 +452,8 @@ code</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=A]<br>
|
<td>[list=A]<br>
|
||||||
[*] First list element<br>
|
[li] First list element<br>
|
||||||
[*] Second list element<br>
|
[li] Second list element<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listupperalpha" style="list-style-type: upper-alpha;">
|
<ul class="listupperalpha" style="list-style-type: upper-alpha;">
|
||||||
|
|
|
@ -25,10 +25,15 @@ Predefined Channels
|
||||||
* Posts from people you interact with on a more than average level.
|
* Posts from people you interact with on a more than average level.
|
||||||
* Posts from the accounts that you follow with a more than average number of interactions-
|
* Posts from the accounts that you follow with a more than average number of interactions-
|
||||||
* Posts from accounts where you activated "notify on new posts" or where you have set the channel frequency accordingly.
|
* Posts from accounts where you activated "notify on new posts" or where you have set the channel frequency accordingly.
|
||||||
|
* Discover: Posts from contacts you don't follow, but that might be of interest for you to follow. In detail, it consists of:
|
||||||
|
* Posts from people you don't follow but you interact with on a more than average level.
|
||||||
|
* Posts from people you don't follow but that interact with you on a more than average level.
|
||||||
|
* Popular posts from people you don't follow but you interacted with or who interacted with you on any level.
|
||||||
* What's Hot: Posts with a more than average number of interactions.
|
* What's Hot: Posts with a more than average number of interactions.
|
||||||
* Language: Posts in your language.
|
* Language: Posts in your language.
|
||||||
* Followers: Posts from your followers that you don't follow.
|
* Followers: Posts from your followers that you don't follow.
|
||||||
* Sharers of sharers: Posts from accounts that are followed by accounts that you follow.
|
* Sharers of sharers: Posts from accounts that are followed by accounts that you follow.
|
||||||
|
* Quiet sharers: Posts from accounts that you follow but who don't post very often.
|
||||||
* Images: Posts with images.
|
* Images: Posts with images.
|
||||||
* Audio: Posts with audio.
|
* Audio: Posts with audio.
|
||||||
* Videos: Posts with videos.
|
* Videos: Posts with videos.
|
||||||
|
@ -52,34 +57,43 @@ Each channel is defined by these values:
|
||||||
Additional keywords for the full text search
|
Additional keywords for the full text search
|
||||||
---
|
---
|
||||||
|
|
||||||
Additionally to the search for content, there are additional keywords that can be used in the full text search:
|
Additionally to the search for content, there are keywords that can be used in the full text search.
|
||||||
|
Alternatives are presented with "|".
|
||||||
|
|
||||||
* from - Use "from:nickname" or "from:nickname@domain.tld" to search for posts from a specific author.
|
* from - Use "from:nickname" or "from:nickname@domain.tld" to search for posts from a specific author.
|
||||||
* to - Use "from:nickname" or "from:nickname@domain.tld" to search for posts with the given contact as receiver.
|
* to - Use "from:nickname" or "from:nickname@domain.tld" to search for posts with the given contact as receiver.
|
||||||
* group - Use "from:nickname" or "from:nickname@domain.tld" to search for group post of the given group.
|
* group - Use "group:nickname" or "group:nickname@domain.tld" to search for group post of the given group.
|
||||||
|
* application | relay - Use "application:nickname" or "application:nickname@domain.tld" to search for posts that had been reshared by the given relay application.
|
||||||
* server - Use "server:hostname" to search for posts from a specific server. In the case of group postings, the search text contains both the hostname of the group server and the author's hostname.
|
* server - Use "server:hostname" to search for posts from a specific server. In the case of group postings, the search text contains both the hostname of the group server and the author's hostname.
|
||||||
* source - The ActivityPub type of the post source. Use this for example to include or exclude group posts or posts from services (aka bots).
|
* source - The ActivityPub type of the post source. Use this for example to include or exclude group posts or posts from services (aka bots).
|
||||||
* source:person - The post is created by a regular user account.
|
* source:person - The post is created by a regular user account.
|
||||||
* source:organization - The post is created by an organisation.
|
* source:organization - The post is created by an organisation.
|
||||||
* source:group - The post is created by or distributed via a group.
|
* source:group - The post is created by or distributed via a group.
|
||||||
* source:service - The posts originates from a service account. This source type is often used to mark bot accounts.
|
* source:service | source:news - The posts originates from a service account. This source type is often used to mark bot accounts.
|
||||||
* source:application - The post is created by an application. This is most likely unused in the fediverse for post creation.
|
* source:application | source:relay - The post is created by an application. This is most likely unused in the fediverse for post creation.
|
||||||
* tag - Use "tag:tagname" to search for a specific tag.
|
* tag - Use "tag:tagname" to search for a specific tag.
|
||||||
* network - Use this to include or exclude some networks from your channel.
|
* media - With this keyword you can search for attached media.
|
||||||
* network:apub - ActivityPub (Used by the systems in the Fediverse)
|
* media:image | media:photo | media:picture - The post contains an image
|
||||||
* network:dfrn - Legacy Friendica protocol. Nowayday Friendica mostly uses ActivityPub.
|
* media:video - The post contains a video
|
||||||
* network:dspr - The Diaspora protocol is mainly used by Diaspora itself. Some other systems support the protocol as well like Hubzilla, Socialhome or Ganggo.
|
* media:audio - The post contains audio
|
||||||
|
* media:card - The post contains a link preview card
|
||||||
|
* media:post - The post links another post, means it is a quoted post
|
||||||
|
* network | net - Use this to include or exclude some networks from your channel.
|
||||||
|
* network:apub | network:activitypub - ActivityPub (Used by the systems in the Fediverse)
|
||||||
|
* network:dfrn | network:friendica - Legacy Friendica protocol. Nowayday Friendica mostly uses ActivityPub.
|
||||||
|
* network:dspr | network:diaspora - The Diaspora protocol is mainly used by Diaspora itself. Some other systems support the protocol as well like Hubzilla, Socialhome or Ganggo.
|
||||||
* network:feed - RSS/Atom feeds
|
* network:feed - RSS/Atom feeds
|
||||||
* network:mail - Mails that had been imported via IMAP.
|
* network:mail - Mails that had been imported via IMAP.
|
||||||
* network:stat - The OStatus protocol is mainly used by old GNU Social installations.
|
* network:stat | network:ostatus - The OStatus protocol is mainly used by old GNU Social installations.
|
||||||
* network:dscs - Posts that are received by the Discourse connector.
|
* network:dscs | network:discourse - Posts that are received by the Discourse connector.
|
||||||
* network:tmbl - Posts that are received by the Tumblr connector.
|
* network:tmbl | network:tumblr - Posts that are received by the Tumblr connector.
|
||||||
* network:bsky - Posts that are received by the Bluesky connector.
|
* network:bsky | network:bluesky - Posts that are received by the Bluesky connector.
|
||||||
* platform - Use this to include or exclude some platforms from your channel, e.g. "+platform:friendica". In the case of group postings, the search text contains both the platform of the group server and the author's platform.
|
* platform - Use this to include or exclude some platforms from your channel, e.g. "+platform:friendica". In the case of group postings, the search text contains both the platform of the group server and the author's platform.
|
||||||
* visibility - You have the choice between different visibilities. You can only see unlisted or private posts that you have the access for.
|
* visibility - You have the choice between different visibilities. You can only see unlisted or private posts that you have the access for.
|
||||||
* visibility:public
|
* visibility:public
|
||||||
* visibility:unlisted
|
* visibility:unlisted
|
||||||
* visibility:private
|
* visibility:private
|
||||||
|
* language | lang - Use "language:code" to search for posts with the given language in the [ISO 639-1](https://en.wikipedia.org/wiki/ISO_639-1) format.
|
||||||
|
|
||||||
Remember that you can combine these kerywords.
|
Remember that you can combine these kerywords.
|
||||||
So for example you can create a channel with all posts that talk about the Fediverse - that aren't posted in the Fediverse with the search terms: "fediverse -network:apub -network:dfrn"
|
So for example you can create a channel with all posts that talk about the Fediverse - that aren't posted in the Fediverse with the search terms: "fediverse -network:apub -network:dfrn"
|
10
doc/FAQ.md
10
doc/FAQ.md
|
@ -178,12 +178,12 @@ The available features are client specific and may differ.
|
||||||
#### Android
|
#### Android
|
||||||
|
|
||||||
* [AndStatus](http://andstatus.org) ([F-Droid](https://f-droid.org/repository/browse/?fdid=org.andstatus.app), [Google Play](https://play.google.com/store/apps/details?id=org.andstatus.app))
|
* [AndStatus](http://andstatus.org) ([F-Droid](https://f-droid.org/repository/browse/?fdid=org.andstatus.app), [Google Play](https://play.google.com/store/apps/details?id=org.andstatus.app))
|
||||||
* [Fedi](https://github.com/Big-Fig/Fediverse.app) ([Google Play](https://play.google.com/store/apps/details?id=com.fediverse.app))
|
|
||||||
* [Fedilab](https://fedilab.app) ([F-Droid](https://f-droid.org/app/fr.gouv.etalab.mastodon), [Google Play](https://play.google.com/store/apps/details?id=app.fedilab.android))
|
* [Fedilab](https://fedilab.app) ([F-Droid](https://f-droid.org/app/fr.gouv.etalab.mastodon), [Google Play](https://play.google.com/store/apps/details?id=app.fedilab.android))
|
||||||
* [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) ([F-Droid](https://git.friendi.ca/lubuwest/Friendiqa#install), [Google Play](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa))
|
* [Friendiqa](https://git.friendi.ca/lubuwest/Friendiqa) ([F-Droid](https://git.friendi.ca/lubuwest/Friendiqa#install), [Google Play](https://play.google.com/store/apps/details?id=org.qtproject.friendiqa))
|
||||||
* [Husky](https://git.sr.ht/~captainepoch/husky) ([F-Droid](https://f-droid.org/repository/browse/?fdid=su.xash.husky), [Google Play](https://play.google.com/store/apps/details?id=su.xash.husky))
|
* [Husky](https://codeberg.org/husky/husky) ([F-Droid](https://f-droid.org/repository/browse/?fdid=su.xash.husky), [Google Play](https://play.google.com/store/apps/details?id=su.xash.husky))
|
||||||
* [Mastodon](https://github.com/mastodon/mastodon-android) ([F-Droid](https://f-droid.org/en/packages/org.joinmastodon.android/), [Google Play](https://play.google.com/store/apps/details?id=org.joinmastodon.android))
|
* [Mastodon](https://github.com/mastodon/mastodon-android) ([F-Droid](https://f-droid.org/en/packages/org.joinmastodon.android/), [Google Play](https://play.google.com/store/apps/details?id=org.joinmastodon.android))
|
||||||
* [Subway Tooter](https://github.com/tateisu/SubwayTooter) ([F-Droid](https://android.izzysoft.de/repo/apk/jp.juggler.subwaytooter))
|
* [Pachli](https://pachli.app/) ([F-Droid](https://f-droid.org/en/packages/app.pachli/), [Google Play](https://play.google.com/store/apps/details?id=app.pachli))
|
||||||
|
* [Subway Tooter](https://github.com/tateisu/SubwayTooter) ([F-Droid via Izzy](https://android.izzysoft.de/repo/apk/jp.juggler.subwaytooter.noFcm))
|
||||||
* [Tooot](https://tooot.app/) ([Google Play](https://play.google.com/store/apps/details?id=com.xmflsct.app.tooot))
|
* [Tooot](https://tooot.app/) ([Google Play](https://play.google.com/store/apps/details?id=com.xmflsct.app.tooot))
|
||||||
* [Tusky](https://tusky.app) ([F-Droid](https://f-droid.org/repository/browse/?fdid=com.keylesspalace.tusky), [Google Play](https://play.google.com/store/apps/details?id=com.keylesspalace.tusky))
|
* [Tusky](https://tusky.app) ([F-Droid](https://f-droid.org/repository/browse/?fdid=com.keylesspalace.tusky), [Google Play](https://play.google.com/store/apps/details?id=com.keylesspalace.tusky))
|
||||||
* [TwidereX](https://github.com/TwidereProject/TwidereX-Android) ([F-Droid](https://f-droid.org/en/packages/com.twidere.twiderex/), [Google Play](https://play.google.com/store/apps/details?id=com.twidere.twiderex))
|
* [TwidereX](https://github.com/TwidereProject/TwidereX-Android) ([F-Droid](https://f-droid.org/en/packages/com.twidere.twiderex/), [Google Play](https://play.google.com/store/apps/details?id=com.twidere.twiderex))
|
||||||
|
@ -193,7 +193,7 @@ The available features are client specific and may differ.
|
||||||
|
|
||||||
* [Mastodon](https://joinmastodon.org/apps) ([App Store](https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974))
|
* [Mastodon](https://joinmastodon.org/apps) ([App Store](https://apps.apple.com/us/app/mastodon-for-iphone/id1571998974))
|
||||||
* [Stella*](https://www.stella-app.net/) ([App Store](https://apps.apple.com/us/app/stella-for-mastodon-twitter/id921372048))
|
* [Stella*](https://www.stella-app.net/) ([App Store](https://apps.apple.com/us/app/stella-for-mastodon-twitter/id921372048))
|
||||||
* [Tooot](https://github.com/tooot-app) ([App Store](https://apps.apple.com/app/id1549772269)
|
* [Tooot](https://github.com/tooot-app) ([App Store](https://apps.apple.com/app/id1549772269))
|
||||||
* [TwidereX](https://github.com/TwidereProject/TwidereX-iOS) ([App Store](https://apps.apple.com/app/twidere-x/id1530314034))
|
* [TwidereX](https://github.com/TwidereProject/TwidereX-iOS) ([App Store](https://apps.apple.com/app/twidere-x/id1530314034))
|
||||||
|
|
||||||
#### Linux
|
#### Linux
|
||||||
|
@ -211,7 +211,7 @@ The available features are client specific and may differ.
|
||||||
#### Windows
|
#### Windows
|
||||||
|
|
||||||
* [TheDesk](https://thedesk.top/en/) ([GitHub](https://github.com/cutls/TheDesk))
|
* [TheDesk](https://thedesk.top/en/) ([GitHub](https://github.com/cutls/TheDesk))
|
||||||
* [Whalebird](https://whalebird.social/en/desktop/contents) ([Website Download](https://whalebird.social/en/desktop/contents/downloads#windows), [GitHub](https://github.com/h3poteto/whalebird-desktop))
|
* [Whalebird](https://whalebird.social/en/desktop/contents) ([Microsoft Store](https://apps.microsoft.com/detail/9nbw4csdv5hc), [GitHub](https://github.com/h3poteto/whalebird-desktop))
|
||||||
|
|
||||||
#### Web Frontend
|
#### Web Frontend
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ For alternative server configurations (such as Nginx server and MariaDB database
|
||||||
|
|
||||||
### Optional
|
### Optional
|
||||||
|
|
||||||
* PHP ImageMagick extension (php-imagick) for animated GIF support.
|
* PHP ImageMagick extension (php-imagick) for animated GIF and animated WebP support.
|
||||||
|
|
||||||
## Installation procedure
|
## Installation procedure
|
||||||
|
|
||||||
|
|
|
@ -61,6 +61,7 @@ Database Tables
|
||||||
| [post-category](help/database/db_post-category) | post relation to categories |
|
| [post-category](help/database/db_post-category) | post relation to categories |
|
||||||
| [post-collection](help/database/db_post-collection) | Collection of posts |
|
| [post-collection](help/database/db_post-collection) | Collection of posts |
|
||||||
| [post-content](help/database/db_post-content) | Content for all posts |
|
| [post-content](help/database/db_post-content) | Content for all posts |
|
||||||
|
| [post-counts](help/database/db_post-counts) | Original remote activity |
|
||||||
| [post-delivery](help/database/db_post-delivery) | Delivery data for posts for the batch processing |
|
| [post-delivery](help/database/db_post-delivery) | Delivery data for posts for the batch processing |
|
||||||
| [post-delivery-data](help/database/db_post-delivery-data) | Delivery data for items |
|
| [post-delivery-data](help/database/db_post-delivery-data) | Delivery data for items |
|
||||||
| [post-engagement](help/database/db_post-engagement) | Engagement data per post |
|
| [post-engagement](help/database/db_post-engagement) | Engagement data per post |
|
||||||
|
@ -69,6 +70,7 @@ Database Tables
|
||||||
| [post-media](help/database/db_post-media) | Attached media |
|
| [post-media](help/database/db_post-media) | Attached media |
|
||||||
| [post-question](help/database/db_post-question) | Question |
|
| [post-question](help/database/db_post-question) | Question |
|
||||||
| [post-question-option](help/database/db_post-question-option) | Question option |
|
| [post-question-option](help/database/db_post-question-option) | Question option |
|
||||||
|
| [post-searchindex](help/database/db_post-searchindex) | Content for all posts |
|
||||||
| [post-tag](help/database/db_post-tag) | post relation to tags |
|
| [post-tag](help/database/db_post-tag) | post relation to tags |
|
||||||
| [post-thread](help/database/db_post-thread) | Thread related data |
|
| [post-thread](help/database/db_post-thread) | Thread related data |
|
||||||
| [post-thread-user](help/database/db_post-thread-user) | Thread related data per user |
|
| [post-thread-user](help/database/db_post-thread-user) | Thread related data per user |
|
||||||
|
|
|
@ -16,8 +16,13 @@ Fields
|
||||||
| access-key | Access key | varchar(1) | YES | | NULL | |
|
| access-key | Access key | varchar(1) | YES | | NULL | |
|
||||||
| include-tags | Comma separated list of tags that will be included in the channel | varchar(1023) | YES | | NULL | |
|
| include-tags | Comma separated list of tags that will be included in the channel | varchar(1023) | YES | | NULL | |
|
||||||
| exclude-tags | Comma separated list of tags that aren't allowed in the channel | varchar(1023) | YES | | NULL | |
|
| exclude-tags | Comma separated list of tags that aren't allowed in the channel | varchar(1023) | YES | | NULL | |
|
||||||
|
| min-size | Minimum post size | int unsigned | YES | | NULL | |
|
||||||
|
| max-size | Maximum post size | int unsigned | YES | | NULL | |
|
||||||
| full-text-search | Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode | varchar(1023) | YES | | NULL | |
|
| full-text-search | Full text search pattern, see https://mariadb.com/kb/en/full-text-index-overview/#in-boolean-mode | varchar(1023) | YES | | NULL | |
|
||||||
| media-type | Filtered media types | smallint unsigned | YES | | NULL | |
|
| media-type | Filtered media types | smallint unsigned | YES | | NULL | |
|
||||||
|
| languages | Desired languages | mediumtext | YES | | NULL | |
|
||||||
|
| publish | publish channel content | boolean | YES | | NULL | |
|
||||||
|
| valid | Set, when the full-text-search is valid | boolean | YES | | NULL | |
|
||||||
|
|
||||||
Indexes
|
Indexes
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -7,7 +7,7 @@ Fields
|
||||||
------
|
------
|
||||||
|
|
||||||
| Field | Description | Type | Null | Key | Default | Extra |
|
| Field | Description | Type | Null | Key | Default | Extra |
|
||||||
| --------------------- | -------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
|
| --------------------- | ----------------------------------------------------------------------- | ----------------- | ---- | --- | ------------------- | ----- |
|
||||||
| cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | |
|
| cid | contact the related contact had interacted with | int unsigned | NO | PRI | 0 | |
|
||||||
| relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | |
|
| relation-cid | related contact who had interacted with the contact | int unsigned | NO | PRI | 0 | |
|
||||||
| last-interaction | Date of the last interaction by relation-cid on cid | datetime | NO | | 0001-01-01 00:00:00 | |
|
| last-interaction | Date of the last interaction by relation-cid on cid | datetime | NO | | 0001-01-01 00:00:00 | |
|
||||||
|
@ -17,6 +17,7 @@ Fields
|
||||||
| relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | |
|
| relation-score | score for interactions of relation-cid on cid | smallint unsigned | YES | | NULL | |
|
||||||
| thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | |
|
| thread-score | score for interactions of cid on threads of relation-cid | smallint unsigned | YES | | NULL | |
|
||||||
| relation-thread-score | score for interactions of relation-cid on threads of cid | smallint unsigned | YES | | NULL | |
|
| relation-thread-score | score for interactions of relation-cid on threads of cid | smallint unsigned | YES | | NULL | |
|
||||||
|
| post-score | score for the amount of posts from cid that can be seen by relation-cid | smallint unsigned | YES | | NULL | |
|
||||||
|
|
||||||
Indexes
|
Indexes
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -17,6 +17,7 @@ Fields
|
||||||
| location | text location where this item originated | varchar(255) | NO | | | |
|
| location | text location where this item originated | varchar(255) | NO | | | |
|
||||||
| coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | |
|
| coord | longitude/latitude pair representing location where this item originated | varchar(255) | NO | | | |
|
||||||
| language | Language information about this post | text | YES | | NULL | |
|
| language | Language information about this post | text | YES | | NULL | |
|
||||||
|
| sensitive | If true, this post contains sensitive content | boolean | YES | | NULL | |
|
||||||
| app | application which generated this item | varchar(255) | NO | | | |
|
| app | application which generated this item | varchar(255) | NO | | | |
|
||||||
| rendered-hash | | varchar(32) | NO | | | |
|
| rendered-hash | | varchar(32) | NO | | | |
|
||||||
| rendered-html | item.body converted to html | mediumtext | YES | | NULL | |
|
| rendered-html | item.body converted to html | mediumtext | YES | | NULL | |
|
||||||
|
@ -31,11 +32,10 @@ Indexes
|
||||||
------------
|
------------
|
||||||
|
|
||||||
| Name | Fields |
|
| Name | Fields |
|
||||||
| -------------------------- | -------------------------------------- |
|
| ------------ | ------------ |
|
||||||
| PRIMARY | uri-id |
|
| PRIMARY | uri-id |
|
||||||
| plink | plink(191) |
|
| plink | plink(191) |
|
||||||
| resource-id | resource-id |
|
| resource-id | resource-id |
|
||||||
| title-content-warning-body | FULLTEXT, title, content-warning, body |
|
|
||||||
| quote-uri-id | quote-uri-id |
|
| quote-uri-id | quote-uri-id |
|
||||||
|
|
||||||
Foreign Keys
|
Foreign Keys
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
Table post-counts
|
||||||
|
===========
|
||||||
|
|
||||||
|
Original remote activity
|
||||||
|
|
||||||
|
Fields
|
||||||
|
------
|
||||||
|
|
||||||
|
| Field | Description | Type | Null | Key | Default | Extra |
|
||||||
|
| ------------- | ----------------------------------------------------------- | ----------------- | ---- | --- | ------- | ----- |
|
||||||
|
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
|
||||||
|
| vid | Id of the verb table entry that contains the activity verbs | smallint unsigned | NO | PRI | NULL | |
|
||||||
|
| reaction | Emoji Reaction | varchar(4) | NO | PRI | NULL | |
|
||||||
|
| parent-uri-id | Id of the item-uri table that contains the parent uri | int unsigned | YES | | NULL | |
|
||||||
|
| count | Number of activities | int unsigned | YES | | 0 | |
|
||||||
|
|
||||||
|
Indexes
|
||||||
|
------------
|
||||||
|
|
||||||
|
| Name | Fields |
|
||||||
|
| ------------- | --------------------- |
|
||||||
|
| PRIMARY | uri-id, vid, reaction |
|
||||||
|
| vid | vid |
|
||||||
|
| parent-uri-id | parent-uri-id |
|
||||||
|
|
||||||
|
Foreign Keys
|
||||||
|
------------
|
||||||
|
|
||||||
|
| Field | Target Table | Target Field |
|
||||||
|
|-------|--------------|--------------|
|
||||||
|
| uri-id | [item-uri](help/database/db_item-uri) | id |
|
||||||
|
| vid | [verb](help/database/db_verb) | id |
|
||||||
|
| parent-uri-id | [item-uri](help/database/db_item-uri) | id |
|
||||||
|
|
||||||
|
Return to [database documentation](help/database)
|
|
@ -12,9 +12,11 @@ Fields
|
||||||
| owner-id | Item owner | int unsigned | NO | | 0 | |
|
| owner-id | Item owner | int unsigned | NO | | 0 | |
|
||||||
| contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | |
|
| contact-type | Person, organisation, news, community, relay | tinyint | NO | | 0 | |
|
||||||
| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | |
|
| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | |
|
||||||
| language | Language information about this post | varbinary(128) | YES | | NULL | |
|
| language | Language information about this post in the ISO 639-1 format | char(2) | YES | | NULL | |
|
||||||
| searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | |
|
| searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | |
|
||||||
|
| size | Body size | int unsigned | YES | | NULL | |
|
||||||
| created | | datetime | YES | | NULL | |
|
| created | | datetime | YES | | NULL | |
|
||||||
|
| network | | char(4) | YES | | NULL | |
|
||||||
| restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | |
|
| restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | |
|
||||||
| comments | Number of comments | mediumint unsigned | YES | | NULL | |
|
| comments | Number of comments | mediumint unsigned | YES | | NULL | |
|
||||||
| activities | Number of activities (like, dislike, ...) | mediumint unsigned | YES | | NULL | |
|
| activities | Number of activities (like, dislike, ...) | mediumint unsigned | YES | | NULL | |
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
Table post-searchindex
|
||||||
|
===========
|
||||||
|
|
||||||
|
Content for all posts
|
||||||
|
|
||||||
|
Fields
|
||||||
|
------
|
||||||
|
|
||||||
|
| Field | Description | Type | Null | Key | Default | Extra |
|
||||||
|
| ---------- | --------------------------------------------------------------------- | ------------ | ---- | --- | ------- | ----- |
|
||||||
|
| uri-id | Id of the item-uri table entry that contains the item uri | int unsigned | NO | PRI | NULL | |
|
||||||
|
| owner-id | Item owner | int unsigned | NO | | 0 | |
|
||||||
|
| media-type | Type of media in a bit array (1 = image, 2 = video, 4 = audio | tinyint | NO | | 0 | |
|
||||||
|
| language | Language information about this post in the ISO 639-1 format | char(2) | YES | | NULL | |
|
||||||
|
| searchtext | Simplified text for the full text search | mediumtext | YES | | NULL | |
|
||||||
|
| size | Body size | int unsigned | YES | | NULL | |
|
||||||
|
| created | | datetime | YES | | NULL | |
|
||||||
|
| restricted | If true, this post is either unlisted or not from a federated network | boolean | NO | | 0 | |
|
||||||
|
|
||||||
|
Indexes
|
||||||
|
------------
|
||||||
|
|
||||||
|
| Name | Fields |
|
||||||
|
| ---------- | -------------------- |
|
||||||
|
| PRIMARY | uri-id |
|
||||||
|
| owner-id | owner-id |
|
||||||
|
| created | created |
|
||||||
|
| searchtext | FULLTEXT, searchtext |
|
||||||
|
|
||||||
|
Foreign Keys
|
||||||
|
------------
|
||||||
|
|
||||||
|
| Field | Target Table | Target Field |
|
||||||
|
|-------|--------------|--------------|
|
||||||
|
| uri-id | [item-uri](help/database/db_item-uri) | id |
|
||||||
|
| owner-id | [contact](help/database/db_contact) | id |
|
||||||
|
|
||||||
|
Return to [database documentation](help/database)
|
|
@ -57,10 +57,9 @@ Indexes
|
||||||
------------
|
------------
|
||||||
|
|
||||||
| Name | Fields |
|
| Name | Fields |
|
||||||
| -------------- | ---------------------- |
|
| -------------- | --------------- |
|
||||||
| PRIMARY | id |
|
| PRIMARY | id |
|
||||||
| uid_is-default | uid, is-default |
|
| uid_is-default | uid, is-default |
|
||||||
| pub_keywords | FULLTEXT, pub_keywords |
|
|
||||||
|
|
||||||
Foreign Keys
|
Foreign Keys
|
||||||
------------
|
------------
|
||||||
|
|
|
@ -34,8 +34,6 @@ Fields
|
||||||
| blockwall | Prohibit contacts to post to the profile page of the user | boolean | NO | | 0 | |
|
| blockwall | Prohibit contacts to post to the profile page of the user | boolean | NO | | 0 | |
|
||||||
| hidewall | Hide profile details from unknown viewers | boolean | NO | | 0 | |
|
| hidewall | Hide profile details from unknown viewers | boolean | NO | | 0 | |
|
||||||
| blocktags | Prohibit contacts to tag the post of this user | boolean | NO | | 0 | |
|
| blocktags | Prohibit contacts to tag the post of this user | boolean | NO | | 0 | |
|
||||||
| unkmail | Permit unknown people to send private mails to this user | boolean | NO | | 0 | |
|
|
||||||
| cntunkmail | | int unsigned | NO | | 10 | |
|
|
||||||
| notify-flags | email notification options | smallint unsigned | NO | | 65535 | |
|
| notify-flags | email notification options | smallint unsigned | NO | | 65535 | |
|
||||||
| page-flags | page/profile type | tinyint unsigned | NO | | 0 | |
|
| page-flags | page/profile type | tinyint unsigned | NO | | 0 | |
|
||||||
| account-type | | tinyint unsigned | NO | | 0 | |
|
| account-type | | tinyint unsigned | NO | | 0 | |
|
||||||
|
|
|
@ -356,8 +356,8 @@ Zeilen</code></td>
|
||||||
[li] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/ul]<br>
|
[/ul]<br>
|
||||||
[list]<br>
|
[list]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listbullet" style="list-style-type: circle;">
|
<ul class="listbullet" style="list-style-type: circle;">
|
||||||
|
@ -368,12 +368,12 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[ol]<br>
|
<td>[ol]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/ol]<br>
|
[/ol]<br>
|
||||||
[list=1]<br>
|
[list=1]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listdecimal" style="list-style-type: decimal;">
|
<ul class="listdecimal" style="list-style-type: decimal;">
|
||||||
|
@ -384,8 +384,8 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=]<br>
|
<td>[list=]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listnone" style="list-style-type: none;">
|
<ul class="listnone" style="list-style-type: none;">
|
||||||
|
@ -396,8 +396,8 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=i]<br>
|
<td>[list=i]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listlowerroman" style="list-style-type: lower-roman;">
|
<ul class="listlowerroman" style="list-style-type: lower-roman;">
|
||||||
|
@ -408,8 +408,8 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=I]<br>
|
<td>[list=I]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listupperroman" style="list-style-type: upper-roman;">
|
<ul class="listupperroman" style="list-style-type: upper-roman;">
|
||||||
|
@ -420,8 +420,8 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=a]<br>
|
<td>[list=a]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listloweralpha" style="list-style-type: lower-alpha;">
|
<ul class="listloweralpha" style="list-style-type: lower-alpha;">
|
||||||
|
@ -432,8 +432,8 @@ Zeilen</code></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td>[list=A]<br>
|
<td>[list=A]<br>
|
||||||
[*] Erstes Listenelement<br>
|
[li] Erstes Listenelement<br>
|
||||||
[*] Zweites Listenelement<br>
|
[li] Zweites Listenelement<br>
|
||||||
[/list]</td>
|
[/list]</td>
|
||||||
<td>
|
<td>
|
||||||
<ul class="listupperalpha" style="list-style-type: upper-alpha;">
|
<ul class="listupperalpha" style="list-style-type: upper-alpha;">
|
||||||
|
|
151
doc/themes.md
151
doc/themes.md
|
@ -2,153 +2,10 @@
|
||||||
|
|
||||||
* [Home](help)
|
* [Home](help)
|
||||||
|
|
||||||
To change the look of friendica you have to touch the themes.
|
The default Theme in Friendica is called [frio](https://github.com/friendica/friendica/tree/stable/view/theme/frio).
|
||||||
The current default theme is [Vier](https://github.com/friendica/friendica/tree/stable/view/theme/vier) but there are numerous others.
|
|
||||||
Have a look at [github.com/bkil/friendica-themes](https://github.com/bkil/friendica-themes) for an overview of the existing themes.
|
|
||||||
In case none of them suits your needs, there are several ways to change a theme.
|
|
||||||
|
|
||||||
So, how to work on the UI of friendica.
|
Open `Settings > Display > Custom Theme Settings` adjust the Theme to your liking. Select your preferred Appearance - light, dark or black - and your favorite Accent color. Click `Submit` to save your changes.
|
||||||
|
|
||||||
You can either directly edit an existing theme.
|
The `Custom` Appearance allows to tweak the themes CSS and set colors for UI elements. So called `schemestrings` can be shared between users.
|
||||||
But you might loose your changes when the theme is updated by the friendica team.
|
|
||||||
|
|
||||||
If you are almost happy with an existing theme, the easiest way to cover your needs is to create a new theme, inheriting most of the properties of the parent theme and change just minor stuff.
|
In the `General Theme Settings` you can also find the [vier](https://github.com/friendica/friendica/tree/stable/view/theme/vier) Theme, which precedes frio and is no longer officially maintained.
|
||||||
The below for a more detailed description of theme heritage.
|
|
||||||
|
|
||||||
Some themes also allow users to select *variants* of the theme.
|
|
||||||
Those theme variants most often contain an additional [CSS](https://en.wikipedia.org/wiki/CSS) file to override some styling of the default theme values.
|
|
||||||
From the themes in the main repository *vier* and *vier* are using this methods for variations.
|
|
||||||
Quattro is using a slightly different approach.
|
|
||||||
|
|
||||||
Third you can start your theme from scratch.
|
|
||||||
Which is the most complex way to change friendicas look.
|
|
||||||
But it leaves you the most freedom.
|
|
||||||
So below for a *detailed* description and the meaning of some special files.
|
|
||||||
|
|
||||||
### Styling
|
|
||||||
|
|
||||||
If you want to change the styling of a theme, have a look at the themes CSS file.
|
|
||||||
In most cases, you can found these in
|
|
||||||
|
|
||||||
/view/theme/**your-theme-name**/style.css
|
|
||||||
|
|
||||||
sometimes, there is also a file called style.php in the theme directory.
|
|
||||||
This is only needed if the theme allows the user to change certain things of the theme dynamically.
|
|
||||||
Say the font size or set a background image.
|
|
||||||
|
|
||||||
### Templates
|
|
||||||
|
|
||||||
If you want to change the structure of the theme, you need to change the templates used by the theme.
|
|
||||||
Friendica themes are using [SMARTY3](http://www.smarty.net/) for templating.
|
|
||||||
The default template can be found in
|
|
||||||
|
|
||||||
/view/templates
|
|
||||||
|
|
||||||
if you want to override any template within your theme create your version of the template in
|
|
||||||
|
|
||||||
/view/theme/**your-theme-name**/templates
|
|
||||||
|
|
||||||
any template that exists there will be used instead of the default one.
|
|
||||||
|
|
||||||
### JavaScript
|
|
||||||
|
|
||||||
The same rule applies to the JavaScript files found in
|
|
||||||
|
|
||||||
/js
|
|
||||||
|
|
||||||
they will be overwritten by files in
|
|
||||||
|
|
||||||
/view/theme/**your-theme-name**/js.
|
|
||||||
|
|
||||||
## Creating a Theme from Scratch
|
|
||||||
|
|
||||||
Keep patient.
|
|
||||||
Basically what you have to do is identify which template you have to change so it looks more like what you want.
|
|
||||||
Adopt the CSS of the theme accordingly.
|
|
||||||
And iterate the process until you have the theme the way you want it.
|
|
||||||
|
|
||||||
*Use the source Luke.* and don't hesitate to ask in @[developers](https://forum.friendi.ca/profile/developers) or @[helpers](https://forum.friendi.ca/profile/helpers).
|
|
||||||
|
|
||||||
## Special Files
|
|
||||||
|
|
||||||
### unsupported
|
|
||||||
|
|
||||||
If a file with this name (which might be empty) exists in the theme directory, the theme is marked as *unsupported*.
|
|
||||||
An unsupported theme may not be selected by a user in the settings.
|
|
||||||
Users who are already using it wont notice anything.
|
|
||||||
|
|
||||||
### README(.md)
|
|
||||||
|
|
||||||
The contents of this file, with or without the .md which indicates [Markdown](https://daringfireball.net/projects/markdown/) syntax, will be displayed at most repository hosting services and in the theme page within the admin panel of friendica.
|
|
||||||
|
|
||||||
This file should contain information you want to let others know about your theme.
|
|
||||||
|
|
||||||
### screenshot.[png|jpg]
|
|
||||||
|
|
||||||
If you want to have a preview image of your theme displayed in the settings you should take a screenshot and save it with this name.
|
|
||||||
Supported formats are PNG and JPEG.
|
|
||||||
|
|
||||||
### theme.php
|
|
||||||
|
|
||||||
This is the main definition file of the theme.
|
|
||||||
In the header of that file, some meta information is stored.
|
|
||||||
For example, have a look at the theme.php of the *vier* theme:
|
|
||||||
|
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* [Licence]
|
|
||||||
*
|
|
||||||
* Name: Vier
|
|
||||||
* Version: 1.2
|
|
||||||
* Author: Fabio <http://kirgroup.com/profile/fabrixxm>
|
|
||||||
* Author: Ike <http://pirati.ca/profile/heluecht>
|
|
||||||
* Author: Beanow <https://fc.oscp.info/profile/beanow>
|
|
||||||
* Maintainer: Ike <http://pirati.ca/profile/heluecht>
|
|
||||||
* Description: "Vier" is a very compact and modern theme. It uses the font awesome font library: http://fortawesome.github.com/Font-Awesome/
|
|
||||||
*/
|
|
||||||
|
|
||||||
You see the definition of the theme's name, it's version and the initial author of the theme.
|
|
||||||
These three pieces of information should be listed.
|
|
||||||
If the original author is no longer working on the theme, but a maintainer has taken over, the maintainer should be listed as well.
|
|
||||||
The information from the theme header will be displayed in the admin panel.
|
|
||||||
|
|
||||||
The first thing in file is to import the `App` class from `\Friendica\` namespace.
|
|
||||||
|
|
||||||
use Friendica\App;
|
|
||||||
|
|
||||||
This will make our job a little easier, as we don't have to specify the full name every time we need to use the `App` class.
|
|
||||||
|
|
||||||
The next crucial part of the theme.php file is a definition of an init function.
|
|
||||||
The name of the function is <theme-name>_init.
|
|
||||||
So in the case of vier it is
|
|
||||||
|
|
||||||
function vier_init(App $a) {
|
|
||||||
$a->theme_info = array();
|
|
||||||
$a->set_template_engine('smarty3');
|
|
||||||
}
|
|
||||||
|
|
||||||
Here we have set the basic theme information, in this case they are empty.
|
|
||||||
But the array needs to be set.
|
|
||||||
And we have set the template engine that should be used by friendica for this theme.
|
|
||||||
At the moment you should use the *smarty3* engine.
|
|
||||||
There once was a friendica specific templating engine as well but that is not used anymore.
|
|
||||||
If you like to use another templating engine, please implement it.
|
|
||||||
|
|
||||||
If you want to add something to the HTML header of the theme, one way to do so is by adding it to the theme.php file.
|
|
||||||
To do so, add something alike
|
|
||||||
|
|
||||||
DI::page()['htmlhead'] .= <<< EOT
|
|
||||||
/* stuff you want to add to the header */
|
|
||||||
EOT;
|
|
||||||
|
|
||||||
So you can access the properties of this friendica session from the theme.php file as well.
|
|
||||||
|
|
||||||
### default.php
|
|
||||||
|
|
||||||
This file covers the structure of the underlying HTML layout.
|
|
||||||
The default file is in
|
|
||||||
|
|
||||||
/view/default.php
|
|
||||||
|
|
||||||
if you want to change it, say adding a 4th column for banners of your favourite FLOSS projects, place a new default.php file in your theme directory.
|
|
||||||
As with the theme.php file, you can use the properties of the $a variable with holds the friendica application to decide what content is displayed.
|
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 7.8 KiB |
Binary file not shown.
Before Width: | Height: | Size: 1.2 MiB |
Binary file not shown.
After Width: | Height: | Size: 1011 KiB |
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -278,6 +278,7 @@ function item_process(array $post, array $request, bool $preview, string $return
|
||||||
$post['quote-uri-id'] = Item::getQuoteUriId($post['body'], $post['uid']);
|
$post['quote-uri-id'] = Item::getQuoteUriId($post['body'], $post['uid']);
|
||||||
$post['body'] = BBCode::removeSharedData(Item::setHashtags($post['body']));
|
$post['body'] = BBCode::removeSharedData(Item::setHashtags($post['body']));
|
||||||
$post['writable'] = true;
|
$post['writable'] = true;
|
||||||
|
$post['sensitive'] = false;
|
||||||
|
|
||||||
$o = DI::conversation()->render([$post], Conversation::MODE_SEARCH, false, true);
|
$o = DI::conversation()->render([$post], Conversation::MODE_SEARCH, false, true);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -132,8 +132,6 @@ function photos_post(App $a)
|
||||||
throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.'));
|
throw new HTTPException\NotFoundException(DI::l10n()->t('User not found.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
$phototypes = Images::supportedTypes();
|
|
||||||
|
|
||||||
$can_post = false;
|
$can_post = false;
|
||||||
$visitor = 0;
|
$visitor = 0;
|
||||||
|
|
||||||
|
@ -215,14 +213,14 @@ function photos_post(App $a)
|
||||||
// get the list of photos we are about to delete
|
// get the list of photos we are about to delete
|
||||||
if ($visitor) {
|
if ($visitor) {
|
||||||
$r = DBA::toArray(DBA::p(
|
$r = DBA::toArray(DBA::p(
|
||||||
"SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `contact-id` = ? AND `uid` = ? AND `album` = ?",
|
"SELECT distinct(`resource-id`) AS `rid` FROM `photo` WHERE `contact-id` = ? AND `uid` = ? AND `album` = ?",
|
||||||
$visitor,
|
$visitor,
|
||||||
$page_owner_uid,
|
$page_owner_uid,
|
||||||
$album
|
$album
|
||||||
));
|
));
|
||||||
} else {
|
} else {
|
||||||
$r = DBA::toArray(DBA::p(
|
$r = DBA::toArray(DBA::p(
|
||||||
"SELECT distinct(`resource-id`) as `rid` FROM `photo` WHERE `uid` = ? AND `album` = ?",
|
"SELECT distinct(`resource-id`) AS `rid` FROM `photo` WHERE `uid` = ? AND `album` = ?",
|
||||||
DI::userSession()->getLocalUserId(),
|
DI::userSession()->getLocalUserId(),
|
||||||
$album
|
$album
|
||||||
));
|
));
|
||||||
|
@ -337,7 +335,7 @@ function photos_post(App $a)
|
||||||
|
|
||||||
if (DBA::isResult($photos)) {
|
if (DBA::isResult($photos)) {
|
||||||
$photo = $photos[0];
|
$photo = $photos[0];
|
||||||
$ext = $phototypes[$photo['type']];
|
$ext = Images::getExtensionByMimeType($photo['type']);
|
||||||
Photo::update(
|
Photo::update(
|
||||||
['desc' => $desc, 'album' => $albname, 'allow_cid' => $str_contact_allow, 'allow_gid' => $str_circle_allow, 'deny_cid' => $str_contact_deny, 'deny_gid' => $str_circle_deny],
|
['desc' => $desc, 'album' => $albname, 'allow_cid' => $str_contact_allow, 'allow_gid' => $str_circle_allow, 'deny_cid' => $str_contact_deny, 'deny_gid' => $str_circle_deny],
|
||||||
['resource-id' => $resource_id, 'uid' => $page_owner_uid]
|
['resource-id' => $resource_id, 'uid' => $page_owner_uid]
|
||||||
|
@ -590,8 +588,6 @@ function photos_content(App $a)
|
||||||
|
|
||||||
$profile = Profile::getByUID($user['uid']);
|
$profile = Profile::getByUID($user['uid']);
|
||||||
|
|
||||||
$phototypes = Images::supportedTypes();
|
|
||||||
|
|
||||||
$_SESSION['photo_return'] = DI::args()->getCommand();
|
$_SESSION['photo_return'] = DI::args()->getCommand();
|
||||||
|
|
||||||
// Parse arguments
|
// Parse arguments
|
||||||
|
@ -762,7 +758,7 @@ function photos_content(App $a)
|
||||||
|
|
||||||
$total = 0;
|
$total = 0;
|
||||||
$r = DBA::toArray(DBA::p(
|
$r = DBA::toArray(DBA::p(
|
||||||
"SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = ? AND `album` = ?
|
"SELECT `resource-id`, MAX(`scale`) AS `scale` FROM `photo` WHERE `uid` = ? AND `album` = ?
|
||||||
AND `scale` <= 4 $sql_extra GROUP BY `resource-id`",
|
AND `scale` <= 4 $sql_extra GROUP BY `resource-id`",
|
||||||
$owner_uid,
|
$owner_uid,
|
||||||
$album
|
$album
|
||||||
|
@ -782,9 +778,9 @@ function photos_content(App $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
$r = DBA::toArray(DBA::p(
|
$r = DBA::toArray(DBA::p(
|
||||||
"SELECT `resource-id`, ANY_VALUE(`id`) AS `id`, ANY_VALUE(`filename`) AS `filename`,
|
"SELECT `resource-id`, MIN(`id`) AS `id`, MIN(`filename`) AS `filename`,
|
||||||
ANY_VALUE(`type`) AS `type`, max(`scale`) AS `scale`, ANY_VALUE(`desc`) as `desc`,
|
MIN(`type`) AS `type`, MAX(`scale`) AS `scale`, MIN(`desc`) AS `desc`,
|
||||||
ANY_VALUE(`created`) as `created`
|
MIN(`created`) AS `created`
|
||||||
FROM `photo` WHERE `uid` = ? AND `album` = ?
|
FROM `photo` WHERE `uid` = ? AND `album` = ?
|
||||||
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT ? , ?",
|
AND `scale` <= 4 $sql_extra GROUP BY `resource-id` ORDER BY `created` $order LIMIT ? , ?",
|
||||||
intval($owner_uid),
|
intval($owner_uid),
|
||||||
|
@ -844,7 +840,7 @@ function photos_content(App $a)
|
||||||
foreach ($r as $rr) {
|
foreach ($r as $rr) {
|
||||||
$twist = !$twist;
|
$twist = !$twist;
|
||||||
|
|
||||||
$ext = $phototypes[$rr['type']];
|
$ext = Images::getExtensionByMimeType($rr['type']);
|
||||||
|
|
||||||
$imgalt_e = $rr['filename'];
|
$imgalt_e = $rr['filename'];
|
||||||
$desc_e = $rr['desc'];
|
$desc_e = $rr['desc'];
|
||||||
|
@ -855,7 +851,7 @@ function photos_content(App $a)
|
||||||
'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id']
|
'link' => 'photos/' . $user['nickname'] . '/image/' . $rr['resource-id']
|
||||||
. ($order_field === 'created' ? '?order=created' : ''),
|
. ($order_field === 'created' ? '?order=created' : ''),
|
||||||
'title' => DI::l10n()->t('View Photo'),
|
'title' => DI::l10n()->t('View Photo'),
|
||||||
'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' . $ext,
|
'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . $ext,
|
||||||
'alt' => $imgalt_e,
|
'alt' => $imgalt_e,
|
||||||
'desc' => $desc_e,
|
'desc' => $desc_e,
|
||||||
'ext' => $ext,
|
'ext' => $ext,
|
||||||
|
@ -1013,9 +1009,9 @@ function photos_content(App $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
$photo = [
|
$photo = [
|
||||||
'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . '.' . $phototypes[$hires['type']],
|
'href' => 'photo/' . $hires['resource-id'] . '-' . $hires['scale'] . Images::getExtensionByMimeType($hires['type']),
|
||||||
'title' => DI::l10n()->t('View Full Size'),
|
'title' => DI::l10n()->t('View Full Size'),
|
||||||
'src' => 'photo/' . $lores['resource-id'] . '-' . $lores['scale'] . '.' . $phototypes[$lores['type']] . '?_u=' . DateTimeFormat::utcNow('ymdhis'),
|
'src' => 'photo/' . $lores['resource-id'] . '-' . $lores['scale'] . Images::getExtensionByMimeType($lores['type']) . '?_u=' . DateTimeFormat::utcNow('ymdhis'),
|
||||||
'height' => $hires['height'],
|
'height' => $hires['height'],
|
||||||
'width' => $hires['width'],
|
'width' => $hires['width'],
|
||||||
'album' => $hires['album'],
|
'album' => $hires['album'],
|
||||||
|
@ -1043,7 +1039,7 @@ function photos_content(App $a)
|
||||||
$pager = new Pager(DI::l10n(), DI::args()->getQueryString());
|
$pager = new Pager(DI::l10n(), DI::args()->getQueryString());
|
||||||
|
|
||||||
$params = ['order' => ['id'], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]];
|
$params = ['order' => ['id'], 'limit' => [$pager->getStart(), $pager->getItemsPerPage()]];
|
||||||
$items = Post::toArray(Post::selectForUser($link_item['uid'], Item::ITEM_FIELDLIST, $condition, $params));
|
$items = Post::toArray(Post::selectForUser($link_item['uid'], array_merge(Item::ITEM_FIELDLIST, ['author-alias']), $condition, $params));
|
||||||
|
|
||||||
if (DI::userSession()->getLocalUserId() == $link_item['uid']) {
|
if (DI::userSession()->getLocalUserId() == $link_item['uid']) {
|
||||||
Item::update(['unseen' => false], ['parent' => $link_item['parent']]);
|
Item::update(['unseen' => false], ['parent' => $link_item['parent']]);
|
||||||
|
@ -1167,11 +1163,11 @@ function photos_content(App $a)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conv_responses['like'][$link_item['uri']])) {
|
if (!empty($conv_responses['like'][$link_item['uri']])) {
|
||||||
$like = DI::conversation()->formatActivity($conv_responses['like'][$link_item['uri']]['links'], 'like', $link_item['id']);
|
$like = DI::conversation()->formatActivity($conv_responses['like'][$link_item['uri']]['links'], 'like', $link_item['id'], '', []);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!empty($conv_responses['dislike'][$link_item['uri']])) {
|
if (!empty($conv_responses['dislike'][$link_item['uri']])) {
|
||||||
$dislike = DI::conversation()->formatActivity($conv_responses['dislike'][$link_item['uri']]['links'], 'dislike', $link_item['id']);
|
$dislike = DI::conversation()->formatActivity($conv_responses['dislike'][$link_item['uri']]['links'], 'dislike', $link_item['id'], '', []);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (($can_post || Security::canWriteToUserWall($owner_uid))) {
|
if (($can_post || Security::canWriteToUserWall($owner_uid))) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,8 +0,0 @@
|
||||||
fpostit
|
|
||||||
|
|
||||||
original author: Devlon Duthied
|
|
||||||
|
|
||||||
see his blog posting:
|
|
||||||
http://blog.duthied.com/2011/09/13/node-agnostic-friendika-bookmarklet/
|
|
||||||
|
|
||||||
original published at github https://github.com/duthied/Friendika-Bookmarklet
|
|
|
@ -1,11 +0,0 @@
|
||||||
javascript: (function() {
|
|
||||||
the_url = 'http://testbubble.com/fpostit.php?url=' + encodeURIComponent(window.location.href) + '&title=' + encodeURIComponent(document.title) + '&text=' + encodeURIComponent('' (window.getSelection ? window.getSelection() : document.getSelection ? document.getSelection() : document.selection.createRange().text));
|
|
||||||
a_funct = function() {
|
|
||||||
if (!window.open(the_url, 'fpostit', 'location=yes,links=no,scrollbars=no,toolbar=no,width=600,height=300')) location.href = the_url;
|
|
||||||
};
|
|
||||||
if (/Firefox/.test(navigator.userAgent)) {
|
|
||||||
setTimeout(a_funct, 0)
|
|
||||||
} else {
|
|
||||||
a_funct()
|
|
||||||
}
|
|
||||||
})()
|
|
|
@ -1,148 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
|
||||||
*
|
|
||||||
* @license GNU AGPL version 3 or any later version
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU Affero General Public License as
|
|
||||||
* published by the Free Software Foundation, either version 3 of the
|
|
||||||
* License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU Affero General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU Affero General Public License
|
|
||||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
if (($_POST["friendica_acct_name"] != '') && ($_POST["friendica_password"] != '')) {
|
|
||||||
setcookie("username", $_POST["friendica_acct_name"], time()+60*60*24*300);
|
|
||||||
setcookie("password", $_POST["friendica_password"], time()+60*60*24*300);
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
||||||
<html>
|
|
||||||
<head>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: arial, Helvetica,sans-serif;
|
|
||||||
margin: 0px;
|
|
||||||
}
|
|
||||||
.wrap1 {
|
|
||||||
padding: 2px 5px;
|
|
||||||
background-color: #729FCF;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
}
|
|
||||||
.wrap2 {
|
|
||||||
margin-left: 10px;
|
|
||||||
font-size: 12px;
|
|
||||||
}
|
|
||||||
.logo {
|
|
||||||
margin-left: 3px;
|
|
||||||
margin-right: 5px;
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
h2 {
|
|
||||||
color: #ffffff;
|
|
||||||
}
|
|
||||||
.error {
|
|
||||||
background-color: #FFFF66;
|
|
||||||
font-size: 12px;
|
|
||||||
margin-left: 10px;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
|
|
||||||
<body>
|
|
||||||
<?php
|
|
||||||
|
|
||||||
if (isset($_GET['title'])) {
|
|
||||||
$title = $_GET['title'];
|
|
||||||
}
|
|
||||||
if (isset($_GET['text'])) {
|
|
||||||
$text = $_GET['text'];
|
|
||||||
}
|
|
||||||
if (isset($_GET['url'])) {
|
|
||||||
$url = $_GET['url'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((isset($title)) && (isset($text)) && (isset($url))) {
|
|
||||||
$content = "$title\nsource:$url\n\n$text";
|
|
||||||
} else {
|
|
||||||
$content = $_POST['content'];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($_POST['submit'])) {
|
|
||||||
|
|
||||||
if (($_POST["friendica_acct_name"] != '') && ($_POST["friendica_password"] != '')) {
|
|
||||||
$acctname = $_POST["friendica_acct_name"];
|
|
||||||
$tmp_account_array = explode("@", $acctname);
|
|
||||||
if (isset($tmp_account_array[1])) {
|
|
||||||
$username = $tmp_account_array[0];
|
|
||||||
$hostname = $tmp_account_array[1];
|
|
||||||
}
|
|
||||||
$password = $_POST["friendica_password"];
|
|
||||||
$content = $_POST["content"];
|
|
||||||
|
|
||||||
$url = "http://" . $hostname . '/api/statuses/update';
|
|
||||||
$data = ['status' => $content];
|
|
||||||
|
|
||||||
// echo "posting to: $url<br/>";
|
|
||||||
|
|
||||||
$c = curl_init();
|
|
||||||
curl_setopt($c, CURLOPT_URL, $url);
|
|
||||||
curl_setopt($c, CURLOPT_USERPWD, "$username:$password");
|
|
||||||
curl_setopt($c, CURLOPT_POSTFIELDS, $data);
|
|
||||||
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
|
|
||||||
curl_setopt($c, CURLOPT_FOLLOWLOCATION, true);
|
|
||||||
$c_result = curl_exec($c);
|
|
||||||
if(curl_errno($c)){
|
|
||||||
$error = curl_error($c);
|
|
||||||
showForm($error, $content);
|
|
||||||
}
|
|
||||||
|
|
||||||
curl_close($c);
|
|
||||||
if (!isset($error)) {
|
|
||||||
echo '<script language="javascript" type="text/javascript">window.close();</script>';
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
$error = "Missing account name and/or password...try again please";
|
|
||||||
showForm($error, $content);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
showForm(null, $content);
|
|
||||||
}
|
|
||||||
|
|
||||||
function showForm($error, $content) {
|
|
||||||
$username_cookie = $_COOKIE['username'];
|
|
||||||
$password_cookie = $_COOKIE['password'];
|
|
||||||
|
|
||||||
echo <<<EOF
|
|
||||||
<div class='wrap1'>
|
|
||||||
<h2><img class='logo' width="32" height="32" src='friendica.svg' align='middle';/>
|
|
||||||
Friendica Bookmarklet</h2>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="wrap2">
|
|
||||||
<form method="post" action="{$_SERVER['PHP_SELF']}">
|
|
||||||
Enter the email address of the Friendica Account that you want to cross-post to:(example: user@friendica.org)<br /><br />
|
|
||||||
Account ID: <input type="text" name="friendica_acct_name" value="{$username_cookie}" size="50"/><br />
|
|
||||||
Password: <input type="password" name="friendica_password" value="{$password_cookie}" size="50"/><br />
|
|
||||||
<textarea name="content" id="content" rows="6" cols="70">{$content}</textarea><br />
|
|
||||||
<input type="submit" value="PostIt!" name="submit" /> <span class='error'>$error</span>
|
|
||||||
</form>
|
|
||||||
<p></p>
|
|
||||||
</div>
|
|
||||||
EOF;
|
|
||||||
|
|
||||||
}
|
|
||||||
?>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1 +0,0 @@
|
||||||
<svg xmlns="http://www.w3.org/2000/svg" width="192" height="192" viewBox="0 0 1920 1920"><rect width="1800" height="1800" x="60" y="60" fill="#1872a2" rx="333"/><path fill="#febf19" d="M40 371q0-136 98-234 98-97 234-97h1178q136 0 233 97 97 98 97 234v1178q0 136-97 234-97 97-233 97H372q-137 0-234-97-97-98-98-234Zm1510-258h-296v442H666v373l587-4 1 441H666v442h884q107 0 182-75 75-74 74-183V371q0-108-74-182-74-75-182-76z"/></svg>
|
|
Before Width: | Height: | Size: 428 B |
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -64,7 +64,7 @@ class App
|
||||||
{
|
{
|
||||||
const PLATFORM = 'Friendica';
|
const PLATFORM = 'Friendica';
|
||||||
const CODENAME = 'Yellow Archangel';
|
const CODENAME = 'Yellow Archangel';
|
||||||
const VERSION = '2023.12';
|
const VERSION = '2024.03-rc';
|
||||||
|
|
||||||
// Allow themes to control internal parameters
|
// Allow themes to control internal parameters
|
||||||
// by changing App values in theme.php
|
// by changing App values in theme.php
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -150,7 +150,7 @@ HELP;
|
||||||
|
|
||||||
if ($valid) {
|
if ($valid) {
|
||||||
$this->out('3', false);
|
$this->out('3', false);
|
||||||
$image = new Image($imgdata, Images::getMimeTypeByData($imgdata));
|
$image = new Image($imgdata);
|
||||||
if (!$image->isValid()) {
|
if (!$image->isValid()) {
|
||||||
$this->out(' ' . $this->l10n->t('invalid image for id %s', $resourceid) . ' ', false);
|
$this->out(' ' . $this->l10n->t('invalid image for id %s', $resourceid) . ' ', false);
|
||||||
$valid = false;
|
$valid = false;
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
@ -104,12 +104,17 @@ HELP;
|
||||||
$actor = $this->getArgument(1);
|
$actor = $this->getArgument(1);
|
||||||
|
|
||||||
$apcontact = APContact::getByURL($actor);
|
$apcontact = APContact::getByURL($actor);
|
||||||
if (empty($apcontact) || !in_array($apcontact['type'], ['Application', 'Service'])) {
|
if (empty($apcontact)) {
|
||||||
$this->out($actor . ' is no relay actor');
|
$this->out($actor . ' wasn\'t found');
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($mode == 'add') {
|
if ($mode == 'add') {
|
||||||
|
if (!APContact::isRelay($apcontact)) {
|
||||||
|
$this->out($actor . ' is no relay actor');
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
if (Transmitter::sendRelayFollow($actor)) {
|
if (Transmitter::sendRelayFollow($actor)) {
|
||||||
$this->out('Successfully added ' . $actor);
|
$this->out('Successfully added ' . $actor);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
/**
|
/**
|
||||||
* @copyright Copyright (C) 2010-2023, the Friendica project
|
* @copyright Copyright (C) 2010-2024, the Friendica project
|
||||||
*
|
*
|
||||||
* @license GNU AGPL version 3 or any later version
|
* @license GNU AGPL version 3 or any later version
|
||||||
*
|
*
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user