Compare commits

..

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

5144 changed files with 107304 additions and 313833 deletions

View file

@ -1,32 +0,0 @@
# editorconfig tool configuration
# see http://editorconfig.org for docs
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = tab
trim_trailing_whitespace = true
insert_final_newline = true
quote_type = single
max_line_length = off
[*.js]
quote_type = double
ij_javascript_use_double_quotes = true
[*.yml]
indent_style = space
indent_size = 2
[*.xml]
indent_style = space
indent_size = 2
[*.json]
indent_style = space
indent_size = 2
[composer.json]
indent_size = 4

2
.gitattributes vendored
View file

@ -1,2 +0,0 @@
# Disable LF normalization for all files
* -text

24
.gitignore vendored
View file

@ -1,24 +0,0 @@
favicon.*
.htconfig.php
\#*
*.log
*.out
*.version*
favicon.*
*~
#ignore reports, should be generted with every build
report/
#ignore config files from eclipse, we don't want IDE files in our repository
.project
.buildpath
.externalToolBuilders
.settings
#ignore OSX .DS_Store files
.DS_Store
/nbproject/
#ignore smarty cache
/view/smarty3/compiled/

View file

@ -1,399 +0,0 @@
[main]
host = https://api.transifex.com
[o:Friendica:p:friendica:r:addon_advancedcontentfilter_messagespo]
file_filter = advancedcontentfilter/lang/<lang>/messages.po
source_file = advancedcontentfilter/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_blackout_messagespo]
file_filter = blackout/lang/<lang>/messages.po
source_file = blackout/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_blockem_messagespo]
file_filter = blockem/lang/<lang>/messages.po
source_file = blockem/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_blogger_messagespo]
file_filter = blogger/lang/<lang>/messages.po
source_file = blogger/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_buffer_messagespo]
file_filter = buffer/lang/<lang>/messages.po
source_file = buffer/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_buglink_messagespo]
file_filter = buglink/lang/<lang>/messages.po
source_file = buglink/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_catavatar_messagespo]
file_filter = catavatar/lang/<lang>/messages.po
source_file = catavatar/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_cookienotice_messagespo]
file_filter = cookienotice/lang/<lang>/messages.po
source_file = cookienotice/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_curweather_messagespo]
file_filter = curweather/lang/<lang>/messages.po
source_file = curweather/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_diaspora_messagespo]
file_filter = diaspora/lang/<lang>/messages.po
source_file = diaspora/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_dwpost_messagespo]
file_filter = dwpost/lang/<lang>/messages.po
source_file = dwpost/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_forumdirectory_messagespo]
file_filter = forumdirectory/lang/<lang>/messages.po
source_file = forumdirectory/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_fromapp_messagespo]
file_filter = fromapp/lang/<lang>/messages.po
source_file = fromapp/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_fromgplus_messagespo]
file_filter = fromgplus/lang/<lang>/messages.po
source_file = fromgplus/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_geonames_messagespo]
file_filter = geonames/lang/<lang>/messages.po
source_file = geonames/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_gnot_messagespo]
file_filter = gnot/lang/<lang>/messages.po
source_file = gnot/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_gravatar_messagespo]
file_filter = gravatar/lang/<lang>/messages.po
source_file = gravatar/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_group_text_messagespo]
file_filter = group_text/lang/<lang>/messages.po
source_file = group_text/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_ifttt_messagespo]
file_filter = ifttt/lang/<lang>/messages.po
source_file = ifttt/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_ijpost_messagespo]
file_filter = ijpost/lang/<lang>/messages.po
source_file = ijpost/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_impressum_messagespo]
file_filter = impressum/lang/<lang>/messages.po
source_file = impressum/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_infiniteimprobabilitydrive_messagespo]
file_filter = infiniteimprobabilitydrive/lang/<lang>/messages.po
source_file = infiniteimprobabilitydrive/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_irc_messagespo]
file_filter = irc/lang/<lang>/messages.po
source_file = irc/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_jappixmini_messagespo]
file_filter = jappixmini/lang/<lang>/messages.po
source_file = jappixmini/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_js_upload_messagespo]
file_filter = js_upload/lang/<lang>/messages.po
source_file = js_upload/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_krynn_messagespo]
file_filter = krynn/lang/<lang>/messages.po
source_file = krynn/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_langfilter_messagespo]
file_filter = langfilter/lang/<lang>/messages.po
source_file = langfilter/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_libertree_messagespo]
file_filter = libertree/lang/<lang>/messages.po
source_file = libertree/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_libravatar_messagespo]
file_filter = libravatar/lang/<lang>/messages.po
source_file = libravatar/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_ljpost_messagespo]
file_filter = ljpost/lang/<lang>/messages.po
source_file = ljpost/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_mailstream_messagespo]
file_filter = mailstream/lang/<lang>/messages.po
source_file = mailstream/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_mathjax_messagespo]
file_filter = mathjax/lang/<lang>/messages.po
source_file = mathjax/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_membersince_messagespo]
file_filter = membersince/lang/<lang>/messages.po
source_file = membersince/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_morechoice_messagespo]
file_filter = morechoice/lang/<lang>/messages.po
source_file = morechoice/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_morepokes_messagespo]
file_filter = morepokes/lang/<lang>/messages.po
source_file = morepokes/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_newmemberwidget_messagespo]
file_filter = newmemberwidget/lang/<lang>/messages.po
source_file = newmemberwidget/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_notifyall_messagespo]
file_filter = notifyall/lang/<lang>/messages.po
source_file = notifyall/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_notimeline_messagespo]
file_filter = notimeline/lang/<lang>/messages.po
source_file = notimeline/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_nsfw_messagespo]
file_filter = nsfw/lang/<lang>/messages.po
source_file = nsfw/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_numfriends_messagespo]
file_filter = numfriends/lang/<lang>/messages.po
source_file = numfriends/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_openstreetmap_messagespo]
file_filter = openstreetmap/lang/<lang>/messages.po
source_file = openstreetmap/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_pageheader_messagespo]
file_filter = pageheader/lang/<lang>/messages.po
source_file = pageheader/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_piwik_messagespo]
file_filter = piwik/lang/<lang>/messages.po
source_file = piwik/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_planets_messagespo]
file_filter = planets/lang/<lang>/messages.po
source_file = planets/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_public_server_messagespo]
file_filter = public_server/lang/<lang>/messages.po
source_file = public_server/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_pumpio_messagespo]
file_filter = pumpio/lang/<lang>/messages.po
source_file = pumpio/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_qcomment_messagespo]
file_filter = qcomment/lang/<lang>/messages.po
source_file = qcomment/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_randplace_messagespo]
file_filter = randplace/lang/<lang>/messages.po
source_file = randplace/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_remote_permissions_messagespo]
file_filter = remote_permissions/lang/<lang>/messages.po
source_file = remote_permissions/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_rendertime_messagespo]
file_filter = rendertime/lang/<lang>/messages.po
source_file = rendertime/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_securemail_messagespo]
file_filter = securemail/lang/<lang>/messages.po
source_file = securemail/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_showmore_messagespo]
file_filter = showmore/lang/<lang>/messages.po
source_file = showmore/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_smileybutton_messagespo]
file_filter = smileybutton/lang/<lang>/messages.po
source_file = smileybutton/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_startpage_messagespo]
file_filter = startpage/lang/<lang>/messages.po
source_file = startpage/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_statusnet_messagespo]
file_filter = statusnet/lang/<lang>/messages.po
source_file = statusnet/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_superblock_messagespo]
file_filter = superblock/lang/<lang>/messages.po
source_file = superblock/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_testdrive_messagespo]
file_filter = testdrive/lang/<lang>/messages.po
source_file = testdrive/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_tictac_messagespo]
file_filter = tictac/lang/<lang>/messages.po
source_file = tictac/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_tumblr_messagespo]
file_filter = tumblr/lang/<lang>/messages.po
source_file = tumblr/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_twitter_messagespo]
file_filter = twitter/lang/<lang>/messages.po
source_file = twitter/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_viewsrc_messagespo]
file_filter = viewsrc/lang/<lang>/messages.po
source_file = viewsrc/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_webrtc_messagespo]
file_filter = webrtc/lang/<lang>/messages.po
source_file = webrtc/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_widgets_messagespo]
file_filter = widgets/lang/<lang>/messages.po
source_file = widgets/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_windowsphonepush_messagespo]
file_filter = windowsphonepush/lang/<lang>/messages.po
source_file = windowsphonepush/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_wppost_messagespo]
file_filter = wppost/lang/<lang>/messages.po
source_file = wppost/lang/C/messages.po
source_lang = en
type = PO
[o:Friendica:p:friendica:r:addon_xmpp_messagespo]
file_filter = xmpp/lang/<lang>/messages.po
source_file = xmpp/lang/C/messages.po
source_lang = en
type = PO

View file

@ -1,76 +0,0 @@
skip_clone: true
steps:
clone_friendica_base:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git config --global --add safe.directory $CI_WORKSPACE
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
when:
event: pull_request
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_CLONE_URL addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
when:
event: pull_request
restore_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
restore: true
cache_key: '{{ .Repo.Name }}_phpcs_{{ arch }}_{{ os }}'
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
when:
event: pull_request
composer_install:
image: composer
commands:
- export COMPOSER_HOME=.composer
- ./bin/composer.phar run cs:install
when:
event: pull_request
rebuild_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
rebuild: true
cache_key: '{{ .Repo.Name }}_phpcs_{{ arch }}_{{ os }}'
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
when:
event: pull_request
phpstan:
image: friendicaci/php8.3:php8.3.3
commands:
- ./bin/composer.phar run phpstan;
check:
image: friendicaci/php-cs
commands:
- cd addon/
- if [ ! -z "$${CI_COMMIT_PULL_REQUEST}" ]; then
git fetch --no-tags origin ${CI_COMMIT_TARGET_BRANCH};
export CHANGED_FILES="$(git diff --name-status $(git merge-base FETCH_HEAD origin/${CI_COMMIT_TARGET_BRANCH})..${CI_COMMIT_SHA} | grep ^A | cut -f2 | sed -e "s/^/addon\\//")";
else
export CHANGED_FILES="$(git diff --name-status ${CI_COMMIT_SHA} | grep ^A | cut -f2 | sed -e "s/^/addon\\//")";
fi
- cd ../
- /check-php-cs.sh
when:
event: pull_request

View file

@ -1,115 +0,0 @@
# This prevents executing this pipeline at other servers than ci.friendi.ca
labels:
location: friendica
type: releaser
skip_clone: true
steps:
clone_friendica_base:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git config --global --add safe.directory $CI_WORKSPACE
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_CLONE_URL addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
restore_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
restore: true
cache_key: "{{ .Repo.Name }}_php7.4_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
composer_install:
image: friendicaci/php8.2:php8.2.16
commands:
- export COMPOSER_HOME=.composer
- composer validate
- composer install --no-dev --optimize-autoloader
volumes:
- /etc/hosts:/etc/hosts
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
create_artifacts:
image: debian
commands:
- apt-get update
- apt-get install bzip2
- mkdir ./build
- export VERSION="$(cat VERSION)"
- export RELEASE="friendica-addons-$VERSION"
- export ARTIFACT="$RELEASE.tar.gz"
- tar
--exclude='.tx'
--exclude='.git'
--exclude='.editorconfig'
--exclude='.gitattributes'
--exclude='.gitignore'
--exclude='.woodpecker'
--exclude='**/*/messages.po'
-cvzf ./build/$ARTIFACT addon/
- cd ./build
- sha256sum "$ARTIFACT" > "$ARTIFACT.sum256"
- chmod 664 ./*
- ls -lh
- cat "$ARTIFACT.sum256"
- sha256sum "$ARTIFACT"
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
sign_artifacts:
image: plugins/gpgsign
settings:
key:
from_secret: gpg_key
passphrase:
from_secret: gpg_password
files:
- build/*
exclude:
- build/*.sum256
detach_sign: true
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push
publish_artifacts:
image: alpine
commands:
- cp -fr build/* /tmp/friendica_files/
volumes:
- files:/tmp/friendica_files
when:
repo: friendica/friendica-addons
branch: [ develop, '*-rc' ]
event: push

View file

@ -1,40 +0,0 @@
skip_clone: true
steps:
clone_friendica_base:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git config --global --add safe.directory $CI_WORKSPACE
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
when:
event: pull_request
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_CLONE_URL addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
when:
event: pull_request
build_xgettext:
image: friendicaci/transifex
commands:
- /xgettext-addon.sh
when:
event: pull_request
check:
image: friendicaci/transifex
commands:
- /check-addons.sh
when:
event: pull_request
branches:
exclude: [ stable ]

View file

@ -1,118 +0,0 @@
matrix:
include:
- PHP_MAJOR_VERSION: 7.4
PHP_VERSION: 7.4.33
- PHP_MAJOR_VERSION: 8.0
PHP_VERSION: 8.0.30
- PHP_MAJOR_VERSION: 8.1
PHP_VERSION: 8.1.27
- PHP_MAJOR_VERSION: 8.2
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...)
labels:
location: opensocial
skip_clone: true
steps:
clone_friendica_base:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git config --global --add safe.directory $CI_WORKSPACE
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_CLONE_URL addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
restore_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
restore: true
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
composer_install:
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
commands:
- export COMPOSER_HOME=.composer
- ./bin/composer.phar validate
- ./bin/composer.phar install --prefer-dist
volumes:
- /etc/hosts:/etc/hosts
rebuild_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
rebuild: true
cache_key: "{{ .Repo.Name }}_php${PHP_MAJOR_VERSION}_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
test:
image: friendicaci/php${PHP_MAJOR_VERSION}:php${PHP_VERSION}
environment:
MYSQL_HOST: "mariadb"
MYSQL_PORT: "3306"
MYSQL_DATABASE: "test"
MYSQL_PASSWORD: "test"
MYSQL_USER: "test"
REDIS_HOST: "redis"
MEMCACHED_HOST: "memcached"
MEMCACHE_HOST: "memcached"
commands:
- 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
- mysql -h$MYSQL_HOST -P$MYSQL_PORT -p$MYSQL_PASSWORD -u$MYSQL_USER $MYSQL_DATABASE < database.sql
- if [ "${PHP_MAJOR_VERSION}" = "8.2" -a "${CI_REPO}" = "friendica/friendica-addons" ]; then
phpenmod xdebug;
export XDEBUG_MODE=coverage;
phpunit --configuration tests/phpunit-addons.xml --coverage-clover clover.xml;
else
phpunit --configuration tests/phpunit-addons.xml;
fi
codecov:
image: friendicaci/codecov
when:
matrix:
PHP_MAJOR_VERSION: 8.2
PHP_VERSION: 8.2.16
repo:
- friendica/friendica-addons
commands:
- codecov -R '.' -Z -f 'clover.xml'
environment:
CODECOV_TOKEN:
from_secret: codecov-token
services:
mariadb:
image: mariadb:latest
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "true"
MYSQL_DATABASE: "test"
MYSQL_PASSWORD: "test"
MYSQL_USER: "test"
memcached:
image: memcached
redis:
image: redis

View file

@ -1,108 +0,0 @@
# This prevents executing this pipeline at other servers than ci.friendi.ca
labels:
location: friendica
type: releaser
skip_clone: true
steps:
clone_friendica_base:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git config --global --add safe.directory $CI_WORKSPACE
- git clone https://github.com/friendica/friendica.git .
- git checkout $CI_COMMIT_BRANCH
when:
repo: friendica/friendica-addons
event: tag
clone_friendica_addon:
image: alpine/git
commands:
- git config --global user.email "no-reply@friendi.ca"
- git config --global user.name "Friendica"
- git clone $CI_REPO_CLONE_URL addon
- cd addon/
- git checkout $CI_COMMIT_BRANCH
- git fetch origin $CI_COMMIT_REF
- git merge $CI_COMMIT_SHA
when:
repo: friendica/friendica-addons
event: tag
restore_cache:
image: meltwater/drone-cache:dev
settings:
backend: "filesystem"
restore: true
cache_key: "{{ .Repo.Name }}_php7.4_{{ arch }}_{{ os }}"
archive_format: "gzip"
mount:
- '.composer'
volumes:
- /tmp/drone-cache:/tmp/cache
when:
repo: friendica/friendica-addons
event: tag
composer_install:
image: friendicaci/php8.2:php8.2.16
commands:
- export COMPOSER_HOME=.composer
- composer validate
- composer install --no-dev --optimize-autoloader
when:
repo: friendica/friendica-addons
event: tag
volumes:
- /etc/hosts:/etc/hosts
create_artifacts:
image: debian
commands:
- apt-get update
- apt-get install bzip2
- mkdir ./build
- export VERSION="$(cat VERSION)"
- export RELEASE="friendica-addons-$VERSION"
- export ARTIFACT="$RELEASE.tar.gz"
- tar
--exclude='.tx'
--exclude='.git'
--exclude='.editorconfig'
--exclude='.gitattributes'
--exclude='.gitignore'
--exclude='.woodpecker'
--exclude='**/*/messages.po'
-cvzf ./build/$ARTIFACT addon/
- cd ./build
- sha256sum "$ARTIFACT" > "$ARTIFACT.sum256"
- chmod 664 ./*
- ls -lh
- cat "$ARTIFACT.sum256"
- sha256sum "$ARTIFACT"
when:
repo: friendica/friendica-addons
event: tag
sign_artifacts:
image: plugins/gpgsign
settings:
key:
from_secret: gpg_key
passphrase:
from_secret: gpg_password
files:
- build/*
exclude:
- build/*.sum256
detach_sign: true
when:
repo: friendica/friendica-addons
event: tag
publish_artifacts:
image: alpine
commands:
- cp -fr build/* /tmp/friendica_files/
volumes:
- files:/tmp/friendica_files
when:
repo: friendica/friendica-addons
event: tag

View file

@ -1,18 +0,0 @@
*********************
* Install Using Git *
*********************
To install all addons using git, cd into your top level Friendica directory and
git clone https://github.com/friendica/friendica-addons.git addon
This will clone the entire repository in a directory called addon. They can now be activated in the addons section of your admin panel.
********************
* Install Manually *
********************
1. Download the archive (Download ZIP button) containing the addons.
2. Unzip the contents of the archive to your harddrive.
3. Upload the extracted directory and all it's contents to /path/to/friendica/addon. You will need to create the addon directory if this is the first addon you have installed.
4. Activate the addon in the addons section of your admin panel.

4
Makefile Executable file
View file

@ -0,0 +1,4 @@
all:
@./buildtgz

View file

@ -1,29 +0,0 @@
Addons for Friendica
====================
This repository is a collection of addons for the [Friendica Social Communications Server](https://github.com/friendica/friendica).
You can add these addons to the /addon directory of your Friendica installation do extend the functionality of your node.
After uploading the addons to your server, you need to activate the desired addons in the Admin panel. Addons not activated have no effect on your node.
## Issues
Please report any issues you have with addons of Friendica from this repository in [the main issue tracker of the project](https://github.com/friendica/friendica/issues).
## Connectors
Among these addons there are also the [connectors](https://github.com/friendica/friendica/blob/stable/doc/Connectors.md) for various other networks (e.g. Twitter, pump.io, Google+) that are needed for communication when the protocol is not supported by Friendica core (DFRN, OStatus and Diaspora).
For communication with contacts in networks supporting those (e.g. GNU social, Diaspora and red#matrix) you just need to access the page configuration in the Admin panel and enable them. For networks where communication is only possible the API access to a remote account, you need to activate the fitting connectors.
## Development
The addon interface of Friendica is very flexible and powerful, so if you are missing functionality, your chances are high it may be added with an addon.
See the [documentation](https://github.com/friendica/friendica/blob/stable/doc/Addons.md) for more information on the addon development.
## Translation
Addons can be translated like any other part of Friendica.
Translation for addons is done at [the Transifex Friendica page](https://www.transifex.com/Friendica/friendica/dashboard/).
Read more about the workflow in the [Friendica translation documentation](https://github.com/friendica/friendica/blob/stable/doc/translations.md#addon).

View file

@ -1,24 +0,0 @@
Copyright (c) 2011-2018 Hypolite Petovan
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer in
the documentation and/or other materials provided with the distribution.
* Neither the name of Friendica nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL FRIENDICA BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,11 +0,0 @@
Advanced Content Filter
=======================
Main author Hypolite Petovan.
## License
The _Advanced Content Filter_ addon is licensed under the [3-clause BSD license][2] see the LICENSE file in the addons directory.
[1]: http://opensource.org/licenses/BSD-3-Clause

File diff suppressed because one or more lines are too long

View file

@ -1,485 +0,0 @@
<?php
/**
* Name: Advanced content Filter
* Description: Expression-based content filter
* Version: 1.0
* Author: Hypolite Petovan <https://friendica.mrpetovan.com/profile/hypolite>
* Maintainer: Hypolite Petovan <https://friendica.mrpetovan.com/profile/hypolite>
*
* Copyright (c) 2018 Hypolite Petovan
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* * copyright notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the distribution.
* * Neither the name of Friendica nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL FRIENDICA BE LIABLE FOR ANY DIRECT,
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
use Friendica\BaseModule;
use Friendica\Content\Text\Markdown;
use Friendica\Core\Hook;
use Friendica\Core\Renderer;
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
use Friendica\Model\Post;
use Friendica\Model\Tag;
use Friendica\Model\User;
use Friendica\Module\Security\Login;
use Friendica\Network\HTTPException;
use Friendica\Util\DateTimeFormat;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
use Symfony\Component\ExpressionLanguage;
require_once __DIR__ . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
function advancedcontentfilter_install()
{
Hook::register('dbstructure_definition' , __FILE__, 'advancedcontentfilter_dbstructure_definition');
Hook::register('prepare_body_content_filter', __FILE__, 'advancedcontentfilter_prepare_body_content_filter');
Hook::register('addon_settings' , __FILE__, 'advancedcontentfilter_addon_settings');
Hook::add('dbstructure_definition' , __FILE__, 'advancedcontentfilter_dbstructure_definition');
DBStructure::performUpdate();
DI::logger()->notice('installed advancedcontentfilter');
}
/*
* Hooks
*/
function advancedcontentfilter_dbstructure_definition(&$database)
{
$database['advancedcontentfilter_rules'] = [
'comment' => 'Advancedcontentfilter addon rules',
'fields' => [
'id' => ['type' => 'int unsigned', 'not null' => '1', 'extra' => 'auto_increment', 'primary' => '1', 'comment' => 'Auto incremented rule id'],
'uid' => ['type' => 'int unsigned', 'not null' => '1', 'comment' => 'Owner user id'],
'name' => ['type' => 'varchar(255)', 'not null' => '1', 'comment' => 'Rule name'],
'expression' => ['type' => 'mediumtext' , 'not null' => '1', 'comment' => 'Expression text'],
'serialized' => ['type' => 'mediumtext' , 'not null' => '1', 'comment' => 'Serialized parsed expression'],
'active' => ['type' => 'boolean' , 'not null' => '1', 'default' => '1', 'comment' => 'Whether the rule is active or not'],
'created' => ['type' => 'datetime' , 'not null' => '1', 'default' => DBA::NULL_DATETIME, 'comment' => 'Creation date'],
],
'indexes' => [
'PRIMARY' => ['id'],
'uid_active' => ['uid', 'active'],
]
];
}
/**
* @param array $item Prepared by either Model\Item::prepareBody or advancedcontentfilter_prepare_item_row
* @return array
*/
function advancedcontentfilter_get_filter_fields(array $item)
{
$vars = [];
// Convert the language JSON text into a filterable format
if (!empty($item['language']) && ($languages = json_decode($item['language'], true))) {
foreach ($languages as $key => $value) {
$vars['language_' . strtolower($key)] = $value;
}
}
foreach ($item as $key => $value) {
$vars[str_replace('-', '_', $key)] = $value;
}
ksort($vars);
return $vars;
}
function advancedcontentfilter_prepare_body_content_filter(&$hook_data)
{
static $expressionLanguage;
if (is_null($expressionLanguage)) {
$expressionLanguage = new ExpressionLanguage\ExpressionLanguage();
}
if (!DI::userSession()->getLocalUserId()) {
return;
}
$vars = advancedcontentfilter_get_filter_fields($hook_data['item']);
$rules = DI::cache()->get('rules_' . DI::userSession()->getLocalUserId());
if (!isset($rules)) {
$rules = DBA::toArray(DBA::select(
'advancedcontentfilter_rules',
['name', 'expression', 'serialized'],
['uid' => DI::userSession()->getLocalUserId(), 'active' => true]
));
DI::cache()->set('rules_' . DI::userSession()->getLocalUserId(), $rules);
}
if ($rules) {
foreach($rules as $rule) {
try {
$serializedParsedExpression = new ExpressionLanguage\SerializedParsedExpression(
$rule['expression'],
$rule['serialized']
);
// The error suppression operator is used because of potentially broken user-supplied regular expressions
$found = (bool) @$expressionLanguage->evaluate($serializedParsedExpression, $vars);
} catch (Exception $e) {
$found = false;
}
if ($found) {
$hook_data['filter_reasons'][] = DI::l10n()->t('Filtered by rule: %s', $rule['name']);
break;
}
}
}
}
function advancedcontentfilter_addon_settings(array &$data)
{
if (!DI::userSession()->getLocalUserId()) {
return;
}
$data = [
'addon' => 'advancedcontentfilter',
'title' => DI::l10n()->t('Advanced Content Filter'),
'href' => 'advancedcontentfilter',
];
}
/*
* Module
*/
/**
* This is a statement rather than an actual function definition. The simple
* existence of this method is checked to figure out if the addon offers a
* module.
*/
function advancedcontentfilter_module() {}
function advancedcontentfilter_init()
{
if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'api') {
$slim = \Slim\Factory\AppFactory::create();
/**
* The routing middleware should be added before the ErrorMiddleware
* Otherwise exceptions thrown from it will not be handled
*/
$slim->addRoutingMiddleware();
$slim->addErrorMiddleware(true, true, true, DI::logger());
// register routes
$slim->group('/advancedcontentfilter/api', function (\Slim\Routing\RouteCollectorProxy $app) {
$app->group('/rules', function (\Slim\Routing\RouteCollectorProxy $app) {
$app->get('', 'advancedcontentfilter_get_rules');
$app->post('', 'advancedcontentfilter_post_rules');
$app->get('/{id}', 'advancedcontentfilter_get_rules_id');
$app->put('/{id}', 'advancedcontentfilter_put_rules_id');
$app->delete('/{id}', 'advancedcontentfilter_delete_rules_id');
});
$app->group('/variables', function (\Slim\Routing\RouteCollectorProxy $app) {
$app->get('/{guid}', 'advancedcontentfilter_get_variables_guid');
});
});
$slim->run();
exit;
}
}
function advancedcontentfilter_content()
{
if (!DI::userSession()->getLocalUserId()) {
return Login::form('/' . implode('/', DI::args()->getArgv()));
}
if (DI::args()->getArgc() > 1 && DI::args()->getArgv()[1] == 'help') {
$user = User::getById(DI::userSession()->getLocalUserId());
$lang = $user['language'];
$default_dir = 'addon/advancedcontentfilter/doc/';
$help_file = 'advancedcontentfilter.md';
$help_path = $default_dir . $help_file;
if (file_exists($default_dir . $lang . '/' . $help_file)) {
$help_path = $default_dir . $lang . '/' . $help_file;
}
$content = file_get_contents($help_path);
$html = Markdown::convert($content, false);
$html = str_replace('code>', 'key>', $html);
return $html;
} else {
$t = Renderer::getMarkupTemplate('settings.tpl', 'addon/advancedcontentfilter/');
return Renderer::replaceMacros($t, [
'$messages' => [
'backtosettings' => DI::l10n()->t('Back to Addon Settings'),
'title' => DI::l10n()->t('Advanced Content Filter'),
'add_a_rule' => DI::l10n()->t('Add a Rule'),
'help' => DI::l10n()->t('Help'),
'intro' => DI::l10n()->t('Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'),
'your_rules' => DI::l10n()->t('Your rules'),
'no_rules' => DI::l10n()->t('You have no rules yet! Start adding one by clicking on the button above next to the title.'),
'disabled' => DI::l10n()->t('Disabled'),
'enabled' => DI::l10n()->t('Enabled'),
'disable_this_rule' => DI::l10n()->t('Disable this rule'),
'enable_this_rule' => DI::l10n()->t('Enable this rule'),
'edit_this_rule' => DI::l10n()->t('Edit this rule'),
'edit_the_rule' => DI::l10n()->t('Edit the rule'),
'save_this_rule' => DI::l10n()->t('Save this rule'),
'delete_this_rule' => DI::l10n()->t('Delete this rule'),
'rule' => DI::l10n()->t('Rule'),
'close' => DI::l10n()->t('Close'),
'addtitle' => DI::l10n()->t('Add new rule'),
'rule_name' => DI::l10n()->t('Rule Name'),
'rule_expression' => DI::l10n()->t('Rule Expression'),
'cancel' => DI::l10n()->t('Cancel'),
],
'$current_theme' => DI::appHelper()->getCurrentTheme(),
'$rules' => DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()])),
'$form_security_token' => BaseModule::getFormSecurityToken()
]);
}
}
/*
* Common functions
*/
function advancedcontentfilter_build_fields($data)
{
$fields = [];
if (!empty($data['name'])) {
$fields['name'] = $data['name'];
}
if (!empty($data['expression'])) {
// Using a dummy item to validate the field existence
$condition = ["(`uid` = ? OR `uid` = 0)", DI::userSession()->getLocalUserId()];
$params = ['order' => ['uid' => true]];
$item_row = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), [], $condition, $params);
if (!DBA::isResult($item_row)) {
throw new HTTPException\NotFoundException(DI::l10n()->t('This addon requires this node having at least one post'));
}
$expressionLanguage = new ExpressionLanguage\ExpressionLanguage();
$parsedExpression = $expressionLanguage->parse(
$data['expression'],
array_keys(advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row)))
);
$serialized = serialize($parsedExpression->getNodes());
$fields['expression'] = $data['expression'];
$fields['serialized'] = $serialized;
}
if (isset($data['active'])) {
$fields['active'] = intval($data['active']);
} else {
$fields['active'] = 1;
}
return $fields;
}
/*
* API
*/
function advancedcontentfilter_get_rules(ServerRequestInterface $request, ResponseInterface $response): ResponseInterface
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
$rules = DBA::toArray(DBA::select('advancedcontentfilter_rules', [], ['uid' => DI::userSession()->getLocalUserId()]));
$response->getBody()->write(json_encode($rules));
return $response->withHeader('Content-Type', 'application/json');
}
function advancedcontentfilter_get_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
$rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()]);
$response->getBody()->write(json_encode($rule));
return $response->withHeader('Content-Type', 'application/json');
}
function advancedcontentfilter_post_rules(ServerRequestInterface $request, ResponseInterface $response)
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
if (!BaseModule::checkFormSecurityToken()) {
throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.'));
}
$data = json_decode($request->getBody(), true);
try {
$fields = advancedcontentfilter_build_fields($data);
} catch (Exception $e) {
throw new HTTPException\BadRequestException($e->getMessage(), $e);
}
if (empty($fields['name']) || empty($fields['expression'])) {
throw new HTTPException\BadRequestException(DI::l10n()->t('The rule name and expression are required.'));
}
$fields['uid'] = DI::userSession()->getLocalUserId();
$fields['created'] = DateTimeFormat::utcNow();
if (!DBA::insert('advancedcontentfilter_rules', $fields)) {
throw new HTTPException\ServiceUnavailableException(DBA::errorMessage());
}
$rule = DBA::selectFirst('advancedcontentfilter_rules', [], ['id' => DBA::lastInsertId()]);
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully added'), 'rule' => $rule]));
return $response->withHeader('Content-Type', 'application/json');
}
function advancedcontentfilter_put_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
if (!BaseModule::checkFormSecurityToken()) {
throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.'));
}
if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()])) {
throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.'));
}
$data = json_decode($request->getBody(), true);
try {
$fields = advancedcontentfilter_build_fields($data);
} catch (Exception $e) {
throw new HTTPException\BadRequestException($e->getMessage(), $e);
}
if (!DBA::update('advancedcontentfilter_rules', $fields, ['id' => $args['id']])) {
throw new HTTPException\ServiceUnavailableException(DBA::errorMessage());
}
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully updated')]));
return $response->withHeader('Content-Type', 'application/json');
}
function advancedcontentfilter_delete_rules_id(ServerRequestInterface $request, ResponseInterface $response, $args)
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
if (!BaseModule::checkFormSecurityToken()) {
throw new HTTPException\BadRequestException(DI::l10n()->t('Invalid form security token, please refresh the page.'));
}
if (!DBA::exists('advancedcontentfilter_rules', ['id' => $args['id'], 'uid' => DI::userSession()->getLocalUserId()])) {
throw new HTTPException\NotFoundException(DI::l10n()->t('Rule doesn\'t exist or doesn\'t belong to you.'));
}
if (!DBA::delete('advancedcontentfilter_rules', ['id' => $args['id']])) {
throw new HTTPException\ServiceUnavailableException(DBA::errorMessage());
}
DI::cache()->delete('rules_' . DI::userSession()->getLocalUserId());
$response->getBody()->write(json_encode(['message' => DI::l10n()->t('Rule successfully deleted')]));
return $response->withHeader('Content-Type', 'application/json');
}
function advancedcontentfilter_get_variables_guid(ServerRequestInterface $request, ResponseInterface $response, $args)
{
if (!DI::userSession()->getLocalUserId()) {
throw new HTTPException\UnauthorizedException(DI::l10n()->t('You must be logged in to use this method'));
}
if (!isset($args['guid'])) {
throw new HTTPException\BadRequestException(DI::l10n()->t('Missing argument: guid.'));
}
$condition = ["`guid` = ? AND (`uid` = ? OR `uid` = 0)", $args['guid'], DI::userSession()->getLocalUserId()];
$params = ['order' => ['uid' => true]];
$item_row = Post::selectFirstForUser(DI::userSession()->getLocalUserId(), [], $condition, $params);
if (!DBA::isResult($item_row)) {
throw new HTTPException\NotFoundException(DI::l10n()->t('Unknown post with guid: %s', $args['guid']));
}
$return = advancedcontentfilter_get_filter_fields(advancedcontentfilter_prepare_item_row($item_row));
$response->getBody()->write(json_encode(['variables' => str_replace('\\\'', '\'', var_export($return, true))]));
return $response->withHeader('Content-Type', 'application/json');
}
/**
* This mimimcs the processing performed in Model\Item::prepareBody
*
* @param array $item_row
* @return array
* @throws HTTPException\InternalServerErrorException
* @throws ImagickException
*/
function advancedcontentfilter_prepare_item_row(array $item_row): array
{
$tags = Tag::populateFromItem($item_row);
$item_row['tags'] = $tags['tags'];
$item_row['hashtags'] = $tags['hashtags'];
$item_row['mentions'] = $tags['mentions'];
$item_row['attachments'] = DI::postMediaRepository()->splitAttachments($item_row['uri-id']);
return $item_row;
}

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

