Compare commits

..

60 Commits

Author SHA1 Message Date
James Cole
d8807e6ab7 Merge branch 'release/4.8.2-alpha.2' 2019-11-07 06:44:43 +01:00
James Cole
a7a76e32d6 New version. 2019-11-07 06:44:23 +01:00
James Cole
1294705809 Some new translations. 2019-11-07 06:43:29 +01:00
James Cole
bb449e1940 Fix alpha builds + version builds. 2019-11-07 06:14:45 +01:00
James Cole
828b9d32aa Fix #2805 2019-11-07 06:10:46 +01:00
James Cole
a67b0f78a4 Merge branch 'master' into develop 2019-11-05 18:09:28 +01:00
James Cole
5177f2bc87 Fix build script. 2019-11-05 18:09:07 +01:00
James Cole
f06e947706 Merge tag '4.8.2-alpha.1' into develop
4.8.2-alpha.1
2019-11-05 17:58:08 +01:00
James Cole
380f59dab2 Merge branch 'release/4.8.2-alpha.1' 2019-11-05 17:58:07 +01:00
James Cole
c558bc3247 Update composer file. 2019-11-05 17:56:43 +01:00
James Cole
25378b3f9a New translations. 2019-11-05 17:55:38 +01:00
James Cole
abf84e94b1 Final changelog details 2019-11-05 17:45:23 +01:00
James Cole
8baf29b835 Trigger a new build + fix a translation. 2019-11-03 13:35:34 +01:00
James Cole
d709a9489d Fix spaces in command. 2019-11-03 11:44:39 +01:00
James Cole
33ce7c0767 Release first alpha version to see how Travis responds. 2019-11-03 11:43:07 +01:00
James Cole
ec54ec22f6 Reconfigure build. 2019-11-03 11:38:21 +01:00
James Cole
706e722c6f Fix environment variables. 2019-11-03 07:20:32 +01:00
James Cole
58ec0c4add Change some environment variables for easier handling. 2019-11-03 07:19:12 +01:00
James Cole
88692f0058 Update metadata for new release. 2019-11-03 07:15:33 +01:00
James Cole
a8af0fa678 Remove "v" markers from translations. 2019-11-03 07:00:18 +01:00
James Cole
0bdd48ffec Add some debug info. 2019-11-02 08:28:49 +01:00
James Cole
766a82a983 Update translations. 2019-11-02 08:20:54 +01:00
James Cole
d749d550ee Error codes in Firefly III API 2019-11-02 08:19:50 +01:00
James Cole
2ea1852a94 Config out. 2019-11-02 07:21:40 +01:00
James Cole
4f44a42655 Add login for manifest. 2019-11-02 07:12:25 +01:00
James Cole
26ed00e7b5 Add correct path. 2019-11-02 07:04:11 +01:00
James Cole
51f25b2dce First triple arch build 2019-11-02 07:01:11 +01:00
James Cole
3fc653687c Fix files. 2019-11-01 06:15:02 +01:00
James Cole
4cd824f3b7 Fix Docker files. 2019-11-01 06:03:08 +01:00
James Cole
a6af263b50 Fix build and manifest. 2019-11-01 06:00:15 +01:00
James Cole
0844278eca Experimental setup with 3 jobs. 2019-11-01 05:57:41 +01:00
James Cole
1b63bfc3db Use central docker script. 2019-11-01 05:56:19 +01:00
James Cole
a4906a2d21 Fix version verify. 2019-11-01 05:51:25 +01:00
James Cole
c4256dd25b Let's see what ARM 64 will do. 2019-10-31 21:14:21 +01:00
James Cole
091ab17fdb Test 2019-10-31 21:11:57 +01:00
James Cole
02ddb95cf2 Second attempt. 2019-10-31 21:10:15 +01:00
James Cole
f2d43d71ad Test script that does nothing. 2019-10-31 21:07:58 +01:00
James Cole
af611b78de Make script executable. 2019-10-31 21:01:47 +01:00
James Cole
724a1b8b08 Script things. 2019-10-31 20:56:36 +01:00
James Cole
34e70c7446 Merge branch 'develop' of github.com:firefly-iii/firefly-iii into develop 2019-10-31 20:56:14 +01:00
James Cole
01f869f1b6 Let's see what happens. 2019-10-31 20:54:52 +01:00
James Cole
73a6db8eda Merge pull request #2786 from nicosomb/patch-1
Fixed documentation links
2019-10-31 19:40:24 +00:00
Nicolas Lœuillet
0bbc008848 Fixed documentation links 2019-10-31 15:37:12 +01:00
James Cole
5e61fa785e Fix #2771 2019-10-31 07:45:55 +01:00
James Cole
c131e6ad9b Fix #2780 2019-10-31 07:37:10 +01:00
James Cole
cbc92d89e1 Improve version handling. 2019-10-30 20:02:38 +01:00
James Cole
9a028d5002 Improve error handling in API. 2019-10-30 20:02:21 +01:00
James Cole
bed182cf13 Fix #2783 2019-10-29 18:36:03 +01:00
James Cole
d5afba6137 Fix order account. 2019-10-27 18:12:30 +01:00
James Cole
6b4b69b695 Fix #2774 2019-10-26 17:06:46 +02:00
James Cole
b528fa2e5d Merge tag '4.8.1.8' into develop
4.8.1.8
2019-10-26 16:56:43 +02:00
James Cole
f4b9f81e71 Merge branch 'hotfix/4.8.1.8' 2019-10-26 16:56:42 +02:00
James Cole
ca37d782ed Fix #2773 2019-10-26 16:56:30 +02:00
James Cole
f7c34db39b New translations. 2019-10-26 16:54:26 +02:00
James Cole
0d072b4ed9 Merge pull request #2772 from dguhl/2695-localise-api-errors
Fix issue #2695
2019-10-26 14:33:07 +00:00
Dominic Guhl
13a29a66c8 worked in feedback by JC5 2019-10-26 16:29:04 +02:00
James Cole
cfd9828438 Fix #2773 2019-10-26 16:21:12 +02:00
Dominic Guhl
b4d565400e Issue 2695
Introduces localisation for API errors
2019-10-26 15:07:54 +02:00
James Cole
be0e2bf6a7 Firefly III can now handle "channels" in its releases. 2019-10-26 14:42:51 +02:00
James Cole
778e0bcbae Merge tag '4.8.1.7' into develop
4.8.1.7
2019-10-26 08:07:10 +02:00
126 changed files with 1630 additions and 614 deletions

View File

@@ -1,20 +0,0 @@
#!/usr/bin/env bash
# build image
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
if [ "$TRAVIS_BRANCH" == "develop" ]; then
echo "Build develop amd64"
docker build -t jc5x/firefly-iii:develop-amd64 -f Dockerfile.amd64 .
docker tag jc5x/firefly-iii:develop-amd64 jc5x/firefly-iii:develop-$VERSION-amd64
docker push jc5x/firefly-iii:develop-amd64
docker push jc5x/firefly-iii:develop-$VERSION-amd64
fi
if [ "$TRAVIS_BRANCH" == "master" ]; then
echo "Build master amd64"
docker build -t jc5x/firefly-iii:latest-amd64 -f Dockerfile.amd64 .
docker tag jc5x/firefly-iii:latest-amd64 jc5x/firefly-iii:release-$VERSION-amd64
docker push jc5x/firefly-iii:latest-amd64
docker push jc5x/firefly-iii:release-$VERSION-amd64
fi

View File

@@ -1,29 +0,0 @@
#!/usr/bin/env bash
docker run --rm --privileged multiarch/qemu-user-static:register --reset
# get qemu-arm-static binary
mkdir tmp
pushd tmp && \
curl -L -o qemu-arm-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/v2.6.0/qemu-arm-static.tar.gz && \
tar xzf qemu-arm-static.tar.gz && \
popd
# build image
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
if [ "$TRAVIS_BRANCH" == "develop" ]; then
echo "Build develop arm"
docker build --tag jc5x/firefly-iii:develop-arm --file Dockerfile.arm .
docker tag jc5x/firefly-iii:develop-arm jc5x/firefly-iii:develop-$VERSION-arm
docker push jc5x/firefly-iii:develop-arm
docker push jc5x/firefly-iii:develop-$VERSION-arm
fi
if [ "$TRAVIS_BRANCH" == "master" ]; then
echo "Build master arm"
docker build --tag jc5x/firefly-iii:latest-arm --file Dockerfile.arm .
docker tag jc5x/firefly-iii:latest-arm jc5x/firefly-iii:release-$VERSION-arm
docker push jc5x/firefly-iii:latest-arm
docker push jc5x/firefly-iii:release-$VERSION-arm
fi

View File

@@ -1,35 +1,162 @@
#!/usr/bin/env bash
if [ "$TRAVIS_BRANCH" == "develop" ]; then
echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
mkdir $HOME/.docker
touch $HOME/.docker/config.json
echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json
sudo service docker restart
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
VERSION_TARGET=jc5x/firefly-iii:release-$VERSION
# if the github branch is develop, only push the 'develop' tag
if [ $TRAVIS_BRANCH == "develop" ]; then
TARGET=jc5x/firefly-iii:develop
ARM=jc5x/firefly-iii:develop-arm
AMD=jc5x/firefly-iii:develop-amd64
ARM32=jc5x/firefly-iii:develop-arm
ARM64=jc5x/firefly-iii:develop-arm64
AMD64=jc5x/firefly-iii:develop-amd64
docker manifest create $TARGET $AMD $ARM
docker manifest annotate $TARGET $ARM --arch arm --os linux
docker manifest annotate $TARGET $AMD --arch amd64 --os linux
echo "GitHub branch is $TRAVIS_BRANCH."
echo "Push develop-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
fi
echo "The version is $VERSION"
# if branch = master AND channel = alpha, push 'alpha'
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "alpha" ]; then
TARGET=jc5x/firefly-iii:alpha
ARM32=jc5x/firefly-iii:alpha-arm
ARM64=jc5x/firefly-iii:alpha-arm64
AMD64=jc5x/firefly-iii:alpha-amd64
echo "GitHub branch is $TRAVIS_BRANCH."
echo "Channel is $CHANNEL."
echo "Push alpha-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
echo "Push alpha-* builds to $VERSION_TARGET"
docker manifest create $VERSION_TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $VERSION_TARGET $ARM32 --arch arm --os linux
docker manifest annotate $VERSION_TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $VERSION_TARGET $AMD64 --arch amd64 --os linux
docker manifest push $VERSION_TARGET
fi
# if branch is master and channel is alpha, push 'alpha' and 'beta'.
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "beta" ]; then
TARGET=jc5x/firefly-iii:alpha
ARM32=jc5x/firefly-iii:beta-arm
ARM64=jc5x/firefly-iii:beta-arm64
AMD64=jc5x/firefly-iii:beta-amd64
echo "GitHub branch is $TRAVIS_BRANCH."
echo "Channel is $CHANNEL."
echo "Push beta-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
TARGET=jc5x/firefly-iii:beta
ARM32=jc5x/firefly-iii:beta-arm
ARM64=jc5x/firefly-iii:beta-arm64
AMD64=jc5x/firefly-iii:beta-amd64
echo "Push beta-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
echo "Push beta-* builds to $VERSION_TARGET"
docker manifest create $VERSION_TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $VERSION_TARGET $ARM32 --arch arm --os linux
docker manifest annotate $VERSION_TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $VERSION_TARGET $AMD64 --arch amd64 --os linux
docker manifest push $VERSION_TARGET
fi
# if branch is master and channel is stable, push 'alpha' and 'beta' and 'stable'.
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "stable" ]; then
TARGET=jc5x/firefly-iii:alpha
ARM32=jc5x/firefly-iii:stable-arm
ARM64=jc5x/firefly-iii:stable-arm64
AMD64=jc5x/firefly-iii:stable-amd64
echo "GitHub branch is $TRAVIS_BRANCH."
echo "Channel is $CHANNEL."
echo "Push stable-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
TARGET=jc5x/firefly-iii:beta
ARM32=jc5x/firefly-iii:stable-arm
ARM64=jc5x/firefly-iii:stable-arm64
AMD64=jc5x/firefly-iii:stable-amd64
echo "Push stable-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
TARGET=jc5x/firefly-iii:stable
ARM32=jc5x/firefly-iii:stable-arm
ARM64=jc5x/firefly-iii:stable-arm64
AMD64=jc5x/firefly-iii:stable-amd64
echo "Push stable-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
if [ "$TRAVIS_BRANCH" == "master" ]; then
TARGET=jc5x/firefly-iii:latest
ARM=jc5x/firefly-iii:latest-arm
AMD=jc5x/firefly-iii:latest-amd64
ARM32=jc5x/firefly-iii:stable-arm
ARM64=jc5x/firefly-iii:stable-arm64
AMD64=jc5x/firefly-iii:stable-amd64
docker manifest create $TARGET $AMD $ARM
docker manifest annotate $TARGET $ARM --arch arm --os linux
docker manifest annotate $TARGET $AMD --arch amd64 --os linux
echo "Push stable-* builds to $TARGET"
docker manifest create $TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $TARGET $ARM32 --arch arm --os linux
docker manifest annotate $TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $TARGET $AMD64 --arch amd64 --os linux
docker manifest push $TARGET
# and another one for version specific:
TARGET=jc5x/firefly-iii:release-$VERSION
ARM=jc5x/firefly-iii:release-$VERSION-arm
AMD=jc5x/firefly-iii:release-$VERSION-amd64
echo "Push stable-* builds to $VERSION_TARGET"
docker manifest create $TARGET $AMD $ARM
docker manifest annotate $TARGET $ARM --arch arm --os linux
docker manifest annotate $TARGET $AMD --arch amd64 --os linux
docker manifest push $TARGET
docker manifest create $VERSION_TARGET $ARM32 $ARM64 $AMD64
docker manifest annotate $VERSION_TARGET $ARM32 --arch arm --os linux
docker manifest annotate $VERSION_TARGET $ARM64 --arch arm64 --os linux
docker manifest annotate $VERSION_TARGET $AMD64 --arch amd64 --os linux
docker manifest push $VERSION_TARGET
fi
echo 'Done!'
# done!

103
.deploy/docker/travis.sh Executable file
View File

@@ -0,0 +1,103 @@
#!/usr/bin/env bash
echo "travis.sh: I am building channel ${CHANNEL} for version ${VERSION} on architecture ${ARCH}, branch $TRAVIS_BRANCH."
echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
mkdir $HOME/.docker
touch $HOME/.docker/config.json
echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json
sudo service docker restart
# First build amd64 image:
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
if [ $ARCH == "arm" ]; then
echo "Because architecture is $ARCH running some extra commands."
docker run --rm --privileged multiarch/qemu-user-static:register --reset
# get qemu-arm-static binary
mkdir tmp
pushd tmp && \
curl -L -o qemu-arm-static.tar.gz https://github.com/multiarch/qemu-user-static/releases/download/v2.6.0/qemu-arm-static.tar.gz && \
tar xzf qemu-arm-static.tar.gz && \
popd
fi
# if the github branch is develop, build and push develop. Don't push a version tag anymore.
if [ $TRAVIS_BRANCH == "develop" ]; then
LABEL=jc5x/firefly-iii:develop-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH. Will build and push $LABEL"
docker build -t $LABEL -f Dockerfile.$ARCH .
docker push $LABEL
fi
# if branch = master AND channel = alpha, build and push 'alpha'
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "alpha" ]; then
LABEL=jc5x/firefly-iii:alpha-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will build and push $LABEL"
docker build -t $LABEL -f Dockerfile.$ARCH .
docker push $LABEL
fi
# if branch is master and channel is alpha, build and push 'alpha' and 'beta'.
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "beta" ]; then
LABEL=jc5x/firefly-iii:beta-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will build and push $LABEL"
docker build -t $LABEL -f Dockerfile.$ARCH .
docker push $LABEL
# then tag as alpha and push:
docker tag $LABEL jc5x/firefly-iii:alpha-$ARCH
docker push jc5x/firefly-iii:alpha-$ARCH
echo "Also tagged $LABEL as jc5x/firefly-iii:alpha-$ARCH and pushed"
fi
# if branch is master and channel is stable, push 'alpha' and 'beta' and 'stable'.
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "stable" ]; then
# first build stable
LABEL=jc5x/firefly-iii:stable-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will build and push $LABEL"
docker build -t $LABEL -f Dockerfile.$ARCH .
docker push $LABEL
# then tag as beta and push:
docker tag $LABEL jc5x/firefly-iii:beta-$ARCH
docker push jc5x/firefly-iii:beta-$ARCH
echo "Also tagged $LABEL as jc5x/firefly-iii:beta-$ARCH and pushed"
# then tag as alpha and push:
docker tag $LABEL jc5x/firefly-iii:alpha-$ARCH
docker push jc5x/firefly-iii:alpha-$ARCH
echo "Also tagged $LABEL as jc5x/firefly-iii:alpha-$ARCH and pushed"
# then tag as latest and push:
docker tag $LABEL jc5x/firefly-iii:latest-$ARCH
docker push jc5x/firefly-iii:latest-$ARCH
echo "Also tagged $LABEL as jc5x/firefly-iii:latest-$ARCH and pushed"
fi
# push to channel 'version' if master + alpha
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "alpha"]; then
LABEL=jc5x/firefly-iii:version-$VERSION-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will also push alpha as $LABEL"
docker tag jc5x/firefly-iii:alpha-$ARCH $LABEL
docker push $LABEL
fi
# push to channel 'version' if master + beta
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "beta"]; then
LABEL=jc5x/firefly-iii:version-$VERSION-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will also push beta as $LABEL"
docker tag jc5x/firefly-iii:beta-$ARCH $LABEL
docker push $LABEL
fi
# push to channel 'version' if master + stable
if [ $TRAVIS_BRANCH == "master" ] && [ $CHANNEL == "stable"]; then
LABEL=jc5x/firefly-iii:version-$VERSION-$ARCH
echo "GitHub branch is $TRAVIS_BRANCH and channel is $CHANNEL. Will also push beta as $LABEL"
docker tag jc5x/firefly-iii:stable-$ARCH $LABEL
docker push $LABEL
fi
echo "Done!"

