Merge branch '0.7.x' of https://github.com/appwrite/appwrite into feat-na-maintenance-task
This commit is contained in:
commit
5e686183c6
26 changed files with 159 additions and 128 deletions
|
@ -227,7 +227,7 @@ Before running the command, make sure you have proper write permissions to the A
|
||||||
**Build for multicore**
|
**Build for multicore**
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 -t appwrite/multicore:0.0.0 --push
|
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,linux/ppc64le,linux/s390x -t appwrite/appwrite:dev --push .
|
||||||
```
|
```
|
||||||
|
|
||||||
## Tests
|
## Tests
|
||||||
|
|
|
@ -7,10 +7,10 @@
|
||||||
<br />
|
<br />
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
[![Hacktoberfest](https://badgen.net/badge/hacktoberfest/friendly/pink)](CONTRIBUTING.md)
|
<!--[![Hacktoberfest](https://badgen.net/badge/hacktoberfest/friendly/pink)](CONTRIBUTING.md)-->
|
||||||
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord)](https://appwrite.io/discord)
|
[![Discord](https://img.shields.io/discord/564160730845151244?label=discord)](https://appwrite.io/discord)
|
||||||
[![Docker Pulls](https://badgen.net/docker/pulls/appwrite/appwrite)](https://hub.docker.com/r/appwrite/appwrite)
|
[![Docker Pulls](https://badgen.net/docker/pulls/appwrite/appwrite)](https://hub.docker.com/r/appwrite/appwrite)
|
||||||
[![Travis CI](https://badgen.net/travis/appwrite/appwrite?label=build)](https://travis-ci.com/appwrite/appwrite)
|
[![Build Status](https://travis-ci.com/appwrite/appwrite.svg?branch=master)](https://travis-ci.com/appwrite/appwrite)
|
||||||
[![Twitter Account](https://badgen.net/twitter/follow/appwrite_io?label=twitter)](https://twitter.com/appwrite_io)
|
[![Twitter Account](https://badgen.net/twitter/follow/appwrite_io?label=twitter)](https://twitter.com/appwrite_io)
|
||||||
[![Follow Appwrite on StackShare](https://badgen.net/badge/follow%20on/stackshare/blue)](https://stackshare.io/appwrite)
|
[![Follow Appwrite on StackShare](https://badgen.net/badge/follow%20on/stackshare/blue)](https://stackshare.io/appwrite)
|
||||||
|
|
||||||
|
@ -18,10 +18,10 @@ Appwrite is an end-to-end backend server for Web, Mobile, Native, or Backend app
|
||||||
|
|
||||||
Using Appwrite, you can easily integrate your app with user authentication & multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, schedule CRON tasks, and [more services](https://appwrite.io/docs).
|
Using Appwrite, you can easily integrate your app with user authentication & multiple sign-in methods, a database for storing and querying users and team data, storage and file management, image manipulation, schedule CRON tasks, and [more services](https://appwrite.io/docs).
|
||||||
|
|
||||||
Find out more at: [https://appwrite.io](https://appwrite.io)
|
|
||||||
|
|
||||||
![Appwrite](public/images/github.png)
|
![Appwrite](public/images/github.png)
|
||||||
|
|
||||||
|
Find out more at: [https://appwrite.io](https://appwrite.io)
|
||||||
|
|
||||||
Table of Contents:
|
Table of Contents:
|
||||||
|
|
||||||
- [Installation](#installation)
|
- [Installation](#installation)
|
||||||
|
|
|
@ -17,6 +17,7 @@ return [
|
||||||
'name' => 'Web',
|
'name' => 'Web',
|
||||||
'version' => '1.1.0',
|
'version' => '1.1.0',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-js',
|
'url' => 'https://github.com/appwrite/sdk-for-js',
|
||||||
|
'package' => 'https://www.npmjs.com/package/appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -32,6 +33,7 @@ return [
|
||||||
'name' => 'Flutter',
|
'name' => 'Flutter',
|
||||||
'version' => '0.3.0-dev.2',
|
'version' => '0.3.0-dev.2',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-flutter',
|
'url' => 'https://github.com/appwrite/sdk-for-flutter',
|
||||||
|
'package' => 'https://pub.dev/packages/appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -47,6 +49,7 @@ return [
|
||||||
'name' => 'Flutter (Dev Channel)',
|
'name' => 'Flutter (Dev Channel)',
|
||||||
'version' => '0.3.2',
|
'version' => '0.3.2',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-flutter-dev',
|
'url' => 'https://github.com/appwrite/sdk-for-flutter-dev',
|
||||||
|
'package' => '',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => true,
|
'dev' => true,
|
||||||
|
@ -61,6 +64,7 @@ return [
|
||||||
'key' => 'swift',
|
'key' => 'swift',
|
||||||
'name' => 'Swift',
|
'name' => 'Swift',
|
||||||
'url' => '',
|
'url' => '',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -75,6 +79,7 @@ return [
|
||||||
'key' => 'objective-c',
|
'key' => 'objective-c',
|
||||||
'name' => 'Objective C',
|
'name' => 'Objective C',
|
||||||
'url' => '',
|
'url' => '',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -89,6 +94,7 @@ return [
|
||||||
'key' => 'kotlin',
|
'key' => 'kotlin',
|
||||||
'name' => 'Kotlin',
|
'name' => 'Kotlin',
|
||||||
'url' => '',
|
'url' => '',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -127,6 +133,7 @@ return [
|
||||||
'name' => 'Console',
|
'name' => 'Console',
|
||||||
'version' => '1.0.0',
|
'version' => '1.0.0',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-console',
|
'url' => 'https://github.com/appwrite/sdk-for-console',
|
||||||
|
'package' => '',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -152,6 +159,7 @@ return [
|
||||||
'name' => 'Node.js',
|
'name' => 'Node.js',
|
||||||
'version' => '1.1.0',
|
'version' => '1.1.0',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-node',
|
'url' => 'https://github.com/appwrite/sdk-for-node',
|
||||||
|
'package' => 'https://www.npmjs.com/package/node-appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -167,6 +175,7 @@ return [
|
||||||
'name' => 'Deno',
|
'name' => 'Deno',
|
||||||
'version' => '0.0.2',
|
'version' => '0.0.2',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-deno',
|
'url' => 'https://github.com/appwrite/sdk-for-deno',
|
||||||
|
'package' => 'https://deno.land/x/appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -182,6 +191,7 @@ return [
|
||||||
'name' => 'PHP',
|
'name' => 'PHP',
|
||||||
'version' => '1.1.0',
|
'version' => '1.1.0',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-php',
|
'url' => 'https://github.com/appwrite/sdk-for-php',
|
||||||
|
'package' => 'https://packagist.org/packages/appwrite/appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => false,
|
'beta' => false,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -197,6 +207,7 @@ return [
|
||||||
'name' => 'Python',
|
'name' => 'Python',
|
||||||
'version' => '0.0.6',
|
'version' => '0.0.6',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-python',
|
'url' => 'https://github.com/appwrite/sdk-for-python',
|
||||||
|
'package' => 'https://pypi.org/project/appwrite/',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -212,6 +223,7 @@ return [
|
||||||
'name' => 'Ruby',
|
'name' => 'Ruby',
|
||||||
'version' => '1.0.11',
|
'version' => '1.0.11',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-ruby',
|
'url' => 'https://github.com/appwrite/sdk-for-ruby',
|
||||||
|
'package' => 'https://rubygems.org/gems/appwrite',
|
||||||
'enabled' => true,
|
'enabled' => true,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -227,6 +239,7 @@ return [
|
||||||
'name' => 'Go',
|
'name' => 'Go',
|
||||||
'version' => '0.0.7',
|
'version' => '0.0.7',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-go',
|
'url' => 'https://github.com/appwrite/sdk-for-go',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -242,6 +255,7 @@ return [
|
||||||
'name' => 'Java',
|
'name' => 'Java',
|
||||||
'version' => '0.0.2',
|
'version' => '0.0.2',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-java',
|
'url' => 'https://github.com/appwrite/sdk-for-java',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
@ -257,6 +271,7 @@ return [
|
||||||
'name' => 'Dart',
|
'name' => 'Dart',
|
||||||
'version' => '0.0.1',
|
'version' => '0.0.1',
|
||||||
'url' => 'https://github.com/appwrite/sdk-for-dart',
|
'url' => 'https://github.com/appwrite/sdk-for-dart',
|
||||||
|
'package' => '',
|
||||||
'enabled' => false,
|
'enabled' => false,
|
||||||
'beta' => true,
|
'beta' => true,
|
||||||
'dev' => false,
|
'dev' => false,
|
||||||
|
|
|
@ -110,9 +110,6 @@ App::get('/v1/database/collections')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'name',
|
|
||||||
'orderType' => $orderType,
|
|
||||||
'orderCast' => 'string',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_COLLECTIONS,
|
'$collection='.Database::SYSTEM_COLLECTION_COLLECTIONS,
|
||||||
|
@ -401,7 +398,7 @@ App::get('/v1/database/collections/:collectionId/documents')
|
||||||
->param('filters', [], new ArrayList(new Text(128)), 'Array of filter strings. Each filter is constructed from a key name, comparison operator (=, !=, >, <, <=, >=) and a value. You can also use a dot (.) separator in attribute names to filter by child document attributes. Examples: \'name=John Doe\' or \'category.$id>=5bed2d152c362\'.', true)
|
->param('filters', [], new ArrayList(new Text(128)), 'Array of filter strings. Each filter is constructed from a key name, comparison operator (=, !=, >, <, <=, >=) and a value. You can also use a dot (.) separator in attribute names to filter by child document attributes. Examples: \'name=John Doe\' or \'category.$id>=5bed2d152c362\'.', true)
|
||||||
->param('limit', 25, new Range(0, 100), 'Maximum number of documents to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
|
->param('limit', 25, new Range(0, 100), 'Maximum number of documents to return in response. Use this value to manage pagination. By default will return maximum 25 results. Maximum of 100 results allowed per request.', true)
|
||||||
->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
|
->param('offset', 0, new Range(0, 900000000), 'Offset value. The default value is 0. Use this param to manage pagination.', true)
|
||||||
->param('orderField', '$id', new Text(128), 'Document field that results will be sorted by.', true)
|
->param('orderField', '', new Text(128), 'Document field that results will be sorted by.', true)
|
||||||
->param('orderType', 'ASC', new WhiteList(['DESC', 'ASC'], true), 'Order direction. Possible values are DESC for descending order, or ASC for ascending order.', true)
|
->param('orderType', 'ASC', new WhiteList(['DESC', 'ASC'], true), 'Order direction. Possible values are DESC for descending order, or ASC for ascending order.', true)
|
||||||
->param('orderCast', 'string', new WhiteList(['int', 'string', 'date', 'time', 'datetime'], true), 'Order field type casting. Possible values are int, string, date, time or datetime. The database will attempt to cast the order field to the value you pass here. The default value is a string.', true)
|
->param('orderCast', 'string', new WhiteList(['int', 'string', 'date', 'time', 'datetime'], true), 'Order field type casting. Possible values are int, string, date, time or datetime. The database will attempt to cast the order field to the value you pass here. The default value is a string.', true)
|
||||||
->param('search', '', new Text(256), 'Search query. Enter any free text search. The database will try to find a match against all document attributes and children. Max length: 256 chars.', true)
|
->param('search', '', new Text(256), 'Search query. Enter any free text search. The database will try to find a match against all document attributes and children. Max length: 256 chars.', true)
|
||||||
|
|
|
@ -88,9 +88,6 @@ App::get('/v1/functions')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'dateCreated',
|
|
||||||
'orderType' => $orderType,
|
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_FUNCTIONS,
|
'$collection='.Database::SYSTEM_COLLECTION_FUNCTIONS,
|
||||||
|
@ -484,9 +481,6 @@ App::get('/v1/functions/:functionId/tags')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'dateCreated',
|
|
||||||
'orderType' => $orderType,
|
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_TAGS,
|
'$collection='.Database::SYSTEM_COLLECTION_TAGS,
|
||||||
|
@ -682,9 +676,6 @@ App::get('/v1/functions/:functionId/executions')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'dateCreated',
|
|
||||||
'orderType' => $orderType,
|
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_EXECUTIONS,
|
'$collection='.Database::SYSTEM_COLLECTION_EXECUTIONS,
|
||||||
|
|
|
@ -109,9 +109,6 @@ App::get('/v1/projects')
|
||||||
$results = $consoleDB->getCollection([
|
$results = $consoleDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'registration',
|
|
||||||
'orderType' => $orderType,
|
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_PROJECTS,
|
'$collection='.Database::SYSTEM_COLLECTION_PROJECTS,
|
||||||
|
|
|
@ -178,9 +178,7 @@ App::get('/v1/storage/files')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'dateCreated',
|
|
||||||
'orderType' => $orderType,
|
'orderType' => $orderType,
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_FILES,
|
'$collection='.Database::SYSTEM_COLLECTION_FILES,
|
||||||
|
|
|
@ -115,9 +115,7 @@ App::get('/v1/teams')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'dateCreated',
|
|
||||||
'orderType' => $orderType,
|
'orderType' => $orderType,
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_TEAMS,
|
'$collection='.Database::SYSTEM_COLLECTION_TEAMS,
|
||||||
|
@ -464,9 +462,7 @@ App::get('/v1/teams/:teamId/memberships')
|
||||||
$memberships = $projectDB->getCollection([
|
$memberships = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'joined',
|
|
||||||
'orderType' => $orderType,
|
'orderType' => $orderType,
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS,
|
'$collection='.Database::SYSTEM_COLLECTION_MEMBERSHIPS,
|
||||||
|
|
|
@ -97,9 +97,7 @@ App::get('/v1/users')
|
||||||
$results = $projectDB->getCollection([
|
$results = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'registration',
|
|
||||||
'orderType' => $orderType,
|
'orderType' => $orderType,
|
||||||
'orderCast' => 'int',
|
|
||||||
'search' => $search,
|
'search' => $search,
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_USERS,
|
'$collection='.Database::SYSTEM_COLLECTION_USERS,
|
||||||
|
|
|
@ -400,7 +400,7 @@ App::error(function ($error, $utopia, $request, $response, $layout, $project) {
|
||||||
}
|
}
|
||||||
|
|
||||||
$response->dynamic(new Document($output),
|
$response->dynamic(new Document($output),
|
||||||
$utopia->isDevelopment() ? Response::MODEL_ERROR_DEV : Response::MODEL_LOCALE);
|
$utopia->isDevelopment() ? Response::MODEL_ERROR_DEV : Response::MODEL_ERROR);
|
||||||
}, ['error', 'utopia', 'request', 'response', 'layout', 'project']);
|
}, ['error', 'utopia', 'request', 'response', 'layout', 'project']);
|
||||||
|
|
||||||
App::get('/manifest.json')
|
App::get('/manifest.json')
|
||||||
|
|
|
@ -14,6 +14,7 @@ App::get('/v1/mock/tests/foo')
|
||||||
->desc('Mock a get request for SDK tests')
|
->desc('Mock a get request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'foo')
|
->label('sdk.namespace', 'foo')
|
||||||
->label('sdk.method', 'get')
|
->label('sdk.method', 'get')
|
||||||
->label('sdk.description', 'Mock a get request for SDK tests')
|
->label('sdk.description', 'Mock a get request for SDK tests')
|
||||||
|
@ -28,6 +29,7 @@ App::post('/v1/mock/tests/foo')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'foo')
|
->label('sdk.namespace', 'foo')
|
||||||
->label('sdk.method', 'post')
|
->label('sdk.method', 'post')
|
||||||
->label('sdk.description', 'Mock a post request for SDK tests')
|
->label('sdk.description', 'Mock a post request for SDK tests')
|
||||||
|
@ -42,6 +44,7 @@ App::patch('/v1/mock/tests/foo')
|
||||||
->desc('Mock a patch request for SDK tests')
|
->desc('Mock a patch request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'foo')
|
->label('sdk.namespace', 'foo')
|
||||||
->label('sdk.method', 'patch')
|
->label('sdk.method', 'patch')
|
||||||
->label('sdk.description', 'Mock a get request for SDK tests')
|
->label('sdk.description', 'Mock a get request for SDK tests')
|
||||||
|
@ -56,6 +59,7 @@ App::put('/v1/mock/tests/foo')
|
||||||
->desc('Mock a put request for SDK tests')
|
->desc('Mock a put request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'foo')
|
->label('sdk.namespace', 'foo')
|
||||||
->label('sdk.method', 'put')
|
->label('sdk.method', 'put')
|
||||||
->label('sdk.description', 'Mock a put request for SDK tests')
|
->label('sdk.description', 'Mock a put request for SDK tests')
|
||||||
|
@ -70,6 +74,7 @@ App::delete('/v1/mock/tests/foo')
|
||||||
->desc('Mock a delete request for SDK tests')
|
->desc('Mock a delete request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'foo')
|
->label('sdk.namespace', 'foo')
|
||||||
->label('sdk.method', 'delete')
|
->label('sdk.method', 'delete')
|
||||||
->label('sdk.description', 'Mock a delete request for SDK tests')
|
->label('sdk.description', 'Mock a delete request for SDK tests')
|
||||||
|
@ -84,6 +89,7 @@ App::get('/v1/mock/tests/bar')
|
||||||
->desc('Mock a get request for SDK tests')
|
->desc('Mock a get request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'bar')
|
->label('sdk.namespace', 'bar')
|
||||||
->label('sdk.method', 'get')
|
->label('sdk.method', 'get')
|
||||||
->label('sdk.description', 'Mock a get request for SDK tests')
|
->label('sdk.description', 'Mock a get request for SDK tests')
|
||||||
|
@ -98,6 +104,7 @@ App::post('/v1/mock/tests/bar')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'bar')
|
->label('sdk.namespace', 'bar')
|
||||||
->label('sdk.method', 'post')
|
->label('sdk.method', 'post')
|
||||||
->label('sdk.description', 'Mock a post request for SDK tests')
|
->label('sdk.description', 'Mock a post request for SDK tests')
|
||||||
|
@ -112,6 +119,7 @@ App::patch('/v1/mock/tests/bar')
|
||||||
->desc('Mock a patch request for SDK tests')
|
->desc('Mock a patch request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'bar')
|
->label('sdk.namespace', 'bar')
|
||||||
->label('sdk.method', 'patch')
|
->label('sdk.method', 'patch')
|
||||||
->label('sdk.description', 'Mock a get request for SDK tests')
|
->label('sdk.description', 'Mock a get request for SDK tests')
|
||||||
|
@ -126,6 +134,7 @@ App::put('/v1/mock/tests/bar')
|
||||||
->desc('Mock a put request for SDK tests')
|
->desc('Mock a put request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'bar')
|
->label('sdk.namespace', 'bar')
|
||||||
->label('sdk.method', 'put')
|
->label('sdk.method', 'put')
|
||||||
->label('sdk.description', 'Mock a put request for SDK tests')
|
->label('sdk.description', 'Mock a put request for SDK tests')
|
||||||
|
@ -140,6 +149,7 @@ App::delete('/v1/mock/tests/bar')
|
||||||
->desc('Mock a delete request for SDK tests')
|
->desc('Mock a delete request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'bar')
|
->label('sdk.namespace', 'bar')
|
||||||
->label('sdk.method', 'delete')
|
->label('sdk.method', 'delete')
|
||||||
->label('sdk.description', 'Mock a delete request for SDK tests')
|
->label('sdk.description', 'Mock a delete request for SDK tests')
|
||||||
|
@ -154,6 +164,7 @@ App::post('/v1/mock/tests/general/upload')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'upload')
|
->label('sdk.method', 'upload')
|
||||||
->label('sdk.description', 'Mock a delete request for SDK tests')
|
->label('sdk.description', 'Mock a delete request for SDK tests')
|
||||||
|
@ -194,6 +205,7 @@ App::get('/v1/mock/tests/general/redirect')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'redirect')
|
->label('sdk.method', 'redirect')
|
||||||
->label('sdk.description', 'Mock a redirect request for SDK tests')
|
->label('sdk.description', 'Mock a redirect request for SDK tests')
|
||||||
|
@ -201,13 +213,14 @@ App::get('/v1/mock/tests/general/redirect')
|
||||||
->action(function ($response) {
|
->action(function ($response) {
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
|
|
||||||
$response->redirect('/v1/mock/tests/general/redirected');
|
$response->redirect('/v1/mock/tests/general/redirect/done');
|
||||||
}, ['response']);
|
}, ['response']);
|
||||||
|
|
||||||
App::get('/v1/mock/tests/general/redirected')
|
App::get('/v1/mock/tests/general/redirect/done')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'redirected')
|
->label('sdk.method', 'redirected')
|
||||||
->label('sdk.description', 'Mock a redirected request for SDK tests')
|
->label('sdk.description', 'Mock a redirected request for SDK tests')
|
||||||
|
@ -219,6 +232,7 @@ App::get('/v1/mock/tests/general/set-cookie')
|
||||||
->desc('Mock a cookie request for SDK tests')
|
->desc('Mock a cookie request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'setCookie')
|
->label('sdk.method', 'setCookie')
|
||||||
->label('sdk.description', 'Mock a set cookie request for SDK tests')
|
->label('sdk.description', 'Mock a set cookie request for SDK tests')
|
||||||
|
@ -233,6 +247,7 @@ App::get('/v1/mock/tests/general/get-cookie')
|
||||||
->desc('Mock a cookie request for SDK tests')
|
->desc('Mock a cookie request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'getCookie')
|
->label('sdk.method', 'getCookie')
|
||||||
->label('sdk.description', 'Mock a get cookie request for SDK tests')
|
->label('sdk.description', 'Mock a get cookie request for SDK tests')
|
||||||
|
@ -249,6 +264,7 @@ App::get('/v1/mock/tests/general/empty')
|
||||||
->desc('Mock a post request for SDK tests')
|
->desc('Mock a post request for SDK tests')
|
||||||
->groups(['mock'])
|
->groups(['mock'])
|
||||||
->label('scope', 'public')
|
->label('scope', 'public')
|
||||||
|
->label('sdk.platform', [APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER])
|
||||||
->label('sdk.namespace', 'general')
|
->label('sdk.namespace', 'general')
|
||||||
->label('sdk.method', 'empty')
|
->label('sdk.method', 'empty')
|
||||||
->label('sdk.description', 'Mock a redirected request for SDK tests')
|
->label('sdk.description', 'Mock a redirected request for SDK tests')
|
||||||
|
|
|
@ -7,6 +7,7 @@ use Utopia\App;
|
||||||
use Utopia\View;
|
use Utopia\View;
|
||||||
use Utopia\Config\Config;
|
use Utopia\Config\Config;
|
||||||
use Utopia\Exception;
|
use Utopia\Exception;
|
||||||
|
use Utopia\Validator\Range;
|
||||||
use Utopia\Validator\WhiteList;
|
use Utopia\Validator\WhiteList;
|
||||||
|
|
||||||
App::init(function ($layout) {
|
App::init(function ($layout) {
|
||||||
|
@ -188,7 +189,8 @@ App::get('/specs/:format')
|
||||||
->label('docs', false)
|
->label('docs', false)
|
||||||
->param('format', 'swagger2', new WhiteList(['swagger2', 'open-api3'], true), 'Spec format.', true)
|
->param('format', 'swagger2', new WhiteList(['swagger2', 'open-api3'], true), 'Spec format.', true)
|
||||||
->param('platform', APP_PLATFORM_CLIENT, new WhiteList([APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER, APP_PLATFORM_CONSOLE], true), 'Choose target platform.', true)
|
->param('platform', APP_PLATFORM_CLIENT, new WhiteList([APP_PLATFORM_CLIENT, APP_PLATFORM_SERVER, APP_PLATFORM_CONSOLE], true), 'Choose target platform.', true)
|
||||||
->action(function ($format, $platform, $utopia, $request, $response) {
|
->param('tests', 0, function () {return new Range(0, 1);}, 'Include only test services.', true)
|
||||||
|
->action(function ($format, $platform, $tests, $utopia, $request, $response) {
|
||||||
/** @var Utopia\App $utopia */
|
/** @var Utopia\App $utopia */
|
||||||
/** @var Utopia\Swoole\Request $request */
|
/** @var Utopia\Swoole\Request $request */
|
||||||
/** @var Appwrite\Utopia\Response $response */
|
/** @var Appwrite\Utopia\Response $response */
|
||||||
|
@ -277,7 +279,11 @@ App::get('/specs/:format')
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($route->getLabel('sdk.mock', false)) {
|
if ($route->getLabel('sdk.mock', false) && !$tests) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!$route->getLabel('sdk.mock', false) && $tests) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -108,8 +108,9 @@ $http->on('request', function (SwooleRequest $swooleRequest, SwooleResponse $swo
|
||||||
if(App::isDevelopment()) {
|
if(App::isDevelopment()) {
|
||||||
$swooleResponse->end('error: '.$th->getMessage());
|
$swooleResponse->end('error: '.$th->getMessage());
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
$swooleResponse->end('500: Server Error');
|
$swooleResponse->end('500: Server Error');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -143,9 +143,9 @@ $cli
|
||||||
$stdout = '';
|
$stdout = '';
|
||||||
$stderr = '';
|
$stderr = '';
|
||||||
|
|
||||||
Console::log("Running \"docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans\"");
|
Console::log("Running \"docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes\"");
|
||||||
|
|
||||||
$exit = Console::execute("docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans", '', $stdout, $stderr);
|
$exit = Console::execute("docker-compose -f {$path}/docker-compose.yml up -d --remove-orphans --renew-anon-volumes", '', $stdout, $stderr);
|
||||||
|
|
||||||
if ($exit !== 0) {
|
if ($exit !== 0) {
|
||||||
Console::error("Failed to install Appwrite dockers");
|
Console::error("Failed to install Appwrite dockers");
|
||||||
|
|
|
@ -30,9 +30,7 @@ $callbacks = [
|
||||||
$all = $projectDB->getCollection([
|
$all = $projectDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => '$uid',
|
|
||||||
'orderType' => 'DESC',
|
'orderType' => 'DESC',
|
||||||
'orderCast' => 'string',
|
|
||||||
]);
|
]);
|
||||||
|
|
||||||
$sum = \count($all);
|
$sum = \count($all);
|
||||||
|
@ -215,9 +213,6 @@ $cli
|
||||||
$projects = $consoleDB->getCollection([
|
$projects = $consoleDB->getCollection([
|
||||||
'limit' => $limit,
|
'limit' => $limit,
|
||||||
'offset' => $offset,
|
'offset' => $offset,
|
||||||
'orderField' => 'name',
|
|
||||||
'orderType' => 'ASC',
|
|
||||||
'orderCast' => 'string',
|
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_PROJECTS,
|
'$collection='.Database::SYSTEM_COLLECTION_PROJECTS,
|
||||||
],
|
],
|
||||||
|
|
|
@ -13,6 +13,8 @@ services:
|
||||||
- --providers.file.directory=/storage/config
|
- --providers.file.directory=/storage/config
|
||||||
- --providers.file.watch=true
|
- --providers.file.watch=true
|
||||||
- --providers.docker=true
|
- --providers.docker=true
|
||||||
|
- --providers.docker.exposedByDefault=false
|
||||||
|
- --providers.docker.constraints=Label(`traefik.constraint-label-stack`,`appwrite`)
|
||||||
- --entrypoints.web.address=:80
|
- --entrypoints.web.address=:80
|
||||||
- --entrypoints.websecure.address=:443
|
- --entrypoints.websecure.address=:443
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
@ -36,6 +38,8 @@ services:
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
labels:
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.constraint-label-stack=appwrite
|
||||||
- traefik.http.routers.appwrite.rule=PathPrefix(`/`)
|
- traefik.http.routers.appwrite.rule=PathPrefix(`/`)
|
||||||
- traefik.http.routers.appwrite-secure.rule=PathPrefix(`/`)
|
- traefik.http.routers.appwrite-secure.rule=PathPrefix(`/`)
|
||||||
- traefik.http.routers.appwrite-secure.tls=true
|
- traefik.http.routers.appwrite-secure.tls=true
|
||||||
|
@ -288,7 +292,7 @@ services:
|
||||||
- _APP_REDIS_PORT
|
- _APP_REDIS_PORT
|
||||||
|
|
||||||
mariadb:
|
mariadb:
|
||||||
image: appwrite/mariadb:1.1.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||||
container_name: appwrite-mariadb
|
container_name: appwrite-mariadb
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
|
|
|
@ -88,9 +88,6 @@ class CertificatesV1
|
||||||
$certificate = $consoleDB->getCollectionFirst([
|
$certificate = $consoleDB->getCollectionFirst([
|
||||||
'limit' => 1,
|
'limit' => 1,
|
||||||
'offset' => 0,
|
'offset' => 0,
|
||||||
'orderField' => 'id',
|
|
||||||
'orderType' => 'ASC',
|
|
||||||
'orderCast' => 'string',
|
|
||||||
'filters' => [
|
'filters' => [
|
||||||
'$collection='.Database::SYSTEM_COLLECTION_CERTIFICATES,
|
'$collection='.Database::SYSTEM_COLLECTION_CERTIFICATES,
|
||||||
'domain='.$domain->get(),
|
'domain='.$domain->get(),
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
},
|
},
|
||||||
"require-dev": {
|
"require-dev": {
|
||||||
"swoole/ide-helper": "4.5.5",
|
"swoole/ide-helper": "4.5.5",
|
||||||
"appwrite/sdk-generator": "master",
|
"appwrite/sdk-generator": "0.2.1",
|
||||||
"phpunit/phpunit": "9.4.2",
|
"phpunit/phpunit": "9.4.2",
|
||||||
"vimeo/psalm": "4.1.1"
|
"vimeo/psalm": "4.1.1"
|
||||||
},
|
},
|
||||||
|
|
40
composer.lock
generated
40
composer.lock
generated
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "3e96a4fbfbff083f2ca166fcfa6fbbbd",
|
"content-hash": "43a23882f28fd91a870f7b9e217b2ec3",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "appwrite/php-clamav",
|
"name": "appwrite/php-clamav",
|
||||||
|
@ -1158,9 +1158,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/abuse/issues",
|
"issues": "https://github.com/utopia-php/abuse/issues",
|
||||||
"source": "https://github.com/utopia-php/abuse/tree/0.3.1"
|
"source": "https://github.com/utopia-php/abuse/tree/0.2.2"
|
||||||
},
|
},
|
||||||
"time": "2020-12-21T17:28:03+00:00"
|
"time": "2020-10-23T06:51:42+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/audit",
|
"name": "utopia-php/audit",
|
||||||
|
@ -1210,9 +1210,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/audit/issues",
|
"issues": "https://github.com/utopia-php/audit/issues",
|
||||||
"source": "https://github.com/utopia-php/audit/tree/0.5.1"
|
"source": "https://github.com/utopia-php/audit/tree/0.3.2"
|
||||||
},
|
},
|
||||||
"time": "2020-12-21T17:28:53+00:00"
|
"time": "2020-10-23T08:09:44+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/cache",
|
"name": "utopia-php/cache",
|
||||||
|
@ -1315,9 +1315,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/utopia-php/cli/issues",
|
"issues": "https://github.com/utopia-php/cli/issues",
|
||||||
"source": "https://github.com/utopia-php/cli/tree/0.8"
|
"source": "https://github.com/utopia-php/cli/tree/0.7.2"
|
||||||
},
|
},
|
||||||
"time": "2020-12-14T06:31:42+00:00"
|
"time": "2020-10-23T13:34:41+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "utopia-php/config",
|
"name": "utopia-php/config",
|
||||||
|
@ -1858,11 +1858,11 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "appwrite/sdk-generator",
|
"name": "appwrite/sdk-generator",
|
||||||
"version": "dev-master",
|
"version": "0.2.1",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/appwrite/sdk-generator",
|
"url": "https://github.com/appwrite/sdk-generator",
|
||||||
"reference": "e78d94eb1bc538e988d7e45afca7304a98ffc3f1"
|
"reference": "9eb9c298c5db97ea2918bbbf6bd2830312e5330c"
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
"ext-curl": "*",
|
"ext-curl": "*",
|
||||||
|
@ -1893,7 +1893,7 @@
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
"description": "Appwrite PHP library for generating API SDKs for multiple programming languages and platforms",
|
||||||
"time": "2020-11-11T09:53:31+00:00"
|
"time": "2020-12-23T16:00:49+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "composer/package-versions-deprecated",
|
"name": "composer/package-versions-deprecated",
|
||||||
|
@ -2324,16 +2324,16 @@
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "matthiasmullie/minify",
|
"name": "matthiasmullie/minify",
|
||||||
"version": "1.3.63",
|
"version": "1.3.64",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/matthiasmullie/minify.git",
|
"url": "https://github.com/matthiasmullie/minify.git",
|
||||||
"reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117"
|
"reference": "38f9d58c739687e269f46c6dff4647de9e2eb855"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/matthiasmullie/minify/zipball/9ba1b459828adc13430f4dd6c49dae4950dc4117",
|
"url": "https://api.github.com/repos/matthiasmullie/minify/zipball/38f9d58c739687e269f46c6dff4647de9e2eb855",
|
||||||
"reference": "9ba1b459828adc13430f4dd6c49dae4950dc4117",
|
"reference": "38f9d58c739687e269f46c6dff4647de9e2eb855",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -2382,9 +2382,9 @@
|
||||||
],
|
],
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/matthiasmullie/minify/issues",
|
"issues": "https://github.com/matthiasmullie/minify/issues",
|
||||||
"source": "https://github.com/matthiasmullie/minify/tree/1.3.63"
|
"source": "https://github.com/matthiasmullie/minify/tree/1.3.64"
|
||||||
},
|
},
|
||||||
"time": "2020-01-21T20:21:08+00:00"
|
"time": "2020-12-23T13:37:53+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "matthiasmullie/path-converter",
|
"name": "matthiasmullie/path-converter",
|
||||||
|
@ -5091,12 +5091,12 @@
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/symfony/service-contracts.git",
|
"url": "https://github.com/symfony/service-contracts.git",
|
||||||
"reference": "0aeee2f70f4550e6c48c9a796d98f5ceda58dfda"
|
"reference": "5c448a39281b671be2cc8d208e6df75ac2d4b366"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/0aeee2f70f4550e6c48c9a796d98f5ceda58dfda",
|
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/5c448a39281b671be2cc8d208e6df75ac2d4b366",
|
||||||
"reference": "0aeee2f70f4550e6c48c9a796d98f5ceda58dfda",
|
"reference": "5c448a39281b671be2cc8d208e6df75ac2d4b366",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
|
@ -5164,7 +5164,7 @@
|
||||||
"type": "tidelift"
|
"type": "tidelift"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"time": "2020-10-14T17:08:19+00:00"
|
"time": "2020-12-23T15:38:30+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "symfony/string",
|
"name": "symfony/string",
|
||||||
|
|
|
@ -88,7 +88,7 @@ services:
|
||||||
- _APP_SMTP_PORT=25
|
- _APP_SMTP_PORT=25
|
||||||
|
|
||||||
mariadb:
|
mariadb:
|
||||||
image: appwrite/mariadb:1.1.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||||
container_name: appwrite-mariadb
|
container_name: appwrite-mariadb
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
# WARNING!
|
||||||
|
# This is a development version of THE Appwrite docker-compose.yml file.
|
||||||
|
# Avoid using this file in your production environment.
|
||||||
|
# We're exposing here sensetive ports and mounting code volumes for rapid development and debugging of the server stack.
|
||||||
|
# For a production ready compose file please use: https://appwrite.io/docker-compose.yml
|
||||||
|
|
||||||
version: '3'
|
version: '3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
|
@ -10,6 +16,8 @@ services:
|
||||||
- --providers.file.directory=/storage/config
|
- --providers.file.directory=/storage/config
|
||||||
- --providers.file.watch=true
|
- --providers.file.watch=true
|
||||||
- --providers.docker=true
|
- --providers.docker=true
|
||||||
|
- --providers.docker.exposedByDefault=false
|
||||||
|
- --providers.docker.constraints=Label(`traefik.constraint-label-stack`,`appwrite`)
|
||||||
- --entrypoints.web.address=:80
|
- --entrypoints.web.address=:80
|
||||||
- --entrypoints.websecure.address=:443
|
- --entrypoints.websecure.address=:443
|
||||||
- --accesslog=true
|
- --accesslog=true
|
||||||
|
@ -17,7 +25,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
- 8080:8080
|
- 9500:8080
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- appwrite-config:/storage/config:ro
|
- appwrite-config:/storage/config:ro
|
||||||
|
@ -41,6 +49,8 @@ services:
|
||||||
networks:
|
networks:
|
||||||
- appwrite
|
- appwrite
|
||||||
labels:
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.constraint-label-stack=appwrite
|
||||||
- traefik.http.routers.appwrite.rule=PathPrefix(`/`)
|
- traefik.http.routers.appwrite.rule=PathPrefix(`/`)
|
||||||
- traefik.http.routers.appwrite-secure.rule=PathPrefix(`/`)
|
- traefik.http.routers.appwrite-secure.rule=PathPrefix(`/`)
|
||||||
- traefik.http.routers.appwrite-secure.tls=true
|
- traefik.http.routers.appwrite-secure.tls=true
|
||||||
|
@ -314,7 +324,7 @@ services:
|
||||||
- _APP_REDIS_PORT
|
- _APP_REDIS_PORT
|
||||||
|
|
||||||
mariadb:
|
mariadb:
|
||||||
image: appwrite/mariadb:1.1.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||||
container_name: appwrite-mariadb
|
container_name: appwrite-mariadb
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
|
|
61
package-lock.json
generated
61
package-lock.json
generated
|
@ -2928,12 +2928,6 @@
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"optional": true
|
||||||
},
|
},
|
||||||
"ini": {
|
|
||||||
"version": "1.3.5",
|
|
||||||
"bundled": true,
|
|
||||||
"dev": true,
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"is-fullwidth-code-point": {
|
"is-fullwidth-code-point": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"bundled": true,
|
"bundled": true,
|
||||||
|
@ -3461,8 +3455,7 @@
|
||||||
"version": "1.3.0",
|
"version": "1.3.0",
|
||||||
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz",
|
||||||
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
|
"integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"gulp": {
|
"gulp": {
|
||||||
"version": "4.0.2",
|
"version": "4.0.2",
|
||||||
|
@ -4012,9 +4005,9 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"ini": {
|
"ini": {
|
||||||
"version": "1.3.5",
|
"version": "1.3.7",
|
||||||
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz",
|
||||||
"integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
|
"integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"interpret": {
|
"interpret": {
|
||||||
|
@ -4280,7 +4273,6 @@
|
||||||
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz",
|
||||||
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
"integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"is-docker": "^2.0.0"
|
"is-docker": "^2.0.0"
|
||||||
}
|
}
|
||||||
|
@ -6009,6 +6001,15 @@
|
||||||
"signal-exit": "^3.0.0"
|
"signal-exit": "^3.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"lru-cache": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"ls-service-form2json": {
|
"ls-service-form2json": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/ls-service-form2json/-/ls-service-form2json-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/ls-service-form2json/-/ls-service-form2json-1.0.0.tgz",
|
||||||
|
@ -6317,11 +6318,10 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node-notifier": {
|
"node-notifier": {
|
||||||
"version": "8.0.0",
|
"version": "8.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-8.0.1.tgz",
|
||||||
"integrity": "sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==",
|
"integrity": "sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"growly": "^1.3.0",
|
"growly": "^1.3.0",
|
||||||
"is-wsl": "^2.2.0",
|
"is-wsl": "^2.2.0",
|
||||||
|
@ -6332,25 +6332,25 @@
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"semver": {
|
"semver": {
|
||||||
"version": "7.3.2",
|
"version": "7.3.4",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz",
|
||||||
"integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==",
|
"integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true
|
"requires": {
|
||||||
|
"lru-cache": "^6.0.0"
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"uuid": {
|
"uuid": {
|
||||||
"version": "8.3.0",
|
"version": "8.3.2",
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.0.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
"integrity": "sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==",
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"which": {
|
"which": {
|
||||||
"version": "2.0.2",
|
"version": "2.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
|
||||||
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"optional": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"isexe": "^2.0.0"
|
"isexe": "^2.0.0"
|
||||||
}
|
}
|
||||||
|
@ -7317,8 +7317,7 @@
|
||||||
"version": "0.1.1",
|
"version": "0.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz",
|
||||||
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
|
"integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==",
|
||||||
"dev": true,
|
"dev": true
|
||||||
"optional": true
|
|
||||||
},
|
},
|
||||||
"signal-exit": {
|
"signal-exit": {
|
||||||
"version": "3.0.2",
|
"version": "3.0.2",
|
||||||
|
@ -8451,6 +8450,12 @@
|
||||||
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
|
"integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
|
||||||
|
"dev": true
|
||||||
|
},
|
||||||
"yargs": {
|
"yargs": {
|
||||||
"version": "7.1.0",
|
"version": "7.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz",
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 230 KiB After Width: | Height: | Size: 334 KiB |
|
@ -501,7 +501,7 @@ class MySQL extends Adapter
|
||||||
];
|
];
|
||||||
$orderTypeMap = ['DESC', 'ASC'];
|
$orderTypeMap = ['DESC', 'ASC'];
|
||||||
|
|
||||||
$options['orderField'] = (empty($options['orderField'])) ? '$id' : $options['orderField']; // Set default order field
|
$options['orderField'] = (empty($options['orderField'])) ? '' : $options['orderField']; // Set default order field
|
||||||
$options['orderCast'] = (empty($options['orderCast'])) ? 'string' : $options['orderCast']; // Set default order field
|
$options['orderCast'] = (empty($options['orderCast'])) ? 'string' : $options['orderCast']; // Set default order field
|
||||||
|
|
||||||
if (!\array_key_exists($options['orderCast'], $orderCastMap)) {
|
if (!\array_key_exists($options['orderCast'], $orderCastMap)) {
|
||||||
|
@ -567,33 +567,38 @@ class MySQL extends Adapter
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sorting
|
// Sorting
|
||||||
$orderPath = \explode('.', $options['orderField']);
|
if(!empty($options['orderField'])) {
|
||||||
$len = \count($orderPath);
|
$orderPath = \explode('.', $options['orderField']);
|
||||||
$orderKey = 'order_b';
|
$len = \count($orderPath);
|
||||||
$part = $this->getPDO()->quote(\implode('', $orderPath), PDO::PARAM_STR);
|
$orderKey = 'order_b';
|
||||||
$orderSelect = "CASE WHEN {$orderKey}.key = {$part} THEN CAST({$orderKey}.value AS {$orderCastMap[$options['orderCast']]}) END AS sort_ff";
|
$part = $this->getPDO()->quote(\implode('', $orderPath), PDO::PARAM_STR);
|
||||||
|
$orderSelect = "CASE WHEN {$orderKey}.key = {$part} THEN CAST({$orderKey}.value AS {$orderCastMap[$options['orderCast']]}) END AS sort_ff";
|
||||||
|
|
||||||
if (1 === $len) {
|
if (1 === $len) {
|
||||||
//if($path == "''") { // Handle direct attributes queries
|
//if($path == "''") { // Handle direct attributes queries
|
||||||
$sorts[] = 'LEFT JOIN `'.$this->getNamespace().".database.properties` order_b ON a.uid IS NOT NULL AND order_b.documentUid = a.uid AND (order_b.key = {$part})";
|
$sorts[] = 'LEFT JOIN `'.$this->getNamespace().".database.properties` order_b ON a.uid IS NOT NULL AND order_b.documentUid = a.uid AND (order_b.key = {$part})";
|
||||||
} else { // Handle direct child attributes queries
|
} else { // Handle direct child attributes queries
|
||||||
$prev = 'c';
|
$prev = 'c';
|
||||||
$orderKey = 'order_e';
|
$orderKey = 'order_e';
|
||||||
|
|
||||||
foreach ($orderPath as $y => $part) {
|
foreach ($orderPath as $y => $part) {
|
||||||
$part = $this->getPDO()->quote($part, PDO::PARAM_STR);
|
$part = $this->getPDO()->quote($part, PDO::PARAM_STR);
|
||||||
$x = $y - 1;
|
$x = $y - 1;
|
||||||
|
|
||||||
if (0 === $y) { // First key
|
if (0 === $y) { // First key
|
||||||
$sorts[] = 'JOIN `'.$this->getNamespace().".database.relationships` order_c{$y} ON a.uid IS NOT NULL AND order_c{$y}.start = a.uid AND order_c{$y}.key = {$part}";
|
$sorts[] = 'JOIN `'.$this->getNamespace().".database.relationships` order_c{$y} ON a.uid IS NOT NULL AND order_c{$y}.start = a.uid AND order_c{$y}.key = {$part}";
|
||||||
} elseif ($y == $len - 1) { // Last key
|
} elseif ($y == $len - 1) { // Last key
|
||||||
$sorts[] .= 'JOIN `'.$this->getNamespace().".database.properties` order_e ON order_e.documentUid = order_{$prev}{$x}.end AND order_e.key = {$part}";
|
$sorts[] .= 'JOIN `'.$this->getNamespace().".database.properties` order_e ON order_e.documentUid = order_{$prev}{$x}.end AND order_e.key = {$part}";
|
||||||
} else {
|
} else {
|
||||||
$sorts[] .= 'JOIN `'.$this->getNamespace().".database.relationships` order_d{$y} ON order_d{$y}.start = order_{$prev}{$x}.end AND order_d{$y}.key = {$part}";
|
$sorts[] .= 'JOIN `'.$this->getNamespace().".database.relationships` order_d{$y} ON order_d{$y}.start = order_{$prev}{$x}.end AND order_d{$y}.key = {$part}";
|
||||||
$prev = 'd';
|
$prev = 'd';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
$orderSelect = 'a.uid AS sort_ff';
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Workaround for a MySQL bug as reported here:
|
* Workaround for a MySQL bug as reported here:
|
||||||
|
|
|
@ -149,7 +149,7 @@ class Database
|
||||||
'limit' => 15,
|
'limit' => 15,
|
||||||
'search' => '',
|
'search' => '',
|
||||||
'relations' => true,
|
'relations' => true,
|
||||||
'orderField' => '$id',
|
'orderField' => '',
|
||||||
'orderType' => 'ASC',
|
'orderType' => 'ASC',
|
||||||
'orderCast' => 'int',
|
'orderCast' => 'int',
|
||||||
'filters' => [],
|
'filters' => [],
|
||||||
|
|
|
@ -275,7 +275,7 @@ services:
|
||||||
- _APP_REDIS_PORT
|
- _APP_REDIS_PORT
|
||||||
|
|
||||||
mariadb:
|
mariadb:
|
||||||
image: appwrite/mariadb:1.1.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
image: appwrite/mariadb:1.2.0 # fix issues when upgrading using: mysql_upgrade -u root -p
|
||||||
container_name: appwrite-mariadb
|
container_name: appwrite-mariadb
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
|
|
Loading…
Reference in a new issue