View file

@ -1,27 +0,0 @@
{
"name": "friendica-addons/advancedcontentfilter",
"description": "Advanced Content Filter addon for Friendica",
"type": "friendica-addon",
"authors": [
{
"name": "Hypolite Petovan",
"email": "hypolite@mrpetovan.com",
"homepage": "https://friendica.mrpetovan.com/profile/hypolite",
"role": "Developer"
}
],
"require": {
"slim/slim": "^4",
"symfony/expression-language": "^3.4"
},
"license": "3-clause BSD license",
"minimum-stability": "stable",
"config": {
"platform": {
"php": "7.4"
},
"optimize-autoloader": true,
"autoloader-suffix": "AdvancedContentFilterAddon",
"preferred-install": "dist"
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,512 +0,0 @@
<style>
.advancedcontentfilter-content-wrapper {
min-height: calc(100vh - 150px);
padding: 15px;
padding-bottom: 20px;
margin-bottom: 20px;
border: none;
/*background-color: #fff;*/
background-color: rgba(255,255,255,0.95);
border-radius: 4px;
position: relative;
/*overflow: hidden;*/
color: #555;
box-shadow: 0 0 3px #dadada;
-webkit-box-shadow: 0 0 3px #dadada;
-moz-box-shadow: 0 0 3px #dadada;
}
</style>
<a href="advancedcontentfilter">🔙 Back to Advanced Content Filter Settings</a>
# Advanced Content Filter Help
The advanced Content Filter uses Symfony's Expression Language.
This help page includes a summary of [the Symfony's Expression Language documentation page.](https://symfony.com/doc/current/components/expression_language/syntax.html)
## Basics
The advanced content filter matches each post that is about to be displayed against each enabled rule you set.
A rule is a boolean expression that should return either `true` or `false` depending on post variables.
If the expression using a post variables returns `true`, the post will be collapsed and the matching rule name will be displayed above the collapsed content.
A post will be collapsed if at least one rule matches, but all matching rule names will be displayed above the collapsed content.
## Examples
1. Collapse posts with specific domains `body matches "/\\.example\\.com/"`
2. Collapse posts that contains the words `body matches "/Guten Morgen/"`
3. Collapse posts with the word facebook that have a space in front and after the word `body matches "//s facebook/s /"`
4. Collapse posts that contains more than 1 image `body matches "/(?:(?:(?:\\[url(?:=.*)?\\])?\\[img(?:=.*)?\\].*\\[\\/img\\]\\s*(?:\\[\\/url\\])?)\\s*){2}/"`
## Expression Syntax
### Supported Literals
- **strings** - single and double quotes (e.g. `'hello'`).
- **numbers** - e.g. `103`.
- **arrays** - using JSON-like notation (e.g. `[1, 2]`).
- **hashes** - using JSON-like notation (e.g. `{ foo: 'bar' }`).
- **booleans** - `true` and `false`.
- **null** - `null`.
A backslash (``\``) must be escaped by 2 backslashes (``\\``) in a string and 4 backslashes (``\\\\``) in a regex::
`"a\\b" matches "/^a\\\\b$/"`
Control characters (e.g. ``\n``) in expressions are replaced with whitespace. To avoid this, escape the sequence with a single backslash (e.g. ``\\n``).
### Supported Operators
The component comes with a lot of operators:
#### Arithmetic Operators
* ``+`` (addition)
* ``-`` (subtraction)
* ``*`` (multiplication)
* ``/`` (division)
* ``%`` (modulus)
* ``**`` (pow)
#### Bitwise Operators
* ``&`` (and)
* ``|`` (or)
* ``^`` (xor)
#### Comparison Operators
* ``==`` (equal)
* ``===`` (identical)
* ``!=`` (not equal)
* ``!==`` (not identical)
* ``<`` (less than)
* ``>`` (greater than)
* ``<=`` (less than or equal to)
* ``>=`` (greater than or equal to)
* ``matches`` (regex match)
To test if a string does *not* match a regex, use the logical ``not`` operator in combination with the ``matches`` operator:
`not ("foo" matches "/bar/")`
You must use parenthesis because the unary operator ``not`` has precedence over the binary operator ``matches``.
#### Logical Operators
* ``not`` or ``!``
* ``and`` or ``&&``
* ``or`` or ``||``
#### String Operators
* ``~`` (concatenation)
For example: ``firstName ~ " " ~ lastName``
#### Array Operators
* ``in`` (contain)
* ``not in`` (does not contain)
For example: ``user.group in ["human_resources", "marketing"]``
#### Numeric Operators
* ``..`` (range)
For example: ``user.age in 18..45``
#### Ternary Operators
* ``foo ? 'yes' : 'no'``
* ``foo ?: 'no'`` (equal to ``foo ? foo : 'no'``)
* ``foo ? 'yes'`` (equal to ``foo ? 'yes' : ''``)
### Supported variables
Here are a sample of the available variables you can use in your expressions.
You can also retrieve the variables of a specific post by pasting its URL below the rule list.
<table class="table-bordered table-condensed table-striped">
<thead>
<tr>
<th>Variable</th>
<th>Type</th>
<th>Sample Value</th>
</tr>
</thead>
<tbody>
<tr>
<th>author_id</th>
<td>number</td>
<td>6</td>
</tr>
<tr>
<th>author_link</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/profile/hypolite</td>
</tr>
<tr>
<th>author_name</th>
<td>string</td>
<td>Hypolite Petovan</td>
</tr>
<tr>
<th>author_avatar</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
</tr>
<tr>
<th>owner_id</th>
<td>number</td>
<td>6</td>
</tr>
<tr>
<th>owner_link</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/profile/hypolite</td>
</tr>
<tr>
<th>owner_name</th>
<td>string</td>
<td>Hypolite Petovan</td>
</tr>
<tr>
<th>owner_avatar</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/photo/41084997915a94a8c83cc39708500207-5.png</td>
</tr>
<tr>
<th>contact_id</th>
<td>number</td>
<td>1</td>
</tr>
<tr>
<th>uid</th>
<td>number</td>
<td>1</td>
</tr>
<tr>
<th>id</th>
<td>number</td>
<td>791875</td>
</tr>
<tr>
<th>parent</th>
<td>number</td>
<td>791875</td>
</tr>
<tr>
<th>uri</th>
<td>string</td>
<td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
</tr>
<tr>
<th>thr_parent</th>
<td>string</td>
<td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
</tr>
<tr>
<th>parent_uri</th>
<td>string</td>
<td>urn:X-dfrn:friendica.mrpetovan.com:1:twit:978740198937907200</td>
</tr>
<tr>
<th>content_warning</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>commented</th>
<td>date</td>
<td>2018-03-27 21:10:18</td>
</tr>
<tr>
<th>created</th>
<td>date</td>
<td>2018-03-27 21:10:18</td>
</tr>
<tr>
<th>edited</th>
<td>date</td>
<td>2018-03-27 21:10:18</td>
</tr>
<tr>
<th>received</th>
<td>date</td>
<td>2018-03-27 21:10:18</td>
</tr>
<tr>
<th>verb</th>
<td>string</td>
<td>http://activitystrea.ms/schema/1.0/post</td>
</tr>
<tr>
<th>object_type</th>
<td>string</td>
<td>http://activitystrea.ms/schema/1.0/bookmark</td>
</tr>
<tr>
<th>postopts</th>
<td>string</td>
<td>twitter&lang=pidgin;0.24032407407407:english;0.225:french;0.18055555555556</td>
</tr>
<tr>
<th>plink</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/display/735a2029995abab33a5c006052376776</td>
</tr>
<tr>
<th>guid</th>
<td>string</td>
<td>735a2029995abab33a5c006052376776</td>
</tr>
<tr>
<th>wall</th>
<td>boolean</td>
<td>1</td>
</tr>
<tr>
<th>private</th>
<td>boolean</td>
<td>0</td>
</tr>
<tr>
<th>starred</th>
<td>boolean</td>
<td>0</td>
</tr>
<tr>
<th>title</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>body</th>
<td>string</td>
<td>Over-compensation #[url=https://friendica.mrpetovan.com/search?tag=Street]Street[/url] #[url=https://friendica.mrpetovan.com/search?tag=Night]Night[/url] #[url=https://friendica.mrpetovan.com/search?tag=CarLights]CarLights[/url] #[url=https://friendica.mrpetovan.com/search?tag=Jeep]Jeep[/url] #[url=https://friendica.mrpetovan.com/search?tag=NoPeople]NoPeople[/url] #[url=https://friendica.mrpetovan.com/search?tag=Close]Close[/url]-up
[attachment type='link' url='https://www.eyeem.com/p/120800309' title='Over-compensation Street Night Car Lights Jeep No | EyeEm' image='https://cdn.eyeem.com/thumb/b2f019738cbeef06e2f8c9517c6286a8adcd3a00-1522184820641/640/480']Photo by @[url=https://twitter.com/MrPetovan]MrPetovan[/url][/attachment]</td>
</tr>
<tr>
<th>file</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>event_id</th>
<td>number</td>
<td>null
<tr>
<th>location</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>coord</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>app</th>
<td>string</td>
<td>EyeEm</td>
</tr>
<tr>
<th>attach</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>rendered_hash</th>
<td>string</td>
<td>b70abdea8b362dc5dcf63e1b2836ad89</td>
</tr>
<tr>
<th>rendered_html</th>
<td>string</td>
<td>
Over-compensation #&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" class="tag" title="Street"&gt;Street&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" class="tag" title="Night"&gt;Night&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" class="tag" title="CarLights"&gt;CarLights&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" class="tag" title="Jeep"&gt;Jeep&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" class="tag" title="NoPeople"&gt;NoPeople&lt;/a&gt; #&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" class="tag" title="Close"&gt;Close&lt;/a&gt;-up &lt;div class="type-link"&gt;&lt;a href="https://www.eyeem.com/p/120800309" target="_blank" rel="noopener noreferrer"&gt;&lt;img src="https://friendica.mrpetovan.com/proxy/bb/aHR0cHM6Ly9jZG4uZXllZW0uY29tL3RodW1iL2IyZjAxOTczOGNiZWVmMDZlMmY4Yzk1MTdjNjI4NmE4YWRjZDNhMDAtMTUyMjE4NDgyMDY0MS82NDAvNDgw" alt="" title="Over-compensation Street Night Car Lights Jeep No | EyeEm" class="attachment-image"&gt;&lt;/a&gt;&lt;br&gt;&lt;h4&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;Over-compensation Street Night Car Lights Jeep No | EyeEm&lt;/a&gt;&lt;/h4&gt;&lt;blockquote&gt;Photo by @&lt;a href="https://twitter.com/MrPetovan" class="userinfo mention" title="MrPetovan"&gt;MrPetovan&lt;/a&gt;&lt;/blockquote&gt;&lt;sup&gt;&lt;a href="https://www.eyeem.com/p/120800309"&gt;www.eyeem.com&lt;/a&gt;&lt;/sup&gt;&lt;/div&gt;
</td>
</tr>
<tr>
<th>object</th>
<td>string</td>
<td>{"created_at":"Tue Mar 27 21:07:02 +0000 2018","id":978740198937907200,"id_str":"978740198937907200","full_text":"Over-compensation #Street #Night #CarLights #Jeep #NoPeople #Close-up https:\/\/t.co\/7w4ua13QA7","truncated":false,"display_text_range":[0,93],"entities":{"hashtags":[{"text":"Street","indices":[18,25]},{"text":"Night","indices":[26,32]},{"text":"CarLights","indices":[33,43]},{"text":"Jeep","indices":[44,49]},{"text":"NoPeople","indices":[50,59]},{"text":"Close","indices":[60,66]}],"symbols":[],"user_mentions":[],"urls":[{"url":"https:\/\/t.co\/7w4ua13QA7","expanded_url":"http:\/\/EyeEm.com\/p\/120800309","display_url":"EyeEm.com\/p\/120800309","indices":[70,93]}]},"source":"&lt;a href=\"http:\/\/www.eyeem.com\" rel=\"nofollow\"&gt;EyeEm&lt;\/a&gt;","in_reply_to_status_id":null,"in_reply_to_status_id_str":null,"in_reply_to_user_id":null,"in_reply_to_user_id_str":null,"in_reply_to_screen_name":null,"user":{"id":403748896,"id_str":"403748896","name":"\ud83d\udc30yp\ud83e\udd5ali\u271d\ufe0fe Pet\ud83e\udd5avan","screen_name":"MrPetovan","location":"NYC","description":"White male form of milquetoast. Avatar by @DearMsDear inspired by @TSG_LAB.\n\nFriendica\/Diaspora\/Mastodon: hypolite@friendica.mrpetovan.com","url":"https:\/\/t.co\/PcARi5OhQO","entities":{"url":{"urls":[{"url":"https:\/\/t.co\/PcARi5OhQO","expanded_url":"https:\/\/mrpetovan.com","display_url":"mrpetovan.com","indices":[0,23]}]},"description":{"urls":[]}},"protected":false,"followers_count":182,"friends_count":146,"listed_count":15,"created_at":"Wed Nov 02 23:13:14 +0000 2011","favourites_count":45826,"utc_offset":-14400,"time_zone":"Eastern Time (US &amp; Canada)","geo_enabled":false,"verified":false,"statuses_count":15554,"lang":"en","contributors_enabled":false,"is_translator":false,"is_translation_enabled":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_image_url_https":"https:\/\/pbs.twimg.com\/profile_background_images\/370213187\/fond_twitter_mrpetovan.png","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/968008546322395136\/6qLCiu0o_normal.jpg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/403748896\/1464321684","profile_link_color":"0084B4","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"000000","profile_use_background_image":true,"has_extended_profile":true,"default_profile":false,"default_profile_image":false,"following":false,"follow_request_sent":false,"notifications":false,"translator_type":"none"},"geo":null,"coordinates":null,"place":null,"contributors":null,"is_quote_status":false,"retweet_count":0,"favorite_count":0,"favorited":false,"retweeted":false,"possibly_sensitive":false,"lang":"en"}</td>
</tr>
<tr>
<th>allow_cid</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>allow_gid</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>deny_cid</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>deny_gid</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>item_id</th>
<td>number</td>
<td>791875</td>
</tr>
<tr>
<th>item_network</th>
<td>string</td>
<td>dfrn</td>
</tr>
<tr>
<th>author_thumb</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
</tr>
<tr>
<th>owner_thumb</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/photo/0cb3d7231eb751139d7d309c7c686c49-5.png?ts=1522941604</td>
</tr>
<tr>
<th>network</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>url</th>
<td>string</td>
<td>https://friendica.mrpetovan.com/profile/hypolite</td>
</tr>
<tr>
<th>name</th>
<td>string</td>
<td>Hypolite Petovan</td>
</tr>
<tr>
<th>writable</th>
<td>boolean</td>
<td>0</td>
</tr>
<tr>
<th>self</th>
<td>boolean</td>
<td>1</td>
</tr>
<tr>
<th>cid</th>
<td>number</td>
<td>1</td>
</tr>
<tr>
<th>alias</th>
<td>string</td>
<td></td>
</tr>
<tr>
<th>event_created</th>
<td>date</td>
<td>null</td>
</tr>
<tr>
<th>event_edited</th>
<td>date</td>
<td>null</td>
</tr>
<tr>
<th>event_start</th>
<td>date</td>
<td>null</td>
</tr>
<tr>
<th>event_finish</th>
<td>date</td>
<td>null</td>
</tr>
<tr>
<th>event_summary</th>
<td>string</td>
<td>null</td>
</tr>
<tr>
<th>event_desc</th>
<td>string</td>
<td>null</td>
</tr>
<tr>
<th>event_location</th>
<td>string</td>
<td>null</td>
</tr>
<tr>
<th>event_type</th>
<td>string</td>
<td>null</td>
</tr>
<tr>
<th>event_nofinish</th>
<td>string</td>
<td>null</td>
</tr>
<tr>
<th>event_ignore</th>
<td>boolean</td>
<td>null</td>
</tr>
<tr>
<th>pagedrop</th>
<td>string</td>
<td>true</td>
</tr>
<tr>
<th>tags</th>
<td>list</td>
<td>
<ol start="0">
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank" rel="noopener noreferrer"&gt;street&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank" rel="noopener noreferrer"&gt;night&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank" rel="noopener noreferrer"&gt;carlights&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank" rel="noopener noreferrer"&gt;jeep&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank" rel="noopener noreferrer"&gt;nopeople&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank" rel="noopener noreferrer"&gt;close&lt;/a&gt;</li>
<li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank" rel="noopener noreferrer"&gt;mrpetovan&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank" rel="noopener noreferrer"&gt;close-up&lt;/a&gt;</li>
</ol>
</td>
</tr>
<tr>
<th>hashtags</th>
<td>list</td>
<td>
<ol start="0">
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Street" target="_blank" rel="noopener noreferrer"&gt;street&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Night" target="_blank" rel="noopener noreferrer"&gt;night&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=CarLights" target="_blank" rel="noopener noreferrer"&gt;carlights&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Jeep" target="_blank" rel="noopener noreferrer"&gt;jeep&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=NoPeople" target="_blank" rel="noopener noreferrer"&gt;nopeople&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close" target="_blank" rel="noopener noreferrer"&gt;close&lt;/a&gt;</li>
<li>#&lt;a href="https://friendica.mrpetovan.com/search?tag=Close-up" target="_blank" rel="noopener noreferrer"&gt;close-up&lt;/a&gt;</li>
</ol>
</td>
</tr>
<tr>
<th>mentions</th>
<td>string</td>
<td>
<ol start="0">
<li>@&lt;a href="https://twitter.com/MrPetovan" target="_blank" rel="noopener noreferrer"&gt;mrpetovan&lt;/a&gt;</li>
</ol>
</td>
</tr>
</tbody>
</table>

View file

@ -1,161 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr ""
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr ""
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr ""
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr ""
#: advancedcontentfilter.php:227
msgid "Help"
msgstr ""
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have "
"a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr ""
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next "
"to the title."
msgstr ""
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr ""
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr ""
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr ""
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr ""
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr ""
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr ""
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr ""
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr ""
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr ""
#: advancedcontentfilter.php:240
msgid "Close"
msgstr ""
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr ""
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr ""
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr ""
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr ""
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr ""
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr ""
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr ""
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr ""
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr ""
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr ""
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr ""
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr ""
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr ""
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr ""
#: src/middlewares.php:49
msgid "Method not found"
msgstr ""

View file

@ -1,166 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Farida Khalaf <faridakhalaf@hotmail.com>, 2021
# abidin toumi <abidin24@tutanota.com>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-07-25 13:15+0000\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: abidin toumi <abidin24@tutanota.com>, 2021\n"
"Language-Team: Arabic (https://www.transifex.com/Friendica/teams/12172/ar/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: advancedcontentfilter.php:153
#, php-format
msgid "Filtered by rule: %s"
msgstr "رشّح حسب القاعدة: %s"
#: advancedcontentfilter.php:167 advancedcontentfilter.php:224
msgid "Advanced Content Filter"
msgstr "ترشيح المحتوى المتقدم"
#: advancedcontentfilter.php:223
msgid "Back to Addon Settings"
msgstr "الرجوع إلى إعدادات الإضافات"
#: advancedcontentfilter.php:225
msgid "Add a Rule"
msgstr "أضف قاعدة"
#: advancedcontentfilter.php:226
msgid "Help"
msgstr "مساعدة"
#: advancedcontentfilter.php:227
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"إضافة وإدارة قواعد ترشيح المحتوى الشخصية هنا.\n"
" القواعد لها اسم وتعبير سيتم مطابقته مع بيانات المشاركة. للحصول على مرجع كامل للعمليات والمتغيرات المتاحة ، راجع صفحة المساعدة."
#: advancedcontentfilter.php:228
msgid "Your rules"
msgstr "القواعد"
#: advancedcontentfilter.php:229
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"لا يوجد قواعد!\n"
"أضف واحدة من خلال النقر على الزر أعلاه بجوار العنوان."
#: advancedcontentfilter.php:230
msgid "Disabled"
msgstr "معطل"
#: advancedcontentfilter.php:231
msgid "Enabled"
msgstr "مفعل"
#: advancedcontentfilter.php:232
msgid "Disable this rule"
msgstr "عطّل القاعدة"
#: advancedcontentfilter.php:233
msgid "Enable this rule"
msgstr "فعّل القاعدة"
#: advancedcontentfilter.php:234
msgid "Edit this rule"
msgstr "عدّل هذه القاعدة"
#: advancedcontentfilter.php:235
msgid "Edit the rule"
msgstr "عدّل القاعدة"
#: advancedcontentfilter.php:236
msgid "Save this rule"
msgstr "احفظ هذه القاعدة"
#: advancedcontentfilter.php:237
msgid "Delete this rule"
msgstr "احذف هذه القاعدة"
#: advancedcontentfilter.php:238
msgid "Rule"
msgstr "القاعدة"
#: advancedcontentfilter.php:239
msgid "Close"
msgstr "اغلق"
#: advancedcontentfilter.php:240
msgid "Add new rule"
msgstr "أضف قاعدة جديدة"
#: advancedcontentfilter.php:241
msgid "Rule Name"
msgstr "اسم القاعدة"
#: advancedcontentfilter.php:242
msgid "Rule Expression"
msgstr "تعبير القاعدة"
#: advancedcontentfilter.php:243
msgid "Cancel"
msgstr "الغ"
#: advancedcontentfilter.php:310 advancedcontentfilter.php:321
#: advancedcontentfilter.php:332 advancedcontentfilter.php:366
#: advancedcontentfilter.php:395 advancedcontentfilter.php:416
msgid "You must be logged in to use this method"
msgstr "عليك الولوج لاستخدام هذه الطريقة"
#: advancedcontentfilter.php:336 advancedcontentfilter.php:370
#: advancedcontentfilter.php:399
msgid "Invalid form security token, please refresh the page."
msgstr "رمز أمان النموذج غير صالح ، يرجى تحديث الصفحة."
#: advancedcontentfilter.php:348
msgid "The rule name and expression are required."
msgstr "يلزم اسم وتعبير للقاعدة."
#: advancedcontentfilter.php:360
msgid "Rule successfully added"
msgstr "نجحت إضافة القاعدة"
#: advancedcontentfilter.php:374 advancedcontentfilter.php:403
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "القاعدة غير موجودة أو لا تنتمي إليك."
#: advancedcontentfilter.php:389
msgid "Rule successfully updated"
msgstr "نجح تحديث القاعدة"
#: advancedcontentfilter.php:410
msgid "Rule successfully deleted"
msgstr "نجح حذف القاعدة"
#: advancedcontentfilter.php:420
msgid "Missing argument: guid."
msgstr "معامل ناقص: دليل."
#: advancedcontentfilter.php:428
#, php-format
msgid "Unknown post with guid: %s"
msgstr "مشاركة غير معروفة ذات الدليل: 1%s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "لم يُعثر على التطبيق"

View file

@ -1,41 +0,0 @@
<?php
if(! function_exists("string_plural_select_ar")) {
function string_plural_select_ar($n){
$n = intval($n);
if ($n==0) { return 0; } else if ($n==1) { return 1; } else if ($n==2) { return 2; } else if ($n%100>=3 && $n%100<=10) { return 3; } else if ($n%100>=11 && $n%100<=99) { return 4; } else { return 5; }
}}
$a->strings['Filtered by rule: %s'] = 'رشّح حسب القاعدة: %s';
$a->strings['Advanced Content Filter'] = 'ترشيح المحتوى المتقدم';
$a->strings['Back to Addon Settings'] = 'الرجوع إلى إعدادات الإضافات';
$a->strings['Add a Rule'] = 'أضف قاعدة';
$a->strings['Help'] = 'مساعدة';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'إضافة وإدارة قواعد ترشيح المحتوى الشخصية هنا.
القواعد لها اسم وتعبير سيتم مطابقته مع بيانات المشاركة. للحصول على مرجع كامل للعمليات والمتغيرات المتاحة ، راجع صفحة المساعدة.';
$a->strings['Your rules'] = 'القواعد';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'لا يوجد قواعد!
أضف واحدة من خلال النقر على الزر أعلاه بجوار العنوان.';
$a->strings['Disabled'] = 'معطل';
$a->strings['Enabled'] = 'مفعل';
$a->strings['Disable this rule'] = 'عطّل القاعدة';
$a->strings['Enable this rule'] = 'فعّل القاعدة';
$a->strings['Edit this rule'] = 'عدّل هذه القاعدة';
$a->strings['Edit the rule'] = 'عدّل القاعدة';
$a->strings['Save this rule'] = 'احفظ هذه القاعدة';
$a->strings['Delete this rule'] = 'احذف هذه القاعدة';
$a->strings['Rule'] = 'القاعدة';
$a->strings['Close'] = 'اغلق';
$a->strings['Add new rule'] = 'أضف قاعدة جديدة';
$a->strings['Rule Name'] = 'اسم القاعدة';
$a->strings['Rule Expression'] = 'تعبير القاعدة';
$a->strings['Cancel'] = 'الغ';
$a->strings['You must be logged in to use this method'] = 'عليك الولوج لاستخدام هذه الطريقة';
$a->strings['Invalid form security token, please refresh the page.'] = 'رمز أمان النموذج غير صالح ، يرجى تحديث الصفحة.';
$a->strings['The rule name and expression are required.'] = 'يلزم اسم وتعبير للقاعدة.';
$a->strings['Rule successfully added'] = 'نجحت إضافة القاعدة';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'القاعدة غير موجودة أو لا تنتمي إليك.';
$a->strings['Rule successfully updated'] = 'نجح تحديث القاعدة';
$a->strings['Rule successfully deleted'] = 'نجح حذف القاعدة';
$a->strings['Missing argument: guid.'] = 'معامل ناقص: دليل.';
$a->strings['Unknown post with guid: %s'] = 'مشاركة غير معروفة ذات الدليل: 1%s';
$a->strings['Method not found'] = 'لم يُعثر على التطبيق';

View file

@ -1,177 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Joan Bar <friendica@tutanota.com>, 2019
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Joan Bar <friendica@tutanota.com>, 2019\n"
"Language-Team: Catalan (https://www.transifex.com/Friendica/teams/12172/ca/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ca\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrat per regla: %s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr "Contingut avançat Filtre"
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr "Torna Addon Configuració"
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "Afegiu una regla"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr "Ajuda"
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
"Afegiu i gestioneu les vostres regles de filtre de contingut personal en "
"aquesta pantalla. Les regles tenen un nom i una expressió arbitrària que es "
"combinen amb les dades de la publicació. Per obtenir una referència completa"
" de les variables i operacions disponibles, comproveu el botó <a "
"href=\"advancedcontentfilter/help\">pàgina dajuda</a>."
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "Les seves normes"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Encara no teniu normes. Comenceu a afegir-ne un fent clic al botó situat al "
"costat del títol."
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "Desactivat"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "Permetre"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr "Desactiva aquesta regla"
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "Activa aquesta regla"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "Edita aquesta regla"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "Edita la regla"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "Deseu aquesta regla"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "Suprimeix aquesta regla"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "Regla"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "Tancar"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "Add nova regla"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr "Nom de la regla"
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr "Expressió de regla"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>Exemples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr "cancel·lar"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr "Per utilitzar aquest mètode, heu diniciar sessió"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr ""
"El testimoni de seguretat del formulari no és vàlid. Actualitza la pàgina"
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr "El nom i lexpressió de la regla són obligatoris"
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "La regla s'ha afegit correctament"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "La regla no existeix o no us pertany."
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "La regla s'ha actualitzat correctament"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "S'ha suprimit la regla correctament"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr "Falta un argument: guia"
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Publicació desconeguda amb guia: %s"
#: src/middlewares.php:28
msgid "Method not found"
msgstr "Mètode no trobat"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_ca")) {
function string_plural_select_ca($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Filtrat per regla: %s';
$a->strings['Advanced Content Filter'] = 'Contingut avançat Filtre';
$a->strings['Back to Addon Settings'] = 'Torna Addon Configuració';
$a->strings['Add a Rule'] = 'Afegiu una regla';
$a->strings['Help'] = 'Ajuda';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Afegiu i gestioneu les vostres regles de filtre de contingut personal en aquesta pantalla. Les regles tenen un nom i una expressió arbitrària que es combinen amb les dades de la publicació. Per obtenir una referència completa de les variables i operacions disponibles, comproveu el botó <a href="advancedcontentfilter/help">pàgina dajuda</a>.';
$a->strings['Your rules'] = 'Les seves normes';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Encara no teniu normes. Comenceu a afegir-ne un fent clic al botó situat al costat del títol.';
$a->strings['Disabled'] = 'Desactivat';
$a->strings['Enabled'] = 'Permetre';
$a->strings['Disable this rule'] = 'Desactiva aquesta regla';
$a->strings['Enable this rule'] = 'Activa aquesta regla';
$a->strings['Edit this rule'] = 'Edita aquesta regla';
$a->strings['Edit the rule'] = 'Edita la regla';
$a->strings['Save this rule'] = 'Deseu aquesta regla';
$a->strings['Delete this rule'] = 'Suprimeix aquesta regla';
$a->strings['Rule'] = 'Regla';
$a->strings['Close'] = 'Tancar';
$a->strings['Add new rule'] = 'Add nova regla';
$a->strings['Rule Name'] = 'Nom de la regla';
$a->strings['Rule Expression'] = 'Expressió de regla';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Exemples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>';
$a->strings['Cancel'] = 'cancel·lar';
$a->strings['You must be logged in to use this method'] = 'Per utilitzar aquest mètode, heu diniciar sessió';
$a->strings['Invalid form security token, please refresh the page.'] = 'El testimoni de seguretat del formulari no és vàlid. Actualitza la pàgina';
$a->strings['The rule name and expression are required.'] = 'El nom i lexpressió de la regla són obligatoris';
$a->strings['Rule successfully added'] = 'La regla s\'ha afegit correctament';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'La regla no existeix o no us pertany.';
$a->strings['Rule successfully updated'] = 'La regla s\'ha actualitzat correctament';
$a->strings['Rule successfully deleted'] = 'S\'ha suprimit la regla correctament';
$a->strings['Missing argument: guid.'] = 'Falta un argument: guia';
$a->strings['Unknown post with guid: %s'] = 'Publicació desconeguda amb guia: %s';
$a->strings['Method not found'] = 'Mètode no trobat';

View file

@ -1,172 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Aditoo, 2018\n"
"Language-Team: Czech (https://www.transifex.com/Friendica/teams/12172/cs/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: cs\n"
"Plural-Forms: nplurals=4; plural=(n == 1 && n % 1 == 0) ? 0 : (n >= 2 && n <= 4 && n % 1 == 0) ? 1: (n % 1 != 0 ) ? 2 : 3;\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrováno podle pravidla: %s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr "Rozšířený filtr obsahu"
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr "Zpět na nastavení doplňku"
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "Přidat pravidlo"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr "Nápověda"
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
"Přidávejte a spravujte Vaše osobní pravidla pro filtrování obsahu na této "
"obrazovce. Pravidla mají název a libovolný výraz, který bude porovnán s daty"
" příspěvku. Pro úplnou referenci dostupných operací a proměnných navštivte "
"<a href=\"advancedcontentfilter/help\">stránku nápovědy</a>."
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "Vaše pravidla"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Ještě nemáte žádná pravidla! Přidejte první kliknutím na tlačítko nahoře "
"vedle nadpisu."
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "Zakázáno"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "Povoleno"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr "Zakázat toto pravidlo"
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "Povolit toto pravidlo"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "Upravit toto pravidlo"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "Upravit pravidlo"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "Uložit toto pravidlo"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "Smazat toto pravidlo"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "Pravidlo"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "Zavřít"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "Přidat nové pravidlo"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr "Název pravidla"
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr "Výraz pravidla"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>Příklady:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr "Zrušit"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr "Pro použití této metody musíte být přihlášen/a"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr "Neplatná forma bezpečnostního tokenu, prosím obnovte stránku."
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr "Je požadován název pravidla a výraz."
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "Pravidlo úspěšně přidáno"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Pravidlo buď neexistuje, nebo Vám nepatří."
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "Pravidlo úspěšně aktualizováno"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "Pravidlo úspěšně smazáno"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr "Chybí argument: guid."
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Neznámý pžíspěvek s číslem guid: %s"
#: src/middlewares.php:28
msgid "Method not found"
msgstr "Metoda nenalezena"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_cs")) {
function string_plural_select_cs($n){
$n = intval($n);
if (($n == 1 && $n % 1 == 0)) { return 0; } else if (($n >= 2 && $n <= 4 && $n % 1 == 0)) { return 1; } else if (($n % 1 != 0 )) { return 2; } else { return 3; }
}}
$a->strings['Filtered by rule: %s'] = 'Filtrováno podle pravidla: %s';
$a->strings['Advanced Content Filter'] = 'Rozšířený filtr obsahu';
$a->strings['Back to Addon Settings'] = 'Zpět na nastavení doplňku';
$a->strings['Add a Rule'] = 'Přidat pravidlo';
$a->strings['Help'] = 'Nápověda';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Přidávejte a spravujte Vaše osobní pravidla pro filtrování obsahu na této obrazovce. Pravidla mají název a libovolný výraz, který bude porovnán s daty příspěvku. Pro úplnou referenci dostupných operací a proměnných navštivte <a href="advancedcontentfilter/help">stránku nápovědy</a>.';
$a->strings['Your rules'] = 'Vaše pravidla';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Ještě nemáte žádná pravidla! Přidejte první kliknutím na tlačítko nahoře vedle nadpisu.';
$a->strings['Disabled'] = 'Zakázáno';
$a->strings['Enabled'] = 'Povoleno';
$a->strings['Disable this rule'] = 'Zakázat toto pravidlo';
$a->strings['Enable this rule'] = 'Povolit toto pravidlo';
$a->strings['Edit this rule'] = 'Upravit toto pravidlo';
$a->strings['Edit the rule'] = 'Upravit pravidlo';
$a->strings['Save this rule'] = 'Uložit toto pravidlo';
$a->strings['Delete this rule'] = 'Smazat toto pravidlo';
$a->strings['Rule'] = 'Pravidlo';
$a->strings['Close'] = 'Zavřít';
$a->strings['Add new rule'] = 'Přidat nové pravidlo';
$a->strings['Rule Name'] = 'Název pravidla';
$a->strings['Rule Expression'] = 'Výraz pravidla';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Příklady:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>';
$a->strings['Cancel'] = 'Zrušit';
$a->strings['You must be logged in to use this method'] = 'Pro použití této metody musíte být přihlášen/a';
$a->strings['Invalid form security token, please refresh the page.'] = 'Neplatná forma bezpečnostního tokenu, prosím obnovte stránku.';
$a->strings['The rule name and expression are required.'] = 'Je požadován název pravidla a výraz.';
$a->strings['Rule successfully added'] = 'Pravidlo úspěšně přidáno';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Pravidlo buď neexistuje, nebo Vám nepatří.';
$a->strings['Rule successfully updated'] = 'Pravidlo úspěšně aktualizováno';
$a->strings['Rule successfully deleted'] = 'Pravidlo úspěšně smazáno';
$a->strings['Missing argument: guid.'] = 'Chybí argument: guid.';
$a->strings['Unknown post with guid: %s'] = 'Neznámý pžíspěvek s číslem guid: %s';
$a->strings['Method not found'] = 'Metoda nenalezena';

View file

@ -1,157 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-11-21 19:13-0500\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Language-Team: Danish (Denmark) (https://www.transifex.com/Friendica/teams/12172/da_DK/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: da_DK\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr ""
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr ""
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr ""
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr ""
#: advancedcontentfilter.php:227
msgid "Help"
msgstr ""
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr ""
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr ""
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr ""
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr ""
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr ""
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr ""
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr ""
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr ""
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr ""
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr ""
#: advancedcontentfilter.php:240
msgid "Close"
msgstr ""
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr ""
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr ""
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr ""
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr ""
#: advancedcontentfilter.php:312 advancedcontentfilter.php:323
#: advancedcontentfilter.php:334 advancedcontentfilter.php:370
#: advancedcontentfilter.php:401 advancedcontentfilter.php:424
msgid "You must be logged in to use this method"
msgstr ""
#: advancedcontentfilter.php:338 advancedcontentfilter.php:374
#: advancedcontentfilter.php:405
msgid "Invalid form security token, please refresh the page."
msgstr ""
#: advancedcontentfilter.php:350
msgid "The rule name and expression are required."
msgstr ""
#: advancedcontentfilter.php:364
msgid "Rule successfully added"
msgstr ""
#: advancedcontentfilter.php:378 advancedcontentfilter.php:409
msgid "Rule doesn't exist or doesn't belong to you."
msgstr ""
#: advancedcontentfilter.php:395
msgid "Rule successfully updated"
msgstr ""
#: advancedcontentfilter.php:418
msgid "Rule successfully deleted"
msgstr ""
#: advancedcontentfilter.php:428
msgid "Missing argument: guid."
msgstr ""
#: advancedcontentfilter.php:436
#, php-format
msgid "Unknown post with guid: %s"
msgstr ""
#: src/middlewares.php:49
msgid "Method not found"
msgstr ""

View file

@ -1,7 +0,0 @@
<?php
if(! function_exists("string_plural_select_da_dk")) {
function string_plural_select_da_dk($n){
$n = intval($n);
return intval($n != 1);
}}

View file

@ -1,175 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Ulf Rompe <transifex.com@rompe.org>, 2019
# Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Tobias Diekershoff <tobias.diekershoff@gmx.net>, 2022\n"
"Language-Team: German (https://app.transifex.com/Friendica/teams/12172/de/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Nach dieser Regel gefiltert: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Erweiterter Inhaltsfilter"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Zurück zu den Addon Einstellungen"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Eine Regel hinzufügen"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Hilfe"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Auf dieser Seite kannst du deine persönlichen Filterregeln verwalten. Regeln"
" müssen einen Namen und einen frei wählbaren Ausdruck besitzen. Dieser "
"Ausdruck wird mit den Daten der Beiträge abgeglichen und diese dann "
"gegebenenfalls gefiltert. Für eine Übersicht der verfügbaren Operatoren für "
"die Filter, wirf bitte einen Blick auf die Hilfsseite des Addons."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Deine Regeln"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Du hast bisher noch keine Regeln definiert. Um eine neue Regel zu erstellen,"
" verwende bitte den Button neben dem Titel."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Deaktiviert"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Aktiv"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Diese Regel deaktivieren"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Diese Regel aktivieren"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Diese Regel bearbeiten"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Die Regel bearbeiten"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Regel speichern"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Diese Regel löschen"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Regel"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Schließen"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Neue Regel hinzufügen"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Name der Regel"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Ausdruck der Regel"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Abbrechen"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr ""
"Dieses Addon funktioniert nur, wenn auf diesem Knoten mindestens ein Beitrag"
" existiert."
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Du musst angemeldet sein, um diese Methode verwenden zu können "
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Ungültiges Sciherheitstoken, bitte die Seite neu laden."
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Der Name der Regel und der Ausdruck sind erforderlich."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Regel erfolgreich hinzugefügt."
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Entweder existiert die Regel nicht, oder sie gehört dir nicht."
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Regel wurde erfolgreich aktualisiert."
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Regel erfolgreich gelöscht."
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Fehlendes Argument: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Unbekannter Beitrag mit der guid: %s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Methode nicht gefunden"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_de")) {
function string_plural_select_de($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Nach dieser Regel gefiltert: %s';
$a->strings['Advanced Content Filter'] = 'Erweiterter Inhaltsfilter';
$a->strings['Back to Addon Settings'] = 'Zurück zu den Addon Einstellungen';
$a->strings['Add a Rule'] = 'Eine Regel hinzufügen';
$a->strings['Help'] = 'Hilfe';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Auf dieser Seite kannst du deine persönlichen Filterregeln verwalten. Regeln müssen einen Namen und einen frei wählbaren Ausdruck besitzen. Dieser Ausdruck wird mit den Daten der Beiträge abgeglichen und diese dann gegebenenfalls gefiltert. Für eine Übersicht der verfügbaren Operatoren für die Filter, wirf bitte einen Blick auf die Hilfsseite des Addons.';
$a->strings['Your rules'] = 'Deine Regeln';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Du hast bisher noch keine Regeln definiert. Um eine neue Regel zu erstellen, verwende bitte den Button neben dem Titel.';
$a->strings['Disabled'] = 'Deaktiviert';
$a->strings['Enabled'] = 'Aktiv';
$a->strings['Disable this rule'] = 'Diese Regel deaktivieren';
$a->strings['Enable this rule'] = 'Diese Regel aktivieren';
$a->strings['Edit this rule'] = 'Diese Regel bearbeiten';
$a->strings['Edit the rule'] = 'Die Regel bearbeiten';
$a->strings['Save this rule'] = 'Regel speichern';
$a->strings['Delete this rule'] = 'Diese Regel löschen';
$a->strings['Rule'] = 'Regel';
$a->strings['Close'] = 'Schließen';
$a->strings['Add new rule'] = 'Neue Regel hinzufügen';
$a->strings['Rule Name'] = 'Name der Regel';
$a->strings['Rule Expression'] = 'Ausdruck der Regel';
$a->strings['Cancel'] = 'Abbrechen';
$a->strings['This addon requires this node having at least one post'] = 'Dieses Addon funktioniert nur, wenn auf diesem Knoten mindestens ein Beitrag existiert.';
$a->strings['You must be logged in to use this method'] = 'Du musst angemeldet sein, um diese Methode verwenden zu können ';
$a->strings['Invalid form security token, please refresh the page.'] = 'Ungültiges Sciherheitstoken, bitte die Seite neu laden.';
$a->strings['The rule name and expression are required.'] = 'Der Name der Regel und der Ausdruck sind erforderlich.';
$a->strings['Rule successfully added'] = 'Regel erfolgreich hinzugefügt.';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Entweder existiert die Regel nicht, oder sie gehört dir nicht.';
$a->strings['Rule successfully updated'] = 'Regel wurde erfolgreich aktualisiert.';
$a->strings['Rule successfully deleted'] = 'Regel erfolgreich gelöscht.';
$a->strings['Missing argument: guid.'] = 'Fehlendes Argument: guid.';
$a->strings['Unknown post with guid: %s'] = 'Unbekannter Beitrag mit der guid: %s';
$a->strings['Method not found'] = 'Methode nicht gefunden';

View file

@ -1,175 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Andy H3 <andy@hubup.pro>, 2019
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Andy H3 <andy@hubup.pro>, 2019\n"
"Language-Team: English (United Kingdom) (https://www.transifex.com/Friendica/teams/12172/en_GB/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: en_GB\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtered by rule: %s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr "Advanced Content Filter"
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr "Back to addon settings"
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "Add a rule"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr "Help"
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "Your rules"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "Disabled"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "Enabled"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr "Disable this rule"
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "Enable this rule"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "Edit this rule"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "Edit the rule"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "Save this rule"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "Delete this rule"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "Rule"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "Close"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "Add new rule"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr "Rule name"
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr "Rule expression"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr "Cancel"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr "You must be logged in to use this method"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr "Invalid form security token, please refresh the page."
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr "The rule name and expression are required."
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "Rule successfully added"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Rule doesn't exist or doesn't belong to you."
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "Rule successfully updated"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "Rule successfully deleted"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr "Missing argument: Global Unique Identifier (GUID)."
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Unknown post with Global Unique Identifier (GUID): %s"
#: src/middlewares.php:28
msgid "Method not found"
msgstr "Method not found"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_en_gb")) {
function string_plural_select_en_gb($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Filtered by rule: %s';
$a->strings['Advanced Content Filter'] = 'Advanced Content Filter';
$a->strings['Back to Addon Settings'] = 'Back to addon settings';
$a->strings['Add a Rule'] = 'Add a rule';
$a->strings['Help'] = 'Help';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.';
$a->strings['Your rules'] = 'Your rules';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'You have no rules yet! Start adding one by clicking on the button above next to the title.';
$a->strings['Disabled'] = 'Disabled';
$a->strings['Enabled'] = 'Enabled';
$a->strings['Disable this rule'] = 'Disable this rule';
$a->strings['Enable this rule'] = 'Enable this rule';
$a->strings['Edit this rule'] = 'Edit this rule';
$a->strings['Edit the rule'] = 'Edit the rule';
$a->strings['Save this rule'] = 'Save this rule';
$a->strings['Delete this rule'] = 'Delete this rule';
$a->strings['Rule'] = 'Rule';
$a->strings['Close'] = 'Close';
$a->strings['Add new rule'] = 'Add new rule';
$a->strings['Rule Name'] = 'Rule name';
$a->strings['Rule Expression'] = 'Rule expression';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>';
$a->strings['Cancel'] = 'Cancel';
$a->strings['You must be logged in to use this method'] = 'You must be logged in to use this method';
$a->strings['Invalid form security token, please refresh the page.'] = 'Invalid form security token, please refresh the page.';
$a->strings['The rule name and expression are required.'] = 'The rule name and expression are required.';
$a->strings['Rule successfully added'] = 'Rule successfully added';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Rule doesn\'t exist or doesn\'t belong to you.';
$a->strings['Rule successfully updated'] = 'Rule successfully updated';
$a->strings['Rule successfully deleted'] = 'Rule successfully deleted';
$a->strings['Missing argument: guid.'] = 'Missing argument: Global Unique Identifier (GUID).';
$a->strings['Unknown post with guid: %s'] = 'Unknown post with Global Unique Identifier (GUID): %s';
$a->strings['Method not found'] = 'Method not found';

View file

@ -1,173 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Albert, 2018
# Yasmine A <yasmine.elachkar@gmail.com>, 2018
# Julio Cova, 2019
# Boris Daniel Martinez Millàn <borisdanielmartinezmillan@gmail.com>, 2021
# Senex Petrovic <javierruizo@hotmail.com>, 2021
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-01 18:15+0100\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Senex Petrovic <javierruizo@hotmail.com>, 2021\n"
"Language-Team: Spanish (https://www.transifex.com/Friendica/teams/12172/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Método no encontrado"
#: advancedcontentfilter.php:136
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrado por la regla: %s"
#: advancedcontentfilter.php:150 advancedcontentfilter.php:207
msgid "Advanced Content Filter"
msgstr "Filtro de contenido avanzado"
#: advancedcontentfilter.php:206
msgid "Back to Addon Settings"
msgstr "Volver a Ajustes de Complemento"
#: advancedcontentfilter.php:208
msgid "Add a Rule"
msgstr "Añadir una regla"
#: advancedcontentfilter.php:209
msgid "Help"
msgstr "Ayuda"
#: advancedcontentfilter.php:210
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Agregue y administre sus reglas de filtrado de contenido personal en esta "
"pantalla. Las reglas tienen un nombre y una expresión arbitraria que se "
"comparará con los datos de la publicación. Para obtener una referencia "
"completa de las operaciones y variables disponibles, consulte la página de "
"ayuda."
#: advancedcontentfilter.php:211
msgid "Your rules"
msgstr "Tus reglas"
#: advancedcontentfilter.php:212
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"¡Aún no tienes reglas! Empieza añadiendo una haciendo clic en el botón de "
"arriba al lado del título. "
#: advancedcontentfilter.php:213
msgid "Disabled"
msgstr "Desactivado"
#: advancedcontentfilter.php:214
msgid "Enabled"
msgstr "Activado"
#: advancedcontentfilter.php:215
msgid "Disable this rule"
msgstr "Desactivar esta regla"
#: advancedcontentfilter.php:216
msgid "Enable this rule"
msgstr "Activar esta regla"
#: advancedcontentfilter.php:217
msgid "Edit this rule"
msgstr "Editar esta regla"
#: advancedcontentfilter.php:218
msgid "Edit the rule"
msgstr "Editar regla"
#: advancedcontentfilter.php:219
msgid "Save this rule"
msgstr "Guardar esta regla"
#: advancedcontentfilter.php:220
msgid "Delete this rule"
msgstr "Borrar esta regla"
#: advancedcontentfilter.php:221
msgid "Rule"
msgstr "Regla"
#: advancedcontentfilter.php:222
msgid "Close"
msgstr "Cerrar"
#: advancedcontentfilter.php:223
msgid "Add new rule"
msgstr "Agregar nueva regla"
#: advancedcontentfilter.php:224
msgid "Rule Name"
msgstr "Nombre de la regla"
#: advancedcontentfilter.php:225
msgid "Rule Expression"
msgstr "Expresión de la regla"
#: advancedcontentfilter.php:226
msgid "Cancel"
msgstr "Cancelar"
#: advancedcontentfilter.php:293 advancedcontentfilter.php:304
#: advancedcontentfilter.php:315 advancedcontentfilter.php:349
#: advancedcontentfilter.php:378 advancedcontentfilter.php:399
msgid "You must be logged in to use this method"
msgstr "Debe estar registrado para usar este método"
#: advancedcontentfilter.php:319 advancedcontentfilter.php:353
#: advancedcontentfilter.php:382
msgid "Invalid form security token, please refresh the page."
msgstr ""
"Token de seguridad de formulario inválido, por favor actualice la página."
#: advancedcontentfilter.php:331
msgid "The rule name and expression are required."
msgstr "El nombre y la expresión de la regla son obligatorios."
#: advancedcontentfilter.php:343
msgid "Rule successfully added"
msgstr "Regla añadida exitosamente"
#: advancedcontentfilter.php:357 advancedcontentfilter.php:386
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "La regla no existe o no te pertenece."
#: advancedcontentfilter.php:372
msgid "Rule successfully updated"
msgstr "Regla actualizada exitosamente"
#: advancedcontentfilter.php:393
msgid "Rule successfully deleted"
msgstr "Regla eliminada exitosamente"
#: advancedcontentfilter.php:403
msgid "Missing argument: guid."
msgstr "Algumento faltante: guía"
#: advancedcontentfilter.php:411
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Publicacion desconocida con la guía: %s"

View file

@ -1,39 +0,0 @@
<?php
if(! function_exists("string_plural_select_es")) {
function string_plural_select_es($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Method not found'] = 'Método no encontrado';
$a->strings['Filtered by rule: %s'] = 'Filtrado por la regla: %s';
$a->strings['Advanced Content Filter'] = 'Filtro de contenido avanzado';
$a->strings['Back to Addon Settings'] = 'Volver a Ajustes de Complemento';
$a->strings['Add a Rule'] = 'Añadir una regla';
$a->strings['Help'] = 'Ayuda';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Agregue y administre sus reglas de filtrado de contenido personal en esta pantalla. Las reglas tienen un nombre y una expresión arbitraria que se comparará con los datos de la publicación. Para obtener una referencia completa de las operaciones y variables disponibles, consulte la página de ayuda.';
$a->strings['Your rules'] = 'Tus reglas';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = '¡Aún no tienes reglas! Empieza añadiendo una haciendo clic en el botón de arriba al lado del título. ';
$a->strings['Disabled'] = 'Desactivado';
$a->strings['Enabled'] = 'Activado';
$a->strings['Disable this rule'] = 'Desactivar esta regla';
$a->strings['Enable this rule'] = 'Activar esta regla';
$a->strings['Edit this rule'] = 'Editar esta regla';
$a->strings['Edit the rule'] = 'Editar regla';
$a->strings['Save this rule'] = 'Guardar esta regla';
$a->strings['Delete this rule'] = 'Borrar esta regla';
$a->strings['Rule'] = 'Regla';
$a->strings['Close'] = 'Cerrar';
$a->strings['Add new rule'] = 'Agregar nueva regla';
$a->strings['Rule Name'] = 'Nombre de la regla';
$a->strings['Rule Expression'] = 'Expresión de la regla';
$a->strings['Cancel'] = 'Cancelar';
$a->strings['You must be logged in to use this method'] = 'Debe estar registrado para usar este método';
$a->strings['Invalid form security token, please refresh the page.'] = 'Token de seguridad de formulario inválido, por favor actualice la página.';
$a->strings['The rule name and expression are required.'] = 'El nombre y la expresión de la regla son obligatorios.';
$a->strings['Rule successfully added'] = 'Regla añadida exitosamente';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'La regla no existe o no te pertenece.';
$a->strings['Rule successfully updated'] = 'Regla actualizada exitosamente';
$a->strings['Rule successfully deleted'] = 'Regla eliminada exitosamente';
$a->strings['Missing argument: guid.'] = 'Algumento faltante: guía';
$a->strings['Unknown post with guid: %s'] = 'Publicacion desconocida con la guía: %s';

View file

@ -1,164 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: Kris, 2018\n"
"Language-Team: Finnish (Finland) (https://www.transifex.com/Friendica/teams/12172/fi_FI/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fi_FI\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr ""
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr ""
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr ""
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "Lisää sääntö"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr ""
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "Sääntösi"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "Ei käytössä"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "Käytössä"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr ""
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "Ota tämä sääntö käyttöön"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "Muokkaa tätä sääntöä"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "Muokkaa sääntöä"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "Tallenna tämä sääntö"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "Poista tämä sääntö"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "Sääntö"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "Sulje"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "Lisää uusi sääntö"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr ""
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr ""
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr ""
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr ""
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr ""
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr ""
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "Sääntö lisätty"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr ""
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "Sääntö päivitetty"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "Sääntö poistettu"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr ""
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr ""
#: src/middlewares.php:28
msgid "Method not found"
msgstr ""

View file

@ -1,22 +0,0 @@
<?php
if(! function_exists("string_plural_select_fi")) {
function string_plural_select_fi($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Add a Rule'] = 'Lisää sääntö';
$a->strings['Your rules'] = 'Sääntösi';
$a->strings['Disabled'] = 'Ei käytössä';
$a->strings['Enabled'] = 'Käytössä';
$a->strings['Enable this rule'] = 'Ota tämä sääntö käyttöön';
$a->strings['Edit this rule'] = 'Muokkaa tätä sääntöä';
$a->strings['Edit the rule'] = 'Muokkaa sääntöä';
$a->strings['Save this rule'] = 'Tallenna tämä sääntö';
$a->strings['Delete this rule'] = 'Poista tämä sääntö';
$a->strings['Rule'] = 'Sääntö';
$a->strings['Close'] = 'Sulje';
$a->strings['Add new rule'] = 'Lisää uusi sääntö';
$a->strings['Rule successfully added'] = 'Sääntö lisätty';
$a->strings['Rule successfully updated'] = 'Sääntö päivitetty';
$a->strings['Rule successfully deleted'] = 'Sääntö poistettu';

View file

@ -1,177 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Marie Olive <lacellule101@gmail.com>, 2018
# Vladimir Núñez <lapoubelle111@gmail.com>, 2018
# Phigger Phigger <automates@lepouete.fr>, 2019
# Wil Tur <wiltur@yargl.com>, 2021
# Hypolite Petovan <hypolite@mrpetovan.com>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Hypolite Petovan <hypolite@mrpetovan.com>, 2022\n"
"Language-Team: French (https://www.transifex.com/Friendica/teams/12172/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=3; plural=(n == 0 || n == 1) ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtré par règle:%s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Filtre avancé de contenu"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Retour aux paramètres de l'extension"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Ajouter une règle"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Aide"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Cet écran permet d'ajouter et de gérer vos règles de filtrage de contenu "
"personnelles. Les règles ont un nom et une expression arbitraire qui sera "
"comparée aux données des messages. Pour une référence complète des "
"opérations et variables disponibles, consultez la page d'aide."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Vos règles"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Vous n'avez encore aucune règle! Ajoutez-en une en cliquant le bouton au-"
"dessus près du titre"
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Désactivé"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Activé"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Désactiver cette règle"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Activer cette règle"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Modifier cette règle"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Modifier la règle"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Enregistrer cette règle"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Supprimer cette règle"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Règle"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Fermer"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Ajouter nouvelle règle"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Nommer règle"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Expression de règle"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Annuler"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr ""
"Cette extension requiert au moins une publication sur ce serveur pour "
"fonctionner"
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Vous devez être connecté pour utiliser cette méthode"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Formulaire token de sécurité invalide, rafraîchissez la page"
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Le nom et l'expression de cette règle sont requis"
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Règle bien ajoutée"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Cette règle n'existe pas ou ne vous appartient pas"
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Règle bien mise à jour"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Règle bien supprimée"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Argument manquant: "
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Post inconnu avec guid : %s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Méthode non trouvée"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_fr")) {
function string_plural_select_fr($n){
$n = intval($n);
if (($n == 0 || $n == 1)) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Filtered by rule: %s'] = 'Filtré par règle:%s';
$a->strings['Advanced Content Filter'] = 'Filtre avancé de contenu';
$a->strings['Back to Addon Settings'] = 'Retour aux paramètres de l\'extension';
$a->strings['Add a Rule'] = 'Ajouter une règle';
$a->strings['Help'] = 'Aide';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Cet écran permet d\'ajouter et de gérer vos règles de filtrage de contenu personnelles. Les règles ont un nom et une expression arbitraire qui sera comparée aux données des messages. Pour une référence complète des opérations et variables disponibles, consultez la page d\'aide.';
$a->strings['Your rules'] = 'Vos règles';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Vous n\'avez encore aucune règle! Ajoutez-en une en cliquant le bouton au-dessus près du titre';
$a->strings['Disabled'] = 'Désactivé';
$a->strings['Enabled'] = 'Activé';
$a->strings['Disable this rule'] = 'Désactiver cette règle';
$a->strings['Enable this rule'] = 'Activer cette règle';
$a->strings['Edit this rule'] = 'Modifier cette règle';
$a->strings['Edit the rule'] = 'Modifier la règle';
$a->strings['Save this rule'] = 'Enregistrer cette règle';
$a->strings['Delete this rule'] = 'Supprimer cette règle';
$a->strings['Rule'] = 'Règle';
$a->strings['Close'] = 'Fermer';
$a->strings['Add new rule'] = 'Ajouter nouvelle règle';
$a->strings['Rule Name'] = 'Nommer règle';
$a->strings['Rule Expression'] = 'Expression de règle';
$a->strings['Cancel'] = 'Annuler';
$a->strings['This addon requires this node having at least one post'] = 'Cette extension requiert au moins une publication sur ce serveur pour fonctionner';
$a->strings['You must be logged in to use this method'] = 'Vous devez être connecté pour utiliser cette méthode';
$a->strings['Invalid form security token, please refresh the page.'] = 'Formulaire token de sécurité invalide, rafraîchissez la page';
$a->strings['The rule name and expression are required.'] = 'Le nom et l\'expression de cette règle sont requis';
$a->strings['Rule successfully added'] = 'Règle bien ajoutée';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Cette règle n\'existe pas ou ne vous appartient pas';
$a->strings['Rule successfully updated'] = 'Règle bien mise à jour';
$a->strings['Rule successfully deleted'] = 'Règle bien supprimée';
$a->strings['Missing argument: guid.'] = 'Argument manquant: ';
$a->strings['Unknown post with guid: %s'] = 'Post inconnu avec guid : %s';
$a->strings['Method not found'] = 'Méthode non trouvée';

View file

@ -1,173 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Balázs Úr, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Balázs Úr, 2022\n"
"Language-Team: Hungarian (https://www.transifex.com/Friendica/teams/12172/hu/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Szűrve a szabály alapján: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Speciális tartalomszűrő"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Vissza a bővítménybeállításokhoz"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Szabály hozzáadása"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Súgó"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Személyes tartalomszűrő szabályok hozzáadása és kezelése ezen a képernyőn. A"
" szabályoknak van nevük és egy tetszőleges kifejezésük, amely a bejegyzés "
"adataira lesz illesztve. Az elérhető műveletek és változók teljes "
"hivatkozásáért nézze meg a súgóoldalt."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Az Ön szabályai"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Még nincsenek szabályai! Kezdje meg egy szabály hozzáadását a cím mellett "
"lévő fenti gombra kattintva."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Letiltva"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Engedélyezve"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "A szabály letiltása"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "A szabály engedélyezése"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "A szabály szerkesztése"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "A szabály szerkesztése"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "A szabály mentése"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "A szabály törlése"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Szabály"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Bezárás"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Új szabály hozzáadása"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Szabály neve"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Szabály kifejezése"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Mégse"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr ""
"Ez a bővítmény megköveteli, hogy ennek a csomópontnak legalább egy "
"bejegyzése legyen"
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Bejelentkezve kell lennie a módszer használatához"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Érvénytelen űrlap biztonsági token. Frissítse az oldalt."
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "A szabály neve és kifejezése kötelező."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "A szabály sikeresen hozzáadva"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "A szabály nem létezik vagy nem Önhöz tatozik."
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "A szabály sikeresen frissítve"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "A szabály sikeresen törölve"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Hiányzó argumentum: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Ismeretlen bejegyzés a következő guid azonosítóval: %s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "A módszer nem található"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_hu")) {
function string_plural_select_hu($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Szűrve a szabály alapján: %s';
$a->strings['Advanced Content Filter'] = 'Speciális tartalomszűrő';
$a->strings['Back to Addon Settings'] = 'Vissza a bővítménybeállításokhoz';
$a->strings['Add a Rule'] = 'Szabály hozzáadása';
$a->strings['Help'] = 'Súgó';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Személyes tartalomszűrő szabályok hozzáadása és kezelése ezen a képernyőn. A szabályoknak van nevük és egy tetszőleges kifejezésük, amely a bejegyzés adataira lesz illesztve. Az elérhető műveletek és változók teljes hivatkozásáért nézze meg a súgóoldalt.';
$a->strings['Your rules'] = 'Az Ön szabályai';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Még nincsenek szabályai! Kezdje meg egy szabály hozzáadását a cím mellett lévő fenti gombra kattintva.';
$a->strings['Disabled'] = 'Letiltva';
$a->strings['Enabled'] = 'Engedélyezve';
$a->strings['Disable this rule'] = 'A szabály letiltása';
$a->strings['Enable this rule'] = 'A szabály engedélyezése';
$a->strings['Edit this rule'] = 'A szabály szerkesztése';
$a->strings['Edit the rule'] = 'A szabály szerkesztése';
$a->strings['Save this rule'] = 'A szabály mentése';
$a->strings['Delete this rule'] = 'A szabály törlése';
$a->strings['Rule'] = 'Szabály';
$a->strings['Close'] = 'Bezárás';
$a->strings['Add new rule'] = 'Új szabály hozzáadása';
$a->strings['Rule Name'] = 'Szabály neve';
$a->strings['Rule Expression'] = 'Szabály kifejezése';
$a->strings['Cancel'] = 'Mégse';
$a->strings['This addon requires this node having at least one post'] = 'Ez a bővítmény megköveteli, hogy ennek a csomópontnak legalább egy bejegyzése legyen';
$a->strings['You must be logged in to use this method'] = 'Bejelentkezve kell lennie a módszer használatához';
$a->strings['Invalid form security token, please refresh the page.'] = 'Érvénytelen űrlap biztonsági token. Frissítse az oldalt.';
$a->strings['The rule name and expression are required.'] = 'A szabály neve és kifejezése kötelező.';
$a->strings['Rule successfully added'] = 'A szabály sikeresen hozzáadva';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'A szabály nem létezik vagy nem Önhöz tatozik.';
$a->strings['Rule successfully updated'] = 'A szabály sikeresen frissítve';
$a->strings['Rule successfully deleted'] = 'A szabály sikeresen törölve';
$a->strings['Missing argument: guid.'] = 'Hiányzó argumentum: guid.';
$a->strings['Unknown post with guid: %s'] = 'Ismeretlen bejegyzés a következő guid azonosítóval: %s';
$a->strings['Method not found'] = 'A módszer nem található';

View file

@ -1,172 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# fabrixxm <fabrix.xm@gmail.com>, 2018
# Sylke Vicious <silkevicious@gmail.com>, 2023
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Sylke Vicious <silkevicious@gmail.com>, 2023\n"
"Language-Team: Italian (https://app.transifex.com/Friendica/teams/12172/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: it\n"
"Plural-Forms: nplurals=3; plural=n == 1 ? 0 : n != 0 && n % 1000000 == 0 ? 1 : 2;\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrato dalla regola: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Filtro Avanzato Contenuti"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Torna alle impostazioni del componente aggiuntivo"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Aggiungi una regola"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Aiuto"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Aggiungi e gestisci le tue regole personali di filtro contenuti in questa "
"schermata. Le regole hanno un nome e un'espressione arbitraria che sarà "
"confrontata con i dati del messaggio. Per un elenco completo delle "
"operazioni e variabili disponibili, controlla la pagina di aiuto."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Le tue regole"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui "
"sopra a fianco al titolo."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Disabilitato"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Abilitato"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Diabilita questa regola"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Abilita questa regola"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Modifica questa regola"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Modifica la regola"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Salva questa regola"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Elimina questa regola"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Regola"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Chiudi"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Aggiungi nuova regola"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Nome Regola"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Espressione Regola"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Annulla"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr "Questo addon richiede che questo nodo abbia almeno un messaggio"
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Devi essere autenticato per usare questo metodo"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Token di sicurezza invalido, aggiorna la pagina."
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Il nome e l'espressione della regola sono richiesti."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Regola aggiunta con successo"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "La regola non esiste o non ti appartiene."
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Regola aggiornata con successo"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Regola eliminata con successo"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Argomento mancante: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Messaggio con guid %s sconosciuto"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Metodo non trovato"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_it")) {
function string_plural_select_it($n){
$n = intval($n);
if ($n == 1) { return 0; } else if ($n != 0 && $n % 1000000 == 0) { return 1; } else { return 2; }
}}
$a->strings['Filtered by rule: %s'] = 'Filtrato dalla regola: %s';
$a->strings['Advanced Content Filter'] = 'Filtro Avanzato Contenuti';
$a->strings['Back to Addon Settings'] = 'Torna alle impostazioni del componente aggiuntivo';
$a->strings['Add a Rule'] = 'Aggiungi una regola';
$a->strings['Help'] = 'Aiuto';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Aggiungi e gestisci le tue regole personali di filtro contenuti in questa schermata. Le regole hanno un nome e un\'espressione arbitraria che sarà confrontata con i dati del messaggio. Per un elenco completo delle operazioni e variabili disponibili, controlla la pagina di aiuto.';
$a->strings['Your rules'] = 'Le tue regole';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Non hai ancora nessuna regola! Aggiungine una cliccando sul bottone qui sopra a fianco al titolo.';
$a->strings['Disabled'] = 'Disabilitato';
$a->strings['Enabled'] = 'Abilitato';
$a->strings['Disable this rule'] = 'Diabilita questa regola';
$a->strings['Enable this rule'] = 'Abilita questa regola';
$a->strings['Edit this rule'] = 'Modifica questa regola';
$a->strings['Edit the rule'] = 'Modifica la regola';
$a->strings['Save this rule'] = 'Salva questa regola';
$a->strings['Delete this rule'] = 'Elimina questa regola';
$a->strings['Rule'] = 'Regola';
$a->strings['Close'] = 'Chiudi';
$a->strings['Add new rule'] = 'Aggiungi nuova regola';
$a->strings['Rule Name'] = 'Nome Regola';
$a->strings['Rule Expression'] = 'Espressione Regola';
$a->strings['Cancel'] = 'Annulla';
$a->strings['This addon requires this node having at least one post'] = 'Questo addon richiede che questo nodo abbia almeno un messaggio';
$a->strings['You must be logged in to use this method'] = 'Devi essere autenticato per usare questo metodo';
$a->strings['Invalid form security token, please refresh the page.'] = 'Token di sicurezza invalido, aggiorna la pagina.';
$a->strings['The rule name and expression are required.'] = 'Il nome e l\'espressione della regola sono richiesti.';
$a->strings['Rule successfully added'] = 'Regola aggiunta con successo';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'La regola non esiste o non ti appartiene.';
$a->strings['Rule successfully updated'] = 'Regola aggiornata con successo';
$a->strings['Rule successfully deleted'] = 'Regola eliminata con successo';
$a->strings['Missing argument: guid.'] = 'Argomento mancante: guid.';
$a->strings['Unknown post with guid: %s'] = 'Messaggio con guid %s sconosciuto';
$a->strings['Method not found'] = 'Metodo non trovato';

View file

@ -1,178 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Rik 4 <rikviergever@hotmail.com>, 2018
# AgnesElisa <agneselisa@disroot.org>, 2018
# Jeroen De Meerleer <me@jeroened.be>, 2018
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Jeroen De Meerleer <me@jeroened.be>, 2018\n"
"Language-Team: Dutch (https://www.transifex.com/Friendica/teams/12172/nl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: nl\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr "Gefilterd volgens regel: %s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr "Geavanceerd filter voor berichtsinhoud"
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr "Terug naar Addon instellingen"
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "Filterregel toevoegen"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr "Help"
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
"Beheer de filterregels van je persoonlijke filter voor berichtsinhoud in dit"
" scherm. Regels hebben een naam en bewoording welke we automatisch "
"controleren door te vergelijken met de inhoud van elk bericht. Voor een "
"compleet naslagwerk van de beschikbare bewerkingen en variabelen, zie de <a"
" href=\"advancedcontentfilter/help\">help pagina</a>."
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "Jouw regels"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Je hebt nog geen regels! Klik op de knop bovenin naast de titel om een regel"
" toe te voegen."
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "Uitgeschakeld"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "Geactiveerd"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr "Deze regel uitschakelen"
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "Deze regel inschakelen"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "Regel bewerken"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "Regel bewerken"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "Deze regel opslaan"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "Deze regel verwijderen"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "Regel"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "Sluiten"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "Voeg nieuwe regel toe"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr "Regel naam"
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr "Regel bewoording"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>Voorbeelden:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>label</li></ul>"
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr "Annuleren"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr "Je moet ingelogd zijn om deze methode te gebruiken"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr "Ongeldige formulier beveiligings token, vernieuw de pagina a.u.b."
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr "De regelnaam en bewoording zijn vereist."
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "Regel succesvol toegevoegd"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Deze regel bestaat niet, of is niet van jou."
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "Regel succesvol opgeslagen"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "Regel succesvol verwijderd"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr "Parameter guid niet aanwezig"
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Onbekend bericht met guid: %s"
#: src/middlewares.php:28
msgid "Method not found"
msgstr "Methode niet gevonden"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_nl")) {
function string_plural_select_nl($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Gefilterd volgens regel: %s';
$a->strings['Advanced Content Filter'] = 'Geavanceerd filter voor berichtsinhoud';
$a->strings['Back to Addon Settings'] = 'Terug naar Addon instellingen';
$a->strings['Add a Rule'] = 'Filterregel toevoegen';
$a->strings['Help'] = 'Help';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = 'Beheer de filterregels van je persoonlijke filter voor berichtsinhoud in dit scherm. Regels hebben een naam en bewoording welke we automatisch controleren door te vergelijken met de inhoud van elk bericht. Voor een compleet naslagwerk van de beschikbare bewerkingen en variabelen, zie de <a href="advancedcontentfilter/help">help pagina</a>.';
$a->strings['Your rules'] = 'Jouw regels';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Je hebt nog geen regels! Klik op de knop bovenin naast de titel om een regel toe te voegen.';
$a->strings['Disabled'] = 'Uitgeschakeld';
$a->strings['Enabled'] = 'Geactiveerd';
$a->strings['Disable this rule'] = 'Deze regel uitschakelen';
$a->strings['Enable this rule'] = 'Deze regel inschakelen';
$a->strings['Edit this rule'] = 'Regel bewerken';
$a->strings['Edit the rule'] = 'Regel bewerken';
$a->strings['Save this rule'] = 'Deze regel opslaan';
$a->strings['Delete this rule'] = 'Deze regel verwijderen';
$a->strings['Rule'] = 'Regel';
$a->strings['Close'] = 'Sluiten';
$a->strings['Add new rule'] = 'Voeg nieuwe regel toe';
$a->strings['Rule Name'] = 'Regel naam';
$a->strings['Rule Expression'] = 'Regel bewoording';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>Voorbeelden:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>label</li></ul>';
$a->strings['Cancel'] = 'Annuleren';
$a->strings['You must be logged in to use this method'] = 'Je moet ingelogd zijn om deze methode te gebruiken';
$a->strings['Invalid form security token, please refresh the page.'] = 'Ongeldige formulier beveiligings token, vernieuw de pagina a.u.b.';
$a->strings['The rule name and expression are required.'] = 'De regelnaam en bewoording zijn vereist.';
$a->strings['Rule successfully added'] = 'Regel succesvol toegevoegd';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Deze regel bestaat niet, of is niet van jou.';
$a->strings['Rule successfully updated'] = 'Regel succesvol opgeslagen';
$a->strings['Rule successfully deleted'] = 'Regel succesvol verwijderd';
$a->strings['Missing argument: guid.'] = 'Parameter guid niet aanwezig';
$a->strings['Unknown post with guid: %s'] = 'Onbekend bericht met guid: %s';
$a->strings['Method not found'] = 'Methode niet gevonden';

View file

@ -1,173 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Waldemar Stoczkowski, 2018
# Joe Doe, 2021
# Piotr Strębski <strebski@gmail.com>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Piotr Strębski <strebski@gmail.com>, 2022\n"
"Language-Team: Polish (https://www.transifex.com/Friendica/teams/12172/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr " Filtruj według reguły: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Zaawansowany filtr zawartości"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Powrót do ustawień dodatków"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Dodaj regułę"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Pomoc"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Na tym ekranie możesz zarządzać swoimi osobistymi regułami filtrowania "
"treści. Reguły składają się z nazwy oraz dowolnego wyrażenia, do którego "
"przyrównywane będą posty. Aby uzyskć więcej informacji na temat dostępnych "
"opracji oraz zmiennych, zapoznaj się ze stronę pomocy."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Twoje zasady"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Nie masz jeszcze żadnych zasad! Zacznij dodawać jedną, klikając przycisk "
"znajdujący się nad tytułem."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Wyłącz"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Włącz"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Wyłącz tę regułę"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Włącz tę regułę"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Edytuj tę regułę"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Edytuj regułę"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Zapisz tę regułę"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Usuń tę regułę"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Reguła"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Zamknij"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Dodaj nową regułę"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Nazwa reguły"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Wyrażanie reguły"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Anuluj"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr "Ten dodatek wymaga, aby ten węzeł miał co najmniej jeden wpis"
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Musisz być zalogowany, aby skorzystać z tej metody"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Nieprawidłowy token zabezpieczający formularz, odśwież stronę."
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Nazwa reguły i wyrażenie są wymagane."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Reguła została pomyślnie dodana"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Reguła nie istnieje lub nie należy do ciebie."
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Reguła została pomyślnie zaktualizowana"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Reguła została pomyślnie usunięta"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Brakujący argument: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Nieznany post z guid:%s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Nie znaleziono metody"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_pl")) {
function string_plural_select_pl($n){
$n = intval($n);
if ($n==1) { return 0; } else if (($n%10>=2 && $n%10<=4) && ($n%100<12 || $n%100>14)) { return 1; } else if ($n!=1 && ($n%10>=0 && $n%10<=1) || ($n%10>=5 && $n%10<=9) || ($n%100>=12 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Filtered by rule: %s'] = ' Filtruj według reguły: %s';
$a->strings['Advanced Content Filter'] = 'Zaawansowany filtr zawartości';
$a->strings['Back to Addon Settings'] = 'Powrót do ustawień dodatków';
$a->strings['Add a Rule'] = 'Dodaj regułę';
$a->strings['Help'] = 'Pomoc';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Na tym ekranie możesz zarządzać swoimi osobistymi regułami filtrowania treści. Reguły składają się z nazwy oraz dowolnego wyrażenia, do którego przyrównywane będą posty. Aby uzyskć więcej informacji na temat dostępnych opracji oraz zmiennych, zapoznaj się ze stronę pomocy.';
$a->strings['Your rules'] = 'Twoje zasady';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Nie masz jeszcze żadnych zasad! Zacznij dodawać jedną, klikając przycisk znajdujący się nad tytułem.';
$a->strings['Disabled'] = 'Wyłącz';
$a->strings['Enabled'] = 'Włącz';
$a->strings['Disable this rule'] = 'Wyłącz tę regułę';
$a->strings['Enable this rule'] = 'Włącz tę regułę';
$a->strings['Edit this rule'] = 'Edytuj tę regułę';
$a->strings['Edit the rule'] = 'Edytuj regułę';
$a->strings['Save this rule'] = 'Zapisz tę regułę';
$a->strings['Delete this rule'] = 'Usuń tę regułę';
$a->strings['Rule'] = 'Reguła';
$a->strings['Close'] = 'Zamknij';
$a->strings['Add new rule'] = 'Dodaj nową regułę';
$a->strings['Rule Name'] = 'Nazwa reguły';
$a->strings['Rule Expression'] = 'Wyrażanie reguły';
$a->strings['Cancel'] = 'Anuluj';
$a->strings['This addon requires this node having at least one post'] = 'Ten dodatek wymaga, aby ten węzeł miał co najmniej jeden wpis';
$a->strings['You must be logged in to use this method'] = 'Musisz być zalogowany, aby skorzystać z tej metody';
$a->strings['Invalid form security token, please refresh the page.'] = 'Nieprawidłowy token zabezpieczający formularz, odśwież stronę.';
$a->strings['The rule name and expression are required.'] = 'Nazwa reguły i wyrażenie są wymagane.';
$a->strings['Rule successfully added'] = 'Reguła została pomyślnie dodana';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Reguła nie istnieje lub nie należy do ciebie.';
$a->strings['Rule successfully updated'] = 'Reguła została pomyślnie zaktualizowana';
$a->strings['Rule successfully deleted'] = 'Reguła została pomyślnie usunięta';
$a->strings['Missing argument: guid.'] = 'Brakujący argument: guid.';
$a->strings['Unknown post with guid: %s'] = 'Nieznany post z guid:%s';
$a->strings['Method not found'] = 'Nie znaleziono metody';

View file

@ -1,173 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Alexey Adamov <2077@tutanota.com>, 2019
# Eugene Veresk <eugene.vereshchagin@gmail.com>, 2020
# Alexander An <ravnina@gmail.com>, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Alexander An <ravnina@gmail.com>, 2022\n"
"Language-Team: Russian (https://www.transifex.com/Friendica/teams/12172/ru/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Отфильтровано по правилу: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Расширенный фильтр содержимого"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "Вернуться к настройкам дополнений"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Добавить правило"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Помощь"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Добавляйте и управляйте своими собственными фильтрами на этой странице. У "
"правил есть имя и произвольное выражение, которое будет сопоставляться с "
"данными поста. Для полной ссылки на доступные операции и переменные, "
"посмотрите страницу справки."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Ваши правила"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"У Вас нет ни одного правила. Начните добавление первого с нажатия на кнопку "
"выше, рядом с названием."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Отключено"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Включено"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Отключить это правило"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Включить это правило"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Изменить это правило"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Изменить правило"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Сохранить это правило"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Удалить это правило"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Правило"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Закрыть"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Добавить новое правило"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Название правила"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Содержание правила"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Отмена"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr "Это дополнение требует наличия хотя бы одной записи на этом узле."
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Вы должны авторизоваться для использования этого метода"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Неверный ключ, пожалуйста, перезагрузите страницу"
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Требуется ввести название и значение правила."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Правило успешно добавлено"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Правило не найдено или доступ к нему закрыт"
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Правило успешно обновлено"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Правило успешно удалено"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Отсутствующий аргумент: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Неизвестный пост в ID: %s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Метод не найден"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_ru")) {
function string_plural_select_ru($n){
$n = intval($n);
if ($n%10==1 && $n%100!=11) { return 0; } else if ($n%10>=2 && $n%10<=4 && ($n%100<12 || $n%100>14)) { return 1; } else if ($n%10==0 || ($n%10>=5 && $n%10<=9) || ($n%100>=11 && $n%100<=14)) { return 2; } else { return 3; }
}}
$a->strings['Filtered by rule: %s'] = 'Отфильтровано по правилу: %s';
$a->strings['Advanced Content Filter'] = 'Расширенный фильтр содержимого';
$a->strings['Back to Addon Settings'] = 'Вернуться к настройкам дополнений';
$a->strings['Add a Rule'] = 'Добавить правило';
$a->strings['Help'] = 'Помощь';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Добавляйте и управляйте своими собственными фильтрами на этой странице. У правил есть имя и произвольное выражение, которое будет сопоставляться с данными поста. Для полной ссылки на доступные операции и переменные, посмотрите страницу справки.';
$a->strings['Your rules'] = 'Ваши правила';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'У Вас нет ни одного правила. Начните добавление первого с нажатия на кнопку выше, рядом с названием.';
$a->strings['Disabled'] = 'Отключено';
$a->strings['Enabled'] = 'Включено';
$a->strings['Disable this rule'] = 'Отключить это правило';
$a->strings['Enable this rule'] = 'Включить это правило';
$a->strings['Edit this rule'] = 'Изменить это правило';
$a->strings['Edit the rule'] = 'Изменить правило';
$a->strings['Save this rule'] = 'Сохранить это правило';
$a->strings['Delete this rule'] = 'Удалить это правило';
$a->strings['Rule'] = 'Правило';
$a->strings['Close'] = 'Закрыть';
$a->strings['Add new rule'] = 'Добавить новое правило';
$a->strings['Rule Name'] = 'Название правила';
$a->strings['Rule Expression'] = 'Содержание правила';
$a->strings['Cancel'] = 'Отмена';
$a->strings['This addon requires this node having at least one post'] = 'Это дополнение требует наличия хотя бы одной записи на этом узле.';
$a->strings['You must be logged in to use this method'] = 'Вы должны авторизоваться для использования этого метода';
$a->strings['Invalid form security token, please refresh the page.'] = 'Неверный ключ, пожалуйста, перезагрузите страницу';
$a->strings['The rule name and expression are required.'] = 'Требуется ввести название и значение правила.';
$a->strings['Rule successfully added'] = 'Правило успешно добавлено';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Правило не найдено или доступ к нему закрыт';
$a->strings['Rule successfully updated'] = 'Правило успешно обновлено';
$a->strings['Rule successfully deleted'] = 'Правило успешно удалено';
$a->strings['Missing argument: guid.'] = 'Отсутствующий аргумент: guid.';
$a->strings['Unknown post with guid: %s'] = 'Неизвестный пост в ID: %s';
$a->strings['Method not found'] = 'Метод не найден';

View file

@ -1,172 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Bjoessi <torbjorn.andersson@syte.se>, 2019
# Viktor Nilsson, 2022
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2022-05-11 08:54-0400\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Viktor Nilsson, 2022\n"
"Language-Team: Swedish (https://www.transifex.com/Friendica/teams/12172/sv/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: sv\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: advancedcontentfilter.php:154
#, php-format
msgid "Filtered by rule: %s"
msgstr "Filtrerat efter regel: %s"
#: advancedcontentfilter.php:170 advancedcontentfilter.php:225
msgid "Advanced Content Filter"
msgstr "Avancerat innehållsfiter"
#: advancedcontentfilter.php:224
msgid "Back to Addon Settings"
msgstr "TIllbaka till Tilläggsinställningar"
#: advancedcontentfilter.php:226
msgid "Add a Rule"
msgstr "Lägg till en regel"
#: advancedcontentfilter.php:227
msgid "Help"
msgstr "Hjälp"
#: advancedcontentfilter.php:228
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the help page."
msgstr ""
"Lägg till och hantera dina personliga regler för innehållsfilter i det här "
"fönstret. Regler har ett namn och ett filteruttryck som jämförs mot "
"inläggets innehåll. Förteckning över alla operander och variabler finns att "
"hitta på <a href=\"advancedcontentfilter/help\">hjälpsidan</a>."
#: advancedcontentfilter.php:229
msgid "Your rules"
msgstr "Dina regler"
#: advancedcontentfilter.php:230
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr ""
"Du har inga regler än! Lägg till regler genom att klicka på knappen ovanför,"
" bredvid överskriften."
#: advancedcontentfilter.php:231
msgid "Disabled"
msgstr "Inaktiverad"
#: advancedcontentfilter.php:232
msgid "Enabled"
msgstr "Aktiverad"
#: advancedcontentfilter.php:233
msgid "Disable this rule"
msgstr "Inaktivera den här regeln"
#: advancedcontentfilter.php:234
msgid "Enable this rule"
msgstr "Aktivera den här regeln"
#: advancedcontentfilter.php:235
msgid "Edit this rule"
msgstr "Redigera den här regeln"
#: advancedcontentfilter.php:236
msgid "Edit the rule"
msgstr "Redigera den här regeln"
#: advancedcontentfilter.php:237
msgid "Save this rule"
msgstr "Spara den här regeln"
#: advancedcontentfilter.php:238
msgid "Delete this rule"
msgstr "Ta bort den här regeln"
#: advancedcontentfilter.php:239
msgid "Rule"
msgstr "Regel"
#: advancedcontentfilter.php:240
msgid "Close"
msgstr "Stäng"
#: advancedcontentfilter.php:241
msgid "Add new rule"
msgstr "Lägg till ny regel"
#: advancedcontentfilter.php:242
msgid "Rule Name"
msgstr "Regelnamn"
#: advancedcontentfilter.php:243
msgid "Rule Expression"
msgstr "Regeluttryck"
#: advancedcontentfilter.php:244
msgid "Cancel"
msgstr "Avbryt"
#: advancedcontentfilter.php:295
msgid "This addon requires this node having at least one post"
msgstr "Detta tillägg kräver att denna nod har åtminstone ett inlägg"
#: advancedcontentfilter.php:325 advancedcontentfilter.php:336
#: advancedcontentfilter.php:347 advancedcontentfilter.php:383
#: advancedcontentfilter.php:414 advancedcontentfilter.php:437
msgid "You must be logged in to use this method"
msgstr "Du måste vara inloggad för att använda den här funktionen"
#: advancedcontentfilter.php:351 advancedcontentfilter.php:387
#: advancedcontentfilter.php:418
msgid "Invalid form security token, please refresh the page."
msgstr "Felaktigt säkerhetsformulärstecken, vänligen uppdatera sidan."
#: advancedcontentfilter.php:363
msgid "The rule name and expression are required."
msgstr "Regelns namn och uttryck krävs."
#: advancedcontentfilter.php:377
msgid "Rule successfully added"
msgstr "Regeln kunde läggas till"
#: advancedcontentfilter.php:391 advancedcontentfilter.php:422
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "Regeln finns inte eller tillhör inte dig."
#: advancedcontentfilter.php:408
msgid "Rule successfully updated"
msgstr "Uppdatering av regel lyckades"
#: advancedcontentfilter.php:431
msgid "Rule successfully deleted"
msgstr "Borttagning av regel lyckades"
#: advancedcontentfilter.php:441
msgid "Missing argument: guid."
msgstr "Argument saknas: guid."
#: advancedcontentfilter.php:449
#, php-format
msgid "Unknown post with guid: %s"
msgstr "Okänt inlägg med guid: %s"
#: src/middlewares.php:49
msgid "Method not found"
msgstr "Metod hittades inte"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_sv")) {
function string_plural_select_sv($n){
$n = intval($n);
return intval($n != 1);
}}
$a->strings['Filtered by rule: %s'] = 'Filtrerat efter regel: %s';
$a->strings['Advanced Content Filter'] = 'Avancerat innehållsfiter';
$a->strings['Back to Addon Settings'] = 'TIllbaka till Tilläggsinställningar';
$a->strings['Add a Rule'] = 'Lägg till en regel';
$a->strings['Help'] = 'Hjälp';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the help page.'] = 'Lägg till och hantera dina personliga regler för innehållsfilter i det här fönstret. Regler har ett namn och ett filteruttryck som jämförs mot inläggets innehåll. Förteckning över alla operander och variabler finns att hitta på <a href="advancedcontentfilter/help">hjälpsidan</a>.';
$a->strings['Your rules'] = 'Dina regler';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = 'Du har inga regler än! Lägg till regler genom att klicka på knappen ovanför, bredvid överskriften.';
$a->strings['Disabled'] = 'Inaktiverad';
$a->strings['Enabled'] = 'Aktiverad';
$a->strings['Disable this rule'] = 'Inaktivera den här regeln';
$a->strings['Enable this rule'] = 'Aktivera den här regeln';
$a->strings['Edit this rule'] = 'Redigera den här regeln';
$a->strings['Edit the rule'] = 'Redigera den här regeln';
$a->strings['Save this rule'] = 'Spara den här regeln';
$a->strings['Delete this rule'] = 'Ta bort den här regeln';
$a->strings['Rule'] = 'Regel';
$a->strings['Close'] = 'Stäng';
$a->strings['Add new rule'] = 'Lägg till ny regel';
$a->strings['Rule Name'] = 'Regelnamn';
$a->strings['Rule Expression'] = 'Regeluttryck';
$a->strings['Cancel'] = 'Avbryt';
$a->strings['This addon requires this node having at least one post'] = 'Detta tillägg kräver att denna nod har åtminstone ett inlägg';
$a->strings['You must be logged in to use this method'] = 'Du måste vara inloggad för att använda den här funktionen';
$a->strings['Invalid form security token, please refresh the page.'] = 'Felaktigt säkerhetsformulärstecken, vänligen uppdatera sidan.';
$a->strings['The rule name and expression are required.'] = 'Regelns namn och uttryck krävs.';
$a->strings['Rule successfully added'] = 'Regeln kunde läggas till';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = 'Regeln finns inte eller tillhör inte dig.';
$a->strings['Rule successfully updated'] = 'Uppdatering av regel lyckades';
$a->strings['Rule successfully deleted'] = 'Borttagning av regel lyckades';
$a->strings['Missing argument: guid.'] = 'Argument saknas: guid.';
$a->strings['Unknown post with guid: %s'] = 'Okänt inlägg med guid: %s';
$a->strings['Method not found'] = 'Metod hittades inte';

View file

@ -1,171 +0,0 @@
# ADDON advancedcontentfilter
# Copyright (C)
# This file is distributed under the same license as the Friendica advancedcontentfilter addon package.
#
#
# Translators:
# Tom <hxxtom@gmail.com>, 2020
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-04-17 04:04+0200\n"
"PO-Revision-Date: 2018-05-24 06:41+0000\n"
"Last-Translator: Tom <hxxtom@gmail.com>, 2020\n"
"Language-Team: Chinese (China) (https://www.transifex.com/Friendica/teams/12172/zh_CN/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: advancedcontentfilter.php:134
#, php-format
msgid "Filtered by rule: %s"
msgstr "通过规则过滤:%s"
#: advancedcontentfilter.php:147 advancedcontentfilter.php:204
msgid "Advanced Content Filter"
msgstr "高级内容过滤"
#: advancedcontentfilter.php:203
msgid "Back to Addon Settings"
msgstr "返回扩展设置"
#: advancedcontentfilter.php:205
msgid "Add a Rule"
msgstr "添加规则"
#: advancedcontentfilter.php:206
msgid "Help"
msgstr "帮助"
#: advancedcontentfilter.php:207
msgid ""
"Add and manage your personal content filter rules in this screen. Rules have"
" a name and an arbitrary expression that will be matched against post data. "
"For a complete reference of the available operations and variables, check "
"the <a href=\"advancedcontentfilter/help\">help page</a>."
msgstr ""
"在此界面上添加和管理你的个人内容过滤规则。规则要有名称和能匹配帖子内容的任意表达式。完整可用的运算符和变量,请查看<a "
"href=\"advancedcontentfilter/help\">帮助页面</a>。"
#: advancedcontentfilter.php:208
msgid "Your rules"
msgstr "你的规则"
#: advancedcontentfilter.php:209
msgid ""
"You have no rules yet! Start adding one by clicking on the button above next"
" to the title."
msgstr "你还没有规则!点击标题上方的按钮开始新增规则。"
#: advancedcontentfilter.php:210
msgid "Disabled"
msgstr "禁用"
#: advancedcontentfilter.php:211
msgid "Enabled"
msgstr "启用"
#: advancedcontentfilter.php:212
msgid "Disable this rule"
msgstr "禁用此规则"
#: advancedcontentfilter.php:213
msgid "Enable this rule"
msgstr "启用此规则"
#: advancedcontentfilter.php:214
msgid "Edit this rule"
msgstr "编辑此规则"
#: advancedcontentfilter.php:215
msgid "Edit the rule"
msgstr "编辑规则"
#: advancedcontentfilter.php:216
msgid "Save this rule"
msgstr "保存规则"
#: advancedcontentfilter.php:217
msgid "Delete this rule"
msgstr "删除此规则"
#: advancedcontentfilter.php:218
msgid "Rule"
msgstr "规则"
#: advancedcontentfilter.php:219
msgid "Close"
msgstr "关闭"
#: advancedcontentfilter.php:220
msgid "Add new rule"
msgstr "新增规则"
#: advancedcontentfilter.php:221
msgid "Rule Name"
msgstr "规则名"
#: advancedcontentfilter.php:222
msgid "Rule Expression"
msgstr "规则表达式"
#: advancedcontentfilter.php:223
msgid ""
"<p>Examples:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite'</pre></li><li>tags</li></ul>"
msgstr ""
"<p>例子:</p><ul><li><pre>author_link == "
"'https://friendica.mrpetovan.com/profile/hypolite</pre></li><li>tags</li></ul>"
#: advancedcontentfilter.php:224
msgid "Cancel"
msgstr "取消"
#: advancedcontentfilter.php:290 advancedcontentfilter.php:301
#: advancedcontentfilter.php:312 advancedcontentfilter.php:346
#: advancedcontentfilter.php:375 advancedcontentfilter.php:396
msgid "You must be logged in to use this method"
msgstr "使用此模式您必须先登录。"
#: advancedcontentfilter.php:316 advancedcontentfilter.php:350
#: advancedcontentfilter.php:379
msgid "Invalid form security token, please refresh the page."
msgstr "无效的安全令牌,请刷新页面。"
#: advancedcontentfilter.php:328
msgid "The rule name and expression are required."
msgstr "规则名和表达式必填。"
#: advancedcontentfilter.php:340
msgid "Rule successfully added"
msgstr "规则添加成功。"
#: advancedcontentfilter.php:354 advancedcontentfilter.php:383
msgid "Rule doesn't exist or doesn't belong to you."
msgstr "规则不存在或不属于你。"
#: advancedcontentfilter.php:369
msgid "Rule successfully updated"
msgstr "规则更新成功"
#: advancedcontentfilter.php:390
msgid "Rule successfully deleted"
msgstr "规则删除成功"
#: advancedcontentfilter.php:400
msgid "Missing argument: guid."
msgstr "缺少参数guid。"
#: advancedcontentfilter.php:406
#, php-format
msgid "Unknown post with guid: %s"
msgstr "未知帖子 guid%s"
#: src/middlewares.php:28
msgid "Method not found"
msgstr "未找到模式"

View file

@ -1,40 +0,0 @@
<?php
if(! function_exists("string_plural_select_zh_cn")) {
function string_plural_select_zh_cn($n){
$n = intval($n);
return intval(0);
}}
$a->strings['Filtered by rule: %s'] = '通过规则过滤:%s';
$a->strings['Advanced Content Filter'] = '高级内容过滤';
$a->strings['Back to Addon Settings'] = '返回扩展设置';
$a->strings['Add a Rule'] = '添加规则';
$a->strings['Help'] = '帮助';
$a->strings['Add and manage your personal content filter rules in this screen. Rules have a name and an arbitrary expression that will be matched against post data. For a complete reference of the available operations and variables, check the <a href="advancedcontentfilter/help">help page</a>.'] = '在此界面上添加和管理你的个人内容过滤规则。规则要有名称和能匹配帖子内容的任意表达式。完整可用的运算符和变量,请查看<a href="advancedcontentfilter/help">帮助页面</a>。';
$a->strings['Your rules'] = '你的规则';
$a->strings['You have no rules yet! Start adding one by clicking on the button above next to the title.'] = '你还没有规则!点击标题上方的按钮开始新增规则。';
$a->strings['Disabled'] = '禁用';
$a->strings['Enabled'] = '启用';
$a->strings['Disable this rule'] = '禁用此规则';
$a->strings['Enable this rule'] = '启用此规则';
$a->strings['Edit this rule'] = '编辑此规则';
$a->strings['Edit the rule'] = '编辑规则';
$a->strings['Save this rule'] = '保存规则';
$a->strings['Delete this rule'] = '删除此规则';
$a->strings['Rule'] = '规则';
$a->strings['Close'] = '关闭';
$a->strings['Add new rule'] = '新增规则';
$a->strings['Rule Name'] = '规则名';
$a->strings['Rule Expression'] = '规则表达式';
$a->strings['<p>Examples:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite\'</pre></li><li>tags</li></ul>'] = '<p>例子:</p><ul><li><pre>author_link == \'https://friendica.mrpetovan.com/profile/hypolite</pre></li><li>tags</li></ul>';
$a->strings['Cancel'] = '取消';
$a->strings['You must be logged in to use this method'] = '使用此模式您必须先登录。';
$a->strings['Invalid form security token, please refresh the page.'] = '无效的安全令牌,请刷新页面。';
$a->strings['The rule name and expression are required.'] = '规则名和表达式必填。';
$a->strings['Rule successfully added'] = '规则添加成功。';
$a->strings['Rule doesn\'t exist or doesn\'t belong to you.'] = '规则不存在或不属于你。';
$a->strings['Rule successfully updated'] = '规则更新成功';
$a->strings['Rule successfully deleted'] = '规则删除成功';
$a->strings['Missing argument: guid.'] = '缺少参数guid。';
$a->strings['Unknown post with guid: %s'] = '未知帖子 guid%s';
$a->strings['Method not found'] = '未找到模式';

View file

@ -1,96 +0,0 @@
<!--
This the the source HTML for the render functions defined in advancedcontentfilter.js
This file is only for reference only and editing it won't change the addon display.
Here's the workflow to change the actual display:
1. Edit this file
2. Run it through https://vuejs.org/v2/guide/render-function.html#Template-Compilation
3. Replace the render and staticRenderFns members in advancedcontentfilter.js by the contents of the anonymous() functions
-->
<div id="rules">
<p><a href="settings/addons">🔙 {{ messages.backtosettings }}</a></p>
<h1>
{{ messages.title }}
&nbsp;
<a href="advancedcontentfilter/help" class="btn btn-default btn-sm" :title="messages.help">
<i class="fa fa-question fa-2x" aria-hidden="true"></i>
</a>
</h1>
<div>{{ messages.intro }}</div>
<h2>
{{ messages.your_rules }}
&nbsp;
<button class="btn btn-primary btn-sm" :title="messages.add_a_rule" @click="showModal = true">
<i class="fa fa-plus fa-2x" aria-hidden="true"></i>
</button>
</h2>
<div v-if="rules.length === 0" v-cloak>
{{ messages.no_rules }}
</div>
<ul class="list-group" v-cloak>
<li class="list-group-item" v-for="rule in rules">
<p class="pull-right">
<button type="button" class="btn btn-xs btn-primary" v-on:click="toggleActive(rule)" :aria-label="messages.disable_this_rule" :title="messages.disable_this_rule" v-if="parseInt(rule.active)">
<i class="fa fa-toggle-on" aria-hidden="true"></i> {{ messages.enabled }}
</button>
<button type="button" class="btn btn-xs btn-default" v-on:click="toggleActive(rule)" :aria-label="messages.enable_this_rule" :title="messages.enable_this_rule" v-else>
<i class="fa fa-toggle-off" aria-hidden="true"></i> {{ messages.disabled }}
</button>
&nbsp;
<button type="button" class="btn btn-xs btn-primary" v-on:click="editRule(rule)" :aria-label="messages.edit_this_rule" :title="messages.edit_this_rule">
<i class="fa fa-pencil" aria-hidden="true"></i>
</button>
&nbsp;
<button type="button" class="btn btn-xs btn-default" v-on:click="deleteRule(rule)" :aria-label="messages.delete_this_rule" :title="messages.delete_this_rule">
<i class="fa fa-trash-o" aria-hidden="true"></i>
</button>
</p>
<h3 class="list-group-item-heading">
{{ messages.rule }} #{{ rule.id }}: {{ rule.name }}
</h3>
<pre class="list-group-item-text" v-if="rule.expression">{{ rule.expression }}</pre>
</li>
</ul>
<div class="modal fade" ref="vuemodal" tabindex="-1" role="dialog" v-cloak>
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" :aria-label="messages.close" @click="showModal = false" v-if="currentTheme === 'frio'"><span aria-hidden="true">&times;</span></button>
<h3 v-if="rule.id">{{ messages.edit_the_rule }} "{{ rule.name }}"</h3>
<h3 v-if="!rule.id">{{ messages.add_a_rule }}</h3>
</div>
<div class="modal-body">
<form>
<div class="alert alert-danger" role="alert" v-if="errorMessage">{{ errorMessage }}</div>
<div class="form-group">
<input class="form-control" :placeholder="messages.rule_name" v-model="rule.name">
</div>
<div class="form-group">
<input class="form-control" :placeholder="messages.rule_expression" v-model="rule.expression">
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal" aria-label="Close" @click="resetForm()">{{ messages.cancel }}</button>
<button slot="button" class="btn btn-primary" type="button" v-if="rule.id" v-on:click="saveRule(rule)">{{ messages.save_this_rule }}</button>
<button slot="button" class="btn btn-primary" type="button" v-if="!rule.id" v-on:click="addRule()">{{ messages.add_a_rule }}</button>
</div>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<form class="form-inline" v-on:submit.prevent="showVariables()">
<fieldset>
<legend>Show post variables</legend>
<div class="form-group" style="width: 50%">
<label for="itemUrl" class="sr-only">Post URL or item guid</label>
<input class="form-control" id="itemUrl" placeholder="Post URL or item guid" v-model="itemUrl" style="width: 100%">
</div>
<button type="submit" class="btn btn-primary">Show Variables</button>
</fieldset>
</form>
<pre v-cloak>
{{ itemJson }}
</pre>
</div>

View file

@ -1,22 +0,0 @@
<div id="adminpage">
<style>[v-cloak] { display: none; }</style>
<div id="rules"></div>
<script>
var existingRules = {{$rules|json_encode nofilter}};
var messages = {
{{foreach $messages as $key => $value}}
{{$key}}: "{{$value}}",
{{/foreach}}
};
var csrfToken = "{{$form_security_token}}";
var currentTheme = "{{$current_theme}}";
</script>
<!-- JS -->
<script src="{{$baseurl}}/addon/advancedcontentfilter/asset/vue/dist/vue.min.js"></script>
<script src="{{$baseurl}}/addon/advancedcontentfilter/advancedcontentfilter.js"></script>
</div>

View file

@ -1,25 +0,0 @@
<?php
// autoload.php @generated by Composer
if (PHP_VERSION_ID < 50600) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
$err = 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL;
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, $err);
} elseif (!headers_sent()) {
echo $err;
}
}
trigger_error(
$err,
E_USER_ERROR
);
}
require_once __DIR__ . '/composer/autoload_real.php';
return ComposerAutoloaderInitAdvancedContentFilterAddon::getLoader();

View file

@ -1,579 +0,0 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer\Autoload;
/**
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
*
* $loader = new \Composer\Autoload\ClassLoader();
*
* // register classes with namespaces
* $loader->add('Symfony\Component', __DIR__.'/component');
* $loader->add('Symfony', __DIR__.'/framework');
*
* // activate the autoloader
* $loader->register();
*
* // to enable searching the include path (eg. for PEAR packages)
* $loader->setUseIncludePath(true);
*
* In this example, if you try to use a class in the Symfony\Component
* namespace or one of its children (Symfony\Component\Console for instance),
* the autoloader will first look for the class under the component/
* directory, and it will then fallback to the framework/ directory if not
* found before giving up.
*
* This class is loosely based on the Symfony UniversalClassLoader.
*
* @author Fabien Potencier <fabien@symfony.com>
* @author Jordi Boggiano <j.boggiano@seld.be>
* @see https://www.php-fig.org/psr/psr-0/
* @see https://www.php-fig.org/psr/psr-4/
*/
class ClassLoader
{
/** @var \Closure(string):void */
private static $includeFile;
/** @var string|null */
private $vendorDir;
// PSR-4
/**
* @var array<string, array<string, int>>
*/
private $prefixLengthsPsr4 = array();
/**
* @var array<string, list<string>>
*/
private $prefixDirsPsr4 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr4 = array();
// PSR-0
/**
* List of PSR-0 prefixes
*
* Structured as array('F (first letter)' => array('Foo\Bar (full prefix)' => array('path', 'path2')))
*
* @var array<string, array<string, list<string>>>
*/
private $prefixesPsr0 = array();
/**
* @var list<string>
*/
private $fallbackDirsPsr0 = array();
/** @var bool */
private $useIncludePath = false;
/**
* @var array<string, string>
*/
private $classMap = array();
/** @var bool */
private $classMapAuthoritative = false;
/**
* @var array<string, bool>
*/
private $missingClasses = array();
/** @var string|null */
private $apcuPrefix;
/**
* @var array<string, self>
*/
private static $registeredLoaders = array();
/**
* @param string|null $vendorDir
*/
public function __construct($vendorDir = null)
{
$this->vendorDir = $vendorDir;
self::initializeIncludeClosure();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixes()
{
if (!empty($this->prefixesPsr0)) {
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
}
return array();
}
/**
* @return array<string, list<string>>
*/
public function getPrefixesPsr4()
{
return $this->prefixDirsPsr4;
}
/**
* @return list<string>
*/
public function getFallbackDirs()
{
return $this->fallbackDirsPsr0;
}
/**
* @return list<string>
*/
public function getFallbackDirsPsr4()
{
return $this->fallbackDirsPsr4;
}
/**
* @return array<string, string> Array of classname => path
*/
public function getClassMap()
{
return $this->classMap;
}
/**
* @param array<string, string> $classMap Class to filename map
*
* @return void
*/
public function addClassMap(array $classMap)
{
if ($this->classMap) {
$this->classMap = array_merge($this->classMap, $classMap);
} else {
$this->classMap = $classMap;
}
}
/**
* Registers a set of PSR-0 directories for a given prefix, either
* appending or prepending to the ones previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 root directories
* @param bool $prepend Whether to prepend the directories
*
* @return void
*/
public function add($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
if ($prepend) {
$this->fallbackDirsPsr0 = array_merge(
$paths,
$this->fallbackDirsPsr0
);
} else {
$this->fallbackDirsPsr0 = array_merge(
$this->fallbackDirsPsr0,
$paths
);
}
return;
}
$first = $prefix[0];
if (!isset($this->prefixesPsr0[$first][$prefix])) {
$this->prefixesPsr0[$first][$prefix] = $paths;
return;
}
if ($prepend) {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$paths,
$this->prefixesPsr0[$first][$prefix]
);
} else {
$this->prefixesPsr0[$first][$prefix] = array_merge(
$this->prefixesPsr0[$first][$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-4 directories for a given namespace, either
* appending or prepending to the ones previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
* @param bool $prepend Whether to prepend the directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function addPsr4($prefix, $paths, $prepend = false)
{
$paths = (array) $paths;
if (!$prefix) {
// Register directories for the root namespace.
if ($prepend) {
$this->fallbackDirsPsr4 = array_merge(
$paths,
$this->fallbackDirsPsr4
);
} else {
$this->fallbackDirsPsr4 = array_merge(
$this->fallbackDirsPsr4,
$paths
);
}
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
// Register directories for a new namespace.
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = $paths;
} elseif ($prepend) {
// Prepend directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$paths,
$this->prefixDirsPsr4[$prefix]
);
} else {
// Append directories for an already registered namespace.
$this->prefixDirsPsr4[$prefix] = array_merge(
$this->prefixDirsPsr4[$prefix],
$paths
);
}
}
/**
* Registers a set of PSR-0 directories for a given prefix,
* replacing any others previously set for this prefix.
*
* @param string $prefix The prefix
* @param list<string>|string $paths The PSR-0 base directories
*
* @return void
*/
public function set($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr0 = (array) $paths;
} else {
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
}
}
/**
* Registers a set of PSR-4 directories for a given namespace,
* replacing any others previously set for this namespace.
*
* @param string $prefix The prefix/namespace, with trailing '\\'
* @param list<string>|string $paths The PSR-4 base directories
*
* @throws \InvalidArgumentException
*
* @return void
*/
public function setPsr4($prefix, $paths)
{
if (!$prefix) {
$this->fallbackDirsPsr4 = (array) $paths;
} else {
$length = strlen($prefix);
if ('\\' !== $prefix[$length - 1]) {
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
}
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
$this->prefixDirsPsr4[$prefix] = (array) $paths;
}
}
/**
* Turns on searching the include path for class files.
*
* @param bool $useIncludePath
*
* @return void
*/
public function setUseIncludePath($useIncludePath)
{
$this->useIncludePath = $useIncludePath;
}
/**
* Can be used to check if the autoloader uses the include path to check
* for classes.
*
* @return bool
*/
public function getUseIncludePath()
{
return $this->useIncludePath;
}
/**
* Turns off searching the prefix and fallback directories for classes
* that have not been registered with the class map.
*
* @param bool $classMapAuthoritative
*
* @return void
*/
public function setClassMapAuthoritative($classMapAuthoritative)
{
$this->classMapAuthoritative = $classMapAuthoritative;
}
/**
* Should class lookup fail if not found in the current class map?
*
* @return bool
*/
public function isClassMapAuthoritative()
{
return $this->classMapAuthoritative;
}
/**
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
*
* @param string|null $apcuPrefix
*
* @return void
*/
public function setApcuPrefix($apcuPrefix)
{
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
}
/**
* The APCu prefix in use, or null if APCu caching is not enabled.
*
* @return string|null
*/
public function getApcuPrefix()
{
return $this->apcuPrefix;
}
/**
* Registers this instance as an autoloader.
*
* @param bool $prepend Whether to prepend the autoloader or not
*
* @return void
*/
public function register($prepend = false)
{
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
if (null === $this->vendorDir) {
return;
}
if ($prepend) {
self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders;
} else {
unset(self::$registeredLoaders[$this->vendorDir]);
self::$registeredLoaders[$this->vendorDir] = $this;
}
}
/**
* Unregisters this instance as an autoloader.
*
* @return void
*/
public function unregister()
{
spl_autoload_unregister(array($this, 'loadClass'));
if (null !== $this->vendorDir) {
unset(self::$registeredLoaders[$this->vendorDir]);
}
}
/**
* Loads the given class or interface.
*
* @param string $class The name of the class
* @return true|null True if loaded, null otherwise
*/
public function loadClass($class)
{
if ($file = $this->findFile($class)) {
$includeFile = self::$includeFile;
$includeFile($file);
return true;
}
return null;
}
/**
* Finds the path to the file where the class is defined.
*
* @param string $class The name of the class
*
* @return string|false The path if found, false otherwise
*/
public function findFile($class)
{
// class map lookup
if (isset($this->classMap[$class])) {
return $this->classMap[$class];
}
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
return false;
}
if (null !== $this->apcuPrefix) {
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
if ($hit) {
return $file;
}
}
$file = $this->findFileWithExtension($class, '.php');
// Search for Hack files if we are running on HHVM
if (false === $file && defined('HHVM_VERSION')) {
$file = $this->findFileWithExtension($class, '.hh');
}
if (null !== $this->apcuPrefix) {
apcu_add($this->apcuPrefix.$class, $file);
}
if (false === $file) {
// Remember that this class does not exist.
$this->missingClasses[$class] = true;
}
return $file;
}
/**
* Returns the currently registered loaders keyed by their corresponding vendor directories.
*
* @return array<string, self>
*/
public static function getRegisteredLoaders()
{
return self::$registeredLoaders;
}
/**
* @param string $class
* @param string $ext
* @return string|false
*/
private function findFileWithExtension($class, $ext)
{
// PSR-4 lookup
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
$first = $class[0];
if (isset($this->prefixLengthsPsr4[$first])) {
$subPath = $class;
while (false !== $lastPos = strrpos($subPath, '\\')) {
$subPath = substr($subPath, 0, $lastPos);
$search = $subPath . '\\';
if (isset($this->prefixDirsPsr4[$search])) {
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
foreach ($this->prefixDirsPsr4[$search] as $dir) {
if (file_exists($file = $dir . $pathEnd)) {
return $file;
}
}
}
}
}
// PSR-4 fallback dirs
foreach ($this->fallbackDirsPsr4 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
return $file;
}
}
// PSR-0 lookup
if (false !== $pos = strrpos($class, '\\')) {
// namespaced class name
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
} else {
// PEAR-like class name
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
}
if (isset($this->prefixesPsr0[$first])) {
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
if (0 === strpos($class, $prefix)) {
foreach ($dirs as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
}
}
}
// PSR-0 fallback dirs
foreach ($this->fallbackDirsPsr0 as $dir) {
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
return $file;
}
}
// PSR-0 include paths.
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
return $file;
}
return false;
}
/**
* @return void
*/
private static function initializeIncludeClosure()
{
if (self::$includeFile !== null) {
return;
}
/**
* Scope isolated include.
*
* Prevents access to $this/self from included files.
*
* @param string $file
* @return void
*/
self::$includeFile = \Closure::bind(static function($file) {
include $file;
}, null, null);
}
}

View file

@ -1,359 +0,0 @@
<?php
/*
* This file is part of Composer.
*
* (c) Nils Adermann <naderman@naderman.de>
* Jordi Boggiano <j.boggiano@seld.be>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Composer;
use Composer\Autoload\ClassLoader;
use Composer\Semver\VersionParser;
/**
* This class is copied in every Composer installed project and available to all
*
* See also https://getcomposer.org/doc/07-runtime.md#installed-versions
*
* To require its presence, you can require `composer-runtime-api ^2.0`
*
* @final
*/
class InstalledVersions
{
/**
* @var mixed[]|null
* @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}|array{}|null
*/
private static $installed;
/**
* @var bool|null
*/
private static $canGetVendors;
/**
* @var array[]
* @psalm-var array<string, array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static $installedByVendor = array();
/**
* Returns a list of all package names which are present, either by being installed, replaced or provided
*
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackages()
{
$packages = array();
foreach (self::getInstalled() as $installed) {
$packages[] = array_keys($installed['versions']);
}
if (1 === \count($packages)) {
return $packages[0];
}
return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
}
/**
* Returns a list of all package names with a specific type e.g. 'library'
*
* @param string $type
* @return string[]
* @psalm-return list<string>
*/
public static function getInstalledPackagesByType($type)
{
$packagesByType = array();
foreach (self::getInstalled() as $installed) {
foreach ($installed['versions'] as $name => $package) {
if (isset($package['type']) && $package['type'] === $type) {
$packagesByType[] = $name;
}
}
}
return $packagesByType;
}
/**
* Checks whether the given package is installed
*
* This also returns true if the package name is provided or replaced by another package
*
* @param string $packageName
* @param bool $includeDevRequirements
* @return bool
*/
public static function isInstalled($packageName, $includeDevRequirements = true)
{
foreach (self::getInstalled() as $installed) {
if (isset($installed['versions'][$packageName])) {
return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false;
}
}
return false;
}
/**
* Checks whether the given package satisfies a version constraint
*
* e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call:
*
* Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3')
*
* @param VersionParser $parser Install composer/semver to have access to this class and functionality
* @param string $packageName
* @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package
* @return bool
*/
public static function satisfies(VersionParser $parser, $packageName, $constraint)
{
$constraint = $parser->parseConstraints((string) $constraint);
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
return $provided->matches($constraint);
}
/**
* Returns a version constraint representing all the range(s) which are installed for a given package
*
* It is easier to use this via isInstalled() with the $constraint argument if you need to check
* whether a given version of a package is installed, and not just whether it exists
*
* @param string $packageName
* @return string Version constraint usable with composer/semver
*/
public static function getVersionRanges($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
$ranges = array();
if (isset($installed['versions'][$packageName]['pretty_version'])) {
$ranges[] = $installed['versions'][$packageName]['pretty_version'];
}
if (array_key_exists('aliases', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
}
if (array_key_exists('replaced', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
}
if (array_key_exists('provided', $installed['versions'][$packageName])) {
$ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
}
return implode(' || ', $ranges);
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['version'])) {
return null;
}
return $installed['versions'][$packageName]['version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present
*/
public static function getPrettyVersion($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['pretty_version'])) {
return null;
}
return $installed['versions'][$packageName]['pretty_version'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference
*/
public static function getReference($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
if (!isset($installed['versions'][$packageName]['reference'])) {
return null;
}
return $installed['versions'][$packageName]['reference'];
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @param string $packageName
* @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path.
*/
public static function getInstallPath($packageName)
{
foreach (self::getInstalled() as $installed) {
if (!isset($installed['versions'][$packageName])) {
continue;
}
return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null;
}
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
}
/**
* @return array
* @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}
*/
public static function getRootPackage()
{
$installed = self::getInstalled();
return $installed[0]['root'];
}
/**
* Returns the raw installed.php data for custom implementations
*
* @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect.
* @return array[]
* @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}
*/
public static function getRawData()
{
@trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED);
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
self::$installed = include __DIR__ . '/installed.php';
} else {
self::$installed = array();
}
}
return self::$installed;
}
/**
* Returns the raw data of all installed.php which are currently loaded for custom implementations
*
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
public static function getAllRawData()
{
return self::getInstalled();
}
/**
* Lets you reload the static array from another file
*
* This is only useful for complex integrations in which a project needs to use
* this class but then also needs to execute another project's autoloader in process,
* and wants to ensure both projects have access to their version of installed.php.
*
* A typical case would be PHPUnit, where it would need to make sure it reads all
* the data it needs from this class, then call reload() with
* `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure
* the project in which it runs can then also use this class safely, without
* interference between PHPUnit's dependencies and the project's dependencies.
*
* @param array[] $data A vendor/composer/installed.php data set
* @return void
*
* @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $data
*/
public static function reload($data)
{
self::$installed = $data;
self::$installedByVendor = array();
}
/**
* @return array[]
* @psalm-return list<array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>}>
*/
private static function getInstalled()
{
if (null === self::$canGetVendors) {
self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
}
$installed = array();
if (self::$canGetVendors) {
foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
if (isset(self::$installedByVendor[$vendorDir])) {
$installed[] = self::$installedByVendor[$vendorDir];
} elseif (is_file($vendorDir.'/composer/installed.php')) {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require $vendorDir.'/composer/installed.php';
$installed[] = self::$installedByVendor[$vendorDir] = $required;
if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) {
self::$installed = $installed[count($installed) - 1];
}
}
}
}
if (null === self::$installed) {
// only require the installed.php file if this file is loaded from its dumped location,
// and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937
if (substr(__DIR__, -8, 1) !== 'C') {
/** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array<string, array{pretty_version?: string, version?: string, reference?: string|null, type?: string, install_path?: string, aliases?: string[], dev_requirement: bool, replaced?: string[], provided?: string[]}>} $required */
$required = require __DIR__ . '/installed.php';
self::$installed = $required;
} else {
self::$installed = array();
}
}
if (self::$installed !== array()) {
$installed[] = self::$installed;
}
return $installed;
}
}

View file

@ -1,21 +0,0 @@
Copyright (c) Nils Adermann, Jordi Boggiano
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View file

@ -1,261 +0,0 @@
<?php
// autoload_classmap.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Attribute' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
'FastRoute\\BadRouteException' => $vendorDir . '/nikic/fast-route/src/BadRouteException.php',
'FastRoute\\DataGenerator' => $vendorDir . '/nikic/fast-route/src/DataGenerator.php',
'FastRoute\\DataGenerator\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
'FastRoute\\DataGenerator\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php',
'FastRoute\\DataGenerator\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php',
'FastRoute\\DataGenerator\\MarkBased' => $vendorDir . '/nikic/fast-route/src/DataGenerator/MarkBased.php',
'FastRoute\\DataGenerator\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php',
'FastRoute\\Dispatcher' => $vendorDir . '/nikic/fast-route/src/Dispatcher.php',
'FastRoute\\Dispatcher\\CharCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/CharCountBased.php',
'FastRoute\\Dispatcher\\GroupCountBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php',
'FastRoute\\Dispatcher\\GroupPosBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php',
'FastRoute\\Dispatcher\\MarkBased' => $vendorDir . '/nikic/fast-route/src/Dispatcher/MarkBased.php',
'FastRoute\\Dispatcher\\RegexBasedAbstract' => $vendorDir . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php',
'FastRoute\\Route' => $vendorDir . '/nikic/fast-route/src/Route.php',
'FastRoute\\RouteCollector' => $vendorDir . '/nikic/fast-route/src/RouteCollector.php',
'FastRoute\\RouteParser' => $vendorDir . '/nikic/fast-route/src/RouteParser.php',
'FastRoute\\RouteParser\\Std' => $vendorDir . '/nikic/fast-route/src/RouteParser/Std.php',
'JsonException' => $vendorDir . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
'PhpToken' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'Psr\\Cache\\CacheException' => $vendorDir . '/psr/cache/src/CacheException.php',
'Psr\\Cache\\CacheItemInterface' => $vendorDir . '/psr/cache/src/CacheItemInterface.php',
'Psr\\Cache\\CacheItemPoolInterface' => $vendorDir . '/psr/cache/src/CacheItemPoolInterface.php',
'Psr\\Cache\\InvalidArgumentException' => $vendorDir . '/psr/cache/src/InvalidArgumentException.php',
'Psr\\Container\\ContainerExceptionInterface' => $vendorDir . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => $vendorDir . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => $vendorDir . '/psr/container/src/NotFoundExceptionInterface.php',
'Psr\\Http\\Message\\MessageInterface' => $vendorDir . '/psr/http-message/src/MessageInterface.php',
'Psr\\Http\\Message\\RequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/RequestFactoryInterface.php',
'Psr\\Http\\Message\\RequestInterface' => $vendorDir . '/psr/http-message/src/RequestInterface.php',
'Psr\\Http\\Message\\ResponseFactoryInterface' => $vendorDir . '/psr/http-factory/src/ResponseFactoryInterface.php',
'Psr\\Http\\Message\\ResponseInterface' => $vendorDir . '/psr/http-message/src/ResponseInterface.php',
'Psr\\Http\\Message\\ServerRequestFactoryInterface' => $vendorDir . '/psr/http-factory/src/ServerRequestFactoryInterface.php',
'Psr\\Http\\Message\\ServerRequestInterface' => $vendorDir . '/psr/http-message/src/ServerRequestInterface.php',
'Psr\\Http\\Message\\StreamFactoryInterface' => $vendorDir . '/psr/http-factory/src/StreamFactoryInterface.php',
'Psr\\Http\\Message\\StreamInterface' => $vendorDir . '/psr/http-message/src/StreamInterface.php',
'Psr\\Http\\Message\\UploadedFileFactoryInterface' => $vendorDir . '/psr/http-factory/src/UploadedFileFactoryInterface.php',
'Psr\\Http\\Message\\UploadedFileInterface' => $vendorDir . '/psr/http-message/src/UploadedFileInterface.php',
'Psr\\Http\\Message\\UriFactoryInterface' => $vendorDir . '/psr/http-factory/src/UriFactoryInterface.php',
'Psr\\Http\\Message\\UriInterface' => $vendorDir . '/psr/http-message/src/UriInterface.php',
'Psr\\Http\\Server\\MiddlewareInterface' => $vendorDir . '/psr/http-server-middleware/src/MiddlewareInterface.php',
'Psr\\Http\\Server\\RequestHandlerInterface' => $vendorDir . '/psr/http-server-handler/src/RequestHandlerInterface.php',
'Psr\\Log\\AbstractLogger' => $vendorDir . '/psr/log/Psr/Log/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => $vendorDir . '/psr/log/Psr/Log/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => $vendorDir . '/psr/log/Psr/Log/LogLevel.php',
'Psr\\Log\\LoggerAwareInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareInterface.php',
'Psr\\Log\\LoggerAwareTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerAwareTrait.php',
'Psr\\Log\\LoggerInterface' => $vendorDir . '/psr/log/Psr/Log/LoggerInterface.php',
'Psr\\Log\\LoggerTrait' => $vendorDir . '/psr/log/Psr/Log/LoggerTrait.php',
'Psr\\Log\\NullLogger' => $vendorDir . '/psr/log/Psr/Log/NullLogger.php',
'Psr\\Log\\Test\\DummyTest' => $vendorDir . '/psr/log/Psr/Log/Test/DummyTest.php',
'Psr\\Log\\Test\\LoggerInterfaceTest' => $vendorDir . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
'Psr\\Log\\Test\\TestLogger' => $vendorDir . '/psr/log/Psr/Log/Test/TestLogger.php',
'Slim\\App' => $vendorDir . '/slim/slim/Slim/App.php',
'Slim\\CallableResolver' => $vendorDir . '/slim/slim/Slim/CallableResolver.php',
'Slim\\Error\\AbstractErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/AbstractErrorRenderer.php',
'Slim\\Error\\Renderers\\HtmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php',
'Slim\\Error\\Renderers\\JsonErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php',
'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php',
'Slim\\Error\\Renderers\\XmlErrorRenderer' => $vendorDir . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php',
'Slim\\Exception\\HttpBadRequestException' => $vendorDir . '/slim/slim/Slim/Exception/HttpBadRequestException.php',
'Slim\\Exception\\HttpException' => $vendorDir . '/slim/slim/Slim/Exception/HttpException.php',
'Slim\\Exception\\HttpForbiddenException' => $vendorDir . '/slim/slim/Slim/Exception/HttpForbiddenException.php',
'Slim\\Exception\\HttpGoneException' => $vendorDir . '/slim/slim/Slim/Exception/HttpGoneException.php',
'Slim\\Exception\\HttpInternalServerErrorException' => $vendorDir . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php',
'Slim\\Exception\\HttpMethodNotAllowedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php',
'Slim\\Exception\\HttpNotFoundException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotFoundException.php',
'Slim\\Exception\\HttpNotImplementedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpNotImplementedException.php',
'Slim\\Exception\\HttpSpecializedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpSpecializedException.php',
'Slim\\Exception\\HttpTooManyRequestsException' => $vendorDir . '/slim/slim/Slim/Exception/HttpTooManyRequestsException.php',
'Slim\\Exception\\HttpUnauthorizedException' => $vendorDir . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php',
'Slim\\Factory\\AppFactory' => $vendorDir . '/slim/slim/Slim/Factory/AppFactory.php',
'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php',
'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php',
'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php',
'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php',
'Slim\\Factory\\Psr17\\Psr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php',
'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php',
'Slim\\Factory\\Psr17\\ServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php',
'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php',
'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php',
'Slim\\Factory\\Psr17\\SlimPsr17Factory' => $vendorDir . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php',
'Slim\\Factory\\ServerRequestCreatorFactory' => $vendorDir . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php',
'Slim\\Handlers\\ErrorHandler' => $vendorDir . '/slim/slim/Slim/Handlers/ErrorHandler.php',
'Slim\\Handlers\\Strategies\\RequestHandler' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php',
'Slim\\Handlers\\Strategies\\RequestResponse' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => $vendorDir . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php',
'Slim\\Interfaces\\AdvancedCallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php',
'Slim\\Interfaces\\CallableResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
'Slim\\Interfaces\\DispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/DispatcherInterface.php',
'Slim\\Interfaces\\ErrorHandlerInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php',
'Slim\\Interfaces\\ErrorRendererInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php',
'Slim\\Interfaces\\InvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
'Slim\\Interfaces\\MiddlewareDispatcherInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php',
'Slim\\Interfaces\\Psr17FactoryInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php',
'Slim\\Interfaces\\Psr17FactoryProviderInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php',
'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php',
'Slim\\Interfaces\\RouteCollectorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php',
'Slim\\Interfaces\\RouteCollectorProxyInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php',
'Slim\\Interfaces\\RouteGroupInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
'Slim\\Interfaces\\RouteInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteInterface.php',
'Slim\\Interfaces\\RouteParserInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteParserInterface.php',
'Slim\\Interfaces\\RouteResolverInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php',
'Slim\\Interfaces\\ServerRequestCreatorInterface' => $vendorDir . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php',
'Slim\\Logger' => $vendorDir . '/slim/slim/Slim/Logger.php',
'Slim\\MiddlewareDispatcher' => $vendorDir . '/slim/slim/Slim/MiddlewareDispatcher.php',
'Slim\\Middleware\\BodyParsingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php',
'Slim\\Middleware\\ContentLengthMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php',
'Slim\\Middleware\\ErrorMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/ErrorMiddleware.php',
'Slim\\Middleware\\MethodOverrideMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php',
'Slim\\Middleware\\OutputBufferingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php',
'Slim\\Middleware\\RoutingMiddleware' => $vendorDir . '/slim/slim/Slim/Middleware/RoutingMiddleware.php',
'Slim\\ResponseEmitter' => $vendorDir . '/slim/slim/Slim/ResponseEmitter.php',
'Slim\\Routing\\Dispatcher' => $vendorDir . '/slim/slim/Slim/Routing/Dispatcher.php',
'Slim\\Routing\\FastRouteDispatcher' => $vendorDir . '/slim/slim/Slim/Routing/FastRouteDispatcher.php',
'Slim\\Routing\\Route' => $vendorDir . '/slim/slim/Slim/Routing/Route.php',
'Slim\\Routing\\RouteCollector' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollector.php',
'Slim\\Routing\\RouteCollectorProxy' => $vendorDir . '/slim/slim/Slim/Routing/RouteCollectorProxy.php',
'Slim\\Routing\\RouteContext' => $vendorDir . '/slim/slim/Slim/Routing/RouteContext.php',
'Slim\\Routing\\RouteGroup' => $vendorDir . '/slim/slim/Slim/Routing/RouteGroup.php',
'Slim\\Routing\\RouteParser' => $vendorDir . '/slim/slim/Slim/Routing/RouteParser.php',
'Slim\\Routing\\RouteResolver' => $vendorDir . '/slim/slim/Slim/Routing/RouteResolver.php',
'Slim\\Routing\\RouteRunner' => $vendorDir . '/slim/slim/Slim/Routing/RouteRunner.php',
'Slim\\Routing\\RoutingResults' => $vendorDir . '/slim/slim/Slim/Routing/RoutingResults.php',
'Stringable' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\AbstractTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/AbstractTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => $vendorDir . '/symfony/cache/Adapter/AdapterInterface.php',
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => $vendorDir . '/symfony/cache/Adapter/ApcuAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ArrayAdapter' => $vendorDir . '/symfony/cache/Adapter/ArrayAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ChainAdapter' => $vendorDir . '/symfony/cache/Adapter/ChainAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\DoctrineAdapter' => $vendorDir . '/symfony/cache/Adapter/DoctrineAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter' => $vendorDir . '/symfony/cache/Adapter/FilesystemAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\FilesystemTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/FilesystemTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\MemcachedAdapter' => $vendorDir . '/symfony/cache/Adapter/MemcachedAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\NullAdapter' => $vendorDir . '/symfony/cache/Adapter/NullAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PdoAdapter' => $vendorDir . '/symfony/cache/Adapter/PdoAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PhpArrayAdapter' => $vendorDir . '/symfony/cache/Adapter/PhpArrayAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PhpFilesAdapter' => $vendorDir . '/symfony/cache/Adapter/PhpFilesAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ProxyAdapter' => $vendorDir . '/symfony/cache/Adapter/ProxyAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\Psr16Adapter' => $vendorDir . '/symfony/cache/Adapter/Psr16Adapter.php',
'Symfony\\Component\\Cache\\Adapter\\RedisAdapter' => $vendorDir . '/symfony/cache/Adapter/RedisAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\RedisTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/RedisTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\SimpleCacheAdapter' => $vendorDir . '/symfony/cache/Adapter/SimpleCacheAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => $vendorDir . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => $vendorDir . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
'Symfony\\Component\\Cache\\CacheItem' => $vendorDir . '/symfony/cache/CacheItem.php',
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => $vendorDir . '/symfony/cache/DataCollector/CacheDataCollector.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CacheCollectorPass' => $vendorDir . '/symfony/cache/DependencyInjection/CacheCollectorPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolClearerPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolClearerPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPrunerPass' => $vendorDir . '/symfony/cache/DependencyInjection/CachePoolPrunerPass.php',
'Symfony\\Component\\Cache\\DoctrineProvider' => $vendorDir . '/symfony/cache/DoctrineProvider.php',
'Symfony\\Component\\Cache\\Exception\\CacheException' => $vendorDir . '/symfony/cache/Exception/CacheException.php',
'Symfony\\Component\\Cache\\Exception\\InvalidArgumentException' => $vendorDir . '/symfony/cache/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Cache\\Exception\\LogicException' => $vendorDir . '/symfony/cache/Exception/LogicException.php',
'Symfony\\Component\\Cache\\LockRegistry' => $vendorDir . '/symfony/cache/LockRegistry.php',
'Symfony\\Component\\Cache\\Marshaller\\DefaultMarshaller' => $vendorDir . '/symfony/cache/Marshaller/DefaultMarshaller.php',
'Symfony\\Component\\Cache\\Marshaller\\DeflateMarshaller' => $vendorDir . '/symfony/cache/Marshaller/DeflateMarshaller.php',
'Symfony\\Component\\Cache\\Marshaller\\MarshallerInterface' => $vendorDir . '/symfony/cache/Marshaller/MarshallerInterface.php',
'Symfony\\Component\\Cache\\Marshaller\\TagAwareMarshaller' => $vendorDir . '/symfony/cache/Marshaller/TagAwareMarshaller.php',
'Symfony\\Component\\Cache\\PruneableInterface' => $vendorDir . '/symfony/cache/PruneableInterface.php',
'Symfony\\Component\\Cache\\Psr16Cache' => $vendorDir . '/symfony/cache/Psr16Cache.php',
'Symfony\\Component\\Cache\\ResettableInterface' => $vendorDir . '/symfony/cache/ResettableInterface.php',
'Symfony\\Component\\Cache\\Simple\\AbstractCache' => $vendorDir . '/symfony/cache/Simple/AbstractCache.php',
'Symfony\\Component\\Cache\\Simple\\ApcuCache' => $vendorDir . '/symfony/cache/Simple/ApcuCache.php',
'Symfony\\Component\\Cache\\Simple\\ArrayCache' => $vendorDir . '/symfony/cache/Simple/ArrayCache.php',
'Symfony\\Component\\Cache\\Simple\\ChainCache' => $vendorDir . '/symfony/cache/Simple/ChainCache.php',
'Symfony\\Component\\Cache\\Simple\\DoctrineCache' => $vendorDir . '/symfony/cache/Simple/DoctrineCache.php',
'Symfony\\Component\\Cache\\Simple\\FilesystemCache' => $vendorDir . '/symfony/cache/Simple/FilesystemCache.php',
'Symfony\\Component\\Cache\\Simple\\MemcachedCache' => $vendorDir . '/symfony/cache/Simple/MemcachedCache.php',
'Symfony\\Component\\Cache\\Simple\\NullCache' => $vendorDir . '/symfony/cache/Simple/NullCache.php',
'Symfony\\Component\\Cache\\Simple\\PdoCache' => $vendorDir . '/symfony/cache/Simple/PdoCache.php',
'Symfony\\Component\\Cache\\Simple\\PhpArrayCache' => $vendorDir . '/symfony/cache/Simple/PhpArrayCache.php',
'Symfony\\Component\\Cache\\Simple\\PhpFilesCache' => $vendorDir . '/symfony/cache/Simple/PhpFilesCache.php',
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => $vendorDir . '/symfony/cache/Simple/Psr6Cache.php',
'Symfony\\Component\\Cache\\Simple\\RedisCache' => $vendorDir . '/symfony/cache/Simple/RedisCache.php',
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => $vendorDir . '/symfony/cache/Simple/TraceableCache.php',
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => $vendorDir . '/symfony/cache/Traits/AbstractAdapterTrait.php',
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => $vendorDir . '/symfony/cache/Traits/AbstractTrait.php',
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => $vendorDir . '/symfony/cache/Traits/ApcuTrait.php',
'Symfony\\Component\\Cache\\Traits\\ArrayTrait' => $vendorDir . '/symfony/cache/Traits/ArrayTrait.php',
'Symfony\\Component\\Cache\\Traits\\ContractsTrait' => $vendorDir . '/symfony/cache/Traits/ContractsTrait.php',
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => $vendorDir . '/symfony/cache/Traits/DoctrineTrait.php',
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemCommonTrait.php',
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => $vendorDir . '/symfony/cache/Traits/FilesystemTrait.php',
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => $vendorDir . '/symfony/cache/Traits/MemcachedTrait.php',
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => $vendorDir . '/symfony/cache/Traits/PdoTrait.php',
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => $vendorDir . '/symfony/cache/Traits/PhpArrayTrait.php',
'Symfony\\Component\\Cache\\Traits\\PhpFilesTrait' => $vendorDir . '/symfony/cache/Traits/PhpFilesTrait.php',
'Symfony\\Component\\Cache\\Traits\\ProxyTrait' => $vendorDir . '/symfony/cache/Traits/ProxyTrait.php',
'Symfony\\Component\\Cache\\Traits\\RedisClusterNodeProxy' => $vendorDir . '/symfony/cache/Traits/RedisClusterNodeProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisClusterProxy' => $vendorDir . '/symfony/cache/Traits/RedisClusterProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisProxy' => $vendorDir . '/symfony/cache/Traits/RedisProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisTrait' => $vendorDir . '/symfony/cache/Traits/RedisTrait.php',
'Symfony\\Component\\ExpressionLanguage\\Compiler' => $vendorDir . '/symfony/expression-language/Compiler.php',
'Symfony\\Component\\ExpressionLanguage\\Expression' => $vendorDir . '/symfony/expression-language/Expression.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionFunction' => $vendorDir . '/symfony/expression-language/ExpressionFunction.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionFunctionProviderInterface' => $vendorDir . '/symfony/expression-language/ExpressionFunctionProviderInterface.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage' => $vendorDir . '/symfony/expression-language/ExpressionLanguage.php',
'Symfony\\Component\\ExpressionLanguage\\Lexer' => $vendorDir . '/symfony/expression-language/Lexer.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ArgumentsNode' => $vendorDir . '/symfony/expression-language/Node/ArgumentsNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ArrayNode' => $vendorDir . '/symfony/expression-language/Node/ArrayNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\BinaryNode' => $vendorDir . '/symfony/expression-language/Node/BinaryNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ConditionalNode' => $vendorDir . '/symfony/expression-language/Node/ConditionalNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ConstantNode' => $vendorDir . '/symfony/expression-language/Node/ConstantNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\FunctionNode' => $vendorDir . '/symfony/expression-language/Node/FunctionNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\GetAttrNode' => $vendorDir . '/symfony/expression-language/Node/GetAttrNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\NameNode' => $vendorDir . '/symfony/expression-language/Node/NameNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\Node' => $vendorDir . '/symfony/expression-language/Node/Node.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\UnaryNode' => $vendorDir . '/symfony/expression-language/Node/UnaryNode.php',
'Symfony\\Component\\ExpressionLanguage\\ParsedExpression' => $vendorDir . '/symfony/expression-language/ParsedExpression.php',
'Symfony\\Component\\ExpressionLanguage\\Parser' => $vendorDir . '/symfony/expression-language/Parser.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ArrayParserCache' => $vendorDir . '/symfony/expression-language/ParserCache/ArrayParserCache.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ParserCacheAdapter' => $vendorDir . '/symfony/expression-language/ParserCache/ParserCacheAdapter.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ParserCacheInterface' => $vendorDir . '/symfony/expression-language/ParserCache/ParserCacheInterface.php',
'Symfony\\Component\\ExpressionLanguage\\SerializedParsedExpression' => $vendorDir . '/symfony/expression-language/SerializedParsedExpression.php',
'Symfony\\Component\\ExpressionLanguage\\SyntaxError' => $vendorDir . '/symfony/expression-language/SyntaxError.php',
'Symfony\\Component\\ExpressionLanguage\\Token' => $vendorDir . '/symfony/expression-language/Token.php',
'Symfony\\Component\\ExpressionLanguage\\TokenStream' => $vendorDir . '/symfony/expression-language/TokenStream.php',
'Symfony\\Component\\VarExporter\\Exception\\ClassNotFoundException' => $vendorDir . '/symfony/var-exporter/Exception/ClassNotFoundException.php',
'Symfony\\Component\\VarExporter\\Exception\\ExceptionInterface' => $vendorDir . '/symfony/var-exporter/Exception/ExceptionInterface.php',
'Symfony\\Component\\VarExporter\\Exception\\NotInstantiableTypeException' => $vendorDir . '/symfony/var-exporter/Exception/NotInstantiableTypeException.php',
'Symfony\\Component\\VarExporter\\Instantiator' => $vendorDir . '/symfony/var-exporter/Instantiator.php',
'Symfony\\Component\\VarExporter\\Internal\\Exporter' => $vendorDir . '/symfony/var-exporter/Internal/Exporter.php',
'Symfony\\Component\\VarExporter\\Internal\\Hydrator' => $vendorDir . '/symfony/var-exporter/Internal/Hydrator.php',
'Symfony\\Component\\VarExporter\\Internal\\Reference' => $vendorDir . '/symfony/var-exporter/Internal/Reference.php',
'Symfony\\Component\\VarExporter\\Internal\\Registry' => $vendorDir . '/symfony/var-exporter/Internal/Registry.php',
'Symfony\\Component\\VarExporter\\Internal\\Values' => $vendorDir . '/symfony/var-exporter/Internal/Values.php',
'Symfony\\Component\\VarExporter\\VarExporter' => $vendorDir . '/symfony/var-exporter/VarExporter.php',
'Symfony\\Contracts\\Cache\\CacheInterface' => $vendorDir . '/symfony/cache-contracts/CacheInterface.php',
'Symfony\\Contracts\\Cache\\CacheTrait' => $vendorDir . '/symfony/cache-contracts/CacheTrait.php',
'Symfony\\Contracts\\Cache\\CallbackInterface' => $vendorDir . '/symfony/cache-contracts/CallbackInterface.php',
'Symfony\\Contracts\\Cache\\ItemInterface' => $vendorDir . '/symfony/cache-contracts/ItemInterface.php',
'Symfony\\Contracts\\Cache\\TagAwareCacheInterface' => $vendorDir . '/symfony/cache-contracts/TagAwareCacheInterface.php',
'Symfony\\Contracts\\Service\\Attribute\\Required' => $vendorDir . '/symfony/service-contracts/Attribute/Required.php',
'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => $vendorDir . '/symfony/service-contracts/Attribute/SubscribedService.php',
'Symfony\\Contracts\\Service\\ResetInterface' => $vendorDir . '/symfony/service-contracts/ResetInterface.php',
'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => $vendorDir . '/symfony/service-contracts/ServiceLocatorTrait.php',
'Symfony\\Contracts\\Service\\ServiceProviderInterface' => $vendorDir . '/symfony/service-contracts/ServiceProviderInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => $vendorDir . '/symfony/service-contracts/ServiceSubscriberTrait.php',
'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => $vendorDir . '/symfony/service-contracts/Test/ServiceLocatorTest.php',
'Symfony\\Polyfill\\Php73\\Php73' => $vendorDir . '/symfony/polyfill-php73/Php73.php',
'Symfony\\Polyfill\\Php80\\Php80' => $vendorDir . '/symfony/polyfill-php80/Php80.php',
'Symfony\\Polyfill\\Php80\\PhpToken' => $vendorDir . '/symfony/polyfill-php80/PhpToken.php',
'UnhandledMatchError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => $vendorDir . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
);