View File

@@ -1,26 +0,0 @@
server {
listen 80 default_server;
server_name _ *.vm docker;
root "/app/public";
index index.php;
include /opt/docker/etc/nginx/vhost.common.d/*.conf;
}
##############
# SSL
##############
server {
listen 443 default_server;
server_name _ *.vm docker;
root "/app/public";
index index.php;
include /opt/docker/etc/nginx/vhost.common.d/*.conf;
include /opt/docker/etc/nginx/vhost.ssl.conf;
}

View File

@@ -26,10 +26,12 @@ APP_URL=http://localhost
TRUSTED_PROXIES=
# The log channel defines where your log entries go to.
# 'daily' is the default logging mode giving you 5 daily rotated log files in /storage/logs/.
# - If you use DOCKER, use 'docker_out'
# - For everything else, use 'daily'
# Several other options exist. You can use 'single' for one big fat error log (not recommended).
# Also available are 'syslog', 'errorlog' and 'stdout' which will log to the system itself.
LOG_CHANNEL=daily
LOG_CHANNEL=docker_out
# Log level. You can set this from least severe to most severe:
# debug, info, notice, warning, error, critical, alert, emergency
@@ -38,7 +40,7 @@ LOG_CHANNEL=daily
APP_LOG_LEVEL=notice
# Database credentials. Make sure the database exists. I recommend a dedicated user for Firefly III
# For other database types, please see the FAQ: http://firefly-iii.readthedocs.io/en/latest/support/faq.html
# For other database types, please see the FAQ: https://docs.firefly-iii.org/support/faq
DB_CONNECTION=pgsql
DB_HOST=firefly_iii_db
DB_PORT=5432
@@ -76,7 +78,7 @@ COOKIE_DOMAIN=
COOKIE_SECURE=false
# If you want Firefly III to mail you, update these settings
# For instructions, see: https://firefly-iii.readthedocs.io/en/latest/installation/mail.html
# For instructions, see: https://docs.firefly-iii.org/advanced-installation/email
MAIL_DRIVER=log
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
@@ -121,7 +123,7 @@ ANALYTICS_ID=
# Firefly III has two options for user authentication. "eloquent" is the default,
# and "ldap" for LDAP servers.
# For full instructions on these settings please visit:
# https://firefly-iii.readthedocs.io/en/latest/installation/authentication.html
# https://docs.firefly-iii.org/advanced-installation/authentication
LOGIN_PROVIDER=eloquent
# LDAP connection configuration
@@ -180,6 +182,7 @@ DEMO_USERNAME=
DEMO_PASSWORD=
USE_ENCRYPTION=false
IS_SANDSTORM=false
IS_DOCKER=false
IS_HEROKU=false
BUNQ_USE_SANDBOX=false
FFIII_LAYOUT=v1

View File

@@ -1,9 +1,5 @@
sudo: required
language: bash
env:
- VERSION=4.8.1.7
dist: xenial
# safelist
branches:
@@ -14,16 +10,25 @@ branches:
services:
- docker
script:
# enable experimental features.
- echo '{"experimental":true}' | sudo tee /etc/docker/daemon.json
- mkdir $HOME/.docker
- touch $HOME/.docker/config.json
- echo '{"experimental":"enabled"}' | sudo tee $HOME/.docker/config.json
- sudo service docker restart
- docker version -f '{{.Server.Experimental}}'
- docker version
# build everything
- .deploy/docker/build-amd64.sh
- .deploy/docker/build-arm.sh
- .deploy/docker/manifest.sh
jobs:
include:
- dist: xenial
arch: amd64
env: ARCH=amd64 CHANNEL=alpha VERSION=4.8.2-alpha.2
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: amd64
env: ARCH=arm CHANNEL=alpha VERSION=4.8.2-alpha.2
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: arm64
env: ARCH=arm64 CHANNEL=alpha VERSION=4.8.2-alpha.2
stage: build
script: ./.deploy/docker/travis.sh
- dist: xenial
arch: amd64
env: CHANNEL=alpha VERSION=4.8.2-alpha.2
stage: manifest
script: ./.deploy/docker/manifest.sh

View File

@@ -1,25 +1,13 @@
FROM arm32v7/php:7.2-apache-stretch
ARG ARCH
COPY tmp/qemu-arm-static /usr/bin/qemu-arm-static
FROM jc5x/firefly-iii-base-image:latest-arm
# See also: https://github.com/JC5/firefly-iii-base-image
ENV FIREFLY_PATH=/var/www/firefly-iii COMPOSER_ALLOW_SUPERUSER=1
LABEL version="1.5" maintainer="thegrumpydictator@gmail.com"
# Create volumes
VOLUME $FIREFLY_PATH/storage/export $FIREFLY_PATH/storage/upload
# Install stuff Firefly III runs with & depends on: php extensions, locales, dev headers and composer
RUN apt-get update && apt-get install -y locales unzip && apt-get clean && rm -rf /var/lib/apt/lists/*
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && \
install-php-extensions --cleanup bcmath ldap gd pdo_pgsql pdo_sqlite pdo_mysql intl opcache memcached
RUN a2enmod rewrite && a2enmod ssl
RUN echo "hu_HU.UTF-8 UTF-8\nro_RO.UTF-8 UTF-8\nnb_NO.UTF-8 UTF-8\nde_DE.UTF-8 UTF-8\ncs_CZ.UTF-8 UTF-8\nen_US.UTF-8 UTF-8\nes_ES.UTF-8 UTF-8\nfr_FR.UTF-8 UTF-8\nid_ID.UTF-8 UTF-8\nit_IT.UTF-8 UTF-8\nnl_NL.UTF-8 UTF-8\npl_PL.UTF-8 UTF-8\npt_BR.UTF-8 UTF-8\nru_RU.UTF-8 UTF-8\ntr_TR.UTF-8 UTF-8\nzh_TW.UTF-8 UTF-8\nzh_CN.UTF-8 UTF-8\n\n" > /etc/locale.gen
RUN locale-gen
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
# Copy in Firefly III source
WORKDIR $FIREFLY_PATH
ADD . $FIREFLY_PATH
@@ -29,15 +17,6 @@ RUN chown -R www-data:www-data /var/www && \
chmod -R 775 $FIREFLY_PATH/storage && \
composer install --prefer-dist --no-dev --no-scripts --no-suggest
# copy ca certs to correct location
COPY ./.deploy/docker/cacert.pem /usr/local/ssl/cert.pem
# copy Apache config to correct spot.
COPY ./.deploy/docker/apache2.conf /etc/apache2/apache2.conf
# Enable default site (Firefly III)
COPY ./.deploy/docker/apache-firefly.conf /etc/apache2/sites-available/000-default.conf
# Expose port 80
EXPOSE 80

View File

@@ -98,15 +98,15 @@ class AttachmentController extends Controller
public function download(Attachment $attachment): LaravelResponse
{
if (false === $attachment->uploaded) {
throw new FireflyException('No file has been uploaded for this attachment (yet).');
throw new FireflyException('200000: File has not been uploaded (yet).');
}
if (0 === $attachment->size) {
throw new FireflyException('No file has been uploaded for this attachment (yet).');
throw new FireflyException('200000: File has not been uploaded (yet).');
}
if ($this->repository->exists($attachment)) {
$content = $this->repository->getContent($attachment);
if ('' === $content) {
throw new FireflyException('No file has been uploaded for this attachment (yet).');
throw new FireflyException('200002: File is empty (zero bytes).');
}
$quoted = sprintf('"%s"', addcslashes(basename($attachment->filename), '"\\'));
@@ -125,7 +125,7 @@ class AttachmentController extends Controller
return $response;
}
throw new FireflyException('Could not find the indicated attachment. The file is no longer there.');
throw new FireflyException('200003: File does not exist.');
}
/**

View File

@@ -211,20 +211,16 @@ class BillController extends Controller
*/
public function store(BillRequest $request): JsonResponse
{
$bill = $this->repository->store($request->getAll());
if (null !== $bill) {
$manager = $this->getManager();
$bill = $this->repository->store($request->getAll());
$manager = $this->getManager();
/** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class);
$transformer->setParameters($this->parameters);
/** @var BillTransformer $transformer */
$transformer = app(BillTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($bill, $transformer, 'bills');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
throw new FireflyException('Could not store new bill.'); // @codeCoverageIgnore
$resource = new Item($bill, $transformer, 'bills');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**

View File

@@ -187,19 +187,16 @@ class BudgetController extends Controller
*/
public function store(BudgetRequest $request): JsonResponse
{
$budget = $this->repository->store($request->getAll());
if (null !== $budget) {
$manager = $this->getManager();
$budget = $this->repository->store($request->getAll());
$manager = $this->getManager();
/** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class);
$transformer->setParameters($this->parameters);
/** @var BudgetTransformer $transformer */
$transformer = app(BudgetTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($budget, $transformer, 'budgets');
$resource = new Item($budget, $transformer, 'budgets');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
throw new FireflyException('Could not store new budget.'); // @codeCoverageIgnore
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**

View File

@@ -165,7 +165,7 @@ class BudgetLimitController extends Controller
$data = $request->getAll();
$budget = $this->repository->findNull($data['budget_id']);
if (null === $budget) {
throw new FireflyException('Unknown budget.');
throw new FireflyException('200004: Budget does not exist.');
}
$data['budget'] = $budget;
$budgetLimit = $this->blRepository->storeBudgetLimit($data);

View File

@@ -152,18 +152,15 @@ class CategoryController extends Controller
public function store(CategoryRequest $request): JsonResponse
{
$category = $this->repository->store($request->getAll());
if (null !== $category) {
$manager = $this->getManager();
$manager = $this->getManager();
/** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class);
$transformer->setParameters($this->parameters);
/** @var CategoryTransformer $transformer */
$transformer = app(CategoryTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($category, $transformer, 'categories');
$resource = new Item($category, $transformer, 'categories');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
throw new FireflyException('Could not store new category.'); // @codeCoverageIgnore
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**

View File

@@ -57,7 +57,7 @@ class ConfigurationController extends Controller
$admin = auth()->user();
if (!$this->repository->hasRole($admin, 'owner')) {
throw new FireflyException('No access to method.'); // @codeCoverageIgnore
throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore
}
return $next($request);

View File

@@ -313,10 +313,10 @@ class CurrencyController extends Controller
if (!$this->userRepository->hasRole($admin, 'owner')) {
// access denied:
throw new FireflyException('No access to method, user is not owner.'); // @codeCoverageIgnore
throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore
}
if ($this->repository->currencyInUse($currency)) {
throw new FireflyException('No access to method, currency is in use.'); // @codeCoverageIgnore
throw new FireflyException('200006: Currency in use.'); // @codeCoverageIgnore
}
$this->repository->destroy($currency);
@@ -574,26 +574,21 @@ class CurrencyController extends Controller
public function store(CurrencyRequest $request): JsonResponse
{
$currency = $this->repository->store($request->getAll());
if (null !== $currency) {
if (true === $request->boolean('default')) {
app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark();
}
$manager = $this->getManager();
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency);
/** @var CurrencyTransformer $transformer */
$transformer = app(CurrencyTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
if (true === $request->boolean('default')) {
app('preferences')->set('currencyPreference', $currency->code);
app('preferences')->mark();
}
throw new FireflyException('Could not store new currency.'); // @codeCoverageIgnore
$manager = $this->getManager();
$defaultCurrency = app('amount')->getDefaultCurrencyByUser(auth()->user());
$this->parameters->set('defaultCurrency', $defaultCurrency);
/** @var CurrencyTransformer $transformer */
$transformer = app(CurrencyTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($currency, $transformer, 'currencies');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**

View File

@@ -79,10 +79,10 @@ class CurrencyExchangeRateController extends Controller
$toCurrency = $this->repository->findByCodeNull($request->get('to') ?? 'USD');
if (null === $fromCurrency) {
throw new FireflyException('Unknown source currency.');
throw new FireflyException('200007: Unknown source currency');
}
if (null === $toCurrency) {
throw new FireflyException('Unknown destination currency.');
throw new FireflyException('200007: Unknown destination currency');
}
/** @var Carbon $dateObj */

View File

@@ -86,7 +86,7 @@ class LinkTypeController extends Controller
public function delete(LinkType $linkType): JsonResponse
{
if (false === $linkType->editable) {
throw new FireflyException(sprintf('You cannot delete this link type (#%d, "%s")', $linkType->id, $linkType->name));
throw new FireflyException('200020: Link type cannot be changed.');
}
$this->repository->destroy($linkType);
@@ -160,7 +160,7 @@ class LinkTypeController extends Controller
$admin = auth()->user();
if (!$this->userRepository->hasRole($admin, 'owner')) {
throw new FireflyException('You need the "owner"-role to do this.');
throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore
}
$data = $request->getAll();
// if currency ID is 0, find the currency by the code:
@@ -247,14 +247,14 @@ class LinkTypeController extends Controller
public function update(LinkTypeRequest $request, LinkType $linkType): JsonResponse
{
if (false === $linkType->editable) {
throw new FireflyException(sprintf('You cannot edit this link type (#%d, "%s")', $linkType->id, $linkType->name));
throw new FireflyException('200020: Link type cannot be changed.');
}
/** @var User $admin */
$admin = auth()->user();
if (!$this->userRepository->hasRole($admin, 'owner')) {
throw new FireflyException('You need the "owner"-role to do this.');
throw new FireflyException('200005: You need the "owner" role to do this.'); // @codeCoverageIgnore
}
$data = $request->getAll();

View File

@@ -181,19 +181,15 @@ class PiggyBankController extends Controller
public function store(PiggyBankRequest $request): JsonResponse
{
$piggyBank = $this->repository->store($request->getAll());
if (null !== $piggyBank) {
$manager = $this->getManager();
$manager = $this->getManager();
/** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class);
$transformer->setParameters($this->parameters);
/** @var PiggyBankTransformer $transformer */
$transformer = app(PiggyBankTransformer::class);
$transformer->setParameters($this->parameters);
$resource = new Item($piggyBank, $transformer, 'piggy_banks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
throw new FireflyException('Could not store new piggy bank.');
$resource = new Item($piggyBank, $transformer, 'piggy_banks');
return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json');
}
/**

View File

@@ -236,7 +236,7 @@ class RecurrenceController extends Controller
$result = $recurring->fire();
} catch (FireflyException $e) {
Log::error($e->getMessage());
throw new FireflyException('Could not fire recurring cron job.');
throw new FireflyException('200022: Error in cron job.');
}
if (false === $result) {
return response()->json([], 204);

View File

@@ -257,7 +257,7 @@ class RuleGroupController extends Controller
/** @var Collection $rules */
$rules = $this->ruleGroupRepository->getActiveRules($group);
if (0 === $rules->count()) {
throw new FireflyException('No rules in this rule group.');
throw new FireflyException('200023: No rules in this rule group.');
}
$parameters = $request->getTestParameters();
$matchingTransactions = [];

View File

@@ -165,7 +165,7 @@ class TransactionLinkController extends Controller
$inward = $this->journalRepository->findNull($data['inward_id'] ?? 0);
$outward = $this->journalRepository->findNull($data['outward_id'] ?? 0);
if (null === $inward || null === $outward) {
throw new FireflyException('Source or destination is NULL.');
throw new FireflyException('200024: Source or destination does not exist.');
}
$data['direction'] = 'inward';
@@ -196,7 +196,7 @@ class TransactionLinkController extends Controller
$data['inward'] = $this->journalRepository->findNull($data['inward_id'] ?? 0);
$data['outward'] = $this->journalRepository->findNull($data['outward_id'] ?? 0);
if (null === $data['inward'] || null === $data['outward']) {
throw new FireflyException('Source or destination is NULL.');
throw new FireflyException('200024: Source or destination does not exist.');
}
$data['direction'] = 'inward';
$journalLink = $this->repository->updateLink($journalLink, $data);

View File

@@ -83,7 +83,7 @@ class UserController extends Controller
return response()->json([], 204);
}
throw new FireflyException('No access to method.'); // @codeCoverageIgnore
throw new FireflyException('200025: No access to function.'); // @codeCoverageIgnore
}
/**

View File

@@ -30,6 +30,7 @@ use FireflyIII\Models\Transaction;
use FireflyIII\Models\TransactionJournal;
use FireflyIII\Models\TransactionType;
use Illuminate\Console\Command;
use Log;
/**
* Class FixAccountTypes
@@ -66,6 +67,7 @@ class FixAccountTypes extends Command
public function handle(): int
{
$this->stupidLaravel();
Log::debug('Now in fix-account-types');
$start = microtime(true);
$this->factory = app(AccountFactory::class);
// some combinations can be fixed by this script:
@@ -88,13 +90,16 @@ class FixAccountTypes extends Command
$this->expected = config('firefly.source_dests');
$journals = TransactionJournal::with(['TransactionType', 'transactions', 'transactions.account', 'transactions.account.accounttype'])->get();
Log::debug(sprintf('Found %d journals to fix.', $journals->count()));
foreach ($journals as $journal) {
$this->inspectJournal($journal);
}
if (0 === $this->count) {
Log::debug('No journals had to be fixed.');
$this->info('All account types are OK!');
}
if (0 !== $this->count) {
Log::debug(sprintf('%d journals had to be fixed.', $this->count));
$this->info(sprintf('Acted on %d transaction(s)!', $this->count));
}
@@ -223,21 +228,36 @@ class FixAccountTypes extends Command
*/
private function inspectJournal(TransactionJournal $journal): void
{
Log::debug(sprintf('Now trying to fix journal #%d', $journal->id));
$count = $journal->transactions()->count();
if (2 !== $count) {
Log::debug(sprintf('Journal has %d transactions, so cant fix.', $count));
$this->info(sprintf('Cannot inspect transaction journal #%d because it has %d transaction(s) instead of 2.', $journal->id, $count));
return;
}
$type = $journal->transactionType->type;
$sourceTransaction = $this->getSourceTransaction($journal);
$destTransaction = $this->getDestinationTransaction($journal);
if (null === $sourceTransaction) {
Log::error('Source transaction is unexpectedly NULL. Wont fix this journal.');
return;
}
if (null === $destTransaction) {
Log::error('Destination transaction is unexpectedly NULL. Wont fix this journal.');
return;
}
$sourceAccount = $sourceTransaction->account;
$sourceAccountType = $sourceAccount->accountType->type;
$destTransaction = $this->getDestinationTransaction($journal);
$destAccount = $destTransaction->account;
$destAccountType = $destAccount->accountType->type;
if (!isset($this->expected[$type])) {
// @codeCoverageIgnoreStart
Log::info(sprintf('No source/destination info for transaction type %s.', $type));
$this->info(sprintf('No source/destination info for transaction type %s.', $type));
return;

View File

@@ -24,10 +24,12 @@ declare(strict_types=1);
namespace FireflyIII\Factory;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Bill;
use FireflyIII\Models\TransactionCurrency;
use FireflyIII\Services\Internal\Support\BillServiceTrait;
use FireflyIII\User;
use Illuminate\Database\QueryException;
use Log;
/**
@@ -55,6 +57,7 @@ class BillFactory
* @param array $data
*
* @return Bill|null
* @throws FireflyException
*/
public function create(array $data): ?Bill
{
@@ -64,28 +67,31 @@ class BillFactory
$currency = $factory->find((int)($data['currency_id'] ?? null), (string)($data['currency_code'] ?? null));
if (null === $currency) {
// use default currency:
$currency = app('amount')->getDefaultCurrencyByUser($this->user);
}
try {
/** @var Bill $bill */
$bill = Bill::create(
[
'name' => $data['name'],
'match' => 'MIGRATED_TO_RULES',
'amount_min' => $data['amount_min'],
'user_id' => $this->user->id,
'transaction_currency_id' => $currency->id,
'amount_max' => $data['amount_max'],
'date' => $data['date'],
'repeat_freq' => $data['repeat_freq'],
'skip' => $data['skip'],
'automatch' => true,
'active' => $data['active'] ?? true,
]
);
} catch(QueryException $e) {
Log::error($e->getMessage());
Log::error($e->getTraceAsString());
throw new FireflyException('400000: Could not store bill.');
}
/** @var Bill $bill */
$bill = Bill::create(
[
'name' => $data['name'],
'match' => 'MIGRATED_TO_RULES',
'amount_min' => $data['amount_min'],
'user_id' => $this->user->id,
'transaction_currency_id' => $currency->id,
'amount_max' => $data['amount_max'],
'date' => $data['date'],
'repeat_freq' => $data['repeat_freq'],
'skip' => $data['skip'],
'automatch' => true,
'active' => $data['active'] ?? true,
]
);
// update note:
if (isset($data['notes'])) {
$this->updateNote($bill, $data['notes']);
}

View File

@@ -24,8 +24,10 @@ declare(strict_types=1);
namespace FireflyIII\Factory;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Category;
use FireflyIII\User;
use Illuminate\Database\QueryException;
use Log;
/**
@@ -62,7 +64,7 @@ class CategoryFactory
* @param null|string $categoryName
*
* @return Category|null
*
* @throws FireflyException
*/
public function findOrCreate(?int $categoryId, ?string $categoryName): ?Category
{
@@ -88,13 +90,17 @@ class CategoryFactory
if (null !== $category) {
return $category;
}
return Category::create(
[
'user_id' => $this->user->id,
'name' => $categoryName,
]
);
try {
return Category::create(
[
'user_id' => $this->user->id,
'name' => $categoryName,
]
);
} catch (QueryException $e) {
Log::error($e->getMessage());
throw new FireflyException('400003: Could not store new category.');
}
}
return null;

View File

@@ -27,6 +27,7 @@ declare(strict_types=1);
namespace FireflyIII\Factory;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\TransactionCurrency;
use Illuminate\Database\QueryException;
use Log;
@@ -51,9 +52,10 @@ class TransactionCurrencyFactory
/**
* @param array $data
*
* @return TransactionCurrency|null
* @return TransactionCurrency
* @throws FireflyException
*/
public function create(array $data): ?TransactionCurrency
public function create(array $data): TransactionCurrency
{
try {
/** @var TransactionCurrency $currency */
@@ -69,6 +71,7 @@ class TransactionCurrencyFactory
} catch (QueryException $e) {
$result = null;
Log::error(sprintf('Could not create new currency: %s', $e->getMessage()));
throw new FireflyException('400004: Could not store new currency.');
}
return $result;

View File

@@ -58,7 +58,7 @@ class TransactionGroupFactory
public function create(array $data): TransactionGroup
{
$this->journalFactory->setUser($this->user);
$this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash']);
$this->journalFactory->setErrorOnHash($data['error_if_duplicate_hash'] ?? false);
$collection = $this->journalFactory->create($data);
$title = $data['group_title'] ?? null;

View File

@@ -26,6 +26,7 @@ namespace FireflyIII\Handlers\Events;
use FireflyIII\Events\RequestedVersionCheckStatus;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Update\UpdateTrait;
use FireflyIII\Models\Configuration;
use FireflyIII\Repositories\User\UserRepositoryInterface;
@@ -78,8 +79,15 @@ class VersionCheckEventHandler
}
// last check time was more than a week ago.
Log::debug('Have not checked for a new version in a week!');
try {
$latestRelease = $this->getLatestRelease();
} catch (FireflyException $e) {
Log::error($e);
session()->flash('error', (string)trans('firefly.update_check_error'));
$latestRelease = $this->getLatestRelease();
// softfail.
return;
}
$versionCheck = $this->versionCheck($latestRelease);
$resultString = $this->parseResult($versionCheck, $latestRelease);
if (0 !== $versionCheck && '' !== $resultString) {

View File

@@ -25,8 +25,7 @@ namespace FireflyIII\Helpers\Update;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Services\Github\Object\Release;
use FireflyIII\Services\Github\Request\UpdateRequest;
use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequestInterface;
use Log;
/**
@@ -38,75 +37,54 @@ trait UpdateTrait
/**
* Get object for the latest release from GitHub.
*
* @return Release|null
* @return array
* @throws FireflyException
*/
public function getLatestRelease(): ?Release
public function getLatestRelease(): array
{
Log::debug('Now in getLatestRelease()');
$return = null;
/** @var UpdateRequest $request */
$request = app(UpdateRequest::class);
try {
$request->call();
} catch (FireflyException $e) {
Log::error(sprintf('Could not check for updates: %s', $e->getMessage()));
/** @var UpdateRequestInterface $checker */
$checker = app(UpdateRequestInterface::class);
$channel = app('fireflyconfig')->get('update_channel', 'stable')->data;
return null;
}
// get releases from array.
$releases = $request->getReleases();
Log::debug(sprintf('Found %d releases', count($releases)));
if (count($releases) > 0) {
// first entry should be the latest entry:
/** @var Release $first */
$first = reset($releases);
$return = $first;
Log::debug(sprintf('Number of releases found is larger than zero. Return %s ', $first->getTitle()));
}
return $return;
return $checker->getVersion($channel);
}
/**
* Parses the version check result in a human readable sentence.
*
* @param int $versionCheck
* @param Release|null $release
* @param int $versionCheck
* @param array $information
*
* @return string
*/
public function parseResult(int $versionCheck, Release $release = null): string
public function parseResult(int $versionCheck, array $information): string
{
Log::debug(sprintf('Now in parseResult(%d)', $versionCheck));
$current = (string)config('firefly.version');
$return = '';
$triggered = false;
if ($versionCheck === -2) {
Log::debug('-2, so give error.');
$return = (string)trans('firefly.update_check_error');
$triggered = true;
}
if ($versionCheck === -1 && null !== $release) {
$triggered = true;
Log::debug('New version!');
// there is a new FF version!
// has it been released for at least three days?
$today = new Carbon;
$releaseDate = $release->getUpdated();
if ($today->diffInDays($releaseDate) > 3) {
Log::debug('New version is older than 3 days!');
$monthAndDayFormat = (string)trans('config.month_and_day');
$return = (string)trans(
'firefly.update_new_version_alert',
[
'your_version' => $current,
'new_version' => $release->getTitle(),
'date' => $release->getUpdated()->formatLocalized($monthAndDayFormat),
]
);
if (-1 === $versionCheck) {
$triggered = true;
$monthAndDayFormat = (string)trans('config.month_and_day');
$carbon = Carbon::createFromFormat('Y-m-d', $information['date']);
$return = (string)trans(
'firefly.update_new_version_alert',
[
'your_version' => $current,
'new_version' => $information['version'],
'date' => $carbon->formatLocalized($monthAndDayFormat),
]
);
// append warning if beta or alpha.
$isBeta = $information['is_beta'] ?? false;
if (true === $isBeta) {
$return = sprintf('%s %s', $return, trans('firefly.update_version_beta'));
}
$isAlpha = $information['is_alpha'] ?? false;
if (true === $isAlpha) {
$return = sprintf('%s %s', $return, trans('firefly.update_version_alpha'));
}
}
@@ -116,19 +94,16 @@ trait UpdateTrait
// you are running the current version!
$return = (string)trans('firefly.update_current_version_alert', ['version' => $current]);
}
if (1 === $versionCheck && null !== $release) {
if (1 === $versionCheck) {
$triggered = true;
Log::debug('User is running NEWER version.');
// you are running a newer version!
$return = (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $release->getTitle()]);
$return = (string)trans('firefly.update_newer_version_alert', ['your_version' => $current, 'new_version' => $information['version']]);
}
// @codeCoverageIgnoreStart
if (false === $triggered) {
Log::debug('No option was triggered.');
$return = (string)trans('firefly.update_check_error');
}
// @codeCoverageIgnoreEnd
return $return;
}
@@ -136,22 +111,16 @@ trait UpdateTrait
/**
* Compare version and store result.
*
* @param Release|null $release
* @param array $information
*
* @return int
*/
public function versionCheck(Release $release = null): int
public function versionCheck(array $information): int
{
Log::debug('Now in versionCheck()');
if (null === $release) {
Log::debug('Release is null, return -2.');
return -2;
}
$current = (string)config('firefly.version');
$latest = $release->getTitle();
$check = version_compare($current, $latest);
Log::debug(sprintf('Comparing %s with %s, result is %s', $current, $latest, $check));
$check = version_compare($current, $information['version']);
Log::debug(sprintf('Comparing %s with %s, result is %s', $current, $information['version'], $check), $information);
return $check;
}

View File

@@ -23,10 +23,12 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Admin;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Helpers\Update\UpdateTrait;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Middleware\IsDemoUser;
use FireflyIII\Http\Middleware\IsSandStormUser;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Log;
@@ -44,7 +46,7 @@ class UpdateController extends Controller
{
parent::__construct();
$this->middleware(
function ($request, $next) {
static function ($request, $next) {
app('view')->share('title', (string)trans('firefly.administration'));
app('view')->share('mainTitleIcon', 'fa-hand-spock-o');
@@ -64,17 +66,25 @@ class UpdateController extends Controller
*/
public function index()
{
$subTitle = (string)trans('firefly.update_check_title');
$subTitleIcon = 'fa-star';
$permission = app('fireflyconfig')->get('permission_update_check', -1);
$selected = $permission->data;
$options = [
$subTitle = (string)trans('firefly.update_check_title');
$subTitleIcon = 'fa-star';
$permission = app('fireflyconfig')->get('permission_update_check', -1);
$channel = app('fireflyconfig')->get('update_channel', 'stable');
$selected = $permission->data;
$channelSelected = $channel->data;
$options = [
-1 => (string)trans('firefly.updates_ask_me_later'),
0 => (string)trans('firefly.updates_do_not_check'),
1 => (string)trans('firefly.updates_enable_check'),
];
return view('admin.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options'));
$channelOptions = [
'stable' => (string)trans('firefly.update_channel_stable'),
'beta' => (string)trans('firefly.update_channel_beta'),
'alpha' => (string)trans('firefly.update_channel_alpha'),
];
return view('admin.update.index', compact('subTitle', 'subTitleIcon', 'selected', 'options', 'channelSelected', 'channelOptions'));
}
/**
@@ -87,8 +97,11 @@ class UpdateController extends Controller
public function post(Request $request)
{
$checkForUpdates = (int)$request->get('check_for_updates');
$channel = $request->get('update_channel');
$channel = in_array($channel, ['stable', 'beta', 'alpha'], true) ? $channel : 'stable';
app('fireflyconfig')->set('permission_update_check', $checkForUpdates);
app('fireflyconfig')->set('last_update_check', time());
app('fireflyconfig')->set('update_channel', $channel);
session()->flash('success', (string)trans('firefly.configuration_updated'));
return redirect(route('admin.update-check'));
@@ -97,11 +110,33 @@ class UpdateController extends Controller
/**
* Does a manual update check.
*/
public function updateCheck()
public function updateCheck(): JsonResponse
{
$latestRelease = $this->getLatestRelease();
$versionCheck = $this->versionCheck($latestRelease);
$resultString = $this->parseResult($versionCheck, $latestRelease);
$success = true;
$latestRelease = '1.0';
$resultString = '';
$versionCheck = -2;
$channel = app('fireflyconfig')->get('update_channel', 'stable')->data;
try {
$latestRelease = $this->getLatestRelease();
} catch (FireflyException $e) {
Log::error($e->getMessage());
$success = false;
}
// if error, tell the user.
if (false === $success) {
$resultString = (string)trans('firefly.update_check_error');
session()->flash('error', $resultString);
}
// if not, compare and tell the user.
if (true === $success) {
$versionCheck = $this->versionCheck($latestRelease);
$resultString = $this->parseResult($versionCheck, $latestRelease);
}
Log::debug(sprintf('Result string is: "%s"', $resultString));
if (0 !== $versionCheck && '' !== $resultString) {
@@ -110,6 +145,11 @@ class UpdateController extends Controller
}
app('fireflyconfig')->set('last_update_check', time());
return response()->json(['result' => $resultString]);
return response()->json(
[
'result' => $resultString,
'channel' => $channel,
]
);
}
}

View File

@@ -174,9 +174,9 @@ class ReportController extends Controller
$data[$currencyId] = $data[$currencyId] ?? [
'currency_id' => $currencyId,
'currency_symbol' => $journal['currency_symbol'],
'currency_code' => $journal['currency_symbol'],
'currency_code' => $journal['currency_code'],
'currency_name' => $journal['currency_name'],
'currency_decimal_places' => $journal['currency_decimal_places'],
'currency_decimal_places' => (int)$journal['currency_decimal_places'],
];
$data[$currencyId][$period] = $data[$currencyId][$period] ?? [
'period' => $period,
@@ -218,7 +218,6 @@ class ReportController extends Controller
// loop all possible periods between $start and $end
$currentStart = clone $start;
while ($currentStart <= $end) {
$currentEnd = app('navigation')->endOfPeriod($currentStart, $preferredRange);
$key = $currentStart->format($format);
$title = $currentStart->formatLocalized($titleFormat);
$income['entries'][$title] = round($currency[$key]['earned'] ?? '0', $currency['currency_decimal_places']);

View File

@@ -78,7 +78,8 @@ class CreateController extends Controller
$defaultCurrency = app('amount')->getDefaultCurrency();
$previousUri = $this->rememberPreviousUri('transactions.create.uri');
$parts = parse_url($previousUri);
$previousUri = sprintf('%s://%s/%s', $parts['scheme'], $parts['host'] ?? '', $parts['path'] ?? '');
$search = sprintf('?%s', $parts['query'] ?? '');
$previousUri = str_replace($search, '', $previousUri);
session()->put('preFilled', $preFilled);

View File

@@ -83,7 +83,8 @@ class EditController extends Controller
$cash = $repository->getCashAccount();
$previousUri = $this->rememberPreviousUri('transactions.edit.uri');
$parts = parse_url($previousUri);
$previousUri = sprintf('%s://%s/%s', $parts['scheme'], $parts['host'], $parts['path'] ?? '');
$search = sprintf('?%s', $parts['query'] ?? '');
$previousUri = str_replace($search, '', $previousUri);
return view('transactions.edit', compact('cash', 'transactionGroup', 'allowedOpposingTypes', 'accountToTypes', 'defaultCurrency', 'previousUri'));

View File

@@ -218,6 +218,7 @@ class CreateRecurringTransactions implements ShouldQueue
$return = [];
/** @var RecurrenceTransaction $transaction */
foreach ($transactions as $index => $transaction) {
$single = [
'type' => strtolower($recurrence->transactionType->type),
'date' => $date,
@@ -242,8 +243,8 @@ class CreateRecurringTransactions implements ShouldQueue
'recurrence_id' => (int)$recurrence->id,
'order' => $index,
'notes' => (string)trans('firefly.created_from_recurrence', ['id' => $recurrence->id, 'title' => $recurrence->title]),
'tags' => $this->repository->getTags($recurrence),
'piggy_bank_id' => null,
'tags' => $this->repository->getTags($transaction),
'piggy_bank_id' => $this->repository->getPiggyBank($transaction),
'piggy_bank_name' => null,
'bill_id' => null,
'bill_name' => null,
@@ -324,7 +325,7 @@ class CreateRecurringTransactions implements ShouldQueue
Log::info(sprintf('Created new transaction group #%d', $group->id));
// link to piggy:
$this->linkGroupToPiggies($recurrence, $group);
//$this->linkGroupToPiggies($recurrence, $group);
// trigger event:
event(new StoredTransactionGroup($group, $recurrence->apply_rules));

View File

@@ -42,6 +42,8 @@ use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
use FireflyIII\Repositories\User\UserRepository;
use FireflyIII\Repositories\User\UserRepositoryInterface;
use FireflyIII\Services\Currency\ExchangeRateInterface;
use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequest;
use FireflyIII\Services\FireflyIIIOrg\Update\UpdateRequestInterface;
use FireflyIII\Services\IP\IpifyOrg;
use FireflyIII\Services\IP\IPRetrievalInterface;
use FireflyIII\Services\Password\PwndVerifierV3;
@@ -184,6 +186,8 @@ class FireflyServiceProvider extends ServiceProvider
$this->app->bind(HelpInterface::class, Help::class);
$this->app->bind(ReportHelperInterface::class, ReportHelper::class);
$this->app->bind(FiscalHelperInterface::class, FiscalHelper::class);
$this->app->bind(UpdateRequestInterface::class, UpdateRequest::class);
$class = (string)config(sprintf('firefly.cer_providers.%s', (string)config('firefly.cer_provider')));
if ('' === $class) {
throw new FireflyException('Invalid currency exchange rate provider. Cannot continue.');

View File

@@ -554,6 +554,7 @@ class AccountRepository implements AccountRepositoryInterface
{
$dbQuery = $this->user->accounts()
->where('active', 1)
->orderBy('accounts.name', 'ASC')
->with(['accountType']);
if ('' !== $query) {
$search = sprintf('%%%s%%', $query);

View File

@@ -24,6 +24,7 @@ namespace FireflyIII\Repositories\Bill;
use Carbon\Carbon;
use DB;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\BillFactory;
use FireflyIII\Models\Bill;
use FireflyIII\Models\Note;
@@ -662,9 +663,10 @@ class BillRepository implements BillRepositoryInterface
/**
* @param array $data
*
* @return Bill|null
* @return Bill
* @throws FireflyException
*/
public function store(array $data): ?Bill
public function store(array $data): Bill
{
/** @var BillFactory $factory */
$factory = app(BillFactory::class);

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\Bill;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Bill;
use FireflyIII\User;
use Illuminate\Pagination\LengthAwarePaginator;
@@ -266,9 +267,10 @@ interface BillRepositoryInterface
/**
* @param array $data
*
* @return Bill|null
* @return Bill
* @throws FireflyException
*/
public function store(array $data): ?Bill;
public function store(array $data): Bill;
/**
* @param Bill $bill

View File

@@ -73,6 +73,7 @@ class BudgetLimitRepository implements BudgetLimitRepositoryInterface
->where('budget_limits.start_date', $start->format('Y-m-d 00:00:00'))
->where('budget_limits.end_date', $end->format('Y-m-d 00:00:00'))
->where('budget_limits.transaction_currency_id', $currency->id)
->whereNull('budgets.deleted_at')
->where('budgets.user_id', $this->user->id);
if (null !== $budgets && $budgets->count() > 0) {
$query->whereIn('budget_limits.budget_id', $budgets->pluck('id')->toArray());

View File

@@ -25,6 +25,7 @@ namespace FireflyIII\Repositories\Budget;
use Carbon\Carbon;
use DB;
use Exception;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Budget;
use FireflyIII\Models\BudgetLimit;
use FireflyIII\Models\RecurrenceTransactionMeta;
@@ -32,6 +33,7 @@ use FireflyIII\Models\RuleAction;
use FireflyIII\Models\RuleTrigger;
use FireflyIII\Services\Internal\Destroy\BudgetDestroyService;
use FireflyIII\User;
use Illuminate\Database\QueryException;
use Illuminate\Support\Collection;
use Log;
@@ -269,16 +271,20 @@ class BudgetRepository implements BudgetRepositoryInterface
* @param array $data
*
* @return Budget
* @throws FireflyException
*/
public function store(array $data): Budget
{
$newBudget = new Budget(
[
'user_id' => $this->user->id,
'name' => $data['name'],
]
);
$newBudget->save();
try {
$newBudget = Budget::create(
[
'user_id' => $this->user->id,
'name' => $data['name'],
]
);
} catch(QueryException $e) {
throw new FireflyException('400002: Could not store budget.');
}
return $newBudget;
}

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\Budget;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Budget;
use FireflyIII\User;
use Illuminate\Support\Collection;
@@ -132,6 +133,7 @@ interface BudgetRepositoryInterface
* @param array $data
*
* @return Budget
* @throws FireflyException
*/
public function store(array $data): Budget;

View File

@@ -24,6 +24,7 @@ namespace FireflyIII\Repositories\Category;
use Carbon\Carbon;
use DB;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\CategoryFactory;
use FireflyIII\Models\Category;
use FireflyIII\Models\RecurrenceTransactionMeta;
@@ -239,6 +240,7 @@ class CategoryRepository implements CategoryRepositoryInterface
* @param array $data
*
* @return Category
* @throws FireflyException
*/
public function store(array $data): Category
{
@@ -246,7 +248,13 @@ class CategoryRepository implements CategoryRepositoryInterface
$factory = app(CategoryFactory::class);
$factory->setUser($this->user);
return $factory->findOrCreate(null, $data['name']);
$category = $factory->findOrCreate(null, $data['name']);
if (null === $category) {
throw new FireflyException(sprintf('400003: Could not store new category with name "%s"', $data['name']));
}
return $category;
}
/**

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\Category;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Category;
use FireflyIII\User;
use Illuminate\Support\Collection;
@@ -117,7 +118,7 @@ interface CategoryRepositoryInterface
/**
* @param array $data
*
* @throws FireflyException
* @return Category
*/
public function store(array $data): Category;

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\Currency;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\TransactionCurrencyFactory;
use FireflyIII\Models\AccountMeta;
use FireflyIII\Models\AvailableBudget;
@@ -489,14 +490,20 @@ class CurrencyRepository implements CurrencyRepositoryInterface
/**
* @param array $data
*
* @return TransactionCurrency|null
* @return TransactionCurrency
* @throws FireflyException
*/
public function store(array $data): ?TransactionCurrency
public function store(array $data): TransactionCurrency
{
/** @var TransactionCurrencyFactory $factory */
$factory = app(TransactionCurrencyFactory::class);
$result = $factory->create($data);
return $factory->create($data);
if (null === $result) {
throw new FireflyException('400004: Could not store new currency.');
}
return $result;
}
/**

View File

@@ -234,9 +234,9 @@ interface CurrencyRepositoryInterface
/**
* @param array $data
*
* @return TransactionCurrency|null
* @return TransactionCurrency
*/
public function store(array $data): ?TransactionCurrency;
public function store(array $data): TransactionCurrency;
/**
* @param TransactionCurrency $currency

View File

@@ -24,6 +24,7 @@ namespace FireflyIII\Repositories\PiggyBank;
use Carbon\Carbon;
use Exception;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\Note;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\PiggyBankEvent;
@@ -33,6 +34,7 @@ use FireflyIII\Models\TransactionJournal;
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\User;
use Illuminate\Database\QueryException;
use Illuminate\Support\Collection;
use Log;
@@ -556,13 +558,19 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
/**
* @param array $data
*
* @return PiggyBank|null
* @return PiggyBank
* @throws FireflyException
*/
public function store(array $data): ?PiggyBank
public function store(array $data): PiggyBank
{
$data['order'] = $this->getMaxOrder() + 1;
try {
/** @var PiggyBank $piggyBank */
$piggyBank = PiggyBank::create($data);
} catch(QueryException $e) {
Log::error(sprintf('Could not store piggy bank: %s',$e->getMessage()));
throw new FireflyException('400005: Could not store new piggy bank.');
}
$this->updateNote($piggyBank, $data['notes']);

View File

@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\PiggyBank;
use Carbon\Carbon;
use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\PiggyBankEvent;
use FireflyIII\Models\PiggyBankRepetition;
@@ -245,9 +246,10 @@ interface PiggyBankRepositoryInterface
*
* @param array $data
*
* @return PiggyBank|null
* @return PiggyBank
* @throws FireflyException
*/
public function store(array $data): ?PiggyBank;
public function store(array $data): PiggyBank;
/**
* Update existing piggy bank.

View File

@@ -28,7 +28,6 @@ use FireflyIII\Exceptions\FireflyException;
use FireflyIII\Factory\RecurrenceFactory;
use FireflyIII\Helpers\Collector\GroupCollectorInterface;
use FireflyIII\Models\Note;
use FireflyIII\Models\PiggyBank;
use FireflyIII\Models\Preference;
use FireflyIII\Models\Recurrence;
use FireflyIII\Models\RecurrenceMeta;
@@ -253,19 +252,17 @@ class RecurringRepository implements RecurringRepositoryInterface
}
/**
* @param Recurrence $recurrence
* @param RecurrenceTransaction $transaction
*
* @return PiggyBank|null
* @return int|null
*/
public function getPiggyBank(Recurrence $recurrence): ?PiggyBank
public function getPiggyBank(RecurrenceTransaction $transaction): ?int
{
$meta = $recurrence->recurrenceMeta;
/** @var RecurrenceMeta $metaEntry */
$meta = $transaction->recurrenceTransactionMeta;
/** @var RecurrenceTransactionMeta $metaEntry */
foreach ($meta as $metaEntry) {
if ('piggy_bank_id' === $metaEntry->name) {
$piggyId = (int)$metaEntry->value;
return $this->user->piggyBanks()->where('piggy_banks.id', $piggyId)->first(['piggy_banks.*']);
return (int)$metaEntry->value;
}
}
@@ -275,15 +272,15 @@ class RecurringRepository implements RecurringRepositoryInterface
/**
* Get the tags from the recurring transaction.
*
* @param Recurrence $recurrence
* @param RecurrenceTransaction $transaction
*
* @return array
*/
public function getTags(Recurrence $recurrence): array
public function getTags(RecurrenceTransaction $transaction): array
{
$tags = [];
/** @var RecurrenceMeta $meta */
foreach ($recurrence->recurrenceMeta as $meta) {
foreach ($transaction->recurrenceTransactionMeta as $meta) {
if ('tags' === $meta->name && '' !== $meta->value) {
$tags = explode(',', $meta->value);
}

View File

@@ -120,19 +120,19 @@ interface RecurringRepositoryInterface
public function getOccurrencesInRange(RecurrenceRepetition $repetition, Carbon $start, Carbon $end): array;
/**
* @param Recurrence $recurrence
* @return PiggyBank|null
* @param RecurrenceTransaction $transaction
* @return int|null
*/
public function getPiggyBank(Recurrence $recurrence): ?PiggyBank;
public function getPiggyBank(RecurrenceTransaction $transaction): ?int;
/**
* Get the tags from the recurring transaction.
*
* @param Recurrence $recurrence
* @param RecurrenceTransaction $transaction
*
* @return array
*/
public function getTags(Recurrence $recurrence): array;
public function getTags(RecurrenceTransaction $transaction): array;
/**
* @param Recurrence $recurrence

View File

@@ -0,0 +1,70 @@
<?php
/**
* UpdateRequest.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace FireflyIII\Services\FireflyIIIOrg\Update;
use Exception;
use FireflyIII\Exceptions\FireflyException;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\GuzzleException;
use JsonException;
use Log;
/**
* Class UpdateRequest
*/
class UpdateRequest implements UpdateRequestInterface
{
/**
* @param string $channel
*
* @return array
* @throws FireflyException
*/
public function getVersion(string $channel): array
{
$uri = config('firefly.update_endpoint');
Log::debug(sprintf('Going to call %s', $uri));
try {
$client = new Client();
$res = $client->request('GET', $uri);
} catch (GuzzleException|Exception $e) {
throw new FireflyException(sprintf('Response error from update check: %s', $e->getMessage()));
}
if (200 !== $res->getStatusCode()) {
throw new FireflyException(sprintf('Returned error code %d from update check.', $res->getStatusCode()));
}
$body = (string)$res->getBody();
try {
$json = json_decode($body, true, 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
throw new FireflyException('Invalid JSON in server response.');
}
if (!isset($json['firefly_iii'][$channel])) {
throw new FireflyException(sprintf('Unknown update channel "%s"', $channel));
}
return $json['firefly_iii'][$channel];
}
}

View File

@@ -0,0 +1,39 @@
<?php
/**
* UpdateRequestInterface.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
namespace FireflyIII\Services\FireflyIIIOrg\Update;
use FireflyIII\Exceptions\FireflyException;
/**
* Interface UpdateRequestInterface
*/
interface UpdateRequestInterface
{
/**
* @param string $channel
*
* @return array
* @throws FireflyException
*/
public function getVersion(string $channel): array;
}

View File

@@ -106,7 +106,6 @@ class AccountValidator
return false;
}
switch ($this->transactionType) {
default:
$this->destError = sprintf('AccountValidator::validateDestination cannot handle "%s", so it will always return false.', $this->transactionType);
@@ -574,7 +573,7 @@ class AccountValidator
$found = $this->accountRepository->findNull($accountId);
if (null !== $found) {
$type = $found->accountType->type;
if (in_array($type, $validTypes)) {
if (in_array($type, $validTypes, true)) {
return true;
}
$this->destError = (string)trans('validation.withdrawal_dest_bad_data', ['id' => $accountId, 'name' => $accountName]);

View File

@@ -2,6 +2,36 @@
All notable changes to this project will be documented in this file.
This project adheres to [Semantic Versioning](http://semver.org/).
## [4.8.2-alpha.1 (API 0.10.5)] - 2019-11-03
Normally I won't be detailling alpha versions in the changelog but this is a
special one. If your Firefly III installation warned you that this version has
been released, please take note that this is a **test** version and may **not**
be stable!
### Changed
- Firefly III now comes in three channels: stable, beta and alpha. You can
find the latest version for each channel on [this website](https://version.firefly-iii.org/).
- To make sure your Docker instance logs everything to `stdout`, make sure
you set the environment variable `LOG_CHANNEL` to `docker_out`. This is now
default behavior for new installations that use the `.env` file to launch
Firefly III (using Docker compose), but if you use environment variables
you may have to set this yourself. This is not a mandatory change but will
make debugging easier.
- The Docker image is now also available in AArch64.
### Fixed
- [Issue 2771](https://github.com/firefly-iii/firefly-iii/issues/2771) Recurring transactions would not hit their piggy bank.
- [Issue 2774](https://github.com/firefly-iii/firefly-iii/issues/2774) Fixed redirect issues for exotic URL's.
- [Issue 2780](https://github.com/firefly-iii/firefly-iii/issues/2780) Deleted bugs would still count in the budget overview.
- [Issue 2783](https://github.com/firefly-iii/firefly-iii/issues/2783) Fixed issue with SQLite and integers.
- [Issue 2786](https://github.com/firefly-iii/firefly-iii/issues/2786) Fix links to documentation.
## [4.8.1.8 (API 0.10.5)] - 2019-10-26
### Fixed
- [Issue 2773](https://github.com/firefly-iii/firefly-iii/issues/2773) Error when importing transactions.
## [4.8.1.7 (API 0.10.5)] - 2019-10-26
### Fixed

245
composer.lock generated
View File

@@ -525,16 +525,16 @@
},
{
"name": "doctrine/cache",
"version": "v1.8.0",
"version": "v1.8.1",
"source": {
"type": "git",
"url": "https://github.com/doctrine/cache.git",
"reference": "d768d58baee9a4862ca783840eca1b9add7a7f57"
"reference": "d4374ae95b36062d02ef310100ed33d78738d76c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/cache/zipball/d768d58baee9a4862ca783840eca1b9add7a7f57",
"reference": "d768d58baee9a4862ca783840eca1b9add7a7f57",
"url": "https://api.github.com/repos/doctrine/cache/zipball/d4374ae95b36062d02ef310100ed33d78738d76c",
"reference": "d4374ae95b36062d02ef310100ed33d78738d76c",
"shasum": ""
},
"require": {
@@ -569,6 +569,10 @@
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -577,10 +581,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -596,35 +596,34 @@
"cache",
"caching"
],
"time": "2018-08-21T18:01:43+00:00"
"time": "2019-10-28T09:31:32+00:00"
},
{
"name": "doctrine/dbal",
"version": "v2.9.2",
"version": "v2.10.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/dbal.git",
"reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9"
"reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9",
"reference": "22800bd651c1d8d2a9719e2a3dc46d5108ebfcc9",
"url": "https://api.github.com/repos/doctrine/dbal/zipball/0c9a646775ef549eb0a213a4f9bd4381d9b4d934",
"reference": "0c9a646775ef549eb0a213a4f9bd4381d9b4d934",
"shasum": ""
},
"require": {
"doctrine/cache": "^1.0",
"doctrine/event-manager": "^1.0",
"ext-pdo": "*",
"php": "^7.1"
"php": "^7.2"
},
"require-dev": {
"doctrine/coding-standard": "^5.0",
"jetbrains/phpstorm-stubs": "^2018.1.2",
"phpstan/phpstan": "^0.10.1",
"phpunit/phpunit": "^7.4",
"symfony/console": "^2.0.5|^3.0|^4.0",
"symfony/phpunit-bridge": "^3.4.5|^4.0.5"
"doctrine/coding-standard": "^6.0",
"jetbrains/phpstorm-stubs": "^2019.1",
"phpstan/phpstan": "^0.11.3",
"phpunit/phpunit": "^8.4.1",
"symfony/console": "^2.0.5|^3.0|^4.0|^5.0"
},
"suggest": {
"symfony/console": "For helpful console commands such as SQL execution and import of files."
@@ -635,7 +634,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "2.9.x-dev",
"dev-master": "2.10.x-dev",
"dev-develop": "3.0.x-dev"
}
},
@@ -649,6 +648,10 @@
"MIT"
],
"authors": [
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Roman Borschel",
"email": "roman@code-factory.org"
@@ -657,10 +660,6 @@
"name": "Benjamin Eberlei",
"email": "kontakt@beberlei.de"
},
{
"name": "Guilherme Blanco",
"email": "guilhermeblanco@gmail.com"
},
{
"name": "Jonathan Wage",
"email": "jonwage@gmail.com"
@@ -671,14 +670,25 @@
"keywords": [
"abstraction",
"database",
"db2",
"dbal",
"mariadb",
"mssql",
"mysql",
"persistence",
"oci8",
"oracle",
"pdo",
"pgsql",
"php",
"queryobject"
"postgresql",
"queryobject",
"sasql",
"sql",
"sqlanywhere",
"sqlite",
"sqlserver",
"sqlsrv"
],
"time": "2018-12-31T03:27:51+00:00"
"time": "2019-11-03T16:50:43+00:00"
},
{
"name": "doctrine/event-manager",
@@ -1717,16 +1727,16 @@
},
{
"name": "league/commonmark",
"version": "1.0.0",
"version": "1.1.0",
"source": {
"type": "git",
"url": "https://github.com/thephpleague/commonmark.git",
"reference": "7a40f2b0931602c504c2a9692d9f1e33635fd5ef"
"reference": "d927c05e9a391688b1e59a606c97465a90531789"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/7a40f2b0931602c504c2a9692d9f1e33635fd5ef",
"reference": "7a40f2b0931602c504c2a9692d9f1e33635fd5ef",
"url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d927c05e9a391688b1e59a606c97465a90531789",
"reference": "d927c05e9a391688b1e59a606c97465a90531789",
"shasum": ""
},
"require": {
@@ -1740,6 +1750,7 @@
"cebe/markdown": "~1.0",
"commonmark/commonmark.js": "0.29.0",
"erusev/parsedown": "~1.0",
"ext-json": "*",
"michelf/php-markdown": "~1.4",
"mikehaertl/php-shellcommand": "^1.4",
"phpstan/phpstan-shim": "^0.11.5",
@@ -1756,7 +1767,7 @@
"type": "library",
"extra": {
"branch-alias": {
"dev-master": "1.1-dev"
"dev-master": "1.2-dev"
}
},
"autoload": {
@@ -1783,7 +1794,7 @@
"markdown",
"parser"
],
"time": "2019-06-29T11:19:01+00:00"
"time": "2019-10-31T13:30:15+00:00"
},
{
"name": "league/csv",
@@ -2373,16 +2384,16 @@
},
{
"name": "nesbot/carbon",
"version": "2.25.3",
"version": "2.26.0",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "d07636581795383e2fea2d711212d30f941f2039"
"reference": "e01ecc0b71168febb52ae1fdc1cfcc95428e604e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/d07636581795383e2fea2d711212d30f941f2039",
"reference": "d07636581795383e2fea2d711212d30f941f2039",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/e01ecc0b71168febb52ae1fdc1cfcc95428e604e",
"reference": "e01ecc0b71168febb52ae1fdc1cfcc95428e604e",
"shasum": ""
},
"require": {
@@ -2436,7 +2447,7 @@
"datetime",
"time"
],
"time": "2019-10-20T11:05:44+00:00"
"time": "2019-10-21T21:32:25+00:00"
},
{
"name": "opis/closure",
@@ -3213,16 +3224,16 @@
},
{
"name": "psr/log",
"version": "1.1.1",
"version": "1.1.2",
"source": {
"type": "git",
"url": "https://github.com/php-fig/log.git",
"reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2"
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/php-fig/log/zipball/bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2",
"reference": "bf73deb2b3b896a9d9c75f3f0d88185d2faa27e2",
"url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801",
"reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801",
"shasum": ""
},
"require": {
@@ -3256,7 +3267,7 @@
"psr",
"psr-3"
],
"time": "2019-10-25T08:06:51+00:00"
"time": "2019-11-01T11:05:21+00:00"
},
{
"name": "psr/simple-cache",
@@ -3564,16 +3575,16 @@
},
{
"name": "symfony/console",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
"reference": "929ddf360d401b958f611d44e726094ab46a7369"
"reference": "136c4bd62ea871d00843d1bc0316de4c4a84bb78"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/console/zipball/929ddf360d401b958f611d44e726094ab46a7369",
"reference": "929ddf360d401b958f611d44e726094ab46a7369",
"url": "https://api.github.com/repos/symfony/console/zipball/136c4bd62ea871d00843d1bc0316de4c4a84bb78",
"reference": "136c4bd62ea871d00843d1bc0316de4c4a84bb78",
"shasum": ""
},
"require": {
@@ -3635,11 +3646,11 @@
],
"description": "Symfony Console Component",
"homepage": "https://symfony.com",
"time": "2019-10-07T12:36:49+00:00"
"time": "2019-10-30T12:58:49+00:00"
},
{
"name": "symfony/css-selector",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/css-selector.git",
@@ -3692,16 +3703,16 @@
},
{
"name": "symfony/debug",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/debug.git",
"reference": "cc5c1efd0edfcfd10b354750594a46b3dd2afbbe"
"reference": "5ea9c3e01989a86ceaa0283f21234b12deadf5e2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/debug/zipball/cc5c1efd0edfcfd10b354750594a46b3dd2afbbe",
"reference": "cc5c1efd0edfcfd10b354750594a46b3dd2afbbe",
"url": "https://api.github.com/repos/symfony/debug/zipball/5ea9c3e01989a86ceaa0283f21234b12deadf5e2",
"reference": "5ea9c3e01989a86ceaa0283f21234b12deadf5e2",
"shasum": ""
},
"require": {
@@ -3744,11 +3755,11 @@
],
"description": "Symfony Debug Component",
"homepage": "https://symfony.com",
"time": "2019-09-19T15:51:53+00:00"
"time": "2019-10-28T17:07:32+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
@@ -3876,16 +3887,16 @@
},
{
"name": "symfony/finder",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "5e575faa95548d0586f6bedaeabec259714e44d1"
"reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/5e575faa95548d0586f6bedaeabec259714e44d1",
"reference": "5e575faa95548d0586f6bedaeabec259714e44d1",
"url": "https://api.github.com/repos/symfony/finder/zipball/72a068f77e317ae77c0a0495236ad292cfb5ce6f",
"reference": "72a068f77e317ae77c0a0495236ad292cfb5ce6f",
"shasum": ""
},
"require": {
@@ -3921,20 +3932,20 @@
],
"description": "Symfony Finder Component",
"homepage": "https://symfony.com",
"time": "2019-09-16T11:29:48+00:00"
"time": "2019-10-30T12:53:54+00:00"
},
{
"name": "symfony/http-foundation",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "76590ced16d4674780863471bae10452b79210a5"
"reference": "38f63e471cda9d37ac06e76d14c5ea2ec5887051"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/76590ced16d4674780863471bae10452b79210a5",
"reference": "76590ced16d4674780863471bae10452b79210a5",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/38f63e471cda9d37ac06e76d14c5ea2ec5887051",
"reference": "38f63e471cda9d37ac06e76d14c5ea2ec5887051",
"shasum": ""
},
"require": {
@@ -3976,20 +3987,20 @@
],
"description": "Symfony HttpFoundation Component",
"homepage": "https://symfony.com",
"time": "2019-10-04T19:48:13+00:00"
"time": "2019-10-30T12:58:49+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "5f08141850932e8019c01d8988bf3ed6367d2991"
"reference": "56acfda9e734e8715b3b0e6859cdb4f5b28757bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/5f08141850932e8019c01d8988bf3ed6367d2991",
"reference": "5f08141850932e8019c01d8988bf3ed6367d2991",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/56acfda9e734e8715b3b0e6859cdb4f5b28757bf",
"reference": "56acfda9e734e8715b3b0e6859cdb4f5b28757bf",
"shasum": ""
},
"require": {
@@ -4068,20 +4079,20 @@
],
"description": "Symfony HttpKernel Component",
"homepage": "https://symfony.com",
"time": "2019-10-07T15:06:41+00:00"
"time": "2019-11-01T10:00:03+00:00"
},
{
"name": "symfony/mime",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "32f71570547b91879fdbd9cf50317d556ae86916"
"reference": "3c0e197529da6e59b217615ba8ee7604df88b551"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/32f71570547b91879fdbd9cf50317d556ae86916",
"reference": "32f71570547b91879fdbd9cf50317d556ae86916",
"url": "https://api.github.com/repos/symfony/mime/zipball/3c0e197529da6e59b217615ba8ee7604df88b551",
"reference": "3c0e197529da6e59b217615ba8ee7604df88b551",
"shasum": ""
},
"require": {
@@ -4127,7 +4138,7 @@
"mime",
"mime-type"
],
"time": "2019-09-19T17:00:15+00:00"
"time": "2019-10-30T12:58:49+00:00"
},
{
"name": "symfony/polyfill-ctype",
@@ -4590,16 +4601,16 @@
},
{
"name": "symfony/process",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
"reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b"
"reference": "3b2e0cb029afbb0395034509291f21191d1a4db0"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/process/zipball/50556892f3cc47d4200bfd1075314139c4c9ff4b",
"reference": "50556892f3cc47d4200bfd1075314139c4c9ff4b",
"url": "https://api.github.com/repos/symfony/process/zipball/3b2e0cb029afbb0395034509291f21191d1a4db0",
"reference": "3b2e0cb029afbb0395034509291f21191d1a4db0",
"shasum": ""
},
"require": {
@@ -4635,7 +4646,7 @@
],
"description": "Symfony Process Component",
"homepage": "https://symfony.com",
"time": "2019-09-26T21:17:10+00:00"
"time": "2019-10-28T17:07:32+00:00"
},
{
"name": "symfony/psr-http-message-bridge",
@@ -4704,16 +4715,16 @@
},
{
"name": "symfony/routing",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/routing.git",
"reference": "3b174ef04fe66696524efad1e5f7a6c663d822ea"
"reference": "63a9920cc86fcc745e5ea254e362f02b615290b9"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/routing/zipball/3b174ef04fe66696524efad1e5f7a6c663d822ea",
"reference": "3b174ef04fe66696524efad1e5f7a6c663d822ea",
"url": "https://api.github.com/repos/symfony/routing/zipball/63a9920cc86fcc745e5ea254e362f02b615290b9",
"reference": "63a9920cc86fcc745e5ea254e362f02b615290b9",
"shasum": ""
},
"require": {
@@ -4776,7 +4787,7 @@
"uri",
"url"
],
"time": "2019-10-04T20:57:10+00:00"
"time": "2019-10-30T12:58:49+00:00"
},
{
"name": "symfony/service-contracts",
@@ -4838,16 +4849,16 @@
},
{
"name": "symfony/translation",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
"reference": "fe6193b066c457c144333c06aaa869a2d42a167f"
"reference": "a3aa590ce944afb3434d7a55f81b00927144d5ec"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/translation/zipball/fe6193b066c457c144333c06aaa869a2d42a167f",
"reference": "fe6193b066c457c144333c06aaa869a2d42a167f",
"url": "https://api.github.com/repos/symfony/translation/zipball/a3aa590ce944afb3434d7a55f81b00927144d5ec",
"reference": "a3aa590ce944afb3434d7a55f81b00927144d5ec",
"shasum": ""
},
"require": {
@@ -4910,7 +4921,7 @@
],
"description": "Symfony Translation Component",
"homepage": "https://symfony.com",
"time": "2019-09-27T14:37:39+00:00"
"time": "2019-10-30T12:53:54+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -4971,16 +4982,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "bde8957fc415fdc6964f33916a3755737744ff05"
"reference": "ea4940845535c85ff5c505e13b3205b0076d07bf"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/bde8957fc415fdc6964f33916a3755737744ff05",
"reference": "bde8957fc415fdc6964f33916a3755737744ff05",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/ea4940845535c85ff5c505e13b3205b0076d07bf",
"reference": "ea4940845535c85ff5c505e13b3205b0076d07bf",
"shasum": ""
},
"require": {
@@ -5043,20 +5054,20 @@
"debug",
"dump"
],
"time": "2019-10-04T19:48:13+00:00"
"time": "2019-10-13T12:02:04+00:00"
},
{
"name": "tightenco/collect",
"version": "v6.4.0",
"version": "v6.4.1",
"source": {
"type": "git",
"url": "https://github.com/tightenco/collect.git",
"reference": "48b88a0e488fba617f077e0f89bae286b35d9eef"
"reference": "9796fcd7ad3286dda60d0cf5120afbff8e3b9db6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tightenco/collect/zipball/48b88a0e488fba617f077e0f89bae286b35d9eef",
"reference": "48b88a0e488fba617f077e0f89bae286b35d9eef",
"url": "https://api.github.com/repos/tightenco/collect/zipball/9796fcd7ad3286dda60d0cf5120afbff8e3b9db6",
"reference": "9796fcd7ad3286dda60d0cf5120afbff8e3b9db6",
"shasum": ""
},
"require": {
@@ -5093,7 +5104,7 @@
"collection",
"laravel"
],
"time": "2019-10-23T14:47:45+00:00"
"time": "2019-10-23T21:04:40+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
@@ -5514,16 +5525,16 @@
},
{
"name": "composer/composer",
"version": "1.9.0",
"version": "1.9.1",
"source": {
"type": "git",
"url": "https://github.com/composer/composer.git",
"reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5"
"reference": "bb01f2180df87ce7992b8331a68904f80439dd2f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/composer/composer/zipball/314aa57fdcfc942065996f59fb73a8b3f74f3fa5",
"reference": "314aa57fdcfc942065996f59fb73a8b3f74f3fa5",
"url": "https://api.github.com/repos/composer/composer/zipball/bb01f2180df87ce7992b8331a68904f80439dd2f",
"reference": "bb01f2180df87ce7992b8331a68904f80439dd2f",
"shasum": ""
},
"require": {
@@ -5590,7 +5601,7 @@
"dependency",
"package"
],
"time": "2019-08-02T18:55:33+00:00"
"time": "2019-11-01T16:20:17+00:00"
},
{
"name": "composer/semver",
@@ -6769,16 +6780,16 @@
},
{
"name": "phpunit/phpunit",
"version": "8.4.1",
"version": "8.4.2",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
"reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869"
"reference": "a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"reference": "366a4a0f2b971fd43b7c351d621e8dd7d7131869",
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b",
"reference": "a142a7e66c0ea7b5b6c04ee27f08d10d1137cd9b",
"shasum": ""
},
"require": {
@@ -6848,7 +6859,7 @@
"testing",
"xunit"
],
"time": "2019-10-07T12:57:41+00:00"
"time": "2019-10-28T10:39:51+00:00"
},
{
"name": "roave/security-advisories",
@@ -6856,12 +6867,12 @@
"source": {
"type": "git",
"url": "https://github.com/Roave/SecurityAdvisories.git",
"reference": "eb59d9f35a47f567ae15e7179d7c666489cd4b85"
"reference": "f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/eb59d9f35a47f567ae15e7179d7c666489cd4b85",
"reference": "eb59d9f35a47f567ae15e7179d7c666489cd4b85",
"url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa",
"reference": "f8c8349a4b12a26edfa8b21d07d3dbeb6dcedcfa",
"shasum": ""
},
"conflict": {
@@ -7064,7 +7075,7 @@
}
],
"description": "Prevents installation of composer packages with known security vulnerabilities: no API, simply require it",
"time": "2019-10-09T14:04:58+00:00"
"time": "2019-10-29T22:11:03+00:00"
},
{
"name": "sebastian/code-unit-reverse-lookup",
@@ -7776,7 +7787,7 @@
},
{
"name": "symfony/filesystem",
"version": "v4.3.5",
"version": "v4.3.6",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",

View File

@@ -125,7 +125,7 @@ return [
'is_demo_site' => false,
],
'encryption' => null === env('USE_ENCRYPTION') || env('USE_ENCRYPTION') === true,
'version' => '4.8.1.7',
'version' => '4.8.2-alpha.2',
'api_version' => '0.10.5',
'db_version' => 11,
'maxUploadSize' => 15242880,
@@ -145,6 +145,7 @@ return [
'disable_frame_header' => env('DISABLE_FRAME_HEADER', false),
'login_provider' => envNonEmpty('LOGIN_PROVIDER', 'eloquent'),
'cer_provider' => envNonEmpty('CER_PROVIDER', 'fixer'),
'update_endpoint' => 'https://version.firefly-iii.org/index.json',
'allowedMimes' => [
/* plain files */
'text/plain',
@@ -683,13 +684,13 @@ return [
'source_dests' => [
TransactionTypeModel::WITHDRAWAL => [
AccountType::ASSET => [AccountType::EXPENSE, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE, AccountType::CASH],
AccountType::LOAN => [AccountType::EXPENSE],
AccountType::DEBT => [AccountType::EXPENSE],
AccountType::MORTGAGE => [AccountType::EXPENSE],
AccountType::LOAN => [AccountType::EXPENSE, AccountType::CASH],
AccountType::DEBT => [AccountType::EXPENSE, AccountType::CASH],
AccountType::MORTGAGE => [AccountType::EXPENSE, AccountType::CASH],
],
TransactionTypeModel::DEPOSIT => [
AccountType::REVENUE => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE],
AccountType::CASH => [AccountType::ASSET],
AccountType::CASH => [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE],
AccountType::LOAN => [AccountType::ASSET],
AccountType::DEBT => [AccountType::ASSET],
AccountType::MORTGAGE => [AccountType::ASSET],

View File

@@ -69,6 +69,11 @@ return [
'path' => 'php://stdout',
'level' => envNonEmpty('APP_LOG_LEVEL', 'info'),
],
'docker_out' => [
'driver' => 'single',
'path' => 'php://stdout',
'level' => envNonEmpty('APP_LOG_LEVEL', 'info'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/ff3-' . PHP_SAPI . '.log'),

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Zjistit dostupno případných aktualizací nyní',
'admin_update_check_now_explain' => 'Stisknutím tohoto tlačítka Firefly III ověří, zda používáte nejnovější verzi.',
'check_for_updates_button' => 'Zkontrolovat nyní!',
'update_new_version_alert' => 'Je k dispozici nová verze Firefly III. Nyní provozujete verzi :your_version, nejnovější verze je :new_version, která byla vydaná :date.',
'update_current_version_alert' => 'Provozujete verzi :version, která je nejnovější dostupnou verzí.',
'update_newer_version_alert' => 'Provozujete verzi :your_version, zatímco nejnovější vydání je verze :new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'Došlo k chybě při zjišťování případných aktualizací. Podívejte se do souborů se záznamem událostí.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Hledat',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.',
'split_transaction_title' => 'Popis rozúčtování',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'Pokud vytvoříte rozúčtování, je třeba, aby zde byl celkový popis pro všechna rozúčtování dané transakce.',
'transaction_information' => 'Informace o transakci',
'you_create_transfer' => 'Vytváříte <strong>převod</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Matches on',
'strict' => 'Striktní režim',
'repeat_freq' => 'Repeats',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Měna',
'currency_id' => 'Měna',
'transaction_currency_id' => 'Měna',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Auf Update überprüfen',
'admin_update_check_now_explain' => 'Wenn Sie den Knopf drücken, wird Firefly III überprüfen, ob Ihre Version die aktuellste ist.',
'check_for_updates_button' => 'Jetzt prüfen!',
'update_new_version_alert' => 'Eine neue Version von Firefly III ist verfügbar. Sie verwenden v:your_version, die neueste Version ist v:new_version und wurde am :date veröffentlicht.',
'update_current_version_alert' => 'Sie verwenden Version v:version. Dies ist die neueste verfügbare Version.',
'update_newer_version_alert' => 'Sie verwenden v:your_version. Ihre Version ist neuer als die neueste Version (v:new_version).',
'update_new_version_alert' => 'Eine neue Version von Firefly III ist verfügbar. Sie verwenden :your_version, die neueste Version ist :new_version, die am :date veröffentlicht wurde.',
'update_version_beta' => 'Seien Sie vorsichtig bei der Verwendung dieser BETA-Version. Sie könnte noch Fehler enthaltern.',
'update_version_alpha' => 'Seien Sie vorsichtig bei der Verwendung dieser APLPHA-Version. Sie kann Fehler enthaltern.',
'update_current_version_alert' => 'Sie verwenden Version :version. Dies ist die neueste verfügbare Version.',
'update_newer_version_alert' => 'Sie verwenden :your_version. Ihre Version ist neuer als die neueste Version (:new_version).',
'update_check_error' => 'Beim Suchen nach Updates ist ein Fehler aufgetreten. Bitte sehen Sie sich die Log-Dateien an.',
'admin_update_channel_title' => 'Aktualisierungskanal',
'admin_update_channel_explain' => 'Firefly III verfügt über drei Aktualisierungskanäle, welche bestimmen, wie weit Sie in Bezug auf Funktionen, Verbesserungen und Fehler experimentierfreudig sind. Nutzen Sie den „Beta”-Kanal, wenn Sie abenteuerlustig sind, und den „Alpha”-Kanal, wenn Sie ein gefährliches Leben führen möchten.',
'update_channel_stable' => 'Stabil — Alles sollte wie erwartet funktionieren.',
'update_channel_beta' => 'Beta — Neue Funktionen, aber einige Funktionen könnten fehlerhaft sein.',
'update_channel_alpha' => 'Alpha — Wir experiementieren mit neuen Dingen und benutzen die noch Fallstricke enthalten.',
// search
'search' => 'Suche',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Der Test wurde ausgelöst. Überprüfen Sie Ihren Posteingang und die Protokolldateien.',
'split_transaction_title' => 'Beschreibung der Splittbuchung',
'split_transaction_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchung geben.',
'split_title_help' => 'Wenn Sie eine Splittbuchung anlegen, muss es eine eindeutige Beschreibung für alle Aufteilungen der Buchhaltung geben.',
'transaction_information' => 'Buchungsinformation',
'you_create_transfer' => 'Sie erstellen gerade eine <strong>Umbuchung</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Reagiert auf',
'strict' => 'Strenger Modus',
'repeat_freq' => 'Wiederholungen',
'update_channel' => 'Aktualisierungskanal',
'journal_currency_id' => 'Währung',
'currency_id' => 'Währung',
'transaction_currency_id' => 'Währung',

View File

@@ -45,7 +45,7 @@ return [
'at_least_one_repetition' => 'Mindestens eine Wiederholung erforderlich.',
'require_repeat_until' => 'Erfordert entweder eine Anzahl von Wiederholungen oder ein Enddatum (repeat_until). Nicht beides.',
'require_currency_info' => 'Der Inhalt dieses Feldes ist ohne Währungsinformationen ungültig.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'not_transfer_account' => 'Dieses Konto ist kein Konto, welches für Buchungen genutzt werden kann.',
'require_currency_amount' => 'Der Inhalt dieses Feldes ist ohne Fremdbetragsangaben ungültig.',
'equal_description' => 'Die Transaktionsbeschreibung darf nicht der globalen Beschreibung entsprechen.',
'file_invalid_mime' => 'Die Datei „:name” ist vom Typ „:mime”, welcher nicht zum Hochladen zugelassen ist.',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Έλεγχος για ενημερώσεις τώρα',
'admin_update_check_now_explain' => 'Εάν πατήσετε αυτό του κουμπί, το Firefly III θα ελέγξει εάν έχετε την τελευταία έκδοση.',
'check_for_updates_button' => 'Έλεγχος τώρα!',
'update_new_version_alert' => 'Μία νέα έκδοση του Firefly III είναι διαθέσιμη. Έχετε την v:your_version, ενώ η τελευταία έκδοση είναι η v:new_version που κυκλοφόρησε στις :date.',
'update_current_version_alert' => 'Έχετε την έκδοση v:version, που είναι η τελευταία διαθέσιμη.',
'update_newer_version_alert' => 'Έχετε την έκδοση v:your_version, που είναι νεότερη από την τελευταία έκδοση, v:new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'Ένα σφάλμα παρουσιάστηκε κατά τον έλεγχο ενημερώσεων. Παρακαλώ δείτε τα αρχεία καταγραφής.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Αναζήτηση',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.',
'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'transaction_information' => 'Transaction information',
'you_create_transfer' => 'You\'re creating a <strong>transfer</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Αντιστοιχίες στις',
'strict' => 'Αυστηρή λειτουργία',
'repeat_freq' => 'Επαναλήψεις',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Νόμισμα',
'currency_id' => 'Νόμισμα',
'transaction_currency_id' => 'Νόμισμα',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Check for updates now',
'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.',
'check_for_updates_button' => 'Check now!',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running v:your_version, the latest version is v:new_version which was released on :date.',
'update_current_version_alert' => 'You are running v:version, which is the latest available release.',
'update_newer_version_alert' => 'You are running v:your_version, which is newer than the latest release, v:new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'An error occurred while checking for updates. Please view the log files.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Search',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Test was triggered. Check your inbox and the log files.',
'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'transaction_information' => 'Transaction information',
'you_create_transfer' => 'You\'re creating a <strong>transfer</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Matches on',
'strict' => 'Strict mode',
'repeat_freq' => 'Repeats',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Currency',
'currency_id' => 'Currency',
'transaction_currency_id' => 'Currency',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Ver actualizaciones ahora',
'admin_update_check_now_explain' => 'SI usted presiona el botón, Firefly III vera si su actual versión es la última.',
'check_for_updates_button' => '¡Ver ahora!',
'update_new_version_alert' => 'Una nueva versión de Firefly III esta disponible. Usted esta ejecutando v:your_version, la ultima versión es v:new_version que se lanzo en :date.',
'update_current_version_alert' => 'Usted esta ejecutando v:version, que es la ultima versión disponible.',
'update_newer_version_alert' => 'Usted esta ejecutando v:your_version, que es mas nueva que la versión anterior, v:new_version.',
'update_new_version_alert' => 'Una nueva versión de Firefly III esta disponible. Usted esta ejecutando :your_version, la ultima versión es :new_version que se lanzó en :date.',
'update_version_beta' => 'Esta versión es una versión BETA. Puede tener problemas.',
'update_version_alpha' => 'Esta versión es una versión de ALPHA. Puede tener problemas.',
'update_current_version_alert' => 'Usted esta ejecutando :version, que es la última versión disponible.',
'update_newer_version_alert' => 'Usted esta ejecutando :your_version, que es mas nueva que la última versión, :new_version.',
'update_check_error' => 'Un error ha ocurrido mientras se verificaban las actualizaciones. Por favor ver los archivos de registro.',
'admin_update_channel_title' => 'Canal de actualizaciones',
'admin_update_channel_explain' => 'Firefly III tiene tres "canales" de actualización que determinan cuán por delante está en términos de características, mejoras y errores. Use el canal "beta" si es aventurero y el "alfa" cuando quiera vivir la vida peligrosamente.',
'update_channel_stable' => 'Estable. Todo debería funcionar como se espera.',
'update_channel_beta' => 'Beta. Nuevas funcionalidades, pero las cosas pueden romperse.',
'update_channel_alpha' => 'Alpha. Tiramos cosas y usamos lo que sea que se pegue.',
// search
'search' => 'Buscar',
@@ -1164,7 +1171,7 @@ return [
'left_to_spend' => 'Dejar para gastar',
'earned' => 'Ganado',
'overspent' => 'Sobrepasadas',
'left' => 'Izquierda',
'left' => 'Para gastar',
'max-amount' => 'Cantidad máxima',
'min-amount' => 'Monto mínimo',
'journal-amount' => 'Entrada actual de factura',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'La prueba fue disparada. Chequee su bandeja de entrada y archivos de registro.',
'split_transaction_title' => 'Descripción de la transacción dividida',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'Si crea una transacción dividida, debe haber una descripción global para todos los fragmentos de la transacción.',
'transaction_information' => 'Información de la transacción',
'you_create_transfer' => 'Estás creando una <strong>transferencia</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Encuentros en',
'strict' => 'Modo estricto',
'repeat_freq' => 'Repetición',
'update_channel' => 'Canal de actualizaciones',
'journal_currency_id' => 'Divisa',
'currency_id' => 'Divisa',
'transaction_currency_id' => 'Moneda',

View File

@@ -45,7 +45,7 @@ return [
'at_least_one_repetition' => 'Se necesita al menos una repetición.',
'require_repeat_until' => 'Se precisa un número de repeticiones o una fecha de finalización (repeat_until). No ambas.',
'require_currency_info' => 'El contenido de este campo no es válido sin la información montearia.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'not_transfer_account' => 'Esta cuenta no es una cuenta que se pueda utilizar para transferencias.',
'require_currency_amount' => 'El contenido de este campo no es válido sin información de cantidad extranjera.',
'equal_description' => 'La descripción de la transacción no debería ser igual a la descripción global.',
'file_invalid_mime' => 'El archivo ":name" es de tipo ":mime", el cual no se acepta.',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -134,8 +134,8 @@ return [
'show_the_current_period_and_overview' => 'Afficher lexercice en cours et sa vue densemble',
'pref_languages_locale' => 'Pour une langue autre que langlais et pour fonctionner correctement, votre système dexploitation doit être équipé avec les paramètres régionaux correctes. Si ils ne sont pas présents, les données de devises, les dates et les montants peuvent être mal formatés.',
'budget_in_period' => 'Toutes les transactions pour le budget ":name" entre :start et :end dans la monnaie :currency',
'chart_budget_in_period' => 'Chart for all transactions for budget ":name" between :start and :end in :currency',
'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.',
'chart_budget_in_period' => 'Graphique pour toutes les transactions pour le budget ":name" entre :start et :end dans :currency',
'chart_budget_in_period_only_currency' => 'Le montant que vous avez budgété était en :currency, ce graphique ne montrera donc que les transactions dans :currency.',
'chart_account_in_period' => 'Graphique pour toutes les transactions pour le compte ":name" entre :start et :end',
'chart_category_in_period' => 'Graphique pour toutes les transactions pour la catégorie ":name" entre :start et :end',
'chart_category_all' => 'Graphique pour toutes les transactions pour la catégorie ":name"',
@@ -208,7 +208,7 @@ return [
'scopes_will_be_able' => 'Cette application pourra :',
'button_authorize' => 'Autoriser',
'none_in_select_list' => '(aucun)',
'no_piggy_bank' => '(no piggy bank)',
'no_piggy_bank' => '(aucune tirelire)',
'name_in_currency' => ':name en :currency',
'paid_in_currency' => 'Payé en :currency',
'unpaid_in_currency' => 'Non payé en :currency',
@@ -225,9 +225,16 @@ return [
'admin_update_check_now_explain' => 'Si vous appuyez sur le bouton, Firefly III verra si votre version actuelle est la dernière.',
'check_for_updates_button' => 'Vérifier maintenant !',
'update_new_version_alert' => 'Une nouvelle version de Firefly III est disponible. Vous utilisez v:your_version, la dernière version est v:new_version qui a été publiée le :date.',
'update_version_beta' => 'Cette version est une version BETA. Vous pouvez rencontrer des problèmes.',
'update_version_alpha' => 'Cette version est une version ALPHA. Vous pourriez rencontrer des problèmes.',
'update_current_version_alert' => 'Vous utilisez v:version, qui est la dernière version disponible.',
'update_newer_version_alert' => 'Vous utilisez v:your_version, qui est plus récente que la dernière version, v:new_version.',
'update_check_error' => 'Une erreur s\'est produite lors de la recherche des mises à jour. S\'il vous plaît allez voir les fichiers journaux.',
'admin_update_channel_title' => 'Canal de mise à jour',
'admin_update_channel_explain' => 'Firefly III dispose de trois canaux de mise à jour qui déterminent ce que vous êtes prêt à accepter en termes de fonctionnalités, d\'améliorations et de bogues. Utilisez le canal « bêta » si vous êtes aventurier et le « alpha » lorsque vous aimez vivre dangereusement.',
'update_channel_stable' => 'Stable. Tout devrait fonctionner comme prévu.',
'update_channel_beta' => 'Bêta. De nouvelles fonctionnalités sont présentes, mais il peut exister des régressions.',
'update_channel_alpha' => 'Alpha. Nous essayons des choses et gardons ce qui fonctionne.',
// search
'search' => 'Rechercher',
@@ -255,8 +262,8 @@ return [
'search_modifier_on' => 'La date de l\'opération est :value',
'search_modifier_before' => 'La date de l\'opération est avant :value',
'search_modifier_after' => 'La date de l\'opération est après :value',
'search_modifier_created_on' => 'Transaction was created on :value',
'search_modifier_updated_on' => 'Transaction was last updated on :value',
'search_modifier_created_on' => 'La transaction a été créée sur :value',
'search_modifier_updated_on' => 'La transaction a été mise à jour pour la dernière fois sur :value',
'modifiers_applies_are' => 'Les modificateurs suivants sont aussi appliqués à la recherche :',
'general_search_error' => 'Une erreur s\'est produite lors de la recherche. Veuillez vérifier les fichiers journaux pour plus d\'informations.',
'search_box' => 'Rechercher',
@@ -540,13 +547,13 @@ return [
'optional_field_meta_data' => 'Métadonnées facultatives',
// profile:
'permanent_delete_stuff' => 'Be careful with these buttons. Deleting stuff is permanent.',
'delete_all_budgets' => 'Delete ALL your budgets',
'delete_all_categories' => 'Delete ALL your categories',
'delete_all_tags' => 'Delete ALL your tags',
'deleted_all_budgets' => 'All budgets have been deleted',
'deleted_all_categories' => 'All categories have been deleted',
'deleted_all_tags' => 'All tags have been deleted',
'permanent_delete_stuff' => 'Attention à ces boutons. Ce que vous supprimez l\'est de façon définitive.',
'delete_all_budgets' => 'Supprimer TOUS vos budgets',
'delete_all_categories' => 'Supprimer toutes vos catégories',
'delete_all_tags' => 'Supprimer tous vos tags',
'deleted_all_budgets' => 'Tous les budgets ont été supprimés',
'deleted_all_categories' => 'Toutes les catégories ont été supprimées',
'deleted_all_tags' => 'Tous les étiquettes ont été supprimés',
'change_your_password' => 'Modifier votre mot de passe',
'delete_account' => 'Supprimer le compte',
'current_password' => 'Mot de passe actuel',
@@ -731,7 +738,7 @@ return [
// bills:
'match_between_amounts' => 'La facture correspond à des transactions entre :low et :high.',
'running_again_loss' => 'Previously linked transactions to this bill may lose their connection, if they (no longer) match the rule(s).',
'running_again_loss' => 'Les transactions précédemment liées à cette facture peuvent perdre leur connexion, s\'ils ne correspondent plus à la ou les règles.',
'bill_related_rules' => 'Règles reliées à cette facture',
'repeats' => 'Répétitions',
'connected_journals' => 'Opérations liées',
@@ -759,9 +766,9 @@ return [
'list_inactive_rule' => 'règle inactive',
// accounts:
'inactive_account_link' => 'You have :count inactive (archived) accounts, which you can view on this separate page.',
'all_accounts_inactive' => 'These are your inactive accounts.',
'active_account_link' => 'This link goes back to your active accounts.',
'inactive_account_link' => 'Vous avez :count comptes inactifs (archivés), que vous pouvez voir sur cette autre page.',
'all_accounts_inactive' => 'Voici vos comptes inactifs.',
'active_account_link' => 'Ce lien renvoie à vos comptes actifs.',
'account_missing_transaction' => 'Le compte #:id (":name") ne peut pas être consulter directement et Firefly III ne dispose d\'aucune information pour vous rediriger.',
'details_for_asset' => 'Détails pour le compte dactif ":name"',
'details_for_expense' => 'Détails du compte de dépenses ":name"',
@@ -789,9 +796,9 @@ return [
'make_new_revenue_account' => 'Créer un nouveau compte de recettes',
'make_new_liabilities_account' => 'Créer un nouveau passif',
'asset_accounts' => 'Comptes dactif',
'asset_accounts_inactive' => 'Asset accounts (inactive)',
'asset_accounts_inactive' => 'Comptes d\'actifs (inactif)',
'expense_accounts' => 'Comptes de dépenses',
'expense_accounts_inactive' => 'Expense accounts (inactive)',
'expense_accounts_inactive' => 'Comptes de dépenses (inactif)',
'revenue_accounts' => 'Comptes de recettes',
'cash_accounts' => 'Comptes de trésorerie',
'Cash account' => 'Compte de trésorerie',
@@ -878,7 +885,7 @@ return [
// transactions:
'update_withdrawal' => 'Mettre à jour un retrait',
'update_deposit' => 'Mettre à jour un dépôt',
'update_transaction' => 'Update transaction',
'update_transaction' => 'Mettre à jour la transaction',
'update_transfer' => 'Mettre à jour un transfert',
'updated_withdrawal' => 'Retrait ":description" mis à jour',
'updated_deposit' => 'Dépôt ":description" mis à jour',
@@ -935,7 +942,7 @@ return [
'tag_report_chart_single_tag' => 'Ce graphique s\'applique à un seul mots-clé. Si une transaction a plusieurs mots-clés, ce que vous voyez ici peut être reflété dans les graphiques d\'autres mots-clés également.',
'tag' => 'Mot-clé',
'no_budget_squared' => '(pas de budget)',
'perm-delete-many' => 'Supprimer beaucoup d\'éléments d\'un coup peut être très turbulent. Soyez prudent. Vous pouvez supprimer une partie d\'une opération scindée de cette page, alors faites attention.',
'perm-delete-many' => 'Supprimer beaucoup d\'éléments d\'un coup peut être très perturbateur. Soyez prudent. Vous pouvez supprimer une partie d\'une opération scindée à partir de cette page, alors faites attention.',
'mass_deleted_transactions_success' => 'Montant des opérations supprimées : :amount.',
'mass_edited_transactions_success' => 'Montant des opérations mises à jour : :amount',
'opt_group_' => '(aucun type de compte)',
@@ -960,7 +967,7 @@ return [
// new user:
'welcome' => 'Bienvenue sur Firefly III !',
'submit' => 'Soumettre',
'submission' => 'Submission',
'submission' => 'Soumission',
'submit_yes_really' => 'Soumettre (je sais ce que je fais)',
'getting_started' => 'Mise en route',
'to_get_started' => 'Vous venez d\'installer Firefly III avec succès. Pour commencer avec cet outil, entrez le nom de votre banque et le solde de votre compte courant principal. Ne vous inquiétez pas si vous avez plusieurs comptes. Vous pourrez les ajouter plus tard. Firefly III a simplement besoin de quelque chose pour commencer.',
@@ -1166,7 +1173,7 @@ return [
'overspent' => 'Trop dépensé',
'left' => 'Reste',
'max-amount' => 'Montant maximum',
'min-amount' => 'Minimum amount',
'min-amount' => 'Montant minimum',
'journal-amount' => 'Entrée de la facture courante',
'name' => 'Nom',
'date' => 'Date',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Le test a été initié. Vérifiez votre boîte de réception (et les logs si nécessaire).',
'split_transaction_title' => 'Description de l\'opération ventilée',
'split_transaction_title_help' => 'Si vous créez une opération ventilée, il doit y avoir une description globale pour chaque fraction de l\'opération.',
'split_title_help' => 'Si vous créez une opération ventilée, il doit y avoir une description globale pour chaque fractions de l\'opération.',
'transaction_information' => 'Informations sur l\'opération',
'you_create_transfer' => 'Vous êtes en train de créer un <strong>transfert</strong>.',
@@ -1352,11 +1360,11 @@ return [
'breadcrumb_convert_group' => 'Convertir l\'opération',
'convert_invalid_source' => 'La source est invalide pour l\'opération n°%d.',
'convert_invalid_destination' => 'Le compte de destination est invalide pour l\'opération n°%d.',
'create_another' => 'After storing, return here to create another one.',
'after_update_create_another' => 'After updating, return here to continue editing.',
'store_as_new' => 'Store as a new transaction instead of updating.',
'reset_after' => 'Reset form after submission',
'errors_submission' => 'There was something wrong with your submission. Please check out the errors below.',
'create_another' => 'Après enregistrement, revenir ici pour en créer un nouveau.',
'after_update_create_another' => 'Après la mise à jour, revenir ici pour continuer l\'édition.',
'store_as_new' => 'Enregistrer comme une nouvelle transaction au lieu de mettre à jour.',
'reset_after' => 'Réinitialiser le formulaire après soumission',
'errors_submission' => 'Certaines informations ne sont pas correctes dans votre formulaire. Veuillez vérifier les erreurs ci-dessous.',
// Import page (general strings only)
'import_index_title' => 'Importer des opérations dans Firefly III',
@@ -1384,11 +1392,11 @@ return [
'no_accounts_imperative_liabilities' => 'Vous nêtes pas obligé d\'utiliser cette fonctionnalité, mais elle peut être utile si vous souhaitez garder une trace de ces éléments.',
'no_accounts_create_liabilities' => 'Créer un passif',
'no_budgets_title_default' => 'Nous allons créer un budget',
'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.',
'no_budgets_intro_default' => 'Vous n\'avez pas encore de budget. Les budgets sont utilisés pour organiser vos dépenses en groupes logiques, ce que vous permet d\'établir des seuils pour limiter ces dépenses.',
'no_budgets_imperative_default' => 'Les budgets sont les outils de base de la gestion financière. Nous allons en créer un maintenant :',
'no_budgets_create_default' => 'Créer un budget',
'no_categories_title_default' => 'Nous allons créer une catégorie !',
'no_categories_intro_default' => 'Vous n\'avez pas encore de catégorie. Les catégories sont utilisées pour affiner vos transactions en associant avec.',
'no_categories_intro_default' => 'Vous n\'avez pas encore de catégories. Les catégories sont utilisées pour affiner vos transactions et les étiqueter avec leur catégorie désignée.',
'no_categories_imperative_default' => 'Les catégories sont créées automatiquement lorsque vous créez des transactions, mais vous pouvez en créer manuellement. Nous allons en créer une maintenant :',
'no_categories_create_default' => 'Créer une catégorie',
'no_tags_title_default' => 'Nous allons créer un tag !',
@@ -1477,7 +1485,7 @@ return [
'new_recurring_transaction' => 'Nouvelle opération périodique',
'help_weekend' => 'Que doit faire Firefly III lorsque lopération périodique tombe un samedi ou un dimanche ?',
'do_nothing' => 'Créer l\'opération tout de même',
'skip_transaction' => 'Skip the occurrence',
'skip_transaction' => 'Ignorer l\'occurrence',
'jump_to_friday' => 'Créer l\'opération le vendredi précédent',
'jump_to_monday' => 'Créer l\'opération le lundi suivant',
'will_jump_friday' => 'Sera créé le vendredi plutôt que les week-ends.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Correspondre à',
'strict' => 'Mode strict',
'repeat_freq' => 'Répétitions',
'update_channel' => 'Canal de mise à jour',
'journal_currency_id' => 'Devise',
'currency_id' => 'Devise',
'transaction_currency_id' => 'Devise',

View File

@@ -45,7 +45,7 @@ return [
'at_least_one_repetition' => 'Besoin d\'au moins une répétition.',
'require_repeat_until' => 'Besoin dun certain nombre de répétitions ou d\'une date de fin (repeat_until). Pas les deux.',
'require_currency_info' => 'Le contenu de ce champ n\'est pas valide sans informations sur la devise.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'not_transfer_account' => 'Ce compte n\'est pas un compte qui peut être utilisé pour les transferts.',
'require_currency_amount' => 'Le contenu de ce champ est invalide sans informations sur le montant étranger.',
'equal_description' => 'La description de la transaction ne doit pas être identique à la description globale.',
'file_invalid_mime' => 'Le fichier ":name" est du type ":mime" ce qui n\'est pas accepté pour un nouvel envoi.',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Frissítések keresése most',
'admin_update_check_now_explain' => 'Ha megnyomja a gombot, a Firefly III ellenőrinzi fogja, hogy a legfrissebb változatot használja -e.',
'check_for_updates_button' => 'Ellenőrzés most!',
'update_new_version_alert' => 'A Firefly III új verziója elérhető. A jelenleg használt verzió v:your_version, a legújabb verzió pedig v:new_version, amely megjelent: :date.',
'update_current_version_alert' => 'A jelenlegi verzió v:version, ez egyben a legfrissebb elérhető verzió is.',
'update_newer_version_alert' => 'A jelenlegi verzió v:your_version, amely újabb, mint a legfrissebb kiadott verzió, ami a v:new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'Hiba történt a frissítések ellenőrzése során. További információ a naplófájlokban található.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Keresés',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Teszt elindítva. Ellenőrizd a bejövő üzeneteidet és a naplófájlokat.',
'split_transaction_title' => 'Felosztott tranzakció leírása',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'Felosztott tranzakció létrehozásakor meg kell adni egy globális leírást a tranzakció összes felosztása részére.',
'transaction_information' => 'Tranzakció információ',
'you_create_transfer' => 'Egy <strong>átvezetést</strong> hozol létre.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Találatok',
'strict' => 'Szigorú mód',
'repeat_freq' => 'Ismétlődések',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Pénznem',
'currency_id' => 'Pénznem',
'transaction_currency_id' => 'Pénznem',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Check for updates now',
'admin_update_check_now_explain' => 'If you press the button, Firefly III will see if your current version is the latest.',
'check_for_updates_button' => 'Check now!',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running v:your_version, the latest version is v:new_version which was released on :date.',
'update_current_version_alert' => 'You are running v:version, which is the latest available release.',
'update_newer_version_alert' => 'You are running v:your_version, which is newer than the latest release, v:new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'An error occurred while checking for updates. Please view the log files.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Pencarian',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Uji dipicu. Periksa kotak masuk dan file log Anda.',
'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'transaction_information' => 'Transaction information',
'you_create_transfer' => 'You\'re creating a <strong>transfer</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Cocok di',
'strict' => 'Strict mode',
'repeat_freq' => 'Berulang',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Mata uang',
'currency_id' => 'Mata uang',
'transaction_currency_id' => 'Currency',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Controlla gli aggiornamenti ora',
'admin_update_check_now_explain' => 'Se si preme il pulsante, Firefly III controllerà se la versione corrente è la più recente.',
'check_for_updates_button' => 'Controlla ora!',
'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai eseguendo v:your_version, l\'ultima versione è v:new_version che è stata rilasciata il :date.',
'update_current_version_alert' => 'Stai eseguendo v:version, che è l\'ultima versione disponibile.',
'update_newer_version_alert' => 'Stai eseguendo v:your_version, che è più recente rispetto all\'ultima versione, v:new_version.',
'update_new_version_alert' => 'È disponibile una nuova versione di Firefly III. Stai utilizzando :your_version, l\'ultima versione è :new_version che è stata rilasciata il :date.',
'update_version_beta' => 'Questa versione è una versione BETA. Puoi avere problemi.',
'update_version_alpha' => 'Questa versione è una versione ALPHA. Puoi avere problemi.',
'update_current_version_alert' => 'Stai utilizzando :version, che è l\'ultima versione disponibile.',
'update_newer_version_alert' => 'Stai utilizzando :your_version, che è più recente dell\'ultima versione, :new_version.',
'update_check_error' => 'Si è verificato un errore durante il controllo degli aggiornamenti. Si prega di visualizzare i file di log.',
'admin_update_channel_title' => 'Canale di aggiornamento',
'admin_update_channel_explain' => 'Firefly III dispone di tre "canali" di aggiornamento che indicano quanto avanti ti trovi in termini di funzionalità, miglioramenti e bug. Usa il canale "beta" se sei avventuroso e quello "alpha" se vuoi vivere pericolosamente.',
'update_channel_stable' => 'Stabile. Tutto dovrebbe funzionare come previsto.',
'update_channel_beta' => 'Beta. Nuove funzionalità ma qualcosa potrebbe rompersi.',
'update_channel_alpha' => 'Alpha. Inseriamo qualsiasi cosa e vediamo cosa funziona.',
// search
'search' => 'Cerca',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Il test è stato attivato. Controlla la tua casella di posta e i file di log.',
'split_transaction_title' => 'Descrizione della transazione suddivisa',
'split_transaction_title_help' => 'Se crei una transazione suddivisa, è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.',
'split_title_help' => 'Se crei una transazione suddivisa è necessario che ci sia una descrizione globale per tutte le suddivisioni della transazione.',
'transaction_information' => 'Informazioni transazione',
'you_create_transfer' => 'Stai creando un <strong>trasferimento</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Abbina con',
'strict' => 'Modalità severa',
'repeat_freq' => 'Si ripete',
'update_channel' => 'Canale di aggiornamento',
'journal_currency_id' => 'Valuta',
'currency_id' => 'Valuta',
'transaction_currency_id' => 'Valuta',

View File

@@ -45,7 +45,7 @@ return [
'at_least_one_repetition' => 'È necessaria almeno una ripetizione.',
'require_repeat_until' => 'Richiede un numero di ripetizioni o una data di fine (ripeti fino al), non entrambi.',
'require_currency_info' => 'Il contenuto di questo campo non è valido senza informazioni sulla valuta.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'not_transfer_account' => 'Questo conto non è un conto che può essere usato per i trasferimenti.',
'require_currency_amount' => 'Il contenuto di questo campo non è valido senza le informazioni sull\'importo estero.',
'equal_description' => 'La descrizione della transazione non deve essere uguale alla descrizione globale.',
'file_invalid_mime' => 'Il file ":name" è di tipo ":mime" che non è accettato come nuovo caricamento.',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Se etter oppdateringer nå',
'admin_update_check_now_explain' => 'Hvis du trykker på knappen, vil Firefly III se om din nåværende versjon er den nyeste.',
'check_for_updates_button' => 'Sjekk nå!',
'update_new_version_alert' => 'En ny versjon av Firefly III er tilgjengelig. Du kjører v:your_version, den nyeste versjonen er v:new_version som ble utgitt den :date.',
'update_current_version_alert' => 'Du kjører v:version, som er den nyeste tilgjengelige utgivelsen.',
'update_newer_version_alert' => 'Du kjører v:your_version, som er nyere enn den nyeste versjonen, v:new_version.',
'update_new_version_alert' => 'A new version of Firefly III is available. You are running :your_version, the latest version is :new_version which was released on :date.',
'update_version_beta' => 'This version is a BETA version. You may run into issues.',
'update_version_alpha' => 'This version is a ALPHA version. You may run into issues.',
'update_current_version_alert' => 'You are running :version, which is the latest available release.',
'update_newer_version_alert' => 'You are running :your_version, which is newer than the latest release, :new_version.',
'update_check_error' => 'Det oppsto en feil under sjekk av oppdateringer. Vennligst se loggfilene for mer informasjon.',
'admin_update_channel_title' => 'Update channel',
'admin_update_channel_explain' => 'Firefly III has three update "channels" which determine how ahead of the curve you are in terms of features, enhancements and bugs. Use the "beta" channel if you\'re adventurous and the "alpha" when you like to live life dangerously.',
'update_channel_stable' => 'Stable. Everything should work as expected.',
'update_channel_beta' => 'Beta. New features but things may be broken.',
'update_channel_alpha' => 'Alpha. We throw stuff in, and use whatever sticks.',
// search
'search' => 'Søk',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Test ble utløst. Sjekk innboksen din og loggfilene.',
'split_transaction_title' => 'Description of the split transaction',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'transaction_information' => 'Transaction information',
'you_create_transfer' => 'You\'re creating a <strong>transfer</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Treff på',
'strict' => 'Streng modus',
'repeat_freq' => 'Gjentas',
'update_channel' => 'Update channel',
'journal_currency_id' => 'Valuta',
'currency_id' => 'Valuta',
'transaction_currency_id' => 'Valuta',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -224,10 +224,17 @@ return [
'admin_update_check_now_title' => 'Op updates controleren',
'admin_update_check_now_explain' => 'Als je op de knop drukt, kijkt Firefly III of je huidige versie de nieuwste is.',
'check_for_updates_button' => 'Controleer nu!',
'update_new_version_alert' => 'Er is een nieuwe versie van Firefly III beschikbaar. Je gebruikt v:your_version, de nieuwste versie is v:new_version die werd uitgebracht op :date.',
'update_current_version_alert' => 'Je gebruikt v:version, de nieuwste beschikbare versie.',
'update_newer_version_alert' => 'Je gebruikt v:your_version, wat nieuwer is dan de nieuwste versie, v:new_version.',
'update_new_version_alert' => 'Er is een nieuwe versie van Firefly III beschikbaar. Je gebruikt :your_version, de nieuwste versie is :new_version die werd uitgebracht op :date.',
'update_version_beta' => 'Dit is een BETA versie. Er kunnen bugs in zitten.',
'update_version_alpha' => 'Dit is een ALPHA versie. Er kunnen bugs in zitten.',
'update_current_version_alert' => 'Je gebruikt :version, de nieuwste beschikbare versie.',
'update_newer_version_alert' => 'Je gebruikt :your_version, wat nieuwer is dan de nieuwste versie, :new_version.',
'update_check_error' => 'Er is een fout opgetreden bij het controleren op updates. Bekijk de logbestanden.',
'admin_update_channel_title' => 'Updatekanaal',
'admin_update_channel_explain' => 'Firefly III heeft drie "kanalen" die bepalen of en hoever je voorloopt als het gaat om features, wijzigingen en bugs. Gebruik het "beta"-kanaal als je een avontuurlijke bui hebt en gebruik het "alpha" kanaal als je ook graag met krokodillen zwemt.',
'update_channel_stable' => 'Stabiel. Zou allemaal goed moeten gaan.',
'update_channel_beta' => 'Beta. Nieuwe dingen, maar die kunnen stuk zijn.',
'update_channel_alpha' => 'Alpha. We doen maar wat en jij mag testen.',
// search
'search' => 'Zoeken',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Testmail verstuurd. Check je inbox en de logboeken.',
'split_transaction_title' => 'Beschrijving van de gesplitste transactie',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'Als je een gesplitste transactie maakt, moet er een algemene beschrijving zijn voor alle splitsingen van de transactie.',
'transaction_information' => 'Transactieinformatie',
'you_create_transfer' => 'Je maakt een <strong>overschrijving</strong>.',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Reageert op',
'strict' => 'Strikte modus',
'repeat_freq' => 'Herhaling',
'update_channel' => 'Updatekanaal',
'journal_currency_id' => 'Valuta',
'currency_id' => 'Valuta',
'transaction_currency_id' => 'Valuta',

View File

@@ -45,7 +45,7 @@ return [
'at_least_one_repetition' => 'Er is op zijn minst één herhaling nodig.',
'require_repeat_until' => 'Je moet een aantal herhalingen opgeven, of een einddatum (repeat_until). Niet beide.',
'require_currency_info' => 'De inhoud van dit veld is ongeldig zonder valutagegevens.',
'not_transfer_account' => 'This account is not an account that can be used for transfers.',
'not_transfer_account' => 'Deze account kan je niet gebruiken voor overschrijvingen.',
'require_currency_amount' => 'De inhoud van dit veld is ongeldig zonder bedrag in vreemde valuta.',
'equal_description' => 'Transactiebeschrijving mag niet gelijk zijn aan globale beschrijving.',
'file_invalid_mime' => 'Bestand ":name" is van het type ":mime", en die kan je niet uploaden.',

View File

@@ -0,0 +1,26 @@
<?php
/**
* api.php
* Copyright (c) 2019 thegrumpydictator@gmail.com
*
* This file is part of Firefly III (https://github.com/firefly-iii).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
declare(strict_types=1);
return [
];

View File

@@ -94,9 +94,9 @@ return [
'two_factor_forgot' => 'Zapomniałem mojego uwierzytelnienia dwuskładnikowego.',
'two_factor_lost_header' => 'Straciłeś uwierzytelnianie dwuskładnikowe?',
'two_factor_lost_intro' => 'Jeżeli także nie masz kodów, to niestety nie masz szczęścia. To nie jest coś, co możemy naprawić z poziomu przeglądarki. Masz dwie opcje.',
'two_factor_lost_fix_self' => 'If you run your own instance of Firefly III, check the logs in <code>storage/logs</code> for instructions, or run <code>docker logs &lt;container_id&gt;</code> to see the instructions (refresh this page).',
'two_factor_lost_fix_self' => 'Jeśli masz własną instanc Firefly III, sprawdź logi w <code>storage/logs</code> po wskazówki, lub uruchom <code>docker logs &lt;container_id&gt;</code> aby zobaczyć wskazówki (odśwież tę stronę).',
'two_factor_lost_fix_owner' => 'W przeciwnym razie, powiadom właściciela strony, <a href="mailto::site_owner">:site_owner</a> i poproś go o zresetowanie Twojego uwierzytelnienia dwuskładnikowego.',
'mfa_backup_code' => 'You have used a backup code to login to Firefly III. It can\'t be used again, so cross it from your list.',
'mfa_backup_code' => 'Użyłeś kodu zapasowego do zalogowania się do Firefly III. Nie możesz go użyć ponownie, więc wykreśl go z listy.',
'pref_two_factor_new_backup_codes' => 'Wygeneruj nowe kody zapasowe',
'pref_two_factor_backup_code_count' => 'Masz :count ważnych kodów zapasowych.',
'2fa_i_have_them' => 'Kody zapisane!',
@@ -111,7 +111,7 @@ return [
'user_id_is' => 'Twój identyfikator użytkownika to <strong>:user</strong>',
'field_supports_markdown' => 'To pole obsługuje <a href="https://pl.wikipedia.org/wiki/Markdown">Markdown</a>.',
'need_more_help' => 'Jeśli potrzebujesz dodatkowej pomocy w korzystaniu z Firefly III, proszę <a href="https://github.com/firefly-iii/firefly-iii/issues">opisz go w zgłoszeniu na Githubie</a>.',
'reenable_intro_text' => 'You can also re-enable <a href="#" id="reenableGuidance">the introduction guidance</a>.',
'reenable_intro_text' => 'Możesz także ponownie włączyć <a href="#" id="reenableGuidance">samouczek</a>.',
'intro_boxes_after_refresh' => 'Samouczek pojawi się po odświeżeniu strony.',
'show_all_no_filter' => 'Pokaż wszystkie transakcje bez grupowania ich według daty.',
'expenses_by_category' => 'Wydatki wg kategorii',
@@ -135,7 +135,7 @@ return [
'pref_languages_locale' => 'Aby język inny niż angielski działał poprawnie, twój system operacyjny musi być wyposażony w odpowiednie informacje o lokalizacji. Jeśli nie są one obecne, dane walutowe, daty i kwoty mogą być źle sformatowane.',
'budget_in_period' => 'Wszystkie transakcje dla budżetu ":name" od :start do :end w :currency',
'chart_budget_in_period' => 'Wykres wszystkich transakcji dla budżetu ":name" od :start do :end w :currency',
'chart_budget_in_period_only_currency' => 'The amount you budgeted was in :currency, so this chart will only show transactions in :currency.',
'chart_budget_in_period_only_currency' => 'Kwota zaplanowanego budżetu była w :currency, więc ten wykres pokaże transakcje tylko w :currency.',
'chart_account_in_period' => 'Wykres wszystkich transakcji dla konta ":name" od :start do :end',
'chart_category_in_period' => 'Wykres wszystkich transakcji dla kategorii ":name" od :start do :end',
'chart_category_all' => 'Wykres wszystkich transakcji dla kategorii ":name"',
@@ -208,7 +208,7 @@ return [
'scopes_will_be_able' => 'Ta aplikacja będzie mogła:',
'button_authorize' => 'Autoryzuj',
'none_in_select_list' => '(żadne)',
'no_piggy_bank' => '(brak skarbonek)',
'no_piggy_bank' => '(brak skarbonki)',
'name_in_currency' => ':name w :currency',
'paid_in_currency' => 'Zapłacone w :currency',
'unpaid_in_currency' => 'Niezapłacone w :currency',
@@ -225,9 +225,16 @@ return [
'admin_update_check_now_explain' => 'Jeśli naciśniesz przycisk, Firefly III sprawdzi, czy używasz najnowszej wersji.',
'check_for_updates_button' => 'Sprawdź teraz!',
'update_new_version_alert' => 'Dostępna jest nowa wersja Firefly III. Używasz wersji :your_version, najnowsza wersja to :new_version wydana :date.',
'update_version_beta' => 'Ta wersja jest wersją BETA. Możesz napotkać błędy.',
'update_version_alpha' => 'Ta wersja jest wersją ALPHA. Możesz napotkać błędy.',
'update_current_version_alert' => 'Używasz wersji :version, która jest najnowszą dostępną wersją.',
'update_newer_version_alert' => 'Używasz wersji :your_version, która jest nowsza niż najnowsza wersja, :new_version.',
'update_check_error' => 'Wystąpił błąd podczas sprawdzania aktualizacji. Przejrzyj pliki dziennika.',
'admin_update_channel_title' => 'Kanał aktualizacji',
'admin_update_channel_explain' => 'Firefly III posiada trzy "kanały", które decydują jak wczesnej pod względem funkcji, ulepszeń i błędów wersji używasz. Użyj kanału "beta", jeśli lubisz przygody i "alfa", gdy lubisz żyć niebezpiecznie.',
'update_channel_stable' => 'Stabilne. Wszystko powinno działać zgodnie z oczekiwaniami.',
'update_channel_beta' => 'Beta. Nowe funkcje, ale niektóre funkcje mogą nie działać poprawnie.',
'update_channel_alpha' => 'Alfa. Rzucamy różne rzeczy i zostawiamy to, co się przyklei.',
// search
'search' => 'Szukaj',
@@ -658,9 +665,9 @@ return [
'new_default_currency' => ':name jest teraz domyślną walutą.',
'cannot_delete_currency' => 'Nie można usunąć waluty :name, ponieważ jest ona nadal używana.',
'cannot_disable_currency_journals' => 'Nie można wyłączyć :name ponieważ istnieją powiązane transakcje.',
'cannot_disable_currency_last_left' => 'Cannot disable :name because it is the last enabled currency.',
'cannot_disable_currency_account_meta' => 'Cannot disable :name because it is used in asset accounts.',
'cannot_disable_currency_bills' => 'Cannot disable :name because it is used in bills.',
'cannot_disable_currency_last_left' => 'Nie można wyłączyć :name, ponieważ jest to ostatnia włączona waluta.',
'cannot_disable_currency_account_meta' => 'Nie można wyłączyć :name ponieważ jest użyte na kontach aktywów.',
'cannot_disable_currency_bills' => 'Nie można wyłączyć :name ponieważ jest użyte w rachunkach.',
'cannot_disable_currency_recurring' => 'Cannot disable :name because it is used in recurring transactions.',
'cannot_disable_currency_available_budgets' => 'Cannot disable :name because it is used in available budgets.',
'cannot_disable_currency_budget_limits' => 'Cannot disable :name because it is used in budget limits.',
@@ -704,7 +711,7 @@ return [
'createBudget' => 'Nowy budżet',
'invalid_currency' => 'To jest niewłaściwa waluta',
'set_ab' => 'Dostępna kwota budżetu została ustalona',
'updated_ab' => 'The available budget amount has been updated',
'updated_ab' => 'Dostępna kwota budżetu została zaktualizowana',
'deleted_ab' => 'The available budget amount has been deleted',
'deleted_bl' => 'The budgeted amount has been removed',
'alt_currency_ab_create' => 'Set the available budget in another currency',
@@ -759,9 +766,9 @@ return [
'list_inactive_rule' => 'nieaktywna reguła',
// accounts:
'inactive_account_link' => 'You have :count inactive (archived) accounts, which you can view on this separate page.',
'all_accounts_inactive' => 'These are your inactive accounts.',
'active_account_link' => 'This link goes back to your active accounts.',
'inactive_account_link' => 'Masz :count nieaktywnych (zarchiwizowanych) kont, które możesz zobaczyć na tej oddzielnej stronie.',
'all_accounts_inactive' => 'To są twoje nieaktywne konta.',
'active_account_link' => 'Ten link wraca do Twoich aktywnych kont.',
'account_missing_transaction' => 'Konto #:id (":name") nie możne być wyświetlone bezpośrednio, ale Firefly Iii nie ma informacji przekierowania.',
'details_for_asset' => 'Szczegóły konta aktywów ":name"',
'details_for_expense' => 'Szczegóły konta wydatków ":name"',
@@ -789,7 +796,7 @@ return [
'make_new_revenue_account' => 'Utwórz nowe konto przychodów',
'make_new_liabilities_account' => 'Utwórz nowe zobowiązanie',
'asset_accounts' => 'Konta aktywów',
'asset_accounts_inactive' => 'Asset accounts (inactive)',
'asset_accounts_inactive' => 'Konta aktywów (nieaktywne)',
'expense_accounts' => 'Konta wydatków',
'expense_accounts_inactive' => 'Konto wydatków (nieaktywne)',
'revenue_accounts' => 'Konta przychodów',
@@ -1277,6 +1284,7 @@ return [
'send_test_triggered' => 'Test został uruchomiony. Sprawdź swoją skrzynkę odbiorczą i pliki dziennika.',
'split_transaction_title' => 'Opis podzielonej transakcji',
'split_transaction_title_help' => 'If you create a split transaction, there must be a global description for all splits of the transaction.',
'split_title_help' => 'Podzielone transakcje muszą posiadać globalny opis.',
'transaction_information' => 'Informacje o transakcji',
'you_create_transfer' => 'Tworzysz <strong>przelew</strong>.',
@@ -1302,11 +1310,11 @@ return [
'do_not_save_connection' => '(nie zapisuj powiązań)',
'link_transaction' => 'Powiąż transakcje',
'link_to_other_transaction' => 'Powiąż aktualną transakcję z inną transakcją',
'select_transaction_to_link' => 'Select a transaction to link this transaction to. The links are currently unused in Firefly III (apart from being shown), but I plan to change this in the future. Use the search box to select a transaction either by title or by ID. If you want to add custom link types, check out the administration section.',
'select_transaction_to_link' => 'Wybierz transakcję, aby powiązać tę transakcję. Powiązania są obecnie nieużywane w Firefly III (oprócz pokazywania), ale zamierzam to zmienić w przyszłości. Użyj pola wyszukiwania, aby wybrać transakcję według tytułu lub ID. Jeśli chcesz dodać niestandardowe typy powiązań, sprawdź sekcję administracyjną.',
'this_transaction' => 'Ta transakcja',
'transaction' => 'Transakcja',
'comments' => 'Komentarze',
'link_notes' => 'Any notes you wish to store with the link.',
'link_notes' => 'Notatki które chcesz zapisać wraz z powiązaniem.',
'invalid_link_selection' => 'Nie można powiązać tych transakcji',
'selected_transaction' => 'Wybrana transakcja',
'journals_linked' => 'Transakcje zostały powiązane.',
@@ -1384,7 +1392,7 @@ return [
'no_accounts_imperative_liabilities' => 'Nie musisz korzystać z tej funkcji, ale może być przydatna, jeśli chcesz śledzić te rzeczy.',
'no_accounts_create_liabilities' => 'Utwórz zobowiązanie',
'no_budgets_title_default' => 'Stwórzmy budżet',
'no_budgets_intro_default' => 'You have no budgets yet. Budgets are used to organize your expenses into logical groups, which you can give a soft-cap to limit your expenses.',
'no_budgets_intro_default' => 'Nie masz jeszcze żadnych budżetów. Budżety są wykorzystywane do organizowania twoich wydatków w logiczne grupy, które możesz obserwować, aby ograniczyć swoje wydatki.',
'no_budgets_imperative_default' => 'Budżety są podstawowymi narzędziami zarządzania finansami. Stwórzmy jeden teraz:',
'no_budgets_create_default' => 'Stwórz budżet',
'no_categories_title_default' => 'Stwórzmy kategorię!',

View File

@@ -38,6 +38,7 @@ return [
'match' => 'Dopasowanie',
'strict' => 'Tryb ścisły',
'repeat_freq' => 'Powtarza się',
'update_channel' => 'Kanał aktualizacji',
'journal_currency_id' => 'Waluta',
'currency_id' => 'Waluta',
'transaction_currency_id' => 'Waluta',

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