mirror of
https://github.com/flarum/core.git
synced 2025-08-20 23:31:27 +02:00
Compare commits
71 Commits
v1.8.10
...
sm/laravel
Author | SHA1 | Date | |
---|---|---|---|
|
e49dd8c8b7 | ||
|
0db8007002 | ||
|
835eba9178 | ||
|
2a0f8ff7ed | ||
|
e1ab77f66a | ||
|
6a812910dc | ||
|
f126c688d3 | ||
|
6fb1640b3c | ||
|
834bd732da | ||
|
9c3460a619 | ||
|
3b3efc7cbb | ||
|
cca5725fe4 | ||
|
0ce33c3ec0 | ||
|
495b24a5aa | ||
|
7d4549ea34 | ||
|
a60e3d174f | ||
|
0a89c3bd53 | ||
|
d056e339a4 | ||
|
3e49aeb32c | ||
|
47a0298958 | ||
|
f0eebc53ec | ||
|
5120e357bb | ||
|
e731fb6189 | ||
|
229a7affa5 | ||
|
2ffbc44b4e | ||
|
b2a5a970e8 | ||
|
781000e047 | ||
|
608e2a7e5a | ||
|
7467beb72f | ||
|
6ec0911cd1 | ||
|
992d85e3b8 | ||
|
59586e63e1 | ||
|
76004ed844 | ||
|
e014aa0105 | ||
|
ce334156d5 | ||
|
4d0190d4b0 | ||
|
da1aa2aa92 | ||
|
c80220ad9b | ||
|
3593d53795 | ||
|
07623afacd | ||
|
f2f7f16c68 | ||
|
f3b5313557 | ||
|
0b128a5612 | ||
|
40dcaf882c | ||
|
9feb9dd4eb | ||
|
016503d8c3 | ||
|
cf70865aa6 | ||
|
b003736d75 | ||
|
0cf2001478 | ||
|
5820a16a96 | ||
|
4a966b830f | ||
|
7799c2fcd5 | ||
|
11b4a810b7 | ||
|
493ffa0538 | ||
|
64b25b26c3 | ||
|
6bc19e2e52 | ||
|
3757bde4fc | ||
|
f67ca5782a | ||
|
fad818d1e5 | ||
|
12ef1bfdbb | ||
|
951f58e567 | ||
|
082f04d3c3 | ||
|
04fe2616a4 | ||
|
c94c140484 | ||
|
7b9605bb4e | ||
|
6e783b9c78 | ||
|
6f11e044a7 | ||
|
34a04b0746 | ||
|
069677b2e3 | ||
|
57e05a5eaf | ||
|
b6a6248dff |
25
.bundlewatch.config.json
Normal file
25
.bundlewatch.config.json
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "./framework/core/js/dist/*.js",
|
||||||
|
"maxSize": "150KB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./framework/core/js/dist/*/**/*.js",
|
||||||
|
"maxSize": "30KB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./extensions/*/js/dist/*.js",
|
||||||
|
"maxSize": "30KB"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "./extensions/*/js/dist/*/**/*.js",
|
||||||
|
"maxSize": "30KB"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"defaultCompression": "gzip",
|
||||||
|
"ci": {
|
||||||
|
"repoBranchBase": "2.x",
|
||||||
|
"trackBranches": ["2.x"]
|
||||||
|
}
|
||||||
|
}
|
88
.github/workflows/REUSABLE_backend.yml
vendored
88
.github/workflows/REUSABLE_backend.yml
vendored
@@ -21,11 +21,17 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
default: '.'
|
default: '.'
|
||||||
|
|
||||||
|
# Only relevant in mono-repos.
|
||||||
|
monorepo_tests:
|
||||||
|
description: "The list of directories to test in a monorepo. This should be a space-separated list of directories relative to the backend directory."
|
||||||
|
type: string
|
||||||
|
required: false
|
||||||
|
|
||||||
php_versions:
|
php_versions:
|
||||||
description: Versions of PHP to test with. Should be array of strings encoded as JSON array
|
description: Versions of PHP to test with. Should be array of strings encoded as JSON array
|
||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
default: '["7.3", "7.4", "8.0", "8.1", "8.2", "8.3", "8.4"]'
|
default: '["8.1", "8.2"]'
|
||||||
|
|
||||||
php_extensions:
|
php_extensions:
|
||||||
description: PHP extensions to install.
|
description: PHP extensions to install.
|
||||||
@@ -45,25 +51,14 @@ on:
|
|||||||
required: false
|
required: false
|
||||||
default: error_reporting=E_ALL
|
default: error_reporting=E_ALL
|
||||||
|
|
||||||
runner_type:
|
|
||||||
description: The type of runner to use for the jobs. This should be one of the types supported by the `runs-on` keyword.
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: 'ubuntu-latest'
|
|
||||||
|
|
||||||
secrets:
|
|
||||||
composer_auth:
|
|
||||||
description: The Composer auth tokens to use for private packages.
|
|
||||||
required: false
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
COMPOSER_ROOT_VERSION: dev-main
|
COMPOSER_ROOT_VERSION: dev-main
|
||||||
|
# `inputs.composer_directory` defaults to `inputs.backend_directory`
|
||||||
FLARUM_TEST_TMP_DIR_LOCAL: tests/integration/tmp
|
FLARUM_TEST_TMP_DIR_LOCAL: tests/integration/tmp
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
test:
|
||||||
runs-on: ${{ inputs.runner_type }}
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@@ -99,28 +94,10 @@ jobs:
|
|||||||
prefix: flarum_
|
prefix: flarum_
|
||||||
prefixStr: (prefix)
|
prefixStr: (prefix)
|
||||||
|
|
||||||
# @TODO: remove in 2.0
|
|
||||||
# Include testing PHP 8.2 with deprecation warnings disabled.
|
|
||||||
- php: 8.2
|
|
||||||
php_ini_values: error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED
|
|
||||||
- php: 8.3
|
|
||||||
php_ini_values: error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED
|
|
||||||
- php: 8.4
|
|
||||||
php_ini_values: error_reporting=E_ALL & ~E_DEPRECATED & ~E_USER_DEPRECATED
|
|
||||||
|
|
||||||
# To reduce number of actions, we exclude some PHP versions from running with some DB versions.
|
# To reduce number of actions, we exclude some PHP versions from running with some DB versions.
|
||||||
exclude:
|
exclude:
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[1] }}
|
- php: ${{ fromJSON(inputs.php_versions)[1] }}
|
||||||
service: 'mysql:8.0.30'
|
service: 'mysql:8.0.30'
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[2] }}
|
|
||||||
service: 'mysql:8.0.30'
|
|
||||||
- php: ${{ fromJSON(inputs.php_versions)[3] }}
|
|
||||||
service: 'mysql:8.0.30'
|
|
||||||
|
|
||||||
# @TODO: remove in 2.0
|
|
||||||
# Exclude testing PHP 8.2 with deprecation warnings enabled.
|
|
||||||
- php: 8.2
|
|
||||||
php_ini_values: error_reporting=E_ALL
|
|
||||||
|
|
||||||
services:
|
services:
|
||||||
mysql:
|
mysql:
|
||||||
@@ -146,41 +123,50 @@ jobs:
|
|||||||
tools: phpunit, composer:v2
|
tools: phpunit, composer:v2
|
||||||
ini-values: ${{ matrix.php_ini_values }}
|
ini-values: ${{ matrix.php_ini_values }}
|
||||||
|
|
||||||
# The authentication alter is necessary because newer mysql versions use the `caching_sha2_password` driver,
|
|
||||||
# which isn't supported prior to PHP7.4
|
|
||||||
# When we drop support for PHP7.3, we should remove this from the setup.
|
|
||||||
- name: Create MySQL Database
|
- name: Create MySQL Database
|
||||||
run: |
|
run: |
|
||||||
sudo systemctl start mysql
|
sudo systemctl start mysql
|
||||||
mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306
|
mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 13306
|
||||||
mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';" --port 13306
|
|
||||||
|
|
||||||
- name: Install Composer dependencies
|
- name: Install Composer dependencies
|
||||||
run: composer install
|
run: composer install
|
||||||
working-directory: ${{ inputs.backend_directory }}
|
working-directory: ${{ inputs.backend_directory }}
|
||||||
|
|
||||||
- name: Setup Composer tests
|
# If we have a `inputs.monorepo_tests`, we will run tests for each item of the provided array in a ::group::item
|
||||||
run: composer test:setup
|
# If we don't have a `inputs.monorepo_tests`, we will run tests for the current repository
|
||||||
|
# We also have to run the `composer test:setup` script first before running each test
|
||||||
|
- name: Run tests
|
||||||
|
run: |
|
||||||
|
if [ -z "${{ inputs.monorepo_tests }}" ]; then
|
||||||
|
composer test:setup
|
||||||
|
composer test
|
||||||
|
else
|
||||||
|
for test in ${{ inputs.monorepo_tests }}; do
|
||||||
|
echo "::group::Running tests for $test"
|
||||||
|
composer test:setup --working-dir=$test
|
||||||
|
composer test --working-dir=$test
|
||||||
|
echo "::endgroup::"
|
||||||
|
done
|
||||||
|
fi
|
||||||
working-directory: ${{ inputs.backend_directory }}
|
working-directory: ${{ inputs.backend_directory }}
|
||||||
env:
|
env:
|
||||||
DB_PORT: 13306
|
DB_PORT: 13306
|
||||||
DB_PASSWORD: root
|
DB_PASSWORD: root
|
||||||
DB_PREFIX: ${{ matrix.prefix }}
|
DB_PREFIX: ${{ matrix.prefix }}
|
||||||
|
|
||||||
- name: Run Composer tests
|
|
||||||
run: composer test
|
|
||||||
working-directory: ${{ inputs.backend_directory }}
|
|
||||||
env:
|
|
||||||
COMPOSER_PROCESS_TIMEOUT: 600
|
COMPOSER_PROCESS_TIMEOUT: 600
|
||||||
|
|
||||||
phpstan:
|
phpstan:
|
||||||
runs-on: ${{ inputs.runner_type }}
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
php: ${{ fromJSON(inputs.php_versions) }}
|
php: ${{ fromJSON(inputs.php_versions) }}
|
||||||
exclude:
|
|
||||||
- php: 8.4
|
services:
|
||||||
|
mysql:
|
||||||
|
image: mysql:8.0.30
|
||||||
|
ports:
|
||||||
|
- 33306:3306
|
||||||
|
|
||||||
name: 'PHPStan PHP ${{ matrix.php }}'
|
name: 'PHPStan PHP ${{ matrix.php }}'
|
||||||
|
|
||||||
@@ -204,5 +190,15 @@ jobs:
|
|||||||
run: composer install
|
run: composer install
|
||||||
working-directory: ${{ inputs.backend_directory }}
|
working-directory: ${{ inputs.backend_directory }}
|
||||||
|
|
||||||
|
- name: Create MySQL Database
|
||||||
|
run: |
|
||||||
|
sudo systemctl start mysql
|
||||||
|
mysql -uroot -proot -e 'CREATE DATABASE flarum_test;' --port 33306
|
||||||
|
|
||||||
- name: Run PHPStan
|
- name: Run PHPStan
|
||||||
run: composer analyse:phpstan
|
run: composer analyse:phpstan
|
||||||
|
env:
|
||||||
|
DB_PORT: 33306
|
||||||
|
DB_PASSWORD: root
|
||||||
|
COMPOSER_PROCESS_TIMEOUT: 600
|
||||||
|
FLARUM_TEST_TMP_DIR_LOCAL: ./tmp
|
||||||
|
22
.github/workflows/REUSABLE_frontend.yml
vendored
22
.github/workflows/REUSABLE_frontend.yml
vendored
@@ -74,7 +74,7 @@ on:
|
|||||||
description: The node version to use for the workflow.
|
description: The node version to use for the workflow.
|
||||||
type: number
|
type: number
|
||||||
required: false
|
required: false
|
||||||
default: 20
|
default: 16
|
||||||
|
|
||||||
js_package_manager:
|
js_package_manager:
|
||||||
description: "Enable TypeScript?"
|
description: "Enable TypeScript?"
|
||||||
@@ -86,41 +86,30 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
|
|
||||||
runner_type:
|
|
||||||
description: The type of runner to use for the jobs. This should be one of the types supported by the `runs-on` keyword.
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
default: 'ubuntu-latest'
|
|
||||||
|
|
||||||
secrets:
|
secrets:
|
||||||
bundlewatch_github_token:
|
bundlewatch_github_token:
|
||||||
description: The GitHub token to use for Bundlewatch.
|
description: The GitHub token to use for Bundlewatch.
|
||||||
required: false
|
required: false
|
||||||
composer_auth:
|
|
||||||
description: The Composer auth tokens to use for private packages.
|
|
||||||
required: false
|
|
||||||
|
|
||||||
env:
|
env:
|
||||||
COMPOSER_ROOT_VERSION: dev-main
|
COMPOSER_ROOT_VERSION: dev-main
|
||||||
ci_script: ${{ inputs.js_package_manager == 'yarn' && 'yarn install --immutable' || 'npm ci' }}
|
ci_script: ${{ inputs.js_package_manager == 'yarn' && 'yarn install --immutable' || 'npm ci' }}
|
||||||
cache_dependency_path: ${{ inputs.cache_dependency_path || format(inputs.js_package_manager == 'yarn' && '{0}/yarn.lock' || '{0}/package-lock.json', inputs.frontend_directory) }}
|
cache_dependency_path: ${{ inputs.cache_dependency_path || format(inputs.js_package_manager == 'yarn' && '{0}/yarn.lock' || '{0}/package-lock.json', inputs.frontend_directory) }}
|
||||||
COMPOSER_AUTH: ${{ secrets.composer_auth }}
|
|
||||||
DISABLE_V8_COMPILE_CACHE: 1
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
name: Checks & Build
|
name: Checks & Build
|
||||||
runs-on: ${{ inputs.runner_type }}
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
if: >-
|
if: >-
|
||||||
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
((github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) || github.event_name != 'pull_request')
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Set up Node
|
- name: Set up Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v3
|
||||||
with:
|
with:
|
||||||
node-version: ${{ inputs.node_version }}
|
node-version: ${{ inputs.node_version }}
|
||||||
cache: ${{ inputs.js_package_manager }}
|
cache: ${{ inputs.js_package_manager }}
|
||||||
@@ -143,7 +132,7 @@ jobs:
|
|||||||
working-directory: ${{ inputs.frontend_directory }}
|
working-directory: ${{ inputs.frontend_directory }}
|
||||||
|
|
||||||
- name: JS Checks & Production Build
|
- name: JS Checks & Production Build
|
||||||
uses: flarum/action-build@v4
|
uses: flarum/action-build@v3
|
||||||
with:
|
with:
|
||||||
github_token: ${{ secrets.GITHUB_TOKEN }}
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
build_script: ${{ inputs.build_script }}
|
build_script: ${{ inputs.build_script }}
|
||||||
@@ -163,3 +152,4 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.bundlewatch_github_token }}
|
BUNDLEWATCH_GITHUB_TOKEN: ${{ secrets.bundlewatch_github_token }}
|
||||||
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
|
CI_COMMIT_SHA: ${{ github.event.pull_request.head.sha }}
|
||||||
|
CI_BRANCH_BASE: ${{ github.event.pull_request.base.ref }}
|
||||||
|
11
.github/workflows/backend.yml
vendored
Normal file
11
.github/workflows/backend.yml
vendored
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
name: Backend Tests
|
||||||
|
|
||||||
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
run:
|
||||||
|
uses: ./.github/workflows/REUSABLE_backend.yml
|
||||||
|
with:
|
||||||
|
enable_backend_testing: true
|
||||||
|
backend_directory: .
|
||||||
|
monorepo_tests: "framework/core extensions/akismet extensions/approval extensions/flags extensions/likes extensions/mentions extensions/nicknames extensions/statistics extensions/sticky extensions/subscriptions extensions/suspend extensions/tags"
|
11
.github/workflows/flarum-akismet-backend.yml
vendored
11
.github/workflows/flarum-akismet-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Akismet PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/akismet
|
|
11
.github/workflows/flarum-approval-backend.yml
vendored
11
.github/workflows/flarum-approval-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Approval PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/approval
|
|
11
.github/workflows/flarum-core-backend.yml
vendored
11
.github/workflows/flarum-core-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Core PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./framework/core
|
|
11
.github/workflows/flarum-embed-backend.yml
vendored
11
.github/workflows/flarum-embed-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Embed PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/embed
|
|
11
.github/workflows/flarum-emoji-backend.yml
vendored
11
.github/workflows/flarum-emoji-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Emoji PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/emoji
|
|
@@ -1,11 +0,0 @@
|
|||||||
name: Extension Manager PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/package-manager
|
|
11
.github/workflows/flarum-flags-backend.yml
vendored
11
.github/workflows/flarum-flags-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Flags PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/flags
|
|
11
.github/workflows/flarum-likes-backend.yml
vendored
11
.github/workflows/flarum-likes-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Likes PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/likes
|
|
11
.github/workflows/flarum-lock-backend.yml
vendored
11
.github/workflows/flarum-lock-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Lock PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/lock
|
|
11
.github/workflows/flarum-markdown-backend.yml
vendored
11
.github/workflows/flarum-markdown-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Markdown PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/markdown
|
|
11
.github/workflows/flarum-mentions-backend.yml
vendored
11
.github/workflows/flarum-mentions-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Mentions PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/mentions
|
|
11
.github/workflows/flarum-nicknames-backend.yml
vendored
11
.github/workflows/flarum-nicknames-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Nicknames PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/nicknames
|
|
11
.github/workflows/flarum-pusher-backend.yml
vendored
11
.github/workflows/flarum-pusher-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Pusher PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: false
|
|
||||||
|
|
||||||
backend_directory: ./extensions/pusher
|
|
11
.github/workflows/flarum-statistics-backend.yml
vendored
11
.github/workflows/flarum-statistics-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Statistics PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/statistics
|
|
11
.github/workflows/flarum-sticky-backend.yml
vendored
11
.github/workflows/flarum-sticky-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Sticky PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/sticky
|
|
@@ -1,11 +0,0 @@
|
|||||||
name: Subscriptions PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/subscriptions
|
|
11
.github/workflows/flarum-suspend-backend.yml
vendored
11
.github/workflows/flarum-suspend-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Suspend PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/suspend
|
|
11
.github/workflows/flarum-tags-backend.yml
vendored
11
.github/workflows/flarum-tags-backend.yml
vendored
@@ -1,11 +0,0 @@
|
|||||||
name: Tags PHP
|
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run:
|
|
||||||
uses: ./.github/workflows/REUSABLE_backend.yml
|
|
||||||
with:
|
|
||||||
enable_backend_testing: true
|
|
||||||
|
|
||||||
backend_directory: ./extensions/tags
|
|
7
.github/workflows/frontend.yml
vendored
7
.github/workflows/frontend.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Framework JS
|
name: Frontend Workflow
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
@@ -10,10 +10,9 @@ jobs:
|
|||||||
backend_directory: ./
|
backend_directory: ./
|
||||||
js_package_manager: yarn
|
js_package_manager: yarn
|
||||||
cache_dependency_path: ./yarn.lock
|
cache_dependency_path: ./yarn.lock
|
||||||
main_git_branch: 1.x
|
main_git_branch: 2.x
|
||||||
enable_tests: true
|
enable_tests: true
|
||||||
# @TODO: fix bundlewatch
|
enable_bundlewatch: true
|
||||||
enable_bundlewatch: false
|
|
||||||
|
|
||||||
secrets:
|
secrets:
|
||||||
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
bundlewatch_github_token: ${{ secrets.BUNDLEWATCH_GITHUB_TOKEN }}
|
||||||
|
3
.github/workflows/phpstan.yml
vendored
3
.github/workflows/phpstan.yml
vendored
@@ -1,4 +1,4 @@
|
|||||||
name: Framework PHP
|
name: Static Code Analysis
|
||||||
|
|
||||||
on: [workflow_dispatch, push, pull_request]
|
on: [workflow_dispatch, push, pull_request]
|
||||||
|
|
||||||
@@ -8,5 +8,4 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
enable_backend_testing: false
|
enable_backend_testing: false
|
||||||
enable_phpstan: true
|
enable_phpstan: true
|
||||||
|
|
||||||
backend_directory: .
|
backend_directory: .
|
||||||
|
80
CHANGELOG.md
80
CHANGELOG.md
@@ -1,85 +1,5 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## [v1.8.10](https://github.com/flarum/framework/compare/v1.8.9...v1.8.10)
|
|
||||||
### Fixed
|
|
||||||
* Session Hijacking via Authoritative Subdomain Cookie Overwrite (https://github.com/flarum/framework/security/advisories/GHSA-hg9j-64wp-m9px)
|
|
||||||
* change starting position of `aria-posinset` (https://github.com/flarum/framework/pull/4192)
|
|
||||||
* sanitize page param in `Tag` (https://github.com/flarum/framework/pull/4170)
|
|
||||||
### Changed
|
|
||||||
* make search debounce time extensible (https://github.com/flarum/framework/pull/4171)
|
|
||||||
* skip incompatible extension updates (https://github.com/flarum/framework/pull/4176)
|
|
||||||
* increase email field length in `email_tokens` (https://github.com/flarum/framework/pull/4125)
|
|
||||||
* update JS deps (https://github.com/flarum/framework/pull/4204)
|
|
||||||
|
|
||||||
## [v1.8.9](https://github.com/flarum/framework/compare/v1.8.8...v1.8.9)
|
|
||||||
### Fixed
|
|
||||||
* change condition when unread label is shown in Scrubber (https://github.com/flarum/framework/pull/4116)
|
|
||||||
* resolve a11y warnings in Admin Frontend (https://github.com/flarum/framework/pull/4114)
|
|
||||||
* return empty object if selected mail driver is unavailable (https://github.com/flarum/framework/pull/4113)
|
|
||||||
### Changed
|
|
||||||
* change private to protected, allowing extensibility (https://github.com/flarum/framework/pull/4119)
|
|
||||||
* change length of email field (https://github.com/flarum/framework/pull/4117)
|
|
||||||
### Added
|
|
||||||
* Implement Support for Translatable Validation Attribute Errors (https://github.com/flarum/framework/pull/4070)
|
|
||||||
* PHP 8.4 support (https://github.com/flarum/framework/pull/4105)
|
|
||||||
* conditional extend whenExtensionDisabled (https://github.com/flarum/framework/pull/4107)
|
|
||||||
|
|
||||||
## [v1.8.8](https://github.com/flarum/framework/compare/v1.8.7...v1.8.8)
|
|
||||||
### Fixed
|
|
||||||
* previously suspended admin users cannot remove their avatar after suspension (https://github.com/flarum/framework/pull/4071)
|
|
||||||
* new search term not being passed (https://github.com/flarum/framework/pull/4083)
|
|
||||||
* postfooter did not apply the empty subclass (https://github.com/flarum/framework/pull/4085)
|
|
||||||
|
|
||||||
## [v1.8.7](https://github.com/flarum/framework/compare/v1.8.6...v1.8.7)
|
|
||||||
### Fixed
|
|
||||||
* BasicsPage not viewable if only one language pack enabled, and/or `flarum/nicknames` not enabled (https://github.com/flarum/framework/pull/4062)
|
|
||||||
|
|
||||||
## [v1.8.6](https://github.com/flarum/framework/compare/v1.8.5...v1.8.6)
|
|
||||||
### Fixed
|
|
||||||
* reset admin page save button in catch handler (https://github.com/flarum/framework/pull/3963)
|
|
||||||
* suspended users can remove avatar (https://github.com/flarum/framework/pull/3998)
|
|
||||||
* return null if content left empty in formatter (https://github.com/flarum/framework/pull/4059)
|
|
||||||
### Changed
|
|
||||||
* allow DiscussionsSearchSource to be extended (https://github.com/flarum/framework/pull/4025)
|
|
||||||
* allow modifying the discussion title on PostsUserPage (https://github.com/flarum/framework/pull/4031)
|
|
||||||
* make it easier to modify AppearancePage, BasicsPage, MailPage (https://github.com/flarum/framework/pull/4037)
|
|
||||||
* point fontawesome links at v5 free (https://github.com/flarum/framework/pull/4038)
|
|
||||||
* make WelcomeHero extensible (https://github.com/flarum/framework/pull/4039)
|
|
||||||
* make PostMeta extensible (https://github.com/flarum/framework/pull/4040)
|
|
||||||
* extensible TagHero (https://github.com/flarum/framework/pull/4041)
|
|
||||||
* allow extending PostPreview content (https://github.com/flarum/framework/pull/4043)
|
|
||||||
* allow classes that extends AbstractJob to be placed on a specified queue (https://github.com/flarum/framework/pull/4026)
|
|
||||||
* use common component for ip address display (https://github.com/flarum/framework/pull/4042)
|
|
||||||
* make it easier to add content after the first post (https://github.com/flarum/framework/pull/4050)
|
|
||||||
* improve extensibility of IndexPage (https://github.com/flarum/framework/pull/4045)
|
|
||||||
* improve extensibility of DiscussionPage (https://github.com/flarum/framework/pull/4046)
|
|
||||||
* backport & improve extensibility of DiscussionListItem (https://github.com/flarum/framework/pull/4048)
|
|
||||||
* improve & use extensibility of CommentPost & Post (https://github.com/flarum/framework/pull/4047)
|
|
||||||
* allow labels of PostStreamScrubber to be customized (https://github.com/flarum/framework/pull/4049)
|
|
||||||
* allow to customize time formats through translations (https://github.com/flarum/framework/pull/4053)
|
|
||||||
### Added
|
|
||||||
* Export all missing modules in compat (https://github.com/flarum/framework/pull/4044)
|
|
||||||
* Add (some) missing shims (https://github.com/flarum/framework/pull/4027)
|
|
||||||
* provide an 'actions' dropdown for extensions to add their additional buttons to the admin UserListPage (https://github.com/flarum/framework/pull/4054)
|
|
||||||
|
|
||||||
## [v1.8.5](https://github.com/flarum/framework/compare/v1.8.4...v1.8.5)
|
|
||||||
### Fixed
|
|
||||||
* Logout controller allows open redirects [#3948]
|
|
||||||
|
|
||||||
## [v1.8.4](https://github.com/flarum/framework/compare/v1.8.3...v1.8.4)
|
|
||||||
### Fixed
|
|
||||||
* `s9e/textformatter` 2.15 has breaking changes [#3946]
|
|
||||||
|
|
||||||
## [v1.8.3](https://github.com/flarum/framework/compare/v1.8.2...v1.8.3)
|
|
||||||
### Fixed
|
|
||||||
* Console extender does not accept ::class [#3900]
|
|
||||||
* Conditional extender instantiation [#3898]
|
|
||||||
|
|
||||||
## [v1.8.2](https://github.com/flarum/framework/compare/v1.8.1...v1.8.2)
|
|
||||||
### Fixed
|
|
||||||
* suspended users can abuse avatar upload [#3890]
|
|
||||||
* missing compat exports [#3888]
|
|
||||||
|
|
||||||
## [v1.8.1](https://github.com/flarum/framework/compare/v1.8.0...v1.8.1)
|
## [v1.8.1](https://github.com/flarum/framework/compare/v1.8.0...v1.8.1)
|
||||||
### Fixed
|
### Fixed
|
||||||
* recover temporary solution for html entities in browser title (e72541e35de4f71f9d870bbd9bb46ddf586bdf1d)
|
* recover temporary solution for html entities in browser title (e72541e35de4f71f9d870bbd9bb46ddf586bdf1d)
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
<p align="center">
|
<p align="center">
|
||||||
<a href="https://flarum.org/"><img src="https://flarum.org/images/flarum.svg"></a>
|
<a href="https://flarum.org/"><img src="https://flarum.org/assets/img/logo.png"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
@@ -7,6 +7,7 @@
|
|||||||
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/packagist/dt/flarum/core" alt="Total Downloads"></a>
|
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/packagist/dt/flarum/core" alt="Total Downloads"></a>
|
||||||
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/github/v/release/flarum/core?sort=semver" alt="Latest Version"></a>
|
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/github/v/release/flarum/core?sort=semver" alt="Latest Version"></a>
|
||||||
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/packagist/l/flarum/core" alt="License"></a>
|
<a href="https://packagist.org/packages/flarum/core"><img src="https://img.shields.io/packagist/l/flarum/core" alt="License"></a>
|
||||||
|
<a href="https://huntr.dev/bounties/disclose/?target=https://github.com/flarum/core"><img src="https://cdn.huntr.dev/huntr_security_badge_mono.svg" alt="huntr"></a>
|
||||||
<a href="https://github.styleci.io/repos/28257573"><img src="https://github.styleci.io/repos/28257573/shield?style=flat" alt="StyleCI"></a>
|
<a href="https://github.styleci.io/repos/28257573"><img src="https://github.styleci.io/repos/28257573/shield?style=flat" alt="StyleCI"></a>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@@ -37,4 +38,3 @@ If you discover a security vulnerability within Flarum, please send an e-mail to
|
|||||||
## License
|
## License
|
||||||
|
|
||||||
Flarum is open-source software licensed under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE).
|
Flarum is open-source software licensed under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE).
|
||||||
|
|
||||||
|
132
composer.json
132
composer.json
@@ -46,7 +46,7 @@
|
|||||||
"Flarum\\Lock\\": "extensions/lock/src",
|
"Flarum\\Lock\\": "extensions/lock/src",
|
||||||
"Flarum\\Mentions\\": "extensions/mentions/src",
|
"Flarum\\Mentions\\": "extensions/mentions/src",
|
||||||
"Flarum\\Nicknames\\": "extensions/nicknames/src",
|
"Flarum\\Nicknames\\": "extensions/nicknames/src",
|
||||||
"Flarum\\ExtensionManager\\": "extensions/package-manager/src",
|
"Flarum\\PackageManager\\": "extensions/package-manager/src",
|
||||||
"Flarum\\Pusher\\": "extensions/pusher/src",
|
"Flarum\\Pusher\\": "extensions/pusher/src",
|
||||||
"Flarum\\Statistics\\": "extensions/statistics/src",
|
"Flarum\\Statistics\\": "extensions/statistics/src",
|
||||||
"Flarum\\Sticky\\": "extensions/sticky/src",
|
"Flarum\\Sticky\\": "extensions/sticky/src",
|
||||||
@@ -60,6 +60,26 @@
|
|||||||
"framework/core/src/helpers.php"
|
"framework/core/src/helpers.php"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
"autoload-dev": {
|
||||||
|
"psr-4": {
|
||||||
|
"Flarum\\Tests\\": "tests",
|
||||||
|
"Flarum\\Akismet\\Tests\\": "extensions/akismet/tests",
|
||||||
|
"Flarum\\Approval\\Tests\\": "extensions/approval/tests",
|
||||||
|
"Flarum\\Flags\\Tests\\": "extensions/flags/tests",
|
||||||
|
"Flarum\\Likes\\Tests\\": "extensions/likes/tests",
|
||||||
|
"Flarum\\Lock\\Tests\\": "extensions/lock/tests",
|
||||||
|
"Flarum\\Mentions\\Tests\\": "extensions/mentions/tests",
|
||||||
|
"Flarum\\Nicknames\\Tests\\": "extensions/nicknames/tests",
|
||||||
|
"Flarum\\PackageManager\\Tests\\": "extensions/package-manager/tests",
|
||||||
|
"Flarum\\Pusher\\Tests\\": "extensions/pusher/tests",
|
||||||
|
"Flarum\\Statistics\\Tests\\": "extensions/statistics/tests",
|
||||||
|
"Flarum\\Sticky\\Tests\\": "extensions/sticky/tests",
|
||||||
|
"Flarum\\Subscriptions\\Tests\\": "extensions/subscriptions/tests",
|
||||||
|
"Flarum\\Suspend\\Tests\\": "extensions/suspend/tests",
|
||||||
|
"Flarum\\Tags\\Tests\\": "extensions/tags/tests",
|
||||||
|
"Flarum\\Testing\\Tests\\": "php-packages/testing/tests"
|
||||||
|
}
|
||||||
|
},
|
||||||
"replace": {
|
"replace": {
|
||||||
"flarum/core": "self.version",
|
"flarum/core": "self.version",
|
||||||
"flarum/akismet": "self.version",
|
"flarum/akismet": "self.version",
|
||||||
@@ -74,7 +94,7 @@
|
|||||||
"flarum/markdown": "self.version",
|
"flarum/markdown": "self.version",
|
||||||
"flarum/mentions": "self.version",
|
"flarum/mentions": "self.version",
|
||||||
"flarum/nicknames": "self.version",
|
"flarum/nicknames": "self.version",
|
||||||
"flarum/extension-manager": "self.version",
|
"flarum/package-manager": "self.version",
|
||||||
"flarum/pusher": "self.version",
|
"flarum/pusher": "self.version",
|
||||||
"flarum/statistics": "self.version",
|
"flarum/statistics": "self.version",
|
||||||
"flarum/sticky": "self.version",
|
"flarum/sticky": "self.version",
|
||||||
@@ -85,66 +105,72 @@
|
|||||||
"flarum/testing": "self.version"
|
"flarum/testing": "self.version"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"php": ">=7.3",
|
"php": "^8.1",
|
||||||
"ext-json": "*",
|
"ext-json": "*",
|
||||||
"components/font-awesome": "^5.14.0",
|
"components/font-awesome": "^5.15.0",
|
||||||
"composer/composer": "^2.0",
|
"composer/composer": "^2.0",
|
||||||
"dflydev/fig-cookies": "^3.0.0",
|
"doctrine/dbal": "^3.6.2",
|
||||||
"doctrine/dbal": "^2.7",
|
"dragonmantank/cron-expression": "^3.3",
|
||||||
"dragonmantank/cron-expression": "^3.1.0",
|
"franzl/whoops-middleware": "2.0",
|
||||||
"franzl/whoops-middleware": "^2.0.0",
|
"guzzlehttp/guzzle": "*",
|
||||||
"guzzlehttp/guzzle": "^6.0|^7.4",
|
"illuminate/bus": "^10.0",
|
||||||
"illuminate/bus": "^8.0",
|
"illuminate/cache": "^10.0",
|
||||||
"illuminate/cache": "^8.0",
|
"illuminate/config": "^10.0",
|
||||||
"illuminate/config": "^8.0",
|
"illuminate/console": "^10.0",
|
||||||
"illuminate/console": "^8.0",
|
"illuminate/container": "^10.0",
|
||||||
"illuminate/container": "^8.0",
|
"illuminate/contracts": "^10.0",
|
||||||
"illuminate/contracts": "^8.0",
|
"illuminate/database": "^10.0",
|
||||||
"illuminate/database": "^8.0",
|
"illuminate/events": "^10.0",
|
||||||
"illuminate/events": "^8.0",
|
"illuminate/filesystem": "^10.0",
|
||||||
"illuminate/filesystem": "^8.0",
|
"illuminate/hashing": "^10.0",
|
||||||
"illuminate/hashing": "^8.0",
|
"illuminate/http": "^10.0",
|
||||||
"illuminate/mail": "^8.0",
|
"illuminate/mail": "^10.0",
|
||||||
"illuminate/queue": "^8.0",
|
"illuminate/queue": "^10.0",
|
||||||
"illuminate/session": "^8.0",
|
"illuminate/routing": "^10.0",
|
||||||
"illuminate/support": "^8.0",
|
"illuminate/session": "^10.0",
|
||||||
"illuminate/validation": "^8.0",
|
"illuminate/support": "^10.0",
|
||||||
"illuminate/view": "^8.0",
|
"illuminate/validation": "^10.0",
|
||||||
"intervention/image": "2.5.* || ^2.6.1",
|
"illuminate/view": "^10.0",
|
||||||
|
"intervention/image": "^2.7.2",
|
||||||
"jenssegers/agent": "^2.6",
|
"jenssegers/agent": "^2.6",
|
||||||
"laminas/laminas-diactoros": "^2.4.1 || ^3.0.0",
|
"laminas/laminas-diactoros": "^3.0",
|
||||||
"laminas/laminas-httphandlerrunner": "^1.2.0 || ^2.3.0 || ^3.0.0",
|
"laminas/laminas-httphandlerrunner": "^2.6",
|
||||||
"laminas/laminas-stratigility": "^3.2.2 || ^4.0.0",
|
"laminas/laminas-stratigility": "^3.10",
|
||||||
"league/flysystem": "^1.0.11",
|
"league/flysystem": "^3.15",
|
||||||
|
"league/flysystem-memory": "^3.15",
|
||||||
"matthiasmullie/minify": "^1.3",
|
"matthiasmullie/minify": "^1.3",
|
||||||
"middlewares/base-path": "^2.0.1",
|
"middlewares/base-path": "^v2.1",
|
||||||
"middlewares/base-path-router": "^2.0.1",
|
"middlewares/base-path-router": "^2.0.1",
|
||||||
"middlewares/request-handler": "^2.0.1",
|
"middlewares/request-handler": "^2.0.2",
|
||||||
"monolog/monolog": "^1.16.0",
|
"monolog/monolog": "^3.3",
|
||||||
"nesbot/carbon": "^2.0",
|
"nesbot/carbon": "^2.66",
|
||||||
"nikic/fast-route": "^0.6",
|
"psr/http-message": "^1.1",
|
||||||
"psr/http-message": "^1.0",
|
"psr/http-server-handler": "^1.0.2",
|
||||||
"psr/http-server-handler": "^1.0",
|
"psr/http-server-middleware": "^1.0.2",
|
||||||
"psr/http-server-middleware": "^1.0",
|
"pusher/pusher-php-server": "^7.2",
|
||||||
"pusher/pusher-php-server": "^2.2",
|
"s9e/text-formatter": "^2.13",
|
||||||
"s9e/text-formatter": ">=2.3.6 <2.15",
|
"staudenmeir/eloquent-eager-limit": "^1.8.2",
|
||||||
"staudenmeir/eloquent-eager-limit": "^1.0",
|
|
||||||
"sycho/json-api": "^0.5.0",
|
"sycho/json-api": "^0.5.0",
|
||||||
"sycho/sourcemap": "^2.0.0",
|
"sycho/sourcemap": "^2.0.0",
|
||||||
"symfony/config": "^5.2.2",
|
"symfony/config": "^6.3",
|
||||||
"symfony/console": "^5.2.2",
|
"symfony/console": "^6.3",
|
||||||
"symfony/event-dispatcher": "^5.2.2",
|
"symfony/event-dispatcher": "^6.3",
|
||||||
"symfony/mime": "^5.2.0",
|
"symfony/http-client": "^6.3",
|
||||||
"symfony/polyfill-intl-messageformatter": "^1.22.0",
|
"symfony/mailgun-mailer": "^6.3",
|
||||||
"symfony/translation": "^5.1.5",
|
"symfony/mime": "^6.3",
|
||||||
"symfony/yaml": "^5.2.2",
|
"symfony/polyfill-intl-messageformatter": "^1.27",
|
||||||
"wikimedia/less.php": "^3.0"
|
"symfony/postmark-mailer": "^6.3",
|
||||||
|
"symfony/psr-http-message-bridge": "^2.3",
|
||||||
|
"symfony/translation": "^6.3",
|
||||||
|
"symfony/yaml": "^6.3",
|
||||||
|
"wikimedia/less.php": "^4.1"
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"mockery/mockery": "^1.4",
|
"mockery/mockery": "^1.5",
|
||||||
"phpunit/phpunit": "^9.0",
|
"phpunit/phpunit": "^9.0",
|
||||||
"phpstan/phpstan": ">=1.8.11 < 1.9.0",
|
"phpstan/phpstan": "^1.10.0",
|
||||||
"nunomaduro/larastan": "^1.0"
|
"nunomaduro/larastan": "^2.6",
|
||||||
|
"symfony/var-dumper": "^6.3"
|
||||||
},
|
},
|
||||||
"config": {
|
"config": {
|
||||||
"sort-packages": true
|
"sort-packages": true
|
||||||
@@ -174,7 +200,7 @@
|
|||||||
"extensions/tags"
|
"extensions/tags"
|
||||||
],
|
],
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"phpstan": {
|
"phpstan": {
|
||||||
"includes": [
|
"includes": [
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8",
|
"flarum/core": "^2.0",
|
||||||
"flarum/approval": "^1.7"
|
"flarum/approval": "^2.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "Akismet",
|
"title": "Akismet",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"flarum/testing": "^1.0.0"
|
"flarum/testing": "^2.0"
|
||||||
},
|
},
|
||||||
"repositories": [
|
"repositories": [
|
||||||
{
|
{
|
||||||
|
2
extensions/akismet/js/dist/admin.js
generated
vendored
2
extensions/akismet/js/dist/admin.js
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
(()=>{var a={n:t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return a.d(e,{a:e}),e},d:(t,e)=>{for(var s in e)a.o(e,s)&&!a.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},o:(a,t)=>Object.prototype.hasOwnProperty.call(a,t)};(()=>{"use strict";const t=flarum.core.compat["admin/app"];var e=a.n(t);e().initializers.add("flarum-akismet",(function(){e().extensionData.for("flarum-akismet").registerSetting({setting:"flarum-akismet.api_key",type:"text",label:e().translator.trans("flarum-akismet.admin.akismet_settings.api_key_label")}).registerSetting({setting:"flarum-akismet.delete_blatant_spam",type:"boolean",label:e().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_label"),help:e().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_help")}).registerPermission({icon:"fas fa-vote-yea",label:e().translator.trans("flarum-akismet.admin.permissions.bypass_akismet"),permission:"bypassAkismet"},"start")}))})(),module.exports={}})();
|
(()=>{var e={n:t=>{var a=t&&t.__esModule?()=>t.default:()=>t;return e.d(a,{a}),a},d:(t,a)=>{for(var r in a)e.o(a,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:a[r]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const a=flarum.reg.get("core","admin/app");var r=e.n(a);r().initializers.add("flarum-akismet",(()=>{r().extensionData.for("flarum-akismet").registerSetting({setting:"flarum-akismet.api_key",type:"text",label:r().translator.trans("flarum-akismet.admin.akismet_settings.api_key_label")}).registerSetting({setting:"flarum-akismet.delete_blatant_spam",type:"boolean",label:r().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_label"),help:r().translator.trans("flarum-akismet.admin.akismet_settings.delete_blatant_spam_help")}).registerPermission({icon:"fas fa-vote-yea",label:r().translator.trans("flarum-akismet.admin.permissions.bypass_akismet"),permission:"bypassAkismet"},"start")}))})(),module.exports=t})();
|
||||||
//# sourceMappingURL=admin.js.map
|
//# sourceMappingURL=admin.js.map
|
2
extensions/akismet/js/dist/admin.js.map
generated
vendored
2
extensions/akismet/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,mBCAlF,MAAM,EAA+BI,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAiBC,IAAI,kBAAkB,WACrCD,IAAAA,cAAiB,IACV,kBACJE,gBAAgB,CACfC,QAAS,yBACTC,KAAM,OACNC,MAAOL,IAAAA,WAAeM,MAAM,yDAE7BJ,gBAAgB,CAEfC,QAAS,qCACTC,KAAM,UACNC,MAAOL,IAAAA,WAAeM,MAAM,mEAC5BC,KAAMP,IAAAA,WAAeM,MAAM,oEAE5BE,mBACC,CACEC,KAAM,kBACNJ,MAAOL,IAAAA,WAAeM,MAAM,mDAC5BI,WAAY,iBAEd,QAEN,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-akismet', () => {\n app.extensionData\n .for('flarum-akismet')\n .registerSetting({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label'),\n })\n .registerSetting({\n //https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help'),\n })\n .registerPermission(\n {\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet',\n },\n 'start'\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","flarum","core","compat","app","add","registerSetting","setting","type","label","trans","help","registerPermission","icon","permission"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,kBAAkB,KACrC,sBAAsB,kBAAkBW,gBAAgB,CACtDC,QAAS,yBACTC,KAAM,OACNC,MAAO,qBAAqB,yDAC3BH,gBAAgB,CAEjBC,QAAS,qCACTC,KAAM,UACNC,MAAO,qBAAqB,mEAC5BC,KAAM,qBAAqB,oEAC1BC,mBAAmB,CACpBC,KAAM,kBACNH,MAAO,qBAAqB,mDAC5BI,WAAY,iBACX,QAAQ,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/akismet/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-akismet', () => {\n app.extensionData.for('flarum-akismet').registerSetting({\n setting: 'flarum-akismet.api_key',\n type: 'text',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.api_key_label')\n }).registerSetting({\n //https://blog.akismet.com/2014/04/23/theres-a-ninja-in-your-akismet/\n setting: 'flarum-akismet.delete_blatant_spam',\n type: 'boolean',\n label: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_label'),\n help: app.translator.trans('flarum-akismet.admin.akismet_settings.delete_blatant_spam_help')\n }).registerPermission({\n icon: 'fas fa-vote-yea',\n label: app.translator.trans('flarum-akismet.admin.permissions.bypass_akismet'),\n permission: 'bypassAkismet'\n }, 'start');\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","setting","type","label","help","registerPermission","icon","permission"],"sourceRoot":""}
|
2
extensions/akismet/js/dist/forum.js
generated
vendored
2
extensions/akismet/js/dist/forum.js
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
(()=>{var t={n:o=>{var r=o&&o.__esModule?()=>o.default:()=>o;return t.d(r,{a:r}),r},d:(o,r)=>{for(var e in r)t.o(r,e)&&!t.o(o,e)&&Object.defineProperty(o,e,{enumerable:!0,get:r[e]})},o:(t,o)=>Object.prototype.hasOwnProperty.call(t,o)};(()=>{"use strict";const o=flarum.core.compat["common/extend"],r=flarum.core.compat["forum/app"];var e=t.n(r);const a=flarum.core.compat["forum/utils/PostControls"];var n=t.n(a);const s=flarum.core.compat["forum/components/Post"];var m=t.n(s);e().initializers.add("flarum-akismet",(function(){(0,o.extend)(n(),"destructiveControls",(function(t,o){if(t.has("approve")){var r=o.flags();if(r&&r.some((function(t){return"akismet"===(null==t?void 0:t.type())}))){var a=t.get("approve");a&&"object"==typeof a&&"children"in a&&(a.children=e().translator.trans("flarum-akismet.forum.post.not_spam_button"))}}})),(0,o.override)(m().prototype,"flagReason",(function(t,o){return"akismet"===o.type()?e().translator.trans("flarum-akismet.forum.post.akismet_flagged_text"):t(o)}))}))})(),module.exports={}})();
|
(()=>{var e={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return e.d(r,{a:r}),r},d:(t,r)=>{for(var o in r)e.o(r,o)&&!e.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:r[o]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},t={};(()=>{"use strict";e.r(t);const r=flarum.reg.get("core","common/extend"),o=flarum.reg.get("core","forum/app");var a=e.n(o);const n=flarum.reg.get("core","forum/utils/PostControls");var s=e.n(n);const l=flarum.reg.get("core","forum/components/Post");var u=e.n(l);a().initializers.add("flarum-akismet",(()=>{(0,r.extend)(s(),"destructiveControls",(function(e,t){if(e.has("approve")){const r=t.flags();if(r&&r.some((e=>"akismet"===(null==e?void 0:e.type())))){const t=e.get("approve");t&&"object"==typeof t&&"children"in t&&(t.children=a().translator.trans("flarum-akismet.forum.post.not_spam_button"))}}})),(0,r.override)(u().prototype,"flagReason",(function(e,t){return"akismet"===t.type()?a().translator.trans("flarum-akismet.forum.post.akismet_flagged_text"):e(t)}))}))})(),module.exports=t})();
|
||||||
//# sourceMappingURL=forum.js.map
|
//# sourceMappingURL=forum.js.map
|
2
extensions/akismet/js/dist/forum.js.map
generated
vendored
2
extensions/akismet/js/dist/forum.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,mBCAlF,MAAM,EAA+BI,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,4B,aCAxD,MAAM,EAA+BF,OAAOC,KAAKC,OAAO,yB,aCSxDC,IAAAA,aAAiBC,IAAI,kBAAkB,YACrCC,EAAAA,EAAAA,QAAOC,IAAc,uBAAuB,SAAUC,EAAmCC,GACvF,GAAID,EAAME,IAAI,WAAY,CACxB,IAAMC,EAAQF,EAAKE,QAEnB,GAAIA,GAASA,EAAMC,MAAK,SAACC,GAAI,MAAsB,aAAb,MAAJA,OAAI,EAAJA,EAAMC,OAAoB,IAAG,CAC7D,IAAMC,EAAcP,EAAMb,IAAI,WAC1BoB,GAAsC,iBAAhBA,GAA4B,aAAcA,IAClEA,EAAYC,SAAWZ,IAAAA,WAAea,MAAM,6CAEhD,CACF,CACF,KAEAC,EAAAA,EAAAA,UAASC,IAAAA,UAAyB,cAAc,SAAUC,EAAUP,GAClE,MAAoB,YAAhBA,EAAKC,OACAV,IAAAA,WAAea,MAAM,kDAGvBG,EAASP,EAClB,GACF,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/app']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/utils/PostControls']\"","webpack://@flarum/akismet/external root \"flarum.core.compat['forum/components/Post']\"","webpack://@flarum/akismet/./src/forum/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/app'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/utils/PostControls'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['forum/components/Post'];","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport type Post from 'flarum/common/models/Post';\nimport type ItemList from 'flarum/common/utils/ItemList';\n\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport PostComponent from 'flarum/forum/components/Post';\nimport type Mithril from 'mithril';\n\napp.initializers.add('flarum-akismet', () => {\n extend(PostControls, 'destructiveControls', function (items: ItemList<Mithril.Children>, post: Post) {\n if (items.has('approve')) {\n const flags = post.flags();\n\n if (flags && flags.some((flag) => flag?.type() === 'akismet')) {\n const approveItem = items.get('approve');\n if (approveItem && typeof approveItem === 'object' && 'children' in approveItem) {\n approveItem.children = app.translator.trans('flarum-akismet.forum.post.not_spam_button');\n }\n }\n }\n });\n\n override(PostComponent.prototype, 'flagReason', function (original, flag) {\n if (flag.type() === 'akismet') {\n return app.translator.trans('flarum-akismet.forum.post.akismet_flagged_text');\n }\n\n return original(flag);\n });\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","flarum","core","compat","app","add","extend","PostControls","items","post","has","flags","some","flag","type","approveItem","children","trans","override","PostComponent","original"],"sourceRoot":""}
|
{"version":3,"file":"forum.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,a,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,4B,aCA5D,MAAM,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,yB,aCI5D,qBAAqB,kBAAkB,MACrC,IAAAW,QAAO,IAAc,uBAAuB,SAAUC,EAAOC,GAC3D,GAAID,EAAME,IAAI,WAAY,CACxB,MAAMC,EAAQF,EAAKE,QACnB,GAAIA,GAASA,EAAMC,MAAKC,GAAkD,aAAjC,MAARA,OAAe,EAASA,EAAKC,UAAwB,CACpF,MAAMC,EAAcP,EAAMZ,IAAI,WAC1BmB,GAAsC,iBAAhBA,GAA4B,aAAcA,IAClEA,EAAYC,SAAW,qBAAqB,6CAEhD,CACF,CACF,KACA,IAAAC,UAAS,cAAyB,cAAc,SAAUC,EAAUL,GAClE,MAAoB,YAAhBA,EAAKC,OACA,qBAAqB,kDAEvBI,EAASL,EAClB,GAAE,G","sources":["webpack://@flarum/akismet/webpack/bootstrap","webpack://@flarum/akismet/webpack/runtime/compat get default export","webpack://@flarum/akismet/webpack/runtime/define property getters","webpack://@flarum/akismet/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/akismet/webpack/runtime/make namespace object","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'forum/app')\"","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'forum/utils/PostControls')\"","webpack://@flarum/akismet/external root \"flarum.reg.get('core', 'forum/components/Post')\"","webpack://@flarum/akismet/./src/forum/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/app');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/utils/PostControls');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'forum/components/Post');","import { extend, override } from 'flarum/common/extend';\nimport app from 'flarum/forum/app';\nimport PostControls from 'flarum/forum/utils/PostControls';\nimport PostComponent from 'flarum/forum/components/Post';\napp.initializers.add('flarum-akismet', () => {\n extend(PostControls, 'destructiveControls', function (items, post) {\n if (items.has('approve')) {\n const flags = post.flags();\n if (flags && flags.some(flag => (flag == null ? void 0 : flag.type()) === 'akismet')) {\n const approveItem = items.get('approve');\n if (approveItem && typeof approveItem === 'object' && 'children' in approveItem) {\n approveItem.children = app.translator.trans('flarum-akismet.forum.post.not_spam_button');\n }\n }\n }\n });\n override(PostComponent.prototype, 'flagReason', function (original, flag) {\n if (flag.type() === 'akismet') {\n return app.translator.trans('flarum-akismet.forum.post.akismet_flagged_text');\n }\n return original(flag);\n });\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","extend","items","post","has","flags","some","flag","type","approveItem","children","override","original"],"sourceRoot":""}
|
@@ -15,8 +15,7 @@
|
|||||||
"declarationDir": "./dist-typings",
|
"declarationDir": "./dist-typings",
|
||||||
"paths": {
|
"paths": {
|
||||||
"flarum/*": ["../../../framework/core/js/dist-typings/*"],
|
"flarum/*": ["../../../framework/core/js/dist-typings/*"],
|
||||||
"@flarum/core/*": ["../../../framework/core/js/dist-typings/*"],
|
"ext:flarum/flags/*": ["../../flags/js/dist-typings/*"]
|
||||||
"flarum/flags/*": ["../../flags/js/dist-typings/*"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -15,22 +15,19 @@ use Psr\Http\Message\ResponseInterface;
|
|||||||
|
|
||||||
class Akismet
|
class Akismet
|
||||||
{
|
{
|
||||||
private $apiKey;
|
private string $apiUrl;
|
||||||
private $apiUrl;
|
private array $params = [];
|
||||||
private $flarumVersion;
|
|
||||||
private $extensionVersion;
|
|
||||||
|
|
||||||
private $params = [];
|
public function __construct(
|
||||||
|
private readonly string $apiKey,
|
||||||
public function __construct(string $apiKey, string $homeUrl, string $flarumVersion, string $extensionVersion, bool $inDebugMode = false)
|
string $homeUrl,
|
||||||
{
|
private readonly string $flarumVersion,
|
||||||
$this->apiKey = $apiKey;
|
private readonly string $extensionVersion,
|
||||||
|
bool $inDebugMode = false
|
||||||
|
) {
|
||||||
$this->apiUrl = "https://$apiKey.rest.akismet.com/1.1";
|
$this->apiUrl = "https://$apiKey.rest.akismet.com/1.1";
|
||||||
$this->params['blog'] = $homeUrl;
|
$this->params['blog'] = $homeUrl;
|
||||||
|
|
||||||
$this->flarumVersion = $flarumVersion;
|
|
||||||
$this->extensionVersion = $extensionVersion;
|
|
||||||
|
|
||||||
if ($inDebugMode) {
|
if ($inDebugMode) {
|
||||||
$this->params['is_test'] = true;
|
$this->params['is_test'] = true;
|
||||||
}
|
}
|
||||||
@@ -50,7 +47,7 @@ class Akismet
|
|||||||
$client = new Client();
|
$client = new Client();
|
||||||
|
|
||||||
return $client->request('POST', "$this->apiUrl/$type", [
|
return $client->request('POST', "$this->apiUrl/$type", [
|
||||||
'headers' => [
|
'headers' => [
|
||||||
'User-Agent' => "Flarum/$this->flarumVersion | Akismet/$this->extensionVersion",
|
'User-Agent' => "Flarum/$this->flarumVersion | Akismet/$this->extensionVersion",
|
||||||
],
|
],
|
||||||
'form_params' => $this->params,
|
'form_params' => $this->params,
|
||||||
@@ -73,7 +70,7 @@ class Akismet
|
|||||||
/**
|
/**
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function submitSpam()
|
public function submitSpam(): void
|
||||||
{
|
{
|
||||||
$this->sendRequest('submit-spam');
|
$this->sendRequest('submit-spam');
|
||||||
}
|
}
|
||||||
@@ -81,7 +78,7 @@ class Akismet
|
|||||||
/**
|
/**
|
||||||
* @throws GuzzleException
|
* @throws GuzzleException
|
||||||
*/
|
*/
|
||||||
public function submitHam()
|
public function submitHam(): void
|
||||||
{
|
{
|
||||||
$this->sendRequest('submit-ham');
|
$this->sendRequest('submit-ham');
|
||||||
}
|
}
|
||||||
@@ -90,7 +87,7 @@ class Akismet
|
|||||||
* Allows you to set additional parameter
|
* Allows you to set additional parameter
|
||||||
* This lets you use Akismet features not supported directly in this util.
|
* This lets you use Akismet features not supported directly in this util.
|
||||||
*/
|
*/
|
||||||
public function withParam(string $key, $value): Akismet
|
public function withParam(string $key, mixed $value): Akismet
|
||||||
{
|
{
|
||||||
$new = clone $this;
|
$new = clone $this;
|
||||||
$new->params[$key] = $value;
|
$new->params[$key] = $value;
|
||||||
|
@@ -14,17 +14,12 @@ use Flarum\Approval\Event\PostWasApproved;
|
|||||||
|
|
||||||
class SubmitHam
|
class SubmitHam
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var Akismet
|
protected Akismet $akismet
|
||||||
*/
|
) {
|
||||||
protected $akismet;
|
|
||||||
|
|
||||||
public function __construct(Akismet $akismet)
|
|
||||||
{
|
|
||||||
$this->akismet = $akismet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle(PostWasApproved $event)
|
public function handle(PostWasApproved $event): void
|
||||||
{
|
{
|
||||||
if (! $this->akismet->isConfigured()) {
|
if (! $this->akismet->isConfigured()) {
|
||||||
return;
|
return;
|
||||||
|
@@ -14,17 +14,12 @@ use Flarum\Post\Event\Hidden;
|
|||||||
|
|
||||||
class SubmitSpam
|
class SubmitSpam
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var Akismet
|
protected Akismet $akismet
|
||||||
*/
|
) {
|
||||||
protected $akismet;
|
|
||||||
|
|
||||||
public function __construct(Akismet $akismet)
|
|
||||||
{
|
|
||||||
$this->akismet = $akismet;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle(Hidden $event)
|
public function handle(Hidden $event): void
|
||||||
{
|
{
|
||||||
if (! $this->akismet->isConfigured()) {
|
if (! $this->akismet->isConfigured()) {
|
||||||
return;
|
return;
|
||||||
|
@@ -18,22 +18,13 @@ use Flarum\Settings\SettingsRepositoryInterface;
|
|||||||
|
|
||||||
class ValidatePost
|
class ValidatePost
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var Akismet
|
protected Akismet $akismet,
|
||||||
*/
|
protected SettingsRepositoryInterface $settings
|
||||||
protected $akismet;
|
) {
|
||||||
/**
|
|
||||||
* @var SettingsRepositoryInterface
|
|
||||||
*/
|
|
||||||
private $settings;
|
|
||||||
|
|
||||||
public function __construct(Akismet $akismet, SettingsRepositoryInterface $settings)
|
|
||||||
{
|
|
||||||
$this->akismet = $akismet;
|
|
||||||
$this->settings = $settings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function handle(Saving $event)
|
public function handle(Saving $event): void
|
||||||
{
|
{
|
||||||
if (! $this->akismet->isConfigured()) {
|
if (! $this->akismet->isConfigured()) {
|
||||||
return;
|
return;
|
||||||
|
@@ -20,7 +20,7 @@ use Illuminate\Container\Container;
|
|||||||
|
|
||||||
class AkismetProvider extends AbstractServiceProvider
|
class AkismetProvider extends AbstractServiceProvider
|
||||||
{
|
{
|
||||||
public function register()
|
public function register(): void
|
||||||
{
|
{
|
||||||
$this->container->bind(Akismet::class, function (Container $container) {
|
$this->container->bind(Akismet::class, function (Container $container) {
|
||||||
/** @var SettingsRepositoryInterface $settings */
|
/** @var SettingsRepositoryInterface $settings */
|
||||||
@@ -36,7 +36,7 @@ class AkismetProvider extends AbstractServiceProvider
|
|||||||
|
|
||||||
return new Akismet(
|
return new Akismet(
|
||||||
$settings->get('flarum-akismet.api_key'),
|
$settings->get('flarum-akismet.api_key'),
|
||||||
$url->to('forum')->base(),
|
$url->base('forum'),
|
||||||
$app::VERSION,
|
$app::VERSION,
|
||||||
$extensions->getExtension('flarum-akismet')->getVersion() ?? 'unknown',
|
$extensions->getExtension('flarum-akismet')->getVersion() ?? 'unknown',
|
||||||
$config->inDebugMode()
|
$config->inDebugMode()
|
||||||
|
@@ -7,10 +7,6 @@
|
|||||||
* LICENSE file that was distributed with this source code.
|
* LICENSE file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Flarum\Testing\integration\Setup\SetupScript;
|
$setup = require __DIR__.'/../../../../php-packages/testing/bootstrap/monorepo.php';
|
||||||
|
|
||||||
require __DIR__.'/../../vendor/autoload.php';
|
|
||||||
|
|
||||||
$setup = new SetupScript();
|
|
||||||
|
|
||||||
$setup->run();
|
$setup->run();
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
convertWarningsToExceptions="true"
|
convertWarningsToExceptions="true"
|
||||||
processIsolation="true"
|
processIsolation="true"
|
||||||
stopOnFailure="false"
|
stopOnFailure="false"
|
||||||
|
bootstrap="../../../php-packages/testing/bootstrap/monorepo.php"
|
||||||
>
|
>
|
||||||
<coverage processUncoveredFiles="true">
|
<coverage processUncoveredFiles="true">
|
||||||
<include>
|
<include>
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
convertWarningsToExceptions="true"
|
convertWarningsToExceptions="true"
|
||||||
processIsolation="false"
|
processIsolation="false"
|
||||||
stopOnFailure="false"
|
stopOnFailure="false"
|
||||||
|
bootstrap="../../../php-packages/testing/bootstrap/monorepo.php"
|
||||||
>
|
>
|
||||||
<coverage processUncoveredFiles="true">
|
<coverage processUncoveredFiles="true">
|
||||||
<include>
|
<include>
|
||||||
|
@@ -19,8 +19,8 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8",
|
"flarum/core": "^2.0",
|
||||||
"flarum/flags": "^1.7"
|
"flarum/flags": "^2.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -29,7 +29,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "Approval",
|
"title": "Approval",
|
||||||
@@ -87,6 +87,6 @@
|
|||||||
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
"test:setup": "Sets up a database for use with integration tests. Execute this only once."
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"flarum/testing": "^1.0.0"
|
"flarum/testing": "^2.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -37,7 +37,7 @@ return [
|
|||||||
->cast('is_approved', 'bool'),
|
->cast('is_approved', 'bool'),
|
||||||
|
|
||||||
(new Extend\ApiSerializer(BasicDiscussionSerializer::class))
|
(new Extend\ApiSerializer(BasicDiscussionSerializer::class))
|
||||||
->attribute('isApproved', function ($serializer, Discussion $discussion) {
|
->attribute('isApproved', function (BasicDiscussionSerializer $serializer, Discussion $discussion): bool {
|
||||||
return $discussion->is_approved;
|
return $discussion->is_approved;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
@@ -65,8 +65,8 @@ return [
|
|||||||
->scope(Access\ScopePrivateDiscussionVisibility::class, 'viewPrivate'),
|
->scope(Access\ScopePrivateDiscussionVisibility::class, 'viewPrivate'),
|
||||||
|
|
||||||
(new Extend\ModelPrivate(Discussion::class))
|
(new Extend\ModelPrivate(Discussion::class))
|
||||||
->checker([Listener\UnapproveNewContent::class, 'markUnapprovedContentAsPrivate']),
|
->checker(Listener\UnapproveNewContent::markUnapprovedContentAsPrivate(...)),
|
||||||
|
|
||||||
(new Extend\ModelPrivate(CommentPost::class))
|
(new Extend\ModelPrivate(CommentPost::class))
|
||||||
->checker([Listener\UnapproveNewContent::class, 'markUnapprovedContentAsPrivate']),
|
->checker(Listener\UnapproveNewContent::markUnapprovedContentAsPrivate(...)),
|
||||||
];
|
];
|
||||||
|
2
extensions/approval/js/dist/admin.js
generated
vendored
2
extensions/approval/js/dist/admin.js
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
(()=>{var s={n:r=>{var a=r&&r.__esModule?()=>r.default:()=>r;return s.d(a,{a}),a},d:(r,a)=>{for(var o in a)s.o(a,o)&&!s.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:a[o]})},o:(s,r)=>Object.prototype.hasOwnProperty.call(s,r)};(()=>{"use strict";const r=flarum.core.compat["common/extend"],a=flarum.core.compat["admin/app"];var o=s.n(a);o().initializers.add("flarum-approval",(function(){(0,r.extend)(o(),"getRequiredPermissions",(function(s,r){"discussion.startWithoutApproval"===r&&s.push("startDiscussion"),"discussion.replyWithoutApproval"===r&&s.push("discussion.reply")})),o().extensionData.for("flarum-approval").registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.start_discussions_without_approval_label"),permission:"discussion.startWithoutApproval"},"start",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.reply_without_approval_label"),permission:"discussion.replyWithoutApproval"},"reply",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.approve_posts_label"),permission:"discussion.approvePosts"},"moderate",65)}))})(),module.exports={}})();
|
(()=>{var r={n:e=>{var s=e&&e.__esModule?()=>e.default:()=>e;return r.d(s,{a:s}),s},d:(e,s)=>{for(var a in s)r.o(s,a)&&!r.o(e,a)&&Object.defineProperty(e,a,{enumerable:!0,get:s[a]})},o:(r,e)=>Object.prototype.hasOwnProperty.call(r,e),r:r=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})}},e={};(()=>{"use strict";r.r(e);const s=flarum.reg.get("core","common/extend"),a=flarum.reg.get("core","admin/app");var o=r.n(a);o().initializers.add("flarum-approval",(()=>{(0,s.extend)(o(),"getRequiredPermissions",(function(r,e){"discussion.startWithoutApproval"===e&&r.push("startDiscussion"),"discussion.replyWithoutApproval"===e&&r.push("discussion.reply")})),o().extensionData.for("flarum-approval").registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.start_discussions_without_approval_label"),permission:"discussion.startWithoutApproval"},"start",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.reply_without_approval_label"),permission:"discussion.replyWithoutApproval"},"reply",95).registerPermission({icon:"fas fa-check",label:o().translator.trans("flarum-approval.admin.permissions.approve_posts_label"),permission:"discussion.approvePosts"},"moderate",65)}))})(),module.exports=e})();
|
||||||
//# sourceMappingURL=admin.js.map
|
//# sourceMappingURL=admin.js.map
|
2
extensions/approval/js/dist/admin.js.map
generated
vendored
2
extensions/approval/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,IACzBH,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,mBCAlF,MAAM,EAA+BI,OAAOC,KAAKC,OAAO,iBCAlD,EAA+BF,OAAOC,KAAKC,OAAO,a,aCGxDC,IAAAA,aAAiBC,IAAI,mBAAmB,YACtCC,EAAAA,EAAAA,QAAOF,IAAK,0BAA0B,SAAUG,EAAUC,GACrC,oCAAfA,GACFD,EAASE,KAAK,mBAEG,oCAAfD,GACFD,EAASE,KAAK,mBAElB,IAEAL,IAAAA,cAAiB,IACV,mBACJM,mBACC,CACEC,KAAM,eACNC,MAAOR,IAAAA,WAAeS,MAAM,8EAC5BL,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOR,IAAAA,WAAeS,MAAM,kEAC5BL,WAAY,mCAEd,QACA,IAEDE,mBACC,CACEC,KAAM,eACNC,MAAOR,IAAAA,WAAeS,MAAM,yDAC5BL,WAAY,2BAEd,WACA,GAEN,G","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/external root \"flarum.core.compat['common/extend']\"","webpack://@flarum/approval/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/approval/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['common/extend'];","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\n\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n\n app.extensionData\n .for('flarum-approval')\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval',\n },\n 'start',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval',\n },\n 'reply',\n 95\n )\n .registerPermission(\n {\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts',\n },\n 'moderate',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","flarum","core","compat","app","add","extend","required","permission","push","registerPermission","icon","label","trans"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,iBCAtD,EAA+BS,OAAOC,IAAIV,IAAI,OAAQ,a,aCE5D,qBAAqB,mBAAmB,MACtC,IAAAW,QAAO,IAAK,0BAA0B,SAAUC,EAAUC,GACrC,oCAAfA,GACFD,EAASE,KAAK,mBAEG,oCAAfD,GACFD,EAASE,KAAK,mBAElB,IACA,sBAAsB,mBAAmBC,mBAAmB,CAC1DC,KAAM,eACNC,MAAO,qBAAqB,8EAC5BJ,WAAY,mCACX,QAAS,IAAIE,mBAAmB,CACjCC,KAAM,eACNC,MAAO,qBAAqB,kEAC5BJ,WAAY,mCACX,QAAS,IAAIE,mBAAmB,CACjCC,KAAM,eACNC,MAAO,qBAAqB,yDAC5BJ,WAAY,2BACX,WAAY,GAAG,G","sources":["webpack://@flarum/approval/webpack/bootstrap","webpack://@flarum/approval/webpack/runtime/compat get default export","webpack://@flarum/approval/webpack/runtime/define property getters","webpack://@flarum/approval/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/approval/webpack/runtime/make namespace object","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'common/extend')\"","webpack://@flarum/approval/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/approval/./src/admin/index.js"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'common/extend');","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\napp.initializers.add('flarum-approval', () => {\n extend(app, 'getRequiredPermissions', function (required, permission) {\n if (permission === 'discussion.startWithoutApproval') {\n required.push('startDiscussion');\n }\n if (permission === 'discussion.replyWithoutApproval') {\n required.push('discussion.reply');\n }\n });\n app.extensionData.for('flarum-approval').registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.start_discussions_without_approval_label'),\n permission: 'discussion.startWithoutApproval'\n }, 'start', 95).registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.reply_without_approval_label'),\n permission: 'discussion.replyWithoutApproval'\n }, 'reply', 95).registerPermission({\n icon: 'fas fa-check',\n label: app.translator.trans('flarum-approval.admin.permissions.approve_posts_label'),\n permission: 'discussion.approvePosts'\n }, 'moderate', 65);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","extend","required","permission","push","registerPermission","icon","label"],"sourceRoot":""}
|
2
extensions/approval/js/dist/forum.js
generated
vendored
2
extensions/approval/js/dist/forum.js
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
(()=>{var o={n:t=>{var r=t&&t.__esModule?()=>t.default:()=>t;return o.d(r,{a:r}),r},d:(t,r)=>{for(var a in r)o.o(r,a)&&!o.o(t,a)&&Object.defineProperty(t,a,{enumerable:!0,get:r[a]})},o:(o,t)=>Object.prototype.hasOwnProperty.call(o,t)};(()=>{"use strict";const t=flarum.core.compat["common/extend"],r=flarum.core.compat["forum/app"];var a=o.n(r);const e=flarum.core.compat["common/models/Discussion"];var p=o.n(e);const n=flarum.core.compat["common/models/Post"];var s=o.n(n);const i=flarum.core.compat["common/components/Badge"];var c=o.n(i);const u=flarum.core.compat["forum/components/DiscussionListItem"];var l=o.n(u);const d=flarum.core.compat["forum/components/Post"];var v=o.n(d);const f=flarum.core.compat["forum/components/CommentPost"];var A=o.n(f);const h=flarum.core.compat["common/components/Button"];var b=o.n(h);const y=flarum.core.compat["forum/utils/PostControls"];var g=o.n(y);a().initializers.add("flarum-approval",(function(){p().prototype.isApproved=p().attribute("isApproved"),(0,t.extend)(p().prototype,"badges",(function(o){this.isApproved()||o.has("hidden")||o.add("awaitingApproval",m(c(),{type:"awaitingApproval",icon:"fas fa-gavel",label:a().translator.trans("flarum-approval.forum.badge.awaiting_approval_tooltip")}))})),s().prototype.isApproved=s().attribute("isApproved"),s().prototype.canApprove=s().attribute("canApprove"),(0,t.extend)(l().prototype,"elementAttrs",(function(o){this.attrs.discussion.isApproved()||(o.className+=" DiscussionListItem--unapproved")})),(0,t.extend)(v().prototype,"elementAttrs",(function(o){this.attrs.post.isApproved()||(o.className+=" Post--unapproved")})),(0,t.extend)(A().prototype,"headerItems",(function(o){this.attrs.post.isApproved()||this.attrs.post.isHidden()||o.add("unapproved",a().translator.trans("flarum-approval.forum.post.awaiting_approval_text"))})),(0,t.override)(v().prototype,"flagReason",(function(o,t){return"approval"===t.type()?a().translator.trans("flarum-approval.forum.post.awaiting_approval_text"):o(t)})),(0,t.extend)(g(),"destructiveControls",(function(o,t){!t.isApproved()&&t.canApprove()&&o.add("approve",m(b(),{icon:"fas fa-check",onclick:g().approveAction.bind(t)},a().translator.trans("flarum-approval.forum.post_controls.approve_button")),10)})),g().approveAction=function(){this.save({isApproved:!0}),1===this.number()&&this.discussion().pushAttributes({isApproved:!0})}}),-10)})(),module.exports={}})();
|
(()=>{var o={n:t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return o.d(e,{a:e}),e},d:(t,e)=>{for(var r in e)o.o(e,r)&&!o.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},o:(o,t)=>Object.prototype.hasOwnProperty.call(o,t),r:o=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(o,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(o,"__esModule",{value:!0})}},t={};(()=>{"use strict";o.r(t);const e=flarum.reg.get("core","common/extend"),r=flarum.reg.get("core","forum/app");var a=o.n(r);const n=flarum.reg.get("core","common/models/Discussion");var p=o.n(n);const s=flarum.reg.get("core","common/models/Post");var i=o.n(s);const c=flarum.reg.get("core","common/components/Badge");var u=o.n(c);const l=flarum.reg.get("core","forum/components/DiscussionListItem");var d=o.n(l);const v=flarum.reg.get("core","forum/components/Post");var f=o.n(v);const g=flarum.reg.get("core","forum/components/CommentPost");var A=o.n(g);const y=flarum.reg.get("core","common/components/Button");var b=o.n(y);const h=flarum.reg.get("core","forum/utils/PostControls");var _=o.n(h);a().initializers.add("flarum-approval",(()=>{p().prototype.isApproved=p().attribute("isApproved"),(0,e.extend)(p().prototype,"badges",(function(o){this.isApproved()||o.has("hidden")||o.add("awaitingApproval",m(u(),{type:"awaitingApproval",icon:"fas fa-gavel",label:a().translator.trans("flarum-approval.forum.badge.awaiting_approval_tooltip")}))})),i().prototype.isApproved=i().attribute("isApproved"),i().prototype.canApprove=i().attribute("canApprove"),(0,e.extend)(d().prototype,"elementAttrs",(function(o){this.attrs.discussion.isApproved()||(o.className+=" DiscussionListItem--unapproved")})),(0,e.extend)(f().prototype,"elementAttrs",(function(o){this.attrs.post.isApproved()||(o.className+=" Post--unapproved")})),(0,e.extend)(A().prototype,"headerItems",(function(o){this.attrs.post.isApproved()||this.attrs.post.isHidden()||o.add("unapproved",a().translator.trans("flarum-approval.forum.post.awaiting_approval_text"))})),(0,e.override)(f().prototype,"flagReason",(function(o,t){return"approval"===t.type()?a().translator.trans("flarum-approval.forum.post.awaiting_approval_text"):o(t)})),(0,e.extend)(_(),"destructiveControls",(function(o,t){!t.isApproved()&&t.canApprove()&&o.add("approve",m(b(),{icon:"fas fa-check",onclick:_().approveAction.bind(t)},a().translator.trans("flarum-approval.forum.post_controls.approve_button")),10)})),_().approveAction=function(){this.save({isApproved:!0}),1===this.number()&&this.discussion().pushAttributes({isApproved:!0})}}),-10)})(),module.exports=t})();
|
||||||
//# sourceMappingURL=forum.js.map
|
//# sourceMappingURL=forum.js.map
|
2
extensions/approval/js/dist/forum.js.map
generated
vendored
2
extensions/approval/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
15
extensions/approval/js/src/@types/shims.d.ts
vendored
15
extensions/approval/js/src/@types/shims.d.ts
vendored
@@ -1,15 +0,0 @@
|
|||||||
import 'flarum/common/models/Discussion';
|
|
||||||
import 'flarum/common/models/Post';
|
|
||||||
|
|
||||||
declare module 'flarum/common/models/Discussion' {
|
|
||||||
export default interface Discussion {
|
|
||||||
isApproved(): boolean;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
declare module 'flarum/common/models/Post' {
|
|
||||||
export default interface Post {
|
|
||||||
isApproved(): boolean;
|
|
||||||
canApprove(): boolean;
|
|
||||||
}
|
|
||||||
}
|
|
@@ -14,11 +14,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
|
|
||||||
class ScopePrivateDiscussionVisibility
|
class ScopePrivateDiscussionVisibility
|
||||||
{
|
{
|
||||||
/**
|
public function __invoke(User $actor, Builder $query): void
|
||||||
* @param Builder $query
|
|
||||||
* @param User $actor
|
|
||||||
*/
|
|
||||||
public function __invoke(User $actor, Builder $query)
|
|
||||||
{
|
{
|
||||||
// All statements need to be wrapped in an orWhere, since we're adding a
|
// All statements need to be wrapped in an orWhere, since we're adding a
|
||||||
// subset of private discussions that should be visible, not restricting the visible
|
// subset of private discussions that should be visible, not restricting the visible
|
||||||
|
@@ -16,11 +16,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
|
|
||||||
class ScopePrivatePostVisibility
|
class ScopePrivatePostVisibility
|
||||||
{
|
{
|
||||||
/**
|
public function __invoke(User $actor, Builder $query): void
|
||||||
* @param Builder $query
|
|
||||||
* @param User $actor
|
|
||||||
*/
|
|
||||||
public function __invoke(User $actor, Builder $query)
|
|
||||||
{
|
{
|
||||||
// All statements need to be wrapped in an orWhere, since we're adding a
|
// All statements need to be wrapped in an orWhere, since we're adding a
|
||||||
// subset of private posts that should be visible, not restricting the visible
|
// subset of private posts that should be visible, not restricting the visible
|
||||||
|
@@ -15,10 +15,7 @@ use Flarum\User\User;
|
|||||||
|
|
||||||
class TagPolicy extends AbstractPolicy
|
class TagPolicy extends AbstractPolicy
|
||||||
{
|
{
|
||||||
/**
|
public function addToDiscussion(User $actor, Tag $tag): bool
|
||||||
* @return bool|null
|
|
||||||
*/
|
|
||||||
public function addToDiscussion(User $actor, Tag $tag)
|
|
||||||
{
|
{
|
||||||
return $actor->can('discussion.startWithoutApproval', $tag);
|
return $actor->can('discussion.startWithoutApproval', $tag);
|
||||||
}
|
}
|
||||||
|
@@ -14,25 +14,9 @@ use Flarum\User\User;
|
|||||||
|
|
||||||
class PostWasApproved
|
class PostWasApproved
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* The post that was approved.
|
public Post $post,
|
||||||
*
|
public User $actor
|
||||||
* @var Post
|
) {
|
||||||
*/
|
|
||||||
public $post;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var User
|
|
||||||
*/
|
|
||||||
public $actor;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Post $post
|
|
||||||
* @param User $actor
|
|
||||||
*/
|
|
||||||
public function __construct(Post $post, User $actor)
|
|
||||||
{
|
|
||||||
$this->post = $post;
|
|
||||||
$this->actor = $actor;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -11,55 +11,32 @@ namespace Flarum\Approval\Listener;
|
|||||||
|
|
||||||
use Flarum\Approval\Event\PostWasApproved;
|
use Flarum\Approval\Event\PostWasApproved;
|
||||||
use Flarum\Post\Event\Saving;
|
use Flarum\Post\Event\Saving;
|
||||||
use Flarum\User\Exception\PermissionDeniedException;
|
|
||||||
use Illuminate\Contracts\Events\Dispatcher;
|
use Illuminate\Contracts\Events\Dispatcher;
|
||||||
|
|
||||||
class ApproveContent
|
class ApproveContent
|
||||||
{
|
{
|
||||||
/**
|
public function subscribe(Dispatcher $events): void
|
||||||
* @param Dispatcher $events
|
|
||||||
*/
|
|
||||||
public function subscribe(Dispatcher $events)
|
|
||||||
{
|
{
|
||||||
$events->listen(Saving::class, [$this, 'approvePost']);
|
$events->listen(Saving::class, $this->approvePost(...));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function approvePost(Saving $event): void
|
||||||
* @throws PermissionDeniedException
|
|
||||||
*/
|
|
||||||
public function approvePost(Saving $event)
|
|
||||||
{
|
{
|
||||||
$attributes = $event->data['attributes'];
|
$attributes = $event->data['attributes'];
|
||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
|
|
||||||
// Nothing to do if it is already approved.
|
|
||||||
if ($post->is_approved) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We approve a post in one of two cases:
|
|
||||||
* - The post was unapproved and the allowed action is approving it. We trigger an event.
|
|
||||||
* - The post was unapproved and the allowed actor is hiding or un-hiding it.
|
|
||||||
* We approve it silently if the action is unhiding.
|
|
||||||
*/
|
|
||||||
$approvingSilently = false;
|
|
||||||
|
|
||||||
if (isset($attributes['isApproved'])) {
|
if (isset($attributes['isApproved'])) {
|
||||||
$event->actor->assertCan('approve', $post);
|
$event->actor->assertCan('approve', $post);
|
||||||
|
|
||||||
$isApproved = (bool) $attributes['isApproved'];
|
$isApproved = (bool) $attributes['isApproved'];
|
||||||
} elseif (isset($attributes['isHidden']) && $event->actor->can('approve', $post)) {
|
} elseif (! empty($attributes['isHidden']) && $event->actor->can('approve', $post)) {
|
||||||
$isApproved = true;
|
$isApproved = true;
|
||||||
$approvingSilently = $attributes['isHidden'];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! empty($isApproved)) {
|
if (! empty($isApproved)) {
|
||||||
$post->is_approved = true;
|
$post->is_approved = true;
|
||||||
|
|
||||||
if (! $approvingSilently) {
|
$post->raise(new PostWasApproved($post, $event->actor));
|
||||||
$post->raise(new PostWasApproved($post, $event->actor));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,18 +18,12 @@ use Illuminate\Contracts\Events\Dispatcher;
|
|||||||
|
|
||||||
class UnapproveNewContent
|
class UnapproveNewContent
|
||||||
{
|
{
|
||||||
/**
|
public function subscribe(Dispatcher $events): void
|
||||||
* @param Dispatcher $events
|
|
||||||
*/
|
|
||||||
public function subscribe(Dispatcher $events)
|
|
||||||
{
|
{
|
||||||
$events->listen(Saving::class, [$this, 'unapproveNewPosts']);
|
$events->listen(Saving::class, $this->unapproveNewPosts(...));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public function unapproveNewPosts(Saving $event): void
|
||||||
* @param Saving $event
|
|
||||||
*/
|
|
||||||
public function unapproveNewPosts(Saving $event)
|
|
||||||
{
|
{
|
||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
|
|
||||||
@@ -63,14 +57,12 @@ class UnapproveNewContent
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public static function markUnapprovedContentAsPrivate(Discussion|CommentPost $instance): ?bool
|
||||||
* @param Discussion|CommentPost $instance
|
|
||||||
* @return bool|null
|
|
||||||
*/
|
|
||||||
public static function markUnapprovedContentAsPrivate($instance)
|
|
||||||
{
|
{
|
||||||
if (! $instance->is_approved) {
|
if (! $instance->is_approved) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -13,7 +13,7 @@ use Flarum\Approval\Event\PostWasApproved;
|
|||||||
|
|
||||||
class UpdateDiscussionAfterPostApproval
|
class UpdateDiscussionAfterPostApproval
|
||||||
{
|
{
|
||||||
public function handle(PostWasApproved $event)
|
public function handle(PostWasApproved $event): void
|
||||||
{
|
{
|
||||||
$post = $event->post;
|
$post = $event->post;
|
||||||
$discussion = $post->discussion;
|
$discussion = $post->discussion;
|
||||||
|
@@ -38,7 +38,7 @@ class ListDiscussionsTest extends TestCase
|
|||||||
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
||||||
);
|
);
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
$body = json_decode($response->getContent(), true);
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
$this->assertEqualsCanonicalizing([1, 4, 5, 7], Arr::pluck($body['data'], 'id'));
|
$this->assertEqualsCanonicalizing([1, 4, 5, 7], Arr::pluck($body['data'], 'id'));
|
||||||
@@ -54,7 +54,7 @@ class ListDiscussionsTest extends TestCase
|
|||||||
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
$this->request('GET', '/api/discussions', compact('authenticatedAs'))
|
||||||
);
|
);
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
$body = json_decode($response->getContent(), true);
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
$this->assertEqualsCanonicalizing([1, 2, 3, 4, 5, 6, 7], Arr::pluck($body['data'], 'id'));
|
$this->assertEqualsCanonicalizing([1, 2, 3, 4, 5, 6, 7], Arr::pluck($body['data'], 'id'));
|
||||||
|
@@ -12,6 +12,7 @@ namespace Flarum\Approval\Tests\integration\api;
|
|||||||
use Flarum\Approval\Tests\integration\InteractsWithUnapprovedContent;
|
use Flarum\Approval\Tests\integration\InteractsWithUnapprovedContent;
|
||||||
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
|
use Flarum\Testing\integration\RetrievesAuthorizedUsers;
|
||||||
use Flarum\Testing\integration\TestCase;
|
use Flarum\Testing\integration\TestCase;
|
||||||
|
use Illuminate\Http\Request;
|
||||||
use Illuminate\Support\Arr;
|
use Illuminate\Support\Arr;
|
||||||
|
|
||||||
class ListPostsTest extends TestCase
|
class ListPostsTest extends TestCase
|
||||||
@@ -35,16 +36,17 @@ class ListPostsTest extends TestCase
|
|||||||
public function can_only_see_approved_if_not_allowed_to_approve(?int $authenticatedAs)
|
public function can_only_see_approved_if_not_allowed_to_approve(?int $authenticatedAs)
|
||||||
{
|
{
|
||||||
$response = $this->send(
|
$response = $this->send(
|
||||||
$this
|
tap(
|
||||||
->request('GET', '/api/posts', compact('authenticatedAs'))
|
$this->request('GET', '/api/posts', compact('authenticatedAs')),
|
||||||
->withQueryParams([
|
fn (Request $request) => $request->query->add([
|
||||||
'filter' => [
|
'filter' => [
|
||||||
'discussion' => 7
|
'discussion' => 7
|
||||||
]
|
]
|
||||||
])
|
])
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
$body = json_decode($response->getContent(), true);
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
$this->assertEqualsCanonicalizing([7, 8, 10], Arr::pluck($body['data'], 'id'));
|
$this->assertEqualsCanonicalizing([7, 8, 10], Arr::pluck($body['data'], 'id'));
|
||||||
@@ -57,16 +59,17 @@ class ListPostsTest extends TestCase
|
|||||||
public function can_see_unapproved_if_allowed_to_approve(int $authenticatedAs)
|
public function can_see_unapproved_if_allowed_to_approve(int $authenticatedAs)
|
||||||
{
|
{
|
||||||
$response = $this->send(
|
$response = $this->send(
|
||||||
$this
|
tap(
|
||||||
->request('GET', '/api/posts', compact('authenticatedAs'))
|
$this->request('GET', '/api/posts', compact('authenticatedAs')),
|
||||||
->withQueryParams([
|
fn (Request $request) => $request->query->add([
|
||||||
'filter' => [
|
'filter' => [
|
||||||
'discussion' => 7
|
'discussion' => 7
|
||||||
]
|
]
|
||||||
])
|
])
|
||||||
|
)
|
||||||
);
|
);
|
||||||
|
|
||||||
$body = json_decode($response->getBody()->getContents(), true);
|
$body = json_decode($response->getContent(), true);
|
||||||
|
|
||||||
$this->assertEquals(200, $response->getStatusCode());
|
$this->assertEquals(200, $response->getStatusCode());
|
||||||
$this->assertEqualsCanonicalizing([7, 8, 9, 10, 11], Arr::pluck($body['data'], 'id'));
|
$this->assertEqualsCanonicalizing([7, 8, 9, 10, 11], Arr::pluck($body['data'], 'id'));
|
||||||
|
@@ -7,10 +7,6 @@
|
|||||||
* LICENSE file that was distributed with this source code.
|
* LICENSE file that was distributed with this source code.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
use Flarum\Testing\integration\Setup\SetupScript;
|
$setup = require __DIR__.'/../../../../php-packages/testing/bootstrap/monorepo.php';
|
||||||
|
|
||||||
require __DIR__.'/../../vendor/autoload.php';
|
|
||||||
|
|
||||||
$setup = new SetupScript();
|
|
||||||
|
|
||||||
$setup->run();
|
$setup->run();
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
convertWarningsToExceptions="true"
|
convertWarningsToExceptions="true"
|
||||||
processIsolation="true"
|
processIsolation="true"
|
||||||
stopOnFailure="false"
|
stopOnFailure="false"
|
||||||
|
bootstrap="../../../php-packages/testing/bootstrap/monorepo.php"
|
||||||
>
|
>
|
||||||
<coverage processUncoveredFiles="true">
|
<coverage processUncoveredFiles="true">
|
||||||
<include>
|
<include>
|
||||||
|
@@ -10,6 +10,7 @@
|
|||||||
convertWarningsToExceptions="true"
|
convertWarningsToExceptions="true"
|
||||||
processIsolation="false"
|
processIsolation="false"
|
||||||
stopOnFailure="false"
|
stopOnFailure="false"
|
||||||
|
bootstrap="../../../php-packages/testing/bootstrap/monorepo.php"
|
||||||
>
|
>
|
||||||
<coverage processUncoveredFiles="true">
|
<coverage processUncoveredFiles="true">
|
||||||
<include>
|
<include>
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8"
|
"flarum/core": "^2.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "BBCode",
|
"title": "BBCode",
|
||||||
|
@@ -13,7 +13,7 @@ use s9e\TextFormatter\Configurator;
|
|||||||
|
|
||||||
class Configure
|
class Configure
|
||||||
{
|
{
|
||||||
public function __invoke(Configurator $config)
|
public function __invoke(Configurator $config): void
|
||||||
{
|
{
|
||||||
$this->addTagsFromRepositories($config);
|
$this->addTagsFromRepositories($config);
|
||||||
$this->adaptHighlightJs($config);
|
$this->adaptHighlightJs($config);
|
||||||
|
@@ -9,19 +9,14 @@
|
|||||||
|
|
||||||
namespace Flarum\BBCode;
|
namespace Flarum\BBCode;
|
||||||
|
|
||||||
|
use Flarum\Locale\TranslatorInterface;
|
||||||
use s9e\TextFormatter\Renderer;
|
use s9e\TextFormatter\Renderer;
|
||||||
use Symfony\Contracts\Translation\TranslatorInterface;
|
|
||||||
|
|
||||||
class Render
|
class Render
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var TranslatorInterface
|
protected TranslatorInterface $translator
|
||||||
*/
|
) {
|
||||||
protected $translator;
|
|
||||||
|
|
||||||
public function __construct(TranslatorInterface $translator)
|
|
||||||
{
|
|
||||||
$this->translator = $translator;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __invoke(Renderer $renderer, $context, string $xml): string
|
public function __invoke(Renderer $renderer, $context, string $xml): string
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8"
|
"flarum/core": "^2.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "Embed",
|
"title": "Embed",
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
|
|
||||||
use Flarum\Extend;
|
use Flarum\Extend;
|
||||||
use Flarum\Frontend\Document;
|
use Flarum\Frontend\Document;
|
||||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
use Illuminate\Http\Request;
|
||||||
|
|
||||||
return [
|
return [
|
||||||
(new Extend\Frontend('forum'))
|
(new Extend\Frontend('forum'))
|
||||||
|
2
extensions/embed/js/dist/forum.js
generated
vendored
2
extensions/embed/js/dist/forum.js
generated
vendored
File diff suppressed because one or more lines are too long
2
extensions/embed/js/dist/forum.js.map
generated
vendored
2
extensions/embed/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
@@ -4,8 +4,6 @@ import { override, extend } from 'flarum/common/extend';
|
|||||||
import app from 'flarum/forum/app';
|
import app from 'flarum/forum/app';
|
||||||
import Stream from 'flarum/common/utils/Stream';
|
import Stream from 'flarum/common/utils/Stream';
|
||||||
import ForumApplication from 'flarum/forum/ForumApplication';
|
import ForumApplication from 'flarum/forum/ForumApplication';
|
||||||
import Composer from 'flarum/forum/components/Composer';
|
|
||||||
import PostStream from 'flarum/forum/components/PostStream';
|
|
||||||
import ModalManager from 'flarum/common/components/ModalManager';
|
import ModalManager from 'flarum/common/components/ModalManager';
|
||||||
import PostMeta from 'flarum/forum/components/PostMeta';
|
import PostMeta from 'flarum/forum/components/PostMeta';
|
||||||
|
|
||||||
@@ -13,7 +11,7 @@ import DiscussionPage from 'flarum/forum/components/DiscussionPage';
|
|||||||
|
|
||||||
extend(ForumApplication.prototype, 'mount', function () {
|
extend(ForumApplication.prototype, 'mount', function () {
|
||||||
if (m.route.param('hideFirstPost')) {
|
if (m.route.param('hideFirstPost')) {
|
||||||
extend(PostStream.prototype, 'view', (vdom) => {
|
extend('flarum/forum/components/PostStream', 'view', (vdom) => {
|
||||||
if (vdom.children[0].attrs['data-number'] === 1) {
|
if (vdom.children[0].attrs['data-number'] === 1) {
|
||||||
vdom.children.splice(0, 1);
|
vdom.children.splice(0, 1);
|
||||||
}
|
}
|
||||||
@@ -42,7 +40,7 @@ const reposition = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
extend(ModalManager.prototype, 'show', reposition);
|
extend(ModalManager.prototype, 'show', reposition);
|
||||||
extend(Composer.prototype, 'show', reposition);
|
extend('flarum/forum/components/Composer', 'show', reposition);
|
||||||
|
|
||||||
window.iFrameResizer = {
|
window.iFrameResizer = {
|
||||||
readyCallback: function () {
|
readyCallback: function () {
|
||||||
@@ -50,7 +48,7 @@ window.iFrameResizer = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
extend(PostStream.prototype, 'goToNumber', function (promise, number) {
|
extend('flarum/forum/components/PostStream', 'goToNumber', function (promise, number) {
|
||||||
if (number === 'reply' && 'parentIFrame' in window && app.composer.isFullScreen()) {
|
if (number === 'reply' && 'parentIFrame' in window && app.composer.isFullScreen()) {
|
||||||
const itemTop = this.$('.PostStream-item:last').offset().top;
|
const itemTop = this.$('.PostStream-item:last').offset().top;
|
||||||
window.parentIFrame.scrollToOffset(0, itemTop);
|
window.parentIFrame.scrollToOffset(0, itemTop);
|
||||||
|
@@ -19,11 +19,11 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8"
|
"flarum/core": "^2.0"
|
||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "Emoji",
|
"title": "Emoji",
|
||||||
|
@@ -13,7 +13,8 @@ use s9e\TextFormatter\Configurator;
|
|||||||
return [
|
return [
|
||||||
(new Extend\Frontend('forum'))
|
(new Extend\Frontend('forum'))
|
||||||
->js(__DIR__.'/js/dist/forum.js')
|
->js(__DIR__.'/js/dist/forum.js')
|
||||||
->css(__DIR__.'/less/forum.less'),
|
->css(__DIR__.'/less/forum.less')
|
||||||
|
->jsDirectory(__DIR__.'/js/dist/forum'),
|
||||||
|
|
||||||
(new Extend\Formatter)
|
(new Extend\Formatter)
|
||||||
->configure(function (Configurator $config) {
|
->configure(function (Configurator $config) {
|
||||||
|
2
extensions/emoji/js/dist/forum.js
generated
vendored
2
extensions/emoji/js/dist/forum.js
generated
vendored
File diff suppressed because one or more lines are too long
2
extensions/emoji/js/dist/forum.js.map
generated
vendored
2
extensions/emoji/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
extensions/emoji/js/dist/forum/emojiMap.js
generated
vendored
Normal file
2
extensions/emoji/js/dist/forum/emojiMap.js
generated
vendored
Normal file
File diff suppressed because one or more lines are too long
1
extensions/emoji/js/dist/forum/emojiMap.js.map
generated
vendored
Normal file
1
extensions/emoji/js/dist/forum/emojiMap.js.map
generated
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
{"version":3,"file":"forum/emojiMap.js","mappings":"kJACA,E","sources":["webpack://@flarum/emoji/./src/forum/emojiMap.ts"],"sourcesContent":["import emojiMap from 'simple-emoji-map';\nexport default emojiMap;"],"names":[],"sourceRoot":""}
|
@@ -1,7 +1,4 @@
|
|||||||
import emojiMap from 'simple-emoji-map';
|
|
||||||
|
|
||||||
import { extend } from 'flarum/common/extend';
|
import { extend } from 'flarum/common/extend';
|
||||||
import TextEditor from 'flarum/common/components/TextEditor';
|
|
||||||
import TextEditorButton from 'flarum/common/components/TextEditorButton';
|
import TextEditorButton from 'flarum/common/components/TextEditorButton';
|
||||||
import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';
|
import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';
|
||||||
|
|
||||||
@@ -10,11 +7,15 @@ import getEmojiIconCode from './helpers/getEmojiIconCode';
|
|||||||
import cdn from './cdn';
|
import cdn from './cdn';
|
||||||
|
|
||||||
export default function addComposerAutocomplete() {
|
export default function addComposerAutocomplete() {
|
||||||
const emojiKeys = Object.keys(emojiMap);
|
|
||||||
const $container = $('<div class="ComposerBody-emojiDropdownContainer"></div>');
|
const $container = $('<div class="ComposerBody-emojiDropdownContainer"></div>');
|
||||||
const dropdown = new AutocompleteDropdown();
|
const dropdown = new AutocompleteDropdown();
|
||||||
|
let emojiMap = null;
|
||||||
|
|
||||||
extend(TextEditor.prototype, 'oncreate', function () {
|
extend('flarum/common/components/TextEditor', 'oninit', function () {
|
||||||
|
this._loaders.push(async () => await import('./emojiMap').then((m) => (emojiMap = m.default)));
|
||||||
|
});
|
||||||
|
|
||||||
|
extend('flarum/common/components/TextEditor', 'onbuild', function () {
|
||||||
const $editor = this.$('.TextEditor-editor').wrap('<div class="ComposerBody-emojiWrapper"></div>');
|
const $editor = this.$('.TextEditor-editor').wrap('<div class="ComposerBody-emojiWrapper"></div>');
|
||||||
|
|
||||||
this.navigator = new KeyboardNavigatable();
|
this.navigator = new KeyboardNavigatable();
|
||||||
@@ -29,7 +30,9 @@ export default function addComposerAutocomplete() {
|
|||||||
$editor.after($container);
|
$editor.after($container);
|
||||||
});
|
});
|
||||||
|
|
||||||
extend(TextEditor.prototype, 'buildEditorParams', function (params) {
|
extend('flarum/common/components/TextEditor', 'buildEditorParams', function (params) {
|
||||||
|
const emojiKeys = Object.keys(emojiMap);
|
||||||
|
|
||||||
let relEmojiStart;
|
let relEmojiStart;
|
||||||
let absEmojiStart;
|
let absEmojiStart;
|
||||||
let typed;
|
let typed;
|
||||||
@@ -166,7 +169,7 @@ export default function addComposerAutocomplete() {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
extend(TextEditor.prototype, 'toolbarItems', function (items) {
|
extend('flarum/common/components/TextEditor', 'toolbarItems', function (items) {
|
||||||
items.add(
|
items.add(
|
||||||
'emoji',
|
'emoji',
|
||||||
<TextEditorButton onclick={() => this.attrs.composer.editor.insertAtCursor(' :')} icon="far fa-smile">
|
<TextEditorButton onclick={() => this.attrs.composer.editor.insertAtCursor(' :')} icon="far fa-smile">
|
||||||
|
@@ -1,7 +0,0 @@
|
|||||||
import AutocompleteDropdown from './fragments/AutocompleteDropdown';
|
|
||||||
import getEmojiIconCode from './helpers/getEmojiIconCode';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
'emoji/fragments/AutocompleteDropdown': AutocompleteDropdown,
|
|
||||||
'emoji/helpers/getEmojiIconCode': getEmojiIconCode,
|
|
||||||
};
|
|
3
extensions/emoji/js/src/forum/emojiMap.ts
Normal file
3
extensions/emoji/js/src/forum/emojiMap.ts
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
import emojiMap from 'simple-emoji-map';
|
||||||
|
|
||||||
|
export default emojiMap;
|
@@ -11,9 +11,3 @@ app.initializers.add('flarum-emoji', () => {
|
|||||||
// render emoji as image in Posts content and title.
|
// render emoji as image in Posts content and title.
|
||||||
renderEmoji();
|
renderEmoji();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Expose compat API
|
|
||||||
import emojiCompat from './compat';
|
|
||||||
import { compat } from '@flarum/core/forum';
|
|
||||||
|
|
||||||
Object.assign(compat, emojiCompat);
|
|
||||||
|
@@ -19,7 +19,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"require": {
|
"require": {
|
||||||
"flarum/core": "^1.8.6"
|
"flarum/core": "^2.0"
|
||||||
},
|
},
|
||||||
"autoload": {
|
"autoload": {
|
||||||
"psr-4": {
|
"psr-4": {
|
||||||
@@ -28,7 +28,7 @@
|
|||||||
},
|
},
|
||||||
"extra": {
|
"extra": {
|
||||||
"branch-alias": {
|
"branch-alias": {
|
||||||
"dev-main": "1.x-dev"
|
"dev-main": "2.x-dev"
|
||||||
},
|
},
|
||||||
"flarum-extension": {
|
"flarum-extension": {
|
||||||
"title": "Flags",
|
"title": "Flags",
|
||||||
@@ -75,7 +75,7 @@
|
|||||||
"require-dev": {
|
"require-dev": {
|
||||||
"flarum/core": "*@dev",
|
"flarum/core": "*@dev",
|
||||||
"flarum/tags": "*@dev",
|
"flarum/tags": "*@dev",
|
||||||
"flarum/testing": "^1.0.0"
|
"flarum/testing": "^2.0"
|
||||||
},
|
},
|
||||||
"repositories": [
|
"repositories": [
|
||||||
{
|
{
|
||||||
|
4
extensions/flags/js/dist-typings/@types/shims.d.ts
generated
vendored
4
extensions/flags/js/dist-typings/@types/shims.d.ts
generated
vendored
@@ -1,7 +1,3 @@
|
|||||||
import 'flarum/common/models/Post';
|
|
||||||
import 'flarum/forum/ForumApplication';
|
|
||||||
import 'flarum/forum/components/Post';
|
|
||||||
|
|
||||||
import Flag from '../forum/models/Flag';
|
import Flag from '../forum/models/Flag';
|
||||||
import FlagListState from '../forum/states/FlagListState';
|
import FlagListState from '../forum/states/FlagListState';
|
||||||
import Mithril from 'mithril';
|
import Mithril from 'mithril';
|
||||||
|
21
extensions/flags/js/dist-typings/forum/compat.d.ts
generated
vendored
21
extensions/flags/js/dist-typings/forum/compat.d.ts
generated
vendored
@@ -1,21 +0,0 @@
|
|||||||
declare const _default: {
|
|
||||||
'flags/addFlagsToPosts': typeof addFlagsToPosts;
|
|
||||||
'flags/addFlagControl': typeof addFlagControl;
|
|
||||||
'flags/addFlagsDropdown': typeof addFlagsDropdown;
|
|
||||||
'flags/models/Flag': typeof Flag;
|
|
||||||
'flags/components/FlagList': typeof FlagList;
|
|
||||||
'flags/components/FlagPostModal': typeof FlagPostModal;
|
|
||||||
'flags/components/FlagsPage': typeof FlagsPage;
|
|
||||||
'flags/components/FlagsDropdown': typeof FlagsDropdown;
|
|
||||||
'flags/states/FlagListState': typeof FlagListState;
|
|
||||||
};
|
|
||||||
export default _default;
|
|
||||||
import addFlagsToPosts from "./addFlagsToPosts";
|
|
||||||
import addFlagControl from "./addFlagControl";
|
|
||||||
import addFlagsDropdown from "./addFlagsDropdown";
|
|
||||||
import Flag from "./models/Flag";
|
|
||||||
import FlagList from "./components/FlagList";
|
|
||||||
import FlagPostModal from "./components/FlagPostModal";
|
|
||||||
import FlagsPage from "./components/FlagsPage";
|
|
||||||
import FlagsDropdown from "./components/FlagsDropdown";
|
|
||||||
import FlagListState from "./states/FlagListState";
|
|
5
extensions/flags/js/dist-typings/forum/components/FlagsPage.d.ts
generated
vendored
5
extensions/flags/js/dist-typings/forum/components/FlagsPage.d.ts
generated
vendored
@@ -2,8 +2,9 @@
|
|||||||
* The `FlagsPage` component shows the flags list. It is only
|
* The `FlagsPage` component shows the flags list. It is only
|
||||||
* used on mobile devices where the flags dropdown is within the drawer.
|
* used on mobile devices where the flags dropdown is within the drawer.
|
||||||
*/
|
*/
|
||||||
export default class FlagsPage {
|
export default class FlagsPage extends Page<import("flarum/common/components/Page").IPageAttrs, undefined> {
|
||||||
|
constructor();
|
||||||
oninit(vnode: any): void;
|
oninit(vnode: any): void;
|
||||||
bodyClass: string | undefined;
|
|
||||||
view(): JSX.Element;
|
view(): JSX.Element;
|
||||||
}
|
}
|
||||||
|
import Page from "flarum/common/components/Page";
|
||||||
|
2
extensions/flags/js/dist-typings/forum/extend.d.ts
generated
vendored
2
extensions/flags/js/dist-typings/forum/extend.d.ts
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
declare const _default: (import("flarum/common/extenders/Routes").default | import("flarum/common/extenders/Store").default | import("flarum/common/extenders/Model").default)[];
|
declare const _default: (import("flarum/common/extenders/Model").default | import("flarum/common/extenders/Routes").default | import("flarum/common/extenders/Store").default)[];
|
||||||
export default _default;
|
export default _default;
|
||||||
|
8
extensions/flags/js/dist-typings/forum/forum.d.ts
generated
vendored
Normal file
8
extensions/flags/js/dist-typings/forum/forum.d.ts
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
import './addFlagsToPosts';
|
||||||
|
import './addFlagControl';
|
||||||
|
import './addFlagsDropdown';
|
||||||
|
import './models/Flag';
|
||||||
|
import './components/FlagList';
|
||||||
|
import './components/FlagPostModal';
|
||||||
|
import './components/FlagsPage';
|
||||||
|
import './components/FlagsDropdown';
|
1
extensions/flags/js/dist-typings/forum/index.d.ts
generated
vendored
1
extensions/flags/js/dist-typings/forum/index.d.ts
generated
vendored
@@ -1 +1,2 @@
|
|||||||
export { default as extend } from './extend';
|
export { default as extend } from './extend';
|
||||||
|
import './forum';
|
||||||
|
2
extensions/flags/js/dist/admin.js
generated
vendored
2
extensions/flags/js/dist/admin.js
generated
vendored
@@ -1,2 +1,2 @@
|
|||||||
(()=>{var a={n:s=>{var e=s&&s.__esModule?()=>s.default:()=>s;return a.d(e,{a:e}),e},d:(s,e)=>{for(var l in e)a.o(e,l)&&!a.o(s,l)&&Object.defineProperty(s,l,{enumerable:!0,get:e[l]})},o:(a,s)=>Object.prototype.hasOwnProperty.call(a,s)};(()=>{"use strict";const s=flarum.core.compat["admin/app"];var e=a.n(s);e().initializers.add("flarum-flags",(function(){e().extensionData.for("flarum-flags").registerSetting({setting:"flarum-flags.guidelines_url",type:"text",label:e().translator.trans("flarum-flags.admin.settings.guidelines_url_label")},15).registerSetting({setting:"flarum-flags.can_flag_own",type:"boolean",label:e().translator.trans("flarum-flags.admin.settings.flag_own_posts_label")}).registerPermission({icon:"fas fa-flag",label:e().translator.trans("flarum-flags.admin.permissions.view_flags_label"),permission:"discussion.viewFlags"},"moderate",65).registerPermission({icon:"fas fa-flag",label:e().translator.trans("flarum-flags.admin.permissions.flag_posts_label"),permission:"discussion.flagPosts"},"reply",65)}))})(),module.exports={}})();
|
(()=>{var e={n:a=>{var s=a&&a.__esModule?()=>a.default:()=>a;return e.d(s,{a:s}),s},d:(a,s)=>{for(var r in s)e.o(s,r)&&!e.o(a,r)&&Object.defineProperty(a,r,{enumerable:!0,get:s[r]})},o:(e,a)=>Object.prototype.hasOwnProperty.call(e,a),r:e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})}},a={};(()=>{"use strict";e.r(a);const s=flarum.reg.get("core","admin/app");var r=e.n(s);r().initializers.add("flarum-flags",(()=>{r().extensionData.for("flarum-flags").registerSetting({setting:"flarum-flags.guidelines_url",type:"text",label:r().translator.trans("flarum-flags.admin.settings.guidelines_url_label")},15).registerSetting({setting:"flarum-flags.can_flag_own",type:"boolean",label:r().translator.trans("flarum-flags.admin.settings.flag_own_posts_label")}).registerPermission({icon:"fas fa-flag",label:r().translator.trans("flarum-flags.admin.permissions.view_flags_label"),permission:"discussion.viewFlags"},"moderate",65).registerPermission({icon:"fas fa-flag",label:r().translator.trans("flarum-flags.admin.permissions.flag_posts_label"),permission:"discussion.flagPosts"},"reply",65)}))})(),module.exports=a})();
|
||||||
//# sourceMappingURL=admin.js.map
|
//# sourceMappingURL=admin.js.map
|
2
extensions/flags/js/dist/admin.js.map
generated
vendored
2
extensions/flags/js/dist/admin.js.map
generated
vendored
@@ -1 +1 @@
|
|||||||
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,I,mBCAlF,MAAM,EAA+BI,OAAOC,KAAKC,OAAO,a,aCExDC,IAAAA,aAAiBC,IAAI,gBAAgB,WACnCD,IAAAA,cAAiB,IACV,gBACJE,gBACC,CACEC,QAAS,8BACTC,KAAM,OACNC,MAAOL,IAAAA,WAAeM,MAAM,qDAE9B,IAEDJ,gBAAgB,CACfC,QAAS,4BACTC,KAAM,UACNC,MAAOL,IAAAA,WAAeM,MAAM,sDAE7BC,mBACC,CACEC,KAAM,cACNH,MAAOL,IAAAA,WAAeM,MAAM,mDAC5BG,WAAY,wBAEd,WACA,IAGDF,mBACC,CACEC,KAAM,cACNH,MAAOL,IAAAA,WAAeM,MAAM,mDAC5BG,WAAY,wBAEd,QACA,GAEN,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/external root \"flarum.core.compat['admin/app']\"","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.core.compat['admin/app'];","import app from 'flarum/admin/app';\n\napp.initializers.add('flarum-flags', () => {\n app.extensionData\n .for('flarum-flags')\n .registerSetting(\n {\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label'),\n },\n 15\n )\n .registerSetting({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label'),\n })\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags',\n },\n 'moderate',\n 65\n )\n\n .registerPermission(\n {\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts',\n },\n 'reply',\n 65\n );\n});\n"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","flarum","core","compat","app","add","registerSetting","setting","type","label","trans","registerPermission","icon","permission"],"sourceRoot":""}
|
{"version":3,"file":"admin.js","mappings":"MACA,IAAIA,EAAsB,CCA1BA,EAAyBC,IACxB,IAAIC,EAASD,GAAUA,EAAOE,WAC7B,IAAOF,EAAiB,QACxB,IAAM,EAEP,OADAD,EAAoBI,EAAEF,EAAQ,CAAEG,EAAGH,IAC5BA,CAAM,ECLdF,EAAwB,CAACM,EAASC,KACjC,IAAI,IAAIC,KAAOD,EACXP,EAAoBS,EAAEF,EAAYC,KAASR,EAAoBS,EAAEH,EAASE,IAC5EE,OAAOC,eAAeL,EAASE,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDR,EAAwB,CAACc,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFf,EAAyBM,IACH,oBAAXa,QAA0BA,OAAOC,aAC1CV,OAAOC,eAAeL,EAASa,OAAOC,YAAa,CAAEC,MAAO,WAE7DX,OAAOC,eAAeL,EAAS,aAAc,CAAEe,OAAO,GAAO,G,+BCL9D,MAAM,EAA+BC,OAAOC,IAAIV,IAAI,OAAQ,a,aCC5D,qBAAqB,gBAAgB,KACnC,sBAAsB,gBAAgBW,gBAAgB,CACpDC,QAAS,8BACTC,KAAM,OACNC,MAAO,qBAAqB,qDAC3B,IAAIH,gBAAgB,CACrBC,QAAS,4BACTC,KAAM,UACNC,MAAO,qBAAqB,sDAC3BC,mBAAmB,CACpBC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BG,WAAY,wBACX,WAAY,IAAIF,mBAAmB,CACpCC,KAAM,cACNF,MAAO,qBAAqB,mDAC5BG,WAAY,wBACX,QAAS,GAAG,G","sources":["webpack://@flarum/flags/webpack/bootstrap","webpack://@flarum/flags/webpack/runtime/compat get default export","webpack://@flarum/flags/webpack/runtime/define property getters","webpack://@flarum/flags/webpack/runtime/hasOwnProperty shorthand","webpack://@flarum/flags/webpack/runtime/make namespace object","webpack://@flarum/flags/external root \"flarum.reg.get('core', 'admin/app')\"","webpack://@flarum/flags/./src/admin/index.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","const __WEBPACK_NAMESPACE_OBJECT__ = flarum.reg.get('core', 'admin/app');","import app from 'flarum/admin/app';\napp.initializers.add('flarum-flags', () => {\n app.extensionData.for('flarum-flags').registerSetting({\n setting: 'flarum-flags.guidelines_url',\n type: 'text',\n label: app.translator.trans('flarum-flags.admin.settings.guidelines_url_label')\n }, 15).registerSetting({\n setting: 'flarum-flags.can_flag_own',\n type: 'boolean',\n label: app.translator.trans('flarum-flags.admin.settings.flag_own_posts_label')\n }).registerPermission({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.view_flags_label'),\n permission: 'discussion.viewFlags'\n }, 'moderate', 65).registerPermission({\n icon: 'fas fa-flag',\n label: app.translator.trans('flarum-flags.admin.permissions.flag_posts_label'),\n permission: 'discussion.flagPosts'\n }, 'reply', 65);\n});"],"names":["__webpack_require__","module","getter","__esModule","d","a","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","flarum","reg","registerSetting","setting","type","label","registerPermission","icon","permission"],"sourceRoot":""}
|
2
extensions/flags/js/dist/forum.js
generated
vendored
2
extensions/flags/js/dist/forum.js
generated
vendored
File diff suppressed because one or more lines are too long
2
extensions/flags/js/dist/forum.js.map
generated
vendored
2
extensions/flags/js/dist/forum.js.map
generated
vendored
File diff suppressed because one or more lines are too long
4
extensions/flags/js/src/@types/shims.d.ts
vendored
4
extensions/flags/js/src/@types/shims.d.ts
vendored
@@ -1,7 +1,3 @@
|
|||||||
import 'flarum/common/models/Post';
|
|
||||||
import 'flarum/forum/ForumApplication';
|
|
||||||
import 'flarum/forum/components/Post';
|
|
||||||
|
|
||||||
import Flag from '../forum/models/Flag';
|
import Flag from '../forum/models/Flag';
|
||||||
import FlagListState from '../forum/states/FlagListState';
|
import FlagListState from '../forum/states/FlagListState';
|
||||||
import Mithril from 'mithril';
|
import Mithril from 'mithril';
|
||||||
|
@@ -75,7 +75,7 @@ export default function () {
|
|||||||
return items;
|
return items;
|
||||||
};
|
};
|
||||||
|
|
||||||
extend(Post.prototype, 'viewItems', function (items) {
|
extend(Post.prototype, 'content', function (vdom) {
|
||||||
const post = this.attrs.post;
|
const post = this.attrs.post;
|
||||||
const flags = post.flags();
|
const flags = post.flags();
|
||||||
|
|
||||||
@@ -83,8 +83,7 @@ export default function () {
|
|||||||
|
|
||||||
if (post.isHidden()) this.revealContent = true;
|
if (post.isHidden()) this.revealContent = true;
|
||||||
|
|
||||||
items.add(
|
vdom.unshift(
|
||||||
'flagged',
|
|
||||||
<div className="Post-flagged">
|
<div className="Post-flagged">
|
||||||
<div className="Post-flagged-flags">
|
<div className="Post-flagged-flags">
|
||||||
{flags.map((flag) => (
|
{flags.map((flag) => (
|
||||||
@@ -92,8 +91,7 @@ export default function () {
|
|||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
<div className="Post-flagged-actions">{this.flagActionItems().toArray()}</div>
|
<div className="Post-flagged-actions">{this.flagActionItems().toArray()}</div>
|
||||||
</div>,
|
</div>
|
||||||
110
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@@ -1,21 +0,0 @@
|
|||||||
import addFlagsToPosts from './addFlagsToPosts';
|
|
||||||
import addFlagControl from './addFlagControl';
|
|
||||||
import addFlagsDropdown from './addFlagsDropdown';
|
|
||||||
import Flag from './models/Flag';
|
|
||||||
import FlagList from './components/FlagList';
|
|
||||||
import FlagPostModal from './components/FlagPostModal';
|
|
||||||
import FlagsPage from './components/FlagsPage';
|
|
||||||
import FlagsDropdown from './components/FlagsDropdown';
|
|
||||||
import FlagListState from './states/FlagListState';
|
|
||||||
|
|
||||||
export default {
|
|
||||||
'flags/addFlagsToPosts': addFlagsToPosts,
|
|
||||||
'flags/addFlagControl': addFlagControl,
|
|
||||||
'flags/addFlagsDropdown': addFlagsDropdown,
|
|
||||||
'flags/models/Flag': Flag,
|
|
||||||
'flags/components/FlagList': FlagList,
|
|
||||||
'flags/components/FlagPostModal': FlagPostModal,
|
|
||||||
'flags/components/FlagsPage': FlagsPage,
|
|
||||||
'flags/components/FlagsDropdown': FlagsDropdown,
|
|
||||||
'flags/states/FlagListState': FlagListState,
|
|
||||||
};
|
|
@@ -1,5 +1,5 @@
|
|||||||
import app from 'flarum/forum/app';
|
import app from 'flarum/forum/app';
|
||||||
import Page from 'flarum/components/Page';
|
import Page from 'flarum/common/components/Page';
|
||||||
|
|
||||||
import FlagList from './FlagList';
|
import FlagList from './FlagList';
|
||||||
|
|
||||||
|
10
extensions/flags/js/src/forum/forum.ts
Normal file
10
extensions/flags/js/src/forum/forum.ts
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
import './addFlagsToPosts';
|
||||||
|
import './addFlagControl';
|
||||||
|
import './addFlagsDropdown';
|
||||||
|
|
||||||
|
import './models/Flag';
|
||||||
|
|
||||||
|
import './components/FlagList';
|
||||||
|
import './components/FlagPostModal';
|
||||||
|
import './components/FlagsPage';
|
||||||
|
import './components/FlagsDropdown';
|
@@ -15,8 +15,4 @@ app.initializers.add('flarum-flags', () => {
|
|||||||
addFlagsToPosts();
|
addFlagsToPosts();
|
||||||
});
|
});
|
||||||
|
|
||||||
// Expose compat API
|
import './forum';
|
||||||
import flagsCompat from './compat';
|
|
||||||
import { compat } from '@flarum/core/forum';
|
|
||||||
|
|
||||||
Object.assign(compat, flagsCompat);
|
|
||||||
|
@@ -9,8 +9,7 @@
|
|||||||
// This will output typings to `dist-typings`
|
// This will output typings to `dist-typings`
|
||||||
"declarationDir": "./dist-typings",
|
"declarationDir": "./dist-typings",
|
||||||
"paths": {
|
"paths": {
|
||||||
"flarum/*": ["../../../framework/core/js/dist-typings/*"],
|
"flarum/*": ["../../../framework/core/js/dist-typings/*"]
|
||||||
"@flarum/core/*": ["../../../framework/core/js/dist-typings/*"]
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,17 +16,12 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
|
|
||||||
class ScopeFlagVisibility
|
class ScopeFlagVisibility
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var ExtensionManager
|
protected ExtensionManager $extensions
|
||||||
*/
|
) {
|
||||||
protected $extensions;
|
|
||||||
|
|
||||||
public function __construct(ExtensionManager $extensions)
|
|
||||||
{
|
|
||||||
$this->extensions = $extensions;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __invoke(User $actor, Builder $query)
|
public function __invoke(User $actor, Builder $query): void
|
||||||
{
|
{
|
||||||
if ($this->extensions->isEnabled('flarum-tags')) {
|
if ($this->extensions->isEnabled('flarum-tags')) {
|
||||||
$query
|
$query
|
||||||
|
@@ -16,20 +16,12 @@ use Flarum\User\User;
|
|||||||
|
|
||||||
class AddCanFlagAttribute
|
class AddCanFlagAttribute
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var SettingsRepositoryInterface
|
protected SettingsRepositoryInterface $settings
|
||||||
*/
|
) {
|
||||||
protected $settings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param SettingsRepositoryInterface $settings
|
|
||||||
*/
|
|
||||||
public function __construct(SettingsRepositoryInterface $settings)
|
|
||||||
{
|
|
||||||
$this->settings = $settings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __invoke(PostSerializer $serializer, Post $post)
|
public function __invoke(PostSerializer $serializer, Post $post): bool
|
||||||
{
|
{
|
||||||
return $serializer->getActor()->can('flag', $post) && $this->checkFlagOwnPostSetting($serializer->getActor(), $post);
|
return $serializer->getActor()->can('flag', $post) && $this->checkFlagOwnPostSetting($serializer->getActor(), $post);
|
||||||
}
|
}
|
||||||
@@ -40,7 +32,6 @@ class AddCanFlagAttribute
|
|||||||
// If $actor is the post author, check to see if the setting is enabled
|
// If $actor is the post author, check to see if the setting is enabled
|
||||||
return (bool) $this->settings->get('flarum-flags.can_flag_own');
|
return (bool) $this->settings->get('flarum-flags.can_flag_own');
|
||||||
}
|
}
|
||||||
|
|
||||||
// $actor is not the post author
|
// $actor is not the post author
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -15,20 +15,12 @@ use Flarum\User\User;
|
|||||||
|
|
||||||
class AddFlagsApiAttributes
|
class AddFlagsApiAttributes
|
||||||
{
|
{
|
||||||
/**
|
public function __construct(
|
||||||
* @var SettingsRepositoryInterface
|
protected SettingsRepositoryInterface $settings
|
||||||
*/
|
) {
|
||||||
protected $settings;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param SettingsRepositoryInterface $settings
|
|
||||||
*/
|
|
||||||
public function __construct(SettingsRepositoryInterface $settings)
|
|
||||||
{
|
|
||||||
$this->settings = $settings;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public function __invoke(ForumSerializer $serializer)
|
public function __invoke(ForumSerializer $serializer): array
|
||||||
{
|
{
|
||||||
$attributes = [
|
$attributes = [
|
||||||
'canViewFlags' => $serializer->getActor()->hasPermissionLike('discussion.viewFlags')
|
'canViewFlags' => $serializer->getActor()->hasPermissionLike('discussion.viewFlags')
|
||||||
@@ -41,11 +33,7 @@ class AddFlagsApiAttributes
|
|||||||
return $attributes;
|
return $attributes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getFlagCount(User $actor): int
|
||||||
* @param User $actor
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
protected function getFlagCount(User $actor)
|
|
||||||
{
|
{
|
||||||
return Flag::whereVisibleTo($actor)->distinct()->count('flags.post_id');
|
return Flag::whereVisibleTo($actor)->distinct()->count('flags.post_id');
|
||||||
}
|
}
|
||||||
|
@@ -14,16 +14,12 @@ use Flarum\User\User;
|
|||||||
|
|
||||||
class AddNewFlagCountAttribute
|
class AddNewFlagCountAttribute
|
||||||
{
|
{
|
||||||
public function __invoke(CurrentUserSerializer $serializer, User $user)
|
public function __invoke(CurrentUserSerializer $serializer, User $user): int
|
||||||
{
|
{
|
||||||
return (int) $this->getNewFlagCount($user);
|
return $this->getNewFlagCount($user);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
protected function getNewFlagCount(User $actor): int
|
||||||
* @param User $actor
|
|
||||||
* @return int
|
|
||||||
*/
|
|
||||||
protected function getNewFlagCount(User $actor)
|
|
||||||
{
|
{
|
||||||
$query = Flag::whereVisibleTo($actor);
|
$query = Flag::whereVisibleTo($actor);
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user