View file

@ -1,13 +0,0 @@
<?php
// autoload_files.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'a4a119a56e50fbb293281d9a48007e0e' => $vendorDir . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => $vendorDir . '/symfony/deprecation-contracts/function.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => $vendorDir . '/symfony/polyfill-php73/bootstrap.php',
'253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php',
);

View file

@ -1,9 +0,0 @@
<?php
// autoload_namespaces.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
);

View file

@ -1,23 +0,0 @@
<?php
// autoload_psr4.php @generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);
return array(
'Symfony\\Polyfill\\Php80\\' => array($vendorDir . '/symfony/polyfill-php80'),
'Symfony\\Polyfill\\Php73\\' => array($vendorDir . '/symfony/polyfill-php73'),
'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'),
'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'),
'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'),
'Symfony\\Component\\ExpressionLanguage\\' => array($vendorDir . '/symfony/expression-language'),
'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'),
'Slim\\' => array($vendorDir . '/slim/slim/Slim'),
'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'),
'Psr\\Http\\Server\\' => array($vendorDir . '/psr/http-server-handler/src', $vendorDir . '/psr/http-server-middleware/src'),
'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src', $vendorDir . '/psr/http-factory/src'),
'Psr\\Container\\' => array($vendorDir . '/psr/container/src'),
'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'),
'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'),
);

