зеркало из https://github.com/nextcloud/spreed.git
Merge pull request #8907 from nextcloud/feature/document-commands
Document occ commands
This commit is contained in:
Коммит
c726088277
|
@ -0,0 +1,92 @@
|
|||
name: Documentation
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/**'
|
||||
- 'appinfo/**'
|
||||
- 'lib/**'
|
||||
- 'templates/**'
|
||||
- 'tests/**'
|
||||
- 'vendor/**'
|
||||
- 'vendor-bin/**'
|
||||
- '.php-cs-fixer.dist.php'
|
||||
- 'composer.json'
|
||||
- 'composer.lock'
|
||||
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
- master
|
||||
- stable*
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
concurrency:
|
||||
group: occ-commands-${{ github.head_ref || github.run_id }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
occ-commands:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php-versions: ['8.0', '8.1']
|
||||
server-versions: ['master']
|
||||
|
||||
steps:
|
||||
- name: Set app env
|
||||
run: |
|
||||
# Split and keep last
|
||||
echo "APP_NAME=${GITHUB_REPOSITORY##*/}" >> $GITHUB_ENV
|
||||
|
||||
- name: Checkout server
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
with:
|
||||
submodules: true
|
||||
repository: nextcloud/server
|
||||
ref: ${{ matrix.server-versions }}
|
||||
|
||||
- name: Checkout app
|
||||
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3
|
||||
with:
|
||||
path: apps/${{ env.APP_NAME }}
|
||||
|
||||
- name: Set up php ${{ matrix.php-versions }}
|
||||
uses: shivammathur/setup-php@1a18b2267f80291a81ca1d33e7c851fe09e7dfc4 # v2
|
||||
with:
|
||||
php-version: ${{ matrix.php-versions }}
|
||||
extensions: mbstring, iconv, fileinfo, intl, sqlite, pdo_sqlite
|
||||
coverage: none
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Check composer file existence
|
||||
id: check_composer
|
||||
uses: andstor/file-existence-action@20b4d2e596410855db8f9ca21e96fbe18e12930b # v2
|
||||
with:
|
||||
files: apps/${{ env.APP_NAME }}/composer.json
|
||||
|
||||
- name: Set up dependencies
|
||||
# Only run if phpunit config file exists
|
||||
if: steps.check_composer.outputs.files_exists == 'true'
|
||||
working-directory: apps/${{ env.APP_NAME }}
|
||||
run: composer i
|
||||
|
||||
- name: Set up Nextcloud
|
||||
env:
|
||||
DB_PORT: 4444
|
||||
run: |
|
||||
mkdir data
|
||||
./occ maintenance:install --verbose --database=sqlite --database-name=nextcloud --database-host=127.0.0.1 --database-port=$DB_PORT --database-user=root --database-pass=rootpassword --admin-user admin --admin-pass password
|
||||
./occ app:enable --force ${{ env.APP_NAME }}
|
||||
./occ config:system:set debug --value true --type boolean
|
||||
|
||||
- name: Check if documentation is up to date
|
||||
id: check_documentation
|
||||
run: |
|
||||
./occ talk:developer:update-docs
|
||||
cd apps/${{ env.APP_NAME }}
|
||||
bash -c "[[ ! \"`git status --porcelain `\" ]] || (cat docs/occ.md && echo 'Documentation outdated. Run the command talk:developer:update-docs locally, commit the occ.md file and push the changes.' && exit 1)"
|
|
@ -85,6 +85,7 @@ And in the works for the [coming versions](https://github.com/nextcloud/spreed/m
|
|||
<command>OCA\Talk\Command\Command\Delete</command>
|
||||
<command>OCA\Talk\Command\Command\ListCommand</command>
|
||||
<command>OCA\Talk\Command\Command\Update</command>
|
||||
<command>OCA\Talk\Command\Developer\UpdateDocs</command>
|
||||
<command>OCA\Talk\Command\Monitor\Calls</command>
|
||||
<command>OCA\Talk\Command\Monitor\HasActiveCalls</command>
|
||||
<command>OCA\Talk\Command\Monitor\Room</command>
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
# CoTURN configuration
|
||||
|
||||
### Background
|
||||
The configuration of Nextcloud Talk mainly depends on your desired usage:
|
||||
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
---
|
||||
title: Capabilities
|
||||
---
|
||||
# Capabilities
|
||||
|
||||
## 3.0 (Initial Talk release)
|
||||
* `audio` - audio is supported
|
||||
|
|
|
@ -1,6 +1,4 @@
|
|||
---
|
||||
title: Constants
|
||||
---
|
||||
# Constants
|
||||
|
||||
## Conversation
|
||||
|
||||
|
|
|
@ -32,3 +32,4 @@
|
|||
## Other
|
||||
|
||||
* [Chat commands](commands.md)
|
||||
* [Occ commands](occ.md)
|
||||
|
|
|
@ -0,0 +1,380 @@
|
|||
# Talk occ commands
|
||||
|
||||
## talk:command:add
|
||||
|
||||
Add a new command
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:command:add <cmd> <name> <script> <response> <enabled>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `cmd` | The command as used in the chat "/help" => "help" | yes | no | `NULL` |
|
||||
| `name` | Name of the user posting the response | yes | no | `NULL` |
|
||||
| `script` | Script to execute (Must be using absolute paths only) | yes | no | `NULL` |
|
||||
| `response` | Who should see the response: 0 - No one, 1 - User, 2 - All | yes | no | `NULL` |
|
||||
| `enabled` | Who can use this command: 0 - Disabled, 1 - Moderators, 2 - Users, 3 - Guests | yes | no | `NULL` |
|
||||
|
||||
## talk:command:add-samples
|
||||
|
||||
Adds some sample commands: /wiki, …
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:command:add-samples`
|
||||
|
||||
## talk:command:delete
|
||||
|
||||
Remove an existing command
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:command:delete <command-id>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `command-id` | | yes | no | `NULL` |
|
||||
|
||||
## talk:command:list
|
||||
|
||||
List all available commands
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:command:list [--output [OUTPUT]] [--] [<app>]`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `app` | Only list the commands of a specific app, "custom" to list all custom commands | no | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:command:update
|
||||
|
||||
Add a new command
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:command:update <command-id> <cmd> <name> <script> <response> <enabled>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `command-id` | | yes | no | `NULL` |
|
||||
| `cmd` | The command as used in the chat "/help" => "help" | yes | no | `NULL` |
|
||||
| `name` | Name of the user posting the response | yes | no | `NULL` |
|
||||
| `script` | Script to execute (Must be using absolute paths only) | yes | no | `NULL` |
|
||||
| `response` | Who should see the response: 0 - No one, 1 - User, 2 - All | yes | no | `NULL` |
|
||||
| `enabled` | Who can use this command: 0 - Disabled, 1 - Moderators, 2 - Users, 3 - Guests | yes | no | `NULL` |
|
||||
|
||||
## talk:monitor:calls
|
||||
|
||||
Prints a list with conversations that have an active call as well as their participant count
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:monitor:calls [--output [OUTPUT]]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:active-calls
|
||||
|
||||
Allows you to check if calls are currently in process
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:active-calls [--output [OUTPUT]]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:monitor:room
|
||||
|
||||
Prints a list with conversations that have an active call as well as their participant count
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:monitor:room [--output [OUTPUT]] [--separator SEPARATOR] [--] <token>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room to monitor | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
| `--separator` | Separator for the CSV list when output=csv is used | yes | yes | no | ','` |
|
||||
|
||||
## talk:room:add
|
||||
|
||||
Adds users to a room
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:add [--user USER] [--group GROUP] [--] <token>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room to add users to | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--user` | Invites the given users to the room | yes | yes | yes | array ()` |
|
||||
| `--group` | Invites all members of the given groups to the room | yes | yes | yes | array ()` |
|
||||
|
||||
## talk:room:create
|
||||
|
||||
Create a new room
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:create [--description DESCRIPTION] [--user USER] [--group GROUP] [--public] [--readonly] [--listable LISTABLE] [--password PASSWORD] [--owner OWNER] [--moderator MODERATOR] [--message-expiration MESSAGE-EXPIRATION] [--] <name>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `name` | The name of the room to create | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--description` | The description of the room to create | yes | yes | no | NULL` |
|
||||
| `--user` | Invites the given users to the room to create | yes | yes | yes | array ()` |
|
||||
| `--group` | Invites all members of the given group to the room to create | yes | yes | yes | array ()` |
|
||||
| `--public` | Creates the room as public room if set | no | no | no | false` |
|
||||
| `--readonly` | Creates the room with read-only access only if set | no | no | no | false` |
|
||||
| `--listable` | Creates the room with the given listable scope | yes | yes | no | NULL` |
|
||||
| `--password` | Protects the room to create with the given password | yes | yes | no | NULL` |
|
||||
| `--owner` | Sets the given user as owner of the room to create | yes | yes | no | NULL` |
|
||||
| `--moderator` | Promotes the given users to moderators | yes | yes | yes | array ()` |
|
||||
| `--message-expiration` | Seconds to expire a message after sent. If zero will disable the expire message duration. | yes | yes | no | NULL` |
|
||||
|
||||
## talk:room:delete
|
||||
|
||||
Deletes a room
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:delete <token>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room to delete | yes | no | `NULL` |
|
||||
|
||||
## talk:room:demote
|
||||
|
||||
Demotes participants of a room to regular users
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:demote <token> <participant>...`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room in which users should be demoted | yes | no | `NULL` |
|
||||
| `participant` | Demotes the given participants of the room to regular users | yes | yes | `array ()` |
|
||||
|
||||
## talk:room:promote
|
||||
|
||||
Promotes participants of a room to moderators
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:promote <token> <participant>...`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room in which users should be promoted | yes | no | `NULL` |
|
||||
| `participant` | Promotes the given participants of the room to moderators | yes | yes | `array ()` |
|
||||
|
||||
## talk:room:remove
|
||||
|
||||
Remove users from a room
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:remove <token> <participant>...`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | Token of the room to remove users from | yes | no | `NULL` |
|
||||
| `participant` | Removes the given participants from the room | yes | yes | `array ()` |
|
||||
|
||||
## talk:room:update
|
||||
|
||||
Updates a room
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:room:update [--name NAME] [--description DESCRIPTION] [--public PUBLIC] [--readonly READONLY] [--listable LISTABLE] [--password PASSWORD] [--owner OWNER] [--message-expiration MESSAGE-EXPIRATION] [--] <token>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `token` | The token of the room to update | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--name` | Sets a new name for the room | yes | yes | no | NULL` |
|
||||
| `--description` | Sets a new description for the room | yes | yes | no | NULL` |
|
||||
| `--public` | Modifies the room to be a public room (value 1) or private room (value 0) | yes | yes | no | NULL` |
|
||||
| `--readonly` | Modifies the room to be read-only (value 1) or read-write (value 0) | yes | yes | no | NULL` |
|
||||
| `--listable` | Modifies the room's listable scope | yes | yes | no | NULL` |
|
||||
| `--password` | Sets a new password for the room; pass an empty value to remove password protection | yes | yes | no | NULL` |
|
||||
| `--owner` | Sets the given user as owner of the room; pass an empty value to remove the owner | yes | yes | no | NULL` |
|
||||
| `--message-expiration` | Seconds to expire a message after sent. If zero will disable the expire message duration. | yes | yes | no | NULL` |
|
||||
|
||||
## talk:signaling:add
|
||||
|
||||
Add an external signaling server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:signaling:add [--verify] [--] <server> <secret>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `server` | A server string, ex. wss://signaling.example.org | yes | no | `NULL` |
|
||||
| `secret` | A shared secret string. | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--verify` | Validate SSL certificate if set. | no | no | no | false` |
|
||||
|
||||
## talk:signaling:delete
|
||||
|
||||
Remove an existing signaling server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:signaling:delete <server>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `server` | An external signaling server string, ex. wss://signaling.example.org | yes | no | `NULL` |
|
||||
|
||||
## talk:signaling:list
|
||||
|
||||
List external signaling servers.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:signaling:list [--output [OUTPUT]]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:stun:add
|
||||
|
||||
Add a new STUN server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:stun:add <server>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `server` | A domain name and port number separated by the colons, ex. stun.nextcloud.com:443 | yes | no | `NULL` |
|
||||
|
||||
## talk:stun:delete
|
||||
|
||||
Remove an existing STUN server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:stun:delete <server>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `server` | A domain name and port number separated by the colons, ex. stun.nextcloud.com:443 | yes | no | `NULL` |
|
||||
|
||||
## talk:stun:list
|
||||
|
||||
List STUN servers.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:stun:list [--output [OUTPUT]]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:turn:add
|
||||
|
||||
Add a TURN server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:turn:add [--secret SECRET] [--generate-secret] [--] <schemes> <server> <protocols>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `schemes` | Schemes, can be turn or turns or turn,turns. | yes | no | `NULL` |
|
||||
| `server` | A domain name, ex. turn.nextcloud.com | yes | no | `NULL` |
|
||||
| `protocols` | Protocols, can be udp or tcp or udp,tcp. | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--secret` | A shard secret string | yes | yes | no | NULL` |
|
||||
| `--generate-secret` | Generate secret if set. | no | no | no | false` |
|
||||
|
||||
## talk:turn:delete
|
||||
|
||||
Remove an existing TURN server.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:turn:delete <schemes> <server> <protocols>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `schemes` | Schemes, can be turn or turns or turn,turns | yes | no | `NULL` |
|
||||
| `server` | A domain name, ex. turn.nextcloud.com | yes | no | `NULL` |
|
||||
| `protocols` | Protocols, can be udp or tcp or udp,tcp | yes | no | `NULL` |
|
||||
|
||||
## talk:turn:list
|
||||
|
||||
List TURN servers.
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:turn:list [--output [OUTPUT]]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--output` | Output format (plain, json or json_pretty, default is plain) | yes | no | no | 'plain'` |
|
||||
|
||||
## talk:user:remove
|
||||
|
||||
Remove a user from all their rooms
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:user:remove [--user USER]`
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--user` | Remove the given users from all rooms | yes | yes | yes | array ()` |
|
||||
|
||||
## talk:user:transfer-ownership
|
||||
|
||||
Adds the destination-user with the same participant type to all (not one-to-one) conversations of source-user
|
||||
|
||||
### Usage
|
||||
|
||||
* `talk:user:transfer-ownership [--include-non-moderator] [--remove-source-user] [--] <source-user> <destination-user>`
|
||||
|
||||
| Arguments | Description | Is required | Is array | Default |
|
||||
|---|---|---|---|---|
|
||||
| `source-user` | Owner of conversations which shall be moved | yes | no | `NULL` |
|
||||
| `destination-user` | User who will be the new owner of the conversations | yes | no | `NULL` |
|
||||
|
||||
| Options | Accept value | Is value required | Is multiple | Default |
|
||||
|---|---|---|---|---|
|
||||
| `--include-non-moderator` | Also include conversations where the source-user is a normal user | no | no | no | false` |
|
||||
| `--remove-source-user` | Remove the source-user from the conversations | no | no | no | false` |
|
||||
|
|
@ -37,22 +37,3 @@ In Apache, if _mod_mime_ and _.htaccess_ files are enabled, the default _.htacce
|
|||
## TURN server
|
||||
|
||||
A TURN server running on **port 443** (or 80) is required in almost all scenarios, see [Configuring coTURN](TURN.md) for more details.
|
||||
|
||||
# Browsers
|
||||
|
||||
## Recommended
|
||||
|
||||
* Firefox: latest
|
||||
* Chrome/Chromium: latest
|
||||
|
||||
## Supported
|
||||
|
||||
* Firefox / Firefox ESR: 52 or later
|
||||
* Chrome / Chromium: 49 or later
|
||||
* Edge: latest
|
||||
* Safari: 13 or later
|
||||
|
||||
# Mobile apps
|
||||
|
||||
* Android: 6 or later
|
||||
* iOS: 14 or later
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# User system requirements
|
||||
|
||||
## Browsers
|
||||
|
||||
### Recommended
|
||||
|
||||
* Firefox: latest
|
||||
* Chrome/Chromium: latest
|
||||
|
||||
### Supported
|
||||
|
||||
* Firefox / Firefox ESR: 52 or later
|
||||
* Chrome / Chromium: 49 or later
|
||||
* Edge: latest
|
||||
* Safari: 13 or later
|
||||
|
||||
## Mobile apps
|
||||
|
||||
* Android: 6 or later
|
||||
* iOS: 14 or later
|
|
@ -0,0 +1,161 @@
|
|||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
/**
|
||||
* @copyright Copyright (c) 2020 Joas Schilling <coding@schilljs.com>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Talk\Command\Developer;
|
||||
|
||||
use OC\Core\Command\Base;
|
||||
use OCP\App\IAppManager;
|
||||
use OCP\IConfig;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class UpdateDocs extends Base {
|
||||
private IConfig $config;
|
||||
private IAppManager $appManager;
|
||||
|
||||
public function __construct(IConfig $config) {
|
||||
$this->config = $config;
|
||||
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
public function isEnabled(): bool {
|
||||
return $this->config->getSystemValue('debug', false) === true;
|
||||
}
|
||||
|
||||
protected function configure(): void {
|
||||
$this
|
||||
->setName('talk:developer:update-docs')
|
||||
->setDescription('Update documentation of commands')
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output): int {
|
||||
$this->appManager = \OC::$server->get(IAppManager::class);
|
||||
|
||||
$info = $this->appManager->getAppInfo('spreed');
|
||||
$documentation = "# Talk occ commands\n\n";
|
||||
foreach ($info['commands'] as $namespace) {
|
||||
if ($namespace === self::class) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$command = $this->getCommand($namespace);
|
||||
$documentation .= $this->getDocumentation($command) . "\n";
|
||||
}
|
||||
|
||||
$handle = fopen(__DIR__ . '/../../../docs/occ.md', 'w');
|
||||
fwrite($handle, $documentation);
|
||||
fclose($handle);
|
||||
return 0;
|
||||
}
|
||||
|
||||
protected function getCommand(string $namespace): Command {
|
||||
$command = \OC::$server->get($namespace);
|
||||
// Clean full definition of command that have the default Symfony options
|
||||
$command->setApplication($this->getApplication());
|
||||
return $command;
|
||||
}
|
||||
|
||||
protected function getDocumentation(Command $command): string {
|
||||
$doc = '## ' . $command->getName() . "\n\n";
|
||||
$doc .= $command->getDescription() . "\n\n";
|
||||
$doc .=
|
||||
'### Usage' . "\n\n" .
|
||||
array_reduce(
|
||||
array_merge(
|
||||
[$command->getSynopsis()],
|
||||
$command->getAliases(),
|
||||
$command->getUsages()
|
||||
),
|
||||
function ($carry, $usage) {
|
||||
return $carry.'* `'.$usage.'`'."\n";
|
||||
}
|
||||
);
|
||||
$doc .= $this->describeInputDefinition($command);
|
||||
|
||||
return $doc;
|
||||
}
|
||||
|
||||
protected function describeInputDefinition(Command $command): string {
|
||||
$definition = $command->getDefinition();
|
||||
$text = '';
|
||||
if (\count($definition->getArguments()) > 0) {
|
||||
$text .= "\n";
|
||||
$text .= "| Arguments | Description | Is required | Is array | Default |\n";
|
||||
$text .= '|---|---|---|---|---|';
|
||||
foreach ($definition->getArguments() as $argument) {
|
||||
$text .= "\n";
|
||||
if (null !== $describeInputArgument = $this->describeInputArgument($argument)) {
|
||||
$text .= $describeInputArgument;
|
||||
}
|
||||
}
|
||||
$text .= "\n";
|
||||
}
|
||||
|
||||
if (\count($definition->getOptions()) > 0) {
|
||||
$text .= "\n";
|
||||
|
||||
$text .= "| Options | Accept value | Is value required | Is multiple | Default |\n";
|
||||
$text .= '|---|---|---|---|---|';
|
||||
foreach ($definition->getOptions() as $option) {
|
||||
$text .= "\n";
|
||||
if (null !== $describeInputOption = $this->describeInputOption($option)) {
|
||||
$text .= $describeInputOption;
|
||||
}
|
||||
}
|
||||
$text .= "\n";
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
protected function describeInputArgument(InputArgument $argument): string {
|
||||
$description = $argument->getDescription();
|
||||
|
||||
return
|
||||
'| `'.($argument->getName() ?: '<none>')."` | " .
|
||||
($description ? preg_replace('/\s*[\r\n]\s*/', " ", $description) : '') . ' | ' .
|
||||
($argument->isRequired() ? 'yes' : 'no')." | " .
|
||||
($argument->isArray() ? 'yes' : 'no')." | " .
|
||||
'`' . str_replace("\n", '', var_export($argument->getDefault(), true)) . "` |";
|
||||
}
|
||||
|
||||
protected function describeInputOption(InputOption $option): string {
|
||||
$name = '--'.$option->getName();
|
||||
if ($option->getShortcut()) {
|
||||
$name .= '|-'.str_replace('|', '|-', $option->getShortcut()).'';
|
||||
}
|
||||
$description = $option->getDescription();
|
||||
|
||||
return
|
||||
'| `'.$name.'` | ' .
|
||||
($description ? preg_replace('/\s*[\r\n]\s*/', " ", $description) : '') . ' | '.
|
||||
($option->acceptValue() ? 'yes' : 'no')." | " .
|
||||
($option->isValueRequired() ? 'yes' : 'no')." | " .
|
||||
($option->isArray() ? 'yes' : 'no')." | " .
|
||||
str_replace("\n", '', var_export($option->getDefault(), true)).'` |';
|
||||
}
|
||||
}
|
18
mkdocs.yml
18
mkdocs.yml
|
@ -17,10 +17,18 @@ markdown_extensions:
|
|||
|
||||
nav:
|
||||
- 'Nextcloud Talk API': 'index.md'
|
||||
- 'System requirements': 'system-requirements.md'
|
||||
- 'Call experience': 'call-experience.md'
|
||||
- Constants: 'constants.md'
|
||||
- Capabilities: 'capabilities.md'
|
||||
- 'User system requirements': 'user-requirements.md'
|
||||
- 'Administration documentation':
|
||||
- 'Server system requirements': 'system-requirements.md'
|
||||
- 'Configuring coTURN': 'TURN.md'
|
||||
- 'Occ commands': 'occ.md'
|
||||
- 'Commands': 'commands.md'
|
||||
- 'Matterbridge integration': 'matterbridge.md'
|
||||
- 'Developer documentation':
|
||||
- 'Constants': 'constants.md'
|
||||
- 'Capabilities': 'capabilities.md'
|
||||
- 'PHP events': 'events.md'
|
||||
- 'API documentation':
|
||||
- 'Conversations management': 'conversation.md'
|
||||
- 'Participants management': 'participant.md'
|
||||
|
@ -34,7 +42,3 @@ nav:
|
|||
- 'Settings': 'settings.md'
|
||||
- 'Integration by other apps': 'integration.md'
|
||||
- 'Signaling API': 'internal-signaling.md'
|
||||
- Commands: 'commands.md'
|
||||
- 'PHP events': 'events.md'
|
||||
- 'Configuring coTURN': 'TURN.md'
|
||||
- 'Matterbridge integration': 'matterbridge.md'
|
||||
|
|
|
@ -1,198 +1,198 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<files psalm-version="5.2.0@fb685a16df3050d4c18d8a4100fe83abe6458cba">
|
||||
<files psalm-version="5.6.0@e784128902dfe01d489c4123d69918a9f3c1eac5">
|
||||
<file src="lib/AppInfo/Application.php">
|
||||
<UndefinedClass occurrences="2">
|
||||
<UndefinedClass>
|
||||
<code>BeforeTemplateRenderedEvent</code>
|
||||
<code>BeforeTemplateRenderedEvent</code>
|
||||
</UndefinedClass>
|
||||
<UndefinedInterfaceMethod occurrences="1">
|
||||
<UndefinedInterfaceMethod>
|
||||
<code>getSettingsManager</code>
|
||||
</UndefinedInterfaceMethod>
|
||||
</file>
|
||||
<file src="lib/BackgroundJob/CheckReferenceIdColumn.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>SchemaWrapper</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Chat/ChatManager.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>NullCache</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Chat/MessageParser.php">
|
||||
<UndefinedVariable occurrences="1">
|
||||
<UndefinedVariable>
|
||||
<code>$guestNames</code>
|
||||
</UndefinedVariable>
|
||||
</file>
|
||||
<file src="lib/Chat/Parser/SystemMessage.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>\OC_Util</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Command/Add.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Command/AddSamples.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Command/Delete.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Command/ListCommand.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Command/Update.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Developer/UpdateDocs.php">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Monitor/Calls.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Monitor/HasActiveCalls.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Monitor/Room.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Add.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Create.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Delete.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Demote.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Promote.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Remove.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Room/Update.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Signaling/Add.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Signaling/Delete.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Signaling/ListCommand.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Stun/Add.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Stun/Delete.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Stun/ListCommand.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Turn/Add.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Turn/Delete.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/Turn/ListCommand.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/User/Remove.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Command/User/TransferOwnership.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Base</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Config.php">
|
||||
<NullArgument occurrences="1">
|
||||
<NullArgument>
|
||||
<code>null</code>
|
||||
</NullArgument>
|
||||
</file>
|
||||
<file src="lib/Controller/ChatController.php">
|
||||
<InvalidArrayOffset occurrences="1">
|
||||
<code>$commentIdToIndex[$parentId]</code>
|
||||
</InvalidArrayOffset>
|
||||
</file>
|
||||
<file src="lib/Controller/SettingsController.php">
|
||||
<InvalidArgument occurrences="1">
|
||||
<InvalidArgument>
|
||||
<code>SharedStorage::class</code>
|
||||
</InvalidArgument>
|
||||
</file>
|
||||
<file src="lib/Controller/TempAvatarController.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Filesystem</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Files/TemplateLoader.php">
|
||||
<UndefinedClass occurrences="2">
|
||||
<UndefinedClass>
|
||||
<code>LoadSidebar</code>
|
||||
<code>LoadSidebar</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Files/Util.php">
|
||||
<InvalidArgument occurrences="2">
|
||||
<InvalidArgument>
|
||||
<code>$fileId</code>
|
||||
<code>SharedStorage::class</code>
|
||||
</InvalidArgument>
|
||||
</file>
|
||||
<file src="lib/MatterbridgeManager.php">
|
||||
<UndefinedClass occurrences="7">
|
||||
<UndefinedClass>
|
||||
<code>$this->tokenProvider</code>
|
||||
<code>$this->tokenProvider</code>
|
||||
<code>$this->tokenProvider</code>
|
||||
|
@ -203,49 +203,48 @@
|
|||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Middleware/InjectionMiddleware.php">
|
||||
<UndefinedInterfaceMethod occurrences="1">
|
||||
<UndefinedInterfaceMethod>
|
||||
<code>getAnnotationParameter</code>
|
||||
</UndefinedInterfaceMethod>
|
||||
</file>
|
||||
<file src="lib/Migration/Version2001Date20170707115443.php">
|
||||
<InvalidArrayAccess occurrences="1">
|
||||
<InvalidArrayAccess>
|
||||
<code>$return['num_rooms']</code>
|
||||
</InvalidArrayAccess>
|
||||
</file>
|
||||
<file src="lib/Notification/Notifier.php">
|
||||
<InvalidPropertyAssignmentValue occurrences="3">
|
||||
<InvalidPropertyAssignmentValue>
|
||||
<code>$this->participants</code>
|
||||
<code>$this->rooms</code>
|
||||
<code>$this->rooms</code>
|
||||
</InvalidPropertyAssignmentValue>
|
||||
</file>
|
||||
<file src="lib/PublicShare/TemplateLoader.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>BeforeTemplateRenderedEvent</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/PublicShareAuth/TemplateLoader.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>BeforeTemplateRenderedEvent</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Service/AvatarService.php">
|
||||
<UndefinedClass occurrences="2">
|
||||
<UndefinedClass>
|
||||
<code>Filesystem</code>
|
||||
<code>\OC_Image</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Service/RecordingService.php">
|
||||
<UndefinedClass occurrences="2">
|
||||
<code>Filesystem</code>
|
||||
<UndefinedClass>
|
||||
<code>NoUserException</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Share/Listener.php">
|
||||
<InvalidArgument occurrences="1">
|
||||
<InvalidArgument>
|
||||
<code>[self::class, 'listenPreShare']</code>
|
||||
</InvalidArgument>
|
||||
<UndefinedClass occurrences="7">
|
||||
<UndefinedClass>
|
||||
<code>$event->getView()</code>
|
||||
<code>$event->getView()</code>
|
||||
<code>$event->getView()</code>
|
||||
|
@ -256,12 +255,12 @@
|
|||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/Share/RoomShareProvider.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>Cache</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
<file src="lib/TInitialState.php">
|
||||
<UndefinedClass occurrences="1">
|
||||
<UndefinedClass>
|
||||
<code>NoUserException</code>
|
||||
</UndefinedClass>
|
||||
</file>
|
||||
|
|
Загрузка…
Ссылка в новой задаче