diff --git a/.all-contributorsrc b/.all-contributorsrc
index 1a146d8ed1..8d49172872 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -595,6 +595,61 @@
"contributions": [
"code"
]
+ },
+ {
+ "login": "himil-vasava",
+ "name": "Himil Vasava",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/55590415?v=4",
+ "profile": "https://github.com/himil-vasava",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "johnmurray4",
+ "name": "johnmurray4",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/54542562?v=4",
+ "profile": "https://github.com/johnmurray4",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "Jenniline",
+ "name": "Jenniline ",
+ "avatar_url": "https://avatars0.githubusercontent.com/u/39647995?v=4",
+ "profile": "https://github.com/Jenniline",
+ "contributions": [
+ "code"
+ ]
+ },
+ {
+ "login": "rohit645",
+ "name": "Rohit Kumar",
+ "avatar_url": "https://avatars2.githubusercontent.com/u/33249010?v=4",
+ "profile": "http://rohit645.github.io",
+ "contributions": [
+ "bug",
+ "code"
+ ]
+ },
+ {
+ "login": "ljvargh",
+ "name": "ljvargh",
+ "avatar_url": "https://avatars3.githubusercontent.com/u/47359729?v=4",
+ "profile": "https://github.com/ljvargh",
+ "contributions": [
+ "doc"
+ ]
+ },
+ {
+ "login": "individual-it",
+ "name": "Artur Neumann",
+ "avatar_url": "https://avatars1.githubusercontent.com/u/2425577?v=4",
+ "profile": "https://www.jankaritech.com",
+ "contributions": [
+ "infra"
+ ]
}
],
"projectName": "platform",
diff --git a/.env.travis b/.env.travis
index 134375b537..0338a30797 100644
--- a/.env.travis
+++ b/.env.travis
@@ -10,7 +10,7 @@ DB_HOST_REPLICA=127.0.0.1
DB_PORT=3306
DB_DATABASE=ushahidi
DB_USERNAME=travis
-DB_PASSWORD=
+DB_PASSWORD=password
CACHE_DRIVER=array
QUEUE_DRIVER=sync
diff --git a/.travis.yml b/.travis.yml
index 708b806b66..60c845439c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,28 +1,17 @@
-sudo: false
-dist: precise
#notifications:
# slack:
# secure: NxhzhKGYnZYZiWVZM4w1PlZpTy9bbmNlvbqjL+9d4PvK4hFzPwQU12CchhBPeXNGLWBHg/ti6Scn/t5XIS3YJrkk4ydWmJBht5UId8uFZ1A7GCUnNNPTt2RG55lbJJdZSj01rOGZjEQbE5RyckEjgRzhZjdZ+HsjoPaRzWIBrvE=
language: php
php:
-- '7.0'
-- '7.1'
- '7.2'
-- 'nightly'
+- '7.3'
env:
- coverage="--coverage"
- coverage=""
matrix:
exclude:
- - php: '7.1'
+ - php: '7.3'
env: coverage="--coverage"
- - php: '7.2'
- env: coverage="--coverage"
- - php: 'nightly'
- env: coverage="--coverage"
- allow_failures:
- - env: coverage="--coverage"
- - php: 'nightly'
fast_finish: true
cache:
directories:
@@ -31,6 +20,7 @@ services:
- mysql
before_install:
- mysql -e 'CREATE DATABASE ushahidi;'
+- mysql -e "SET PASSWORD FOR travis@localhost = PASSWORD('password')";
- mysql -e "select version();"
- mysql -e "SET GLOBAL sql_mode = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'"
- cp .env.travis .env
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 0000000000..f729abace5
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,103 @@
+; recommended pull command
+;
+; tx pull -a --minimum-perc 1 --mode onlytranslated
+;
+
+[main]
+host = https://www.transifex.com
+
+[ushahidi-v3-api.configphp]
+file_filter = resources/lang//config.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.contactsphp]
+file_filter = resources/lang//contacts.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.csvphp]
+file_filter = resources/lang//csv.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.exportphp]
+file_filter = resources/lang//export.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.form_attributephp]
+file_filter = resources/lang//form_attribute.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.form_contactphp]
+file_filter = resources/lang//form_contact.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.formphp]
+file_filter = resources/lang//form.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.form_rolephp]
+file_filter = resources/lang//form_role.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.hxl_metadataphp]
+file_filter = resources/lang//hxl_metadata.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.layersphp]
+file_filter = resources/lang//layers.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.mediaphp]
+file_filter = resources/lang//media.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.messagephp]
+file_filter = resources/lang//message.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.notificationsphp]
+file_filter = resources/lang//notifications.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.postphp]
+file_filter = resources/lang//post.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.rolephp]
+file_filter = resources/lang//role.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.tagphp]
+file_filter = resources/lang//tag.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.userphp]
+file_filter = resources/lang//user.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.user_settingphp]
+file_filter = resources/lang//user_setting.php
+source_lang = en
+type = PHP_ARRAY
+
+[ushahidi-v3-api.validationphp]
+file_filter = resources/lang//validation.php
+source_lang = en
+type = PHP_ARRAY
+
diff --git a/Dockerfile b/Dockerfile
index 85d6f351ce..f9a2891c4a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ushahidi/php-fpm-nginx:php-7.1
+FROM ushahidi/php-fpm-nginx:php-7.2
WORKDIR /var/www
COPY composer.json ./
diff --git a/app/Http/Controllers/RESTController.php b/app/Http/Controllers/RESTController.php
index 8d951d79e0..dca0357670 100644
--- a/app/Http/Controllers/RESTController.php
+++ b/app/Http/Controllers/RESTController.php
@@ -310,7 +310,7 @@ protected function prepResponse(array $responsePayload = null, Request $request)
if (! in_array($request->method(), $this->cacheableMethods)) {
$response->headers->set('Cache-Control', 'no-cache, no-store, max-age=0, must-revalidate');
}
-
+ $response->headers->set('Content-language', app('translator')->getLocale());
return $response;
}
}
diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php
new file mode 100644
index 0000000000..223198e632
--- /dev/null
+++ b/app/Http/Middleware/SetLocale.php
@@ -0,0 +1,61 @@
+header('Accept-language');
+ if ($langHeader) {
+ $negotiator = new LanguageNegotiator();
+ $priorities = config('language.locales');
+
+ /**
+ * NOTE: the negotiation library does not support providing a list of ordered elements in its
+ * stable version so defaulting to english is the best we can do right now without a more complex
+ * custom class. I'd rather we support the willduran/negotiation library if we go down that path.
+ */
+ $type = $fallback = $this->getPriorityFallback($langHeader, $priorities, 'en');
+ /**
+ * TODO:
+ * decide if we would like to work on extending willduran/negotiation and bring
+ * v3.0.3 to stable so that we have getOrderedElements available if it's still
+ * being maintained (or I guess fork if it is no longer mantained)
+ */
+ $bestLanguage = $negotiator->getBest($langHeader, $priorities);
+ if ($bestLanguage) {
+ $type = $bestLanguage->getType();
+ }
+ app('translator')->setLocale($type);
+ app('translator')->setFallback($fallback);
+ }
+
+ return $next($request);
+ }
+ /**
+ * Find a secondary language as fallback within our list of available lang codes without region
+ * or use the default ('en' normally) if none is available.
+ * When we migrate to v3 of negotiation package we can just use the orderedElements function
+ * and take q=0.x into account easily.
+ */
+ private function getPriorityFallback($languageCode, $locales, $default)
+ {
+ $decision = $default;
+ $splitLangCode = substr($languageCode, 0, 2);
+ if (array_search($splitLangCode, $locales) > -1) {
+ $decision = $splitLangCode;
+ }
+ return $decision;
+ }
+}
diff --git a/bootstrap/lumen.php b/bootstrap/lumen.php
index d81b4c1464..fd78586f22 100644
--- a/bootstrap/lumen.php
+++ b/bootstrap/lumen.php
@@ -25,7 +25,7 @@
// The exception handler class relies on this configuration to be loaded
// in order to provide CORS headers for requests that fail before the middleware stage
$app->configure('cors');
-
+$app->configure('language');
/*
|--------------------------------------------------------------------------
| Register Container Bindings
@@ -61,7 +61,8 @@
$app->middleware([
Ushahidi\App\Multisite\DetectSiteMiddleware::class,
Barryvdh\Cors\HandleCors::class,
- Ushahidi\App\Http\Middleware\MaintenanceMode::class
+ Ushahidi\App\Http\Middleware\MaintenanceMode::class,
+ Ushahidi\App\Http\Middleware\SetLocale::class
]);
$app->routeMiddleware([
diff --git a/captainhook.json b/captainhook.json
index 16dc6e28d0..843dde9b4d 100644
--- a/captainhook.json
+++ b/captainhook.json
@@ -31,7 +31,7 @@
{
"action": "\\Tests\\CaptainHook\\PHPCS",
"options": [
- "--ignore=vendor/*,application/*,modules/*,plugins/*,httpdocs/*,tests/spec/*,migrations/*,bin/*,database/*,resources/views/*",
+ "--ignore=vendor/*,application/*,modules/*,plugins/*,httpdocs/*,tests/spec/*,migrations/*,bin/*,database/*,resources/views/*,resources/lang/*",
"--standard=src/ruleset.xml",
"--tab-width=4"
]
diff --git a/codeship-services.yml b/codeship-services.yml
index 750a8383e1..d555f248c8 100644
--- a/codeship-services.yml
+++ b/codeship-services.yml
@@ -46,8 +46,6 @@ mysql/base: &_mysql_base
- MYSQL_USER=ushahidi
- MYSQL_PASSWORD=ushahidi
- MYSQL_ROOT_PASSWORD=root
-mysql-7.1:
- <<: *_mysql_base
mysql-7.2:
<<: *_mysql_base
mysql-7.3:
@@ -70,19 +68,6 @@ test/base: &_test_defaults
cached: true
default_cache_branch: develop
-test/php-7.1:
- <<: *_test_defaults
- build:
- <<: *_test_build_defaults
- image: test-7.1
- args:
- PHP_MAJOR_VERSION: "7.1"
- environment:
- <<: *_test_env_defaults
- DB_HOST: mysql-7.1
- depends_on:
- - mysql-7.1
-
test/php-7.2:
<<: *_test_defaults
build:
diff --git a/codeship-steps.yml b/codeship-steps.yml
index a095de8dce..fe59078aeb 100644
--- a/codeship-steps.yml
+++ b/codeship-steps.yml
@@ -1,9 +1,6 @@
- name: "Test"
type: parallel
steps:
- - name: "Test PHP 7.1"
- service: test/php-7.1
- command: test_reporter composer run test --timeout 0
- name: "Test PHP 7.2"
service: test/php-7.2
command: test_reporter composer run test --timeout 0
diff --git a/composer.json b/composer.json
index 9db6f3645c..6ff3cb3951 100644
--- a/composer.json
+++ b/composer.json
@@ -15,7 +15,7 @@
}
],
"require": {
- "php": ">=7.0 <7.4",
+ "php": ">=7.2 <7.4",
"aura/di": "~3.4",
"league/flysystem-aws-s3-v3": "~1.0",
"league/flysystem-rackspace": "~1.0",
@@ -43,7 +43,8 @@
"germanazo/laravel-ckan-api": "^1.0",
"asm89/stack-cors": "1.2.0",
"predis/predis": "~1.1",
- "illuminate/redis": "5.5.*"
+ "illuminate/redis": "5.5.*",
+ "willdurand/negotiation": "^2.3"
},
"require-dev": {
"fzaninotto/faker": "~1.4",
diff --git a/composer.lock b/composer.lock
index f02d0c12c3..07c68602b9 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "c778f36e10fd1a65bbbc69645b8307cb",
+ "content-hash": "0f01b2dc8bf989a457e94e2b7f866aa5",
"packages": [
{
"name": "abraham/twitteroauth",
@@ -42,9 +42,9 @@
"authors": [
{
"name": "Abraham Williams",
+ "role": "Developer",
"email": "abraham@abrah.am",
- "homepage": "https://abrah.am",
- "role": "Developer"
+ "homepage": "https://abrah.am"
}
],
"description": "The most popular PHP library for use with the Twitter OAuth REST API.",
@@ -167,26 +167,26 @@
},
{
"name": "aws/aws-sdk-php",
- "version": "3.109.2",
+ "version": "3.133.28",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
- "reference": "bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72"
+ "reference": "5ef2118011e39504484d70ed738eb8ede7f69287"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72",
- "reference": "bfbf0f0f1e4949747bd3e77dd8de94af47f7fb72",
+ "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/5ef2118011e39504484d70ed738eb8ede7f69287",
+ "reference": "5ef2118011e39504484d70ed738eb8ede7f69287",
"shasum": ""
},
"require": {
"ext-json": "*",
"ext-pcre": "*",
"ext-simplexml": "*",
- "guzzlehttp/guzzle": "^5.3.3|^6.2.1",
- "guzzlehttp/promises": "~1.0",
+ "guzzlehttp/guzzle": "^5.3.3|^6.2.1|^7.0",
+ "guzzlehttp/promises": "^1.0",
"guzzlehttp/psr7": "^1.4.1",
- "mtdowling/jmespath.php": "~2.2",
+ "mtdowling/jmespath.php": "^2.5",
"php": ">=5.5"
},
"require-dev": {
@@ -201,7 +201,8 @@
"nette/neon": "^2.3",
"phpunit/phpunit": "^4.8.35|^5.4.3",
"psr/cache": "^1.0",
- "psr/simple-cache": "^1.0"
+ "psr/simple-cache": "^1.0",
+ "sebastian/comparator": "^1.2.3"
},
"suggest": {
"aws/aws-php-sns-message-validator": "To validate incoming SNS notifications",
@@ -246,25 +247,25 @@
"s3",
"sdk"
],
- "time": "2019-08-12T18:14:30+00:00"
+ "time": "2020-03-03T19:11:21+00:00"
},
{
"name": "barryvdh/laravel-cors",
- "version": "v0.11.3",
+ "version": "v0.11.4",
"source": {
"type": "git",
- "url": "https://github.com/barryvdh/laravel-cors.git",
- "reference": "c95ac944f2f20a17949aae6645692dfd3b402bca"
+ "url": "https://github.com/fruitcake/laravel-cors.git",
+ "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/barryvdh/laravel-cors/zipball/c95ac944f2f20a17949aae6645692dfd3b402bca",
- "reference": "c95ac944f2f20a17949aae6645692dfd3b402bca",
+ "url": "https://api.github.com/repos/fruitcake/laravel-cors/zipball/03492f1a3bc74a05de23f93b94ac7cc5c173eec9",
+ "reference": "03492f1a3bc74a05de23f93b94ac7cc5c173eec9",
"shasum": ""
},
"require": {
"asm89/stack-cors": "^1.2",
- "illuminate/support": "5.5.x|5.6.x|5.7.x|5.8.x",
+ "illuminate/support": "^5.5|^6",
"php": ">=7",
"symfony/http-foundation": "^3.1|^4",
"symfony/http-kernel": "^3.1|^4"
@@ -308,7 +309,7 @@
"crossdomain",
"laravel"
],
- "time": "2019-02-26T18:08:30+00:00"
+ "time": "2019-08-28T11:27:11+00:00"
},
{
"name": "beheh/flaps",
@@ -349,9 +350,9 @@
"authors": [
{
"name": "Benedict Etzel",
+ "role": "Developer",
"email": "developer@beheh.de",
- "homepage": "https://beheh.de",
- "role": "Developer"
+ "homepage": "https://beheh.de"
}
],
"description": "Modular library for rate limiting requests in applications",
@@ -460,16 +461,16 @@
},
{
"name": "doctrine/cache",
- "version": "v1.8.0",
+ "version": "1.10.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
- "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57"
+ "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57",
- "reference": "d768d58baee9a4862ca783840eca1b9add7a7f57",
+ "url": "https://api.github.com/repos/doctrine/cache/zipball/382e7f4db9a12dc6c19431743a2b096041bcdd62",
+ "reference": "382e7f4db9a12dc6c19431743a2b096041bcdd62",
"shasum": ""
},
"require": {
@@ -480,7 +481,7 @@
},
"require-dev": {
"alcaeus/mongo-php-adapter": "^1.1",
- "doctrine/coding-standard": "^4.0",
+ "doctrine/coding-standard": "^6.0",
"mongodb/mongodb": "^1.1",
"phpunit/phpunit": "^7.0",
"predis/predis": "~1.0"
@@ -491,7 +492,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.8.x-dev"
+ "dev-master": "1.9.x-dev"
}
},
"autoload": {
@@ -504,6 +505,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -512,10 +517,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -525,26 +526,33 @@
"email": "schmittjoh@gmail.com"
}
],
- "description": "Caching library offering an object-oriented API for many cache backends",
- "homepage": "https://www.doctrine-project.org",
+ "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.",
+ "homepage": "https://www.doctrine-project.org/projects/cache.html",
"keywords": [
+ "abstraction",
+ "apcu",
"cache",
- "caching"
+ "caching",
+ "couchdb",
+ "memcached",
+ "php",
+ "redis",
+ "xcache"
],
- "time": "2018-08-21T18:01:43+00:00"
+ "time": "2019-11-29T15:36:20+00:00"
},
{
"name": "doctrine/inflector",
- "version": "v1.3.0",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/inflector.git",
- "reference": "5527a48b7313d15261292c149e55e26eae771b0a"
+ "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/inflector/zipball/5527a48b7313d15261292c149e55e26eae771b0a",
- "reference": "5527a48b7313d15261292c149e55e26eae771b0a",
+ "url": "https://api.github.com/repos/doctrine/inflector/zipball/ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
+ "reference": "ec3a55242203ffa6a4b27c58176da97ff0a7aec1",
"shasum": ""
},
"require": {
@@ -569,6 +577,10 @@
"MIT"
],
"authors": [
+ {
+ "name": "Guilherme Blanco",
+ "email": "guilhermeblanco@gmail.com"
+ },
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -577,10 +589,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
- {
- "name": "Guilherme Blanco",
- "email": "guilhermeblanco@gmail.com"
- },
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -598,32 +606,34 @@
"singularize",
"string"
],
- "time": "2018-01-09T20:05:19+00:00"
+ "time": "2019-10-30T19:59:35+00:00"
},
{
"name": "doctrine/lexer",
- "version": "1.0.2",
+ "version": "1.2.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
- "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8"
+ "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/lexer/zipball/1febd6c3ef84253d7c815bed85fc622ad207a9f8",
- "reference": "1febd6c3ef84253d7c815bed85fc622ad207a9f8",
+ "url": "https://api.github.com/repos/doctrine/lexer/zipball/5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
+ "reference": "5242d66dbeb21a30dd8a3e66bf7a73b66e05e1f6",
"shasum": ""
},
"require": {
- "php": ">=5.3.2"
+ "php": "^7.2"
},
"require-dev": {
- "phpunit/phpunit": "^4.5"
+ "doctrine/coding-standard": "^6.0",
+ "phpstan/phpstan": "^0.11.8",
+ "phpunit/phpunit": "^8.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.2.x-dev"
}
},
"autoload": {
@@ -636,14 +646,14 @@
"MIT"
],
"authors": [
- {
- "name": "Roman Borschel",
- "email": "roman@code-factory.org"
- },
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
+ {
+ "name": "Roman Borschel",
+ "email": "roman@code-factory.org"
+ },
{
"name": "Johannes Schmitt",
"email": "schmittjoh@gmail.com"
@@ -658,31 +668,31 @@
"parser",
"php"
],
- "time": "2019-06-08T11:03:04+00:00"
+ "time": "2019-10-30T14:39:59+00:00"
},
{
"name": "egulias/email-validator",
- "version": "2.1.10",
+ "version": "2.1.17",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
- "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec"
+ "reference": "ade6887fd9bd74177769645ab5c474824f8a418a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec",
- "reference": "a6c8d7101b19a451c1707b1b79bbbc56e4bdb7ec",
+ "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ade6887fd9bd74177769645ab5c474824f8a418a",
+ "reference": "ade6887fd9bd74177769645ab5c474824f8a418a",
"shasum": ""
},
"require": {
"doctrine/lexer": "^1.0.1",
- "php": ">= 5.5"
+ "php": ">=5.5",
+ "symfony/polyfill-intl-idn": "^1.10"
},
"require-dev": {
- "dominicsayers/isemail": "dev-master",
- "phpunit/phpunit": "^4.8.35||^5.7||^6.0",
- "satooshi/php-coveralls": "^1.0.1",
- "symfony/phpunit-bridge": "^4.4@dev"
+ "dominicsayers/isemail": "^3.0.7",
+ "phpunit/phpunit": "^4.8.36|^7.5.15",
+ "satooshi/php-coveralls": "^1.0.1"
},
"suggest": {
"ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
@@ -690,7 +700,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0.x-dev"
+ "dev-master": "2.1.x-dev"
}
},
"autoload": {
@@ -716,20 +726,20 @@
"validation",
"validator"
],
- "time": "2019-07-19T20:52:08+00:00"
+ "time": "2020-02-13T22:36:52+00:00"
},
{
"name": "erusev/parsedown",
- "version": "1.7.3",
+ "version": "1.7.4",
"source": {
"type": "git",
"url": "https://github.com/erusev/parsedown.git",
- "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7"
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/erusev/parsedown/zipball/6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
- "reference": "6d893938171a817f4e9bc9e86f2da1e370b7bcd7",
+ "url": "https://api.github.com/repos/erusev/parsedown/zipball/cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
+ "reference": "cb17b6477dfff935958ba01325f2e8a2bfa6dab3",
"shasum": ""
},
"require": {
@@ -762,27 +772,27 @@
"markdown",
"parser"
],
- "time": "2019-03-17T18:48:37+00:00"
+ "time": "2019-12-30T22:54:17+00:00"
},
{
"name": "firebase/php-jwt",
- "version": "v5.0.0",
+ "version": "v5.1.0",
"source": {
"type": "git",
"url": "https://github.com/firebase/php-jwt.git",
- "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e"
+ "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e",
- "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e",
+ "url": "https://api.github.com/repos/firebase/php-jwt/zipball/4566062c68f76f43d44f1643f4970fe89757d4c6",
+ "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6",
"shasum": ""
},
"require": {
"php": ">=5.3.0"
},
"require-dev": {
- "phpunit/phpunit": " 4.8.35"
+ "phpunit/phpunit": "^4.8|^5"
},
"type": "library",
"autoload": {
@@ -808,7 +818,7 @@
],
"description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.",
"homepage": "https://github.com/firebase/php-jwt",
- "time": "2017-06-27T22:17:23+00:00"
+ "time": "2020-02-24T23:15:03+00:00"
},
{
"name": "germanazo/laravel-ckan-api",
@@ -846,9 +856,9 @@
"authors": [
{
"name": "German Bortoli",
+ "role": "Developer",
"email": "germanazo@gmail.com",
- "homepage": "https://github.com/Germanaz0",
- "role": "Developer"
+ "homepage": "https://github.com/Germanaz0"
}
],
"description": "Laravel 5 client for CKAN Api",
@@ -863,22 +873,22 @@
},
{
"name": "guzzle/guzzle",
- "version": "v3.8.1",
+ "version": "v3.9.3",
"source": {
"type": "git",
- "url": "https://github.com/guzzle/guzzle.git",
- "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba"
+ "url": "https://github.com/guzzle/guzzle3.git",
+ "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/guzzle/guzzle/zipball/4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
- "reference": "4de0618a01b34aa1c8c33a3f13f396dcd3882eba",
+ "url": "https://api.github.com/repos/guzzle/guzzle3/zipball/0645b70d953bc1c067bbc8d5bc53194706b628d9",
+ "reference": "0645b70d953bc1c067bbc8d5bc53194706b628d9",
"shasum": ""
},
"require": {
"ext-curl": "*",
"php": ">=5.3.3",
- "symfony/event-dispatcher": ">=2.1"
+ "symfony/event-dispatcher": "~2.1"
},
"replace": {
"guzzle/batch": "self.version",
@@ -905,18 +915,21 @@
"guzzle/stream": "self.version"
},
"require-dev": {
- "doctrine/cache": "*",
- "monolog/monolog": "1.*",
+ "doctrine/cache": "~1.3",
+ "monolog/monolog": "~1.0",
"phpunit/phpunit": "3.7.*",
- "psr/log": "1.0.*",
- "symfony/class-loader": "*",
- "zendframework/zend-cache": "<2.3",
- "zendframework/zend-log": "<2.3"
+ "psr/log": "~1.0",
+ "symfony/class-loader": "~2.1",
+ "zendframework/zend-cache": "2.*,<2.3",
+ "zendframework/zend-log": "2.*,<2.3"
+ },
+ "suggest": {
+ "guzzlehttp/guzzle": "Guzzle 5 has moved to a new package name. The package you have installed, Guzzle 3, is deprecated."
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.8-dev"
+ "dev-master": "3.9-dev"
}
},
"autoload": {
@@ -940,7 +953,7 @@
"homepage": "https://github.com/guzzle/guzzle/contributors"
}
],
- "description": "Guzzle is a PHP HTTP client library and framework for building RESTful web service clients",
+ "description": "PHP HTTP client. This library is deprecated in favor of https://packagist.org/packages/guzzlehttp/guzzle",
"homepage": "http://guzzlephp.org/",
"keywords": [
"client",
@@ -952,7 +965,7 @@
"web service"
],
"abandoned": "guzzlehttp/guzzle",
- "time": "2014-01-28T22:29:15+00:00"
+ "time": "2015-03-18T18:23:50+00:00"
},
{
"name": "guzzlehttp/guzzle",
@@ -2633,8 +2646,8 @@
"authors": [
{
"name": "Luís Otávio Cobucci Oblonczyk",
- "email": "lcobucci@gmail.com",
- "role": "Developer"
+ "role": "Developer",
+ "email": "lcobucci@gmail.com"
}
],
"description": "A simple library to work with JSON Web Token and JSON Web Signature",
@@ -2684,9 +2697,9 @@
"authors": [
{
"name": "Ignace Nyamagana Butera",
+ "role": "Developer",
"email": "nyamsprod@gmail.com",
- "homepage": "https://github.com/nyamsprod/",
- "role": "Developer"
+ "homepage": "https://github.com/nyamsprod/"
}
],
"description": "Csv data manipulation made easy in PHP",
@@ -2753,16 +2766,16 @@
},
{
"name": "league/flysystem",
- "version": "1.0.53",
+ "version": "1.0.64",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem.git",
- "reference": "08e12b7628f035600634a5e76d95b5eb66cea674"
+ "reference": "d13c43dbd4b791f815215959105a008515d1a2e0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/08e12b7628f035600634a5e76d95b5eb66cea674",
- "reference": "08e12b7628f035600634a5e76d95b5eb66cea674",
+ "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d13c43dbd4b791f815215959105a008515d1a2e0",
+ "reference": "d13c43dbd4b791f815215959105a008515d1a2e0",
"shasum": ""
},
"require": {
@@ -2774,7 +2787,7 @@
},
"require-dev": {
"phpspec/phpspec": "^3.4",
- "phpunit/phpunit": "^5.7.10"
+ "phpunit/phpunit": "^5.7.26"
},
"suggest": {
"ext-fileinfo": "Required for MimeType",
@@ -2833,20 +2846,20 @@
"sftp",
"storage"
],
- "time": "2019-06-18T20:09:29+00:00"
+ "time": "2020-02-05T18:14:17+00:00"
},
{
"name": "league/flysystem-aws-s3-v3",
- "version": "1.0.23",
+ "version": "1.0.24",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/flysystem-aws-s3-v3.git",
- "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4"
+ "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4",
- "reference": "15b0cdeab7240bf8e8bffa85ae5275bbc3692bf4",
+ "url": "https://api.github.com/repos/thephpleague/flysystem-aws-s3-v3/zipball/4382036bde5dc926f9b8b337e5bdb15e5ec7b570",
+ "reference": "4382036bde5dc926f9b8b337e5bdb15e5ec7b570",
"shasum": ""
},
"require": {
@@ -2880,7 +2893,7 @@
}
],
"description": "Flysystem adapter for the AWS S3 SDK v3.x",
- "time": "2019-06-05T17:18:29+00:00"
+ "time": "2020-02-23T13:31:58+00:00"
},
{
"name": "league/flysystem-rackspace",
@@ -2973,9 +2986,9 @@
"authors": [
{
"name": "Alex Bilbie",
+ "role": "Developer",
"email": "hello@alexbilbie.com",
- "homepage": "http://www.alexbilbie.com",
- "role": "Developer"
+ "homepage": "http://www.alexbilbie.com"
}
],
"description": "A lightweight and powerful OAuth 2.0 authorization and resource server library with support for all the core specification grants. This library will allow you to secure your API with OAuth and allow your applications users to approve apps that want to access their data from your API.",
@@ -3026,16 +3039,16 @@
},
{
"name": "monolog/monolog",
- "version": "1.24.0",
+ "version": "1.25.3",
"source": {
"type": "git",
"url": "https://github.com/Seldaek/monolog.git",
- "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266"
+ "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Seldaek/monolog/zipball/bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
- "reference": "bfc9ebb28f97e7a24c45bdc3f0ff482e47bb0266",
+ "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fa82921994db851a8becaf3787a9e73c5976b6f1",
+ "reference": "fa82921994db851a8becaf3787a9e73c5976b6f1",
"shasum": ""
},
"require": {
@@ -3100,20 +3113,20 @@
"logging",
"psr-3"
],
- "time": "2018-11-05T09:00:11+00:00"
+ "time": "2019-12-20T14:15:16+00:00"
},
{
"name": "mtdowling/cron-expression",
- "version": "v1.2.1",
+ "version": "v1.2.3",
"source": {
"type": "git",
"url": "https://github.com/mtdowling/cron-expression.git",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad"
+ "reference": "9be552eebcc1ceec9776378f7dcc085246cacca6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9504fa9ea681b586028adaaa0877db4aecf32bad",
- "reference": "9504fa9ea681b586028adaaa0877db4aecf32bad",
+ "url": "https://api.github.com/repos/mtdowling/cron-expression/zipball/9be552eebcc1ceec9776378f7dcc085246cacca6",
+ "reference": "9be552eebcc1ceec9776378f7dcc085246cacca6",
"shasum": ""
},
"require": {
@@ -3144,27 +3157,30 @@
"cron",
"schedule"
],
- "time": "2017-01-23T04:29:33+00:00"
+ "abandoned": "dragonmantank/cron-expression",
+ "time": "2019-12-28T04:23:06+00:00"
},
{
"name": "mtdowling/jmespath.php",
- "version": "2.4.0",
+ "version": "2.5.0",
"source": {
"type": "git",
"url": "https://github.com/jmespath/jmespath.php.git",
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac"
+ "reference": "52168cb9472de06979613d365c7f1ab8798be895"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
- "reference": "adcc9531682cf87dfda21e1fd5d0e7a41d292fac",
+ "url": "https://api.github.com/repos/jmespath/jmespath.php/zipball/52168cb9472de06979613d365c7f1ab8798be895",
+ "reference": "52168cb9472de06979613d365c7f1ab8798be895",
"shasum": ""
},
"require": {
- "php": ">=5.4.0"
+ "php": ">=5.4.0",
+ "symfony/polyfill-mbstring": "^1.4"
},
"require-dev": {
- "phpunit/phpunit": "~4.0"
+ "composer/xdebug-handler": "^1.2",
+ "phpunit/phpunit": "^4.8.36|^7.5.15"
},
"bin": [
"bin/jp.php"
@@ -3172,7 +3188,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.0-dev"
+ "dev-master": "2.5-dev"
}
},
"autoload": {
@@ -3199,20 +3215,20 @@
"json",
"jsonpath"
],
- "time": "2016-12-03T22:08:25+00:00"
+ "time": "2019-12-30T18:03:34+00:00"
},
{
"name": "nesbot/carbon",
- "version": "1.39.0",
+ "version": "1.39.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
- "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0"
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0",
- "reference": "dd62a58af4e0775a45ea5f99d0363d81b7d9a1e0",
+ "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4be0c005164249208ce1b5ca633cd57bdd42ff33",
+ "reference": "4be0c005164249208ce1b5ca633cd57bdd42ff33",
"shasum": ""
},
"require": {
@@ -3260,10 +3276,55 @@
"datetime",
"time"
],
- "time": "2019-06-11T09:07:59+00:00"
+ "time": "2019-10-14T05:51:36+00:00"
},
{
"name": "nexmo/client",
+ "version": "1.9.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Nexmo/nexmo-php-complete.git",
+ "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Nexmo/nexmo-php-complete/zipball/c6d11d953c8c5594590bb9ebaba9616e76948f93",
+ "reference": "c6d11d953c8c5594590bb9ebaba9616e76948f93",
+ "shasum": ""
+ },
+ "require": {
+ "nexmo/client-core": "^1.0",
+ "php": ">=5.6",
+ "php-http/guzzle6-adapter": "^1.0"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Tim Lytle",
+ "email": "tim@nexmo.com",
+ "homepage": "http://twitter.com/tjlytle",
+ "role": "Developer"
+ },
+ {
+ "name": "Michael Heap",
+ "email": "michael.heap@vonage.com",
+ "role": "Developer"
+ },
+ {
+ "name": "Lorna Mitchell",
+ "email": "lorna.mitchell@vonage.com",
+ "role": "Developer"
+ }
+ ],
+ "description": "PHP Client for using Nexmo's API.",
+ "time": "2019-11-26T15:25:11+00:00"
+ },
+ {
+ "name": "nexmo/client-core",
"version": "1.8.1",
"source": {
"type": "git",
@@ -3651,16 +3712,16 @@
},
{
"name": "phpseclib/phpseclib",
- "version": "2.0.21",
+ "version": "2.0.25",
"source": {
"type": "git",
"url": "https://github.com/phpseclib/phpseclib.git",
- "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d"
+ "reference": "c18159618ed7cd7ff721ac1a8fec7860a475d2f0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/9f1287e68b3f283339a9f98f67515dd619e5bf9d",
- "reference": "9f1287e68b3f283339a9f98f67515dd619e5bf9d",
+ "url": "https://api.github.com/repos/phpseclib/phpseclib/zipball/c18159618ed7cd7ff721ac1a8fec7860a475d2f0",
+ "reference": "c18159618ed7cd7ff721ac1a8fec7860a475d2f0",
"shasum": ""
},
"require": {
@@ -3739,7 +3800,7 @@
"x.509",
"x509"
],
- "time": "2019-07-12T12:53:49+00:00"
+ "time": "2020-02-25T04:16:50+00:00"
},
{
"name": "predis/predis",
@@ -3892,16 +3953,16 @@
},
{
"name": "psr/log",
- "version": "1.1.0",
+ "version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd"
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
- "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
+ "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"shasum": ""
},
"require": {
@@ -3910,7 +3971,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.1.x-dev"
}
},
"autoload": {
@@ -3935,7 +3996,7 @@
"psr",
"psr-3"
],
- "time": "2018-11-20T15:27:04+00:00"
+ "time": "2019-11-01T11:05:21+00:00"
},
{
"name": "psr/simple-cache",
@@ -4084,44 +4145,46 @@
},
{
"name": "ramsey/uuid",
- "version": "3.8.0",
+ "version": "3.9.3",
"source": {
"type": "git",
"url": "https://github.com/ramsey/uuid.git",
- "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3"
+ "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/ramsey/uuid/zipball/d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
- "reference": "d09ea80159c1929d75b3f9c60504d613aeb4a1e3",
+ "url": "https://api.github.com/repos/ramsey/uuid/zipball/7e1633a6964b48589b142d60542f9ed31bd37a92",
+ "reference": "7e1633a6964b48589b142d60542f9ed31bd37a92",
"shasum": ""
},
"require": {
- "paragonie/random_compat": "^1.0|^2.0|9.99.99",
- "php": "^5.4 || ^7.0",
+ "ext-json": "*",
+ "paragonie/random_compat": "^1 | ^2 | 9.99.99",
+ "php": "^5.4 | ^7 | ^8",
"symfony/polyfill-ctype": "^1.8"
},
"replace": {
"rhumsaa/uuid": "self.version"
},
"require-dev": {
- "codeception/aspect-mock": "^1.0 | ~2.0.0",
- "doctrine/annotations": "~1.2.0",
- "goaop/framework": "1.0.0-alpha.2 | ^1.0 | ~2.1.0",
- "ircmaxell/random-lib": "^1.1",
- "jakub-onderka/php-parallel-lint": "^0.9.0",
- "mockery/mockery": "^0.9.9",
+ "codeception/aspect-mock": "^1 | ^2",
+ "doctrine/annotations": "^1.2",
+ "goaop/framework": "1.0.0-alpha.2 | ^1 | ^2.1",
+ "jakub-onderka/php-parallel-lint": "^1",
+ "mockery/mockery": "^0.9.11 | ^1",
"moontoast/math": "^1.1",
- "php-mock/php-mock-phpunit": "^0.3|^1.1",
- "phpunit/phpunit": "^4.7|^5.0|^6.5",
- "squizlabs/php_codesniffer": "^2.3"
+ "paragonie/random-lib": "^2",
+ "php-mock/php-mock-phpunit": "^0.3 | ^1.1",
+ "phpunit/phpunit": "^4.8 | ^5.4 | ^6.5",
+ "squizlabs/php_codesniffer": "^3.5"
},
"suggest": {
"ext-ctype": "Provides support for PHP Ctype functions",
"ext-libsodium": "Provides the PECL libsodium extension for use with the SodiumRandomGenerator",
+ "ext-openssl": "Provides the OpenSSL extension for use with the OpenSslGenerator",
"ext-uuid": "Provides the PECL UUID extension for use with the PeclUuidTimeGenerator and PeclUuidRandomGenerator",
- "ircmaxell/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"moontoast/math": "Provides support for converting UUID to 128-bit integer (in string form).",
+ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter",
"ramsey/uuid-console": "A console application for generating UUIDs with ramsey/uuid",
"ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type."
},
@@ -4134,13 +4197,21 @@
"autoload": {
"psr-4": {
"Ramsey\\Uuid\\": "src/"
- }
+ },
+ "files": [
+ "src/functions.php"
+ ]
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
+ {
+ "name": "Ben Ramsey",
+ "email": "ben@benramsey.com",
+ "homepage": "https://benramsey.com"
+ },
{
"name": "Marijn Huizendveld",
"email": "marijn.huizendveld@gmail.com"
@@ -4148,11 +4219,6 @@
{
"name": "Thibaud Fabre",
"email": "thibaud@aztech.io"
- },
- {
- "name": "Ben Ramsey",
- "email": "ben@benramsey.com",
- "homepage": "https://benramsey.com"
}
],
"description": "Formerly rhumsaa/uuid. A PHP 5.4+ library for generating RFC 4122 version 1, 3, 4, and 5 universally unique identifiers (UUID).",
@@ -4162,7 +4228,7 @@
"identifier",
"uuid"
],
- "time": "2018-07-19T23:38:55+00:00"
+ "time": "2020-02-21T04:36:14+00:00"
},
{
"name": "robmorgan/phinx",
@@ -4203,20 +4269,20 @@
"authors": [
{
"name": "Woody Gilk",
+ "role": "Developer",
"email": "woody.gilk@gmail.com",
- "homepage": "http://shadowhand.me",
- "role": "Developer"
+ "homepage": "http://shadowhand.me"
},
{
"name": "Rob Morgan",
+ "role": "Lead Developer",
"email": "robbym@gmail.com",
- "homepage": "https://robmorgan.id.au",
- "role": "Lead Developer"
+ "homepage": "https://robmorgan.id.au"
},
{
"name": "Richard Quadling",
- "email": "rquadling@gmail.com",
- "role": "Developer"
+ "role": "Developer",
+ "email": "rquadling@gmail.com"
}
],
"description": "Phinx makes it ridiculously easy to manage the database migrations for your PHP app.",
@@ -4232,16 +4298,16 @@
},
{
"name": "sentry/sentry",
- "version": "1.10.0",
+ "version": "1.11.0",
"source": {
"type": "git",
"url": "https://github.com/getsentry/sentry-php.git",
- "reference": "b2b8ffe1560b9fb0110b02993594a4b04a511959"
+ "reference": "159eeaa02bb2ef8a8ec669f3c88e4bff7e6a7ffe"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/b2b8ffe1560b9fb0110b02993594a4b04a511959",
- "reference": "b2b8ffe1560b9fb0110b02993594a4b04a511959",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/159eeaa02bb2ef8a8ec669f3c88e4bff7e6a7ffe",
+ "reference": "159eeaa02bb2ef8a8ec669f3c88e4bff7e6a7ffe",
"shasum": ""
},
"require": {
@@ -4253,7 +4319,7 @@
},
"require-dev": {
"friendsofphp/php-cs-fixer": "^1.8.0",
- "monolog/monolog": "*",
+ "monolog/monolog": "^1.0",
"phpunit/phpunit": "^4.8.35 || ^5.7"
},
"suggest": {
@@ -4268,7 +4334,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.10.x-dev"
+ "dev-master": "1.11.x-dev"
}
},
"autoload": {
@@ -4292,7 +4358,7 @@
"log",
"logging"
],
- "time": "2018-11-09T12:27:19+00:00"
+ "time": "2020-02-12T18:38:11+00:00"
},
{
"name": "sentry/sentry-laravel",
@@ -4359,16 +4425,16 @@
},
{
"name": "swiftmailer/swiftmailer",
- "version": "v6.2.1",
+ "version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
- "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a"
+ "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a",
- "reference": "5397cd05b0a0f7937c47b0adcb4c60e5ab936b6a",
+ "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
+ "reference": "149cfdf118b169f7840bbe3ef0d4bc795d1780c9",
"shasum": ""
},
"require": {
@@ -4417,20 +4483,20 @@
"mail",
"mailer"
],
- "time": "2019-04-21T09:21:45+00:00"
+ "time": "2019-11-12T09:31:26+00:00"
},
{
"name": "symfony/config",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/config.git",
- "reference": "623fd6be3e5d4112d667003488c8c3ec12b66f62"
+ "reference": "03328d6e172ec7384341c622d4c28d350040d021"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/config/zipball/623fd6be3e5d4112d667003488c8c3ec12b66f62",
- "reference": "623fd6be3e5d4112d667003488c8c3ec12b66f62",
+ "url": "https://api.github.com/repos/symfony/config/zipball/03328d6e172ec7384341c622d4c28d350040d021",
+ "reference": "03328d6e172ec7384341c622d4c28d350040d021",
"shasum": ""
},
"require": {
@@ -4481,20 +4547,20 @@
],
"description": "Symfony Config Component",
"homepage": "https://symfony.com",
- "time": "2019-07-17T15:23:18+00:00"
+ "time": "2020-02-03T08:11:57+00:00"
},
{
"name": "symfony/console",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "12940f20a816c978860fa4925b3f1bbb27e9ac46"
+ "reference": "6827023c5872bea44b29d145de693b21981cf4cd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/12940f20a816c978860fa4925b3f1bbb27e9ac46",
- "reference": "12940f20a816c978860fa4925b3f1bbb27e9ac46",
+ "url": "https://api.github.com/repos/symfony/console/zipball/6827023c5872bea44b29d145de693b21981cf4cd",
+ "reference": "6827023c5872bea44b29d145de693b21981cf4cd",
"shasum": ""
},
"require": {
@@ -4553,29 +4619,29 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
- "time": "2019-07-24T14:46:41+00:00"
+ "time": "2020-02-15T13:27:16+00:00"
},
{
"name": "symfony/css-selector",
- "version": "v4.3.3",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
- "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d"
+ "reference": "ee9b946e7223b11257329a054c64396b19d619e1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/css-selector/zipball/105c98bb0c5d8635bea056135304bd8edcc42b4d",
- "reference": "105c98bb0c5d8635bea056135304bd8edcc42b4d",
+ "url": "https://api.github.com/repos/symfony/css-selector/zipball/ee9b946e7223b11257329a054c64396b19d619e1",
+ "reference": "ee9b946e7223b11257329a054c64396b19d619e1",
"shasum": ""
},
"require": {
- "php": "^7.1.3"
+ "php": "^5.5.9|>=7.0.8"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "3.4-dev"
}
},
"autoload": {
@@ -4606,20 +4672,20 @@
],
"description": "Symfony CssSelector Component",
"homepage": "https://symfony.com",
- "time": "2019-01-16T21:53:39+00:00"
+ "time": "2020-02-04T08:04:52+00:00"
},
{
"name": "symfony/debug",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
- "reference": "bc977cb2681d75988ab2d53d14c4245c6c04f82f"
+ "reference": "a99278d50af8a9164219da38d61fb161a7f6e0a6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/debug/zipball/bc977cb2681d75988ab2d53d14c4245c6c04f82f",
- "reference": "bc977cb2681d75988ab2d53d14c4245c6c04f82f",
+ "url": "https://api.github.com/repos/symfony/debug/zipball/a99278d50af8a9164219da38d61fb161a7f6e0a6",
+ "reference": "a99278d50af8a9164219da38d61fb161a7f6e0a6",
"shasum": ""
},
"require": {
@@ -4662,34 +4728,31 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
- "time": "2019-07-23T08:39:19+00:00"
+ "time": "2020-02-03T15:10:40+00:00"
},
{
"name": "symfony/event-dispatcher",
- "version": "v3.4.30",
+ "version": "v2.8.52",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
- "reference": "f18fdd6cc7006441865e698420cee26bac94741f"
+ "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f18fdd6cc7006441865e698420cee26bac94741f",
- "reference": "f18fdd6cc7006441865e698420cee26bac94741f",
+ "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a77e974a5fecb4398833b0709210e3d5e334ffb0",
+ "reference": "a77e974a5fecb4398833b0709210e3d5e334ffb0",
"shasum": ""
},
"require": {
- "php": "^5.5.9|>=7.0.8"
- },
- "conflict": {
- "symfony/dependency-injection": "<3.3"
+ "php": ">=5.3.9"
},
"require-dev": {
"psr/log": "~1.0",
- "symfony/config": "~2.8|~3.0|~4.0",
- "symfony/dependency-injection": "~3.3|~4.0",
- "symfony/expression-language": "~2.8|~3.0|~4.0",
- "symfony/stopwatch": "~2.8|~3.0|~4.0"
+ "symfony/config": "^2.0.5|~3.0.0",
+ "symfony/dependency-injection": "~2.6|~3.0.0",
+ "symfony/expression-language": "~2.6|~3.0.0",
+ "symfony/stopwatch": "~2.3|~3.0.0"
},
"suggest": {
"symfony/dependency-injection": "",
@@ -4698,7 +4761,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.4-dev"
+ "dev-master": "2.8-dev"
}
},
"autoload": {
@@ -4725,20 +4788,20 @@
],
"description": "Symfony EventDispatcher Component",
"homepage": "https://symfony.com",
- "time": "2019-06-25T07:45:31+00:00"
+ "time": "2018-11-21T14:20:20+00:00"
},
{
"name": "symfony/filesystem",
- "version": "v4.3.3",
+ "version": "v4.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d"
+ "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b9896d034463ad6fd2bf17e2bf9418caecd6313d",
- "reference": "b9896d034463ad6fd2bf17e2bf9418caecd6313d",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/266c9540b475f26122b61ef8b23dd9198f5d1cfd",
+ "reference": "266c9540b475f26122b61ef8b23dd9198f5d1cfd",
"shasum": ""
},
"require": {
@@ -4748,7 +4811,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "4.4-dev"
}
},
"autoload": {
@@ -4775,20 +4838,20 @@
],
"description": "Symfony Filesystem Component",
"homepage": "https://symfony.com",
- "time": "2019-06-23T08:51:25+00:00"
+ "time": "2020-01-21T08:20:44+00:00"
},
{
"name": "symfony/finder",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
- "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a"
+ "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/finder/zipball/1e762fdf73ace6ceb42ba5a6ca280be86082364a",
- "reference": "1e762fdf73ace6ceb42ba5a6ca280be86082364a",
+ "url": "https://api.github.com/repos/symfony/finder/zipball/5ec813ccafa8164ef21757e8c725d3a57da59200",
+ "reference": "5ec813ccafa8164ef21757e8c725d3a57da59200",
"shasum": ""
},
"require": {
@@ -4824,20 +4887,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
- "time": "2019-06-28T08:02:59+00:00"
+ "time": "2020-02-14T07:34:21+00:00"
},
{
"name": "symfony/http-foundation",
- "version": "v3.4.36",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
- "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593"
+ "reference": "4d440be93adcfd5e4ee0bdc7acd1c3260625728f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-foundation/zipball/d2d0cfe8e319d9df44c4cca570710fcf221d4593",
- "reference": "d2d0cfe8e319d9df44c4cca570710fcf221d4593",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4d440be93adcfd5e4ee0bdc7acd1c3260625728f",
+ "reference": "4d440be93adcfd5e4ee0bdc7acd1c3260625728f",
"shasum": ""
},
"require": {
@@ -4878,20 +4941,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
- "time": "2019-11-28T12:52:59+00:00"
+ "time": "2020-02-06T08:18:51+00:00"
},
{
"name": "symfony/http-kernel",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
- "reference": "83a1b30c5dd02f5c3cd708a432071d0c99474eb3"
+ "reference": "449c3f7a9b8c47d178f80610afa6e2873ac0a3c0"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/http-kernel/zipball/83a1b30c5dd02f5c3cd708a432071d0c99474eb3",
- "reference": "83a1b30c5dd02f5c3cd708a432071d0c99474eb3",
+ "url": "https://api.github.com/repos/symfony/http-kernel/zipball/449c3f7a9b8c47d178f80610afa6e2873ac0a3c0",
+ "reference": "449c3f7a9b8c47d178f80610afa6e2873ac0a3c0",
"shasum": ""
},
"require": {
@@ -4900,7 +4963,8 @@
"symfony/debug": "^3.3.3|~4.0",
"symfony/event-dispatcher": "~2.8|~3.0|~4.0",
"symfony/http-foundation": "~3.4.12|~4.0.12|^4.1.1",
- "symfony/polyfill-ctype": "~1.8"
+ "symfony/polyfill-ctype": "~1.8",
+ "symfony/polyfill-php56": "~1.8"
},
"conflict": {
"symfony/config": "<2.8",
@@ -4967,20 +5031,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
- "time": "2019-07-27T17:14:06+00:00"
+ "time": "2020-02-29T10:16:41+00:00"
},
{
"name": "symfony/polyfill-ctype",
- "version": "v1.12.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-ctype.git",
- "reference": "550ebaac289296ce228a706d0867afc34687e3f4"
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/550ebaac289296ce228a706d0867afc34687e3f4",
- "reference": "550ebaac289296ce228a706d0867afc34687e3f4",
+ "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
+ "reference": "fbdeaec0df06cf3d51c93de80c7eb76e271f5a38",
"shasum": ""
},
"require": {
@@ -4992,7 +5056,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.12-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5025,20 +5089,20 @@
"polyfill",
"portable"
],
- "time": "2019-08-06T08:03:45+00:00"
+ "time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/polyfill-iconv",
- "version": "v1.12.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-iconv.git",
- "reference": "685968b11e61a347c18bf25db32effa478be610f"
+ "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/685968b11e61a347c18bf25db32effa478be610f",
- "reference": "685968b11e61a347c18bf25db32effa478be610f",
+ "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/926832ce51059bb58211b7b2080a88e0c3b5328e",
+ "reference": "926832ce51059bb58211b7b2080a88e0c3b5328e",
"shasum": ""
},
"require": {
@@ -5050,7 +5114,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.12-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5084,26 +5148,26 @@
"portable",
"shim"
],
- "time": "2019-08-06T08:03:45+00:00"
+ "time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/polyfill-intl-idn",
- "version": "v1.12.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-intl-idn.git",
- "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2"
+ "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6af626ae6fa37d396dc90a399c0ff08e5cfc45b2",
- "reference": "6af626ae6fa37d396dc90a399c0ff08e5cfc45b2",
+ "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/6842f1a39cf7d580655688069a03dd7cd83d244a",
+ "reference": "6842f1a39cf7d580655688069a03dd7cd83d244a",
"shasum": ""
},
"require": {
"php": ">=5.3.3",
"symfony/polyfill-mbstring": "^1.3",
- "symfony/polyfill-php72": "^1.9"
+ "symfony/polyfill-php72": "^1.10"
},
"suggest": {
"ext-intl": "For best performance"
@@ -5111,7 +5175,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.12-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5146,20 +5210,20 @@
"portable",
"shim"
],
- "time": "2019-08-06T08:03:45+00:00"
+ "time": "2020-01-17T12:01:36+00:00"
},
{
"name": "symfony/polyfill-mbstring",
- "version": "v1.13.1",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-mbstring.git",
- "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f"
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/7b4aab9743c30be783b73de055d24a39cf4b954f",
- "reference": "7b4aab9743c30be783b73de055d24a39cf4b954f",
+ "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/34094cfa9abe1f0f14f48f490772db7a775559f2",
+ "reference": "34094cfa9abe1f0f14f48f490772db7a775559f2",
"shasum": ""
},
"require": {
@@ -5171,7 +5235,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.13-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5205,20 +5269,76 @@
"portable",
"shim"
],
- "time": "2019-11-27T14:18:11+00:00"
+ "time": "2020-01-13T11:15:53+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php56",
+ "version": "v1.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php56.git",
+ "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/16ec91cb06998b609501b55b7177b7d7c02badb3",
+ "reference": "16ec91cb06998b609501b55b7177b7d7c02badb3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3",
+ "symfony/polyfill-util": "~1.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.14-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Php56\\": ""
+ },
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/polyfill-php70",
- "version": "v1.13.1",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php70.git",
- "reference": "af23c7bb26a73b850840823662dda371484926c4"
+ "reference": "419c4940024c30ccc033650373a1fe13890d3255"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/af23c7bb26a73b850840823662dda371484926c4",
- "reference": "af23c7bb26a73b850840823662dda371484926c4",
+ "url": "https://api.github.com/repos/symfony/polyfill-php70/zipball/419c4940024c30ccc033650373a1fe13890d3255",
+ "reference": "419c4940024c30ccc033650373a1fe13890d3255",
"shasum": ""
},
"require": {
@@ -5228,7 +5348,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.13-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5264,20 +5384,20 @@
"portable",
"shim"
],
- "time": "2019-11-27T13:56:44+00:00"
+ "time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/polyfill-php72",
- "version": "v1.12.0",
+ "version": "v1.14.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/polyfill-php72.git",
- "reference": "04ce3335667451138df4307d6a9b61565560199e"
+ "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/04ce3335667451138df4307d6a9b61565560199e",
- "reference": "04ce3335667451138df4307d6a9b61565560199e",
+ "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf",
+ "reference": "46ecacf4751dd0dc81e4f6bf01dbf9da1dc1dadf",
"shasum": ""
},
"require": {
@@ -5286,7 +5406,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.12-dev"
+ "dev-master": "1.14-dev"
}
},
"autoload": {
@@ -5319,20 +5439,72 @@
"portable",
"shim"
],
- "time": "2019-08-06T08:03:45+00:00"
+ "time": "2020-01-13T11:15:53+00:00"
+ },
+ {
+ "name": "symfony/polyfill-util",
+ "version": "v1.14.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-util.git",
+ "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/ba3cfcea6d0192cae46c62041f61cbb704b526d3",
+ "reference": "ba3cfcea6d0192cae46c62041f61cbb704b526d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.3.3"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.14-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Polyfill\\Util\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony utilities for portability of PHP codes",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compat",
+ "compatibility",
+ "polyfill",
+ "shim"
+ ],
+ "time": "2020-01-13T11:15:53+00:00"
},
{
"name": "symfony/process",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "d129c017e8602507688ef2c3007951a16c1a8407"
+ "reference": "b03b02dcea26ba4c65c16a73bab4f00c186b13da"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/d129c017e8602507688ef2c3007951a16c1a8407",
- "reference": "d129c017e8602507688ef2c3007951a16c1a8407",
+ "url": "https://api.github.com/repos/symfony/process/zipball/b03b02dcea26ba4c65c16a73bab4f00c186b13da",
+ "reference": "b03b02dcea26ba4c65c16a73bab4f00c186b13da",
"shasum": ""
},
"require": {
@@ -5368,7 +5540,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
- "time": "2019-05-30T15:47:52+00:00"
+ "time": "2020-02-04T08:04:52+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@@ -5437,22 +5609,22 @@
},
{
"name": "symfony/translation",
- "version": "v4.3.3",
+ "version": "v4.3.11",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "4e3e39cc485304f807622bdc64938e4633396406"
+ "reference": "46e462be71935ae15eab531e4d491d801857f24c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/4e3e39cc485304f807622bdc64938e4633396406",
- "reference": "4e3e39cc485304f807622bdc64938e4633396406",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/46e462be71935ae15eab531e4d491d801857f24c",
+ "reference": "46e462be71935ae15eab531e4d491d801857f24c",
"shasum": ""
},
"require": {
"php": "^7.1.3",
"symfony/polyfill-mbstring": "~1.0",
- "symfony/translation-contracts": "^1.1.2"
+ "symfony/translation-contracts": "^1.1.6"
},
"conflict": {
"symfony/config": "<3.4",
@@ -5509,20 +5681,20 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
- "time": "2019-07-18T10:34:59+00:00"
+ "time": "2020-01-04T12:24:57+00:00"
},
{
"name": "symfony/translation-contracts",
- "version": "v1.1.5",
+ "version": "v1.1.7",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation-contracts.git",
- "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c"
+ "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/cb4b18ad7b92a26e83b65dde940fab78339e6f3c",
- "reference": "cb4b18ad7b92a26e83b65dde940fab78339e6f3c",
+ "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/364518c132c95642e530d9b2d217acbc2ccac3e6",
+ "reference": "364518c132c95642e530d9b2d217acbc2ccac3e6",
"shasum": ""
},
"require": {
@@ -5566,20 +5738,20 @@
"interoperability",
"standards"
],
- "time": "2019-06-13T11:15:36+00:00"
+ "time": "2019-09-17T11:12:18+00:00"
},
{
"name": "symfony/yaml",
- "version": "v3.4.30",
+ "version": "v3.4.38",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "051d045c684148060ebfc9affb7e3f5e0899d40b"
+ "reference": "bc63e15160866e8730a1f738541b194c401f72bf"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/051d045c684148060ebfc9affb7e3f5e0899d40b",
- "reference": "051d045c684148060ebfc9affb7e3f5e0899d40b",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/bc63e15160866e8730a1f738541b194c401f72bf",
+ "reference": "bc63e15160866e8730a1f738541b194c401f72bf",
"shasum": ""
},
"require": {
@@ -5625,7 +5797,7 @@
],
"description": "Symfony Yaml Component",
"homepage": "https://symfony.com",
- "time": "2019-07-24T13:01:31+00:00"
+ "time": "2020-01-16T19:04:26+00:00"
},
{
"name": "symm/gisconverter",
@@ -5663,25 +5835,28 @@
"BSD"
],
"description": "A php library to convert vector geometries between different formats",
+ "abandoned": true,
"time": "2014-08-07T13:50:52+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
- "version": "2.2.1",
+ "version": "2.2.2",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
- "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757"
+ "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757",
- "reference": "0ed4a2ea4e0902dac0489e6436ebcd5bbcae9757",
+ "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/dda2ee426acd6d801d5b7fd1001cde9b5f790e15",
+ "reference": "dda2ee426acd6d801d5b7fd1001cde9b5f790e15",
"shasum": ""
},
"require": {
+ "ext-dom": "*",
+ "ext-libxml": "*",
"php": "^5.5 || ^7.0",
- "symfony/css-selector": "^2.7 || ^3.0 || ^4.0"
+ "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
@@ -5710,20 +5885,20 @@
],
"description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.",
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
- "time": "2017-11-27T11:13:29+00:00"
+ "time": "2019-10-24T08:53:34+00:00"
},
{
"name": "twilio/sdk",
- "version": "5.34.3",
+ "version": "5.42.2",
"source": {
"type": "git",
"url": "https://github.com/twilio/twilio-php.git",
- "reference": "45a00deb9592c1720de9e4e92443ce68e6a42688"
+ "reference": "0cfcb871b18a9c427dd9e8f0ed7458d43009b48a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/twilio/twilio-php/zipball/45a00deb9592c1720de9e4e92443ce68e6a42688",
- "reference": "45a00deb9592c1720de9e4e92443ce68e6a42688",
+ "url": "https://api.github.com/repos/twilio/twilio-php/zipball/0cfcb871b18a9c427dd9e8f0ed7458d43009b48a",
+ "reference": "0cfcb871b18a9c427dd9e8f0ed7458d43009b48a",
"shasum": ""
},
"require": {
@@ -5732,7 +5907,7 @@
"require-dev": {
"apigen/apigen": "^4.1",
"guzzlehttp/guzzle": "^6.3",
- "phpunit/phpunit": "4.5.*"
+ "phpunit/phpunit": ">=4.5"
},
"suggest": {
"guzzlehttp/guzzle": "An HTTP client to execute the API requests"
@@ -5740,7 +5915,7 @@
"type": "library",
"autoload": {
"psr-4": {
- "Twilio\\": "Twilio/"
+ "Twilio\\": "src/Twilio/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5760,7 +5935,7 @@
"sms",
"twilio"
],
- "time": "2019-08-05T16:26:55+00:00"
+ "time": "2020-02-05T19:55:13+00:00"
},
{
"name": "ushahidi/kohana-validation",
@@ -5848,6 +6023,58 @@
],
"time": "2019-01-29T11:11:52+00:00"
},
+ {
+ "name": "willdurand/negotiation",
+ "version": "v2.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/willdurand/Negotiation.git",
+ "reference": "03436ededa67c6e83b9b12defac15384cb399dc9"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/willdurand/Negotiation/zipball/03436ededa67c6e83b9b12defac15384cb399dc9",
+ "reference": "03436ededa67c6e83b9b12defac15384cb399dc9",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.5"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.3-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Negotiation\\": "src/Negotiation"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "William Durand",
+ "email": "will+git@drnd.me"
+ }
+ ],
+ "description": "Content Negotiation tools for PHP provided as a standalone library.",
+ "homepage": "http://williamdurand.fr/Negotiation/",
+ "keywords": [
+ "accept",
+ "content",
+ "format",
+ "header",
+ "negotiation"
+ ],
+ "time": "2017-05-14T17:21:12+00:00"
+ },
{
"name": "zendframework/zend-diactoros",
"version": "1.8.7",
@@ -5908,43 +6135,46 @@
"psr",
"psr-7"
],
+ "abandoned": "laminas/laminas-diactoros",
"time": "2019-08-06T17:53:53+00:00"
}
],
"packages-dev": [
{
"name": "behat/behat",
- "version": "v3.5.0",
+ "version": "v3.6.1",
"source": {
"type": "git",
"url": "https://github.com/Behat/Behat.git",
- "reference": "e4bce688be0c2029dc1700e46058d86428c63cab"
+ "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Behat/Behat/zipball/e4bce688be0c2029dc1700e46058d86428c63cab",
- "reference": "e4bce688be0c2029dc1700e46058d86428c63cab",
+ "url": "https://api.github.com/repos/Behat/Behat/zipball/9bfe195b4745c32e068af03fa4df9558b4916d30",
+ "reference": "9bfe195b4745c32e068af03fa4df9558b4916d30",
"shasum": ""
},
"require": {
- "behat/gherkin": "^4.5.1",
+ "behat/gherkin": "^4.6.0",
"behat/transliterator": "^1.2",
"container-interop/container-interop": "^1.2",
"ext-mbstring": "*",
"php": ">=5.3.3",
"psr/container": "^1.0",
- "symfony/class-loader": "~2.1||~3.0",
- "symfony/config": "~2.3||~3.0||~4.0",
- "symfony/console": "~2.7.40||^2.8.33||~3.3.15||^3.4.3||^4.0.3",
- "symfony/dependency-injection": "~2.1||~3.0||~4.0",
- "symfony/event-dispatcher": "~2.1||~3.0||~4.0",
- "symfony/translation": "~2.3||~3.0||~4.0",
- "symfony/yaml": "~2.1||~3.0||~4.0"
+ "symfony/config": "^2.7.51 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/console": "^2.7.51 || ^2.8.33 || ^3.3.15 || ^3.4.3 || ^4.0.3 || ^5.0",
+ "symfony/dependency-injection": "^2.7.51 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/event-dispatcher": "^2.7.51 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/translation": "^2.7.51 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/yaml": "^2.7.51 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"herrera-io/box": "~1.6.1",
- "phpunit/phpunit": "^4.8.36|^6.3",
- "symfony/process": "~2.5|~3.0|~4.0"
+ "phpunit/phpunit": "^4.8.36 || ^6.3",
+ "symfony/process": "~2.5 || ^3.0 || ^4.0 || ^5.0"
+ },
+ "suggest": {
+ "ext-dom": "Needed to output test results in JUnit format."
},
"bin": [
"bin/behat"
@@ -5952,13 +6182,13 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "3.5.x-dev"
+ "dev-master": "3.6.x-dev"
}
},
"autoload": {
- "psr-0": {
- "Behat\\Behat": "src/",
- "Behat\\Testwork": "src/"
+ "psr-4": {
+ "Behat\\Behat\\": "src/Behat/Behat/",
+ "Behat\\Testwork\\": "src/Behat/Testwork/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -5988,20 +6218,20 @@
"symfony",
"testing"
],
- "time": "2018-08-10T18:56:51+00:00"
+ "time": "2020-02-06T09:54:48+00:00"
},
{
"name": "behat/gherkin",
- "version": "v4.6.0",
+ "version": "v4.6.1",
"source": {
"type": "git",
"url": "https://github.com/Behat/Gherkin.git",
- "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07"
+ "reference": "25bdcaf37898b4a939fa3031d5d753ced97e4759"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Behat/Gherkin/zipball/ab0a02ea14893860bca00f225f5621d351a3ad07",
- "reference": "ab0a02ea14893860bca00f225f5621d351a3ad07",
+ "url": "https://api.github.com/repos/Behat/Gherkin/zipball/25bdcaf37898b4a939fa3031d5d753ced97e4759",
+ "reference": "25bdcaf37898b4a939fa3031d5d753ced97e4759",
"shasum": ""
},
"require": {
@@ -6047,35 +6277,34 @@
"gherkin",
"parser"
],
- "time": "2019-01-16T14:22:17+00:00"
+ "time": "2020-02-27T11:29:57+00:00"
},
{
"name": "behat/mink",
- "version": "dev-master",
+ "version": "v1.7.1",
"source": {
"type": "git",
"url": "https://github.com/minkphp/Mink.git",
- "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83"
+ "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/minkphp/Mink/zipball/a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
- "reference": "a534fe7dac9525e8e10ca68e737c3d7e5058ec83",
+ "url": "https://api.github.com/repos/minkphp/Mink/zipball/e6930b9c74693dff7f4e58577e1b1743399f3ff9",
+ "reference": "e6930b9c74693dff7f4e58577e1b1743399f3ff9",
"shasum": ""
},
"require": {
"php": ">=5.3.1",
- "symfony/css-selector": "^2.7|^3.0|^4.0"
+ "symfony/css-selector": "~2.1|~3.0"
},
"require-dev": {
- "symfony/phpunit-bridge": "^4.2"
+ "symfony/phpunit-bridge": "~2.7|~3.0"
},
"suggest": {
"behat/mink-browserkit-driver": "extremely fast headless driver for Symfony\\Kernel-based apps (Sf2, Silex)",
"behat/mink-goutte-driver": "fast headless driver for any app without JS emulation",
"behat/mink-selenium2-driver": "slow, but JS-enabled driver for any app (requires Selenium2)",
- "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)",
- "dmore/chrome-mink-driver": "fast and JS-enabled driver for any app (requires chromium or google chrome)"
+ "behat/mink-zombie-driver": "fast and JS-enabled headless driver for any app (requires node.js)"
},
"type": "library",
"extra": {
@@ -6106,7 +6335,7 @@
"testing",
"web"
],
- "time": "2019-07-15T12:45:29+00:00"
+ "time": "2016-03-05T08:26:18+00:00"
},
{
"name": "behat/mink-browserkit-driver",
@@ -6280,16 +6509,16 @@
},
{
"name": "behat/transliterator",
- "version": "v1.2.0",
+ "version": "v1.3.0",
"source": {
"type": "git",
"url": "https://github.com/Behat/Transliterator.git",
- "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c"
+ "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/Behat/Transliterator/zipball/826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c",
- "reference": "826ce7e9c2a6664c0d1f381cbb38b1fb80a7ee2c",
+ "url": "https://api.github.com/repos/Behat/Transliterator/zipball/3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
+ "reference": "3c4ec1d77c3d05caa1f0bf8fb3aae4845005c7fc",
"shasum": ""
},
"require": {
@@ -6297,7 +6526,8 @@
},
"require-dev": {
"chuyskywalker/rolling-curl": "^3.1",
- "php-yaoi/php-yaoi": "^1.0"
+ "php-yaoi/php-yaoi": "^1.0",
+ "phpunit/phpunit": "^4.8.36|^6.3"
},
"type": "library",
"extra": {
@@ -6306,8 +6536,8 @@
}
},
"autoload": {
- "psr-0": {
- "Behat\\Transliterator": "src/"
+ "psr-4": {
+ "Behat\\Transliterator\\": "src/Behat/Transliterator"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -6320,20 +6550,20 @@
"slug",
"transliterator"
],
- "time": "2017-04-04T11:38:05+00:00"
+ "time": "2020-01-14T16:39:13+00:00"
},
{
"name": "doctrine/instantiator",
- "version": "1.2.0",
+ "version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
- "reference": "a2c590166b2133a4633738648b6b064edae0814a"
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/doctrine/instantiator/zipball/a2c590166b2133a4633738648b6b064edae0814a",
- "reference": "a2c590166b2133a4633738648b6b064edae0814a",
+ "url": "https://api.github.com/repos/doctrine/instantiator/zipball/ae466f726242e637cebdd526a7d991b9433bacf1",
+ "reference": "ae466f726242e637cebdd526a7d991b9433bacf1",
"shasum": ""
},
"require": {
@@ -6376,7 +6606,7 @@
"constructor",
"instantiate"
],
- "time": "2019-03-17T17:37:11+00:00"
+ "time": "2019-10-21T16:45:58+00:00"
},
{
"name": "fabpot/goutte",
@@ -6435,16 +6665,16 @@
},
{
"name": "fzaninotto/faker",
- "version": "v1.8.0",
+ "version": "v1.9.1",
"source": {
"type": "git",
"url": "https://github.com/fzaninotto/Faker.git",
- "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de"
+ "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/f72816b43e74063c8b10357394b6bba8cb1c10de",
- "reference": "f72816b43e74063c8b10357394b6bba8cb1c10de",
+ "url": "https://api.github.com/repos/fzaninotto/Faker/zipball/fc10d778e4b84d5bd315dad194661e091d307c6f",
+ "reference": "fc10d778e4b84d5bd315dad194661e091d307c6f",
"shasum": ""
},
"require": {
@@ -6453,12 +6683,12 @@
"require-dev": {
"ext-intl": "*",
"phpunit/phpunit": "^4.8.35 || ^5.7",
- "squizlabs/php_codesniffer": "^1.5"
+ "squizlabs/php_codesniffer": "^2.9.2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.8-dev"
+ "dev-master": "1.9-dev"
}
},
"autoload": {
@@ -6481,7 +6711,7 @@
"faker",
"fixtures"
],
- "time": "2018-07-12T10:23:15+00:00"
+ "time": "2019-12-12T13:22:17+00:00"
},
{
"name": "hamcrest/hamcrest-php",
@@ -6537,12 +6767,12 @@
"source": {
"type": "git",
"url": "https://github.com/heroku/heroku-buildpack-php.git",
- "reference": "65bbee93ecc41f8a7d7f909e120c614763079167"
+ "reference": "3a6fb296c8d490e8c7d02f47d66764148bdaa642"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/65bbee93ecc41f8a7d7f909e120c614763079167",
- "reference": "65bbee93ecc41f8a7d7f909e120c614763079167",
+ "url": "https://api.github.com/repos/heroku/heroku-buildpack-php/zipball/3a6fb296c8d490e8c7d02f47d66764148bdaa642",
+ "reference": "3a6fb296c8d490e8c7d02f47d66764148bdaa642",
"shasum": ""
},
"bin": [
@@ -6573,7 +6803,7 @@
"nginx",
"php"
],
- "time": "2019-10-24T16:05:31+00:00"
+ "time": "2020-02-28T17:42:58+00:00"
},
{
"name": "laravel/homestead",
@@ -6697,16 +6927,16 @@
},
{
"name": "mockery/mockery",
- "version": "1.2.3",
+ "version": "1.3.1",
"source": {
"type": "git",
"url": "https://github.com/mockery/mockery.git",
- "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031"
+ "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/mockery/mockery/zipball/4eff936d83eb809bde2c57a3cea0ee9643769031",
- "reference": "4eff936d83eb809bde2c57a3cea0ee9643769031",
+ "url": "https://api.github.com/repos/mockery/mockery/zipball/f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
+ "reference": "f69bbde7d7a75d6b2862d9ca8fab1cd28014b4be",
"shasum": ""
},
"require": {
@@ -6720,7 +6950,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.3.x-dev"
}
},
"autoload": {
@@ -6758,20 +6988,20 @@
"test double",
"testing"
],
- "time": "2019-08-07T15:01:07+00:00"
+ "time": "2019-12-26T09:49:15+00:00"
},
{
"name": "myclabs/deep-copy",
- "version": "1.9.3",
+ "version": "1.9.5",
"source": {
"type": "git",
"url": "https://github.com/myclabs/DeepCopy.git",
- "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea"
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/007c053ae6f31bba39dfa19a7726f56e9763bbea",
- "reference": "007c053ae6f31bba39dfa19a7726f56e9763bbea",
+ "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/b2c28789e80a97badd14145fda39b545d83ca3ef",
+ "reference": "b2c28789e80a97badd14145fda39b545d83ca3ef",
"shasum": ""
},
"require": {
@@ -6806,37 +7036,40 @@
"object",
"object graph"
],
- "time": "2019-08-09T12:45:53+00:00"
+ "time": "2020-01-17T21:11:47+00:00"
},
{
"name": "php-mock/php-mock",
- "version": "2.1.2",
+ "version": "2.2.1",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock.git",
- "reference": "35379d7b382b787215617f124662d9ead72c15e3"
+ "reference": "8ca7205ad5e73fbbffa9bde9f6bc90daf5e49702"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock/zipball/35379d7b382b787215617f124662d9ead72c15e3",
- "reference": "35379d7b382b787215617f124662d9ead72c15e3",
+ "url": "https://api.github.com/repos/php-mock/php-mock/zipball/8ca7205ad5e73fbbffa9bde9f6bc90daf5e49702",
+ "reference": "8ca7205ad5e73fbbffa9bde9f6bc90daf5e49702",
"shasum": ""
},
"require": {
"php": "^5.6 || ^7.0",
- "phpunit/php-text-template": "^1"
+ "phpunit/php-text-template": "^1 || ^2"
},
"replace": {
"malkusch/php-mock": "*"
},
"require-dev": {
- "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0"
+ "phpunit/phpunit": "^5.7 || ^6.5 || ^7.5 || ^8.0 || ^9.0"
},
"suggest": {
"php-mock/php-mock-phpunit": "Allows integration into PHPUnit testcase with the trait PHPMock."
},
"type": "library",
"autoload": {
+ "files": [
+ "autoload.php"
+ ],
"psr-4": {
"phpmock\\": [
"classes/",
@@ -6867,29 +7100,29 @@
"test",
"test double"
],
- "time": "2019-06-05T20:10:01+00:00"
+ "time": "2020-02-08T14:50:32+00:00"
},
{
"name": "php-mock/php-mock-integration",
- "version": "2.0.0",
+ "version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/php-mock/php-mock-integration.git",
- "reference": "5a0d7d7755f823bc2a230cfa45058b40f9013bc4"
+ "reference": "003d585841e435958a02e9b986953907b8b7609b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-mock/php-mock-integration/zipball/5a0d7d7755f823bc2a230cfa45058b40f9013bc4",
- "reference": "5a0d7d7755f823bc2a230cfa45058b40f9013bc4",
+ "url": "https://api.github.com/repos/php-mock/php-mock-integration/zipball/003d585841e435958a02e9b986953907b8b7609b",
+ "reference": "003d585841e435958a02e9b986953907b8b7609b",
"shasum": ""
},
"require": {
"php": ">=5.6",
- "php-mock/php-mock": "^2",
- "phpunit/php-text-template": "^1"
+ "php-mock/php-mock": "^2.2",
+ "phpunit/php-text-template": "^1 || ^2"
},
"require-dev": {
- "phpunit/phpunit": "^4|^5"
+ "phpunit/phpunit": "^5.7.27 || ^6 || ^7 || ^8 || ^9"
},
"type": "library",
"autoload": {
@@ -6920,7 +7153,7 @@
"test",
"test double"
],
- "time": "2017-02-17T21:31:34+00:00"
+ "time": "2020-02-08T14:40:25+00:00"
},
{
"name": "php-mock/php-mock-mockery",
@@ -6957,9 +7190,9 @@
"authors": [
{
"name": "Markus Malkusch",
+ "role": "Developer",
"email": "markus@malkusch.de",
- "homepage": "http://markus.malkusch.de",
- "role": "Developer"
+ "homepage": "http://markus.malkusch.de"
}
],
"description": "Mock built-in PHP functions (e.g. time()) with Mockery. This package relies on PHP's namespace fallback policy. No further extension is needed.",
@@ -6978,35 +7211,33 @@
},
{
"name": "phpdocumentor/reflection-common",
- "version": "1.0.1",
+ "version": "2.0.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionCommon.git",
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6"
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
- "reference": "21bdeb5f65d7ebf9f43b1b25d404f87deab5bfb6",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/63a995caa1ca9e5590304cd845c15ad6d482a62a",
+ "reference": "63a995caa1ca9e5590304cd845c15ad6d482a62a",
"shasum": ""
},
"require": {
- "php": ">=5.5"
+ "php": ">=7.1"
},
"require-dev": {
- "phpunit/phpunit": "^4.6"
+ "phpunit/phpunit": "~6"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "2.x-dev"
}
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": [
- "src"
- ]
+ "phpDocumentor\\Reflection\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -7028,44 +7259,42 @@
"reflection",
"static analysis"
],
- "time": "2017-09-11T18:02:19+00:00"
+ "time": "2018-08-07T13:53:10+00:00"
},
{
"name": "phpdocumentor/reflection-docblock",
- "version": "4.3.1",
+ "version": "5.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
- "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c"
+ "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
- "reference": "bdd9f737ebc2a01c06ea7ff4308ec6697db9b53c",
+ "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
+ "reference": "cd72d394ca794d3466a3b2fc09d5a6c1dc86b47e",
"shasum": ""
},
"require": {
- "php": "^7.0",
- "phpdocumentor/reflection-common": "^1.0.0",
- "phpdocumentor/type-resolver": "^0.4.0",
- "webmozart/assert": "^1.0"
+ "ext-filter": "^7.1",
+ "php": "^7.2",
+ "phpdocumentor/reflection-common": "^2.0",
+ "phpdocumentor/type-resolver": "^1.0",
+ "webmozart/assert": "^1"
},
"require-dev": {
- "doctrine/instantiator": "~1.0.5",
- "mockery/mockery": "^1.0",
- "phpunit/phpunit": "^6.4"
+ "doctrine/instantiator": "^1",
+ "mockery/mockery": "^1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.x-dev"
+ "dev-master": "5.x-dev"
}
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": [
- "src/"
- ]
+ "phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -7076,44 +7305,46 @@
{
"name": "Mike van Riel",
"email": "me@mikevanriel.com"
+ },
+ {
+ "name": "Jaap van Otterdijk",
+ "email": "account@ijaap.nl"
}
],
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
- "time": "2019-04-30T17:48:53+00:00"
+ "time": "2020-02-22T12:28:44+00:00"
},
{
"name": "phpdocumentor/type-resolver",
- "version": "0.4.0",
+ "version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/phpDocumentor/TypeResolver.git",
- "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7"
+ "reference": "7462d5f123dfc080dfdf26897032a6513644fc95"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/9c977708995954784726e25d0cd1dddf4e65b0f7",
- "reference": "9c977708995954784726e25d0cd1dddf4e65b0f7",
+ "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/7462d5f123dfc080dfdf26897032a6513644fc95",
+ "reference": "7462d5f123dfc080dfdf26897032a6513644fc95",
"shasum": ""
},
"require": {
- "php": "^5.5 || ^7.0",
- "phpdocumentor/reflection-common": "^1.0"
+ "php": "^7.2",
+ "phpdocumentor/reflection-common": "^2.0"
},
"require-dev": {
- "mockery/mockery": "^0.9.4",
- "phpunit/phpunit": "^5.2||^4.8.24"
+ "ext-tokenizer": "^7.2",
+ "mockery/mockery": "~1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.0.x-dev"
+ "dev-master": "1.x-dev"
}
},
"autoload": {
"psr-4": {
- "phpDocumentor\\Reflection\\": [
- "src/"
- ]
+ "phpDocumentor\\Reflection\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@@ -7126,7 +7357,8 @@
"email": "me@mikevanriel.com"
}
],
- "time": "2017-07-14T14:27:02+00:00"
+ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
+ "time": "2020-02-18T18:59:58+00:00"
},
{
"name": "phpspec/php-diff",
@@ -7250,33 +7482,33 @@
},
{
"name": "phpspec/prophecy",
- "version": "1.8.1",
+ "version": "v1.10.2",
"source": {
"type": "git",
"url": "https://github.com/phpspec/prophecy.git",
- "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76"
+ "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpspec/prophecy/zipball/1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
- "reference": "1927e75f4ed19131ec9bcc3b002e07fb1173ee76",
+ "url": "https://api.github.com/repos/phpspec/prophecy/zipball/b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
+ "reference": "b4400efc9d206e83138e2bb97ed7f5b14b831cd9",
"shasum": ""
},
"require": {
"doctrine/instantiator": "^1.0.2",
"php": "^5.3|^7.0",
- "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0",
- "sebastian/comparator": "^1.1|^2.0|^3.0",
- "sebastian/recursion-context": "^1.0|^2.0|^3.0"
+ "phpdocumentor/reflection-docblock": "^2.0|^3.0.2|^4.0|^5.0",
+ "sebastian/comparator": "^1.2.3|^2.0|^3.0|^4.0",
+ "sebastian/recursion-context": "^1.0|^2.0|^3.0|^4.0"
},
"require-dev": {
- "phpspec/phpspec": "^2.5|^3.2",
+ "phpspec/phpspec": "^2.5 || ^3.2",
"phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.5 || ^7.1"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.8.x-dev"
+ "dev-master": "1.10.x-dev"
}
},
"autoload": {
@@ -7309,7 +7541,7 @@
"spy",
"stub"
],
- "time": "2019-06-13T12:50:23+00:00"
+ "time": "2020-01-20T15:57:02+00:00"
},
{
"name": "phpunit/dbunit",
@@ -7421,8 +7653,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sb@sebastian-bergmann.de"
}
],
"description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
@@ -7469,8 +7701,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sb@sebastian-bergmann.de"
}
],
"description": "FilterIterator implementation that filters files based on a list of suffixes.",
@@ -7511,8 +7743,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Simple template engine.",
@@ -7560,8 +7792,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sb@sebastian-bergmann.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sb@sebastian-bergmann.de"
}
],
"description": "Utility class for timing",
@@ -7689,8 +7921,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sebastian@phpunit.de"
}
],
"description": "The PHP Unit Testing framework.",
@@ -7764,16 +7996,16 @@
},
{
"name": "satooshi/php-coveralls",
- "version": "v2.1.0",
+ "version": "v2.2.0",
"source": {
"type": "git",
"url": "https://github.com/php-coveralls/php-coveralls.git",
- "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d"
+ "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3b00c229726f892bfdadeaf01ea430ffd04a939d",
- "reference": "3b00c229726f892bfdadeaf01ea430ffd04a939d",
+ "url": "https://api.github.com/repos/php-coveralls/php-coveralls/zipball/3e6420fa666ef7bae5e750ddeac903153e193bae",
+ "reference": "3e6420fa666ef7bae5e750ddeac903153e193bae",
"shasum": ""
},
"require": {
@@ -7782,10 +8014,10 @@
"guzzlehttp/guzzle": "^6.0",
"php": "^5.5 || ^7.0",
"psr/log": "^1.0",
- "symfony/config": "^2.1 || ^3.0 || ^4.0",
- "symfony/console": "^2.1 || ^3.0 || ^4.0",
- "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0",
- "symfony/yaml": "^2.0 || ^3.0 || ^4.0"
+ "symfony/config": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/console": "^2.1 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/stopwatch": "^2.0 || ^3.0 || ^4.0 || ^5.0",
+ "symfony/yaml": "^2.0.5 || ^3.0 || ^4.0 || ^5.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.35 || ^5.4.3 || ^6.0"
@@ -7799,7 +8031,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "2.1-dev"
+ "dev-master": "2.2-dev"
}
},
"autoload": {
@@ -7844,7 +8076,7 @@
"test"
],
"abandoned": "php-coveralls/php-coveralls",
- "time": "2018-05-22T23:11:08+00:00"
+ "time": "2019-11-20T16:29:20+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -8351,8 +8583,8 @@
"authors": [
{
"name": "Sebastian Bergmann",
- "email": "sebastian@phpunit.de",
- "role": "lead"
+ "role": "lead",
+ "email": "sebastian@phpunit.de"
}
],
"description": "Library that helps with managing the version number of Git-hosted PHP projects",
@@ -8518,16 +8750,16 @@
},
{
"name": "squizlabs/php_codesniffer",
- "version": "3.4.2",
+ "version": "3.5.4",
"source": {
"type": "git",
"url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
- "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8"
+ "reference": "dceec07328401de6211037abbb18bda423677e26"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8",
- "reference": "b8a7362af1cc1aadb5bd36c3defc4dda2cf5f0a8",
+ "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/dceec07328401de6211037abbb18bda423677e26",
+ "reference": "dceec07328401de6211037abbb18bda423677e26",
"shasum": ""
},
"require": {
@@ -8565,31 +8797,31 @@
"phpcs",
"standards"
],
- "time": "2019-04-10T23:49:02+00:00"
+ "time": "2020-01-30T22:20:29+00:00"
},
{
"name": "symfony/browser-kit",
- "version": "v4.3.3",
+ "version": "v4.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/browser-kit.git",
- "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca"
+ "reference": "090ce406505149d6852a7c03b0346dec3b8cf612"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/browser-kit/zipball/a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
- "reference": "a29dd02a1f3f81b9a15c7730cc3226718ddb55ca",
+ "url": "https://api.github.com/repos/symfony/browser-kit/zipball/090ce406505149d6852a7c03b0346dec3b8cf612",
+ "reference": "090ce406505149d6852a7c03b0346dec3b8cf612",
"shasum": ""
},
"require": {
"php": "^7.1.3",
- "symfony/dom-crawler": "~3.4|~4.0"
+ "symfony/dom-crawler": "^3.4|^4.0|^5.0"
},
"require-dev": {
- "symfony/css-selector": "~3.4|~4.0",
- "symfony/http-client": "^4.3",
- "symfony/mime": "^4.3",
- "symfony/process": "~3.4|~4.0"
+ "symfony/css-selector": "^3.4|^4.0|^5.0",
+ "symfony/http-client": "^4.3|^5.0",
+ "symfony/mime": "^4.3|^5.0",
+ "symfony/process": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/process": ""
@@ -8597,7 +8829,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "4.4-dev"
}
},
"autoload": {
@@ -8624,63 +8856,7 @@
],
"description": "Symfony BrowserKit Component",
"homepage": "https://symfony.com",
- "time": "2019-06-11T15:41:59+00:00"
- },
- {
- "name": "symfony/class-loader",
- "version": "v3.4.30",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/class-loader.git",
- "reference": "4459eef5298dedfb69f771186a580062b8516497"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/class-loader/zipball/4459eef5298dedfb69f771186a580062b8516497",
- "reference": "4459eef5298dedfb69f771186a580062b8516497",
- "shasum": ""
- },
- "require": {
- "php": "^5.5.9|>=7.0.8"
- },
- "require-dev": {
- "symfony/finder": "~2.8|~3.0|~4.0",
- "symfony/polyfill-apcu": "~1.1"
- },
- "suggest": {
- "symfony/polyfill-apcu": "For using ApcClassLoader on HHVM"
- },
- "type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "3.4-dev"
- }
- },
- "autoload": {
- "psr-4": {
- "Symfony\\Component\\ClassLoader\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Fabien Potencier",
- "email": "fabien@symfony.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Symfony ClassLoader Component",
- "homepage": "https://symfony.com",
- "time": "2019-01-16T09:39:14+00:00"
+ "time": "2020-02-23T10:00:59+00:00"
},
{
"name": "symfony/dependency-injection",
@@ -8755,16 +8931,16 @@
},
{
"name": "symfony/dom-crawler",
- "version": "v4.3.3",
+ "version": "v4.4.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/dom-crawler.git",
- "reference": "291397232a2eefb3347eaab9170409981eaad0e2"
+ "reference": "11dcf08f12f29981bf770f097a5d64d65bce5929"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/291397232a2eefb3347eaab9170409981eaad0e2",
- "reference": "291397232a2eefb3347eaab9170409981eaad0e2",
+ "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/11dcf08f12f29981bf770f097a5d64d65bce5929",
+ "reference": "11dcf08f12f29981bf770f097a5d64d65bce5929",
"shasum": ""
},
"require": {
@@ -8777,7 +8953,7 @@
},
"require-dev": {
"masterminds/html5": "^2.6",
- "symfony/css-selector": "~3.4|~4.0"
+ "symfony/css-selector": "^3.4|^4.0|^5.0"
},
"suggest": {
"symfony/css-selector": ""
@@ -8785,7 +8961,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "4.4-dev"
}
},
"autoload": {
@@ -8812,24 +8988,24 @@
],
"description": "Symfony DomCrawler Component",
"homepage": "https://symfony.com",
- "time": "2019-06-13T11:03:18+00:00"
+ "time": "2020-02-29T10:05:28+00:00"
},
{
"name": "symfony/service-contracts",
- "version": "v1.1.5",
+ "version": "v2.0.1",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
- "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d"
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d",
- "reference": "f391a00de78ec7ec8cf5cdcdae59ec7b883edb8d",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/144c5e51266b281231e947b51223ba14acf1a749",
+ "reference": "144c5e51266b281231e947b51223ba14acf1a749",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
+ "php": "^7.2.5",
"psr/container": "^1.0"
},
"suggest": {
@@ -8838,7 +9014,7 @@
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "1.1-dev"
+ "dev-master": "2.0-dev"
}
},
"autoload": {
@@ -8870,30 +9046,30 @@
"interoperability",
"standards"
],
- "time": "2019-06-13T11:15:36+00:00"
+ "time": "2019-11-18T17:27:11+00:00"
},
{
"name": "symfony/stopwatch",
- "version": "v4.3.3",
+ "version": "v5.0.5",
"source": {
"type": "git",
"url": "https://github.com/symfony/stopwatch.git",
- "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b"
+ "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/stopwatch/zipball/6b100e9309e8979cf1978ac1778eb155c1f7d93b",
- "reference": "6b100e9309e8979cf1978ac1778eb155c1f7d93b",
+ "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5d9add8034135b9a5f7b101d1e42c797e7f053e4",
+ "reference": "5d9add8034135b9a5f7b101d1e42c797e7f053e4",
"shasum": ""
},
"require": {
- "php": "^7.1.3",
- "symfony/service-contracts": "^1.0"
+ "php": "^7.2.5",
+ "symfony/service-contracts": "^1.0|^2"
},
"type": "library",
"extra": {
"branch-alias": {
- "dev-master": "4.3-dev"
+ "dev-master": "5.0-dev"
}
},
"autoload": {
@@ -8920,36 +9096,33 @@
],
"description": "Symfony Stopwatch Component",
"homepage": "https://symfony.com",
- "time": "2019-05-27T08:16:38+00:00"
+ "time": "2020-01-04T14:08:26+00:00"
},
{
"name": "webmozart/assert",
- "version": "1.4.0",
+ "version": "1.7.0",
"source": {
"type": "git",
"url": "https://github.com/webmozart/assert.git",
- "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9"
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/webmozart/assert/zipball/83e253c8e0be5b0257b881e1827274667c5c17a9",
- "reference": "83e253c8e0be5b0257b881e1827274667c5c17a9",
+ "url": "https://api.github.com/repos/webmozart/assert/zipball/aed98a490f9a8f78468232db345ab9cf606cf598",
+ "reference": "aed98a490f9a8f78468232db345ab9cf606cf598",
"shasum": ""
},
"require": {
"php": "^5.3.3 || ^7.0",
"symfony/polyfill-ctype": "^1.8"
},
+ "conflict": {
+ "vimeo/psalm": "<3.6.0"
+ },
"require-dev": {
- "phpunit/phpunit": "^4.6",
- "sebastian/version": "^1.0.1"
+ "phpunit/phpunit": "^4.8.36 || ^7.5.13"
},
"type": "library",
- "extra": {
- "branch-alias": {
- "dev-master": "1.3-dev"
- }
- },
"autoload": {
"psr-4": {
"Webmozart\\Assert\\": "src/"
@@ -8971,7 +9144,7 @@
"check",
"validate"
],
- "time": "2018-12-25T11:19:39+00:00"
+ "time": "2020-02-14T12:15:55+00:00"
}
],
"aliases": [],
@@ -8988,7 +9161,7 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
- "php": ">=7.0 <7.4"
+ "php": ">=7.2 <7.4"
},
"platform-dev": []
}
diff --git a/config/language.php b/config/language.php
new file mode 100644
index 0000000000..0609333905
--- /dev/null
+++ b/config/language.php
@@ -0,0 +1,8 @@
+ ['ar', 'cs', 'en', 'en_GB', 'es', 'pt_BR']
+];
diff --git a/docker/build.Dockerfile b/docker/build.Dockerfile
index 4fd68dfb90..4d8ac3cdc0 100644
--- a/docker/build.Dockerfile
+++ b/docker/build.Dockerfile
@@ -1,4 +1,4 @@
-FROM ushahidi/php-ci:php-7.1
+FROM ushahidi/php-ci:php-7.2
WORKDIR /var/www
COPY composer.json ./
diff --git a/docs/README.md b/docs/README.md
index 8167190686..7c430de7e7 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -8,7 +8,7 @@
Ushahidi is an open source web application for information collection, visualization and interactive mapping. It helps you to collect info from: SMS, Twitter, RSS feeds, Email. It helps you to process that information, categorize it, geo-locate it and publish it on a map.
-## Required reading: Code of Conduct.
+## Required reading: Code of Conduct.
We love having you here. To ensure everyone has a good experience, we ask **everyone** that interacts with our community and staff to read our code of conduct.
diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md
index f5448d97bb..5c5db188c3 100644
--- a/docs/SUMMARY.md
+++ b/docs/SUMMARY.md
@@ -110,4 +110,5 @@
## Enhancement Proposals
* [Exchange Format](enhancement-proposals/exchange-format.md)
+* [Importing data from previous versions](enhancement-proposals/importing-data-from-previous-versions.md)
diff --git a/docs/code-of-conduct/README.md b/docs/code-of-conduct/README.md
index 7abbeb0935..ac8d3237ca 100644
--- a/docs/code-of-conduct/README.md
+++ b/docs/code-of-conduct/README.md
@@ -78,7 +78,7 @@ If you feel unsafe reporting in person, you may choose someone to represent you.
## What can happen if the CoC is violated?
-When we receive a report of a violation, we notify the reporter that we have received the report and the Code of Conduct team will meet to review the report. The team may decide on action to take based on the information given, or, if we want more information, we will contact the reporter.
+When we receive a report of a violation, we notify the reporter that we have received the report and the Code of Conduct team will meet to review the report. The team may decide on action to take based on the information given, or, if we want more information, we will contact the reporter.
In case of a Code of Conduct violation, the actions we may take are:
@@ -97,9 +97,5 @@ In case of a Code of Conduct violation, the actions we may take are:
### **Conflict of interest**
-If we believe that there is a conflict of interest, for example, one member of the team was involved in the incident, are friends with, or have any other relationship with the person violating the CoC, that could affect the ability to stay neutral, then this member will not be participating in handling the request.
-
-
-
-
+If we believe that there is a conflict of interest, for example, one member of the team was involved in the incident, are friends with, or have any other relationship with the person violating the CoC, that could affect the ability to stay neutral, then this member will not be participating in handling the request.
diff --git a/docs/code-of-conduct/values.md b/docs/code-of-conduct/values.md
index 12b356112d..b030ccc7c1 100644
--- a/docs/code-of-conduct/values.md
+++ b/docs/code-of-conduct/values.md
@@ -1,6 +1,6 @@
# Values
-### Be Considerate
+## Be Considerate
* There are different levels of digital literacy and language/localization in a global community.
* Help each volunteer find roles that work for them and help them learn.
@@ -8,7 +8,7 @@
* Be respectful toward all time zones.
* We agree to make this an environment where it is safe to ask for help.
-### Be Respectful
+## Be Respectful
* Consider the ethics of data sharing/ownership.
* Practice and contribute under the principle of "do no harm".
@@ -17,7 +17,7 @@
* Be polite, friendly and patient in all forms of communication and value each other's ideas,styles and viewpoints.
* Be careful in the words that you choose.
-### Be Inclusive
+## Be Inclusive
* Being inclusive means being kind and community focused.
* Go out of your way and across cultures to include people and help new perspectives to be heard.
@@ -26,7 +26,7 @@
* Be an ally to others when you see a need.
* Accomodate many cultural practises, attitude and beliefs.
-### Be Collaborative
+## Be Collaborative
* When we disagree, we consult others.
* When we are unsure, we ask for help.
@@ -35,7 +35,7 @@
* Hand off your work considerately by turning over remaining tasks to the coordinator, team lead or another contributor.
* Ensure and create thorough documentation to protect resilience.
-### Be Transparent
+## Be Transparent
* Maintain transparency of process and code.
* Share your process, best practices, and lessons learned so others have opportunities to share with you, and to help build community.
@@ -43,13 +43,13 @@
* **\(Prerequisites do have to be set. Depending on how a VTC is organized, their leadership may be assuming legal liability for actions of members. Those assuming risk have to be in a position to control their risk by setting rules.\)**
* Seek to overcome barriers that stand between us and the reality of those around us, as well as participation in society.
-### **Be Mindful of People's Privacy**
+## **Be Mindful of People's Privacy**
* Be mindful of security and privacy considerations. Do not share sensitive data \(see the [ICRC Professional Standards on Protection Work](http://www.icrc.org/eng/resources/documents/publication/p0999.htm)\).
* Follow verification and security guidelines for mapping – do not publish dangerous speech, personal names, and personal identifying information \(guidelines to be determined\).
* Ushahidi adheres to and is compliant with GDPR. You can find out more about our GDPR compliance in our [Privacy Policy](https://www.ushahidi.com/privacy-policy) and [Terms of Service](https://www.ushahidi.com/terms-of-service).
-### Committing to Self-Improvement
+## Committing to Self-Improvement
None of us are perfect: all of us from time to time will fail to live up to our very high standards. What matters isn’t having a perfect track record, but owning up to your mistakes and committing to a clear and persistent effort to improve.
diff --git a/docs/contributing-or-getting-involved/README.md b/docs/contributing-or-getting-involved/README.md
index 6cf63657dd..71b95bcb68 100644
--- a/docs/contributing-or-getting-involved/README.md
+++ b/docs/contributing-or-getting-involved/README.md
@@ -29,7 +29,7 @@ If you think you have found a security issue, please follow [this link where we
### ⌨️ **I want to fix a bug**
-If you want to contribute a fix for a bug you or someone else found, we will be happy to review your PR and provide support**.** You can find our issues here:
+If you want to contribute a fix for a bug you or someone else found, we will be happy to review your PR and provide support**.** You can find our issues here:
* [All issues available for the community](https://github.com/ushahidi/platform/issues?q=is%3Aopen+is%3Aissue+label%3A%22Community+Task%22)
* [First-timers-only-issues](https://github.com/ushahidi/platform/issues?q=is%3Aopen+is%3Aissue+label%3Afirst-timers-only)
@@ -64,7 +64,3 @@ You are welcome and encouraged to jump in and help other members of the communit
We encourage community development workers, international development workers, activists and volunteers to join in and contribute with their knowledge and experience. Check out the section [Encouraging contribution from non-developers](encouraging-contribution-from-non-developers.md) to learn more how you can get involved.
-###
-
-
-
diff --git a/docs/contributing-or-getting-involved/workflow-for-adding-code.md b/docs/contributing-or-getting-involved/workflow-for-adding-code.md
index 65bb4eb665..f619d98e05 100644
--- a/docs/contributing-or-getting-involved/workflow-for-adding-code.md
+++ b/docs/contributing-or-getting-involved/workflow-for-adding-code.md
@@ -83,12 +83,14 @@ When you’re ready to submit your code for approval, do this:
git push origin some-task
```
-2. Then, open your fork on github, ie. _"https://www.github.com/yourusername/platform"_. You’ll see a banner indicating that you’ve recently pushed a new branch, and that you can submit this branch “upstream,” to the original repository:![](https://github-images.s3.amazonaws.com/help/pull_requests/recently_pushed_branch.png)
-3. Click on "Compare and Pull Request" to create a pull request. Enter a title and description, then click "Create pull request".
+2. Then, open your fork on github, ie. _"_[https://www.github.com/yourusername/platform](https://www.github.com/yourusername/platform)_"_. You’ll see a banner indicating that you’ve recently pushed a new branch, and that you can submit this branch “upstream,” to the original repository:![](https://github-images.s3.amazonaws.com/help/pull_requests/recently_pushed_branch.png)
+3. Click on "Compare and Pull Request" to create a pull request. Enter a title and description, then click "Create pull request".
- ![](https://github-images.s3.amazonaws.com/help/pull_requests/pullrequest-send.png)
+ ```text
+ ![](https://github-images.s3.amazonaws.com/help/pull_requests/pullrequest-send.png)
+ ```
-In order to make it easy for someone to review your pull request, please write a checklist for how to test and evaluate your submission. You can read more about
+In order to make it easy for someone to review your pull request, please write a checklist for how to test and evaluate your submission. You can read more about
The first time you submit code you may be asked to sign Ushahidi’s [contributor agreement](https://docs.google.com/forms/d/e/1FAIpQLScqz_EQbz_CYlSHffnGx7p2GdqP23FmbACwocIWejEHYLyzdg/viewform).
@@ -107,5 +109,3 @@ If your code is accepted, then the admin will merge your pull request. Your code
* [Contributing to open source](https://guides.github.com/activities/contributing-to-open-source/)
* [Forking projects](https://guides.github.com/activities/forking/)
-
-
diff --git a/docs/contributors-to-ushahidi.md b/docs/contributors-to-ushahidi.md
index 0fdf0e24e5..999869cdb6 100644
--- a/docs/contributors-to-ushahidi.md
+++ b/docs/contributors-to-ushahidi.md
@@ -16,35 +16,38 @@ Usage example `@all-contributors add @username for code` Usage example `@all-con
See all available contribution types here [https://allcontributors.org/docs/en/emoji-key](https://allcontributors.org/docs/en/emoji-key)
-| [![Anna Iosif](https://avatars3.githubusercontent.com/u/8624777?v=4) **Anna Iosif**](https://github.com/Angamanga) [📖](https://github.com/ushahidi/platform/commits?author=Angamanga) [💻](https://github.com/ushahidi/platform/commits?author=Angamanga) [🐛](https://github.com/ushahidi/platform/issues?q=author%3AAngamanga) [👀](contributors-to-ushahidi.md#review-Angamanga) [✅](contributors-to-ushahidi.md#tutorial-Angamanga) [🤔](contributors-to-ushahidi.md#ideas-Angamanga) | [![Romina Suarez](https://avatars0.githubusercontent.com/u/2434401?v=4) **Romina Suarez**](https://github.com/rowasc) [💻](https://github.com/ushahidi/platform/commits?author=rowasc) [📖](https://github.com/ushahidi/platform/commits?author=rowasc) [🤔](contributors-to-ushahidi.md#ideas-rowasc) [👀](contributors-to-ushahidi.md#review-rowasc) |
+| [![](https://avatars3.githubusercontent.com/u/8624777?v=4) **Anna Iosif**](https://github.com/Angamanga) [📖](https://github.com/ushahidi/platform/commits?author=Angamanga) [💻](https://github.com/ushahidi/platform/commits?author=Angamanga) [🐛](https://github.com/ushahidi/platform/issues?q=author%3AAngamanga) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3AAngamanga) [✅](contributors-to-ushahidi.md#tutorial-Angamanga) [🤔](contributors-to-ushahidi.md#ideas-Angamanga) | [![](https://avatars0.githubusercontent.com/u/2434401?v=4) **Romina Suarez**](https://github.com/rowasc) [💻](https://github.com/ushahidi/platform/commits?author=rowasc) [📖](https://github.com/ushahidi/platform/commits?author=rowasc) [🤔](contributors-to-ushahidi.md#ideas-rowasc) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Arowasc) |
| :--- | :--- |
-| [![Robbie Mackay](https://avatars2.githubusercontent.com/u/7965?v=4) **Robbie Mackay**](http://robbiemackay.com) [💻](https://github.com/ushahidi/platform/commits?author=rjmackay) [👀](contributors-to-ushahidi.md#review-rjmackay) [🤔](contributors-to-ushahidi.md#ideas-rjmackay) [🛡️](contributors-to-ushahidi.md#security-rjmackay) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Arjmackay) | [![Jason Mule](https://avatars0.githubusercontent.com/u/150815?v=4) **Jason Mule**](https://github.com/jasonmule) [💻](https://github.com/ushahidi/platform/commits?author=jasonmule) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Ajasonmule) [👀](contributors-to-ushahidi.md#review-jasonmule) |
-| [![will](https://avatars3.githubusercontent.com/u/2694405?v=4) **will**](https://github.com/willdoran) [💻](https://github.com/ushahidi/platform/commits?author=willdoran) [🛡️](contributors-to-ushahidi.md#security-willdoran) [👀](contributors-to-ushahidi.md#review-willdoran) | [![David Losada](https://avatars3.githubusercontent.com/u/467393?v=4) **David Losada**](http://tuxpiper.com) [💻](https://github.com/ushahidi/platform/commits?author=tuxpiper) [👀](contributors-to-ushahidi.md#review-tuxpiper) [🤔](contributors-to-ushahidi.md#ideas-tuxpiper) [🛡️](contributors-to-ushahidi.md#security-tuxpiper) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Atuxpiper) |
-| [![Eriol Fox](https://avatars0.githubusercontent.com/u/11681324?v=4) **Eriol Fox**](http://www.erioldoesdesign.com) [🎨](contributors-to-ushahidi.md#design-Erioldoesdesign) [📖](https://github.com/ushahidi/platform/commits?author=Erioldoesdesign) [🤔](contributors-to-ushahidi.md#ideas-Erioldoesdesign) | [![Henry Addo](https://avatars0.githubusercontent.com/u/73175?v=4) **Henry Addo**](http://www.addhen.org) [💻](https://github.com/ushahidi/platform/commits?author=eyedol) [👀](contributors-to-ushahidi.md#review-eyedol) |
-| [![James Greenleaf](https://avatars0.githubusercontent.com/u/915878?v=4) **James Greenleaf**](https://james.greenle.af) [💻](https://github.com/ushahidi/platform/commits?author=aMoniker) [👀](contributors-to-ushahidi.md#review-aMoniker) | [![Carolyn Commons](https://avatars0.githubusercontent.com/u/8941223?v=4) **Carolyn Commons**](https://github.com/crcommons) [👀](contributors-to-ushahidi.md#review-crcommons) [💻](https://github.com/ushahidi/platform/commits?author=crcommons) [🤔](contributors-to-ushahidi.md#ideas-crcommons) |
-| [![Linda Kamau](https://avatars3.githubusercontent.com/u/155218?v=4) **Linda Kamau**](http://www.codediva.co.ke) [👀](contributors-to-ushahidi.md#review-kamaulynder) [💻](https://github.com/ushahidi/platform/commits?author=kamaulynder) [🤔](contributors-to-ushahidi.md#ideas-kamaulynder) | [![Mark Kinsella](https://avatars0.githubusercontent.com/u/6600708?v=4) **Mark Kinsella**](https://github.com/kinstelli) [👀](contributors-to-ushahidi.md#review-kinstelli) [💻](https://github.com/ushahidi/platform/commits?author=kinstelli) [🤔](contributors-to-ushahidi.md#ideas-kinstelli) |
-| [![David Kobia](https://avatars3.githubusercontent.com/u/184092?v=4) **David Kobia**](http://www.kobia.net) [👀](contributors-to-ushahidi.md#review-dkobia) [💻](https://github.com/ushahidi/platform/commits?author=dkobia) [🤔](contributors-to-ushahidi.md#ideas-dkobia) | [![Juan Ricafort](https://avatars1.githubusercontent.com/u/37776843?v=4) **Juan Ricafort**](https://github.com/jrtricafort) [🤔](contributors-to-ushahidi.md#ideas-jrtricafort) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Ajrtricafort) [💼](contributors-to-ushahidi.md#business-jrtricafort) |
-| [![jess](https://avatars3.githubusercontent.com/u/7316730?v=4) **jess**](http://jessachandler.com) [📖](https://github.com/ushahidi/platform/commits?author=monkeywithacupcake) | [![Zack Halloran](https://avatars0.githubusercontent.com/u/446225?v=4) **Zack Halloran**](https://github.com/zhalloran) [💻](https://github.com/ushahidi/platform/commits?author=zhalloran) |
-| [![hollycorbett](https://avatars2.githubusercontent.com/u/849131?v=4) **hollycorbett**](https://github.com/hollycorbett) [💻](https://github.com/ushahidi/platform/commits?author=hollycorbett) | [![Vladimir Cvetic](https://avatars1.githubusercontent.com/u/644800?v=4) **Vladimir Cvetic**](http://ferdinand.rs) [💻](https://github.com/ushahidi/platform/commits?author=cvele) |
-| [![StaicyG](https://avatars0.githubusercontent.com/u/25605883?v=4) **StaicyG**](https://github.com/StaicyG) [🤔](contributors-to-ushahidi.md#ideas-StaicyG) [📖](https://github.com/ushahidi/platform/commits?author=StaicyG) [💬](contributors-to-ushahidi.md#question-StaicyG) | [![Yassin Mohii](https://avatars0.githubusercontent.com/u/6831661?v=4) **Yassin Mohii**](https://github.com/ymohii) [💻](https://github.com/ushahidi/platform/commits?author=ymohii) [👀](contributors-to-ushahidi.md#review-ymohii) |
-| [![Woody Gilk](https://avatars3.githubusercontent.com/u/38203?v=4) **Woody Gilk**](https://www.shadowhand.com/) [💻](https://github.com/ushahidi/platform/commits?author=shadowhand) [👀](contributors-to-ushahidi.md#review-shadowhand) | [![Sam](https://avatars0.githubusercontent.com/u/958800?v=4) **Sam**](https://github.com/samtheson) [📖](https://github.com/ushahidi/platform/commits?author=samtheson) |
-| [![Alex Hoyau](https://avatars0.githubusercontent.com/u/715377?v=4) **Alex Hoyau**](https://lexoyo.me) [📖](https://github.com/ushahidi/platform/commits?author=lexoyo) | [![Angela Oduor Lungati](https://avatars1.githubusercontent.com/u/721918?v=4) **Angela Oduor Lungati**](https://github.com/aoduor) [📖](https://github.com/ushahidi/platform/commits?author=aoduor) [🤔](contributors-to-ushahidi.md#ideas-aoduor) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aaoduor) [💬](contributors-to-ushahidi.md#question-aoduor) [💼](contributors-to-ushahidi.md#business-aoduor) |
-| [![Andrés Ignacio Torres](https://avatars3.githubusercontent.com/u/26191851?v=4) **Andrés Ignacio Torres**](http://aitorres.com.ve) [📖](https://github.com/ushahidi/platform/commits?author=aitorres) | [![Virgílio N Santos](https://avatars0.githubusercontent.com/u/276746?v=4) **Virgílio N Santos**](https://github.com/virgilio) [📖](https://github.com/ushahidi/platform/commits?author=virgilio) |
-| [![David Mallard](https://avatars3.githubusercontent.com/u/3615012?v=4) **David Mallard**](https://davidmallard.id.au/) [💻](https://github.com/ushahidi/platform/commits?author=tobiasziegler) | [![Ryan Christoffersen](https://avatars3.githubusercontent.com/u/12519942?v=4) **Ryan Christoffersen**](https://ryanchristo.com/) [💻](https://github.com/ushahidi/platform/commits?author=ryanchristo) |
-| [![Burak Özdemir](https://avatars3.githubusercontent.com/u/5355510?v=4) **Burak Özdemir**](https://ozdemirburak.com) [💻](https://github.com/ushahidi/platform/commits?author=ozdemirburak) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aozdemirburak) | [![Mohammad Sameer](https://avatars1.githubusercontent.com/u/28915865?v=4) **Mohammad Sameer**](http://m-sameer.github.io) [📖](https://github.com/ushahidi/platform/commits?author=m-sameer) |
-| [![Jacob Ashdown](https://avatars3.githubusercontent.com/u/677893?v=4) **Jacob Ashdown**](http://www.coherent.technology) [💻](https://github.com/ushahidi/platform/commits?author=jcbashdown) | [![Gianluca Varisco](https://avatars3.githubusercontent.com/u/945486?v=4) **Gianluca Varisco**](https://github.com/gvarisco) [📖](https://github.com/ushahidi/platform/commits?author=gvarisco) |
-| [![Evan Sims](https://avatars2.githubusercontent.com/u/3093?v=4) **Evan Sims**](https://keybase.io/evansims) [💻](https://github.com/ushahidi/platform/commits?author=evansims) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aevansims) [👀](contributors-to-ushahidi.md#review-evansims) | [![Charlie](https://avatars0.githubusercontent.com/u/1618793?v=4) **Charlie**](https://github.com/caharding) [📖](https://github.com/ushahidi/platform/commits?author=caharding) [🤔](contributors-to-ushahidi.md#ideas-caharding) [💼](contributors-to-ushahidi.md#business-caharding) |
-| [![Brylie Christopher Oxley](https://avatars1.githubusercontent.com/u/17307?v=4) **Brylie Christopher Oxley**](https://bryliechristopheroxley.info) [📖](https://github.com/ushahidi/platform/commits?author=brylie) | [![Rajiv Abraham](https://avatars3.githubusercontent.com/u/214189?v=4) **Rajiv Abraham**](https://github.com/RAbraham) [📖](https://github.com/ushahidi/platform/commits?author=RAbraham) |
-| [![Miguel Dinis](https://avatars0.githubusercontent.com/u/6632800?v=4) **Miguel Dinis**](https://github.com/MigDinny) [📖](https://github.com/ushahidi/platform/commits?author=MigDinny) | [![Daniel Spaude](https://avatars1.githubusercontent.com/u/249210?v=4) **Daniel Spaude**](https://github.com/spaudanjo) [💻](https://github.com/ushahidi/platform/commits?author=spaudanjo) |
-| [![Vaibhav](https://avatars0.githubusercontent.com/u/863674?v=4) **Vaibhav**](http://recombine.net) [💻](https://github.com/ushahidi/platform/commits?author=vbhv) [🎨](contributors-to-ushahidi.md#design-vbhv) | [![J. Weber](https://avatars0.githubusercontent.com/u/28212184?v=4) **J. Weber**](http://www.jessicaweber.io) [💻](https://github.com/ushahidi/platform/commits?author=jessicaweberdev) |
-| [![Brandon Rosage](https://avatars3.githubusercontent.com/u/1136279?v=4) **Brandon Rosage**](http://brandonrosage.com) [🎨](contributors-to-ushahidi.md#design-brandonrosage) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Abrandonrosage) [💻](https://github.com/ushahidi/platform/commits?author=brandonrosage) | [![wanjar](https://avatars0.githubusercontent.com/u/8712110?v=4) **wanjar**](https://github.com/wanjar) [💻](https://github.com/ushahidi/platform/commits?author=wanjar) |
-| [![Grant Braught](https://avatars3.githubusercontent.com/u/16962482?v=4) **Grant Braught**](http://users.dickinson.edu/~braught/) [💻](https://github.com/ushahidi/platform/commits?author=braughtg) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Abraughtg) [💡](contributors-to-ushahidi.md#example-braughtg) | [![Nidhi Kumari](https://avatars3.githubusercontent.com/u/39872794?v=4) **Nidhi Kumari**](http://nidhikjha.github.io) [💻](https://github.com/ushahidi/platform/commits?author=NidhiKJha) [📝](contributors-to-ushahidi.md#blog-NidhiKJha) |
-| [![Juan Techera](https://avatars1.githubusercontent.com/u/1594608?v=4) **Juan Techera**](https://github.com/jtechera) [📖](https://github.com/ushahidi/platform/commits?author=jtechera) | [![Brian Herbert](https://avatars2.githubusercontent.com/u/106068?v=4) **Brian Herbert**](http://brianherbert.com) [💻](https://github.com/ushahidi/platform/commits?author=brianherbert) |
-| [![ Daniel Gitu](https://avatars1.githubusercontent.com/u/17337808?v=4) **Daniel Gitu**](https://github.com/gitudaniel) [💻](https://github.com/ushahidi/platform/commits?author=gitudaniel) | [![Philomenahhfl](https://avatars0.githubusercontent.com/u/25051453?v=4) **Philomenahhfl**](https://github.com/Philomenahhfl) [💻](https://github.com/ushahidi/platform/commits?author=Philomenahhfl) |
-| [![Obadha2](https://avatars1.githubusercontent.com/u/38259840?v=4) **Obadha2**](https://www.linkedin.com/in/walterobadha/) [🐛](https://github.com/ushahidi/platform/issues?q=author%3AObadha2) | [![Justin Scherer](https://avatars1.githubusercontent.com/u/29209303?v=4) **Justin Scherer**](https://www.justinscherer.xyz) [🎨](contributors-to-ushahidi.md#design-justinscherer) [🤔](contributors-to-ushahidi.md#ideas-justinscherer) [📓](contributors-to-ushahidi.md#userTesting-justinscherer) |
-| [![CeciliaHinga](https://avatars1.githubusercontent.com/u/20906968?v=4) **CeciliaHinga**](https://github.com/CeciliaHinga) [📝](contributors-to-ushahidi.md#blog-CeciliaHinga) | [![trendspotter](https://avatars1.githubusercontent.com/u/15286128?v=4) **trendspotter**](https://github.com/trendspotter) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Atrendspotter) |
-| [![Timothy Olaleke](https://avatars0.githubusercontent.com/u/11256481?v=4) **Timothy Olaleke**](https://timz.tech) [📖](https://github.com/ushahidi/platform/commits?author=Timtech4u) [🐛](https://github.com/ushahidi/platform/issues?q=author%3ATimtech4u) [💻](https://github.com/ushahidi/platform/commits?author=Timtech4u) | [![jlucianolzz](https://avatars0.githubusercontent.com/u/26437703?v=4) **jlucianolzz**](https://github.com/jlucianolzz) [⚠️](https://github.com/ushahidi/platform/commits?author=jlucianolzz) |
-| [![Sharang Pai](https://avatars2.githubusercontent.com/u/12707741?v=4) **Sharang Pai**](http://sharangpai.me) [💻](https://github.com/ushahidi/platform/commits?author=Guzzler) | [![Tom Cole](https://avatars0.githubusercontent.com/u/48810834?v=4) **Tom Cole**](https://github.com/TomC-Codes) [📖](https://github.com/ushahidi/platform/commits?author=TomC-Codes) |
-| [![Calvin ](https://avatars3.githubusercontent.com/u/18711727?v=4) **Calvin**](https://c3ho.blogspot.com/) [💻](https://github.com/ushahidi/platform/commits?author=c3ho) [👀](contributors-to-ushahidi.md#review-c3ho) | [![Stewart Weiss](https://avatars2.githubusercontent.com/u/39007707?v=4) **Stewart Weiss**](http://www.compsci.hunter.cuny.edu/~sweiss/) [📖](https://github.com/ushahidi/platform/commits?author=stewartweiss) |
-| [![Ritesh Pandey](https://avatars0.githubusercontent.com/u/1433681?v=4) **Ritesh Pandey**](http://riteshwrote.blogspot.com) [💻](https://github.com/ushahidi/platform/commits?author=ritesh-pandey) | |
+| [![](https://avatars2.githubusercontent.com/u/7965?v=4) **Robbie Mackay**](http://robbiemackay.com) [💻](https://github.com/ushahidi/platform/commits?author=rjmackay) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Arjmackay) [🤔](contributors-to-ushahidi.md#ideas-rjmackay) [🛡️](contributors-to-ushahidi.md#security-rjmackay) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Arjmackay) | [![](https://avatars0.githubusercontent.com/u/150815?v=4) **Jason Mule**](https://github.com/jasonmule) [💻](https://github.com/ushahidi/platform/commits?author=jasonmule) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Ajasonmule) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Ajasonmule) |
+| [![](https://avatars3.githubusercontent.com/u/2694405?v=4) **will**](https://github.com/willdoran) [💻](https://github.com/ushahidi/platform/commits?author=willdoran) [🛡️](contributors-to-ushahidi.md#security-willdoran) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Awilldoran) | [![](https://avatars3.githubusercontent.com/u/467393?v=4) **David Losada**](http://tuxpiper.com) [💻](https://github.com/ushahidi/platform/commits?author=tuxpiper) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Atuxpiper) [🤔](contributors-to-ushahidi.md#ideas-tuxpiper) [🛡️](contributors-to-ushahidi.md#security-tuxpiper) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Atuxpiper) |
+| [![](https://avatars0.githubusercontent.com/u/11681324?v=4) **Eriol Fox**](http://www.erioldoesdesign.com) [🎨](contributors-to-ushahidi.md#design-Erioldoesdesign) [📖](https://github.com/ushahidi/platform/commits?author=Erioldoesdesign) [🤔](contributors-to-ushahidi.md#ideas-Erioldoesdesign) | [![](https://avatars0.githubusercontent.com/u/73175?v=4) **Henry Addo**](http://www.addhen.org) [💻](https://github.com/ushahidi/platform/commits?author=eyedol) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Aeyedol) |
+| [![](https://avatars0.githubusercontent.com/u/915878?v=4) **James Greenleaf**](https://james.greenle.af) [💻](https://github.com/ushahidi/platform/commits?author=aMoniker) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3AaMoniker) | [![](https://avatars0.githubusercontent.com/u/8941223?v=4) **Carolyn Commons**](https://github.com/crcommons) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Acrcommons) [💻](https://github.com/ushahidi/platform/commits?author=crcommons) [🤔](contributors-to-ushahidi.md#ideas-crcommons) |
+| [![](https://avatars3.githubusercontent.com/u/155218?v=4) **Linda Kamau**](http://www.codediva.co.ke) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Akamaulynder) [💻](https://github.com/ushahidi/platform/commits?author=kamaulynder) [🤔](contributors-to-ushahidi.md#ideas-kamaulynder) | [![](https://avatars0.githubusercontent.com/u/6600708?v=4) **Mark Kinsella**](https://github.com/kinstelli) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Akinstelli) [💻](https://github.com/ushahidi/platform/commits?author=kinstelli) [🤔](contributors-to-ushahidi.md#ideas-kinstelli) |
+| [![](https://avatars3.githubusercontent.com/u/184092?v=4) **David Kobia**](http://www.kobia.net) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Adkobia) [💻](https://github.com/ushahidi/platform/commits?author=dkobia) [🤔](contributors-to-ushahidi.md#ideas-dkobia) | [![](https://avatars1.githubusercontent.com/u/37776843?v=4) **Juan Ricafort**](https://github.com/jrtricafort) [🤔](contributors-to-ushahidi.md#ideas-jrtricafort) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Ajrtricafort) [💼](contributors-to-ushahidi.md#business-jrtricafort) |
+| [![](https://avatars3.githubusercontent.com/u/7316730?v=4) **jess**](http://jessachandler.com) [📖](https://github.com/ushahidi/platform/commits?author=monkeywithacupcake) | [![](https://avatars0.githubusercontent.com/u/446225?v=4) **Zack Halloran**](https://github.com/zhalloran) [💻](https://github.com/ushahidi/platform/commits?author=zhalloran) |
+| [![](https://avatars2.githubusercontent.com/u/849131?v=4) **hollycorbett**](https://github.com/hollycorbett) [💻](https://github.com/ushahidi/platform/commits?author=hollycorbett) | [![](https://avatars1.githubusercontent.com/u/644800?v=4) **Vladimir Cvetic**](http://ferdinand.rs) [💻](https://github.com/ushahidi/platform/commits?author=cvele) |
+| [![](https://avatars0.githubusercontent.com/u/25605883?v=4) **StaicyG**](https://github.com/StaicyG) [🤔](contributors-to-ushahidi.md#ideas-StaicyG) [📖](https://github.com/ushahidi/platform/commits?author=StaicyG) [💬](contributors-to-ushahidi.md#question-StaicyG) | [![](https://avatars0.githubusercontent.com/u/6831661?v=4) **Yassin Mohii**](https://github.com/ymohii) [💻](https://github.com/ushahidi/platform/commits?author=ymohii) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Aymohii) |
+| [![](https://avatars3.githubusercontent.com/u/38203?v=4) **Woody Gilk**](https://www.shadowhand.com/) [💻](https://github.com/ushahidi/platform/commits?author=shadowhand) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Ashadowhand) | [![](https://avatars0.githubusercontent.com/u/958800?v=4) **Sam**](https://github.com/samtheson) [📖](https://github.com/ushahidi/platform/commits?author=samtheson) |
+| [![](https://avatars0.githubusercontent.com/u/715377?v=4) **Alex Hoyau**](https://lexoyo.me) [📖](https://github.com/ushahidi/platform/commits?author=lexoyo) | [![](https://avatars1.githubusercontent.com/u/721918?v=4) **Angela Oduor Lungati**](https://github.com/aoduor) [📖](https://github.com/ushahidi/platform/commits?author=aoduor) [🤔](contributors-to-ushahidi.md#ideas-aoduor) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aaoduor) [💬](contributors-to-ushahidi.md#question-aoduor) [💼](contributors-to-ushahidi.md#business-aoduor) |
+| [![](https://avatars3.githubusercontent.com/u/26191851?v=4) **Andrés Ignacio Torres**](http://aitorres.com.ve) [📖](https://github.com/ushahidi/platform/commits?author=aitorres) | [![](https://avatars0.githubusercontent.com/u/276746?v=4) **Virgílio N Santos**](https://github.com/virgilio) [📖](https://github.com/ushahidi/platform/commits?author=virgilio) |
+| [![](https://avatars3.githubusercontent.com/u/3615012?v=4) **David Mallard**](https://davidmallard.id.au/) [💻](https://github.com/ushahidi/platform/commits?author=tobiasziegler) | [![](https://avatars3.githubusercontent.com/u/12519942?v=4) **Ryan Christoffersen**](https://ryanchristo.com/) [💻](https://github.com/ushahidi/platform/commits?author=ryanchristo) |
+| [![](https://avatars3.githubusercontent.com/u/5355510?v=4) **Burak Özdemir**](https://ozdemirburak.com) [💻](https://github.com/ushahidi/platform/commits?author=ozdemirburak) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aozdemirburak) | [![](https://avatars1.githubusercontent.com/u/28915865?v=4) **Mohammad Sameer**](http://m-sameer.github.io) [📖](https://github.com/ushahidi/platform/commits?author=m-sameer) |
+| [![](https://avatars3.githubusercontent.com/u/677893?v=4) **Jacob Ashdown**](http://www.coherent.technology) [💻](https://github.com/ushahidi/platform/commits?author=jcbashdown) | [![](https://avatars3.githubusercontent.com/u/945486?v=4) **Gianluca Varisco**](https://github.com/gvarisco) [📖](https://github.com/ushahidi/platform/commits?author=gvarisco) |
+| [![](https://avatars2.githubusercontent.com/u/3093?v=4) **Evan Sims**](https://keybase.io/evansims) [💻](https://github.com/ushahidi/platform/commits?author=evansims) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Aevansims) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Aevansims) | [![](https://avatars0.githubusercontent.com/u/1618793?v=4) **Charlie**](https://github.com/caharding) [📖](https://github.com/ushahidi/platform/commits?author=caharding) [🤔](contributors-to-ushahidi.md#ideas-caharding) [💼](contributors-to-ushahidi.md#business-caharding) |
+| [![](https://avatars1.githubusercontent.com/u/17307?v=4) **Brylie Christopher Oxley**](https://bryliechristopheroxley.info) [📖](https://github.com/ushahidi/platform/commits?author=brylie) | [![](https://avatars3.githubusercontent.com/u/214189?v=4) **Rajiv Abraham**](https://github.com/RAbraham) [📖](https://github.com/ushahidi/platform/commits?author=RAbraham) |
+| [![](https://avatars0.githubusercontent.com/u/6632800?v=4) **Miguel Dinis**](https://github.com/MigDinny) [📖](https://github.com/ushahidi/platform/commits?author=MigDinny) | [![](https://avatars1.githubusercontent.com/u/249210?v=4) **Daniel Spaude**](https://github.com/spaudanjo) [💻](https://github.com/ushahidi/platform/commits?author=spaudanjo) |
+| [![](https://avatars0.githubusercontent.com/u/863674?v=4) **Vaibhav**](http://recombine.net) [💻](https://github.com/ushahidi/platform/commits?author=vbhv) [🎨](contributors-to-ushahidi.md#design-vbhv) | [![](https://avatars0.githubusercontent.com/u/28212184?v=4) **J. Weber**](http://www.jessicaweber.io) [💻](https://github.com/ushahidi/platform/commits?author=jessicaweberdev) |
+| [![](https://avatars3.githubusercontent.com/u/1136279?v=4) **Brandon Rosage**](http://brandonrosage.com) [🎨](contributors-to-ushahidi.md#design-brandonrosage) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Abrandonrosage) [💻](https://github.com/ushahidi/platform/commits?author=brandonrosage) | [![](https://avatars0.githubusercontent.com/u/8712110?v=4) **wanjar**](https://github.com/wanjar) [💻](https://github.com/ushahidi/platform/commits?author=wanjar) |
+| [![](https://avatars3.githubusercontent.com/u/16962482?v=4) **Grant Braught**](http://users.dickinson.edu/~braught/) [💻](https://github.com/ushahidi/platform/commits?author=braughtg) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Abraughtg) [💡](contributors-to-ushahidi.md#example-braughtg) | [![](https://avatars3.githubusercontent.com/u/39872794?v=4) **Nidhi Kumari**](http://nidhikjha.github.io) [💻](https://github.com/ushahidi/platform/commits?author=NidhiKJha) [📝](contributors-to-ushahidi.md#blog-NidhiKJha) |
+| [![](https://avatars1.githubusercontent.com/u/1594608?v=4) **Juan Techera**](https://github.com/jtechera) [📖](https://github.com/ushahidi/platform/commits?author=jtechera) | [![](https://avatars2.githubusercontent.com/u/106068?v=4) **Brian Herbert**](http://brianherbert.com) [💻](https://github.com/ushahidi/platform/commits?author=brianherbert) |
+| [![](https://avatars1.githubusercontent.com/u/17337808?v=4) **Daniel Gitu**](https://github.com/gitudaniel) [💻](https://github.com/ushahidi/platform/commits?author=gitudaniel) | [![](https://avatars0.githubusercontent.com/u/25051453?v=4) **Philomenahhfl**](https://github.com/Philomenahhfl) [💻](https://github.com/ushahidi/platform/commits?author=Philomenahhfl) |
+| [![](https://avatars1.githubusercontent.com/u/38259840?v=4) **Obadha2**](https://www.linkedin.com/in/walterobadha/) [🐛](https://github.com/ushahidi/platform/issues?q=author%3AObadha2) | [![](https://avatars1.githubusercontent.com/u/29209303?v=4) **Justin Scherer**](https://www.justinscherer.xyz) [🎨](contributors-to-ushahidi.md#design-justinscherer) [🤔](contributors-to-ushahidi.md#ideas-justinscherer) [📓](contributors-to-ushahidi.md#userTesting-justinscherer) |
+| [![](https://avatars1.githubusercontent.com/u/20906968?v=4) **CeciliaHinga**](https://github.com/CeciliaHinga) [📝](contributors-to-ushahidi.md#blog-CeciliaHinga) | [![](https://avatars1.githubusercontent.com/u/15286128?v=4) **trendspotter**](https://github.com/trendspotter) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Atrendspotter) |
+| [![](https://avatars0.githubusercontent.com/u/11256481?v=4) **Timothy Olaleke**](https://timz.tech) [📖](https://github.com/ushahidi/platform/commits?author=Timtech4u) [🐛](https://github.com/ushahidi/platform/issues?q=author%3ATimtech4u) [💻](https://github.com/ushahidi/platform/commits?author=Timtech4u) | [![](https://avatars0.githubusercontent.com/u/26437703?v=4) **jlucianolzz**](https://github.com/jlucianolzz) [⚠️](https://github.com/ushahidi/platform/commits?author=jlucianolzz) |
+| [![](https://avatars2.githubusercontent.com/u/12707741?v=4) **Sharang Pai**](http://sharangpai.me) [💻](https://github.com/ushahidi/platform/commits?author=Guzzler) | [![](https://avatars0.githubusercontent.com/u/48810834?v=4) **Tom Cole**](https://github.com/TomC-Codes) [📖](https://github.com/ushahidi/platform/commits?author=TomC-Codes) |
+| [![](https://avatars3.githubusercontent.com/u/18711727?v=4) **Calvin**](https://c3ho.blogspot.com/) [💻](https://github.com/ushahidi/platform/commits?author=c3ho) [👀](https://github.com/ushahidi/platform/pulls?q=is%3Apr+reviewed-by%3Ac3ho) | [![](https://avatars2.githubusercontent.com/u/39007707?v=4) **Stewart Weiss**](http://www.compsci.hunter.cuny.edu/~sweiss/) [📖](https://github.com/ushahidi/platform/commits?author=stewartweiss) |
+| [![](https://avatars0.githubusercontent.com/u/1433681?v=4) **Ritesh Pandey**](http://riteshwrote.blogspot.com) [💻](https://github.com/ushahidi/platform/commits?author=ritesh-pandey) | [![](https://avatars3.githubusercontent.com/u/55590415?v=4) **Himil Vasava**](https://github.com/himil-vasava) [💻](https://github.com/ushahidi/platform/commits?author=himil-vasava) |
+| [![](https://avatars1.githubusercontent.com/u/54542562?v=4) **johnmurray4**](https://github.com/johnmurray4) [📖](https://github.com/ushahidi/platform/commits?author=johnmurray4) | [![](https://avatars0.githubusercontent.com/u/39647995?v=4) **Jenniline**](https://github.com/Jenniline) [💻](https://github.com/ushahidi/platform/commits?author=Jenniline) |
+| [![](https://avatars2.githubusercontent.com/u/33249010?v=4) **Rohit Kumar**](http://rohit645.github.io) [🐛](https://github.com/ushahidi/platform/issues?q=author%3Arohit645) [💻](https://github.com/ushahidi/platform/commits?author=rohit645) | [![](https://avatars3.githubusercontent.com/u/47359729?v=4) **ljvargh**](https://github.com/ljvargh) [📖](https://github.com/ushahidi/platform/commits?author=ljvargh) |
+| [![](https://avatars1.githubusercontent.com/u/2425577?v=4) **Artur Neumann**](https://www.jankaritech.com) [🚇](contributors-to-ushahidi.md#infra-individual-it) | |
diff --git a/docs/design/design-process.md b/docs/design/design-process.md
index 3c207afcc4..c812be8ae9 100644
--- a/docs/design/design-process.md
+++ b/docs/design/design-process.md
@@ -10,7 +10,7 @@ description: >-
Ushahidi has a design process that aims to **include user voices as the key component for design insight.** As such, all design work relating to a Ushahidi product must have sound user rationale or direct user voices. The ultimate aim of design within Ushahidi is to listen, interpret, facilitate and raise voices of users directly operating the software with the direct responsibility in improving the usability, accessibility, visual design, brand recognition, interaction and purpose of that feature through the medium of design.
-Designs and prototypes created in design software tools are by nature not always 100% accurate to the coded experience. The prototyped design should strive to be as accurate to the live coded experience as possible within reasonable time constraints. As such, there is a likelihood that some pixels may shift, some colours may be a hex code out or a form element may have a slight difference. Unless explicitly detailed as a design decision, the patterns existing in the Ushahidi \(and other Ushahidi related properties\) Pattern libraries are to be the true and accurate construction elements of an Ushahidi interface.
+Designs and prototypes created in design software tools are by nature not always 100% accurate to the coded experience. The prototyped design should strive to be as accurate to the live coded experience as possible within reasonable time constraints. As such, there is a likelihood that some pixels may shift, some colours may be a hex code out or a form element may have a slight difference. Unless explicitly detailed as a design decision, the patterns existing in the Ushahidi \(and other Ushahidi related properties\) Pattern libraries are to be the true and accurate construction elements of an Ushahidi interface.
[Ushahidi Pattern library](http://preview.ushahidi.com/platform-pattern-library/develop/index.html)
@@ -42,9 +42,9 @@ The developers at Ushahidi should be empowered to make appropriate design choice
Developers should be able to find everything they need in the [Ushahidi Pattern library](http://preview.ushahidi.com/platform-pattern-library/develop/index.html).
-![This design has been re-used by devs for various screens for messages.](../.gitbook/assets/pattern-library-snackbar.png)
+![This design has been re-used by devs for various screens for messages.](../.gitbook/assets/pattern-library-snackbar%20%281%29.png)
-![Ionic has 'out of the box' UI that works for a 'dev design'](../.gitbook/assets/ionic.png)
+![Ionic has 'out of the box' UI that works for a 'dev design'](../.gitbook/assets/ionic%20%281%29.png)
### 2. Light design
diff --git a/docs/design/open-source-design.md b/docs/design/open-source-design.md
index e3ede03acc..8c2ff97470 100644
--- a/docs/design/open-source-design.md
+++ b/docs/design/open-source-design.md
@@ -14,5 +14,3 @@ We started this work during the Mozilla Open Leaders program 6 with the project
If you're looking to contribute and participate in this effort you can contact the Ushahidi design team at Design@ushahidi.com or through the [Get in Touch](https://ushahidi.gitbook.io/platform-developer-documentation/contributing-or-getting-involved/get-in-touch) section of these docs.
-
-
diff --git a/docs/design/synthesising-user-testing-results-examples/README.md b/docs/design/synthesising-user-testing-results-examples/README.md
index 171e33bad7..29078d2f14 100644
--- a/docs/design/synthesising-user-testing-results-examples/README.md
+++ b/docs/design/synthesising-user-testing-results-examples/README.md
@@ -4,8 +4,7 @@
You can capture notes either physically in a notebook or digitally. The main thing to remember is that the user testing participant should be the focus of the session. If the participant feel uncomfortable with someone typing notes on a laptop you should revert to pen and paper.
-After you've captured written notes in a notebook you should photograph the notebook and add to the user testing issue in the repository. We upload these for accountability and transparency. e.g.
-
+After you've captured written notes in a notebook you should photograph the notebook and add to the user testing issue in the repository. We upload these for accountability and transparency. e.g.
![A photo of a page of handwritten notes from a usertesting session. ](../../.gitbook/assets/notebook.png)
@@ -19,6 +18,5 @@ You can then type up notes in a longer form for accessibility. Try to avoid addi
Synthesizing user testing results into clear design insights is part of the process of working good user insight into the design, development and prioritising process but being able to clearly and concisely recommend an approach is valuable.
-
Working closely with a Product Management function in prioritsing and helping the wider Ushahidi team understand why you are recommending what you've discovered is key to deeper, organisation and team wider growth. A product management and Lead development function should be able to work together collaboratively with a design function to prioritise these synthesized recommendations and needs according to what skills are needed in a feature/issue, how much time there is and value to the wider organisation. It is not advisable for any function to perform this activity solo as wider collaborative insight leads to more inclusive results.
diff --git a/docs/design/synthesising-user-testing-results-examples/synthesis-example-1.md b/docs/design/synthesising-user-testing-results-examples/synthesis-example-1.md
index 5fe88ee5b7..a6bfdb8ec3 100644
--- a/docs/design/synthesising-user-testing-results-examples/synthesis-example-1.md
+++ b/docs/design/synthesising-user-testing-results-examples/synthesis-example-1.md
@@ -4,10 +4,9 @@
**Date conducted:** 12 November
-**Date sent to Design:** 12 November
+**Date sent to Design:** 12 November
-
-**Who is the user?**
+**Who is the user?**
* Name: Jo Doe
* Forced to flee out of ethiopia 6 months ago — journalist
@@ -21,7 +20,7 @@
* Size of organization \(number of employees\): 1, with 3 potential volunteers
* Est. budget of org: $0
-**What problem are they trying to solve?**
+**What problem are they trying to solve?**
* Overall mission of the organization
* bring to light abuses about human rights in ethiopia
@@ -37,7 +36,7 @@
* What are those roles’ responsibilities?
* Find data sources, manage incoming data and bring awareness to project
-**What is the current process for solving this problem?**
+**What is the current process for solving this problem?**
* at the moment, just using an online news website \(blog\) where he aggregates the news from all over the country and all over the world about this
* never been exposed to a platform like this
diff --git a/docs/design/synthesising-user-testing-results-examples/synthesis-example-2.md b/docs/design/synthesising-user-testing-results-examples/synthesis-example-2.md
index 5f0af93a2c..f2d39ad4a2 100644
--- a/docs/design/synthesising-user-testing-results-examples/synthesis-example-2.md
+++ b/docs/design/synthesising-user-testing-results-examples/synthesis-example-2.md
@@ -4,43 +4,35 @@
**Test Date:** 20th April 2018
-**User:** General user, works as a web designer, relatively new to the platform.
-
-----------------------------------------------------------------------------------
+**User:** General user, works as a web designer, relatively new to the platform.
**Task 1:** Previous experience with ‘tagging’ \(no screen required\)
-**Scenarios:**
+**Scenarios:**
1. Ask the users to describe what they think when they here the term ‘tagging’ or ‘labelling’ means in relation to websites, digital products, software etc.
2. Ask users when they have previously had experience of ‘tagging’. What was the nature of the content? Was there any extraction of data afterwards? Whether there was anything they wish they could have done that they couldn’t do.
+| Scenario | Observation | Category |
+| :--- | :--- | :--- |
+
+
- Scenario |
- Observation |
- Category |
-
-
-
-
- 1 |
-
+ | 1 |
+
Labelling people and/or pictures.
Keywords.
Anchors for making data easier/better to search.
-
- | #Activity |
+
+ #Activity |
-
- 2 |
- Blog posts, facebook, wordpress, Evernote (used for personal notes and
- research for projects) |
- #Activity |
-
-
-
**Task 2:** Locating in the information architecture \(Prototype needed - [https://adobe.ly/2vmIZJo](https://adobe.ly/2vmIZJo)\)
+
+
+| 2 | Blog posts, facebook, wordpress, Evernote \(used for personal notes and research for projects\) | \#Activity |
+| :--- | :--- | :--- |
+
The prototype \(URL\) opens on Settings view.
@@ -57,31 +49,25 @@ The prototype \(URL\) opens on Settings view.
9. If you haven't already, please click the back button \(you may need to click a few times on a ‘real’ website.
10. Imagine you want your volunteer data to include hxl tags.
-\(We can briefly explain here that hxl tags are a way of ‘assigning’ a ‘term’ to a piece of information. Use Justin’s analogy of Instagram/Twitter hashtags!\)
+\(We can briefly explain here that hxl tags are a way of ‘assigning’ a ‘term’ to a piece of information. Use Justin’s analogy of Instagram/Twitter hashtags!\)
+Which option would you choose? \(they can click at this point\)
-Which option would you choose? \(they can click at this point\)
+1. As you choose this option, what are you thinking? What is your first impression of this page? \(Should be on the first view of the export table\)
+| Scenario | Observation | Category |
+| :--- | :--- | :--- |
+
+
+| 1 | Export data - easily found in settings page | \#Activity |
+| :--- | :--- | :--- |
-1. As you choose this option, what are you thinking? What is your first impression of this page? \(Should be on the first view of the export table\)
- Scenario |
- Observation |
- Category |
-
-
-
-
- 1 |
- Export data - easily found in settings page |
- #Activity |
-
-
- 2 |
-
+ | 2 |
+
User looks at top paragraph of text but only ‘sees’ the
blue links. Is irritated because they ‘will take them away for the
page’ and they don’t want to.
@@ -106,8 +92,8 @@ Which option would you choose? \(they can click at this point\)
-
- |
+
+ |
#Activity
@@ -126,11 +112,15 @@ Which option would you choose? \(they can click at this point\)
#Quote
-
+ |
+
+
+
+
- 3&4 |
-
+ | 3&4 |
+
Assume hxl means = sort data and search pre-tagged data.
List of best tags or official list of tags.
No idea what attributes means in this context. User says they need more
@@ -144,8 +134,8 @@ Which option would you choose? \(they can click at this point\)
User makes a comment on the placement of buttons being odd. Assumes that
‘Export all’ and ‘Export with hxl…’
should be closer together.
-
- |
+
+ |
#Activity
@@ -157,11 +147,15 @@ Which option would you choose? \(they can click at this point\)
#Activity
-
+ |
+
+
+
+
- 5, 6, 7, 8, 9 |
-
+ | 5, 6, 7, 8, 9 |
+
(Clicking on a blue link and exploring the HDX documentation)
@@ -187,8 +181,8 @@ Which option would you choose? \(they can click at this point\)
User described feeling ‘down’ and this info being ‘beyond
them’ and ‘disempowered’
-
- |
+
+ |
#Activity
@@ -213,16 +207,19 @@ Which option would you choose? \(they can click at this point\)
#Quote
-
- |
-
- 10 |
- Would choose the hxl option |
- #Activity |
+
+
+
+
| 10 | Would choose the hxl option | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 11 |
-
+ | 11 |
+
This looks well sorted. “I like tables!”
@@ -231,8 +228,8 @@ Which option would you choose? \(they can click at this point\)
User said the checkboxes are too small for them to click.
Red stars are also too small.
-
- |
+
+ |
#Quote
@@ -240,14 +237,11 @@ Which option would you choose? \(they can click at this point\)
#Activity
-
+ |
-
-
-**Task 3:** Going through assigning hxl tags in the table
-screen required - prototype: [https://adobe.ly/2HecW3O](https://adobe.ly/2HecW3O)
-
-**Scenarios:**
+
+
+**Scenarios:**
1. Is it clear how you progress? What are the steps you would take to start this section?
2. Can you show me how you would know if a certain section was going to be included in the eventual CSV download?
@@ -257,8 +251,7 @@ screen required - prototype: [https://adobe.ly/2HecW3O](https://adobe.ly/2HecW3O
6. Can you show me \(without clicking\) how you might add a hxl attribute?
7. \(If they click on the ‘Leave empty’ attribute drop down\) What do you think of the options presented in this section? What kinds of information does it give you in relation to the tags?
-\(Is the difference between tags and attributes clearer for the user at this point?\)
-
+\(Is the difference between tags and attributes clearer for the user at this point?\)
1. Can you now show me how you would add a custom hxl attribute? \(Encourage clicking now\)
2. \(on the ‘please type an attribute’ field\) What do you expect to be able to do here? \(Go through the clicks in order to add the custom attribute\)
@@ -270,31 +263,27 @@ screen required - prototype: [https://adobe.ly/2HecW3O](https://adobe.ly/2HecW3O
8. Please continue with the section ‘Location’ and add a tag ‘geo’
9. \(Pause - see if they notice the list is less populated\) Why do you think this list has less options?
-Q: \(if they don’t notice\) Is there anything you notice about the drop down list? Why do you think this list has less options?
-
+Q: \(if they don’t notice\) Is there anything you notice about the drop down list? Why do you think this list has less options?
1. Can you now add two hxl attributes ‘longitude’ and ‘latitude’. \(these are the last tags/attributes to add during the test the ‘export to CSV and HDX buttons should be clickable\)
2. Take a moment to pause, Can you take a look at this screen and explain what you have just completed.
- Can you point out the HXL tags and attributes?
+ Can you point out the HXL tags and attributes?
+
+ Do you remember what they mean? If not can you give a good guess?
- Do you remember what they mean? If not can you give a good guess?
+3. Can you now show me how you would get a CSV file? What would you expect to see happen next?
+4. Can you tell me what you think ‘Export to HDX’ means? \(Do people assume this is a file extension type? Do they understand it’s a whole system?\) Go ahead and click ‘Export to HDX’. Take me through your impressions of this message.
+
+| Scenario | Observation | Category |
+| :--- | :--- | :--- |
-1. Can you now show me how you would get a CSV file? What would you expect to see happen next?
-2. Can you tell me what you think ‘Export to HDX’ means? \(Do people assume this is a file extension type? Do they understand it’s a whole system?\) Go ahead and click ‘Export to HDX’. Take me through your impressions of this message.
- Scenario |
- Observation |
- Category |
-
-
-
-
- 1 |
-
+ | 1 |
+
User looks at which fields to include.
Wants to click checkbox first (prototype error won’t allow this)
User describes working from left to right. Doesn’t read any top
text (or say they did)
-
- | #Activity |
-
-
- 2 |
- Easy - gestures to the checkbox |
- #Activity |
-
-
- 3 |
- Easy - finds the drop down and interacts to look at the list. |
- #Activity |
+
+ #Activity |
+
+
+
| 2 | Easy - gestures to the checkbox | \#Activity |
+| :--- | :--- | :--- |
+
+
+| 3 | Easy - finds the drop down and interacts to look at the list. | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 4 |
-
+ | 4 |
+
Describes the list content as clear until ‘impact’
@@ -331,8 +321,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
Descriptive tags are fine but some are unclear
-
- |
+
+ |
#Activity
@@ -343,21 +333,23 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Activity
-
- |
-
- 5 |
- Easy - finds. |
- #Activity |
-
-
- 6 |
- Easy - interacts with the attribute drop down |
- #Activity |
+
+
+
+
| 5 | Easy - finds. | \#Activity |
+| :--- | :--- | :--- |
+
+
+| 6 | Easy - interacts with the attribute drop down | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 7 |
-
+ | 7 |
+
User is unclear why there are +’s instead of a # here.
@@ -365,8 +357,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
Expecting maybe an underscore or a hyphen.
-
- |
+
+ |
#Activity
@@ -374,16 +366,19 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Activity
-
- |
-
- 8 |
- Easily finds the way to add a custom tag |
- #Activity |
+
+
+
+
| 8 | Easily finds the way to add a custom tag | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 9 |
-
+ | 9 |
+
User describes typing in the field and then clicking on the plus to add
a custom attribute.
@@ -391,18 +386,22 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
“It’s weird because there’s a double plus. The plus
in the ‘attributes’ and the plus button. Plus has already
been used”
-
- |
+
+ |
#Activity
#Quote
-
+ |
+
+
+
+
- 10 |
-
+ | 10 |
+
Tag preview = user says its not clear how this relates to what’s
been completed.
@@ -415,8 +414,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
User describes the kind of type ahead text fields that add tags as a user
types and brings up a list. Describes this as more widely used.
-
- |
+
+ |
#Activity
@@ -427,39 +426,35 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Activity
-
- |
-
- 11 |
- User says they might choose ‘activity’ or ‘output’
- but wants the ability to add multiple tags to be sure. |
- #Activity |
-
-
- 12 |
- Easy action |
- #Activity |
-
-
- 13 |
- Easy - talks about tag preview still being too small |
- #Activity |
-
-
- 14 |
- Skipped question |
- |
-
-
- 15 |
- Easy to add tags and attribute now. User is used to process.
-
- |
- #Activity |
+
+
+
+
| 11 | User says they might choose ‘activity’ or ‘output’ but wants the ability to add multiple tags to be sure. | \#Activity |
+| :--- | :--- | :--- |
+
+
+| 12 | Easy action | \#Activity |
+| :--- | :--- | :--- |
+
+
+| 13 | Easy - talks about tag preview still being too small | \#Activity |
+| :--- | :--- | :--- |
+
+
+| 14 | Skipped question | |
+| :--- | :--- | :--- |
+
+
+| 15 | Easy to add tags and attribute now. User is used to process. | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 16 |
-
+ | 16 |
+
User suspects that less tags to choose from suggests a ‘more precise’
type of data.
@@ -468,8 +463,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
“Why custom? I don’t need this”
-
- |
+
+ |
#Activity
@@ -478,17 +473,19 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Quote
-
- |
-
- 17 |
- “Why is it not the full word? (longitude) there's enough space!” |
- #Quote |
+
+
+
+
| 17 | “Why is it not the full word? \(longitude\) there's enough space!” | \#Quote |
+| :--- | :--- | :--- |
+
+
+
+
- 18 |
-
+ | 18 |
+
User is able to point out tags and attributes that they have completed.
Described fields they have interacted with.
@@ -498,8 +495,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
/>
“I understand real words”
-
- |
+
+ |
#Activity
@@ -509,16 +506,19 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Quote
-
- |
-
- 19 |
- Export to CSV would bring up a download pop up |
- #Activity |
+
+
+
+
| 19 | Export to CSV would bring up a download pop up | \#Activity |
+| :--- | :--- | :--- |
+
+
+
+
- 20 |
-
+ | 20 |
+
“I don’t know (in relation to HDX) I would guess it’s
a file format that is specific to this dataset”
@@ -532,8 +532,8 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
I’m not ready - creates nervousness
-
- |
+
+ |
#Quote
@@ -546,12 +546,11 @@ Q: \(if they don’t notice\) Is there anything you notice about the drop down l
#Activity
-
+ |
-
-
**General Feedback**
-
-1. Any final thoughts?
+
+
+1. Any final thoughts?
UI was easy and familiar.
@@ -563,7 +562,5 @@ User didn’t understand the term ‘deployment’
User wants a progress bar in certain areas.
-Wants more illustrations or diagrams to help them along like a clock when the ‘export’ is happening.
-
-
+Wants more illustrations or diagrams to help them along like a clock when the ‘export’ is happening.
diff --git a/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-1.md b/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-1.md
index bcc5d927a4..b46ad3accb 100644
--- a/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-1.md
+++ b/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-1.md
@@ -46,7 +46,7 @@ There are some descriptions but not all of them have them and therefore they are
One task I asked users to complete was after exporting, could they remember all the tags they had selected to be exported and what they mean’t. Many users did not remember what all the tags mean if they aren’t descriptive. This was especially difficult for the users that spoke English as a second/third/fourth language
-A lot of confusion over the \#admin tags too.
+A lot of confusion over the \#admin tags too.
User has no idea what ‘virulance’ means
@@ -56,7 +56,7 @@ _“What is idps? Or iso? Start and end? Does that mean someone dying? Birth and
Plenty of people thought that ‘HDX’ was a file format.
-Has no idea what export to HDX will do. Say’s it must be a file format but is worried about it ‘uploading somewhere’ Users that are not
+Has no idea what export to HDX will do. Say’s it must be a file format but is worried about it ‘uploading somewhere’ Users that are not
_“Can the programs/software I open the hxl tagged csv in handle the mapping/tags I added?”_ A fair few users though you needed ‘special software’ to open a file with hxl tags added.
@@ -64,7 +64,7 @@ Users automatically expected the tags they are using to be shared with other tea
When reading HDX/HXL documentation
-85-90% of user tester want to read documentation provided on Ushahidi via blue ‘exit’ link but many of them fear ‘losing their place’ or ‘getting lost’. Most users expect the Ushahidi system to ‘teach’ them in some way. The majority of users said they would spend multiple hours going through the documentation before attempting the export/upload within Ushahidi.
+85-90% of user tester want to read documentation provided on Ushahidi via blue ‘exit’ link but many of them fear ‘losing their place’ or ‘getting lost’. Most users expect the Ushahidi system to ‘teach’ them in some way. The majority of users said they would spend multiple hours going through the documentation before attempting the export/upload within Ushahidi.
There is a reluctance to ‘have a go’ by uploading/exporting data.
@@ -116,8 +116,7 @@ _“If I can only choose one tag, which is best to use? I’m not sure...”_ Us
_“Am I getting the right data?”_ users are concerned they are ‘getting it right’
-User wonders if once in HDX it looks like a CSV? Users that have not yet investigated datasets in HDX wonder what it looks like.
-
+User wonders if once in HDX it looks like a CSV? Users that have not yet investigated datasets in HDX wonder what it looks like.
### **API config**
@@ -127,7 +126,7 @@ _“This gives me two confusing answers and I don’t know which to use!”_
_“It’s not helpful and the heading is misleading. This is geared towards experienced tech people”_
-There is actually guiding text on Ushahidi’s side here but this user did this:
+There is actually guiding text on Ushahidi’s side here but this user did this:
\(On the HDX homepage\) User describes that they would look through the ‘quick links’ section for information on API keys
@@ -159,12 +158,11 @@ When talking with Hazel \(M&E at Ushahidi\) interest in ‘notifying’ the wide
Using the same ‘ids’ or being able to merge the language/conventions already used within platform or have it seamlessly port over was of critical concern.
-Having a process to which the wider development network could ‘validate’ the data to lend it credibility within the wider development network was important for grassroots orgs and those M&E professionals who work alongside grassroots orgs.
+Having a process to which the wider development network could ‘validate’ the data to lend it credibility within the wider development network was important for grassroots orgs and those M&E professionals who work alongside grassroots orgs.
There was concern around current projects being heavy on the qualitative or ‘open-ended’ responses which could be hard to tag. They are currently hard to draw insight from within the current Ushahidi platform but if hxl tagging can improve the way that these qualitative insights are used then that would be great. These often require prior context. We could get a data point that simply says ‘I hate my job’ but this is in the context of receiving training, further education and certificates for a healthcare program that aims to provide better lifestyles for young girls.
This follows on to a concept such as ‘theming’ for M&E workers so that they can tag and draw down the same data but across different themes. They expressed the interest in just downloading a ‘theme’ and the tags/attributes associated with it and not necessarily the accompanying data. Also the ability to download just the number of data points \(or posts in Ushahidi platform\) alongside the tagged information was important.
-Are current platform runs on ‘categories’ and ‘collections’ tags and attributes are a more sophisticated form of this. Our M&E staff use the categories often to inform the surveys that are sent out using the platform \(to collect data\) and then cyclically build more categories when the initial set is seen as insufficient. The ability to consistently rework the data and way that it is described/tagged is key to those drawing insights for reporting to ‘higher powers’
-
+Are current platform runs on ‘categories’ and ‘collections’ tags and attributes are a more sophisticated form of this. Our M&E staff use the categories often to inform the surveys that are sent out using the platform \(to collect data\) and then cyclically build more categories when the initial set is seen as insufficient. The ability to consistently rework the data and way that it is described/tagged is key to those drawing insights for reporting to ‘higher powers’
diff --git a/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-2.md b/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-2.md
index 111e47366b..58ac3ffc3a 100644
--- a/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-2.md
+++ b/docs/design/synthesising-user-testing-results-examples/synthesis-recommendations-example-2.md
@@ -57,34 +57,34 @@ Key findings:
### _Quick wins_
-* Remove report user from chat and keep in a users profile only.
-* Add back buttons <- into the profile page and any pages where they are absent
-* Payment info not top of list in profile
-* Remove any onboarding pop-ups.
-* Better contrast of icons on map
-* Chat is primary action
-* Add in a closing quote mark on quote graphic
-* test a different piece of photography
+* Remove report user from chat and keep in a users profile only.
+* Add back buttons <- into the profile page and any pages where they are absent
+* Payment info not top of list in profile
+* Remove any onboarding pop-ups.
+* Better contrast of icons on map
+* Chat is primary action
+* Add in a closing quote mark on quote graphic
+* test a different piece of photography
### _Re-working - longer term work_
-* Text and buttons bigger
-* Plain, natural language for any text
-* Repeat requests, bigger headings and more explanation
-* Add in a bio on profile
-* investigate something other than stars for rating
-* We need a review template for people to add in a minimum amount of detail
-* Food list deeply confusing via request. Needs clarity that these items are ready and available
-* User needs to be able to add in custom images
-* Users really interested in other ways of helping but appreciate the 3 there already
-* Need a way to politely decline an offer of help and introduce element of choice
-* We need to deeply investigate safety concerns
-* Conversational tone in a familiar language \(depends on input from Monica & Angie\)
-* Scheduling and timings for tasks \(Time slots? Leave out? dropboxes?\)
-* Pickup location coordination \(chat? Options? Third party point?\)
-* Clarify and repeat perspective in conversational language: who is helping who with what again?
-* Simplify to two options: Give Help and Get Help -> Then simplify to two more options: Items and Skills\(or Actions\)
-* Type-ahead label generation, or free text \(this is a new way of organizing info-- something we haven’t really tried yet\)
+* Text and buttons bigger
+* Plain, natural language for any text
+* Repeat requests, bigger headings and more explanation
+* Add in a bio on profile
+* investigate something other than stars for rating
+* We need a review template for people to add in a minimum amount of detail
+* Food list deeply confusing via request. Needs clarity that these items are ready and available
+* User needs to be able to add in custom images
+* Users really interested in other ways of helping but appreciate the 3 there already
+* Need a way to politely decline an offer of help and introduce element of choice
+* We need to deeply investigate safety concerns
+* Conversational tone in a familiar language \(depends on input from Monica & Angie\)
+* Scheduling and timings for tasks \(Time slots? Leave out? dropboxes?\)
+* Pickup location coordination \(chat? Options? Third party point?\)
+* Clarify and repeat perspective in conversational language: who is helping who with what again?
+* Simplify to two options: Give Help and Get Help -> Then simplify to two more options: Items and Skills\(or Actions\)
+* Type-ahead label generation, or free text \(this is a new way of organizing info-- something we haven’t really tried yet\)
## Via Voting the top issues to investigate are:
diff --git a/docs/design/user-testing-script-examples.md b/docs/design/user-testing-script-examples.md
index b37fbd7329..4359c96140 100644
--- a/docs/design/user-testing-script-examples.md
+++ b/docs/design/user-testing-script-examples.md
@@ -14,7 +14,6 @@ Ushahidi typically structure a user testing session as follows:
**Tasks -** Observe the participant completing a set of tasks, usually about 3-5 of them.
-
**General questions and closing -** Any non-usability related things you want to know and a last chance to ask/answer questions.
The industry standard for task-based user testing with a clickable prototype is 5-8 people. You’ll know you have tested enough people when participants start to point out the same issues.
diff --git a/docs/development-and-code/coding-standards.md b/docs/development-and-code/coding-standards.md
index cedc7c2ea2..42dce02b00 100644
--- a/docs/development-and-code/coding-standards.md
+++ b/docs/development-and-code/coding-standards.md
@@ -1,12 +1,10 @@
# Coding Standards
-### Platform API
+## Platform API
Ushahidi uses PSR2 with tabs instead of spaces. Our ruleset is found in [src/ruleset.xml](https://github.com/ushahidi/platform/blob/develop/src/ruleset.xml).
-### Platform Client
+## Platform Client
We are using JavaScript version E6. Our ruleset is found in [.jshintrc](https://github.com/ushahidi/platform-client/blob/develop/.jshintrc)
-
-
diff --git a/docs/development-and-code/development-process.md b/docs/development-and-code/development-process.md
index 53855a99c1..dc5e43f7c5 100644
--- a/docs/development-and-code/development-process.md
+++ b/docs/development-and-code/development-process.md
@@ -43,7 +43,7 @@ In short: The development phase is when we go from zero to demo in each ticket.
Cumulative Burndown Charts are generated every 2 days so we can easily see the trends in our cycle.
-#### DONE Reviews:
+#### DONE Reviews:
For each ticket, the devs share a video with the PM demonstrating the work, or get on a demo call. This work either gets accepted \(goes into final testing phase\), or rejected \(goes back to Development\).
@@ -51,13 +51,5 @@ For each ticket, the devs share a video with the PM demonstrating the work, or g
Open source contributors does not need to join and follow the cycles, you can do it in your own pace. We have marked issues that are up for grabs by community devs "[Community task](https://github.com/ushahidi/platform/labels/Community%20Task)" in github.
-Other tasks that we haven’t labeled yet may be suitable for work. Feel free to [contact](mailto:techdocs@ushahidi.com) the team if you intend to work on something that grabs your attention.
-
-
-
-
-
-
-
-****
+Other tasks that we haven’t labeled yet may be suitable for work. Feel free to [contact](mailto:techdocs@ushahidi.com) the team if you intend to work on something that grabs your attention.
diff --git a/docs/development-and-code/getting-started.md b/docs/development-and-code/getting-started.md
index 5a5206f90a..3a47ecb279 100644
--- a/docs/development-and-code/getting-started.md
+++ b/docs/development-and-code/getting-started.md
@@ -13,8 +13,6 @@
Anyone can use Ushahidi, but traditionally it has been a tool used by Crisis Responders, Human Rights Reporters, and Citizens & Governments \(such as election monitoring or corruption reporters\). We also serve environmental mappers, asset monitoring, citizen journalism, international development, and many others.
-
-
### Technical Specifications
**Development stack**
diff --git a/docs/development-and-code/how-to-get-the-source-code.md b/docs/development-and-code/how-to-get-the-source-code.md
index bf47fe65dd..556caa6305 100644
--- a/docs/development-and-code/how-to-get-the-source-code.md
+++ b/docs/development-and-code/how-to-get-the-source-code.md
@@ -20,7 +20,7 @@ The Platform soure-code is found in the[ Platform Client repository](https://git
To get the source-code, clone the code with:
-```
+```text
git clone https://github.com/ushahidi/platform-client.git
```
@@ -34,7 +34,3 @@ To get the source-code, clone the code with:
git clone https://github.com/ushahidi/platform-pattern-library.git;
```
-
-
-
-
diff --git a/docs/development-and-code/installation-helper.md b/docs/development-and-code/installation-helper.md
index f01e42cf96..56a311dbc9 100644
--- a/docs/development-and-code/installation-helper.md
+++ b/docs/development-and-code/installation-helper.md
@@ -29,7 +29,7 @@ gulp dev:verifier
For instance, if the address of your deployment is [https://ushahidi.example.com](https://ushahidi.example.com) , the helper will be available at this address: [https://ushahidi.example.com\*\*/verifier\*\*](https://ushahidi.example.com**/verifier**)
{% endhint %}
-![](../.gitbook/assets/screenshot-2019-09-17-at-08.05.51%20%281%29.png)
+![](../.gitbook/assets/screenshot-2019-09-17-at-08.05.51-1.png)
### For developers
@@ -59,7 +59,7 @@ Although the installation helper is a client-side utility, it is able to direct
Some of those API-side tests may reveal security sensitive information about the internals of the service, and for that reason are not enabled by default. On your first run of the helper, you will probably see messages similar to this one:
-![The Installation Helper reporting some checks are disabled in the API](../.gitbook/assets/screenshot-2019-09-13-at-14.16.23%20%281%29.png)
+![The Installation Helper reporting some checks are disabled in the API](../.gitbook/assets/screenshot-2019-09-13-at-14.16.23-1.png)
What this means is that in order for the helper to run those tests, the "Installation Debug" mode needs to be enabled on the API-side. In order to do that, you'd need to
diff --git a/docs/development-and-code/issue-tracking.md b/docs/development-and-code/issue-tracking.md
index 4515392ddd..dbc4ae77aa 100644
--- a/docs/development-and-code/issue-tracking.md
+++ b/docs/development-and-code/issue-tracking.md
@@ -4,11 +4,11 @@ description: All tasks are filed as issues in github.
# Track and submit issues in Github
-### Track issues in Github
+## Track issues in Github
-We log all our issues concerning development and documentation for the Ushahidi Platform in the [Platform-repository](https://github.com/ushahidi/platform/issues). Issues marked with [Community-task](https://github.com/ushahidi/platform/labels/Community%20Task) are issues that are up for grabs for any community-member.
+We log all our issues concerning development and documentation for the Ushahidi Platform in the [Platform-repository](https://github.com/ushahidi/platform/issues). Issues marked with [Community-task](https://github.com/ushahidi/platform/labels/Community%20Task) are issues that are up for grabs for any community-member.
-### Submit issues in GitHub
+## Submit issues in GitHub
To submit issues in GitHub for the Ushahidi Platform, please go to [https://github.com/ushahidi/platform/issues](https://github.com/ushahidi/platform/issues) and click on the "New Issue" button, _or_ follow [this link](https://github.com/ushahidi/platform/issues/new/choose).
diff --git a/docs/development-and-code/setup_alternatives/README.md b/docs/development-and-code/setup_alternatives/README.md
index 7c7a3276ae..978195da5f 100644
--- a/docs/development-and-code/setup_alternatives/README.md
+++ b/docs/development-and-code/setup_alternatives/README.md
@@ -36,5 +36,3 @@ If you plan to change the css for the Platform Client, follow this guide.
{% page-ref page="setting-up-the-pattern-library-for-development.md" %}
-
-
diff --git a/docs/development-and-code/setup_alternatives/installing-for-production-environments.md b/docs/development-and-code/setup_alternatives/installing-for-production-environments.md
index e99fcf30ab..e4ac12faa7 100644
--- a/docs/development-and-code/setup_alternatives/installing-for-production-environments.md
+++ b/docs/development-and-code/setup_alternatives/installing-for-production-environments.md
@@ -96,8 +96,8 @@ DB_DATABASE={your-database-name} # example: platform-db
DB_USERNAME={your-database-user} # example: platform-user
DB_PASSWORD={your-database-password} # example: yourpassword
-## Cache
-CACHE_DRIVER=file
+## Cache (you can use array if testing, and memcache or redis for production)
+CACHE_DRIVER=redis
# Queues
# This section will be particularly important once we launch release 4.2.x+ and later
# since we will start providing access to queues for CSV exports then)
@@ -218,13 +218,13 @@ Create the `/etc/nginx/sites-available/platform-client.conf` file, referencing t
{% code title="/etc/nginx/sites-available/platform-client.conf" %}
```text
server {
-
+
listen 80 default_server;
listen [::]:80 ;
server_name your-site.example.com;
charset UTF-8;
root /var/www/platform-client/server/www;
-
+
index index.html;
location / {
try_files $uri $uri/ @missing;
diff --git a/docs/development-and-code/setup_alternatives/platform_release_install.md b/docs/development-and-code/setup_alternatives/platform_release_install.md
index 7af68d0ba7..b32d90196d 100644
--- a/docs/development-and-code/setup_alternatives/platform_release_install.md
+++ b/docs/development-and-code/setup_alternatives/platform_release_install.md
@@ -51,7 +51,7 @@ The instructions and example commands are written specifically for Debian Linux
# This is only relevant for debug level stuff like timestamps in log messages
APP_TIMEZONE=UTC
- CACHE_DRIVER=file
+ CACHE_DRIVER=array
# See comments down in the doc for other options
QUEUE_DRIVER=sync
```
@@ -82,7 +82,7 @@ MAILTO=
{% hint style="warning" %}
Make sure to try to log in at least once. The system will ask you right away to provide a valid e-mail address \(that will override the "admin" user name\).
-That's also a great chance to set a more secure password. 🔐👍
+That's also a great chance to set a more secure password. 🔐👍
{% endhint %}
## nginx with php-fpm
@@ -107,14 +107,14 @@ In all cases, you'll need to ensure that:
* Decompress the release file and place the contents of the `html` folder in the webroot of your shared hosting domain or subdomain.
* Create a database for your website and write the access details in the `platform/.env` file \(as per step 4 of Apache 2 instructions\).
* Also, you must have command line access \(SSH\) in order to run the `php artisan migrate` and other `artisan` commands as outlined above.
-* Most importantly, a URL rewriting mechanism has to be in place so that requests to /platform/api/v3/ __are to be forwarded to the `index.php` script inside `platform/httpdocs`_._ When invoking that script, the "api/v3/\*" part of the url should be passed to the script into the a `$_SERVER` or environment variable. If your host uses Apache and supports _.htaccess_ files, most of this should be taken care of for you.
+* Most importantly, a URL rewriting mechanism has to be in place so that requests to /platform/api/v3/ _\_are to be forwarded to the `index.php` script inside `platform/httpdocs`_. _When invoking that script, the "api/v3/\*" part of the url should be passed to the script into the a `$_SERVER` or environment variable. If your host uses Apache and supports_ .htaccess\_ files, most of this should be taken care of for you.
## Something seems wrong?
If something doesn't seem to work we suggest giving a try to open your deployment website address, but adding a "/verifier" at the end of it.
{% hint style="info" %}
-For instance, if the address of your deployment is _https://ushahidi.example.com_ , we suggest you to try to open: _https://ushahidi.example.com**/verifier**_
+For instance, if the address of your deployment is [https://ushahidi.example.com](https://ushahidi.example.com) , we suggest you to try to open: [https://ushahidi.example.com\*\*/verifier\*\*](https://ushahidi.example.com**/verifier**)
{% endhint %}
The latest releases of the Ushahidi Platform come with a little handy tool called "[Installation Helper](../installation-helper.md)" which is started by accessing that specific address in the deployment.
@@ -169,7 +169,7 @@ And, as with many a labor collective, the main challenge is to keep them working
#### You can install / configure a system process supervisor
-Examples of process supervisors are systemd, upstart, pm2 , supervisord or chaperone.
+Examples of process supervisors are systemd, upstart, pm2 , supervisord or chaperone.
Here we'll document how to configure [supervisord](http://supervisord.org/) , which is one of the popular options. You would need to add the following block to your supervisord configurations \(usually found under `/etc/supervisor` and `/etc/supervisor/conf.d`
diff --git a/docs/development-and-code/setup_alternatives/setting-up-the-pattern-library-for-development.md b/docs/development-and-code/setup_alternatives/setting-up-the-pattern-library-for-development.md
index 13dfc8ebf2..f50b7aff25 100644
--- a/docs/development-and-code/setup_alternatives/setting-up-the-pattern-library-for-development.md
+++ b/docs/development-and-code/setup_alternatives/setting-up-the-pattern-library-for-development.md
@@ -19,20 +19,19 @@ cd platform-pattern-library;
npm install;
```
-Run `gulp build` to generate the fonts and compile the sass the first time.
+Run `gulp build` to generate the fonts and compile the sass the first time.
```text
gulp build
```
-Start the pattern library in http://localhost:8000 by running:
+Start the pattern library in [http://localhost:8000](http://localhost:8000) by running:
```text
gulp
```
-Once the pattern-library is running, the front-end guidelines and a guide on how to work with the pattern-library and its structure can be found on [http://localhost:8000/assets/html/front-end-guidelines/introduction.html](http://localhost:8000/assets/html/front-end-guidelines/introduction.html)
-
+Once the pattern-library is running, the front-end guidelines and a guide on how to work with the pattern-library and its structure can be found on [http://localhost:8000/assets/html/front-end-guidelines/introduction.html](http://localhost:8000/assets/html/front-end-guidelines/introduction.html)
## Further reading
diff --git a/docs/development-and-code/setup_alternatives/setting-up-the-platform-client.md b/docs/development-and-code/setup_alternatives/setting-up-the-platform-client.md
index 07c9a018b7..96fb5b7cb3 100644
--- a/docs/development-and-code/setup_alternatives/setting-up-the-platform-client.md
+++ b/docs/development-and-code/setup_alternatives/setting-up-the-platform-client.md
@@ -1,10 +1,10 @@
# \[Client\] Setting up the Platform Client for development
-### What is the platform client?
+## What is the platform client?
The web client is the component that end users interact with when opening the Platform website with a web browser. The client interacts with the API in order to perform operations on the system \(i.e. submit posts, query posts\).
-### Video-tutorials
+## Video-tutorials
The setup in this guide is demonstrated in below videos as well if you want to watch and follow the guide at the same time!
@@ -14,21 +14,19 @@ The setup in this guide is demonstrated in below videos as well if you want to w
{% embed url="https://www.youtube.com/watch?v=zY80QpptKk0&feature=youtu.be" caption="Download the Platform code with Github-desktop, recorded in Windows" %}
-
-
-### Installation steps
+## Installation steps
{% hint style="warning" %}
-Pre-requisite: Install the platform API by following one of the API setup guides
+
+Pre-requisite: Install the platform API by following one of the API setup guides
{% page-ref page="./" %}
-{% endhint %}
{% hint style="warning" %}
Pre-requisite: Install Node V10.x or higher \(you might want to use NVM for this\) before continuing.
{% endhint %}
-#### **Getting the platform-client code**
+### **Getting the platform-client code**
* In a terminal window or command prompt, clone the repository.
@@ -37,7 +35,7 @@ git clone https://github.com/ushahidi/platform-client.git
```
{% hint style="success" %}
-Mind your directories. The command above will create a directory named _platform-client_ in the current active directory of your terminal/command prompt. Make sure you know on which directory you are setting **before** running the command.
+Mind your directories. The command above will create a directory named _platform-client_ in the current active directory of your terminal/command prompt. Make sure you know on which directory you are setting **before** running the command.
{% endhint %}
* Go into the platform directory
@@ -66,7 +64,7 @@ for working on the `master`branch, with more stable code.
If you haven't used git before or need help with git specific issues, make sure to check out their docs here [https://git-scm.com/doc](https://git-scm.com/doc)
{% endhint %}
-#### Installing dependencies
+### Installing dependencies
* Install the platform-client dependencies.
@@ -74,7 +72,7 @@ If you haven't used git before or need help with git specific issues, make sure
npm install
```
-#### Configuring the client build
+### Configuring the client build
There are a few quite important variables that are looked at the point when the client code is built into a browser web app. These variables are picked up from a file named `.env` , located in the `platform-client` folder that you have recently cloned from github.
@@ -94,7 +92,7 @@ This will create an empty file, but with the right name. File Explorer may prese
Mac/Linux users may use the `touch .env` command to the same end.
{% endhint %}
-#### Required build configuration variables
+### Required build configuration variables
There is only one required variable that must be defined in your `.env` file, and its name is `BACKEND_URL`. Its purpose is to configure the client with the URL to use, in order to send HTTP network requests to the Platform API. If this variable is wrong, nothing works. This variable usually takes different values for different users.
@@ -118,16 +116,16 @@ If you have used one of our guides for setting up the API locally, check back th
{% hint style="success" %}
Take a minute here to make sure you have entered the proper URL and the API is working.
-From your `.env` file, copy the variable value \(the part starting with "http://"\) and paste it in your browser's address bar, then hit enter. As a result you should see something similar to this:
+From your `.env` file, copy the variable value \(the part starting with "[http://"\](http://"\)\) and paste it in your browser's address bar, then hit enter. As a result you should see something similar to this:
```text
{"now":"2019-02-04T10:52:25+00:00","version":"3","user":{"id":null,"email":null,"realname":null}}
```
-If you get an error, please make sure that your API server is up \(i.e. Apache and MySQL\), and go back to your Platform API installation notes to make sure you had the correct URL.
+If you get an error, please make sure that your API server is up \(i.e. Apache and MySQL\), and go back to your Platform API installation notes to make sure you had the correct URL.
{% endhint %}
-#### Advanced: other configuration variables
+### Advanced: other configuration variables
All the other variables are often not required to specify, as they have sensible defaults.
@@ -140,7 +138,7 @@ You can **safely skip this section** if it's your first time setting up the clie
* `APP_LANGUAGES` is a list of language codes \(in ISO-639-1 format\) to download from Transifex. For example `APP_LANGUAGES=sw,en,es` would enable the client to appear in Swahili, English and Spanish.
* `OAUTH_CLIENT_ID` and `OAUTH_CLIENT_SECRET` are variables used during the process of authentication of a user against the API. You can ignore these 99% of the times. Also, these are not particularly secret nor provide much security. They just have to exist, and they do by default. \(If you must know, their values default to `ushahidiui` and `35e7f0bca957836d05ca0492211b0ac707671261` respectively\)
-#### Making \`gulp\` command available
+### Making \`gulp\` command available
The `gulp` command, although a bit funny-sounding, is key for all development tasks on the platform client.
@@ -171,7 +169,7 @@ export PATH=$HOME/bin:/usr/local/bin:node_modules/.bin:$PATH
```
{% endcode %}
-### Running a local development server
+## Running a local development server
The local development server is a web server that makes the platform client available to your browser locally. Additionally, it will watch the `platform-client` folder for changes, and rebuild the application as needed.
@@ -193,11 +191,11 @@ At that point the client should be available to the browser on the address [http
You are all set for developing, happy hacking!
{% endhint %}
-### Appendix: Building for publication
+## Appendix: Building for publication
Sometimes you want to host your Platform instance so that other devices on the network or the internet can access it.
-For the Platform client this means placing the application files in a disk location configured as a static site, where your web server can find them and send them to those other devices.
+For the Platform client this means placing the application files in a disk location configured as a static site, where your web server can find them and send them to those other devices.
In order to build the files for publication, run:
@@ -211,7 +209,3 @@ In the **server** directory you will also find an example nginx and an example a
Please note that you will also need to publish the Platform API, so those other devices can actually make any use of the Platform.
-
-
-
-
diff --git a/docs/development-and-code/setup_alternatives/xampp.md b/docs/development-and-code/setup_alternatives/xampp.md
index 2d4029e7a2..da5010fb12 100644
--- a/docs/development-and-code/setup_alternatives/xampp.md
+++ b/docs/development-and-code/setup_alternatives/xampp.md
@@ -52,7 +52,7 @@ The two main components of the Ushahidi Platform are the API and the Client. We
* Installing Composer on Ubuntu \(added to this list 18/3-2019\): [https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-18-04](https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-18-04)
{% hint style="warning" %}
-Ensure that you download the XAMPP package containing the **appropriate PHP version**. Check the [README](../../) for finding which one it is.
+Ensure that you download the XAMPP package containing the **appropriate PHP version**. Check the [README](../../) for finding which one it is.
{% endhint %}
* _Mac:_
@@ -135,8 +135,6 @@ We will configure the API now. We will do this continuing working on the same te
* Linux and Mac: run `cp .env.example .env`
* Open `.env` with your IDE or text editor. This file is located inside your platform folder.
-
-
{% hint style="info" %}
Hint on Linux and Mac: You can run `sudo nano .env` to open up the nano text-editor in the terminal. When you are finished editing, press ctrl-x and then Y when asked if you want to save.
{% endhint %}
@@ -146,7 +144,7 @@ On Windows File Explorer, the default is to hide the extension of the files \(th
{% endhint %}
* Modify the file in the following way:
- * Change the `CACHE_DRIVER` to be `file` instead of `memcache` \(it's feasible set it up with memcache at some point, but for simplicity we use `file`\)
+ * Change the `CACHE_DRIVER` to be `array` instead of `memcache` \(it's feasible set it up with memcache at some point, but for simplicity we use `array`\)
* Change the `DB_HOST` to `127.0.0.1`
* Change the `DB_USER` to `root`
* Change the `DB_PASSWORD` to be empty, so literally: `DB_PASSWORD=`
@@ -156,7 +154,7 @@ On Windows File Explorer, the default is to hide the extension of the files \(th
* This will create all the necessary tables and a default `admin` user with password `administrator`
{% hint style="info" %}
-In the event your system is telling you that `composer` is not a known command, you can try the following setup in the command line:
+In the event your system is telling you that `composer` is not a known command, you can try the following setup in the command line:
```bash
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
@@ -268,7 +266,7 @@ We are going to need some extra concentration here, so read carefully.
* _Mac: ..._
* Now that we have the configuration file ready to edit, we are going to add a few lines at the bottom of that file. Those lines look like this:
-```
+```text
ServerAdmin webmaster@localhost
DocumentRoot ""
@@ -338,7 +336,7 @@ We have a separate document just for setting up the client. But, before you jump
At some point during the client set up, you will be asked to adjust the value of the variable `BACKEND_URL` . This is a variable that configures the client to send API requests to the right API backend.
-As a result of the steps followed in this guide, the URL for the API backend is http://api.ushahidi.test . So remember that your backend configuration line would be: `BACKEND_URL=http://api.ushahidi.test`
+As a result of the steps followed in this guide, the URL for the API backend is [http://api.ushahidi.test](http://api.ushahidi.test) . So remember that your backend configuration line would be: `BACKEND_URL=http://api.ushahidi.test`
With that clarified, please find below the link to the client set up guide.
diff --git a/docs/development-and-code/upgrading-ushahidi/README.md b/docs/development-and-code/upgrading-ushahidi/README.md
index 4aadccc6fb..8846774479 100644
--- a/docs/development-and-code/upgrading-ushahidi/README.md
+++ b/docs/development-and-code/upgrading-ushahidi/README.md
@@ -12,5 +12,3 @@ When you are done reading above, or you already are on V4.x.x and want to upgrad
{% page-ref page="upgrading-to-latest-release.md" %}
-
-
diff --git a/docs/development-and-code/upgrading-ushahidi/upgrading-from-v3.x.x-to-v4.x.x.md b/docs/development-and-code/upgrading-ushahidi/upgrading-from-v3.x.x-to-v4.x.x.md
index 7b6be3d2a1..cc86ab1069 100644
--- a/docs/development-and-code/upgrading-ushahidi/upgrading-from-v3.x.x-to-v4.x.x.md
+++ b/docs/development-and-code/upgrading-ushahidi/upgrading-from-v3.x.x-to-v4.x.x.md
@@ -35,7 +35,7 @@ The database configuration vars have been renamed.
| Var | Comments |
| :--- | :--- |
-| `CACHE_DRIVER` | Supported options are `file`, `redis` and `memcached`. Read more about Lumen's cache configuration and options here [https://lumen.laravel.com/docs/5.4/cache](https://lumen.laravel.com/docs/5.4/cache) |
+| `CACHE_DRIVER` | Supported options are `array`, `redis` and `memcached`. Read more about Lumen's cache configuration and options here [https://lumen.laravel.com/docs/5.4/cache](https://lumen.laravel.com/docs/5.4/cache) |
### Artisan
diff --git a/docs/development-and-code/upgrading-ushahidi/upgrading-to-latest-release.md b/docs/development-and-code/upgrading-ushahidi/upgrading-to-latest-release.md
index 59ccb518df..73608d4f6e 100644
--- a/docs/development-and-code/upgrading-ushahidi/upgrading-to-latest-release.md
+++ b/docs/development-and-code/upgrading-ushahidi/upgrading-to-latest-release.md
@@ -1,6 +1,6 @@
# Upgrading to latest release
-### Updating your deployment to the latest version
+## Updating your deployment to the latest version
Instructions on how to upgrade your Ushahidi deployment.
@@ -14,7 +14,7 @@ Instructions on how to upgrade your Ushahidi deployment.
1. Running database migrations
2. Ensuring that log, cache and media/uploads under platform/application are owned by the proper user
-### Updating the client \(for developers\)
+## Updating the client \(for developers\)
From your local repository fetch the latest code and run \`npm install\` to update your modules:
@@ -32,7 +32,7 @@ gulp build
The updated version should load when you reload your browser.
-### Updating the API \(for developers\)
+## Updating the API \(for developers\)
From your local repository fetch the latest code and run \`bin/update\` or \`bin/update --production\` if you are running on a production environment:
diff --git a/docs/documentation/contributing-docs-via-github.md b/docs/documentation/contributing-docs-via-github.md
index d5ad8ce39c..5418f15734 100644
--- a/docs/documentation/contributing-docs-via-github.md
+++ b/docs/documentation/contributing-docs-via-github.md
@@ -14,7 +14,7 @@ Further down the road, once you have proposed some changes, we will ask you to a
While browsing GitBook, you will find a "Edit on GitHub" button
-![](../.gitbook/assets/github-1.png)
+![](../.gitbook/assets/github-1%20%281%29.png)
This will take you to github.com , where you will see the same document, along with some action buttons. You would want to click the one looking like a pencil, as illustrated below:
@@ -42,11 +42,11 @@ This information provided in these two boxes is useful for the administrators so
Once you are happy with your changes and proposal details. You would click the "Propose file change" button.
-![](../.gitbook/assets/github-6.png)
+![](../.gitbook/assets/github-6%20%281%29.png)
You will be dropped into yet another summary view of your changes. There's really not much else you should review here, if you have reviewed your changes in previous steps. We suggest just to locate and click the "Create pull request" button.
-![](../.gitbook/assets/github-7.png)
+![](../.gitbook/assets/github-7%20%281%29.png)
You will be dropped into the pull request opening screen. A pull request is the way developers refer to the petition of someone to apply changes to files in the repository. A pull request wraps together the whole process of requesting the changes, discussing them, and finally approving or rejecting the petition.
@@ -60,7 +60,7 @@ Once you click that button, your pull request will be submitted and available fo
At some point they will also take the decision to accept \(or more unlikely, reject\) your contribution.
-![](../.gitbook/assets/github-9.png)
+![](../.gitbook/assets/github-9%20%281%29.png)
In case this is your **first contribution**, you will be requested to sign the CLA \(Contributor License Agreement\). You will find a comment in the pull request, with the necessary instructions:
@@ -68,5 +68,3 @@ In case this is your **first contribution**, you will be requested to sign the C
And this is it, at this point your documentation changes have been submitted and visible to administrators. Thank you very much!
-
-
diff --git a/docs/documentation/contributing-documentation.md b/docs/documentation/contributing-documentation.md
index 2e072ff8c2..cd9f1c58aa 100644
--- a/docs/documentation/contributing-documentation.md
+++ b/docs/documentation/contributing-documentation.md
@@ -25,7 +25,7 @@ Our intention is to make our documentation available to as many people as possib
We use the English language as it is the most widely spread language for global communication. While making this choice, we must be mindful of the diversity of our audience. Not all our readers may be comfortable with English. We must not add to their burden with confused explanations, complicated structure or obscure wording.
-Here are a few things to keep in mind.
+Here are a few things to keep in mind.
* **Keep your pages short**. If you have to scroll down more than two or three times so as to review the content of your newly created page, it may be worth splitting that content up into two or several different pages.
* **Keep your text to the point**. Avoid at all costs quickly rambling through different ideas or adding to the same page concepts that are not directly connected.
@@ -34,5 +34,3 @@ Here are a few things to keep in mind.
* **Don't use sophisticated language**. Our documentation is not intended only for native or advanced English speakers. Any person with a beginner to intermediate level should be able to read this without giving up.
* **Use short sentences and neutral, standard vocabulary.** Please try to write in short sentences. Avoid long sentences with multiple conjunctions. Also use vocabulary as plain as possible. Avoid obscure words and local, excessively colloquial or elaborate expressions. If you feel it's absolutely necessary to use a specific, not widely used term, please consider linking to its definition.
-
-
diff --git a/docs/enhancement-proposals/importing-data-from-previous-versions.md b/docs/enhancement-proposals/importing-data-from-previous-versions.md
new file mode 100644
index 0000000000..d41b10b23a
--- /dev/null
+++ b/docs/enhancement-proposals/importing-data-from-previous-versions.md
@@ -0,0 +1,6 @@
+# Importing data from previous versions
+
+{% hint style="info" %}
+This page is under construction
+{% endhint %}
+
diff --git a/docs/frequently-asked-questions.md b/docs/frequently-asked-questions.md
index 42445214e8..7ffe7b3e41 100644
--- a/docs/frequently-asked-questions.md
+++ b/docs/frequently-asked-questions.md
@@ -18,15 +18,15 @@
### Which installation option should I choose?
-As with many things, it depends.
+As with many things, it depends.
-__Are you are planning on developing new code for Ushahidi, or testing the platform?__ Use one of the development setups.
+**Are you are planning on developing new code for Ushahidi, or testing the platform?** Use one of the development setups.
* If you are already familiar with XAMPP and want to avoid using Vagrant for performance or familiarity issues, then go with the [XAMPP Install guide](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/xampp).
* If you are familiar with Vagrant, or willing to learn how to setup Vagrant + Homestead and you have a machine capable of running a virtual machine and vagrant, then go with [the vagrant based setup](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/vagrant-setup) \(This is the setup Ushahidi staff uses on a daily basis!\)
* If you are a frontend developer that wants to contribute without setting up the backend, then try [setting up the platform client](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/setting-up-the-platform-client) only, and using the API route of an ushahidi.io deployment. This the fastest way to get started.
-__Are you ready to deploy Ushahidi for others to use?__
+**Are you ready to deploy Ushahidi for others to use?**
* if you plan to modify the code in some way, follow the [Installing for production environments setup guide.](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/installing-for-production-environments)
* If you want to deploy Ushahidi without worrying about upgrading, monitoring services, or hosting it yourself, start a new deployment in [http://ushahidi.io/create](http://ushahidi.io/create) and we will manage all the tech for you.
@@ -42,7 +42,7 @@ Yes you can. You can follow this link for more resources on how to install: [her
### Do you support Windows installations?
-Some folks have been successful in getting the platform set up for development in a windows environment. If you are not familiar with Vagrant or Vagrant is not working correctly for you in Windows, we recommend you try following the [XAMPP installation guide here](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/xampp) and let us know if you run into any issues.
+Some folks have been successful in getting the platform set up for development in a windows environment. If you are not familiar with Vagrant or Vagrant is not working correctly for you in Windows, we recommend you try following the [XAMPP installation guide here](https://docs.ushahidi.com/platform-developer-documentation/getting-started/setup_alternatives/xampp) and let us know if you run into any issues.
For production environments, we strongly recommend you use a Linux based environment instead, since most of our development and all our production setup is done in either Mac OS or a Linux based distribution like Ubuntu, RedHat OS, Fedora, etc.
@@ -55,7 +55,7 @@ For production environments, we strongly recommend you use a Linux based environ
You have installed only the API. Unless you are installing the bundle that contains both client and API, you would need to set up both separately. This also requires you to set up two different virtual hosts under different subdomains or ports. If this sounds too complicated, please look at the simplified install of the bundle.
-### When I open a URL with a path other than / \(i.e. /views/map \) I get a "404 not found" error.
+### When I open a URL with a path other than / \(i.e. /views/map \) I get a "404 not found" error.
Your web server setup is not handling the URLs as designed. There can be different reasons for this. If you are using Apache, please make sure that you have the directive “AllowOverride All” configured for the folder where you made your installation. If you are using nginx, please make sure that you are using our recommended configuration file.
@@ -66,42 +66,40 @@ Your web server setup is not handling the URLs as designed. There can be differe
First, let's identify your stack.
* Are you using ushahidi.io and running a deployment there? If YES, please contact our team through one of these channels: [https://www.ushahidi.com/contact\#](https://www.ushahidi.com/contact#)
-* Are you a developer, setting up Ushahidi yourself? Start by checking the network tab in your development browser of choice and identifying any network errors. Look at the response for each and check what you see.
+* Are you a developer, setting up Ushahidi yourself? Start by checking the network tab in your development browser of choice and identifying any network errors. Look at the response for each and check what you see.
The most common reasons for this error:
* You have used the wrong url in the BACKEND\_URL key of your platform-client .ENV file. Check that when you access the URL in the browser + /api/v3/config it returns a valid json. It should look like this when you call the /api/v3/config endpoint for your API: [https://qa.api.ushahidi.io/api/v3/config](https://qa.api.ushahidi.io/api/v3/config)
- * The server is failing for some reason. If the server is failing, it will likely show an error either in the browser when you call the API URL or in the server logs, which you can see in files contained within {the\_platform\_install\_dir}/storage/logs. Check the errors in the log, as often you will see that there is a permissions error somewhere, or a directory is missing, which you can solve yourself.
+ * The server is failing for some reason. If the server is failing, it will likely show an error either in the browser when you call the API URL or in the server logs, which you can see in files contained within {the\_platform\_install\_dir}/storage/logs. Check the errors in the log, as often you will see that there is a permissions error somewhere, or a directory is missing, which you can solve yourself.
- When reporting issues, please note that we will need as much information as you can provide to be able to help you, so please start by checking all of the above, and then contact us with the information you found through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel. Including details about your development environment, what you have tried doing to solve it, what you were doing when this error occured, and your log files are critical in order for us to help you get set up.
+ When reporting issues, please note that we will need as much information as you can provide to be able to help you, so please start by checking all of the above, and then contact us with the information you found through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel. Including details about your development environment, what you have tried doing to solve it, what you were doing when this error occured, and your log files are critical in order for us to help you get set up.
-* Are you a developer who is only setting up the client and using ushahidi.io for the API? This is most likely an error in your .ENV file, check that your BACKEND\_URL looks like this [http://DEPLOYMENTNAME.api.ushahidi.io](http://test.api.ushahidi.io) \(notice the .api after your deployment's name -- it's important!\)
+* Are you a developer who is only setting up the client and using ushahidi.io for the API? This is most likely an error in your .ENV file, check that your BACKEND\_URL looks like this [http://DEPLOYMENTNAME.api.ushahidi.io](http://test.api.ushahidi.io) \(notice the .api after your deployment's name -- it's important!\)
### I have configured the datasources but I'm not getting any posts from them. What could be wrong?
-#### Are you referring to an Ushahidi.io deployment?
+#### Are you referring to an Ushahidi.io deployment?
-Please verify that all the fields have the correct values and that you have enabled the "Accept survey submissions from this source" toggle \(it should be green/on!\)
+Please verify that all the fields have the correct values and that you have enabled the "Accept survey submissions from this source" toggle \(it should be green/on!\)
![Example with disabled "Twitter" datasource.](.gitbook/assets/screen-shot-2019-08-03-at-11.08.49.png)
-If you think your configuration is correct, please get in touch with your deploment name and details, and someone from the support team will be able to help.
+If you think your configuration is correct, please get in touch with your deploment name and details, and someone from the support team will be able to help.
-#### Are you hosting Ushahidi yourself?
+#### Are you hosting Ushahidi yourself?
-Please verify that all the fields have the correct values and that you have enabled the "Accept survey submissions from this source" toggle \(it should be green/on!\)
+Please verify that all the fields have the correct values and that you have enabled the "Accept survey submissions from this source" toggle \(it should be green/on!\)
![Example with disabled "Twitter" datasource.](.gitbook/assets/screen-shot-2019-08-03-at-11.08.49.png)
If the configuration values are correct, then proceed to check the following in the platform API.
-
-
```text
php artisan datasource:incoming
```
-Run the datasource:incoming task manually in the platform API directory \(as the example above\). It should succeed and not show any errors. If there are errors, check the logs under storage/logs to review what looks wrong. If nothing else, this will help you contact the team through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel with details.
+Run the datasource:incoming task manually in the platform API directory \(as the example above\). It should succeed and not show any errors. If there are errors, check the logs under storage/logs to review what looks wrong. If nothing else, this will help you contact the team through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel with details.
If the incoming task worked, check if new posts are available. If they are, then this means that the problem is that the datasources work but are not being automatically fetched. Check that you have a crontab running periodically for your datasources and other tasks.
@@ -120,12 +118,12 @@ MAILTO=admin@example.com
```
{% endcode %}
-If after ensuring the crontab is correct and datasources run, you don't see any new posts, please get in touch through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel with all the details about what you tried and what you have seen, and we'll be happy to help.
+If after ensuring the crontab is correct and datasources run, you don't see any new posts, please get in touch through[ the Ushahidi gitter](http://gitter.im/ushahidi/Community) channel with all the details about what you tried and what you have seen, and we'll be happy to help.
### I am getting some sort of PHP error.
{% hint style="info" %}
-Please ensure that you are using a supported version of PHP for the version of platform that you are running.
+Please ensure that you are using a supported version of PHP for the version of platform that you are running.
{% endhint %}
* **v2** supports up to PHP 5.4
@@ -135,7 +133,7 @@ Please ensure that you are using a supported version of PHP for the version of p
### I’m getting a database connection error.
- Please verify that you have created your MySQL database, know the correct credentials for the API to connect to it and that your “.env” file is created with the expected format and at the expected location
+Please verify that you have created your MySQL database, know the correct credentials for the API to connect to it and that your “.env” file is created with the expected format and at the expected location
### How do I upgrade Ushahidi?
@@ -147,7 +145,7 @@ Please follow the step by step guide on how to update your deployment to the lat
Yes, you can. You will need to fork and modify the Ushahidi platform API repository to do so. New datasource types need to be coded into the platform. Check out the `src/App/DataSource/` directory in the platform API codebase to learn how the current datasources are created.
-If you are planning to add a new data source, please get in touch! The Ushahidi development team will be more than happy to help answer any questions or provide guidance.
+If you are planning to add a new data source, please get in touch! The Ushahidi development team will be more than happy to help answer any questions or provide guidance.
## Platform Client
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/create-a-new-component-from-scratch.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/create-a-new-component-from-scratch.md
index 3b652bd44f..bc27c037e9 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/create-a-new-component-from-scratch.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/create-a-new-component-from-scratch.md
@@ -1,26 +1,24 @@
# Create a New Component from Scratch
-
-
Follow these steps when creating a new UI component.
-### Where does the UI fit within the Pattern Library?
+## Where does the UI fit within the Pattern Library?
The Platform Pattern Library is modeled after Brad Frost's [Atomic Design](http://atomicdesign.bradfrost.com/), where smaller UI elements make up bigger elements which are then combined to create full pages. In [Atomic Design](http://atomicdesign.bradfrost.com/) **Atoms** are used to create **Molecules**, which create **Organisms**, which create **Templates**, all of which come together to create **Pages**. In the Pattern Library we follow the same methodology but with **Basics**, **Fragments**, **Modules**, and **Blocks** being used to create **Layouts**.
So the first thing that needs to be determined is where the new UI fits withing this methodology. Is it a small compenent? Or is it a bigger component made up of other smaller components? Once the appropriate structure is determined, you will be able to create the HTML and Sass accordingly.
-### HTML
+## HTML
Each UI component exists in either [**Basics**](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/1_basics/), [**Fragments**](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/2_fragments/), [**Modules**](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/3_modules/), or [**Blocks**](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/4_blocks/) with each having their own [index.html file](https://github.com/ushahidi/platform-pattern-library/tree/master/pattern-library/1_basics) _\(links to basic's index.html\)_.
-#### Creating the HTML for a new component
+### Creating the HTML for a new component
* add the new html component to the appropriate file above.
* add a link in that page's nav and link it to the new html component on that page.
* use that page's existing html and nav as a guide.
-#### Creating a new layout template.
+### Creating a new layout template.
[**Layouts**](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/5_layouts/) are compiled via [Handlebars](https://handlebarsjs.com/).
@@ -29,18 +27,14 @@ Each UI component exists in either [**Basics**](http://preview.ushahidi.com/plat
* add the appropriate html for the layout to the new .hbs file.
* link to the new layout .html file [here](https://github.com/ushahidi/platform-pattern-library/blob/master/pattern-library/5_layouts/index.html).
-### Sass
+## Sass
The Platform Pattern Library uses [Sass](https://sass-lang.com/) to compile Css.
-#### Styling the new component
+### Styling the new component
Sass files are structured using the same methodology as above.
* create a new .scss file in the[ Sass directory](https://github.com/ushahidi/platform-pattern-library/blob/master/assets/sass).
* @import that file to [/assets/sass/**style.scss**](https://github.com/ushahidi/platform-pattern-library/blob/master/assets/sass/style.scss)\*\*\*\*
-
-
-
-
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/grid-breakpoints-and-media-queries.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/grid-breakpoints-and-media-queries.md
index 059e0ab87d..2df71688c6 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/grid-breakpoints-and-media-queries.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/grid-breakpoints-and-media-queries.md
@@ -2,14 +2,14 @@
The Ushahidi Platform grid system is built with [Neat](http://neat.bourbon.io/) by [Thoughtbot](https://thoughtbot.com/). Neat is a lightweight semantic grid framework for Sass and Bourbon.
-### Links
+## Links
* [Neat Examples](http://neat.bourbon.io/examples/)
* [Neat Docs](http://thoughtbot.github.io/neat-docs/latest/)
The Ushahidi Platform uses a mobile-first design approach, meaning we design with smaller devices as our default, then add components and adjust layouts as needed when the screen size increases. This approach allows the app to function and convey the appropriate information regardless of the user's device. It works on mobile phones and desktop computers alike.
-### Breakpoints
+## Breakpoints
The breakpoints are defined under _Grid_ within [\_settings.scss](https://github.com/ushahidi/platform-pattern-library/blob/gh-pages/assets/sass/_settings.scss)
@@ -46,7 +46,7 @@ $tall: new-breakpoint(min-width $small-min-width min-height $tall-min-height);
$xtall: new-breakpoint(min-height $xtall-min-height);
```
-### How to Use
+## How to Use
You can call a breakpoint with this _@include_ syntax.
@@ -69,5 +69,3 @@ You can call a breakpoint with this _@include_ syntax.
}
```
-
-
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/helpers.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/helpers.md
index 618c85ad68..d36e149608 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/helpers.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/helpers.md
@@ -2,11 +2,11 @@
The assets/sass/utils/\_helpers.scss file provides a handful of helper classes.
-### Example
+## Example
The .divider helper class provides a quick way to display a page/section divider.
-#### Sass
+### Sass
```text
.divider {
@@ -26,13 +26,11 @@ The .divider helper class provides a quick way to display a page/section divider
}
```
-#### In HTML
+### In HTML
class="divider"\(default\)
class="divider padded"\(with padding\)
-class="divider white"\(to be used over a dark background\)
-
-
+class="divider white"\(to be used over a dark background\)
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/how-to-apply-to-the-platform.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/how-to-apply-to-the-platform.md
index 29795afd53..d406f3c716 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/how-to-apply-to-the-platform.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/how-to-apply-to-the-platform.md
@@ -1,8 +1,6 @@
# How to Apply to the Platform
-
-
-### Make changes
+## Make changes
After the [initial installation and setup](https://ushahidi.gitbook.io/platform-developer-documentation/getting-started/setup_alternatives/setting-up-the-pattern-library-for-development) follow these instructions:
@@ -11,7 +9,7 @@ After the [initial installation and setup](https://ushahidi.gitbook.io/platform-
* View your changes locally on localhost:8000 to see your styles in action.
* Commit your changes.
-### Push changes to NPM
+## Push changes to NPM
* _Assuming you have already committed your changes_
* Bump and tag a new version using npm version prerelease for a test release or npm version release for a production release
@@ -20,7 +18,7 @@ After the [initial installation and setup](https://ushahidi.gitbook.io/platform-
Note: The "version": "\#\#\#" in pattern library package.json should stay in sync with the client package.json.
-### Test your changes on a local client
+## Test your changes on a local client
* From within your platform-client installation run npm install ../platform-pattern-library/
* Run gulp in your platform-client install
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/icons.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/icons.md
index 879571295b..89f5d07da6 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/icons.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/icons.md
@@ -2,11 +2,11 @@
The Platform Pattern Library icons are part of the ["Open Iconic"](https://useiconic.com/open) library, and are served up by an [SVG sprite](https://github.com/ushahidi/platform-pattern-library/blob/master/assets/img/iconic-sprite.svg). This allows us to display all icons in the set with a single request. A list of available icons can be found [here](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/1_basics/#pl-pattern-icons).
-### HTML
+## HTML
Use [this HTML block](https://github.com/ushahidi/platform-pattern-library/blob/master/pattern-library/partials/_iconic-sample.html#L5-L7) wherever an icon is needed and adjust the [image path and \#icon-name](https://github.com/ushahidi/platform-pattern-library/blob/master/pattern-library/partials/_iconic-sample.html#L6)accordingly. Icon names can be found [here](http://preview.ushahidi.com/platform-pattern-library/master/assets/html/1_basics/#pl-pattern-icons).
-### CSS
+## CSS
Icons can be styled via the svg.iconic class.
@@ -19,5 +19,3 @@ svg.iconic {
}
```
-
-
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/installing-new-packages.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/installing-new-packages.md
index 651b25e73e..fb69002ca3 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/installing-new-packages.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/installing-new-packages.md
@@ -2,7 +2,7 @@
Third party packages, libraries and/or plugins can easily be added to the pattern library for additional features and functionality.
-### Installing New Packages
+## Installing New Packages
New packages can be added to your project by running npm install _example-package_ --save-dev.
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/mixins.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/mixins.md
index f115b87741..bde3b5574b 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/mixins.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/mixins.md
@@ -2,15 +2,15 @@
The Ushahidi Platform uses [Bourbon](http://bourbon.io/), a Sass mixin library. While Bourbon covers most of our mixin needs, there are times when custom mixins are needed. When that is the case each custom mixin is given it's own .scss file in the [mixins](https://github.com/ushahidi/platform-pattern-library/tree/gh-pages/assets/sass/utils/mixins) directory which are then @imported via the [\_mixins.scss](https://github.com/ushahidi/platform-pattern-library/blob/gh-pages/assets/sass/utils/_mixins.scss) file.
-### Bourbon Mixins
+## Bourbon Mixins
* [Bourbon Docs](http://bourbon.io/docs/)
-### Custom Mixins
+## Custom Mixins
Create a custom mixin when anticipating a reusable block of css.
-#### Example Mixin
+### Example Mixin
```text
@mixin rotate($deg: 90deg) {
@@ -25,7 +25,7 @@ Create a custom mixin when anticipating a reusable block of css.
* The mixin title is _**rotate**_
* The default degree value is _**90 degrees**_
-#### How to Use
+### How to Use
```text
.nav-icon {
@@ -36,5 +36,3 @@ Create a custom mixin when anticipating a reusable block of css.
* The mixin is called with _**@include**_
* _**75deg**_ overrides the 90deg default
-
-
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/pattern-library.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/pattern-library.md
index 681b12b1a8..afb46a2c1d 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/pattern-library.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/pattern-library.md
@@ -2,9 +2,9 @@
## File Structure
-The Ushahidi Platform front-end is served via the [assets folder](https://github.com/ushahidi/platform-pattern-library/tree/master/assets). Production files are compiled via [gulpfile.js](https://github.com/ushahidi/platform-pattern-library/blob/master/gulpfile.js).
+The Ushahidi Platform front-end is served via the [assets folder](https://github.com/ushahidi/platform-pattern-library/tree/master/assets). Production files are compiled via [gulpfile.js](https://github.com/ushahidi/platform-pattern-library/blob/master/gulpfile.js).
-### HTML/Handlebars
+### HTML/Handlebars
HTML templates are compiled via Handlebars. A .html template must be created in the [pattern-library/\_layouts](https://github.com/ushahidi/platform-pattern-library/tree/master/pattern-library/5_layouts) directory, then a .hbs template must be created in the [assets/templates](https://github.com/ushahidi/platform-pattern-library/tree/master/assets/templates) directory. Handlebars will then compile the production html into the [assets/html](https://github.com/ushahidi/platform-pattern-library/tree/master/assets/html) directory.
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/read-direction.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/read-direction.md
index 92a1f60cd2..70c8858b9e 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/read-direction.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/read-direction.md
@@ -4,8 +4,6 @@ Ushahidi's user interface displays LTR \(left-to-right\) by default, but Ushahid
When building this feature, it was important to maintain one code base that supported both LTR and RTL read direction. In order to accomplish this we decided to use a library of Sass mixins and functions to automatically flip the CSS styles for RTL \(right-to-left\) read direction when needed. We decided to go with [RTL-Sass](https://github.com/jamesl1001/RTL-Sass) open-source library, which supports the following properties:
-
-
* background
* background-position
* border
@@ -251,5 +249,3 @@ border-right: 3px solid #000 // RTL
}
```
-
-
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/syntax-and-formatting.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/syntax-and-formatting.md
index 0aff544a65..8c011de149 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/syntax-and-formatting.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/syntax-and-formatting.md
@@ -42,11 +42,11 @@ p {
}
```
-### Nesting
+## Nesting
Nesting is one of the best features in Sass, but it can be overused and create unwanted CSS. A best practice is to nest no more than 3 levels deep and to only nest classes when that relationship is absolutely necessary to declare in order to achieve the desired style. Nesting for the sake of organizing the stylesheet is discouraged.
-#### Sass
+### Sass
```text
.unordered-list {
@@ -69,7 +69,7 @@ Nesting is one of the best features in Sass, but it can be overused and create u
}
```
-#### Compiled CSS Output
+### Compiled CSS Output
```text
.unordered-list {
@@ -86,11 +86,11 @@ Nesting is one of the best features in Sass, but it can be overused and create u
}
```
-### Color Formats
+## Color Formats
Hex is the default color format with RGBA being used when opacity is needed.
-#### Hex
+### Hex
Hex values should be written in all caps.
@@ -106,7 +106,7 @@ Hex values should be written in all caps.
}
```
-#### RGB
+### RGB
When using RGB, single space after commas and no spaces after parentheses.
@@ -122,11 +122,11 @@ When using RGB, single space after commas and no spaces after parentheses.
}
```
-### Numbers
+## Numbers
Numbers should display leading zeros before a decimal value less than one and never display trailing zeros.
-#### Zeros:
+### Zeros:
```text
// Yes
@@ -142,7 +142,7 @@ Numbers should display leading zeros before a decimal value less than one and ne
}
```
-#### Units:
+### Units:
```text
// Yes
@@ -152,7 +152,7 @@ $length: 2em;
$length: 2;
```
-#### Calculations
+### Calculations
```text
// Yes
@@ -166,11 +166,11 @@ $length: 2;
}
```
-### Strings
+## Strings
Single quotes should be used with strings.
-#### Font Stack Example:
+### Font Stack Example:
```text
// Yes
@@ -183,7 +183,7 @@ $font-stack: "Helvetica Neue Light", "Helvetica", "Arial", sans-serif;
$font-stack: Helvetica Neue Light, Helvetica, Arial, sans-serif;
```
-#### Image URL Example:
+### Image URL Example:
```text
// Yes
@@ -197,7 +197,7 @@ $font-stack: Helvetica Neue Light, Helvetica, Arial, sans-serif;
}
```
-### Commenting
+## Commenting
Commenting is CSS is an essential practice that can help explain why and how code is written. Ushahidi's CSS commenting is simple.
@@ -208,9 +208,7 @@ Commenting is CSS is an essential practice that can help explain why and how cod
}
```
-
-
-### Css Rulesets
+## Css Rulesets
* related selectors on the same line; unrelated selectors on new lines;
* the opening brace \({\) spaced from the last selector by a single space;
@@ -237,7 +235,7 @@ Commenting is CSS is an essential practice that can help explain why and how cod
margin: 0 auto }
```
-### Letter Case Usage & Naming Conventions
+## Letter Case Usage & Naming Conventions
When naming classes use lower case letters and a hypen between words.
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/using-the-changed-styles-in-platform-client.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/using-the-changed-styles-in-platform-client.md
index 669c27990d..395f88e4be 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/using-the-changed-styles-in-platform-client.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/using-the-changed-styles-in-platform-client.md
@@ -7,7 +7,7 @@ Make the changes you need in the css in the Pattern Library.
3. In the directory where you cloned the **platform-client** repository for local development, go to **package.json**.
4. Find the entry for **ushahidi-pattern-library**
5. Change to the url to the new repository + the new pattern library commit id in this format: _"ushahidi-platform-pattern-library":"git://github.com/{your-own org}/ushahidi-platform-pattern-library-sivico.git\#{commit}"_
-6. Do **npm install** in the platform-client
+6. Do **npm install** in the platform-client
7. Go to **platform-client/node\_modules/ushahidi-pattern-library**
8. Run **npm install** there too \(this step is normally made by npm when using the Ushahidi-release so you need to do it yourself when using your own code\)
9. Now the Pattern Library is available in the platform-client development environment. To make the changes visible in your development environment, run **gulp build** in the platform-client again.
@@ -15,8 +15,7 @@ Make the changes you need in the css in the Pattern Library.
**Pattern Library: publishing a new version in your npm account and using it in the platform web client**
-**Please note, the complete, most up to date information on how to publish and use npm is available in the npm documentation,** [**https://docs.npmjs.com**](https://docs.npmjs.com/) **.**
-
+**Please note, the complete, most up to date information on how to publish and use npm is available in the npm documentation,** [**https://docs.npmjs.com**](https://docs.npmjs.com/) **.**
1. Go to **package.json** in your version of the Pattern Library
2. Change the name of the package to something else \(for example "YourProjectName-Pattern-Library"\)
diff --git a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/variables.md b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/variables.md
index 346dbb67d0..5709c7022e 100644
--- a/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/variables.md
+++ b/docs/front-end-development/changing-ui-styles-introduction-to-the-pattern-library/variables.md
@@ -2,7 +2,7 @@
Variables are defined in [\_settings.scss](https://github.com/ushahidi/platform-pattern-library/blob/gh-pages/assets/sass/_settings.scss). A few common variables are breakpoints, color, z-index and spacing, but other variables are available.
-### Example use
+## Example use
When using a color more than once, store it in a variable with a meaningful name representing the color.
@@ -27,5 +27,3 @@ $blue: #2274b4;
}
```
-
-
diff --git a/docs/get-in-touch.md b/docs/get-in-touch.md
index 570e435eda..7e33a483b8 100644
--- a/docs/get-in-touch.md
+++ b/docs/get-in-touch.md
@@ -1,11 +1,9 @@
# Join the Ushahidi community
-### Join the Ushahidi community
+## Join the Ushahidi community
Connect with the wider Ushahidi community:
* Chat with us on Gitter at [ushahidi/Community](https://gitter.im/ushahidi/community)
* Add an [issue in GitHub ](https://github.com/ushahidi/platform)
-
-
diff --git a/docs/hackathon-and-events/installathon-may-2019/README.md b/docs/hackathon-and-events/installathon-may-2019/README.md
index 4835e66e3a..28bfe92910 100644
--- a/docs/hackathon-and-events/installathon-may-2019/README.md
+++ b/docs/hackathon-and-events/installathon-may-2019/README.md
@@ -8,7 +8,7 @@ description: >-
![](../../.gitbook/assets/gitbook-graphic.png)
-Many of you got stuck during the installation and we suspect many leave after that, not looking back. Therefore we have worked hard on improving our docs and in May we will host our first Installathon, an online Hackathon over one week where the main focus is to help our users to install the Ushahidi Platform.
+Many of you got stuck during the installation and we suspect many leave after that, not looking back. Therefore we have worked hard on improving our docs and in May we will host our first Installathon, an online Hackathon over one week where the main focus is to help our users to install the Ushahidi Platform.
If you want to dig deeper and contribute there are also options to contribute to issues on the front-end or back-end and if you are interested, there are also options to learn how to install the Pattern Library and customise the appearance of the Platform.
@@ -22,9 +22,3 @@ If you want to dig deeper and contribute there are also options to contribute to
**How can I chat with Ushahidi staff about the installathon?** Visit [http://bit.ly/chatwithushahidi](http://bit.ly/chatwithushahidi) to chat with the Ushahidi development team on getting up and running with the Ushahidi OSS repo from 2-7 of May 2019.
-
-
-
-
-
-
diff --git a/docs/hackathon-and-events/installathon-may-2019/welcome-to-the-hackathon.md b/docs/hackathon-and-events/installathon-may-2019/welcome-to-the-hackathon.md
index 58472952e6..50ddc33454 100644
--- a/docs/hackathon-and-events/installathon-may-2019/welcome-to-the-hackathon.md
+++ b/docs/hackathon-and-events/installathon-may-2019/welcome-to-the-hackathon.md
@@ -4,13 +4,11 @@
The hackathon runs between the 2nd of May to the 7th of May and you are welcome to participate whenever you can during that time. The chatter and support will happen on our gitter-channel: [https://gitter.im/ushahidi/installfest-2019](https://gitter.im/ushahidi/installfest-2019). We have tried to schedule our time so there will be someone online at least between 7am CET to 11 pm CET, sometimes longer than that. If you will participate outside these hours, don't worry, we will answer your questions as soon as we get online!
-The main goal of the hackathon is to get started with working with the Ushahidi Platform and install it in the environment of your choice.
+The main goal of the hackathon is to get started with working with the Ushahidi Platform and install it in the environment of your choice.
You can find the different installation-instructions for different environments here: [https://app.gitbook.com/@ushahidi/s/platform-developer-documentation/getting-started/setup\_alternatives](https://app.gitbook.com/@ushahidi/s/platform-developer-documentation/getting-started/setup_alternatives)
-
-
-If you are more into css and html, you are also welcome to try out our Pattern Library. This is where we create all css for the Platform and where you can change appearance and colour-scheme etc. You can find the instructions for setting up and working with the Pattern Library here:
+If you are more into css and html, you are also welcome to try out our Pattern Library. This is where we create all css for the Platform and where you can change appearance and colour-scheme etc. You can find the instructions for setting up and working with the Pattern Library here:
[https://app.gitbook.com/@ushahidi/s/platform-developer-documentation/changing-ui-styles-introduction-to-the-pattern-library](https://app.gitbook.com/@ushahidi/s/platform-developer-documentation/changing-ui-styles-introduction-to-the-pattern-library)
@@ -20,11 +18,7 @@ Once you have installed the Platform successfully and played around with it \(yo
We have marked them with different labels to make it easier to understand which code needs to be touched:
-* API for issues connected to the backend \(platform repo\): [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3AAPI+label%3A%22Community+Task%22](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3AAPI+label%3A%22Community+Task%22)
-* CLIENT for the front-end code \(platform-client-repo\): [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient)
-* Both API and CLIENT where code in both repos probably needs to be touched: [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient+label%3AAPI](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient+label%3AAPI)
-
-
-
-
+* API for issues connected to the backend \(platform repo\): [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3AAPI+label%3A%22Community+Task%22](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3AAPI+label%3A%22Community+Task%22)
+* CLIENT for the front-end code \(platform-client-repo\): [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient)
+* Both API and CLIENT where code in both repos probably needs to be touched: [https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient+label%3AAPI](https://github.com/ushahidi/platform/issues?q=is%3Aopen+label%3A%22Community+Task%22+label%3AClient+label%3AAPI)
diff --git a/docs/hackathon-and-events/open-design-bangalore.md b/docs/hackathon-and-events/open-design-bangalore.md
index 429b3e8a0c..a763d4dcf8 100644
--- a/docs/hackathon-and-events/open-design-bangalore.md
+++ b/docs/hackathon-and-events/open-design-bangalore.md
@@ -8,7 +8,7 @@ See on the Open Design website here: [https://opendesign.ushahidi.com/bangalore-
The Open Design team has been accepted and invited to the excellent [DesignUP! conference in Bangalore 2019](https://designup.io/blr2019/) to deliver a [masterclass workshop on the 14th of November](https://designup.io/blr2019/masterclasses/#tab-eriol-fox-creating-impact-with-open-source-and-humanitarian-tech-257).
-[DesignUp](https://designup.io/blr2019/) is an annual design conference focused on design in, and for, tech. The aim is to encourage conversations and work that make Tech and Businesses more human and humane as well as more impactful to people and the ecosystem in general.
+[DesignUp](https://designup.io/blr2019/) is an annual design conference focused on design in, and for, tech. The aim is to encourage conversations and work that make Tech and Businesses more human and humane as well as more impactful to people and the ecosystem in general.
Open Design Team will be hosting a full-day masterclass workshop on **Creating impact with open source and humanitarian tech** at DesignUp.
diff --git a/docs/hackathon-and-events/write-speak-code-2019.md b/docs/hackathon-and-events/write-speak-code-2019.md
index a4064b6fcd..49ef0c2c1c 100644
--- a/docs/hackathon-and-events/write-speak-code-2019.md
+++ b/docs/hackathon-and-events/write-speak-code-2019.md
@@ -13,7 +13,7 @@ description: >-
Credits to [Jessica Weber](https://github.com/jessicaweberdev) for adding a new description in the Ushahidi settings page, making it much more clear what the user is going to achieve by making a deployment private. <3
-\*\*\*\*[**https://github.com/ushahidi/platform-client/pull/1320** ](https://github.com/ushahidi/platform/issues/2716) ****
+\*\*\*\*[**https://github.com/ushahidi/platform-client/pull/1320** ](https://github.com/ushahidi/platform/issues/2716) _\*\*_
![](../.gitbook/assets/63230917-e5879a00-c1c8-11e9-8f6e-e62c83dd1d85.png)
diff --git a/docs/qa-and-testing/defect-management.md b/docs/qa-and-testing/defect-management.md
index 583af6aa22..064849f1a2 100644
--- a/docs/qa-and-testing/defect-management.md
+++ b/docs/qa-and-testing/defect-management.md
@@ -1,9 +1,8 @@
# Defect Management
-When a defect is picked up during the smoke or regression testing phase, an issue is reported in GitHub following a bug reporting template found [here](https://github.com/ushahidi/platform/issues/new?template=Bug_report.md).
-
-The following information is captured in the report.
+When a defect is picked up during the smoke or regression testing phase, an issue is reported in GitHub following a bug reporting template found [here](https://github.com/ushahidi/platform/issues/new?template=Bug_report.md).
+The following information is captured in the report.
* Title - short description of what the issue is. Anyone reading the title should be able to tell what the issue is.
* Describe the bug - more details on what the issue is.
@@ -14,11 +13,9 @@ The following information is captured in the report.
* Operating System
* Additional Information. Could be logs, screenshots, urls.
-Before reporting an issue, take the time to look through the [current issues](https://github.com/ushahidi/platform/issues) and make sure it has not been reported. If it hasn’t been reported, proceed to creating a new issue.
-
+Before reporting an issue, take the time to look through the [current issues](https://github.com/ushahidi/platform/issues) and make sure it has not been reported. If it hasn’t been reported, proceed to creating a new issue.
-TestPad has a feature that allows you to comment on any failure. Here you can leave a brief of why a test failed, including screenshots. If an issue is created on GitHub from this failure, you can leave a link to the issue in the comment section for easier tracking.
-****
+TestPad has a feature that allows you to comment on any failure. Here you can leave a brief of why a test failed, including screenshots. If an issue is created on GitHub from this failure, you can leave a link to the issue in the comment section for easier tracking.
\*\*\*\*
diff --git a/docs/qa-and-testing/hotfixes.md b/docs/qa-and-testing/hotfixes.md
index dc898707fc..6f5deda13b 100644
--- a/docs/qa-and-testing/hotfixes.md
+++ b/docs/qa-and-testing/hotfixes.md
@@ -6,7 +6,5 @@ description: >-
# Hotfixes
-Usually a hotfix takes priority and it will be deployed to the test environment. Testing and verification of the hotfix is guided by a checklist that could reside either on the issue or the corresponding pull request. Once fix has been verified, smoke tests are then run guided by the [smoke testing suite for platform](https://ushahidi.ontestpad.com/script/30#//). Once these tests pass, then the hotfix is merged into production.
-
-
+Usually a hotfix takes priority and it will be deployed to the test environment. Testing and verification of the hotfix is guided by a checklist that could reside either on the issue or the corresponding pull request. Once fix has been verified, smoke tests are then run guided by the [smoke testing suite for platform](https://ushahidi.ontestpad.com/script/30#//). Once these tests pass, then the hotfix is merged into production.
diff --git a/docs/qa-and-testing/how-to-run-qa-tests.md b/docs/qa-and-testing/how-to-run-qa-tests.md
index 4d7b0f8f94..e75b278f04 100644
--- a/docs/qa-and-testing/how-to-run-qa-tests.md
+++ b/docs/qa-and-testing/how-to-run-qa-tests.md
@@ -16,13 +16,9 @@ TestPad houses a comprehensive test suite that cover most parts of the platform
[Regression tests](https://ushahidi.ontestpad.com/script/27#//) are more detailed and cover the application in its entirety.
-Tests in TestPad are structured in a checklist format. As you run the tests,you mark off every item as either passing or failing.
+Tests in TestPad are structured in a checklist format. As you run the tests,you mark off every item as either passing or failing.
![](https://lh6.googleusercontent.com/fnppiTQR_KbfZ231wPL9xR2qUhMbDcb2SZDE-kHm7HWaD_N7A5yzE9BU23HtvSX1hxXPROYP79eX6ZGPI_v0q8qg5JU9WE5Fjm6-Ani6AtRKFmWuZ24hr5aPS6off2agz5flE8GC)
-TestPad also allows for more details on a test including when the test was run, who run it, and relevant statistics i.e passing tests and failing tests as percentages.
-
-
-
-****
+TestPad also allows for more details on a test including when the test was run, who run it, and relevant statistics i.e passing tests and failing tests as percentages.
diff --git a/docs/qa-and-testing/how-to-write-qa-test-scripts.md b/docs/qa-and-testing/how-to-write-qa-test-scripts.md
index a6ba9b28de..78cd60bd5a 100644
--- a/docs/qa-and-testing/how-to-write-qa-test-scripts.md
+++ b/docs/qa-and-testing/how-to-write-qa-test-scripts.md
@@ -2,11 +2,9 @@
Test cases reside in two different locations for Platform.
-1 . **TestPad** - this is our test management tool and this is where the test cases officially reside. The tests here are majorly developed by the QA team. They are detailed and cover most parts of the application.
-
-
-2. **Github issues/tasks** - these tests are short and straight to the point. They are more a guide to what should be looked at when testing the feature. They are ideally created by the developer that works on the feature. The product owner can also create this. They are designed to take a short time and test a very specific feature or part of the application.
+1 . **TestPad** - this is our test management tool and this is where the test cases officially reside. The tests here are majorly developed by the QA team. They are detailed and cover most parts of the application.
+1. **Github issues/tasks** - these tests are short and straight to the point. They are more a guide to what should be looked at when testing the feature. They are ideally created by the developer that works on the feature. The product owner can also create this. They are designed to take a short time and test a very specific feature or part of the application.
**While writing up these tests, it’s important to keep in mind:**
@@ -14,20 +12,18 @@ Test cases reside in two different locations for Platform.
* Brevity - each test step should be a single action. This makes it easy to track failures
* Grouping/categories - test cases for specific actions should be categorized together. This makes it easy to follow along, and find specific tests for specific actions.
-Tip: When writing test cases, you want to consider two broad scenarios:
+Tip: When writing test cases, you want to consider two broad scenarios:
1. Functionalities of the application \(also known as Happy Path\) - these test cases cover basic\(expected\) steps and outcomes from usage of the application.
2. Edge cases - these test cases cover scenarios that are highly unlikely to occur during normal usage of the application. An instance would be resizing a browser window with the application open, navigating using a keyboard as opposed to mouse + cursor, network interruptions when uploading/downloading content etc.
-Additions, improvements and suggestions are welcome to our test suite. Should you come across any section that you feel need any sort of adjustment, feel free to reach out to the team. We are more than happy to listen to any thoughts or feedback. :\)
-
+Additions, improvements and suggestions are welcome to our test suite. Should you come across any section that you feel need any sort of adjustment, feel free to reach out to the team. We are more than happy to listen to any thoughts or feedback. :\)
**Sample QA Test scripts**
The test scripts are written in simple English, and they are usually steps or actions to be taken as the testing process.
-The test scripts are what constitute a test case, and the pointers listed under How to write QA test scripts section above apply.
-
+The test scripts are what constitute a test case, and the pointers listed under How to write QA test scripts section above apply.
![](https://lh3.googleusercontent.com/9dHFFUpl_InqLhnT6aMGXNf1mCRvX7gUwTPtJaVkraht5PB_x0eZS7IDZi8-rGGuWzZE0ddy1ZXn2wbZSvr0PIm9SgeFk6x3olDGJ_lpvwxW7S9VncE_i5O9DSBhlCGRbjlvgtnR)
diff --git a/docs/qa-and-testing/the-qa-process.md b/docs/qa-and-testing/the-qa-process.md
index 12098aa39f..03a1cca875 100644
--- a/docs/qa-and-testing/the-qa-process.md
+++ b/docs/qa-and-testing/the-qa-process.md
@@ -4,13 +4,5 @@ The QA process for Platform involves both the QA team and the developers. After
After tests have been run, if issues are found, they are documented on GitHub with as much relevant information as possible. Issues can be either a feature request/improvement, or a bug. An issue is a feature request/improvement if the application is working as expected, but could use this to make the application work better, or improve it in any other way. A bug on the other hand is something that gets in the way of normal functionality of the application. The developer that worked on the issue is tagged and the issue is given the relevant label, whether "bug" or “feature request/improvement”.
-If no issues are found, then that issue is tagged as done and is ready to be merged into production-aws and master.
-
-
-
-****
-
-
-****
-
+If no issues are found, then that issue is tagged as done and is ready to be merged into production-aws and master.
diff --git a/docs/roadmap/v2-v3+-migration-tool.md b/docs/roadmap/v2-v3+-migration-tool.md
index 92508e97be..61cf8ebbc3 100644
--- a/docs/roadmap/v2-v3+-migration-tool.md
+++ b/docs/roadmap/v2-v3+-migration-tool.md
@@ -12,7 +12,7 @@ The initial version of the migration tool will be a CLI. It will be a tool that
After launching the first version, which we are committed to doing already, we will gather level of interest, do more research, and then re-bet if there is an appetite for it and strong interest of deployments who actually try and use it.
-We will be offering 10 courtesy migrations to Crowdmap SaaS or self-hosted deployments to enable us to understand the limitations of the tool with a wide array of datasets and to be able to gather how much real interest there is in migrating to V3+.
+We will be offering 10 courtesy migrations to Crowdmap SaaS or self-hosted deployments to enable us to understand the limitations of the tool with a wide array of datasets and to be able to gather how much real interest there is in migrating to V3+.
### Tool requirements
@@ -43,9 +43,3 @@ We will be offering 10 courtesy migrations to Crowdmap SaaS or self-hosted deplo
* Claim system, Crowdmap ID
* Old V2 versions. A deployment should be in the latest V2 to be migrated.
-
-
-
-
-
-
diff --git a/docs/tech-stack/api-documentation.md b/docs/tech-stack/api-documentation.md
index 06efc59528..32b896dfc9 100644
--- a/docs/tech-stack/api-documentation.md
+++ b/docs/tech-stack/api-documentation.md
@@ -36,7 +36,7 @@ All allowed scopes for this type: "posts country\_codes media forms api tags sav
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -68,8 +68,8 @@ The client secret you added for your deployment in the database. Default value:
{% endapi-method-response-example-description %}
-```
-
+```text
+
```
{% endapi-method-response-example %}
{% endapi-method-response %}
@@ -100,7 +100,7 @@ The client secret you added for your deployment in the database. Default value:
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -208,7 +208,7 @@ example: youremail@example.com
{% endapi-method-response-example-description %}
-```
+```text
This response is sent when the password reset email is going to be sent (as long as the email exists)
```
{% endapi-method-response-example %}
@@ -261,7 +261,7 @@ The reset token sent by email
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -275,7 +275,7 @@ Register a new user
{% endapi-method-summary %}
{% api-method-description %}
-Register your Ushahidi platform users with this endpoint.
+Register your Ushahidi platform users with this endpoint.
{% endapi-method-description %}
{% api-method-spec %}
@@ -293,7 +293,7 @@ Register your Ushahidi platform users with this endpoint.
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -307,7 +307,7 @@ Get Collections
{% endapi-method-summary %}
{% api-method-description %}
-
+
{% endapi-method-description %}
{% api-method-spec %}
@@ -385,8 +385,6 @@ Bearer <your-auth-token>
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/posts?order=desc&orderby=created&set=15" %}
{% api-method-summary %}
Get Posts from a collection
@@ -541,8 +539,6 @@ Options: desc, asc
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="post" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/collections" %}
{% api-method-summary %}
Create a collection
@@ -741,7 +737,7 @@ Bearer <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
Success
```
{% endapi-method-response-example %}
@@ -751,7 +747,7 @@ Success
{% endapi-method-response-example-description %}
-```
+```text
The Collection id is incorrect
```
{% endapi-method-response-example %}
@@ -760,136 +756,10 @@ The Collection id is incorrect
{% endapi-method %}
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/config" %}
-{% api-method-summary %}
-Get site configuration
-{% endapi-method-summary %}
-
-{% api-method-description %}
-
-{% endapi-method-description %}
-
-{% api-method-spec %}
-{% api-method-request %}
-
-{% api-method-response %}
-{% api-method-response-example httpCode=200 %}
-{% api-method-response-example-description %}
-
-{% endapi-method-response-example-description %}
-
-```javascript
-{
- "count": 3,
- "results": [
- {
- "id": "features",
- "url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/config\/features",
- "views": {
- "data": true,
- "map": true,
- "list": true,
- "chart": true,
- "timeline": true,
- "activity": true,
- "plan": true
- },
- "data-providers": {
- "smssync": true,
- "twitter": true,
- "frontlinesms": true,
- "email": true,
- "outgoingemail": true,
- "twilio": true,
- "nexmo": true,
- "testservice": false
- },
- "limits": {
- "posts": true,
- "forms": true,
- "admin_users": true
- },
- "private": {
- "enabled": true
- },
- "roles": {
- "enabled": true
- },
- "webhooks": {
- "enabled": true
- },
- "data-import": {
- "enabled": true
- },
- "targeted-surveys": {
- "enabled": false
- },
- "csv-speedup": {
- "enabled": false
- },
- "hxl": {
- "enabled": false
- },
- "user-settings": {
- "enabled": false
- },
- "anonymise-reporters": {
- "enabled": true
- },
- "allowed_privileges": [
- "read",
- "search"
- ]
- },
- {
- "id": "site",
- "url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/config\/site",
- "name": "ushahididocs",
- "description": "",
- "email": "",
- "timezone": "UTC",
- "language": "en-US",
- "date_format": "n\/j\/Y",
- "client_url": false,
- "first_login": true,
- "tier": "demo_1",
- "private": false,
- "expiration_date": "2018-12-22 04:12:53",
- "allowed_privileges": [
- "read",
- "search"
- ]
- },
- {
- "id": "map",
- "url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/config\/map",
- "clustering": true,
- "cluster_radius": 50,
- "location_precision": 2,
- "default_view": {
- "lat": -1.3048035,
- "lon": 36.8473969,
- "zoom": 2,
- "baselayer": "MapQuest",
- "fit_map_boundaries": true,
- "icon": "map-marker",
- "color": "blue"
- },
- "allowed_privileges": [
- "read",
- "search"
- ]
- }
- ]
-}
-```
-{% endapi-method-response-example %}
-{% endapi-method-response %}
-{% endapi-method-spec %}
-{% endapi-method %}
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/contacts/:contactId" %}
{% api-method-summary %}
-Get contacts
+
{% endapi-method-summary %}
{% api-method-description %}
@@ -945,7 +815,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
Incorrect contact id
```
{% endapi-method-response-example %}
@@ -959,7 +829,7 @@ Get country codes
{% endapi-method-summary %}
{% api-method-description %}
-This is only used to get a list of country codes that we can use for the UI of targeted surveys, a SaaS platform feature for sending surveys in steps to groups of people that they can respond to from their phones.
+This is only used to get a list of country codes that we can use for the UI of targeted surveys, a SaaS platform feature for sending surveys in steps to groups of people that they can respond to from their phones.
{% endapi-method-description %}
{% api-method-spec %}
@@ -983,7 +853,7 @@ Bearer <your-auth-token>
Example response with 5 countries and their code
{% endapi-method-response-example-description %}
-```
+```text
{
"count": 246,
"results": [
@@ -1058,7 +928,7 @@ Example response with 5 countries and their code
{% endapi-method-spec %}
{% endapi-method %}
-### CSV Exports and Imports
+## CSV Exports and Imports
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/exports/jobs?user=me" %}
{% api-method-summary %}
@@ -1096,7 +966,7 @@ Value: me
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -1104,8 +974,6 @@ Value: me
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="put" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/csv/:id/import" %}
{% api-method-summary %}
\[WIP\]Create metadata to start a CSV Import
@@ -1136,7 +1004,7 @@ Value: me
{% endapi-method-response-example-description %}
-```
+```text
{
"id": 19,
"url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/csv\/19",
@@ -1182,7 +1050,7 @@ Value: me
{% endapi-method-spec %}
{% endapi-method %}
-### Dataproviders \(Datasources in the UI, read only config\)
+## Dataproviders \(Datasources in the UI, read only config\)
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/dataproviders/\[:id\]" %}
{% api-method-summary %}
@@ -1561,7 +1429,7 @@ Bearer: <your-auth-token>
{% endapi-method-spec %}
{% endapi-method %}
-### Forms \(Surveys\)
+## Forms \(Surveys\)
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms" %}
{% api-method-summary %}
@@ -1781,7 +1649,7 @@ Bearer: <your-auth-token>
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:id" %}
{% api-method-summary %}
-Get all options for one survey
+Get all options for one survey
{% endapi-method-summary %}
{% api-method-description %}
@@ -1870,7 +1738,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
If the survey does not exist, a 404 will be raised
```
{% endapi-method-response-example %}
@@ -1878,8 +1746,6 @@ If the survey does not exist, a 404 will be raised
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:id/attributes" %}
{% api-method-summary %}
Get all attributes \(fields\) for one survey
@@ -2060,7 +1926,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
If the survey does not exist, a 404 will be raised
```
{% endapi-method-response-example %}
@@ -2068,8 +1934,6 @@ If the survey does not exist, a 404 will be raised
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:id/stages" %}
{% api-method-summary %}
Get all stages \(groups of fields\) for one survey
@@ -2162,7 +2026,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
If the survey does not exist, a 404 will be raised
```
{% endapi-method-response-example %}
@@ -2170,8 +2034,6 @@ If the survey does not exist, a 404 will be raised
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:id/stats" %}
{% api-method-summary %}
Get stats \(usage data\) for one survey
@@ -2234,7 +2096,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
If the survey does not exist, a 404 will be raised
```
{% endapi-method-response-example %}
@@ -2242,8 +2104,6 @@ If the survey does not exist, a 404 will be raised
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:id/roles" %}
{% api-method-summary %}
Get all roles assigned to one survey
@@ -2309,7 +2169,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
If the survey does not exist, a 404 will be raised
```
{% endapi-method-response-example %}
@@ -2317,17 +2177,13 @@ If the survey does not exist, a 404 will be raised
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="post" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms" %}
{% api-method-summary %}
Create a survey
{% endapi-method-summary %}
{% api-method-description %}
-Create a survey in the backend.
-- when using \`tasks.$n.id\` substitute $n for the task number.
-- when setting the task id, use a naming scheme like "interim\_id\_$n for consistency.
+Create a survey in the backend.
{% endapi-method-description %}
{% api-method-spec %}
@@ -2358,7 +2214,7 @@ Is the task open to everyone? Default: true
{% endapi-method-parameter %}
{% api-method-parameter name="tasks.$n.attributes" type="array" required=false %}
-A list of attributes for the task. Takes the same options as form attributes for each.
+A list of attributes for the task. Takes the same options as form attributes for each.
{% endapi-method-parameter %}
{% api-method-parameter name="tasks.$n.task\_is\_internal\_only" type="boolean" required=false %}
@@ -2409,7 +2265,7 @@ The survey color \(shown in map and data view\)
{% endapi-method-response-example-description %}
-```
+```text
{
"id": 11,
"url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/forms\/11",
@@ -2443,17 +2299,13 @@ The survey color \(shown in map and data view\)
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="put" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:form\_id" %}
{% api-method-summary %}
Update a survey \(example adding a new field\)
{% endapi-method-summary %}
{% api-method-description %}
-Create a survey in the backend.
-- when using \`tasks.$n.id\` substitute $n for the task number.
-- when setting the task id, use a naming scheme like "interim\_id\_$n for consistency.
+Create a survey in the backend.
{% endapi-method-description %}
{% api-method-spec %}
@@ -2484,7 +2336,7 @@ Is the task open to everyone? Default: true
{% endapi-method-parameter %}
{% api-method-parameter name="tasks.$n.attributes" type="array" required=false %}
-A list of attributes for the task. Takes the same options as form attributes for each.
+A list of attributes for the task. Takes the same options as form attributes for each.
{% endapi-method-parameter %}
{% api-method-parameter name="tasks.$n.task\_is\_internal\_only" type="boolean" required=false %}
@@ -2535,7 +2387,7 @@ The survey color \(shown in map and data view\)
{% endapi-method-response-example-description %}
-```
+```text
{
"id": 11,
"url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/forms\/11",
@@ -2569,8 +2421,6 @@ The survey color \(shown in map and data view\)
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="delete" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/forms/:form\_id" %}
{% api-method-summary %}
Delete a survey
@@ -2601,7 +2451,7 @@ Bearer: <your-auth-token>
{% endapi-method-response-example-description %}
-```
+```text
{
"id": 11,
"url": "https:\/\/ushahididocs.api.ushahidi.io\/api\/v3\/forms\/11",
@@ -2635,8 +2485,6 @@ Bearer: <your-auth-token>
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="post" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/messages" %}
{% api-method-summary %}
Respond to datasource messages
@@ -2679,7 +2527,7 @@ The message you want to send
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -2687,8 +2535,6 @@ The message you want to send
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/messages" %}
{% api-method-summary %}
Get all messages for a post's contact
@@ -2735,7 +2581,7 @@ The contact id. You can get it from the post the message is linked to.
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -2743,8 +2589,6 @@ The contact id. You can get it from the post the message is linked to.
{% endapi-method-spec %}
{% endapi-method %}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/messages/:messageId/post" %}
{% api-method-summary %}
Get the post for a message
@@ -2791,7 +2635,7 @@ The contact id. You can get it from the post the message is linked to.
{% endapi-method-response-example-description %}
-```
+```text
```
{% endapi-method-response-example %}
@@ -2805,7 +2649,7 @@ Create a new post
{% endapi-method-summary %}
{% api-method-description %}
-Create a new post in the ushahidi platform. This method works with a user's password\_grant token or with a client\_credentials token generated with the client id and secret.
+Create a new post in the ushahidi platform. This method works with a user's password\_grant token or with a client\_credentials token generated with the client id and secret.
{% endapi-method-description %}
{% api-method-spec %}
@@ -2818,11 +2662,11 @@ Bearer: <your-auth-token>
{% api-method-body-parameters %}
{% api-method-parameter name="form" type="object" required=true %}
-Format: {id: <formId>} . Sending the id of the form we want to add posts to is required.
+Format: {id: <formId>} . Sending the id of the form we want to add posts to is required.
{% endapi-method-parameter %}
{% api-method-parameter name="values" type="object" required=true %}
-a key:value map of fields and their content. This is used for all fields other than content and title and follows the format fieldKey: value. You can get a field's get by requesting all attributes of a form. Can be an empty object literal if a form has no other fields.
+a key:value map of fields and their content. This is used for all fields other than content and title and follows the format fieldKey: value. You can get a field's get by requesting all attributes of a form. Can be an empty object literal if a form has no other fields.
{% endapi-method-parameter %}
{% api-method-parameter name="content" type="string" required=true %}
@@ -2830,8 +2674,7 @@ The post's description field
{% endapi-method-parameter %}
{% api-method-parameter name="title" type="string" required=true %}
-The post's title field
-
+The post's title field
{% endapi-method-parameter %}
{% endapi-method-body-parameters %}
{% endapi-method-request %}
@@ -2842,7 +2685,7 @@ The post's title field
{% endapi-method-response-example-description %}
-```
+```text
Success
```
{% endapi-method-response-example %}
@@ -2850,15 +2693,13 @@ Success
{% endapi-method-spec %}
{% endapi-method %}
-Example payload:
+Example payload:
{"title":"My title","content":"My content","values":{},"form":{"id":4}}
-
-
{% api-method method="get" host="https://ushahididocs.api.ushahidi.io" path="/api/v3/posts" %}
{% api-method-summary %}
-Get Posts
+Get Posts
{% endapi-method-summary %}
{% api-method-description %}
@@ -2999,5 +2840,3 @@ Options: desc, asc
{% endapi-method-spec %}
{% endapi-method %}
-
-
diff --git a/docs/tech-stack/architecture.md b/docs/tech-stack/architecture.md
index d0929e9dc2..de9473ab15 100644
--- a/docs/tech-stack/architecture.md
+++ b/docs/tech-stack/architecture.md
@@ -4,7 +4,7 @@
At a high level Ushahidi consumes messages from various channels \(SMS, Email, Twitter, our own web interface\), transforms these into posts. Ushahidi core stores and exposes this data in a REST API. The primary consumers of the REST API are our web client and mobile app.
-![Data Flow](../.gitbook/assets/data-flow-1.png) [source](https://www.planttext.com/?text=RP71Ri8m38RlVWehf-sGDq0LQ6CI1n2YJ3jKFGIQKaiXGOsd7YRU7RTgkmKj1ylvVyVvd2mZcvQ_hmw0YPt5pzYOXYh2TyC6Frpe08fZHyosBQ78jxd4zTMGAm5yg2ogwOZ27q1PBw-u3v6dN1tM-H5N-ur24x7VI3wRky1Kqzam1H_L80-Xc47UGcjBk0l6Dfn845Utcp1ysHDkl53LvYp-BwHkwTAmpWQ64JNL-Y4I1VeuASytmuYyqCxM__d5M50kvXPFS7ygidIAj9UkGkTrbhm9mDBwIdxe0G00)
+![Data Flow](../.gitbook/assets/data-flow-1%20%282%29.png) [source](https://www.planttext.com/?text=RP71Ri8m38RlVWehf-sGDq0LQ6CI1n2YJ3jKFGIQKaiXGOsd7YRU7RTgkmKj1ylvVyVvd2mZcvQ_hmw0YPt5pzYOXYh2TyC6Frpe08fZHyosBQ78jxd4zTMGAm5yg2ogwOZ27q1PBw-u3v6dN1tM-H5N-ur24x7VI3wRky1Kqzam1H_L80-Xc47UGcjBk0l6Dfn845Utcp1ysHDkl53LvYp-BwHkwTAmpWQ64JNL-Y4I1VeuASytmuYyqCxM__d5M50kvXPFS7ygidIAj9UkGkTrbhm9mDBwIdxe0G00)
## Application tiers
@@ -50,7 +50,7 @@ Within the API there are two layers: the delivery and the business logic \(core
Within the core application, we use generally follow the [Clean Architecture](http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html). The central part of the business logic is defined as use cases and entities. All dependencies flow inwards towards the entities, which have no dependencies.
-![Software architecture layers](../.gitbook/assets/arch-layers-1.png)
+![Software architecture layers](../.gitbook/assets/arch-layers-1%20%281%29.png)
In order to bring user input to the use cases, we pass simple data structures from the delivery layer into the use case. The request structure is a simple array and contains all of the inputs for that specific use case. Once the usecase is complete it returns another simple data structure \(response\) back to the delivery layer for conversion via a Formatter. Data flow within the platform can be visualized as:
diff --git a/docs/tech-stack/database-schema-diagram.md b/docs/tech-stack/database-schema-diagram.md
index 7afa2e92fa..c43907b4e8 100644
--- a/docs/tech-stack/database-schema-diagram.md
+++ b/docs/tech-stack/database-schema-diagram.md
@@ -1,4 +1,4 @@
# Database \| Database Schema Diagram
-{% file src="../.gitbook/assets/platform-database-schema.pdf" caption="Download Platform Database Schema" %}
+{% file src="../.gitbook/assets/platform-database-schema \(1\).pdf" caption="Download Platform Database Schema" %}
diff --git a/docs/tech-stack/table-details.md b/docs/tech-stack/table-details.md
index 0573ef393c..7e1e6f2897 100644
--- a/docs/tech-stack/table-details.md
+++ b/docs/tech-stack/table-details.md
@@ -4,34 +4,32 @@ description: Details for all tables in the Platform database
# Database \| Table details
-### apikeys
+## apikeys
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
| id | int\(11\) | NO | PRI | NULL | auto\_increment |
-| api\_key | text | NO | | NULL | |
+| api\_key | text | NO | | NULL | |
| client\_id | text | YES | | NULL | |
| client\_secret | text | YES | | NULL | |
| created | int\(11\) | NO | | 0 | |
| updated | int\(11\) | YES | | NULL | |
-
-
-### config
+## config
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| group\_name | varchar\(50\) | NO | MUL | NULL | |
| config\_key | varchar\(50\) | NO | | NULL | |
-| config\_value | text | YES | | NULL | |
-| updated | timestamp | NO | MUL | CURRENT\_TIMESTAMP | on update CURRENT\_TIMESTAMP |
+| config\_value | text | YES | | NULL | |
+| updated | timestamp | NO | MUL | CURRENT\_TIMESTAMP | on update CURRENT\_TIMESTAMP |
-### contacts
+## contacts
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| user\_id | int\(11\) | YES | MUL | NULL | |
| data\_source | varchar\(150\) | YES | MUL | NULL | |
| type | varchar\(20\) | YES | | NULL | |
@@ -40,24 +38,20 @@ description: Details for all tables in the Platform database
| updated | int\(11\) | YES | MUL | NULL | |
| can\_notify | tinyint\(1\) | NO | | 0 | |
-
-
-### country\_codes
+## country\_codes
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| country\_name | varchar\(255\) | NO | | 0 | |
| dial\_code | varchar\(255\) | NO | | 0 | |
| country\_code | varchar\(255\) | NO | MUL | 0 | |
-
-
-### csv
+## csv
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| columns | text | NO | | NULL | |
| maps\_to | text | YES | | NULL | |
| fixed | text | YES | | NULL | |
@@ -71,13 +65,11 @@ description: Details for all tables in the Platform database
| processed | varchar\(255\) | YES | | NULL | |
| collection\_id | int\(11\) | YES | | NULL | |
-
-
-### export\_batches
+## export\_batches
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| export\_job\_id | int\(11\) | NO | MUL | NULL | |
| status | varchar\(255\) | NO | | pending | |
| batch\_number | int\(11\) | NO | | 0 | |
@@ -87,13 +79,11 @@ description: Details for all tables in the Platform database
| created | int\(11\) | NO | | 0 | |
| updated | int\(11\) | YES | | 0 | |
-
-
-### export\_job
+## export\_job
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| user\_id | int\(11\) | NO | MUL | NULL | |
| entity\_type | varchar\(255\) | NO | | NULL | |
| fields | mediumtext | YES | | NULL | |
@@ -113,24 +103,22 @@ description: Details for all tables in the Platform database
| total\_rows | int\(11\) | YES | | NULL | |
| total\_batches | int\(11\) | YES | | NULL | |
-
-
-### form\_attribute\_hxl\_attribute\_tag
+## form\_attribute\_hxl\_attribute\_tag
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
-| form\_attribute\_id | int\(11\) | NO | MUL | 0 | |
-| hxl\_attribute\_id | int\(11\) | YES | MUL | NULL | |
-| hxl\_tag\_id | int\(11\) | NO | MUL | 0 | |
-| export\_job\_id | int\(11\) | NO | MUL | 0 | |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| form\_attribute\_id | int\(11\) | NO | MUL | 0 | |
+| hxl\_attribute\_id | int\(11\) | YES | MUL | NULL | |
+| hxl\_tag\_id | int\(11\) | NO | MUL | 0 | |
+| export\_job\_id | int\(11\) | NO | MUL | 0 | |
-### form\_attribute
+## form\_attribute
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
| | | | | | |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| key | varchar\(150\) | NO | UNI | NULL | |
| label | varchar\(150\) | NO | | NULL | |
| instructions | text | YES | | NULL | |
@@ -146,23 +134,19 @@ description: Details for all tables in the Platform database
| response\_private | tinyint\(1\) | NO | | 0 | |
| description | varchar\(255\) | YES | | NULL | |
-
-
-### form\_roles
+## form\_roles
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| form\_id | int\(11\) | NO | MUL | NULL | |
| role\_id | int\(11\) | NO | MUL | NULL | |
-
-
-### form\_stages
+## form\_stages
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| id | int\(11\) | NO | PRI | NULL | auto\_increment |
+| id | int\(11\) | NO | PRI | NULL | auto\_increment |
| form\_id | int\(11\) | NO | MUL | NULL | |
| label | varchar\(150\) | NO | | NULL | |
| priority | int\(11\) | NO | | 99 | |
@@ -173,19 +157,15 @@ description: Details for all tables in the Platform database
| show\_when\_published | tinyint\(1\) | NO | | 1 | |
| task\_is\_internal\_only | tinyint\(1\) | NO | | 1 | |
-
-
-### form\_stages\_posts
+## form\_stages\_posts
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
-| form\_stage\_id | int\(11\) | NO | PRI | NULL | |
+| form\_stage\_id | int\(11\) | NO | PRI | NULL | |
| post\_id | int\(11\) | NO | PRI | NULL | |
| completed | tinyint\(1\) | NO | | 0 | |
-
-
-### forms
+## forms
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -205,9 +185,7 @@ description: Details for all tables in the Platform database
| hide\_location | tinyint\(1\) | NO | | 0 | |
| targeted\_survey | tinyint\(1\) | NO | | 0 | |
-
-
-### hxl\_attribute\_type\_tag
+## hxl\_attribute\_type\_tag
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -215,9 +193,7 @@ description: Details for all tables in the Platform database
| form\_attribute\_type | varchar\(255\) | NO | | 0 | |
| hxl\_tag\_id | int\(11\) | NO | MUL | 0 | |
-
-
-### hxl\_attributes
+## hxl\_attributes
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -225,9 +201,7 @@ description: Details for all tables in the Platform database
| attribute | varchar\(255\) | NO | UNI | 0 | |
| description | varchar\(255\) | NO | | 0 | |
-
-
-### hxl\_license
+## hxl\_license
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -236,9 +210,7 @@ description: Details for all tables in the Platform database
| link | varchar\(255\) | NO | | 0 | |
| code | varchar\(255\) | NO | UNI | 0 | |
-
-
-### hxl\_meta\_data
+## hxl\_meta\_data
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -253,18 +225,14 @@ description: Details for all tables in the Platform database
| updated | int\(11\) | YES | | NULL | |
| organisation\_name | varchar\(255\) | YES | | NULL | |
-
-
-### hxl\_tag\_attributes
+## hxl\_tag\_attributes
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
| tag\_id | int\(11\) | NO | PRI | 0 | |
| attribute\_id | int\(11\) | NO | PRI | 0 | |
-
-
-### hxl\_tags
+## hxl\_tags
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -272,9 +240,7 @@ description: Details for all tables in the Platform database
| tag\_name | varchar\(255\) | NO | UNI | 0 | |
| description | varchar\(255\) | NO | | 0 | |
-
-
-### layers
+## layers
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -289,9 +255,7 @@ description: Details for all tables in the Platform database
| created | int\(11\) | NO | MUL | 0 | |
| updated | int\(11\) | NO | MUL | 0 | |
-
-
-### media
+## media
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -306,9 +270,7 @@ description: Details for all tables in the Platform database
| created | int\(11\) | NO | MUL | 0 | |
| updated | int\(11\) | YES | MUL | NULL | |
-
-
-### messages
+## messages
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
@@ -329,9 +291,7 @@ description: Details for all tables in the Platform database
| additional\_data | text | YES | | NULL | |
| notification\_post\_id | int\(11\) | YES | MUL | NULL | |
-
-
-### notification\_queue
+## notification\_queue
| Field | Type | Null | Key | Default | Extra |
| :--- | :--- | :--- | :--- | :--- | :--- |
diff --git a/docs/tech-stack/tables-overview.md b/docs/tech-stack/tables-overview.md
index 3252083bbb..a2cc2da2c8 100644
--- a/docs/tech-stack/tables-overview.md
+++ b/docs/tech-stack/tables-overview.md
@@ -108,11 +108,8 @@ description: This is a list of all tables used for the Ushahidi Platform.
in a post.
Settings -> Surveys -> Create/Edit survey
-
Add post
-
Edit post
-
View post
|
- |
@@ -127,10 +124,7 @@ description: This is a list of all tables used for the Ushahidi Platform.
View post
-
Edit/Structure post
-
-
- |
@@ -521,12 +515,10 @@ description: This is a list of all tables used for the Ushahidi Platform.
tos |
-
- Stores info of when and if each has signed the terms and conditions
-
- |
- - |
- - |
+ Stores info of when and if each has signed the terms and conditions |
+ - |
+ - |
user_reset_tokens |
diff --git a/docs/tech-stack/use-case-internals.md b/docs/tech-stack/use-case-internals.md
index a5413f79ed..44d994830c 100644
--- a/docs/tech-stack/use-case-internals.md
+++ b/docs/tech-stack/use-case-internals.md
@@ -66,31 +66,31 @@ Most of our use cases follow 5 high level patterns for Create, Read, Update, Del
[create](http://www.nomnoml.com/#view/%23title%3ACreate%20Usecase%0A%0A%5B%3Cstate%3Erequest%7C%0Apayload%0Aidentifier%0Afilters%5D%0A%0A%5BCreate%20Usecase%7C%0A%5B%3Cstart%3E%20interact%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BVerify%20Create%20Auth%5D%0A%5BVerify%20Create%20Auth%5D-%3E%5BVerify%20Valid%5D%0A%5BVerify%20Valid%5D-%3E%5BCreate%20Entity%5D%0A%5BCreate%20Entity%5D-%3E%5BGet%20Created%5D%0A%5BGet%20Created%5D-%3E%5B%3Cchoice%3E%20Can%20Read%3F%5D%0A%5B%3Cchoice%3E%20Can%20Read%3F%5D-%3E%5BFormat%20Entity%5D%0A%5B%3Cchoice%3E%20Can%20Read%3F%5D-%3E%5B%3Cend%3E%20return%5D%0A%5BFormat%20Entity%5D-%3E%5B%3Cend%3E%20return%5D%0A%5D%0A%0A%0A%5B%3Cstate%3Erequest%5D-%3E%5BCreate%20Usecase%5D%0A%5BCreate%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%23direction%3A%20right%0A)
-![Create Usecase - Collaborators](../.gitbook/assets/create-usecase-collab.png)
+![Create Usecase - Collaborators](../.gitbook/assets/create-usecase-collab%20%283%29.png)
-[collaborators](http://www.nomnoml.com/#view/%23title%3A%20Create%20UseCase%20Collaborators%0A%0A%5BCreateUsecase%7C%7C%0Ainteract%28%29%0AsetPayload%28%29%5D%0A%0A%5BValidator%5D%3C-%2B%5BCreateUsecase%5D%0A%5BAuthorizer%5D%3C-%2B%5BCreateUsecase%5D%0A%5BFormatter%5D%3C-%2B%5BCreateUsecase%5D%0A%5BRepository%5D%3C-%2B%5BCreateUsecase%5D%0A%0A%5BCreateUsecase%5D-%3E%5B%3Cinput%3E%20payload%5D%0A%0A%23direction%3A%20right)
+[collaborators](http://www.nomnoml.com/#view/%23title%3A%20Create%20UseCase%20Collaborators%0A%0A%5BCreateUsecase%7C%7C%0Ainteract%28%29%0AsetPayload%28%29%5D%0A%0A%5BValidator%5D%3C-%2B%5BCreateUsecase%5D%0A%5BAuthorizer%5D%3C-%2B%5BCreateUsecase%5D%0A%5BFormatter%5D%3C-%2B%5BCreateUsecase%5D%0A%5BRepository%5D%3C-%2B%5BCreateUsecase%5D%0A%0A%5BCreateUsecase%5D-%3E%5B%3Cinput%3E%20payload%5D%0A%0A%23direction%3A%20right)
#### Read
-![Read Usecase](../.gitbook/assets/read-usecase-2.png)
+![Read Usecase](../.gitbook/assets/read-usecase-2%20%281%29.png)
-[read](http://www.nomnoml.com/#view/%23title%3A%20%20Read%20UseCase%0A%5B%3Cstate%3Erequest%5D-%3E%5BRead%20Usecase%5D%0A%5BRead%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%5B%3Cstate%3Erequest%7C%0Apayload%0Aidentifier%0Afilters%5D%0A%0A%5BRead%20Usecase%7C%0A%5B%3Cstart%3E%20interact%28%29%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BVerify%20Read%20Auth%5D%0A%5BVerify%20Read%20Auth%5D-%3E%5BFormat%20Entity%5D%0A%5BFormat%20Entity%5D-%3E%5B%3Cend%3E%20return%5D%0A%5D%0A%0A%23direction%3A%20right)
+[read](http://www.nomnoml.com/#view/%23title%3A%20%20Read%20UseCase%0A%5B%3Cstate%3Erequest%5D-%3E%5BRead%20Usecase%5D%0A%5BRead%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%5B%3Cstate%3Erequest%7C%0Apayload%0Aidentifier%0Afilters%5D%0A%0A%5BRead%20Usecase%7C%0A%5B%3Cstart%3E%20interact%28%29%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BVerify%20Read%20Auth%5D%0A%5BVerify%20Read%20Auth%5D-%3E%5BFormat%20Entity%5D%0A%5BFormat%20Entity%5D-%3E%5B%3Cend%3E%20return%5D%0A%5D%0A%0A%23direction%3A%20right)
**Update**
-![Update Usecase](../.gitbook/assets/update-usecase-2.png)
+![Update Usecase](../.gitbook/assets/update-usecase-2%20%281%29.png)
[update](http://www.nomnoml.com/#view/%23title%3AUpdate%20UseCase%0A%0A%5B%3Cstate%3Erequest%5D-%3E%5BUpdate%20Usecase%5D%0A%5BUpdate%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%5B%3Cstate%3Erequest%7C%20payload%20identifier%20filters%5D%0A%5BUpdate%20Usecase%7C%20%0A%0A%5B%3Cstart%3E%20interact%28%29%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BUpdate%20State%5D%0A%5BUpdate%20State%5D-%3E%5BVerify%20Update%20Auth%5D%0A%5BVerify%20Update%20Auth%5D-%3E%5BVerify%20Valid%5D%0A%5BVerify%20Valid%5D-%3E%5BUpdate%20Entity%5D%0A%5BUpdate%20Entity%5D-%3E%5B%3Cchoice%3E%20Can%20Read%3F%5D%0A%5B%3Cchoice%3E%20Can%20Read%3F%5D-%3E%5BFormat%20Entity%5D%0A%5BFormat%20Entity%5D-%3E%5B%3Cend%3E%20return%5D%0A%5B%3Cchoice%3E%20Can%20Read%3F%5D-%3E%5B%3Cend%3E%20return%5D%20%0A%5D%0A%0A%23direction%3A%20right%0A%0A)
#### Delete
-![Delete Usecase](../.gitbook/assets/delete-usecase-1.png)
+![Delete Usecase](../.gitbook/assets/delete-usecase-1%20%281%29.png)
[delete](http://www.nomnoml.com/#view/%23title%3ADelete%20UseCase%0A%0A%5B%3Cstate%3Erequest%5D-%3E%5BDelete%20Usecase%5D%0A%5BDelete%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%5B%3Cstate%3Erequest%7C%0Apayload%0Aidentifier%0Afilters%5D%0A%0A%5BDelete%20Usecase%7C%0A%5B%3Cstart%3E%20interact%28%29%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BVerify%20Delete%20Auth%5D%0A%5BVerify%20Delete%20Auth%5D-%3E%5BDelete%20Entity%5D%0A%5BDelete%20Entity%5D-%3E%5BVerify%20Read%20Auth%5D%0A%5BVerify%20Read%20Auth%5D-%3E%5BFormat%20Entity%5D%0A%5BFormat%20Entity%5D-%3E%5B%3Cend%3E%20return%5D%0A%5D%0A%0A%23direction%3A%20right)
#### Search
-![Search Usecase](../.gitbook/assets/search-usecase%20%283%29.png)
+![Search Usecase](../.gitbook/assets/search-usecase-3.png)
[search](http://www.nomnoml.com/#view/%23title%3ASearch%20UseCase%0A%0A%5B%3Cstate%3Erequest%5D-%3E%5BSearch%20Usecase%5D%0A%5BSearch%20Usecase%5D-%3E%5B%3Cstate%3Eresponse%5D%0A%5B%3Cstate%3Eresponse%5D-%3E%5BOutputFormatter%5D%0A%0A%5B%3Cstate%3Erequest%7C%0Apayload%0Aidentifier%0Afilters%5D%0A%0A%5BSearch%20Usecase%7C%0A%5B%3Cstart%3E%20interact%28%29%5D-%3E%5BGet%20Entity%5D%0A%5BGet%20Entity%5D-%3E%5BVerify%20Search%20Auth%5D%0A%5BVerify%20Search%20Auth%5D-%3E%5BSet%20Search%20Params%5D%0A%5BSet%20Search%20Params%5D-%3E%5BGet%20Search%20Sesults%5D%0A%5BGet%20Search%20Sesults%5D-%3E%5BVerify%20Read%20Auth%7C%0A%5B%3Cstart%3E%20foreach%5D-%3E%5B%3Cchoice%3Ewhile%20results%3F%5D%0A%5B%3Cchoice%3Ewhile%20results%3F%5D-%3E%5Bcheck%20auth%5D%0A%5Bcheck%20auth%5D-%3E%5B%3Cchoice%3Ewhile%20results%3F%5D%0A%5B%3Cchoice%3Ewhile%20results%3F%5D-%3E%5B%3Cend%3E%5D%0A%5D%0A%5BVerify%20Read%20Auth%5D-%3E%5BFormat%20Results%5D%0A%5BFormat%20Results%5D-%3E%5B%3Cend%3E%20return%5D%0A%5D%0A%0A%23direction%3A%20right)
diff --git a/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/installing-the-bot-for-development-and-testing.md b/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/installing-the-bot-for-development-and-testing.md
index 6ca7e96b80..7a1ede207e 100644
--- a/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/installing-the-bot-for-development-and-testing.md
+++ b/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/installing-the-bot-for-development-and-testing.md
@@ -19,8 +19,7 @@ The Ushahidi facebook-bot is built with Lumen and a mysql database. To set it up
#### **The script**
-Bot uses a predefined script when talking to the users. It is not possible to adjust the questions themselves without doing some coding, but during setup, some information about the ushahidi-deployment and the campaign is needed. That information is added in the .env file and is used to create and adjust this script to the organisation using the bot. These are:
-
+Bot uses a predefined script when talking to the users. It is not possible to adjust the questions themselves without doing some coding, but during setup, some information about the ushahidi-deployment and the campaign is needed. That information is added in the .env file and is used to create and adjust this script to the organisation using the bot. These are:
**TITLE:** The title of the Ushahidi-deployment connected to the the bot is used
@@ -30,25 +29,21 @@ Bot uses a predefined script when talking to the users. It is not possible to ad
**TWITTER\_NAME:** The twitter-name for the organisation/campaign using the bot
-**TWITTER\_HASH:** The hashtag used for the organisation/campaign
-****
+**TWITTER\_HASH:** The hashtag used for the organisation/campaign
The full script of the bot can be found [here](the-bot-script.md).
#### **Credentials**
-For some of the credentials in the .env-file you need to create a “Facebook-app”. You do that here: [https://developers.facebook.com](https://developers.facebook.com/).
-
+For some of the credentials in the .env-file you need to create a “Facebook-app”. You do that here: [https://developers.facebook.com](https://developers.facebook.com/).
![](https://lh4.googleusercontent.com/lgGT8IVbhxxdST2OP_JtHLYasTJxcJJxUCboxyvHf2euVA_J2OgN-_hyHf9QVfrsDKaa_bd0iVn2Wio-Q1wFSynYx62TMYY0bWfeljpOoTu5_C73hg4VYU-NG1BKjMmVEgjFXp1B)
-After creating the app, select “Messenger” under “Add a product” in your app-settings:
-
+After creating the app, select “Messenger” under “Add a product” in your app-settings:
![](https://lh6.googleusercontent.com/VhmAqtEXt_s3YvqPq2Ikd3TYJqeEij8J6io73Kr-KI-bLDVcW0duOT7gYYBQlXIUZhkoR1pbGYNIOVDx42bsZYXYugrO3nzndzvaaVEMgEuypS-vhcZCj14ydk6pNegT3uQ4CDqZ)
-In order to get an access-token, you need to connect it to a facebook-page. If you don’t have one already, go to the “normal” facebook \(not the developer-one\) and create a page:
-
+In order to get an access-token, you need to connect it to a facebook-page. If you don’t have one already, go to the “normal” facebook \(not the developer-one\) and create a page:
![](https://lh5.googleusercontent.com/pxawAZDOjNX-pva0xcwMz_i5XWYs3gEtAOjZbII_gVKzgX7lSFPBC1hjXpkni4vpKbq26I3ly2T7rGBnVemsaqQn1Gp06ZPQHtW-v5L330bfhowNfyVEtc2GsJNVxNiegnNld9Gx)
@@ -56,31 +51,24 @@ After that, go back to developer-facebook and your app, in the messenger-setting
![](https://lh5.googleusercontent.com/j2rsGdFehBIq3lKsqvhU3_Nx_d4mMpaEl5DR7e_bdQw-Mrrd3ru2rupbiMhcJmurNs6S0VupgWnDvEkO0N-nR3atgrtW44cNdusBerwTwEl1KSVUzuS3EI-uE09mqsmzX86behv5)
-Add the access-token to your .env file together with a verify-token of your choice and the facebook secret token found here:
-
+Add the access-token to your .env file together with a verify-token of your choice and the facebook secret token found here:
![](https://lh6.googleusercontent.com/u8y4BsUeC3T9-gGZE_L5mIr2s19aMoX6mnJbgkqgedZDv3xFDIiKk2DIVk2EUhgkxz0GcPmtqdNR7u5ktI8cQ9anLkw5wmVQs5raNKbJfDdbJ7Oh6Wc9Vt_FMzxp2K-aaEBMf_0U)
When all those credentials are in your .env-file, together with the credentials for the Ushahidi-deployment you want to use to send reports with, you start the application with
-* vagrant up and then
-* artisan php migrate --seed \(this sets together the script for the bot, using the variables you added to the .env-file\)
-
-Now go back to developers.facebook.com and click on Messenger->settings to set up your webhooks.
+* vagrant up and then
+* artisan php migrate --seed \(this sets together the script for the bot, using the variables you added to the .env-file\)
+Now go back to developers.facebook.com and click on Messenger->settings to set up your webhooks.
![](https://lh5.googleusercontent.com/0hhF67lw2vekRMMVcHKbEyZ_8umORCu1OVPtaFNWcvucW8nv8zvJR3cGFtMDL-Hh8g2sw2evrXBJC4c0MqTle3ZUzvm7X3ZYjE1WZOrylyAReJB1R16wudwl3xS_uky62hizCMgc)
-Use _your-url/webhook_ as callback-url and verify-token is the same as you choose in the .env file. Select messages and messaging\_postbacks. Click on verify and save.
-
-
-Go to your page and send a message to the page to start talking to the bot. It is good to add a start-button and a persistent-menu, instructions for those could be found in the facebook-documentation:
-
+Use _your-url/webhook_ as callback-url and verify-token is the same as you choose in the .env file. Select messages and messaging\_postbacks. Click on verify and save.
-[https://developers.facebook.com/docs/messenger-platform/reference/messenger-profile-api/get-started-button](https://developers.facebook.com/docs/messenger-platform/reference/messenger-profile-api/get-started-button)
+Go to your page and send a message to the page to start talking to the bot. It is good to add a start-button and a persistent-menu, instructions for those could be found in the facebook-documentation:
+[https://developers.facebook.com/docs/messenger-platform/reference/messenger-profile-api/get-started-button](https://developers.facebook.com/docs/messenger-platform/reference/messenger-profile-api/get-started-button)
-[https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu](https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu)
-
-****
+[https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu](https://developers.facebook.com/docs/messenger-platform/send-messages/persistent-menu)
diff --git a/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/the-bot-script.md b/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/the-bot-script.md
index c8e9b2da2f..f4d54b635b 100644
--- a/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/the-bot-script.md
+++ b/docs/the-ushahidi-platform-facebook-bot/the-facebook-bot/the-bot-script.md
@@ -9,9 +9,9 @@ description: >-
If you feel adventurous you can go to the file [database/seeds/**AnswersTableSeeder.php**](https://github.com/ushahidi/platform-facebook-bot/blob/master/database/seeds/AnswersTableSeeder.php) **before** running the database seeds and migrations and change the wording of the questions. Please note, removing questions might cause the bot to break. You can change the wording of the questions, but not removing them.
-### The script
+## The script
-**When the user start talking to the bot:**
+**When the user start talking to the bot:**
* Hello! Welcome to {TITLE}
* {NAME} is creating an open‐source resilience platform help communities reconnect, respond to, and recover from crisis situations.
@@ -32,7 +32,7 @@ If you feel adventurous you can go to the file [database/seeds/**AnswersTableSee
\[Add a location\] ← this is a button the user can click on
-**User selects option “add an image”:**
+**User selects option “add an image”:**
* Ok great! Just add a photo here like a normal chat, and I'll attach it to your report
@@ -56,7 +56,7 @@ If you feel adventurous you can go to the file [database/seeds/**AnswersTableSee
* Ok, got it. Do you want to add an image to your report?
-**Or \( if image is previously added\) :**
+**Or \( if image is previously added\) :**
* Perfect! Do you want to send your report to us?
@@ -66,9 +66,7 @@ If you feel adventurous you can go to the file [database/seeds/**AnswersTableSee
* A moderator will check your report before it is published to {NAME}
* What do you want to do next?
- \[Send another report \] ← this is a button the user can click on \(report-flow starts again\)
-
-\[Go to {NAME}\]← this is a button the user can click on \(link to the deployment\)
-
+ \[Send another report \] ← this is a button the user can click on \(report-flow starts again\)
+\[Go to {NAME}\]← this is a button the user can click on \(link to the deployment\)
diff --git a/docs/translation/software-localization-and-translation.md b/docs/translation/software-localization-and-translation.md
index ce7eacb40f..3d46e4ae55 100644
--- a/docs/translation/software-localization-and-translation.md
+++ b/docs/translation/software-localization-and-translation.md
@@ -1,16 +1,15 @@
# Localization and Translation
-Ushahidi is translated into 34 localizations. Localization refers to a language in a specific location. Each language varies in "completeness" and there are 24 more localizations that still does not have any translations available. Ushahidi deployments with completed languages make it easier for the local regions to communicate with their users. With your help, we'd like to better serve them.
+Ushahidi is translated into 34 localizations. Localization refers to a language in a specific location. Each language varies in "completeness" and there are 24 more localizations that still does not have any translations available. Ushahidi deployments with completed languages make it easier for the local regions to communicate with their users. With your help, we'd like to better serve them.
-All the software translations for the Ushahidi platform and mobile applications are stored on [Github](https://github.com/ushahidi/Ushahidi-Localizations) and translation is done on [Transifex](https://www.transifex.com/). Transifex list for Ushahidi is [https://www.transifex.com/organization/ushahidi/dashboard](https://www.transifex.com/organization/ushahidi/dashboard), or for individual projects, see:
+All the software translations for the Ushahidi platform and mobile applications are stored on [Github](https://github.com/ushahidi/Ushahidi-Localizations) and translation is done on [Transifex](https://www.transifex.com/). Transifex list for Ushahidi is [https://www.transifex.com/organization/ushahidi/dashboard](https://www.transifex.com/organization/ushahidi/dashboard), or for individual projects, see:
| Project Name | Transifex Project |
| :--- | :--- |
| Ushahidi v3 | [https://www.transifex.com/organization/ushahidi/dashboard/ushahidi-v3](https://www.transifex.com/organization/ushahidi/dashboard/ushahidi-v3) |
| Ushahidi v3 mobile | [https://www.transifex.com/ushahidi/ushahidi-v3x-mobile/dashboard/](https://www.transifex.com/ushahidi/ushahidi-v3x-mobile/dashboard/) |
-#### Join the Translation teams
-
-You can join our translation team on Transifex. For more details see on how to contribute and how translation works see [Transifex documentation](https://docs.transifex.com) or their [Youtube-channel](https://www.youtube.com/channel/UCTAijZE5WHedPZ8ZmESh9kg). You can also [reach out to the Ushahidi team](../get-in-touch.md) to get more guidance on your way to start translating!
+## Join the Translation teams
+You can join our translation team on Transifex. For more details see on how to contribute and how translation works see [Transifex documentation](https://docs.transifex.com) or their [Youtube-channel](https://www.youtube.com/channel/UCTAijZE5WHedPZ8ZmESh9kg). You can also [reach out to the Ushahidi team](../get-in-touch.md) to get more guidance on your way to start translating!
diff --git a/docs/untitled/security-as-a-user.md b/docs/untitled/security-as-a-user.md
index 52961acb11..5f4fe1dc0a 100644
--- a/docs/untitled/security-as-a-user.md
+++ b/docs/untitled/security-as-a-user.md
@@ -35,7 +35,7 @@ When clicking links from e-mails or other sources, that direct you to log in or
1. Check the domain name \(the part before the first "/" character\). Your opponent may be tricking to share the personal information you keep in secure-bank.com by directing you to a fake website named similarly, i.e.: secure-banking.com .
2. Check the authenticity and security of the connection. Never send data through a web browser tab that is not showing anything other than a glorious fully green padlock next to the website address.
-If in doubt, contact back directly the apparent source of the information \(i.e. call your bank phone support, reach out to your boss, friend or relative\). Or, in more general disinformation propaganda scenarios, run your own research. If the information received still seems true after running 2 or 3 of your own checks, then you may most probably rely on it.
+If in doubt, contact back directly the apparent source of the information \(i.e. call your bank phone support, reach out to your boss, friend or relative\). Or, in more general disinformation propaganda scenarios, run your own research. If the information received still seems true after running 2 or 3 of your own checks, then you may most probably rely on it.
## A few other quick pointers
@@ -45,5 +45,3 @@ If in doubt, contact back directly the apparent source of the information \(i.e.
* Use as much encryption as is possible, prefer applications and services that offer strong encryption.
* Update your device and applications regularly. If you have a device you are not able to update \(i.e. an Android phone that is out of support by the vendor\), double up your guard and limit your actions and the sensitivity of the data that you store on that device.
-
-
diff --git a/docs/untitled/security-for-deployment-admins.md b/docs/untitled/security-for-deployment-admins.md
index 77d03a346b..f0f00ae086 100644
--- a/docs/untitled/security-for-deployment-admins.md
+++ b/docs/untitled/security-for-deployment-admins.md
@@ -36,7 +36,7 @@ Some very direct examples of PII items are telephone numbers and e-mail addresse
One other example is the combination of location data and date of the report. In an urban setting with surveillance, someone with access to the surveillance and both data items could identify who issued a report.
-In general, the more data items an attacker may collect that bear relationship with a person's traits, possessions or circumstances, the more likely the attacker is to successfully break anonymity.
+In general, the more data items an attacker may collect that bear relationship with a person's traits, possessions or circumstances, the more likely the attacker is to successfully break anonymity.
The Ushahidi Platform offers settings to protect some of these information items, without completely hiding them, by making them fuzzier. This is important for data that is valuable to show aggregated \(i.e. incidents in a geographic area\), and thus is not desired to make completely private.
@@ -46,13 +46,13 @@ Not all the data sources that can feed data into a Platform deployment have the
Even if your surveys and your server are well protected, your adversaries may be tapping on your data while it's being sent to you. Here are a few words about the different data sources:
-### GSM protocols: SMS or USSD
+### GSM protocols: SMS or USSD
-These protocols don't make much of an effort to apply encryption to the information sent over them. The barrier to be able to collect GSM data has always been laid down in terms of access: being able to access the GSM network management hubs, or having the sophisticated equipment to gather data "from the air" locally.
-
-Many governments will most definitely be able to leverage their power in order to obtain access. And, unfortunately, individuals may nowadays acquire relatively affordable equipment to capture this data "from the air".
-
-The consensus is that these are not data sources that can be relied on for keeping secrecy, and thus, shouldn't be used in high-stakes risky situations.
+These protocols don't make much of an effort to apply encryption to the information sent over them. The barrier to be able to collect GSM data has always been laid down in terms of access: being able to access the GSM network management hubs, or having the sophisticated equipment to gather data "from the air" locally.
+
+Many governments will most definitely be able to leverage their power in order to obtain access. And, unfortunately, individuals may nowadays acquire relatively affordable equipment to capture this data "from the air".
+
+The consensus is that these are not data sources that can be relied on for keeping secrecy, and thus, shouldn't be used in high-stakes risky situations.
### Web and mobile application
diff --git a/docs/untitled/security-for-deployment-hosts.md b/docs/untitled/security-for-deployment-hosts.md
index 02f4721935..80ed7757a3 100644
--- a/docs/untitled/security-for-deployment-hosts.md
+++ b/docs/untitled/security-for-deployment-hosts.md
@@ -16,5 +16,3 @@ The purpose of this guide is not so much providing complete cyber-security train
* PHP, Web server and MySQL services
* Ushahidi Platform
-
-
diff --git a/resources/lang/ar/config.php b/resources/lang/ar/config.php
new file mode 100644
index 0000000000..20a9c0d5e5
--- /dev/null
+++ b/resources/lang/ar/config.php
@@ -0,0 +1,5 @@
+ 'واحد أو أكثر من المزوّدين المفعّلين غير متوفر :param1',
+);
diff --git a/resources/lang/ar/csv.php b/resources/lang/ar/csv.php
new file mode 100644
index 0000000000..3ad9d0e57c
--- /dev/null
+++ b/resources/lang/ar/csv.php
@@ -0,0 +1,7 @@
+ 'يجب أن يكون حجم الملف أفل من :param3 كيلوبايت',
+ 'mime_type' => 'نوع الملف غير مدعوم. يرجى تحميل ملف بامتداد ".csv".',
+ 'not_empty' => 'ملف CSV الذي حملته فارغ. يرجى التحقق من الملف والمحاولة مجدداً.'
+);
diff --git a/resources/lang/ar/export.php b/resources/lang/ar/export.php
new file mode 100644
index 0000000000..3aaa25c29b
--- /dev/null
+++ b/resources/lang/ar/export.php
@@ -0,0 +1,7 @@
+ 'يجب أن يكون send_to_hdx مفعّلاً عندما يكون send_to_browser غير مفعّل',
+ 'sendToBrowserShouldBeTrue' => 'يجب أن يكون send_to_browser مفعّلاً عندما يكون send_to_hdx غير مفعّل',
+ 'includeHXLShouldBeTrue' => 'يجب أن يكون include_hxl مفعّلاً عندما يكون send_to_hdx مفعّلاً',
+);
diff --git a/resources/lang/ar/form.php b/resources/lang/ar/form.php
new file mode 100644
index 0000000000..85d9d82b1e
--- /dev/null
+++ b/resources/lang/ar/form.php
@@ -0,0 +1,6 @@
+ 'form_stage_id :value غير موجود',
+ 'postTypeLimitReached' => 'limit::posttypes',
+);
diff --git a/resources/lang/ar/form_attribute.php b/resources/lang/ar/form_attribute.php
new file mode 100644
index 0000000000..70e435e472
--- /dev/null
+++ b/resources/lang/ar/form_attribute.php
@@ -0,0 +1,7 @@
+ 'يجب ألا يكون حقل :field فارغاً',
+ 'isKeyAvailable' => 'القيمة المفتاحية ":value" غير متوفرة',
+ 'duplicateTypes' => 'لا يمكن أن يكون هنالك أكثر من حقل واحد يحوي نوع :value'
+);
diff --git a/resources/lang/ar/form_contact.php b/resources/lang/ar/form_contact.php
new file mode 100644
index 0000000000..e255ed06aa
--- /dev/null
+++ b/resources/lang/ar/form_contact.php
@@ -0,0 +1,5 @@
+ 'رقم الهاتف غير صالح',
+);
diff --git a/resources/lang/ar/form_role.php b/resources/lang/ar/form_role.php
new file mode 100644
index 0000000000..74aae0daa3
--- /dev/null
+++ b/resources/lang/ar/form_role.php
@@ -0,0 +1,7 @@
+ array(
+ 'roleDoesNotExist' => 'role_id :value غير موجود',
+ )
+);
diff --git a/resources/lang/ar/hxl_metadata.php b/resources/lang/ar/hxl_metadata.php
new file mode 100644
index 0000000000..c4acc56cea
--- /dev/null
+++ b/resources/lang/ar/hxl_metadata.php
@@ -0,0 +1,7 @@
+ 'لا يمكن إنشاء كيان بيانات وصفية لمهمة لديها كيان بالفعل',
+ 'privateShouldNotBeEmpty' => 'يجب أن تكون قيمة الخاص هي بوليانية. وصلنا: NULL'
+
+);
diff --git a/resources/lang/ar/layers.php b/resources/lang/ar/layers.php
new file mode 100644
index 0000000000..9e235719ec
--- /dev/null
+++ b/resources/lang/ar/layers.php
@@ -0,0 +1,6 @@
+ 'يتوجب إضافة أحد data_url أو media_id',
+ 'dataUrlMediaConflict' => 'يمكن تحديد واحد فقط من data_url أو media_id ',
+);
diff --git a/resources/lang/ar/media.php b/resources/lang/ar/media.php
new file mode 100644
index 0000000000..94a55afe43
--- /dev/null
+++ b/resources/lang/ar/media.php
@@ -0,0 +1,7 @@
+ 'يجب أن يكون حجم الملف أقل من :param1 ميغابايت',
+ 'mime_type_not_allowed' => 'نوع الملف غير مدعوم. يرجى تحميل ملف صورة.',
+ 'mime_not_empty' => 'نوع MIME غير مدعوم. يجب اختيار نوع MIME لهذا الملف.'
+);
diff --git a/resources/lang/ar/message.php b/resources/lang/ar/message.php
new file mode 100644
index 0000000000..71b3f4e843
--- /dev/null
+++ b/resources/lang/ar/message.php
@@ -0,0 +1,8 @@
+ array(
+ 'invalid_phone' => 'رقم هاتف غير صالح :param1',
+ 'invalid_email' => 'بريد إلكتروني غير صالح :param1'
+ )
+);
diff --git a/resources/lang/ar/notifications.php b/resources/lang/ar/notifications.php
new file mode 100644
index 0000000000..20249e9d2a
--- /dev/null
+++ b/resources/lang/ar/notifications.php
@@ -0,0 +1,12 @@
+ array(
+ 'title' => '[:sitename] منشور جديد: :title',
+ 'message' => "منشور جديد على :sitename\n\n:title\n\n:content\n\nعرض المنشور: :url"
+ ),
+ 'sms' => array(
+ 'title' => '',
+ 'message' => 'منشور جديد على :sitename\n\n:title\n\n:content\n\nعرض المنشور: :url',
+ )
+);
diff --git a/resources/lang/ar/post.php b/resources/lang/ar/post.php
new file mode 100644
index 0000000000..b2f2dd8ce3
--- /dev/null
+++ b/resources/lang/ar/post.php
@@ -0,0 +1,43 @@
+ 'limit::posts',
+ 'tagDoesNotExist' => 'category :value does not exist',
+ 'attributeDoesNotExist' => 'attribute ":param1" does not exist',
+ 'tooManyValues' => 'Too many values for :param1 (max: :param2)',
+ 'valueDoesNotExist' => 'value id :param2 for field :param1 does not exist',
+ 'canNotUseExistingValueOnNewPost' => 'Cannot use existing value :param2 for field :param1 on a new post',
+ 'postAttributeRequired' => 'attribute :param1 is required',
+ 'taskAttributeRequired' => 'attribute :param1 is required before stage ":param2" can be completed',
+ 'emptyIdAndLocale' => 'Must have at least id or locale',
+ 'emptyParentWithLocale' => 'Must have at parent id when passing locale',
+ 'notAnArray' => 'Post values for :param1 must be an array',
+ 'scalar' => 'Post values for :param1 must be scalar',
+ 'doesTranslationExist' => 'Translation :value for post :param2 already exists',
+ 'isSlugAvailable' => ':field :value is already in use',
+ 'published_to' => array(
+ 'exists' => 'الدور الذي تطبقه على ":value" غير موجود'
+ ),
+ 'stageDoesNotExist' => 'Stage ":param1" does not exist',
+ 'stageRequired' => 'Stage ":param1" is required before publishing',
+ 'postNeedsApprovalBeforePublishing' => "Post needs approval by an administrator before it can be published",
+ 'postCanOnlyBeUnpublishedByAdmin' => "Post can only be unpublished by an administrator",
+ 'alreadyLockedByDifferentUser' => "Post is currently locked by a different user and can not be updated.",
+ 'values' => array(
+ 'date' => 'يجب أن يكون الحقل :param1 تاريخاً، Given: :param2',
+ 'decimal' => 'يجب أن يكون الحقل :param1 عدداً عُشرياً بخانتين، Given: :param2',
+ 'digit' => 'يجب أن يكون الحقل :param1 رقماً، Given: :param2',
+ 'email' => 'يجب أن يكون الحقل :param1 عنوان بريد إلكتروني، Given: :param2',
+ 'exists' => 'الدور الذي تطبقه على ":value" غير موجود',
+ 'tagExists' => 'يجب أن يكون الحقل :param1 معرّف أو اسم فئة صالح، Category: :param2',
+ 'max_length' => 'يجب ألا تتجاوز حروف الحقل :param1 عدد :param2، Given: :param2',
+ 'invalidForm' => 'يحوي الحقل :param1 على نوع المنشور الخاطئ، Post id: :param2',
+ 'numeric' => 'يجب أن يكون الحقل :param1 عددياً، Given: :param2',
+ 'scalar' => 'يجب أن يكون الحقل :param1 عدداً سُلمياً، Given: :param2',
+ 'point' => 'يجب أن يكون الحقل :param1 مصفوفة خطوط طول وخطوط عرض',
+ 'lat' => 'يجب أن يحوي الحقل :param1 قيمة خط عرض صالحة',
+ 'lon' => 'يجب أن يحوي الحقل :param1 قيمة خط طول صالحة',
+ 'url' => 'يجب أن يكون الحقل :param1 رابطاً، Given: :param2',
+ 'video_type' => 'يجب أن يكون الحقل :param1 رابطاً من يوتيوب أو فيميو، Given: :param2',
+ )
+);
diff --git a/resources/lang/ar/role.php b/resources/lang/ar/role.php
new file mode 100644
index 0000000000..aface5c0a0
--- /dev/null
+++ b/resources/lang/ar/role.php
@@ -0,0 +1,5 @@
+ 'ميزة الأدوار غير مفعلة في نسختك.'
+);
diff --git a/resources/lang/ar/tag.php b/resources/lang/ar/tag.php
new file mode 100644
index 0000000000..80a8788a33
--- /dev/null
+++ b/resources/lang/ar/tag.php
@@ -0,0 +1,11 @@
+ ':field :value is already in use',
+ 'role' => array(
+ 'isRoleValid' => 'يجب أن يطابق الدور الفئة الأساسية',
+ 'exists' => 'الدور :value غير موجود'
+ ),
+ 'description.regex' => 'The description must contain only letters, numbers, spaces and punctuation',
+ 'regex' => 'The category name must contain only letters, numbers, spaces and punctuation'
+);
diff --git a/resources/lang/ar/user.php b/resources/lang/ar/user.php
new file mode 100644
index 0000000000..c85708449d
--- /dev/null
+++ b/resources/lang/ar/user.php
@@ -0,0 +1,9 @@
+ 'الحقل :field مُستخدم بالفعل ',
+ 'isUniqueUsername' => 'الحقل :field مُستخدم بالفعل ',
+ 'isUserSelf' => 'لا يمكنك تغيير دورك بنفسك',
+ 'adminUserLimitReached' => 'limit::admin',
+ 'invalidResetToken' => 'مفتاح إعادة ضبط غير صالح أو منتهي الصلاحية'
+);
diff --git a/resources/lang/ar/user_setting.php b/resources/lang/ar/user_setting.php
new file mode 100644
index 0000000000..a07f94e276
--- /dev/null
+++ b/resources/lang/ar/user_setting.php
@@ -0,0 +1,5 @@
+ 'معرّف المستخدم :param1 ومفتاح الضبط :param2 موجودان بالفعل. '
+);
diff --git a/resources/lang/ar/validation.php b/resources/lang/ar/validation.php
new file mode 100644
index 0000000000..3f62d1f530
--- /dev/null
+++ b/resources/lang/ar/validation.php
@@ -0,0 +1,27 @@
+ 'يجب أن يحوي :field أحرفاً فقط',
+ 'alpha_dash' => 'يجب أن يحوي :field أرقاماً وأحرفاً وشَرْطَات فقط',
+ 'alpha_numeric' => 'يجب أن يحوي :field أحرفاً وأرقاماً فقط',
+ 'color' => 'يجب أن يكون :field لوناً',
+ 'credit_card' => 'يجب أن يكون :field رقم بطاقة ائتمان',
+ 'date' => 'يجب أن يكون :field تاريخاً',
+ 'decimal' => 'يجب أن يكون :field عدداً عٌشرياً يوجد فيه :param2 خانات',
+ 'digit' => 'يجب أن يكون :field رقم واحدات.',
+ 'email' => 'يجب أن يكون :field عنوان بريد إلكتروني',
+ 'email_domain' => 'يجب أن يحتوي :field على اسم نطاق بريد إلكتروني صالح',
+ 'equals' => 'يجب أن يساوي الحقل :field قيمة :param2',
+ 'exact_length' => 'يجب أن يكون عدد الأحرف في الحقل :field هو :param2',
+ 'in_array' => 'يجب أن يكون :field أحد الخيارات المتاحة',
+ 'ip' => 'يجب أن يكون :field عنوان بروتوكول إنترنت',
+ 'matches' => 'يجب أن يكون :field نفس :param3',
+ 'min_length' => 'يجب أن يكون عدد الأحرف في الحقل :field هو :param2 على الأقل',
+ 'max_length' => 'يجب ألا تتجاوز الأحرف في :field عدد :param2',
+ 'not_empty' => 'يجب ألا يكون :field فارغاً',
+ 'numeric' => 'يجب أن يكون :field عدداً',
+ 'phone' => 'يجب أن يكون :field رقم هاتف',
+ 'range' => 'يجب أن يكون :field ضمن نطاق :param2 حتى :param3',
+ 'regex' => 'لا يتطابق :field مع الصيغة المطلوبة',
+ 'url' => 'يجب أن يكون :field رابطاً',
+);
diff --git a/resources/lang/cs/config.php b/resources/lang/cs/config.php
new file mode 100644
index 0000000000..137a879937
--- /dev/null
+++ b/resources/lang/cs/config.php
@@ -0,0 +1,5 @@
+ 'Jeden nebo více povolených poskytovatelů není k dispozici: param1',
+);
diff --git a/resources/lang/cs/csv.php b/resources/lang/cs/csv.php
new file mode 100644
index 0000000000..d44f4a6bd4
--- /dev/null
+++ b/resources/lang/cs/csv.php
@@ -0,0 +1,7 @@
+ 'Velikost souboru by měla být menší než :param3 KB',
+ 'mime_type' => 'Typ souboru není podporován. Nahrajte prosím soubor CSV.',
+ 'not_empty' => 'Nahraný soubor CSV je prázdný. Zkontrolujte prosím svůj soubor CSV a zkuste to znovu.'
+);
diff --git a/resources/lang/cs/export.php b/resources/lang/cs/export.php
new file mode 100644
index 0000000000..60d882490c
--- /dev/null
+++ b/resources/lang/cs/export.php
@@ -0,0 +1,7 @@
+ 'send_to_hdx by měl být nastaven na true, pokud je send_to_browser nataven na false',
+ 'sendToBrowserShouldBeTrue' => 'send_to_browser by měl být nastaven na true, když je send_to_hdx nastaven na false',
+ 'includeHXLShouldBeTrue' => 'include_hxl by měl být nastaven na true, pokud je send_to_hdx nastaven na true',
+);
diff --git a/resources/lang/cs/form.php b/resources/lang/cs/form.php
new file mode 100644
index 0000000000..1e31c75720
--- /dev/null
+++ b/resources/lang/cs/form.php
@@ -0,0 +1,6 @@
+ 'form_stage_id :value neexistuje',
+ 'postTypeLimitReached' => 'limit::posttypes',
+);
diff --git a/resources/lang/cs/form_attribute.php b/resources/lang/cs/form_attribute.php
new file mode 100644
index 0000000000..a651f24ea8
--- /dev/null
+++ b/resources/lang/cs/form_attribute.php
@@ -0,0 +1,7 @@
+ ':field nesmí být prázdné',
+ 'isKeyAvailable' => 'Klíč ":value" není k dispozici',
+ 'duplicateTypes' => 'S hodnotou typu :value nesmí být více než jedno pole'
+);
diff --git a/resources/lang/cs/form_contact.php b/resources/lang/cs/form_contact.php
new file mode 100644
index 0000000000..efa2b1adaf
--- /dev/null
+++ b/resources/lang/cs/form_contact.php
@@ -0,0 +1,5 @@
+ 'Neplatné telefonní číslo',
+);
diff --git a/resources/lang/cs/form_role.php b/resources/lang/cs/form_role.php
new file mode 100644
index 0000000000..ddfefb2f7d
--- /dev/null
+++ b/resources/lang/cs/form_role.php
@@ -0,0 +1,7 @@
+ array(
+ 'roleDoesNotExist' => 'role_id :value hodnota neexistuje',
+ )
+);
diff --git a/resources/lang/cs/message.php b/resources/lang/cs/message.php
new file mode 100644
index 0000000000..7053c1f5bc
--- /dev/null
+++ b/resources/lang/cs/message.php
@@ -0,0 +1,8 @@
+ array(
+ 'invalid_phone' => 'Neplatné telefonní číslo :param1',
+ 'invalid_email' => 'Neplatný e-mail :param1'
+ )
+);
diff --git a/resources/lang/cs/notifications.php b/resources/lang/cs/notifications.php
new file mode 100644
index 0000000000..f62a7cab9e
--- /dev/null
+++ b/resources/lang/cs/notifications.php
@@ -0,0 +1,12 @@
+ array(
+ 'title' => '[:sitename] Nový příspěvek: :title',
+ 'message' => "New post on :sitename\n\n:title\n\n:content\n\nView post: :url"
+ ),
+ 'sms' => array(
+ 'title' => '',
+ 'message' => 'New post on :sitename\n\n:title\n\n:content\n\nView post: :url',
+ )
+);
diff --git a/resources/lang/en/contacts.php b/resources/lang/en/contacts.php
new file mode 100644
index 0000000000..f6c6c2e412
--- /dev/null
+++ b/resources/lang/en/contacts.php
@@ -0,0 +1,6 @@
+ 'Could not create contacts. Result: %s',
+);
\ No newline at end of file
diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php
index 86ff6b39dd..d3d8faeaaa 100644
--- a/resources/lang/en/validation.php
+++ b/resources/lang/en/validation.php
@@ -1,4 +1,5 @@
':field must contain only letters',
@@ -24,4 +25,5 @@
'range' => ':field must be within the range of :param2 to :param3',
'regex' => ':field does not match the required format',
'url' => ':field must be a url',
+ 'failedToValidate' => 'Failed to validate %s entity',
);
diff --git a/resources/lang/en_GB/config.php b/resources/lang/en_GB/config.php
new file mode 100644
index 0000000000..8e36966f09
--- /dev/null
+++ b/resources/lang/en_GB/config.php
@@ -0,0 +1,5 @@
+ 'One or more of the enabled providers is not available :param1',
+);
diff --git a/resources/lang/en_GB/csv.php b/resources/lang/en_GB/csv.php
new file mode 100644
index 0000000000..5075cbd935
--- /dev/null
+++ b/resources/lang/en_GB/csv.php
@@ -0,0 +1,7 @@
+ 'The file size should be less than :param3 KB',
+ 'mime_type' => 'File type not supported. Please upload a .csv file.',
+ 'not_empty' => 'The CSV file you uploaded is empty. Please check your CSV file and try again.'
+);
diff --git a/resources/lang/en_GB/export.php b/resources/lang/en_GB/export.php
new file mode 100644
index 0000000000..c071c011ad
--- /dev/null
+++ b/resources/lang/en_GB/export.php
@@ -0,0 +1,7 @@
+ 'send_to_hdx should be true when send_to_browser is false',
+ 'sendToBrowserShouldBeTrue' => 'send_to_browser should be true when send_to_hdx is false',
+ 'includeHXLShouldBeTrue' => 'include_hxl should be true when send_to_hdx is true',
+);
diff --git a/resources/lang/en_GB/form.php b/resources/lang/en_GB/form.php
new file mode 100644
index 0000000000..dbeaeb9232
--- /dev/null
+++ b/resources/lang/en_GB/form.php
@@ -0,0 +1,6 @@
+ 'form_stage_id :value does not exist',
+ 'postTypeLimitReached' => 'limit::posttypes',
+);
diff --git a/resources/lang/en_GB/form_attribute.php b/resources/lang/en_GB/form_attribute.php
new file mode 100644
index 0000000000..144bd6f852
--- /dev/null
+++ b/resources/lang/en_GB/form_attribute.php
@@ -0,0 +1,7 @@
+ ':field must not be empty',
+ 'isKeyAvailable' => 'The key ":value" is not available',
+ 'duplicateTypes' => ' There cannot be more than one field with the type :value'
+);
diff --git a/resources/lang/en_GB/form_contact.php b/resources/lang/en_GB/form_contact.php
new file mode 100644
index 0000000000..f8a19154aa
--- /dev/null
+++ b/resources/lang/en_GB/form_contact.php
@@ -0,0 +1,5 @@
+ 'Invalid phone number',
+);
diff --git a/resources/lang/en_GB/form_role.php b/resources/lang/en_GB/form_role.php
new file mode 100644
index 0000000000..fe10751af0
--- /dev/null
+++ b/resources/lang/en_GB/form_role.php
@@ -0,0 +1,7 @@
+ array(
+ 'roleDoesNotExist' => 'role_id :value does not exist',
+ )
+);
diff --git a/resources/lang/en_GB/hxl_metadata.php b/resources/lang/en_GB/hxl_metadata.php
new file mode 100644
index 0000000000..388de95a93
--- /dev/null
+++ b/resources/lang/en_GB/hxl_metadata.php
@@ -0,0 +1,7 @@
+ 'Cannot create a metadata entity for a job that already has one',
+ 'privateShouldNotBeEmpty' => 'Private should be a boolean. Received: NULL'
+
+);
diff --git a/resources/lang/en_GB/layers.php b/resources/lang/en_GB/layers.php
new file mode 100644
index 0000000000..4ce8ef4161
--- /dev/null
+++ b/resources/lang/en_GB/layers.php
@@ -0,0 +1,6 @@
+ 'One of data_url or media_id is required',
+ 'dataUrlMediaConflict' => 'Only one of data_url or media_id can be defined',
+);
diff --git a/resources/lang/en_GB/media.php b/resources/lang/en_GB/media.php
new file mode 100644
index 0000000000..d22504023e
--- /dev/null
+++ b/resources/lang/en_GB/media.php
@@ -0,0 +1,7 @@
+ 'The file size should be less than :param1 MB',
+ 'mime_type_not_allowed' => 'File type not supported. Please upload an image file.',
+ 'mime_not_empty' => 'MIME type not found. The MIME type must be set for the file.'
+);
diff --git a/resources/lang/en_GB/message.php b/resources/lang/en_GB/message.php
new file mode 100644
index 0000000000..3a63b17bd5
--- /dev/null
+++ b/resources/lang/en_GB/message.php
@@ -0,0 +1,8 @@
+ array(
+ 'invalid_phone' => 'Invalid phone number :param1',
+ 'invalid_email' => 'Invalid email :param1'
+ )
+);
diff --git a/resources/lang/en_GB/notifications.php b/resources/lang/en_GB/notifications.php
new file mode 100644
index 0000000000..834d9e5aa0
--- /dev/null
+++ b/resources/lang/en_GB/notifications.php
@@ -0,0 +1,12 @@
+ array(
+ 'title' => '[:sitename] New post: :title',
+ 'message' => "New post on :sitename\n\n:title\n\n:content\n\nView post: :url"
+ ),
+ 'sms' => array(
+ 'title' => '',
+ 'message' => 'New post on :sitename\n\n:title\n\n:content\n\nView post: :url',
+ )
+);
diff --git a/resources/lang/en_GB/post.php b/resources/lang/en_GB/post.php
new file mode 100644
index 0000000000..d52533a229
--- /dev/null
+++ b/resources/lang/en_GB/post.php
@@ -0,0 +1,43 @@
+ 'limit::posts',
+ 'tagDoesNotExist' => 'category :value does not exist',
+ 'attributeDoesNotExist' => 'attribute ":param1" does not exist',
+ 'tooManyValues' => 'Too many values for :param1 (max: :param2)',
+ 'valueDoesNotExist' => 'value id :param2 for field :param1 does not exist',
+ 'canNotUseExistingValueOnNewPost' => 'Cannot use existing value :param2 for field :param1 on a new post',
+ 'postAttributeRequired' => 'attribute :param1 is required',
+ 'taskAttributeRequired' => 'attribute :param1 is required before stage ":param2" can be completed',
+ 'emptyIdAndLocale' => 'Must have at least id or locale',
+ 'emptyParentWithLocale' => 'Must have at parent id when passing locale',
+ 'notAnArray' => 'Post values for :param1 must be an array',
+ 'scalar' => 'Post values for :param1 must be scalar',
+ 'doesTranslationExist' => 'Translation :value for post :param2 already exists',
+ 'isSlugAvailable' => ':field :value is already in use',
+ 'published_to' => array(
+ 'exists' => 'The role you are publishing to ":value" does not exist'
+ ),
+ 'stageDoesNotExist' => 'Stage ":param1" does not exist',
+ 'stageRequired' => 'Stage ":param1" is required before publishing',
+ 'postNeedsApprovalBeforePublishing' => "Post needs approval by an administrator before it can be published",
+ 'postCanOnlyBeUnpublishedByAdmin' => "Post can only be unpublished by an administrator",
+ 'alreadyLockedByDifferentUser' => "Post is currently locked by a different user and can not be updated.",
+ 'values' => array(
+ 'date' => 'The field :param1 must be a date, Given: :param2',
+ 'decimal' => 'The field :param1 must be a decimal with 2 places, Given: :param2',
+ 'digit' => 'The field :param1 must be a digit, Given: :param2',
+ 'email' => 'The field :param1 must be an email address, Given: :param2',
+ 'exists' => 'The role you are publishing to ":value" does not exist',
+ 'tagExists' => 'The field :param1 must be a valid category id or name, Category: :param2',
+ 'max_length' => 'The field :param1 must not exceed :param2 characters long, Given: :param2',
+ 'invalidForm' => 'The field :param1 has the wrong post type, Post id: :param2',
+ 'numeric' => 'The field :param1 must be numeric, Given: :param2',
+ 'scalar' => 'The field :param1 must be scalar, Given: :param2',
+ 'point' => 'The field :param1 must be an array of lat and lon',
+ 'lat' => 'the field :param1 must contain a valid latitude',
+ 'lon' => 'the field :param1 must contain a valid longitude',
+ 'url' => 'The field :param1 must be a url, Given: :param2',
+ 'video_type' => 'The field :param1 must be either a Youtube or Vimeo URL, Given: :param2',
+ )
+);
diff --git a/resources/lang/en_GB/role.php b/resources/lang/en_GB/role.php
new file mode 100644
index 0000000000..e2e04236a0
--- /dev/null
+++ b/resources/lang/en_GB/role.php
@@ -0,0 +1,5 @@
+ 'The roles feature is not enabled for your deployment.'
+);
diff --git a/resources/lang/en_GB/tag.php b/resources/lang/en_GB/tag.php
new file mode 100644
index 0000000000..357473fb16
--- /dev/null
+++ b/resources/lang/en_GB/tag.php
@@ -0,0 +1,11 @@
+ ':field :value is already in use',
+ 'role' => array(
+ 'isRoleValid' => 'Role must match the parent category',
+ 'exists' => 'Role :value does not exist'
+ ),
+ 'description.regex' => 'The description must contain only letters, numbers, spaces and punctuation',
+ 'regex' => 'The category name must contain only letters, numbers, spaces and punctuation'
+);
diff --git a/resources/lang/en_GB/user.php b/resources/lang/en_GB/user.php
new file mode 100644
index 0000000000..e43e217f42
--- /dev/null
+++ b/resources/lang/en_GB/user.php
@@ -0,0 +1,9 @@
+ ':field is already in use',
+ 'isUniqueUsername' => ':field is already in use',
+ 'isUserSelf' => 'You cannot change your own role',
+ 'adminUserLimitReached' => 'limit::admin',
+ 'invalidResetToken' => 'Invalid or expired reset token'
+);
diff --git a/resources/lang/en_GB/user_setting.php b/resources/lang/en_GB/user_setting.php
new file mode 100644
index 0000000000..7c516f59e1
--- /dev/null
+++ b/resources/lang/en_GB/user_setting.php
@@ -0,0 +1,5 @@
+ 'The user id, :param1, and config key, :param2, already exist'
+);
diff --git a/resources/lang/en_GB/validation.php b/resources/lang/en_GB/validation.php
new file mode 100644
index 0000000000..03fbeaa605
--- /dev/null
+++ b/resources/lang/en_GB/validation.php
@@ -0,0 +1,27 @@
+ ':field must contain only letters',
+ 'alpha_dash' => ':field must contain only numbers, letters and dashes',
+ 'alpha_numeric' => ':field must contain only letters and numbers',
+ 'color' => ':field must be a colour',
+ 'credit_card' => ':field must be a credit card number',
+ 'date' => ':field must be a date',
+ 'decimal' => ':field must be a decimal with :param2 places',
+ 'digit' => ':field must be a digit',
+ 'email' => ':field must be an email address',
+ 'email_domain' => ':field must contain a valid email domain',
+ 'equals' => ':field must equal :param2',
+ 'exact_length' => ':field must be exactly :param2 characters long',
+ 'in_array' => ':field must be one of the available options',
+ 'ip' => ':field must be an ip address',
+ 'matches' => ':field must be the same as :param3',
+ 'min_length' => ':field must be at least :param2 characters long',
+ 'max_length' => ':field must not exceed :param2 characters long',
+ 'not_empty' => ':field must not be empty',
+ 'numeric' => ':field must be numeric',
+ 'phone' => ':field must be a phone number',
+ 'range' => ':field must be within the range of :param2 to :param3',
+ 'regex' => ':field does not match the required format',
+ 'url' => ':field must be a url',
+);
diff --git a/resources/lang/es/contacts.php b/resources/lang/es/contacts.php
new file mode 100644
index 0000000000..e28857e674
--- /dev/null
+++ b/resources/lang/es/contacts.php
@@ -0,0 +1,6 @@
+ 'No se pudieron crear los contactos. Resultado: %s',
+);
\ No newline at end of file
diff --git a/resources/lang/es/form_attribute.php b/resources/lang/es/form_attribute.php
new file mode 100644
index 0000000000..2d65ef4daf
--- /dev/null
+++ b/resources/lang/es/form_attribute.php
@@ -0,0 +1,7 @@
+ ':field must not be empty',
+ 'isKeyAvailable' => 'The key ":value" is not available',
+ 'duplicateTypes' => 'No puede haber más de un campo de tipo :type'
+);
diff --git a/resources/lang/es/user.php b/resources/lang/es/user.php
new file mode 100644
index 0000000000..aff0a86990
--- /dev/null
+++ b/resources/lang/es/user.php
@@ -0,0 +1,10 @@
+ ':field ya está en uso',
+ 'isUniqueUsername' => ':field ya está en uso',
+ 'isUserSelf' => 'No puedes cambiar tu propio rol.',
+ 'adminUserLimitReached' => 'limit::admin',
+ 'invalidResetToken' => 'El token es inválido o ha expirado.'
+);
\ No newline at end of file
diff --git a/resources/lang/es/validation.php b/resources/lang/es/validation.php
new file mode 100644
index 0000000000..c95520ee36
--- /dev/null
+++ b/resources/lang/es/validation.php
@@ -0,0 +1,30 @@
+ ':field debe contener solo letras',
+ 'alpha_dash' => ':field debe contener solo números, letras y guiones',
+ 'alpha_numeric' => ':field debe contener solo letras y números',
+ 'color' => ':field deber ser un color',
+ 'credit_card' => ':field debe ser un número de tarjeta de crédito',
+ 'date' => ':field debe ser una fecha',
+ 'decimal' => ':field debe ser un decimal con :param2 lugares',
+ 'digit' => ':field deben ser un digito',
+ 'email' => ':field debe ser un correo electrónico',
+ 'email_domain' => ':field debe usar un dominio valido',
+ 'equals' => ':field debe ser igual a :param2',
+ 'exact_length' => ':field debe tener un largo de exactamente :param2 caracteres',
+ 'in_array' => ':field debe ser una de las opciones disponibles',
+ 'ip' => ':field debe ser una dirección IP',
+ 'matches' => ':field debe ser lo mismo que :param3',
+ 'min_length' => ':field debe tener un largo de al menos :param2 caracteres',
+ 'max_length' => ':field debe tener un largo menor a :param2 caracteres',
+ 'not_empty' => ':field no debe estar vacío',
+ 'numeric' => ':field debe ser numérico',
+ 'phone' => ':field debe ser un número de teléfono',
+ 'range' => ':field debe estar en el rango de :param2 a :param3',
+ 'regex' => ':field no encaja con el formato esperado',
+ 'url' => ':field debe ser una URL',
+ 'failedToValidate' => 'Falla al validar la entidad %s',
+ 'failedToCreateContact' => 'No se logró crear el contacto. Resultado: %s',
+);
diff --git a/resources/lang/pt_BR/config.php b/resources/lang/pt_BR/config.php
new file mode 100644
index 0000000000..24f53c1414
--- /dev/null
+++ b/resources/lang/pt_BR/config.php
@@ -0,0 +1,5 @@
+ 'Um ou mais provedores habilitados não está disponível: param1 ',
+);
diff --git a/resources/lang/pt_BR/contacts.php b/resources/lang/pt_BR/contacts.php
new file mode 100644
index 0000000000..efe172c2c6
--- /dev/null
+++ b/resources/lang/pt_BR/contacts.php
@@ -0,0 +1,6 @@
+ 'Não foi possível criar contatos. Resultado: 1%s',
+);
\ No newline at end of file
diff --git a/resources/lang/pt_BR/csv.php b/resources/lang/pt_BR/csv.php
new file mode 100644
index 0000000000..c5eed3f734
--- /dev/null
+++ b/resources/lang/pt_BR/csv.php
@@ -0,0 +1,7 @@
+ 'O tamanho do arquivo deve ser menor do que :param3KB',
+ 'mime_type' => 'Tipo de arquivo não suportado. Carregue um arquivo .csv.',
+ 'not_empty' => 'O arquivo CSV que você carregou está vazio, Verifique o seu arquivo CSV e tente novamente.'
+);
diff --git a/resources/lang/pt_BR/export.php b/resources/lang/pt_BR/export.php
new file mode 100644
index 0000000000..3e0098f300
--- /dev/null
+++ b/resources/lang/pt_BR/export.php
@@ -0,0 +1,7 @@
+ 'enviar_para_hdx deve ser verdadeiro quando enviar_para_browser é falso',
+ 'sendToBrowserShouldBeTrue' => 'enviar para navegador deve ser verdadeiro quando enviar_para_hdx é falso',
+ 'includeHXLShouldBeTrue' => 'incluir_hxl deve ser verdadeiro quando enviar_para_hdx é verdadeiro',
+);
diff --git a/resources/lang/pt_BR/form.php b/resources/lang/pt_BR/form.php
new file mode 100644
index 0000000000..e7cb50700d
--- /dev/null
+++ b/resources/lang/pt_BR/form.php
@@ -0,0 +1,6 @@
+ 'formulário_estágio_id: valor não existe',
+ 'postTypeLimitReached' => 'limite: pós tipos',
+);
diff --git a/resources/lang/pt_BR/form_attribute.php b/resources/lang/pt_BR/form_attribute.php
new file mode 100644
index 0000000000..8a31137b3d
--- /dev/null
+++ b/resources/lang/pt_BR/form_attribute.php
@@ -0,0 +1,7 @@
+ ':campo não deve estar vazio',
+ 'isKeyAvailable' => 'o "valo" da chave não está disponível',
+ 'duplicateTypes' => 'Não pode haver mais de um campo com o tipo: valor'
+);
diff --git a/resources/lang/pt_BR/form_contact.php b/resources/lang/pt_BR/form_contact.php
new file mode 100644
index 0000000000..739ac316c1
--- /dev/null
+++ b/resources/lang/pt_BR/form_contact.php
@@ -0,0 +1,5 @@
+ 'Número de telefone inválido',
+);
diff --git a/resources/lang/pt_BR/form_role.php b/resources/lang/pt_BR/form_role.php
new file mode 100644
index 0000000000..8a0502baf0
--- /dev/null
+++ b/resources/lang/pt_BR/form_role.php
@@ -0,0 +1,7 @@
+ array(
+ 'roleDoesNotExist' => 'papel_id: valor não existe',
+ )
+);
diff --git a/src/App/DataSource/Twitter/Twitter.php b/src/App/DataSource/Twitter/Twitter.php
index 0cf0e8c1dc..a75315d7db 100644
--- a/src/App/DataSource/Twitter/Twitter.php
+++ b/src/App/DataSource/Twitter/Twitter.php
@@ -74,7 +74,10 @@ public function getOptions()
'label' => 'Step 1: Create a new Twitter application',
'input' => 'read-only-text',
'description' => function () {
- return 'Create a new twitter application';
+ return 'Twitter applications may take some time to be approved by Twitter.
+ Please be aware of this if you need this data quickly.
+
Create your
+ Twitter application here.';
}
],
// @todo figure out how to inject link and fix base url
diff --git a/src/App/ExternalServices/HDXInterface.php b/src/App/ExternalServices/HDXInterface.php
index 1151118eab..841a5d9a78 100644
--- a/src/App/ExternalServices/HDXInterface.php
+++ b/src/App/ExternalServices/HDXInterface.php
@@ -11,15 +11,21 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU General Public License Version 3 (GPLv3)
*/
+use Illuminate\Support\Facades\Storage;
+use Illuminate\Support\Carbon;
+use Carbon\CarbonInterval;
+
use Germanazo\CkanApi\Repositories\BaseRepository;
use Ushahidi\Core\Exception\FormatterException;
use Ushahidi\Core\Usecase\HXL\SendHXLUsecase;
use Germanazo\CkanApi\CkanApiClient;
use GuzzleHttp\Client;
+use Ushahidi\Core\Traits\FormatRackspaceURL;
use Log;
class HDXInterface
{
+ use FormatRackspaceURL;
protected $ckanClient;
protected $userAPIKey;
protected $hdx_maintainer_id;
@@ -203,14 +209,23 @@ public function createHDXDatasetRecord(array $metadata, $license, $tags = [])
* Note: if error condition is the result, then we ignore it gracefully,
* but the full error response array will be returned instead of a confirmation array
*/
- public function createResourceForDataset($package_id, $job_url, $dataset_title)
+ public function createResourceForDataset($job_id, $package_id, $job_url, $dataset_title)
{
+ $job_url = $this->formatUrl($job_url);
+
+ if (!$job_url) {
+ $createResult = ['error' => 'Unable to get a valid URL for the CSV file.'];
+ Log::error('Job: ' . $job_id . ' - Unable to get a valid URL for the CSV file.');
+ return $createResult;
+ }
+
$resource = [
'package_id' => $package_id,
- 'url' => $job_url,
+ 'url' => $this->formatUrl($job_url),
'resource_type' => 'csv',
'name' => $dataset_title
];
+
$apiClient = $this->getApiClient();
$createResult = [];
try {
@@ -219,10 +234,9 @@ public function createResourceForDataset($package_id, $job_url, $dataset_title)
// @TODO: be graceful here
$createResult = ['error' => 'Unable to create resource on HDX server.'];
Log::error(
- 'Unable to create resource on HDX server. Exception: ' .
- var_export($e, true) .
- ' - Dataset: ' .
- var_export($resource, true)
+ 'Unable to create resource on HDX server for job ' . $job_id .
+ ' . Exception: ' . var_export($e->getMessage(), true) .
+ ' - Dataset: ' . var_export($resource, true)
);
}
return $createResult;
diff --git a/src/App/Formatter/ExportJob.php b/src/App/Formatter/ExportJob.php
index 720b99e094..f229addbf8 100644
--- a/src/App/Formatter/ExportJob.php
+++ b/src/App/Formatter/ExportJob.php
@@ -15,39 +15,10 @@
use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Carbon;
use Carbon\CarbonInterval;
+use Ushahidi\Core\Traits\FormatRackspaceURL;
class ExportJob extends API
{
use FormatterAuthorizerMetadata;
-
- protected function formatUrl($value)
- {
- if (empty($value)) {
- return $value;
- }
-
- // If we already have a URL, just return it
- if (filter_var($value, FILTER_VALIDATE_URL)) {
- return $value;
- }
-
- // Removes path from image file name, encodes the filename, and joins the path and filename together
- $url_path = explode("/", $value);
- $filename = rawurlencode(array_pop($url_path));
- array_push($url_path, $filename);
- $path = implode("/", $url_path);
-
- $expiration = Carbon::now()->add(CarbonInterval::fromString(config('media.temp_url_lifespan')));
-
- // Try to get a temporary URL
- try {
- return Storage::temporaryUrl($path, $expiration);
- } catch (\RuntimeException $e) {
- // If it fails (some providers can't support it) fallback to a standard URL
- return url(Storage::url($path));
- } catch (\OpenCloud\ObjectStore\Exception\ObjectNotFoundException $e) {
- // Catch ObjectNotFoundException from Rackspace
- return null;
- }
- }
+ use FormatRackspaceURL;
}
diff --git a/src/App/Repository/ExportJobRepository.php b/src/App/Repository/ExportJobRepository.php
index 7d6346ec0c..b0de1fee5d 100644
--- a/src/App/Repository/ExportJobRepository.php
+++ b/src/App/Repository/ExportJobRepository.php
@@ -121,10 +121,30 @@ public function create(Entity $entity)
// Overriding the update method here to handle state transitions
public function update(Entity $entity)
{
- // Run state transition handler
- $entity->handleStateTransition();
+ // // Run state transition handler
+ // $entity->handleStateTransition();
+ $fireHDX = false;
+ \Log::info("Handle state transition");
+ // Check for new status of 'EXPORTED_TO_CDN'
+ if ($entity->hasChanged('status') && $entity->status == ExportJob::STATUS_EXPORTED_TO_CDN) {
+ \Log::info("THE URL IS: " . $entity->url);
+ \Log::info("THE send_to_hdx IS: " . $entity->send_to_hdx);
+ if ($entity->send_to_hdx) {
+ // Jump to next state PENDING_HDX
+ $entity->setState(['status' => ExportJob::STATUS_PENDING_HDX]);
+ $fireHDX = true;
+ } else {
+ // if sending to HDX is not required, (or send_to_hdx does not exist)
+ // then simply update the status to SUCCESS
+ $entity->setState([ 'status' => ExportJob::STATUS_SUCCESS]);
+ }
+ }
+ $return = parent::update($entity);
- return parent::update($entity);
+ if ($fireHDX) {
+ $entity->startHDX();
+ }
+ return $return;
}
public function getPendingJobs($limit = 10)
diff --git a/src/App/Repository/Form/ContactRepository.php b/src/App/Repository/Form/ContactRepository.php
index 122d870e8b..497656a8e3 100644
--- a/src/App/Repository/Form/ContactRepository.php
+++ b/src/App/Repository/Form/ContactRepository.php
@@ -154,7 +154,7 @@ private function createNewContact($entity)
if (!isset($result[0])) {
throw new HTTP_Exception_500(
sprintf(
- 'Could not create contacts. Result: %s',
+ $this->translator->trans('contacts.failedToCreateContact'),
var_export($entity, true)
)
);
diff --git a/src/App/Repository/HXL/HXLFormAttributeHXLAttributeTagRepository.php b/src/App/Repository/HXL/HXLFormAttributeHXLAttributeTagRepository.php
index 83750ff573..72c56b3fd4 100644
--- a/src/App/Repository/HXL/HXLFormAttributeHXLAttributeTagRepository.php
+++ b/src/App/Repository/HXL/HXLFormAttributeHXLAttributeTagRepository.php
@@ -50,10 +50,13 @@ public function setSearchConditions(SearchData $search)
public function getHxlWithFormAttributes($job)
{
- // select form_attribute_hxl_attribute_tag.*, hxl_tags.tag_name, hxl_attributes.attribute
+ // Generated query is:
+ // SELECT form_attribute_hxl_attribute_tag.*, hxl_tags.tag_name, hxl_attributes.attribute
// FROM form_attribute_hxl_attribute_tag
// INNER JOIN hxl_tags ON form_attribute_hxl_attribute_tag.hxl_tag_id = hxl_tags.id
- // INNER JOIN hxl_attributes ON form_attribute_hxl_attribute_tag.hxl_attribute_id = hxl_attributes.id ;
+ // LEFT JOIN hxl_attributes ON form_attribute_hxl_attribute_tag.hxl_attribute_id = hxl_attributes.id
+ // INNER JOIN form_attributes ON form_attribute_hxl_attribute_tag.form_attribute_id = form_attributes.id
+ // WHERE form_attribute_hxl_attribute_tag.export_job_id = $job->id;
$result = DB::select(
'form_attribute_hxl_attribute_tag.*',
@@ -65,7 +68,7 @@ public function getHxlWithFormAttributes($job)
)
->from($this->getTable())
->join('hxl_tags')->on('form_attribute_hxl_attribute_tag.hxl_tag_id', '=', 'hxl_tags.id')
- ->join('hxl_attributes')
+ ->join('hxl_attributes', 'left')
->on('form_attribute_hxl_attribute_tag.hxl_attribute_id', '=', 'hxl_attributes.id')
->join('form_attributes')
->on('form_attribute_hxl_attribute_tag.form_attribute_id', '=', 'form_attributes.id')
diff --git a/src/App/Validator/Contact/Receive.php b/src/App/Validator/Contact/Receive.php
index e7b5f930af..9d27dfe9b1 100644
--- a/src/App/Validator/Contact/Receive.php
+++ b/src/App/Validator/Contact/Receive.php
@@ -20,10 +20,10 @@ public function validContact($contact, $data, $validation)
// Valid Email?
if (isset($data['type']) and
$data['type'] == Contact::EMAIL and
- ! \Kohana\Validation\Valid::email($contact) ) {
+ ! \Kohana\Validation\Valid::email($contact)) {
return $validation->error('contact', 'invalid_email', [$contact]);
} elseif (isset($data['type']) and
- $data['type'] == Contact::PHONE ) {
+ $data['type'] == Contact::PHONE) {
// Allow for alphanumeric sender
$number = preg_replace('/[^a-zA-Z0-9 ]/', '', $contact);
diff --git a/src/App/Validator/Contact/Update.php b/src/App/Validator/Contact/Update.php
index f2fcfc6217..da74059ad0 100644
--- a/src/App/Validator/Contact/Update.php
+++ b/src/App/Validator/Contact/Update.php
@@ -65,12 +65,12 @@ public function validContact($contact, $data, $validation)
// Valid Email?
if (isset($data['type']) and
$data['type'] == Contact::EMAIL and
- ! \Kohana\Validation\Valid::email($contact) ) {
+ ! \Kohana\Validation\Valid::email($contact)) {
return $validation->error('contact', 'invalid_email', [$contact]);
// Valid Phone?
// @todo Look at using libphonenumber to validate international numbers
} elseif (isset($data['type']) and
- $data['type'] == Contact::PHONE ) {
+ $data['type'] == Contact::PHONE) {
// Remove all non-digit characters from the number
$number = preg_replace('/\D+/', '', $contact);
diff --git a/src/Core/Entity/ExportJob.php b/src/Core/Entity/ExportJob.php
index 6280392ce7..d1274036ea 100644
--- a/src/Core/Entity/ExportJob.php
+++ b/src/Core/Entity/ExportJob.php
@@ -101,20 +101,9 @@ public function isCombineBatchesDone()
/**
* Handle state transitions
*/
- public function handleStateTransition()
+ public function startHDX()
{
- // Check for new status of 'EXPORTED_TO_CDN'
- if ($this->hasChanged('status') && $this->status == ExportJob::STATUS_EXPORTED_TO_CDN) {
- if ($this->send_to_hdx) {
- // Jump to next state PENDING_HDX
- $this->setState(['status' => ExportJob::STATUS_PENDING_HDX]);
- // if sending to HXL is required, then we spawn an event to do that
- Event::fire(new SendToHDXEvent($this->getId()));
- } else {
- // if sending to HDX is not required, (or send_to_hdx does not exist)
- // then simply update the status to SUCCESS
- $this->setState([ 'status' => ExportJob::STATUS_SUCCESS]);
- }
- }
+ // if sending to HXL is required, then we spawn an event to do that
+ Event::fire(new SendToHDXEvent($this->getId()));
}
}
diff --git a/src/Core/Exception/ValidatorException.php b/src/Core/Exception/ValidatorException.php
index f5a146c339..6709b441ea 100644
--- a/src/Core/Exception/ValidatorException.php
+++ b/src/Core/Exception/ValidatorException.php
@@ -13,6 +13,7 @@
use RecursiveIteratorIterator;
use RecursiveArrayIterator;
+use Ushahidi\Core\Tool\TranslatorTrait;
class ValidatorException extends \InvalidArgumentException
{
diff --git a/src/Core/Tool/TranslatorTrait.php b/src/Core/Tool/TranslatorTrait.php
new file mode 100644
index 0000000000..91e2d7d1ba
--- /dev/null
+++ b/src/Core/Tool/TranslatorTrait.php
@@ -0,0 +1,34 @@
+
+ * @package Ushahidi\Platform
+ * @copyright 2014 Ushahidi
+ * @license https://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License Version 3 (AGPL3)
+ */
+
+namespace Ushahidi\Core\Tool;
+
+use Illuminate\Contracts\Translation\Translator;
+
+trait TranslatorTrait
+{
+ /**
+ * @var Translator
+ */
+ protected $translator;
+
+ /**
+ * @param Translator $translator
+ * @return void
+ */
+ public function setTranslator(Translator $translator)
+ {
+ $this->translator = $translator;
+ return $this;
+ }
+}
diff --git a/src/Core/Tool/ValidatorTrait.php b/src/Core/Tool/ValidatorTrait.php
index ce3da7d7eb..6592d6976d 100644
--- a/src/Core/Tool/ValidatorTrait.php
+++ b/src/Core/Tool/ValidatorTrait.php
@@ -15,6 +15,7 @@
use Ushahidi\Core\Entity;
use Ushahidi\Core\Exception\ValidatorException;
+use Ushahidi\Core\Tool\TranslatorTrait;
trait ValidatorTrait
{
@@ -50,8 +51,10 @@ abstract protected function verifyValid(Entity $entity);
*/
protected function validatorError(Entity $entity)
{
+
+ $trans = $this->translator->trans('validation.failedToValidate');
throw new ValidatorException(sprintf(
- 'Failed to validate %s entity',
+ $this->translator->trans('validation.failedToValidate'),
$entity->getResource()
), $this->validator->errors());
}
diff --git a/src/Core/Traits/FormatRackspaceURL.php b/src/Core/Traits/FormatRackspaceURL.php
new file mode 100644
index 0000000000..0b9f526565
--- /dev/null
+++ b/src/Core/Traits/FormatRackspaceURL.php
@@ -0,0 +1,51 @@
+
+ * @package Ushahidi\Platform
+ * @copyright 2020 Ushahidi
+ * @license https://www.gnu.org/licenses/agpl-3.0.html GNU Affero General Public License Version 3 (AGPL3)
+ */
+
+namespace Ushahidi\Core\Traits;
+
+use Illuminate\Support\Carbon;
+use Carbon\CarbonInterval;
+use Illuminate\Support\Facades\Storage;
+
+trait FormatRackspaceURL
+{
+
+ public function formatUrl($value)
+ {
+ if (empty($value)) {
+ return $value;
+ }
+
+ // If we already have a URL, just return it
+ if (filter_var($value, FILTER_VALIDATE_URL)) {
+ return $value;
+ }
+
+ // Removes path from image file name, encodes the filename, and joins the path and filename together
+ $url_path = explode("/", $value);
+ $filename = rawurlencode(array_pop($url_path));
+ array_push($url_path, $filename);
+ $path = implode("/", $url_path);
+
+ $expiration = Carbon::now()->add(CarbonInterval::fromString(config('media.temp_url_lifespan')));
+
+ // Try to get a temporary URL
+ try {
+ return Storage::temporaryUrl($path, $expiration);
+ } catch (\RuntimeException $e) {
+ // If it fails (some providers can't support it) fallback to a standard URL
+ return url(Storage::url($path));
+ } catch (\OpenCloud\ObjectStore\Exception\ObjectNotFoundException $e) {
+ // Catch ObjectNotFoundException from Rackspace
+ return null;
+ }
+ }
+}
diff --git a/src/Core/Usecase/Config/SearchConfig.php b/src/Core/Usecase/Config/SearchConfig.php
index 72c35e6913..14afd7a4ec 100644
--- a/src/Core/Usecase/Config/SearchConfig.php
+++ b/src/Core/Usecase/Config/SearchConfig.php
@@ -17,6 +17,7 @@
use Ushahidi\Core\Tool\FormatterTrait;
use Ushahidi\Core\Usecase\Concerns\FilterRecords;
use Ushahidi\Core\Usecase;
+use Ushahidi\Core\Tool\TranslatorTrait;
class SearchConfig implements Usecase
{
@@ -24,7 +25,8 @@ class SearchConfig implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - FilterRecords for setting search parameters
use FilterRecords;
diff --git a/src/Core/Usecase/CreateUsecase.php b/src/Core/Usecase/CreateUsecase.php
index 3e26474ff5..5e7942d6cb 100644
--- a/src/Core/Usecase/CreateUsecase.php
+++ b/src/Core/Usecase/CreateUsecase.php
@@ -15,6 +15,7 @@
use Ushahidi\Core\Usecase;
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
use Ushahidi\Core\Tool\ValidatorTrait;
use Ushahidi\Core\Traits\Events\DispatchesEvents;
@@ -25,6 +26,7 @@ class CreateUsecase implements Usecase
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
FormatterTrait,
+ TranslatorTrait,
ValidatorTrait;
// - ModifyRecords for setting entity modification parameters
diff --git a/src/Core/Usecase/DeleteUsecase.php b/src/Core/Usecase/DeleteUsecase.php
index 7df5025dc7..52566aef6b 100644
--- a/src/Core/Usecase/DeleteUsecase.php
+++ b/src/Core/Usecase/DeleteUsecase.php
@@ -14,6 +14,7 @@
use Ushahidi\Core\Usecase;
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class DeleteUsecase implements Usecase
{
@@ -21,7 +22,8 @@ class DeleteUsecase implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - IdentifyRecords for setting entity lookup parameters
use Concerns\IdentifyRecords;
diff --git a/src/Core/Usecase/Export/Job/CreateJob.php b/src/Core/Usecase/Export/Job/CreateJob.php
index aa6b7751c1..d9a4e62b3f 100644
--- a/src/Core/Usecase/Export/Job/CreateJob.php
+++ b/src/Core/Usecase/Export/Job/CreateJob.php
@@ -44,7 +44,9 @@ public function interact()
// if there are items in `hxl_heading_row` and the entity was created,
// create the hxl tags for each attribute
+
$hxl_heading_row = $this->getPayload('hxl_heading_row', false);
+
if ($entity->getId() && is_array($hxl_heading_row)) {
$this->createHxlHeadingTags($hxl_heading_row, $entity);
}
diff --git a/src/Core/Usecase/HXL/Organisations/GetByUser.php b/src/Core/Usecase/HXL/Organisations/GetByUser.php
index 54afd3f09f..0ac0f76f7c 100644
--- a/src/Core/Usecase/HXL/Organisations/GetByUser.php
+++ b/src/Core/Usecase/HXL/Organisations/GetByUser.php
@@ -15,13 +15,15 @@
use Ushahidi\App\ExternalServices\HDXInterface;
use Ushahidi\Core\Tool\FormatterTrait;
use Ushahidi\Core\Usecase;
+use Ushahidi\Core\Tool\TranslatorTrait;
use Log;
class GetByUser implements Usecase
{
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
protected $userSettingRepository;
/**
diff --git a/src/Core/Usecase/HXL/SendHXLUsecase.php b/src/Core/Usecase/HXL/SendHXLUsecase.php
index b19e0c1dae..be287c6cd9 100644
--- a/src/Core/Usecase/HXL/SendHXLUsecase.php
+++ b/src/Core/Usecase/HXL/SendHXLUsecase.php
@@ -19,6 +19,7 @@
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\App\ExternalServices\HDXInterface;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
use Ushahidi\Core\Usecase;
use Log;
@@ -27,6 +28,7 @@ class SendHXLUsecase implements Usecase
use Usecase\Concerns\IdentifyRecords;
use AuthorizerTrait; // ? do we need this here?
use FormatterTrait;
+ use TranslatorTrait;
protected $metadataRepository;
protected $userSettingRepository;
protected $exportJobRepository;
@@ -72,7 +74,6 @@ public function interact()
{
// get job by job_id
$job = $this->exportJobRepository->get($this->getIdentifier('job_id'));
-
// get user settings by user id
$user_settings_key = $this->userSettingRepository->getConfigKeyByUser($job->user_id, 'hdx_api_key');
$user_settings_user = $this->userSettingRepository->getConfigKeyByUser($job->user_id, 'hdx_maintainer_id');
@@ -146,7 +147,6 @@ private function createDatasetAndResource($metadata, $job, $license, $tags)
$job = $this->setJobStatusAndUpdate($job, 'FAILED');
return $job;
}
-
return $this->createResourceAndUpdateJob($dataset_result['result']['id'], $job, $metadata);
}
@@ -159,6 +159,7 @@ private function createDatasetAndResource($metadata, $job, $license, $tags)
private function createResourceAndUpdateJob($dataset_id, $job, $metadata)
{
$resource_result = $this->hdxInterface->createResourceForDataset(
+ $job->id,
$dataset_id,
$job->url,
$metadata->dataset_title
diff --git a/src/Core/Usecase/ImportUsecase.php b/src/Core/Usecase/ImportUsecase.php
index ed0fd14c3c..031e582009 100644
--- a/src/Core/Usecase/ImportUsecase.php
+++ b/src/Core/Usecase/ImportUsecase.php
@@ -19,7 +19,7 @@
use Ushahidi\Core\Tool\FormatterTrait;
use Ushahidi\Core\Tool\ValidatorTrait;
use Ushahidi\Core\Tool\Transformer;
-
+use Ushahidi\Core\Tool\TranslatorTrait;
use League\Event\ListenerInterface;
use Ushahidi\Core\Traits\Event;
@@ -30,6 +30,7 @@ class ImportUsecase implements Usecase
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
FormatterTrait,
+ TranslatorTrait,
ValidatorTrait;
// Use Event trait to trigger events
diff --git a/src/Core/Usecase/OptionsUsecase.php b/src/Core/Usecase/OptionsUsecase.php
index 8ac3c75e08..fd0d23a9a4 100644
--- a/src/Core/Usecase/OptionsUsecase.php
+++ b/src/Core/Usecase/OptionsUsecase.php
@@ -14,6 +14,7 @@
use Ushahidi\Core\Usecase;
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class OptionsUsecase implements Usecase
{
@@ -21,7 +22,8 @@ class OptionsUsecase implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - IdentifyRecords for setting entity lookup parameters
use Concerns\IdentifyRecords;
diff --git a/src/Core/Usecase/Post/Export.php b/src/Core/Usecase/Post/Export.php
index 2fba6c0212..21b07fcd9f 100644
--- a/src/Core/Usecase/Post/Export.php
+++ b/src/Core/Usecase/Post/Export.php
@@ -23,6 +23,8 @@
use Ushahidi\Core\Entity\ExportBatch;
use Ushahidi\Core\Entity\ExportBatchRepository;
use Ushahidi\Core\Usecase\Concerns\FilterRecords;
+use Ushahidi\Core\Tool\TranslatorTrait;
+
use Log;
class Export implements Usecase
@@ -33,7 +35,8 @@ class Export implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - FilterRecords for setting search parameters
use FilterRecords;
diff --git a/src/Core/Usecase/ReadUsecase.php b/src/Core/Usecase/ReadUsecase.php
index 038101a1ca..df24f55a17 100644
--- a/src/Core/Usecase/ReadUsecase.php
+++ b/src/Core/Usecase/ReadUsecase.php
@@ -14,6 +14,7 @@
use Ushahidi\Core\Usecase;
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class ReadUsecase implements Usecase
{
@@ -21,7 +22,8 @@ class ReadUsecase implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - IdentifyRecords for setting entity lookup parameters
use Concerns\IdentifyRecords;
diff --git a/src/Core/Usecase/SearchUsecase.php b/src/Core/Usecase/SearchUsecase.php
index de0b3b0865..418922a1c4 100644
--- a/src/Core/Usecase/SearchUsecase.php
+++ b/src/Core/Usecase/SearchUsecase.php
@@ -15,6 +15,7 @@
use Ushahidi\Core\SearchData;
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class SearchUsecase implements Usecase
{
@@ -22,7 +23,8 @@ class SearchUsecase implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - FilterRecords for setting search parameters
use Concerns\FilterRecords;
diff --git a/src/Core/Usecase/UpdateUsecase.php b/src/Core/Usecase/UpdateUsecase.php
index 511cc63165..7559a0e2c5 100644
--- a/src/Core/Usecase/UpdateUsecase.php
+++ b/src/Core/Usecase/UpdateUsecase.php
@@ -16,6 +16,7 @@
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
use Ushahidi\Core\Tool\ValidatorTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class UpdateUsecase implements Usecase
{
@@ -24,6 +25,7 @@ class UpdateUsecase implements Usecase
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
FormatterTrait,
+ TranslatorTrait,
ValidatorTrait;
// - IdentifyRecords for setting entity lookup parameters
diff --git a/src/Core/Usecase/User/GetResetToken.php b/src/Core/Usecase/User/GetResetToken.php
index 50ccae5364..a8506812d3 100644
--- a/src/Core/Usecase/User/GetResetToken.php
+++ b/src/Core/Usecase/User/GetResetToken.php
@@ -17,6 +17,7 @@
use Ushahidi\Core\Tool\AuthorizerTrait;
use Ushahidi\Core\Tool\FormatterTrait;
use Ushahidi\Core\Usecase\Concerns\ModifyRecords;
+use Ushahidi\Core\Tool\TranslatorTrait;
class GetResetToken implements Usecase
{
@@ -24,7 +25,8 @@ class GetResetToken implements Usecase
// setter method for the tool. For example, the AuthorizerTrait provides
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
- FormatterTrait;
+ FormatterTrait,
+ TranslatorTrait;
// - ModifyRecords for setting entity modification parameters
use ModifyRecords;
diff --git a/src/Core/Usecase/User/ResetUserPassword.php b/src/Core/Usecase/User/ResetUserPassword.php
index f9fe760091..8fed263a99 100644
--- a/src/Core/Usecase/User/ResetUserPassword.php
+++ b/src/Core/Usecase/User/ResetUserPassword.php
@@ -19,6 +19,7 @@
use Ushahidi\Core\Usecase\Concerns\ModifyRecords;
use Ushahidi\Core\Exception\ValidatorException;
use Ushahidi\Core\Tool\ValidatorTrait;
+use Ushahidi\Core\Tool\TranslatorTrait;
class ResetUserPassword implements Usecase
{
@@ -27,7 +28,8 @@ class ResetUserPassword implements Usecase
// a `setAuthorizer` method which only accepts `Authorizer` instances.
use AuthorizerTrait,
FormatterTrait,
- ValidatorTrait;
+ ValidatorTrait,
+ TranslatorTrait;
// - ModifyRecords for setting search parameters
use ModifyRecords;
diff --git a/src/Factory/UsecaseFactory.php b/src/Factory/UsecaseFactory.php
index ce3b097341..d865eaf3ae 100644
--- a/src/Factory/UsecaseFactory.php
+++ b/src/Factory/UsecaseFactory.php
@@ -107,11 +107,13 @@ public function get($resource, $action)
->setAuthorizer($this->authorizers->get($resource))
->setRepository($this->repositories->get($resource))
->setFormatter($this->formatters->get($resource, $action))
+ ->setTranslator(app('translator'))
;
if ($usecase->isWrite()) {
$usecase->setValidator($this->validators->get($resource, $action));
}
+
if ($usecase->isSearch()) {
$usecase->setData($this->data->get($action));
diff --git a/tests/spec/Core/Usecase/CreateUsecaseSpec.php b/tests/spec/Core/Usecase/CreateUsecaseSpec.php
index ecf21496fb..5b646bf2a8 100644
--- a/tests/spec/Core/Usecase/CreateUsecaseSpec.php
+++ b/tests/spec/Core/Usecase/CreateUsecaseSpec.php
@@ -8,19 +8,27 @@
use Ushahidi\Core\Tool\Validator;
use Ushahidi\Core\Usecase\CreateRepository;
use Illuminate\Contracts\Events\Dispatcher;
+use Illuminate\Contracts\Translation\Translator;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class CreateUsecaseSpec extends ObjectBehavior
{
- function let(Authorizer $auth, Formatter $format, Validator $valid, CreateRepository $repo, Dispatcher $dispatcher)
- {
+ function let(
+ Authorizer $auth,
+ Formatter $format,
+ Validator $valid,
+ CreateRepository $repo,
+ Dispatcher $dispatcher,
+ Translator $translator
+ ) {
$this->setAuthorizer($auth);
$this->setFormatter($format);
$this->setRepository($repo);
$this->setValidator($valid);
$this->setDispatcher($dispatcher);
+ $this->setTranslator($translator);
}
function it_is_initializable()
diff --git a/tests/spec/Core/Usecase/Message/ReceiveMessageSpec.php b/tests/spec/Core/Usecase/Message/ReceiveMessageSpec.php
index 983b5cadb6..cab3f83169 100644
--- a/tests/spec/Core/Usecase/Message/ReceiveMessageSpec.php
+++ b/tests/spec/Core/Usecase/Message/ReceiveMessageSpec.php
@@ -15,6 +15,7 @@
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
+use Illuminate\Contracts\Translation\Translator;
class ReceiveMessageSpec extends ObjectBehavior
{
@@ -25,7 +26,8 @@ function let(
CreateRepository $repo,
ContactRepository $contactRepo,
Validator $contactValid,
- Dispatcher $dispatcher
+ Dispatcher $dispatcher,
+ Translator $translator
) {
$contactRepo->beADoubleOf('Ushahidi\Core\Usecase\CreateRepository');
@@ -36,6 +38,7 @@ function let(
$this->setValidator($valid);
$this->setContactValidator($contactValid);
$this->setDispatcher($dispatcher);
+ $this->setTranslator($translator);
}
function it_is_initializable()
diff --git a/tests/spec/Core/Usecase/SearchUsecaseSpec.php b/tests/spec/Core/Usecase/SearchUsecaseSpec.php
index c4bb5a3457..fb8efe785b 100644
--- a/tests/spec/Core/Usecase/SearchUsecaseSpec.php
+++ b/tests/spec/Core/Usecase/SearchUsecaseSpec.php
@@ -7,20 +7,27 @@
use Ushahidi\Core\Tool\Authorizer;
use Ushahidi\Core\Tool\Formatter;
use Ushahidi\Core\Usecase\SearchRepository;
+use Illuminate\Contracts\Translation\Translator;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class SearchUsecaseSpec extends ObjectBehavior
{
- function let(Authorizer $auth, SearchData $search, Formatter $format, SearchRepository $repo)
- {
+ function let(
+ Authorizer $auth,
+ SearchData $search,
+ Formatter $format,
+ SearchRepository $repo,
+ Translator $translator
+ ) {
$format->beADoubleOf('Ushahidi\Core\Tool\Formatter\CollectionFormatter');
$this->setAuthorizer($auth);
$this->setData($search);
$this->setFormatter($format);
$this->setRepository($repo);
+ $this->setTranslator($translator);
}
function it_is_initializable()
diff --git a/tests/spec/Core/Usecase/UpdateUsecaseSpec.php b/tests/spec/Core/Usecase/UpdateUsecaseSpec.php
index 6e847d2a19..c4801da6e7 100644
--- a/tests/spec/Core/Usecase/UpdateUsecaseSpec.php
+++ b/tests/spec/Core/Usecase/UpdateUsecaseSpec.php
@@ -7,18 +7,20 @@
use Ushahidi\Core\Tool\Formatter;
use Ushahidi\Core\Tool\Validator;
use Ushahidi\Core\Usecase\UpdateRepository;
+use Illuminate\Contracts\Translation\Translator;
use PhpSpec\ObjectBehavior;
use Prophecy\Argument;
class UpdateUsecaseSpec extends ObjectBehavior
{
- function let(Authorizer $auth, Formatter $format, Validator $valid, UpdateRepository $repo)
+ function let(Authorizer $auth, Formatter $format, Validator $valid, UpdateRepository $repo, Translator $translator)
{
$this->setAuthorizer($auth);
$this->setFormatter($format);
$this->setValidator($valid);
$this->setRepository($repo);
+ $this->setTranslator($translator);
}
function it_is_initializable()