View file

@ -1,50 +0,0 @@
<?php
// autoload_real.php @generated by Composer
class ComposerAutoloaderInitAdvancedContentFilterAddon
{
private static $loader;
public static function loadClassLoader($class)
{
if ('Composer\Autoload\ClassLoader' === $class) {
require __DIR__ . '/ClassLoader.php';
}
}
/**
* @return \Composer\Autoload\ClassLoader
*/
public static function getLoader()
{
if (null !== self::$loader) {
return self::$loader;
}
require __DIR__ . '/platform_check.php';
spl_autoload_register(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'), true, true);
self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__));
spl_autoload_unregister(array('ComposerAutoloaderInitAdvancedContentFilterAddon', 'loadClassLoader'));
require __DIR__ . '/autoload_static.php';
call_user_func(\Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::getInitializer($loader));
$loader->register(true);
$filesToLoad = \Composer\Autoload\ComposerStaticInitAdvancedContentFilterAddon::$files;
$requireFile = \Closure::bind(static function ($fileIdentifier, $file) {
if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
}
}, null, null);
foreach ($filesToLoad as $fileIdentifier => $file) {
$requireFile($fileIdentifier, $file);
}
return $loader;
}
}

View file

@ -1,367 +0,0 @@
<?php
// autoload_static.php @generated by Composer
namespace Composer\Autoload;
class ComposerStaticInitAdvancedContentFilterAddon
{
public static $files = array (
'a4a119a56e50fbb293281d9a48007e0e' => __DIR__ . '/..' . '/symfony/polyfill-php80/bootstrap.php',
'6e3fae29631ef280660b3cdad06f25a8' => __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php',
'0d59ee240a4cd96ddbb4ff164fccea4d' => __DIR__ . '/..' . '/symfony/polyfill-php73/bootstrap.php',
'253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php',
);
public static $prefixLengthsPsr4 = array (
'S' =>
array (
'Symfony\\Polyfill\\Php80\\' => 23,
'Symfony\\Polyfill\\Php73\\' => 23,
'Symfony\\Contracts\\Service\\' => 26,
'Symfony\\Contracts\\Cache\\' => 24,
'Symfony\\Component\\VarExporter\\' => 30,
'Symfony\\Component\\ExpressionLanguage\\' => 37,
'Symfony\\Component\\Cache\\' => 24,
'Slim\\' => 5,
),
'P' =>
array (
'Psr\\Log\\' => 8,
'Psr\\Http\\Server\\' => 16,
'Psr\\Http\\Message\\' => 17,
'Psr\\Container\\' => 14,
'Psr\\Cache\\' => 10,
),
'F' =>
array (
'FastRoute\\' => 10,
),
);
public static $prefixDirsPsr4 = array (
'Symfony\\Polyfill\\Php80\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-php80',
),
'Symfony\\Polyfill\\Php73\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/polyfill-php73',
),
'Symfony\\Contracts\\Service\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/service-contracts',
),
'Symfony\\Contracts\\Cache\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/cache-contracts',
),
'Symfony\\Component\\VarExporter\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/var-exporter',
),
'Symfony\\Component\\ExpressionLanguage\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/expression-language',
),
'Symfony\\Component\\Cache\\' =>
array (
0 => __DIR__ . '/..' . '/symfony/cache',
),
'Slim\\' =>
array (
0 => __DIR__ . '/..' . '/slim/slim/Slim',
),
'Psr\\Log\\' =>
array (
0 => __DIR__ . '/..' . '/psr/log/Psr/Log',
),
'Psr\\Http\\Server\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-server-handler/src',
1 => __DIR__ . '/..' . '/psr/http-server-middleware/src',
),
'Psr\\Http\\Message\\' =>
array (
0 => __DIR__ . '/..' . '/psr/http-message/src',
1 => __DIR__ . '/..' . '/psr/http-factory/src',
),
'Psr\\Container\\' =>
array (
0 => __DIR__ . '/..' . '/psr/container/src',
),
'Psr\\Cache\\' =>
array (
0 => __DIR__ . '/..' . '/psr/cache/src',
),
'FastRoute\\' =>
array (
0 => __DIR__ . '/..' . '/nikic/fast-route/src',
),
);
public static $classMap = array (
'Attribute' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Attribute.php',
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
'FastRoute\\BadRouteException' => __DIR__ . '/..' . '/nikic/fast-route/src/BadRouteException.php',
'FastRoute\\DataGenerator' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator.php',
'FastRoute\\DataGenerator\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/CharCountBased.php',
'FastRoute\\DataGenerator\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupCountBased.php',
'FastRoute\\DataGenerator\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/GroupPosBased.php',
'FastRoute\\DataGenerator\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/MarkBased.php',
'FastRoute\\DataGenerator\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/DataGenerator/RegexBasedAbstract.php',
'FastRoute\\Dispatcher' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher.php',
'FastRoute\\Dispatcher\\CharCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/CharCountBased.php',
'FastRoute\\Dispatcher\\GroupCountBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupCountBased.php',
'FastRoute\\Dispatcher\\GroupPosBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/GroupPosBased.php',
'FastRoute\\Dispatcher\\MarkBased' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/MarkBased.php',
'FastRoute\\Dispatcher\\RegexBasedAbstract' => __DIR__ . '/..' . '/nikic/fast-route/src/Dispatcher/RegexBasedAbstract.php',
'FastRoute\\Route' => __DIR__ . '/..' . '/nikic/fast-route/src/Route.php',
'FastRoute\\RouteCollector' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteCollector.php',
'FastRoute\\RouteParser' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser.php',
'FastRoute\\RouteParser\\Std' => __DIR__ . '/..' . '/nikic/fast-route/src/RouteParser/Std.php',
'JsonException' => __DIR__ . '/..' . '/symfony/polyfill-php73/Resources/stubs/JsonException.php',
'PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/PhpToken.php',
'Psr\\Cache\\CacheException' => __DIR__ . '/..' . '/psr/cache/src/CacheException.php',
'Psr\\Cache\\CacheItemInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemInterface.php',
'Psr\\Cache\\CacheItemPoolInterface' => __DIR__ . '/..' . '/psr/cache/src/CacheItemPoolInterface.php',
'Psr\\Cache\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/cache/src/InvalidArgumentException.php',
'Psr\\Container\\ContainerExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerExceptionInterface.php',
'Psr\\Container\\ContainerInterface' => __DIR__ . '/..' . '/psr/container/src/ContainerInterface.php',
'Psr\\Container\\NotFoundExceptionInterface' => __DIR__ . '/..' . '/psr/container/src/NotFoundExceptionInterface.php',
'Psr\\Http\\Message\\MessageInterface' => __DIR__ . '/..' . '/psr/http-message/src/MessageInterface.php',
'Psr\\Http\\Message\\RequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/RequestFactoryInterface.php',
'Psr\\Http\\Message\\RequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/RequestInterface.php',
'Psr\\Http\\Message\\ResponseFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ResponseFactoryInterface.php',
'Psr\\Http\\Message\\ResponseInterface' => __DIR__ . '/..' . '/psr/http-message/src/ResponseInterface.php',
'Psr\\Http\\Message\\ServerRequestFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/ServerRequestFactoryInterface.php',
'Psr\\Http\\Message\\ServerRequestInterface' => __DIR__ . '/..' . '/psr/http-message/src/ServerRequestInterface.php',
'Psr\\Http\\Message\\StreamFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/StreamFactoryInterface.php',
'Psr\\Http\\Message\\StreamInterface' => __DIR__ . '/..' . '/psr/http-message/src/StreamInterface.php',
'Psr\\Http\\Message\\UploadedFileFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UploadedFileFactoryInterface.php',
'Psr\\Http\\Message\\UploadedFileInterface' => __DIR__ . '/..' . '/psr/http-message/src/UploadedFileInterface.php',
'Psr\\Http\\Message\\UriFactoryInterface' => __DIR__ . '/..' . '/psr/http-factory/src/UriFactoryInterface.php',
'Psr\\Http\\Message\\UriInterface' => __DIR__ . '/..' . '/psr/http-message/src/UriInterface.php',
'Psr\\Http\\Server\\MiddlewareInterface' => __DIR__ . '/..' . '/psr/http-server-middleware/src/MiddlewareInterface.php',
'Psr\\Http\\Server\\RequestHandlerInterface' => __DIR__ . '/..' . '/psr/http-server-handler/src/RequestHandlerInterface.php',
'Psr\\Log\\AbstractLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/AbstractLogger.php',
'Psr\\Log\\InvalidArgumentException' => __DIR__ . '/..' . '/psr/log/Psr/Log/InvalidArgumentException.php',
'Psr\\Log\\LogLevel' => __DIR__ . '/..' . '/psr/log/Psr/Log/LogLevel.php',
'Psr\\Log\\LoggerAwareInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareInterface.php',
'Psr\\Log\\LoggerAwareTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerAwareTrait.php',
'Psr\\Log\\LoggerInterface' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerInterface.php',
'Psr\\Log\\LoggerTrait' => __DIR__ . '/..' . '/psr/log/Psr/Log/LoggerTrait.php',
'Psr\\Log\\NullLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/NullLogger.php',
'Psr\\Log\\Test\\DummyTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/DummyTest.php',
'Psr\\Log\\Test\\LoggerInterfaceTest' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/LoggerInterfaceTest.php',
'Psr\\Log\\Test\\TestLogger' => __DIR__ . '/..' . '/psr/log/Psr/Log/Test/TestLogger.php',
'Slim\\App' => __DIR__ . '/..' . '/slim/slim/Slim/App.php',
'Slim\\CallableResolver' => __DIR__ . '/..' . '/slim/slim/Slim/CallableResolver.php',
'Slim\\Error\\AbstractErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/AbstractErrorRenderer.php',
'Slim\\Error\\Renderers\\HtmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/HtmlErrorRenderer.php',
'Slim\\Error\\Renderers\\JsonErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/JsonErrorRenderer.php',
'Slim\\Error\\Renderers\\PlainTextErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/PlainTextErrorRenderer.php',
'Slim\\Error\\Renderers\\XmlErrorRenderer' => __DIR__ . '/..' . '/slim/slim/Slim/Error/Renderers/XmlErrorRenderer.php',
'Slim\\Exception\\HttpBadRequestException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpBadRequestException.php',
'Slim\\Exception\\HttpException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpException.php',
'Slim\\Exception\\HttpForbiddenException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpForbiddenException.php',
'Slim\\Exception\\HttpGoneException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpGoneException.php',
'Slim\\Exception\\HttpInternalServerErrorException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpInternalServerErrorException.php',
'Slim\\Exception\\HttpMethodNotAllowedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpMethodNotAllowedException.php',
'Slim\\Exception\\HttpNotFoundException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotFoundException.php',
'Slim\\Exception\\HttpNotImplementedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpNotImplementedException.php',
'Slim\\Exception\\HttpSpecializedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpSpecializedException.php',
'Slim\\Exception\\HttpTooManyRequestsException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpTooManyRequestsException.php',
'Slim\\Exception\\HttpUnauthorizedException' => __DIR__ . '/..' . '/slim/slim/Slim/Exception/HttpUnauthorizedException.php',
'Slim\\Factory\\AppFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/AppFactory.php',
'Slim\\Factory\\Psr17\\GuzzlePsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/GuzzlePsr17Factory.php',
'Slim\\Factory\\Psr17\\HttpSoftPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/HttpSoftPsr17Factory.php',
'Slim\\Factory\\Psr17\\LaminasDiactorosPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/LaminasDiactorosPsr17Factory.php',
'Slim\\Factory\\Psr17\\NyholmPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/NyholmPsr17Factory.php',
'Slim\\Factory\\Psr17\\Psr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17Factory.php',
'Slim\\Factory\\Psr17\\Psr17FactoryProvider' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/Psr17FactoryProvider.php',
'Slim\\Factory\\Psr17\\ServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/ServerRequestCreator.php',
'Slim\\Factory\\Psr17\\SlimHttpPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpPsr17Factory.php',
'Slim\\Factory\\Psr17\\SlimHttpServerRequestCreator' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimHttpServerRequestCreator.php',
'Slim\\Factory\\Psr17\\SlimPsr17Factory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/Psr17/SlimPsr17Factory.php',
'Slim\\Factory\\ServerRequestCreatorFactory' => __DIR__ . '/..' . '/slim/slim/Slim/Factory/ServerRequestCreatorFactory.php',
'Slim\\Handlers\\ErrorHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/ErrorHandler.php',
'Slim\\Handlers\\Strategies\\RequestHandler' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestHandler.php',
'Slim\\Handlers\\Strategies\\RequestResponse' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponse.php',
'Slim\\Handlers\\Strategies\\RequestResponseArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseArgs.php',
'Slim\\Handlers\\Strategies\\RequestResponseNamedArgs' => __DIR__ . '/..' . '/slim/slim/Slim/Handlers/Strategies/RequestResponseNamedArgs.php',
'Slim\\Interfaces\\AdvancedCallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/AdvancedCallableResolverInterface.php',
'Slim\\Interfaces\\CallableResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/CallableResolverInterface.php',
'Slim\\Interfaces\\DispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/DispatcherInterface.php',
'Slim\\Interfaces\\ErrorHandlerInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorHandlerInterface.php',
'Slim\\Interfaces\\ErrorRendererInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ErrorRendererInterface.php',
'Slim\\Interfaces\\InvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/InvocationStrategyInterface.php',
'Slim\\Interfaces\\MiddlewareDispatcherInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/MiddlewareDispatcherInterface.php',
'Slim\\Interfaces\\Psr17FactoryInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryInterface.php',
'Slim\\Interfaces\\Psr17FactoryProviderInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/Psr17FactoryProviderInterface.php',
'Slim\\Interfaces\\RequestHandlerInvocationStrategyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RequestHandlerInvocationStrategyInterface.php',
'Slim\\Interfaces\\RouteCollectorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorInterface.php',
'Slim\\Interfaces\\RouteCollectorProxyInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteCollectorProxyInterface.php',
'Slim\\Interfaces\\RouteGroupInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteGroupInterface.php',
'Slim\\Interfaces\\RouteInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteInterface.php',
'Slim\\Interfaces\\RouteParserInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteParserInterface.php',
'Slim\\Interfaces\\RouteResolverInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/RouteResolverInterface.php',
'Slim\\Interfaces\\ServerRequestCreatorInterface' => __DIR__ . '/..' . '/slim/slim/Slim/Interfaces/ServerRequestCreatorInterface.php',
'Slim\\Logger' => __DIR__ . '/..' . '/slim/slim/Slim/Logger.php',
'Slim\\MiddlewareDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/MiddlewareDispatcher.php',
'Slim\\Middleware\\BodyParsingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/BodyParsingMiddleware.php',
'Slim\\Middleware\\ContentLengthMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ContentLengthMiddleware.php',
'Slim\\Middleware\\ErrorMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/ErrorMiddleware.php',
'Slim\\Middleware\\MethodOverrideMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/MethodOverrideMiddleware.php',
'Slim\\Middleware\\OutputBufferingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/OutputBufferingMiddleware.php',
'Slim\\Middleware\\RoutingMiddleware' => __DIR__ . '/..' . '/slim/slim/Slim/Middleware/RoutingMiddleware.php',
'Slim\\ResponseEmitter' => __DIR__ . '/..' . '/slim/slim/Slim/ResponseEmitter.php',
'Slim\\Routing\\Dispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Dispatcher.php',
'Slim\\Routing\\FastRouteDispatcher' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/FastRouteDispatcher.php',
'Slim\\Routing\\Route' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/Route.php',
'Slim\\Routing\\RouteCollector' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollector.php',
'Slim\\Routing\\RouteCollectorProxy' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteCollectorProxy.php',
'Slim\\Routing\\RouteContext' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteContext.php',
'Slim\\Routing\\RouteGroup' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteGroup.php',
'Slim\\Routing\\RouteParser' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteParser.php',
'Slim\\Routing\\RouteResolver' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteResolver.php',
'Slim\\Routing\\RouteRunner' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RouteRunner.php',
'Slim\\Routing\\RoutingResults' => __DIR__ . '/..' . '/slim/slim/Slim/Routing/RoutingResults.php',
'Stringable' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/Stringable.php',
'Symfony\\Component\\Cache\\Adapter\\AbstractAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\AbstractTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/AbstractTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\AdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/AdapterInterface.php',
'Symfony\\Component\\Cache\\Adapter\\ApcuAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ApcuAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ArrayAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ArrayAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ChainAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ChainAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\DoctrineAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/DoctrineAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\FilesystemAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/FilesystemAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\FilesystemTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/FilesystemTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\MemcachedAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/MemcachedAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\NullAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/NullAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PdoAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PdoAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PhpArrayAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PhpArrayAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\PhpFilesAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/PhpFilesAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\ProxyAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/ProxyAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\Psr16Adapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/Psr16Adapter.php',
'Symfony\\Component\\Cache\\Adapter\\RedisAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/RedisAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\RedisTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/RedisTagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\SimpleCacheAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/SimpleCacheAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TagAwareAdapterInterface' => __DIR__ . '/..' . '/symfony/cache/Adapter/TagAwareAdapterInterface.php',
'Symfony\\Component\\Cache\\Adapter\\TraceableAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableAdapter.php',
'Symfony\\Component\\Cache\\Adapter\\TraceableTagAwareAdapter' => __DIR__ . '/..' . '/symfony/cache/Adapter/TraceableTagAwareAdapter.php',
'Symfony\\Component\\Cache\\CacheItem' => __DIR__ . '/..' . '/symfony/cache/CacheItem.php',
'Symfony\\Component\\Cache\\DataCollector\\CacheDataCollector' => __DIR__ . '/..' . '/symfony/cache/DataCollector/CacheDataCollector.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CacheCollectorPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CacheCollectorPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolClearerPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolClearerPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolPass.php',
'Symfony\\Component\\Cache\\DependencyInjection\\CachePoolPrunerPass' => __DIR__ . '/..' . '/symfony/cache/DependencyInjection/CachePoolPrunerPass.php',
'Symfony\\Component\\Cache\\DoctrineProvider' => __DIR__ . '/..' . '/symfony/cache/DoctrineProvider.php',
'Symfony\\Component\\Cache\\Exception\\CacheException' => __DIR__ . '/..' . '/symfony/cache/Exception/CacheException.php',
'Symfony\\Component\\Cache\\Exception\\InvalidArgumentException' => __DIR__ . '/..' . '/symfony/cache/Exception/InvalidArgumentException.php',
'Symfony\\Component\\Cache\\Exception\\LogicException' => __DIR__ . '/..' . '/symfony/cache/Exception/LogicException.php',
'Symfony\\Component\\Cache\\LockRegistry' => __DIR__ . '/..' . '/symfony/cache/LockRegistry.php',
'Symfony\\Component\\Cache\\Marshaller\\DefaultMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/DefaultMarshaller.php',
'Symfony\\Component\\Cache\\Marshaller\\DeflateMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/DeflateMarshaller.php',
'Symfony\\Component\\Cache\\Marshaller\\MarshallerInterface' => __DIR__ . '/..' . '/symfony/cache/Marshaller/MarshallerInterface.php',
'Symfony\\Component\\Cache\\Marshaller\\TagAwareMarshaller' => __DIR__ . '/..' . '/symfony/cache/Marshaller/TagAwareMarshaller.php',
'Symfony\\Component\\Cache\\PruneableInterface' => __DIR__ . '/..' . '/symfony/cache/PruneableInterface.php',
'Symfony\\Component\\Cache\\Psr16Cache' => __DIR__ . '/..' . '/symfony/cache/Psr16Cache.php',
'Symfony\\Component\\Cache\\ResettableInterface' => __DIR__ . '/..' . '/symfony/cache/ResettableInterface.php',
'Symfony\\Component\\Cache\\Simple\\AbstractCache' => __DIR__ . '/..' . '/symfony/cache/Simple/AbstractCache.php',
'Symfony\\Component\\Cache\\Simple\\ApcuCache' => __DIR__ . '/..' . '/symfony/cache/Simple/ApcuCache.php',
'Symfony\\Component\\Cache\\Simple\\ArrayCache' => __DIR__ . '/..' . '/symfony/cache/Simple/ArrayCache.php',
'Symfony\\Component\\Cache\\Simple\\ChainCache' => __DIR__ . '/..' . '/symfony/cache/Simple/ChainCache.php',
'Symfony\\Component\\Cache\\Simple\\DoctrineCache' => __DIR__ . '/..' . '/symfony/cache/Simple/DoctrineCache.php',
'Symfony\\Component\\Cache\\Simple\\FilesystemCache' => __DIR__ . '/..' . '/symfony/cache/Simple/FilesystemCache.php',
'Symfony\\Component\\Cache\\Simple\\MemcachedCache' => __DIR__ . '/..' . '/symfony/cache/Simple/MemcachedCache.php',
'Symfony\\Component\\Cache\\Simple\\NullCache' => __DIR__ . '/..' . '/symfony/cache/Simple/NullCache.php',
'Symfony\\Component\\Cache\\Simple\\PdoCache' => __DIR__ . '/..' . '/symfony/cache/Simple/PdoCache.php',
'Symfony\\Component\\Cache\\Simple\\PhpArrayCache' => __DIR__ . '/..' . '/symfony/cache/Simple/PhpArrayCache.php',
'Symfony\\Component\\Cache\\Simple\\PhpFilesCache' => __DIR__ . '/..' . '/symfony/cache/Simple/PhpFilesCache.php',
'Symfony\\Component\\Cache\\Simple\\Psr6Cache' => __DIR__ . '/..' . '/symfony/cache/Simple/Psr6Cache.php',
'Symfony\\Component\\Cache\\Simple\\RedisCache' => __DIR__ . '/..' . '/symfony/cache/Simple/RedisCache.php',
'Symfony\\Component\\Cache\\Simple\\TraceableCache' => __DIR__ . '/..' . '/symfony/cache/Simple/TraceableCache.php',
'Symfony\\Component\\Cache\\Traits\\AbstractAdapterTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractAdapterTrait.php',
'Symfony\\Component\\Cache\\Traits\\AbstractTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/AbstractTrait.php',
'Symfony\\Component\\Cache\\Traits\\ApcuTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ApcuTrait.php',
'Symfony\\Component\\Cache\\Traits\\ArrayTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ArrayTrait.php',
'Symfony\\Component\\Cache\\Traits\\ContractsTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ContractsTrait.php',
'Symfony\\Component\\Cache\\Traits\\DoctrineTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/DoctrineTrait.php',
'Symfony\\Component\\Cache\\Traits\\FilesystemCommonTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemCommonTrait.php',
'Symfony\\Component\\Cache\\Traits\\FilesystemTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/FilesystemTrait.php',
'Symfony\\Component\\Cache\\Traits\\MemcachedTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/MemcachedTrait.php',
'Symfony\\Component\\Cache\\Traits\\PdoTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PdoTrait.php',
'Symfony\\Component\\Cache\\Traits\\PhpArrayTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PhpArrayTrait.php',
'Symfony\\Component\\Cache\\Traits\\PhpFilesTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/PhpFilesTrait.php',
'Symfony\\Component\\Cache\\Traits\\ProxyTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/ProxyTrait.php',
'Symfony\\Component\\Cache\\Traits\\RedisClusterNodeProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisClusterNodeProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisClusterProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisClusterProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisProxy' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisProxy.php',
'Symfony\\Component\\Cache\\Traits\\RedisTrait' => __DIR__ . '/..' . '/symfony/cache/Traits/RedisTrait.php',
'Symfony\\Component\\ExpressionLanguage\\Compiler' => __DIR__ . '/..' . '/symfony/expression-language/Compiler.php',
'Symfony\\Component\\ExpressionLanguage\\Expression' => __DIR__ . '/..' . '/symfony/expression-language/Expression.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionFunction' => __DIR__ . '/..' . '/symfony/expression-language/ExpressionFunction.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionFunctionProviderInterface' => __DIR__ . '/..' . '/symfony/expression-language/ExpressionFunctionProviderInterface.php',
'Symfony\\Component\\ExpressionLanguage\\ExpressionLanguage' => __DIR__ . '/..' . '/symfony/expression-language/ExpressionLanguage.php',
'Symfony\\Component\\ExpressionLanguage\\Lexer' => __DIR__ . '/..' . '/symfony/expression-language/Lexer.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ArgumentsNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/ArgumentsNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ArrayNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/ArrayNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\BinaryNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/BinaryNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ConditionalNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/ConditionalNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\ConstantNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/ConstantNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\FunctionNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/FunctionNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\GetAttrNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/GetAttrNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\NameNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/NameNode.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\Node' => __DIR__ . '/..' . '/symfony/expression-language/Node/Node.php',
'Symfony\\Component\\ExpressionLanguage\\Node\\UnaryNode' => __DIR__ . '/..' . '/symfony/expression-language/Node/UnaryNode.php',
'Symfony\\Component\\ExpressionLanguage\\ParsedExpression' => __DIR__ . '/..' . '/symfony/expression-language/ParsedExpression.php',
'Symfony\\Component\\ExpressionLanguage\\Parser' => __DIR__ . '/..' . '/symfony/expression-language/Parser.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ArrayParserCache' => __DIR__ . '/..' . '/symfony/expression-language/ParserCache/ArrayParserCache.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ParserCacheAdapter' => __DIR__ . '/..' . '/symfony/expression-language/ParserCache/ParserCacheAdapter.php',
'Symfony\\Component\\ExpressionLanguage\\ParserCache\\ParserCacheInterface' => __DIR__ . '/..' . '/symfony/expression-language/ParserCache/ParserCacheInterface.php',
'Symfony\\Component\\ExpressionLanguage\\SerializedParsedExpression' => __DIR__ . '/..' . '/symfony/expression-language/SerializedParsedExpression.php',
'Symfony\\Component\\ExpressionLanguage\\SyntaxError' => __DIR__ . '/..' . '/symfony/expression-language/SyntaxError.php',
'Symfony\\Component\\ExpressionLanguage\\Token' => __DIR__ . '/..' . '/symfony/expression-language/Token.php',
'Symfony\\Component\\ExpressionLanguage\\TokenStream' => __DIR__ . '/..' . '/symfony/expression-language/TokenStream.php',
'Symfony\\Component\\VarExporter\\Exception\\ClassNotFoundException' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/ClassNotFoundException.php',
'Symfony\\Component\\VarExporter\\Exception\\ExceptionInterface' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/ExceptionInterface.php',
'Symfony\\Component\\VarExporter\\Exception\\NotInstantiableTypeException' => __DIR__ . '/..' . '/symfony/var-exporter/Exception/NotInstantiableTypeException.php',
'Symfony\\Component\\VarExporter\\Instantiator' => __DIR__ . '/..' . '/symfony/var-exporter/Instantiator.php',
'Symfony\\Component\\VarExporter\\Internal\\Exporter' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Exporter.php',
'Symfony\\Component\\VarExporter\\Internal\\Hydrator' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Hydrator.php',
'Symfony\\Component\\VarExporter\\Internal\\Reference' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Reference.php',
'Symfony\\Component\\VarExporter\\Internal\\Registry' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Registry.php',
'Symfony\\Component\\VarExporter\\Internal\\Values' => __DIR__ . '/..' . '/symfony/var-exporter/Internal/Values.php',
'Symfony\\Component\\VarExporter\\VarExporter' => __DIR__ . '/..' . '/symfony/var-exporter/VarExporter.php',
'Symfony\\Contracts\\Cache\\CacheInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheInterface.php',
'Symfony\\Contracts\\Cache\\CacheTrait' => __DIR__ . '/..' . '/symfony/cache-contracts/CacheTrait.php',
'Symfony\\Contracts\\Cache\\CallbackInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/CallbackInterface.php',
'Symfony\\Contracts\\Cache\\ItemInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/ItemInterface.php',
'Symfony\\Contracts\\Cache\\TagAwareCacheInterface' => __DIR__ . '/..' . '/symfony/cache-contracts/TagAwareCacheInterface.php',
'Symfony\\Contracts\\Service\\Attribute\\Required' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/Required.php',
'Symfony\\Contracts\\Service\\Attribute\\SubscribedService' => __DIR__ . '/..' . '/symfony/service-contracts/Attribute/SubscribedService.php',
'Symfony\\Contracts\\Service\\ResetInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ResetInterface.php',
'Symfony\\Contracts\\Service\\ServiceLocatorTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceLocatorTrait.php',
'Symfony\\Contracts\\Service\\ServiceProviderInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceProviderInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberInterface' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberInterface.php',
'Symfony\\Contracts\\Service\\ServiceSubscriberTrait' => __DIR__ . '/..' . '/symfony/service-contracts/ServiceSubscriberTrait.php',
'Symfony\\Contracts\\Service\\Test\\ServiceLocatorTest' => __DIR__ . '/..' . '/symfony/service-contracts/Test/ServiceLocatorTest.php',
'Symfony\\Polyfill\\Php73\\Php73' => __DIR__ . '/..' . '/symfony/polyfill-php73/Php73.php',
'Symfony\\Polyfill\\Php80\\Php80' => __DIR__ . '/..' . '/symfony/polyfill-php80/Php80.php',
'Symfony\\Polyfill\\Php80\\PhpToken' => __DIR__ . '/..' . '/symfony/polyfill-php80/PhpToken.php',
'UnhandledMatchError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php',
'ValueError' => __DIR__ . '/..' . '/symfony/polyfill-php80/Resources/stubs/ValueError.php',
);
public static function getInitializer(ClassLoader $loader)
{
return \Closure::bind(function () use ($loader) {
$loader->prefixLengthsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixLengthsPsr4;
$loader->prefixDirsPsr4 = ComposerStaticInitAdvancedContentFilterAddon::$prefixDirsPsr4;
$loader->classMap = ComposerStaticInitAdvancedContentFilterAddon::$classMap;
}, null, ClassLoader::class);
}
}

File diff suppressed because it is too large Load diff

View file

@ -1,203 +0,0 @@
<?php return array(
'root' => array(
'name' => 'friendica-addons/advancedcontentfilter',
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => 'feb7722f723b21e76fdf20a7ce4b42fa5ffcdcb9',
'type' => 'friendica-addon',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev' => false,
),
'versions' => array(
'friendica-addons/advancedcontentfilter' => array(
'pretty_version' => 'dev-develop',
'version' => 'dev-develop',
'reference' => 'feb7722f723b21e76fdf20a7ce4b42fa5ffcdcb9',
'type' => 'friendica-addon',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
'dev_requirement' => false,
),
'nikic/fast-route' => array(
'pretty_version' => 'v1.3.0',
'version' => '1.3.0.0',
'reference' => '181d480e08d9476e61381e04a71b34dc0432e812',
'type' => 'library',
'install_path' => __DIR__ . '/../nikic/fast-route',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/cache' => array(
'pretty_version' => '1.0.1',
'version' => '1.0.1.0',
'reference' => 'd11b50ad223250cf17b86e38383413f5a6764bf8',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/cache',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/cache-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0|2.0',
),
),
'psr/container' => array(
'pretty_version' => '1.1.2',
'version' => '1.1.2.0',
'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/container',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-factory' => array(
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'reference' => 'e616d01114759c4c489f93b099585439f795fe35',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-factory',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-message' => array(
'pretty_version' => '2.0',
'version' => '2.0.0.0',
'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-message',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-server-handler' => array(
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'reference' => '84c4fb66179be4caaf8e97bd239203245302e7d4',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-server-handler',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/http-server-middleware' => array(
'pretty_version' => '1.0.2',
'version' => '1.0.2.0',
'reference' => 'c1481f747daaa6a0782775cd6a8c26a1bf4a3829',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/http-server-middleware',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/log' => array(
'pretty_version' => '1.1.4',
'version' => '1.1.4.0',
'reference' => 'd49695b909c3b7628b6289db5479a1c204601f11',
'type' => 'library',
'install_path' => __DIR__ . '/../psr/log',
'aliases' => array(),
'dev_requirement' => false,
),
'psr/simple-cache-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0|2.0',
),
),
'slim/slim' => array(
'pretty_version' => '4.13.0',
'version' => '4.13.0.0',
'reference' => '038fd5713d5a41636fdff0e8dcceedecdd17fc17',
'type' => 'library',
'install_path' => __DIR__ . '/../slim/slim',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/cache' => array(
'pretty_version' => 'v4.4.48',
'version' => '4.4.48.0',
'reference' => '3b98ed664887ad197b8ede3da2432787212eb915',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/cache',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/cache-contracts' => array(
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'reference' => '64be4a7acb83b6f2bf6de9a02cee6dad41277ebc',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/cache-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/cache-implementation' => array(
'dev_requirement' => false,
'provided' => array(
0 => '1.0|2.0',
),
),
'symfony/deprecation-contracts' => array(
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'reference' => 'e8b495ea28c1d97b5e0c121748d6f9b53d075c66',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/deprecation-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/expression-language' => array(
'pretty_version' => 'v3.4.47',
'version' => '3.4.47.0',
'reference' => 'de38e66398fca1fcb9c48e80279910e6889cb28f',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/expression-language',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php70' => array(
'pretty_version' => 'v1.20.0',
'version' => '1.20.0.0',
'reference' => '5f03a781d984aae42cebd18e7912fa80f02ee644',
'type' => 'metapackage',
'install_path' => null,
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php73' => array(
'pretty_version' => 'v1.29.0',
'version' => '1.29.0.0',
'reference' => '21bd091060673a1177ae842c0ef8fe30893114d2',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php73',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/polyfill-php80' => array(
'pretty_version' => 'v1.29.0',
'version' => '1.29.0.0',
'reference' => '87b68208d5c1188808dd7839ee1e6c8ec3b02f1b',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/polyfill-php80',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/service-contracts' => array(
'pretty_version' => 'v2.5.2',
'version' => '2.5.2.0',
'reference' => '4b426aac47d6427cc1a1d0f7e2ac724627f5966c',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/service-contracts',
'aliases' => array(),
'dev_requirement' => false,
),
'symfony/var-exporter' => array(
'pretty_version' => 'v5.4.35',
'version' => '5.4.35.0',
'reference' => 'abb0a151b62d6b07e816487e20040464af96cae7',
'type' => 'library',
'install_path' => __DIR__ . '/../symfony/var-exporter',
'aliases' => array(),
'dev_requirement' => false,
),
),
);

View file

@ -1,26 +0,0 @@
<?php
// platform_check.php @generated by Composer
$issues = array();
if (!(PHP_VERSION_ID >= 70400)) {
$issues[] = 'Your Composer dependencies require a PHP version ">= 7.4.0". You are running ' . PHP_VERSION . '.';
}
if ($issues) {
if (!headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}
if (!ini_get('display_errors')) {
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
} elseif (!headers_sent()) {
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
}
}
trigger_error(
'Composer detected issues in your platform: ' . implode(' ', $issues),
E_USER_ERROR
);
}

View file

@ -1,5 +0,0 @@
/vendor/
.idea/
# ignore lock file since we have no extra dependencies
composer.lock

View file

@ -1 +0,0 @@
assume_php=false

View file

@ -1,20 +0,0 @@
sudo: false
language: php
php:
- 5.4
- 5.5
- 5.6
- 7.0
- 7.1
- 7.2
- hhvm
script:
- ./vendor/bin/phpunit
before_install:
- travis_retry composer self-update
install:
- composer install

View file

@ -1,126 +0,0 @@
<?hh // decl
namespace FastRoute {
class BadRouteException extends \LogicException {
}
interface RouteParser {
public function parse(string $route): array<array>;
}
class RouteCollector {
public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator);
public function addRoute(mixed $httpMethod, string $route, mixed $handler): void;
public function getData(): array;
}
class Route {
public function __construct(string $httpMethod, mixed $handler, string $regex, array $variables);
public function matches(string $str): bool;
}
interface DataGenerator {
public function addRoute(string $httpMethod, array $routeData, mixed $handler);
public function getData(): array;
}
interface Dispatcher {
const int NOT_FOUND = 0;
const int FOUND = 1;
const int METHOD_NOT_ALLOWED = 2;
public function dispatch(string $httpMethod, string $uri): array;
}
function simpleDispatcher(
(function(RouteCollector): void) $routeDefinitionCallback,
shape(
?'routeParser' => classname<RouteParser>,
?'dataGenerator' => classname<DataGenerator>,
?'dispatcher' => classname<Dispatcher>,
?'routeCollector' => classname<RouteCollector>,
) $options = shape()): Dispatcher;
function cachedDispatcher(
(function(RouteCollector): void) $routeDefinitionCallback,
shape(
?'routeParser' => classname<RouteParser>,
?'dataGenerator' => classname<DataGenerator>,
?'dispatcher' => classname<Dispatcher>,
?'routeCollector' => classname<RouteCollector>,
?'cacheDisabled' => bool,
?'cacheFile' => string,
) $options = shape()): Dispatcher;
}
namespace FastRoute\DataGenerator {
abstract class RegexBasedAbstract implements \FastRoute\DataGenerator {
protected abstract function getApproxChunkSize();
protected abstract function processChunk($regexToRoutesMap);
public function addRoute(string $httpMethod, array $routeData, mixed $handler): void;
public function getData(): array;
}
class CharCountBased extends RegexBasedAbstract {
protected function getApproxChunkSize(): int;
protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
}
class GroupCountBased extends RegexBasedAbstract {
protected function getApproxChunkSize(): int;
protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
}
class GroupPosBased extends RegexBasedAbstract {
protected function getApproxChunkSize(): int;
protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
}
class MarkBased extends RegexBasedAbstract {
protected function getApproxChunkSize(): int;
protected function processChunk(array<string, string> $regexToRoutesMap): array<string, mixed>;
}
}
namespace FastRoute\Dispatcher {
abstract class RegexBasedAbstract implements \FastRoute\Dispatcher {
protected abstract function dispatchVariableRoute(array<array> $routeData, string $uri): array;
public function dispatch(string $httpMethod, string $uri): array;
}
class GroupPosBased extends RegexBasedAbstract {
public function __construct(array $data);
protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
}
class GroupCountBased extends RegexBasedAbstract {
public function __construct(array $data);
protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
}
class CharCountBased extends RegexBasedAbstract {
public function __construct(array $data);
protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
}
class MarkBased extends RegexBasedAbstract {
public function __construct(array $data);
protected function dispatchVariableRoute(array<array> $routeData, string $uri): array;
}
}
namespace FastRoute\RouteParser {
class Std implements \FastRoute\RouteParser {
const string VARIABLE_REGEX = <<<'REGEX'
\{
\s* ([a-zA-Z][a-zA-Z0-9_]*) \s*
(?:
: \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*)
)?
\}
REGEX;
const string DEFAULT_DISPATCH_REGEX = '[^/]+';
public function parse(string $route): array<array>;
}
}

View file

@ -1,31 +0,0 @@
Copyright (c) 2013 by Nikita Popov.
Some rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials provided
with the distribution.
* The names of the contributors may not be used to endorse or
promote products derived from this software without specific
prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,313 +0,0 @@
FastRoute - Fast request router for PHP
=======================================
This library provides a fast implementation of a regular expression based router. [Blog post explaining how the
implementation works and why it is fast.][blog_post]
Install
-------
To install with composer:
```sh
composer require nikic/fast-route
```
Requires PHP 5.4 or newer.
Usage
-----
Here's a basic usage example:
```php
<?php
require '/path/to/vendor/autoload.php';
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/users', 'get_all_users_handler');
// {id} must be a number (\d+)
$r->addRoute('GET', '/user/{id:\d+}', 'get_user_handler');
// The /{title} suffix is optional
$r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler');
});
// Fetch method and URI from somewhere
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];
// Strip query string (?foo=bar) and decode URI
if (false !== $pos = strpos($uri, '?')) {
$uri = substr($uri, 0, $pos);
}
$uri = rawurldecode($uri);
$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
case FastRoute\Dispatcher::NOT_FOUND:
// ... 404 Not Found
break;
case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
$allowedMethods = $routeInfo[1];
// ... 405 Method Not Allowed
break;
case FastRoute\Dispatcher::FOUND:
$handler = $routeInfo[1];
$vars = $routeInfo[2];
// ... call $handler with $vars
break;
}
```
### Defining routes
The routes are defined by calling the `FastRoute\simpleDispatcher()` function, which accepts
a callable taking a `FastRoute\RouteCollector` instance. The routes are added by calling
`addRoute()` on the collector instance:
```php
$r->addRoute($method, $routePattern, $handler);
```
The `$method` is an uppercase HTTP method string for which a certain route should match. It
is possible to specify multiple valid methods using an array:
```php
// These two calls
$r->addRoute('GET', '/test', 'handler');
$r->addRoute('POST', '/test', 'handler');
// Are equivalent to this one call
$r->addRoute(['GET', 'POST'], '/test', 'handler');
```
By default the `$routePattern` uses a syntax where `{foo}` specifies a placeholder with name `foo`
and matching the regex `[^/]+`. To adjust the pattern the placeholder matches, you can specify
a custom pattern by writing `{bar:[0-9]+}`. Some examples:
```php
// Matches /user/42, but not /user/xyz
$r->addRoute('GET', '/user/{id:\d+}', 'handler');
// Matches /user/foobar, but not /user/foo/bar
$r->addRoute('GET', '/user/{name}', 'handler');
// Matches /user/foo/bar as well
$r->addRoute('GET', '/user/{name:.+}', 'handler');
```
Custom patterns for route placeholders cannot use capturing groups. For example `{lang:(en|de)}`
is not a valid placeholder, because `()` is a capturing group. Instead you can use either
`{lang:en|de}` or `{lang:(?:en|de)}`.
Furthermore parts of the route enclosed in `[...]` are considered optional, so that `/foo[bar]`
will match both `/foo` and `/foobar`. Optional parts are only supported in a trailing position,
not in the middle of a route.
```php
// This route
$r->addRoute('GET', '/user/{id:\d+}[/{name}]', 'handler');
// Is equivalent to these two routes
$r->addRoute('GET', '/user/{id:\d+}', 'handler');
$r->addRoute('GET', '/user/{id:\d+}/{name}', 'handler');
// Multiple nested optional parts are possible as well
$r->addRoute('GET', '/user[/{id:\d+}[/{name}]]', 'handler');
// This route is NOT valid, because optional parts can only occur at the end
$r->addRoute('GET', '/user[/{id:\d+}]/{name}', 'handler');
```
The `$handler` parameter does not necessarily have to be a callback, it could also be a controller
class name or any other kind of data you wish to associate with the route. FastRoute only tells you
which handler corresponds to your URI, how you interpret it is up to you.
#### Shorcut methods for common request methods
For the `GET`, `POST`, `PUT`, `PATCH`, `DELETE` and `HEAD` request methods shortcut methods are available. For example:
```php
$r->get('/get-route', 'get_handler');
$r->post('/post-route', 'post_handler');
```
Is equivalent to:
```php
$r->addRoute('GET', '/get-route', 'get_handler');
$r->addRoute('POST', '/post-route', 'post_handler');
```
#### Route Groups
Additionally, you can specify routes inside of a group. All routes defined inside a group will have a common prefix.
For example, defining your routes as:
```php
$r->addGroup('/admin', function (RouteCollector $r) {
$r->addRoute('GET', '/do-something', 'handler');
$r->addRoute('GET', '/do-another-thing', 'handler');
$r->addRoute('GET', '/do-something-else', 'handler');
});
```
Will have the same result as:
```php
$r->addRoute('GET', '/admin/do-something', 'handler');
$r->addRoute('GET', '/admin/do-another-thing', 'handler');
$r->addRoute('GET', '/admin/do-something-else', 'handler');
```
Nested groups are also supported, in which case the prefixes of all the nested groups are combined.
### Caching
The reason `simpleDispatcher` accepts a callback for defining the routes is to allow seamless
caching. By using `cachedDispatcher` instead of `simpleDispatcher` you can cache the generated
routing data and construct the dispatcher from the cached information:
```php
<?php
$dispatcher = FastRoute\cachedDispatcher(function(FastRoute\RouteCollector $r) {
$r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
$r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
$r->addRoute('GET', '/user/{name}', 'handler2');
}, [
'cacheFile' => __DIR__ . '/route.cache', /* required */
'cacheDisabled' => IS_DEBUG_ENABLED, /* optional, enabled by default */
]);
```
The second parameter to the function is an options array, which can be used to specify the cache
file location, among other things.
### Dispatching a URI
A URI is dispatched by calling the `dispatch()` method of the created dispatcher. This method
accepts the HTTP method and a URI. Getting those two bits of information (and normalizing them
appropriately) is your job - this library is not bound to the PHP web SAPIs.
The `dispatch()` method returns an array whose first element contains a status code. It is one
of `Dispatcher::NOT_FOUND`, `Dispatcher::METHOD_NOT_ALLOWED` and `Dispatcher::FOUND`. For the
method not allowed status the second array element contains a list of HTTP methods allowed for
the supplied URI. For example:
[FastRoute\Dispatcher::METHOD_NOT_ALLOWED, ['GET', 'POST']]
> **NOTE:** The HTTP specification requires that a `405 Method Not Allowed` response include the
`Allow:` header to detail available methods for the requested resource. Applications using FastRoute
should use the second array element to add this header when relaying a 405 response.
For the found status the second array element is the handler that was associated with the route
and the third array element is a dictionary of placeholder names to their values. For example:
/* Routing against GET /user/nikic/42 */
[FastRoute\Dispatcher::FOUND, 'handler0', ['name' => 'nikic', 'id' => '42']]
### Overriding the route parser and dispatcher
The routing process makes use of three components: A route parser, a data generator and a
dispatcher. The three components adhere to the following interfaces:
```php
<?php
namespace FastRoute;
interface RouteParser {
public function parse($route);
}
interface DataGenerator {
public function addRoute($httpMethod, $routeData, $handler);
public function getData();
}
interface Dispatcher {
const NOT_FOUND = 0, FOUND = 1, METHOD_NOT_ALLOWED = 2;
public function dispatch($httpMethod, $uri);
}
```
The route parser takes a route pattern string and converts it into an array of route infos, where
each route info is again an array of it's parts. The structure is best understood using an example:
/* The route /user/{id:\d+}[/{name}] converts to the following array: */
[
[
'/user/',
['id', '\d+'],
],
[
'/user/',
['id', '\d+'],
'/',
['name', '[^/]+'],
],
]
This array can then be passed to the `addRoute()` method of a data generator. After all routes have
been added the `getData()` of the generator is invoked, which returns all the routing data required
by the dispatcher. The format of this data is not further specified - it is tightly coupled to
the corresponding dispatcher.
The dispatcher accepts the routing data via a constructor and provides a `dispatch()` method, which
you're already familiar with.
The route parser can be overwritten individually (to make use of some different pattern syntax),
however the data generator and dispatcher should always be changed as a pair, as the output from
the former is tightly coupled to the input of the latter. The reason the generator and the
dispatcher are separate is that only the latter is needed when using caching (as the output of
the former is what is being cached.)
When using the `simpleDispatcher` / `cachedDispatcher` functions from above the override happens
through the options array:
```php
<?php
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) {
/* ... */
}, [
'routeParser' => 'FastRoute\\RouteParser\\Std',
'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
]);
```
The above options array corresponds to the defaults. By replacing `GroupCountBased` by
`GroupPosBased` you could switch to a different dispatching strategy.
### A Note on HEAD Requests
The HTTP spec requires servers to [support both GET and HEAD methods][2616-511]:
> The methods GET and HEAD MUST be supported by all general-purpose servers
To avoid forcing users to manually register HEAD routes for each resource we fallback to matching an
available GET route for a given resource. The PHP web SAPI transparently removes the entity body
from HEAD responses so this behavior has no effect on the vast majority of users.
However, implementers using FastRoute outside the web SAPI environment (e.g. a custom server) MUST
NOT send entity bodies generated in response to HEAD requests. If you are a non-SAPI user this is
*your responsibility*; FastRoute has no purview to prevent you from breaking HTTP in such cases.
Finally, note that applications MAY always specify their own HEAD method route for a given
resource to bypass this behavior entirely.
### Credits
This library is based on a router that [Levi Morrison][levi] implemented for the Aerys server.
A large number of tests, as well as HTTP compliance considerations, were provided by [Daniel Lowrey][rdlowrey].
[2616-511]: http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.1 "RFC 2616 Section 5.1.1"
[blog_post]: http://nikic.github.io/2014/02/18/Fast-request-routing-using-regular-expressions.html
[levi]: https://github.com/morrisonlevi
[rdlowrey]: https://github.com/rdlowrey

View file

@ -1,24 +0,0 @@
{
"name": "nikic/fast-route",
"description": "Fast request router for PHP",
"keywords": ["routing", "router"],
"license": "BSD-3-Clause",
"authors": [
{
"name": "Nikita Popov",
"email": "nikic@php.net"
}
],
"autoload": {
"psr-4": {
"FastRoute\\": "src/"
},
"files": ["src/functions.php"]
},
"require": {
"php": ">=5.4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35|~5.7"
}
}

View file

@ -1,24 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
colors="true"
convertErrorsToExceptions="true"
convertNoticesToExceptions="true"
convertWarningsToExceptions="true"
processIsolation="false"
syntaxCheck="false"
bootstrap="test/bootstrap.php"
>
<testsuites>
<testsuite name="FastRoute Tests">
<directory>./test/</directory>
</testsuite>
</testsuites>
<filter>
<whitelist>
<directory>./src/</directory>
</whitelist>
</filter>
</phpunit>

View file

@ -1,28 +0,0 @@
<?xml version="1.0"?>
<psalm
name="Example Psalm config with recommended defaults"
stopOnFirstError="false"
useDocblockTypes="true"
totallyTyped="false"
requireVoidReturnType="false"
>
<projectFiles>
<directory name="src" />
</projectFiles>
<issueHandlers>
<LessSpecificReturnType errorLevel="info" />
<!-- level 3 issues - slightly lazy code writing, but provably low false-negatives -->
<DeprecatedMethod errorLevel="info" />
<MissingClosureReturnType errorLevel="info" />
<MissingReturnType errorLevel="info" />
<MissingPropertyType errorLevel="info" />
<InvalidDocblock errorLevel="info" />
<MisplacedRequiredParam errorLevel="info" />
<PropertyNotSetInConstructor errorLevel="info" />
<MissingConstructor errorLevel="info" />
</issueHandlers>
</psalm>

View file

@ -1,7 +0,0 @@
<?php
namespace FastRoute;
class BadRouteException extends \LogicException
{
}

View file

@ -1,26 +0,0 @@
<?php
namespace FastRoute;
interface DataGenerator
{
/**
* Adds a route to the data generator. The route data uses the
* same format that is returned by RouterParser::parser().
*
* The handler doesn't necessarily need to be a callable, it
* can be arbitrary data that will be returned when the route
* matches.
*
* @param string $httpMethod
* @param array $routeData
* @param mixed $handler
*/
public function addRoute($httpMethod, $routeData, $handler);
/**
* Returns dispatcher data in some unspecified format, which
* depends on the used method of dispatch.
*/
public function getData();
}

View file

@ -1,31 +0,0 @@
<?php
namespace FastRoute\DataGenerator;
class CharCountBased extends RegexBasedAbstract
{
protected function getApproxChunkSize()
{
return 30;
}
protected function processChunk($regexToRoutesMap)
{
$routeMap = [];
$regexes = [];
$suffixLen = 0;
$suffix = '';
$count = count($regexToRoutesMap);
foreach ($regexToRoutesMap as $regex => $route) {
$suffixLen++;
$suffix .= "\t";
$regexes[] = '(?:' . $regex . '/(\t{' . $suffixLen . '})\t{' . ($count - $suffixLen) . '})';
$routeMap[$suffix] = [$route->handler, $route->variables];
}
$regex = '~^(?|' . implode('|', $regexes) . ')$~';
return ['regex' => $regex, 'suffix' => '/' . $suffix, 'routeMap' => $routeMap];
}
}

View file

@ -1,30 +0,0 @@
<?php
namespace FastRoute\DataGenerator;
class GroupCountBased extends RegexBasedAbstract
{
protected function getApproxChunkSize()
{
return 10;
}
protected function processChunk($regexToRoutesMap)
{
$routeMap = [];
$regexes = [];
$numGroups = 0;
foreach ($regexToRoutesMap as $regex => $route) {
$numVariables = count($route->variables);
$numGroups = max($numGroups, $numVariables);
$regexes[] = $regex . str_repeat('()', $numGroups - $numVariables);
$routeMap[$numGroups + 1] = [$route->handler, $route->variables];
++$numGroups;
}
$regex = '~^(?|' . implode('|', $regexes) . ')$~';
return ['regex' => $regex, 'routeMap' => $routeMap];
}
}

View file

@ -1,27 +0,0 @@
<?php
namespace FastRoute\DataGenerator;
class GroupPosBased extends RegexBasedAbstract
{
protected function getApproxChunkSize()
{
return 10;
}
protected function processChunk($regexToRoutesMap)
{
$routeMap = [];
$regexes = [];
$offset = 1;
foreach ($regexToRoutesMap as $regex => $route) {
$regexes[] = $regex;
$routeMap[$offset] = [$route->handler, $route->variables];
$offset += count($route->variables);
}
$regex = '~^(?:' . implode('|', $regexes) . ')$~';
return ['regex' => $regex, 'routeMap' => $routeMap];
}
}

View file

@ -1,27 +0,0 @@
<?php
namespace FastRoute\DataGenerator;
class MarkBased extends RegexBasedAbstract
{
protected function getApproxChunkSize()
{
return 30;
}
protected function processChunk($regexToRoutesMap)
{
$routeMap = [];
$regexes = [];
$markName = 'a';
foreach ($regexToRoutesMap as $regex => $route) {
$regexes[] = $regex . '(*MARK:' . $markName . ')';
$routeMap[$markName] = [$route->handler, $route->variables];
++$markName;
}
$regex = '~^(?|' . implode('|', $regexes) . ')$~';
return ['regex' => $regex, 'routeMap' => $routeMap];
}
}

View file

@ -1,186 +0,0 @@
<?php
namespace FastRoute\DataGenerator;
use FastRoute\BadRouteException;
use FastRoute\DataGenerator;
use FastRoute\Route;
abstract class RegexBasedAbstract implements DataGenerator
{
/** @var mixed[][] */
protected $staticRoutes = [];
/** @var Route[][] */
protected $methodToRegexToRoutesMap = [];
/**
* @return int
*/
abstract protected function getApproxChunkSize();
/**
* @return mixed[]
*/
abstract protected function processChunk($regexToRoutesMap);
public function addRoute($httpMethod, $routeData, $handler)
{
if ($this->isStaticRoute($routeData)) {
$this->addStaticRoute($httpMethod, $routeData, $handler);
} else {
$this->addVariableRoute($httpMethod, $routeData, $handler);
}
}
/**
* @return mixed[]
*/
public function getData()
{
if (empty($this->methodToRegexToRoutesMap)) {
return [$this->staticRoutes, []];
}
return [$this->staticRoutes, $this->generateVariableRouteData()];
}
/**
* @return mixed[]
*/
private function generateVariableRouteData()
{
$data = [];
foreach ($this->methodToRegexToRoutesMap as $method => $regexToRoutesMap) {
$chunkSize = $this->computeChunkSize(count($regexToRoutesMap));
$chunks = array_chunk($regexToRoutesMap, $chunkSize, true);
$data[$method] = array_map([$this, 'processChunk'], $chunks);
}
return $data;
}
/**
* @param int
* @return int
*/
private function computeChunkSize($count)
{
$numParts = max(1, round($count / $this->getApproxChunkSize()));
return (int) ceil($count / $numParts);
}
/**
* @param mixed[]
* @return bool
*/
private function isStaticRoute($routeData)
{
return count($routeData) === 1 && is_string($routeData[0]);
}
private function addStaticRoute($httpMethod, $routeData, $handler)
{
$routeStr = $routeData[0];
if (isset($this->staticRoutes[$httpMethod][$routeStr])) {
throw new BadRouteException(sprintf(
'Cannot register two routes matching "%s" for method "%s"',
$routeStr, $httpMethod
));
}
if (isset($this->methodToRegexToRoutesMap[$httpMethod])) {
foreach ($this->methodToRegexToRoutesMap[$httpMethod] as $route) {
if ($route->matches($routeStr)) {
throw new BadRouteException(sprintf(
'Static route "%s" is shadowed by previously defined variable route "%s" for method "%s"',
$routeStr, $route->regex, $httpMethod
));
}
}
}
$this->staticRoutes[$httpMethod][$routeStr] = $handler;
}
private function addVariableRoute($httpMethod, $routeData, $handler)
{
list($regex, $variables) = $this->buildRegexForRoute($routeData);
if (isset($this->methodToRegexToRoutesMap[$httpMethod][$regex])) {
throw new BadRouteException(sprintf(
'Cannot register two routes matching "%s" for method "%s"',
$regex, $httpMethod
));
}
$this->methodToRegexToRoutesMap[$httpMethod][$regex] = new Route(
$httpMethod, $handler, $regex, $variables
);
}
/**
* @param mixed[]
* @return mixed[]
*/
private function buildRegexForRoute($routeData)
{
$regex = '';
$variables = [];
foreach ($routeData as $part) {
if (is_string($part)) {
$regex .= preg_quote($part, '~');
continue;
}
list($varName, $regexPart) = $part;
if (isset($variables[$varName])) {
throw new BadRouteException(sprintf(
'Cannot use the same placeholder "%s" twice', $varName
));
}
if ($this->regexHasCapturingGroups($regexPart)) {
throw new BadRouteException(sprintf(
'Regex "%s" for parameter "%s" contains a capturing group',
$regexPart, $varName
));
}
$variables[$varName] = $varName;
$regex .= '(' . $regexPart . ')';
}
return [$regex, $variables];
}
/**
* @param string
* @return bool
*/
private function regexHasCapturingGroups($regex)
{
if (false === strpos($regex, '(')) {
// Needs to have at least a ( to contain a capturing group
return false;
}
// Semi-accurate detection for capturing groups
return (bool) preg_match(
'~
(?:
\(\?\(
| \[ [^\]\\\\]* (?: \\\\ . [^\]\\\\]* )* \]
| \\\\ .
) (*SKIP)(*FAIL) |
\(
(?!
\? (?! <(?![!=]) | P< | \' )
| \*
)
~x',
$regex
);
}
}

View file

@ -1,26 +0,0 @@
<?php
namespace FastRoute;
interface Dispatcher
{
const NOT_FOUND = 0;
const FOUND = 1;
const METHOD_NOT_ALLOWED = 2;
/**
* Dispatches against the provided HTTP method verb and URI.
*
* Returns array with one of the following formats:
*
* [self::NOT_FOUND]
* [self::METHOD_NOT_ALLOWED, ['GET', 'OTHER_ALLOWED_METHODS']]
* [self::FOUND, $handler, ['varName' => 'value', ...]]
*
* @param string $httpMethod
* @param string $uri
*
* @return array
*/
public function dispatch($httpMethod, $uri);
}

View file

@ -1,31 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class CharCountBased extends RegexBasedAbstract
{
public function __construct($data)
{
list($this->staticRouteMap, $this->variableRouteData) = $data;
}
protected function dispatchVariableRoute($routeData, $uri)
{
foreach ($routeData as $data) {
if (!preg_match($data['regex'], $uri . $data['suffix'], $matches)) {
continue;
}
list($handler, $varNames) = $data['routeMap'][end($matches)];
$vars = [];
$i = 0;
foreach ($varNames as $varName) {
$vars[$varName] = $matches[++$i];
}
return [self::FOUND, $handler, $vars];
}
return [self::NOT_FOUND];
}
}

View file

@ -1,31 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class GroupCountBased extends RegexBasedAbstract
{
public function __construct($data)
{
list($this->staticRouteMap, $this->variableRouteData) = $data;
}
protected function dispatchVariableRoute($routeData, $uri)
{
foreach ($routeData as $data) {
if (!preg_match($data['regex'], $uri, $matches)) {
continue;
}
list($handler, $varNames) = $data['routeMap'][count($matches)];
$vars = [];
$i = 0;
foreach ($varNames as $varName) {
$vars[$varName] = $matches[++$i];
}
return [self::FOUND, $handler, $vars];
}
return [self::NOT_FOUND];
}
}

View file

@ -1,33 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class GroupPosBased extends RegexBasedAbstract
{
public function __construct($data)
{
list($this->staticRouteMap, $this->variableRouteData) = $data;
}
protected function dispatchVariableRoute($routeData, $uri)
{
foreach ($routeData as $data) {
if (!preg_match($data['regex'], $uri, $matches)) {
continue;
}
// find first non-empty match
for ($i = 1; '' === $matches[$i]; ++$i);
list($handler, $varNames) = $data['routeMap'][$i];
$vars = [];
foreach ($varNames as $varName) {
$vars[$varName] = $matches[$i++];
}
return [self::FOUND, $handler, $vars];
}
return [self::NOT_FOUND];
}
}

View file

@ -1,31 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class MarkBased extends RegexBasedAbstract
{
public function __construct($data)
{
list($this->staticRouteMap, $this->variableRouteData) = $data;
}
protected function dispatchVariableRoute($routeData, $uri)
{
foreach ($routeData as $data) {
if (!preg_match($data['regex'], $uri, $matches)) {
continue;
}
list($handler, $varNames) = $data['routeMap'][$matches['MARK']];
$vars = [];
$i = 0;
foreach ($varNames as $varName) {
$vars[$varName] = $matches[++$i];
}
return [self::FOUND, $handler, $vars];
}
return [self::NOT_FOUND];
}
}

View file

@ -1,88 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
use FastRoute\Dispatcher;
abstract class RegexBasedAbstract implements Dispatcher
{
/** @var mixed[][] */
protected $staticRouteMap = [];
/** @var mixed[] */
protected $variableRouteData = [];
/**
* @return mixed[]
*/
abstract protected function dispatchVariableRoute($routeData, $uri);
public function dispatch($httpMethod, $uri)
{
if (isset($this->staticRouteMap[$httpMethod][$uri])) {
$handler = $this->staticRouteMap[$httpMethod][$uri];
return [self::FOUND, $handler, []];
}
$varRouteData = $this->variableRouteData;
if (isset($varRouteData[$httpMethod])) {
$result = $this->dispatchVariableRoute($varRouteData[$httpMethod], $uri);
if ($result[0] === self::FOUND) {
return $result;
}
}
// For HEAD requests, attempt fallback to GET
if ($httpMethod === 'HEAD') {
if (isset($this->staticRouteMap['GET'][$uri])) {
$handler = $this->staticRouteMap['GET'][$uri];
return [self::FOUND, $handler, []];
}
if (isset($varRouteData['GET'])) {
$result = $this->dispatchVariableRoute($varRouteData['GET'], $uri);
if ($result[0] === self::FOUND) {
return $result;
}
}
}
// If nothing else matches, try fallback routes
if (isset($this->staticRouteMap['*'][$uri])) {
$handler = $this->staticRouteMap['*'][$uri];
return [self::FOUND, $handler, []];
}
if (isset($varRouteData['*'])) {
$result = $this->dispatchVariableRoute($varRouteData['*'], $uri);
if ($result[0] === self::FOUND) {
return $result;
}
}
// Find allowed methods for this URI by matching against all other HTTP methods as well
$allowedMethods = [];
foreach ($this->staticRouteMap as $method => $uriMap) {
if ($method !== $httpMethod && isset($uriMap[$uri])) {
$allowedMethods[] = $method;
}
}
foreach ($varRouteData as $method => $routeData) {
if ($method === $httpMethod) {
continue;
}
$result = $this->dispatchVariableRoute($routeData, $uri);
if ($result[0] === self::FOUND) {
$allowedMethods[] = $method;
}
}
// If there are no allowed methods the route simply does not exist
if ($allowedMethods) {
return [self::METHOD_NOT_ALLOWED, $allowedMethods];
}
return [self::NOT_FOUND];
}
}

View file

@ -1,47 +0,0 @@
<?php
namespace FastRoute;
class Route
{
/** @var string */
public $httpMethod;
/** @var string */
public $regex;
/** @var array */
public $variables;
/** @var mixed */
public $handler;
/**
* Constructs a route (value object).
*
* @param string $httpMethod
* @param mixed $handler
* @param string $regex
* @param array $variables
*/
public function __construct($httpMethod, $handler, $regex, $variables)
{
$this->httpMethod = $httpMethod;
$this->handler = $handler;
$this->regex = $regex;
$this->variables = $variables;
}
/**
* Tests whether this route matches the given string.
*
* @param string $str
*
* @return bool
*/
public function matches($str)
{
$regex = '~^' . $this->regex . '$~';
return (bool) preg_match($regex, $str);
}
}

View file

@ -1,152 +0,0 @@
<?php
namespace FastRoute;
class RouteCollector
{
/** @var RouteParser */
protected $routeParser;
/** @var DataGenerator */
protected $dataGenerator;
/** @var string */
protected $currentGroupPrefix;
/**
* Constructs a route collector.
*
* @param RouteParser $routeParser
* @param DataGenerator $dataGenerator
*/
public function __construct(RouteParser $routeParser, DataGenerator $dataGenerator)
{
$this->routeParser = $routeParser;
$this->dataGenerator = $dataGenerator;
$this->currentGroupPrefix = '';
}
/**
* Adds a route to the collection.
*
* The syntax used in the $route string depends on the used route parser.
*
* @param string|string[] $httpMethod
* @param string $route
* @param mixed $handler
*/
public function addRoute($httpMethod, $route, $handler)
{
$route = $this->currentGroupPrefix . $route;
$routeDatas = $this->routeParser->parse($route);
foreach ((array) $httpMethod as $method) {
foreach ($routeDatas as $routeData) {
$this->dataGenerator->addRoute($method, $routeData, $handler);
}
}
}
/**
* Create a route group with a common prefix.
*
* All routes created in the passed callback will have the given group prefix prepended.
*
* @param string $prefix
* @param callable $callback
*/
public function addGroup($prefix, callable $callback)
{
$previousGroupPrefix = $this->currentGroupPrefix;
$this->currentGroupPrefix = $previousGroupPrefix . $prefix;
$callback($this);
$this->currentGroupPrefix = $previousGroupPrefix;
}
/**
* Adds a GET route to the collection
*
* This is simply an alias of $this->addRoute('GET', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function get($route, $handler)
{
$this->addRoute('GET', $route, $handler);
}
/**
* Adds a POST route to the collection
*
* This is simply an alias of $this->addRoute('POST', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function post($route, $handler)
{
$this->addRoute('POST', $route, $handler);
}
/**
* Adds a PUT route to the collection
*
* This is simply an alias of $this->addRoute('PUT', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function put($route, $handler)
{
$this->addRoute('PUT', $route, $handler);
}
/**
* Adds a DELETE route to the collection
*
* This is simply an alias of $this->addRoute('DELETE', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function delete($route, $handler)
{
$this->addRoute('DELETE', $route, $handler);
}
/**
* Adds a PATCH route to the collection
*
* This is simply an alias of $this->addRoute('PATCH', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function patch($route, $handler)
{
$this->addRoute('PATCH', $route, $handler);
}
/**
* Adds a HEAD route to the collection
*
* This is simply an alias of $this->addRoute('HEAD', $route, $handler)
*
* @param string $route
* @param mixed $handler
*/
public function head($route, $handler)
{
$this->addRoute('HEAD', $route, $handler);
}
/**
* Returns the collected route data, as provided by the data generator.
*
* @return array
*/
public function getData()
{
return $this->dataGenerator->getData();
}
}

View file

@ -1,37 +0,0 @@
<?php
namespace FastRoute;
interface RouteParser
{
/**
* Parses a route string into multiple route data arrays.
*
* The expected output is defined using an example:
*
* For the route string "/fixedRoutePart/{varName}[/moreFixed/{varName2:\d+}]", if {varName} is interpreted as
* a placeholder and [...] is interpreted as an optional route part, the expected result is:
*
* [
* // first route: without optional part
* [
* "/fixedRoutePart/",
* ["varName", "[^/]+"],
* ],
* // second route: with optional part
* [
* "/fixedRoutePart/",
* ["varName", "[^/]+"],
* "/moreFixed/",
* ["varName2", [0-9]+"],
* ],
* ]
*
* Here one route string was converted into two route data arrays.
*
* @param string $route Route string to parse
*
* @return mixed[][] Array of route data arrays
*/
public function parse($route);
}

View file

@ -1,87 +0,0 @@
<?php
namespace FastRoute\RouteParser;
use FastRoute\BadRouteException;
use FastRoute\RouteParser;
/**
* Parses route strings of the following form:
*
* "/user/{name}[/{id:[0-9]+}]"
*/
class Std implements RouteParser
{
const VARIABLE_REGEX = <<<'REGEX'
\{
\s* ([a-zA-Z_][a-zA-Z0-9_-]*) \s*
(?:
: \s* ([^{}]*(?:\{(?-1)\}[^{}]*)*)
)?
\}
REGEX;
const DEFAULT_DISPATCH_REGEX = '[^/]+';
public function parse($route)
{
$routeWithoutClosingOptionals = rtrim($route, ']');
$numOptionals = strlen($route) - strlen($routeWithoutClosingOptionals);
// Split on [ while skipping placeholders
$segments = preg_split('~' . self::VARIABLE_REGEX . '(*SKIP)(*F) | \[~x', $routeWithoutClosingOptionals);
if ($numOptionals !== count($segments) - 1) {
// If there are any ] in the middle of the route, throw a more specific error message
if (preg_match('~' . self::VARIABLE_REGEX . '(*SKIP)(*F) | \]~x', $routeWithoutClosingOptionals)) {
throw new BadRouteException('Optional segments can only occur at the end of a route');
}
throw new BadRouteException("Number of opening '[' and closing ']' does not match");
}
$currentRoute = '';
$routeDatas = [];
foreach ($segments as $n => $segment) {
if ($segment === '' && $n !== 0) {
throw new BadRouteException('Empty optional part');
}
$currentRoute .= $segment;
$routeDatas[] = $this->parsePlaceholders($currentRoute);
}
return $routeDatas;
}
/**
* Parses a route string that does not contain optional segments.
*
* @param string
* @return mixed[]
*/
private function parsePlaceholders($route)
{
if (!preg_match_all(
'~' . self::VARIABLE_REGEX . '~x', $route, $matches,
PREG_OFFSET_CAPTURE | PREG_SET_ORDER
)) {
return [$route];
}
$offset = 0;
$routeData = [];
foreach ($matches as $set) {
if ($set[0][1] > $offset) {
$routeData[] = substr($route, $offset, $set[0][1] - $offset);
}
$routeData[] = [
$set[1][0],
isset($set[2]) ? trim($set[2][0]) : self::DEFAULT_DISPATCH_REGEX
];
$offset = $set[0][1] + strlen($set[0][0]);
}
if ($offset !== strlen($route)) {
$routeData[] = substr($route, $offset);
}
return $routeData;
}
}

View file

@ -1,12 +0,0 @@
<?php
namespace FastRoute;
require __DIR__ . '/functions.php';
spl_autoload_register(function ($class) {
if (strpos($class, 'FastRoute\\') === 0) {
$name = substr($class, strlen('FastRoute'));
require __DIR__ . strtr($name, '\\', DIRECTORY_SEPARATOR) . '.php';
}
});

View file

@ -1,74 +0,0 @@
<?php
namespace FastRoute;
if (!function_exists('FastRoute\simpleDispatcher')) {
/**
* @param callable $routeDefinitionCallback
* @param array $options
*
* @return Dispatcher
*/
function simpleDispatcher(callable $routeDefinitionCallback, array $options = [])
{
$options += [
'routeParser' => 'FastRoute\\RouteParser\\Std',
'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
'routeCollector' => 'FastRoute\\RouteCollector',
];
/** @var RouteCollector $routeCollector */
$routeCollector = new $options['routeCollector'](
new $options['routeParser'], new $options['dataGenerator']
);
$routeDefinitionCallback($routeCollector);
return new $options['dispatcher']($routeCollector->getData());
}
/**
* @param callable $routeDefinitionCallback
* @param array $options
*
* @return Dispatcher
*/
function cachedDispatcher(callable $routeDefinitionCallback, array $options = [])
{
$options += [
'routeParser' => 'FastRoute\\RouteParser\\Std',
'dataGenerator' => 'FastRoute\\DataGenerator\\GroupCountBased',
'dispatcher' => 'FastRoute\\Dispatcher\\GroupCountBased',
'routeCollector' => 'FastRoute\\RouteCollector',
'cacheDisabled' => false,
];
if (!isset($options['cacheFile'])) {
throw new \LogicException('Must specify "cacheFile" option');
}
if (!$options['cacheDisabled'] && file_exists($options['cacheFile'])) {
$dispatchData = require $options['cacheFile'];
if (!is_array($dispatchData)) {
throw new \RuntimeException('Invalid cache file "' . $options['cacheFile'] . '"');
}
return new $options['dispatcher']($dispatchData);
}
$routeCollector = new $options['routeCollector'](
new $options['routeParser'], new $options['dataGenerator']
);
$routeDefinitionCallback($routeCollector);
/** @var RouteCollector $routeCollector */
$dispatchData = $routeCollector->getData();
if (!$options['cacheDisabled']) {
file_put_contents(
$options['cacheFile'],
'<?php return ' . var_export($dispatchData, true) . ';'
);
}
return new $options['dispatcher']($dispatchData);
}
}

View file

@ -1,16 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class CharCountBasedTest extends DispatcherTest
{
protected function getDispatcherClass()
{
return 'FastRoute\\Dispatcher\\CharCountBased';
}
protected function getDataGeneratorClass()
{
return 'FastRoute\\DataGenerator\\CharCountBased';
}
}

View file

@ -1,581 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
use FastRoute\RouteCollector;
use PHPUnit\Framework\TestCase;
abstract class DispatcherTest extends TestCase
{
/**
* Delegate dispatcher selection to child test classes
*/
abstract protected function getDispatcherClass();
/**
* Delegate dataGenerator selection to child test classes
*/
abstract protected function getDataGeneratorClass();
/**
* Set appropriate options for the specific Dispatcher class we're testing
*/
private function generateDispatcherOptions()
{
return [
'dataGenerator' => $this->getDataGeneratorClass(),
'dispatcher' => $this->getDispatcherClass()
];
}
/**
* @dataProvider provideFoundDispatchCases
*/
public function testFoundDispatches($method, $uri, $callback, $handler, $argDict)
{
$dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
$info = $dispatcher->dispatch($method, $uri);
$this->assertSame($dispatcher::FOUND, $info[0]);
$this->assertSame($handler, $info[1]);
$this->assertSame($argDict, $info[2]);
}
/**
* @dataProvider provideNotFoundDispatchCases
*/
public function testNotFoundDispatches($method, $uri, $callback)
{
$dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
$routeInfo = $dispatcher->dispatch($method, $uri);
$this->assertArrayNotHasKey(1, $routeInfo,
'NOT_FOUND result must only contain a single element in the returned info array'
);
$this->assertSame($dispatcher::NOT_FOUND, $routeInfo[0]);
}
/**
* @dataProvider provideMethodNotAllowedDispatchCases
*/
public function testMethodNotAllowedDispatches($method, $uri, $callback, $availableMethods)
{
$dispatcher = \FastRoute\simpleDispatcher($callback, $this->generateDispatcherOptions());
$routeInfo = $dispatcher->dispatch($method, $uri);
$this->assertArrayHasKey(1, $routeInfo,
'METHOD_NOT_ALLOWED result must return an array of allowed methods at index 1'
);
list($routedStatus, $methodArray) = $dispatcher->dispatch($method, $uri);
$this->assertSame($dispatcher::METHOD_NOT_ALLOWED, $routedStatus);
$this->assertSame($availableMethods, $methodArray);
}
/**
* @expectedException \FastRoute\BadRouteException
* @expectedExceptionMessage Cannot use the same placeholder "test" twice
*/
public function testDuplicateVariableNameError()
{
\FastRoute\simpleDispatcher(function (RouteCollector $r) {
$r->addRoute('GET', '/foo/{test}/{test:\d+}', 'handler0');
}, $this->generateDispatcherOptions());
}
/**
* @expectedException \FastRoute\BadRouteException
* @expectedExceptionMessage Cannot register two routes matching "/user/([^/]+)" for method "GET"
*/
public function testDuplicateVariableRoute()
{
\FastRoute\simpleDispatcher(function (RouteCollector $r) {
$r->addRoute('GET', '/user/{id}', 'handler0'); // oops, forgot \d+ restriction ;)
$r->addRoute('GET', '/user/{name}', 'handler1');
}, $this->generateDispatcherOptions());
}
/**
* @expectedException \FastRoute\BadRouteException
* @expectedExceptionMessage Cannot register two routes matching "/user" for method "GET"
*/
public function testDuplicateStaticRoute()
{
\FastRoute\simpleDispatcher(function (RouteCollector $r) {
$r->addRoute('GET', '/user', 'handler0');
$r->addRoute('GET', '/user', 'handler1');
}, $this->generateDispatcherOptions());
}
/**
* @expectedException \FastRoute\BadRouteException
* @expectedExceptionMessage Static route "/user/nikic" is shadowed by previously defined variable route "/user/([^/]+)" for method "GET"
*/
public function testShadowedStaticRoute()
{
\FastRoute\simpleDispatcher(function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}', 'handler0');
$r->addRoute('GET', '/user/nikic', 'handler1');
}, $this->generateDispatcherOptions());
}
/**
* @expectedException \FastRoute\BadRouteException
* @expectedExceptionMessage Regex "(en|de)" for parameter "lang" contains a capturing group
*/
public function testCapturing()
{
\FastRoute\simpleDispatcher(function (RouteCollector $r) {
$r->addRoute('GET', '/{lang:(en|de)}', 'handler0');
}, $this->generateDispatcherOptions());
}
public function provideFoundDispatchCases()
{
$cases = [];
// 0 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/resource/123/456', 'handler0');
};
$method = 'GET';
$uri = '/resource/123/456';
$handler = 'handler0';
$argDict = [];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 1 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/handler0', 'handler0');
$r->addRoute('GET', '/handler1', 'handler1');
$r->addRoute('GET', '/handler2', 'handler2');
};
$method = 'GET';
$uri = '/handler2';
$handler = 'handler2';
$argDict = [];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 2 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
$r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
$r->addRoute('GET', '/user/{name}', 'handler2');
};
$method = 'GET';
$uri = '/user/rdlowrey';
$handler = 'handler2';
$argDict = ['name' => 'rdlowrey'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 3 -------------------------------------------------------------------------------------->
// reuse $callback from #2
$method = 'GET';
$uri = '/user/12345';
$handler = 'handler1';
$argDict = ['id' => '12345'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 4 -------------------------------------------------------------------------------------->
// reuse $callback from #3
$method = 'GET';
$uri = '/user/NaN';
$handler = 'handler2';
$argDict = ['name' => 'NaN'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 5 -------------------------------------------------------------------------------------->
// reuse $callback from #4
$method = 'GET';
$uri = '/user/rdlowrey/12345';
$handler = 'handler0';
$argDict = ['name' => 'rdlowrey', 'id' => '12345'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 6 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{id:[0-9]+}', 'handler0');
$r->addRoute('GET', '/user/12345/extension', 'handler1');
$r->addRoute('GET', '/user/{id:[0-9]+}.{extension}', 'handler2');
};
$method = 'GET';
$uri = '/user/12345.svg';
$handler = 'handler2';
$argDict = ['id' => '12345', 'extension' => 'svg'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 7 ----- Test GET method fallback on HEAD route miss ------------------------------------>
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}', 'handler0');
$r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler1');
$r->addRoute('GET', '/static0', 'handler2');
$r->addRoute('GET', '/static1', 'handler3');
$r->addRoute('HEAD', '/static1', 'handler4');
};
$method = 'HEAD';
$uri = '/user/rdlowrey';
$handler = 'handler0';
$argDict = ['name' => 'rdlowrey'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 8 ----- Test GET method fallback on HEAD route miss ------------------------------------>
// reuse $callback from #7
$method = 'HEAD';
$uri = '/user/rdlowrey/1234';
$handler = 'handler1';
$argDict = ['name' => 'rdlowrey', 'id' => '1234'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 9 ----- Test GET method fallback on HEAD route miss ------------------------------------>
// reuse $callback from #8
$method = 'HEAD';
$uri = '/static0';
$handler = 'handler2';
$argDict = [];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 10 ---- Test existing HEAD route used if available (no fallback) ----------------------->
// reuse $callback from #9
$method = 'HEAD';
$uri = '/static1';
$handler = 'handler4';
$argDict = [];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 11 ---- More specified routes are not shadowed by less specific of another method ------>
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}', 'handler0');
$r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1');
};
$method = 'POST';
$uri = '/user/rdlowrey';
$handler = 'handler1';
$argDict = ['name' => 'rdlowrey'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 12 ---- Handler of more specific routes is used, if it occurs first -------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}', 'handler0');
$r->addRoute('POST', '/user/{name:[a-z]+}', 'handler1');
$r->addRoute('POST', '/user/{name}', 'handler2');
};
$method = 'POST';
$uri = '/user/rdlowrey';
$handler = 'handler1';
$argDict = ['name' => 'rdlowrey'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 13 ---- Route with constant suffix ----------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}', 'handler0');
$r->addRoute('GET', '/user/{name}/edit', 'handler1');
};
$method = 'GET';
$uri = '/user/rdlowrey/edit';
$handler = 'handler1';
$argDict = ['name' => 'rdlowrey'];
$cases[] = [$method, $uri, $callback, $handler, $argDict];
// 14 ---- Handle multiple methods with the same handler ---------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost');
$r->addRoute(['DELETE'], '/user', 'handlerDelete');
$r->addRoute([], '/user', 'handlerNone');
};
$argDict = [];
$cases[] = ['GET', '/user', $callback, 'handlerGetPost', $argDict];
$cases[] = ['POST', '/user', $callback, 'handlerGetPost', $argDict];
$cases[] = ['DELETE', '/user', $callback, 'handlerDelete', $argDict];
// 17 ----
$callback = function (RouteCollector $r) {
$r->addRoute('POST', '/user.json', 'handler0');
$r->addRoute('GET', '/{entity}.json', 'handler1');
};
$cases[] = ['GET', '/user.json', $callback, 'handler1', ['entity' => 'user']];
// 18 ----
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '', 'handler0');
};
$cases[] = ['GET', '', $callback, 'handler0', []];
// 19 ----
$callback = function (RouteCollector $r) {
$r->addRoute('HEAD', '/a/{foo}', 'handler0');
$r->addRoute('GET', '/b/{foo}', 'handler1');
};
$cases[] = ['HEAD', '/b/bar', $callback, 'handler1', ['foo' => 'bar']];
// 20 ----
$callback = function (RouteCollector $r) {
$r->addRoute('HEAD', '/a', 'handler0');
$r->addRoute('GET', '/b', 'handler1');
};
$cases[] = ['HEAD', '/b', $callback, 'handler1', []];
// 21 ----
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/foo', 'handler0');
$r->addRoute('HEAD', '/{bar}', 'handler1');
};
$cases[] = ['HEAD', '/foo', $callback, 'handler1', ['bar' => 'foo']];
// 22 ----
$callback = function (RouteCollector $r) {
$r->addRoute('*', '/user', 'handler0');
$r->addRoute('*', '/{user}', 'handler1');
$r->addRoute('GET', '/user', 'handler2');
};
$cases[] = ['GET', '/user', $callback, 'handler2', []];
// 23 ----
$callback = function (RouteCollector $r) {
$r->addRoute('*', '/user', 'handler0');
$r->addRoute('GET', '/user', 'handler1');
};
$cases[] = ['POST', '/user', $callback, 'handler0', []];
// 24 ----
$cases[] = ['HEAD', '/user', $callback, 'handler1', []];
// 25 ----
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/{bar}', 'handler0');
$r->addRoute('*', '/foo', 'handler1');
};
$cases[] = ['GET', '/foo', $callback, 'handler0', ['bar' => 'foo']];
// 26 ----
$callback = function(RouteCollector $r) {
$r->addRoute('GET', '/user', 'handler0');
$r->addRoute('*', '/{foo:.*}', 'handler1');
};
$cases[] = ['POST', '/bar', $callback, 'handler1', ['foo' => 'bar']];
// x -------------------------------------------------------------------------------------->
return $cases;
}
public function provideNotFoundDispatchCases()
{
$cases = [];
// 0 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/resource/123/456', 'handler0');
};
$method = 'GET';
$uri = '/not-found';
$cases[] = [$method, $uri, $callback];
// 1 -------------------------------------------------------------------------------------->
// reuse callback from #0
$method = 'POST';
$uri = '/not-found';
$cases[] = [$method, $uri, $callback];
// 2 -------------------------------------------------------------------------------------->
// reuse callback from #1
$method = 'PUT';
$uri = '/not-found';
$cases[] = [$method, $uri, $callback];
// 3 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/handler0', 'handler0');
$r->addRoute('GET', '/handler1', 'handler1');
$r->addRoute('GET', '/handler2', 'handler2');
};
$method = 'GET';
$uri = '/not-found';
$cases[] = [$method, $uri, $callback];
// 4 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
$r->addRoute('GET', '/user/{id:[0-9]+}', 'handler1');
$r->addRoute('GET', '/user/{name}', 'handler2');
};
$method = 'GET';
$uri = '/not-found';
$cases[] = [$method, $uri, $callback];
// 5 -------------------------------------------------------------------------------------->
// reuse callback from #4
$method = 'GET';
$uri = '/user/rdlowrey/12345/not-found';
$cases[] = [$method, $uri, $callback];
// 6 -------------------------------------------------------------------------------------->
// reuse callback from #5
$method = 'HEAD';
$cases[] = [$method, $uri, $callback];
// x -------------------------------------------------------------------------------------->
return $cases;
}
public function provideMethodNotAllowedDispatchCases()
{
$cases = [];
// 0 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/resource/123/456', 'handler0');
};
$method = 'POST';
$uri = '/resource/123/456';
$allowedMethods = ['GET'];
$cases[] = [$method, $uri, $callback, $allowedMethods];
// 1 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/resource/123/456', 'handler0');
$r->addRoute('POST', '/resource/123/456', 'handler1');
$r->addRoute('PUT', '/resource/123/456', 'handler2');
$r->addRoute('*', '/', 'handler3');
};
$method = 'DELETE';
$uri = '/resource/123/456';
$allowedMethods = ['GET', 'POST', 'PUT'];
$cases[] = [$method, $uri, $callback, $allowedMethods];
// 2 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('GET', '/user/{name}/{id:[0-9]+}', 'handler0');
$r->addRoute('POST', '/user/{name}/{id:[0-9]+}', 'handler1');
$r->addRoute('PUT', '/user/{name}/{id:[0-9]+}', 'handler2');
$r->addRoute('PATCH', '/user/{name}/{id:[0-9]+}', 'handler3');
};
$method = 'DELETE';
$uri = '/user/rdlowrey/42';
$allowedMethods = ['GET', 'POST', 'PUT', 'PATCH'];
$cases[] = [$method, $uri, $callback, $allowedMethods];
// 3 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute('POST', '/user/{name}', 'handler1');
$r->addRoute('PUT', '/user/{name:[a-z]+}', 'handler2');
$r->addRoute('PATCH', '/user/{name:[a-z]+}', 'handler3');
};
$method = 'GET';
$uri = '/user/rdlowrey';
$allowedMethods = ['POST', 'PUT', 'PATCH'];
$cases[] = [$method, $uri, $callback, $allowedMethods];
// 4 -------------------------------------------------------------------------------------->
$callback = function (RouteCollector $r) {
$r->addRoute(['GET', 'POST'], '/user', 'handlerGetPost');
$r->addRoute(['DELETE'], '/user', 'handlerDelete');
$r->addRoute([], '/user', 'handlerNone');
};
$cases[] = ['PUT', '/user', $callback, ['GET', 'POST', 'DELETE']];
// 5
$callback = function (RouteCollector $r) {
$r->addRoute('POST', '/user.json', 'handler0');
$r->addRoute('GET', '/{entity}.json', 'handler1');
};
$cases[] = ['PUT', '/user.json', $callback, ['POST', 'GET']];
// x -------------------------------------------------------------------------------------->
return $cases;
}
}

View file

@ -1,16 +0,0 @@
<?php
namespace FastRoute\Dispatcher;
class GroupCountBasedTest extends DispatcherTest
{
protected function getDispatcherClass()
{
return 'FastRoute\\Dispatcher\\GroupCountBased';
}
protected function getDataGeneratorClass()
{
return 'FastRoute\\DataGenerator\\GroupCountBased';
}
}

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