Compare commits
80 Commits
v0.4.0-bet
...
stable-0.4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aa41f383cc | ||
|
|
81ea719329 | ||
|
|
498d062657 | ||
|
|
480d01fe9d | ||
|
|
38ec3ec0ca | ||
|
|
0dd70fb461 | ||
|
|
123e5998a9 | ||
|
|
9e21c8597f | ||
|
|
aa4db7f789 | ||
|
|
9b63e4d745 | ||
|
|
dfe6e2f216 | ||
|
|
0c7ff7477b | ||
|
|
a1fc5cd809 | ||
|
|
7af9ff68ad | ||
|
|
c2fb501f4e | ||
|
|
2736783bf3 | ||
|
|
fde5096856 | ||
|
|
f3296dd443 | ||
|
|
820ad7c523 | ||
|
|
9f66ce618e | ||
|
|
2318425160 | ||
|
|
213e3083a1 | ||
|
|
4fc65c8302 | ||
|
|
bcb54faeaf | ||
|
|
f5753f3fde | ||
|
|
5ff8618c10 | ||
|
|
bee918e810 | ||
|
|
37301ae92b | ||
|
|
bd304d5f27 | ||
|
|
827c69bd7b | ||
|
|
812a225334 | ||
|
|
90c4e7818a | ||
|
|
1299df539e | ||
|
|
20b25e0108 | ||
|
|
e959afb2de | ||
|
|
cb25643741 | ||
|
|
bbfb9e713a | ||
|
|
e71a38fe96 | ||
|
|
120e4e13a6 | ||
|
|
04aa9df45b | ||
|
|
8d60a4379d | ||
|
|
4e96dec474 | ||
|
|
9727356d3b | ||
|
|
c0c0cb8545 | ||
|
|
af646c1999 | ||
|
|
38bb4c7a3a | ||
|
|
573fa2c457 | ||
|
|
d7e7fd58b0 | ||
|
|
f5a234fd26 | ||
|
|
f75c9e0d4a | ||
|
|
5eca92a0ea | ||
|
|
384b7a41a9 | ||
|
|
47e27a7a89 | ||
|
|
ac19621d5b | ||
|
|
cf2e84873c | ||
|
|
c523474980 | ||
|
|
754486673a | ||
|
|
a7110082e7 | ||
|
|
db619e4cda | ||
|
|
34d05f2ac0 | ||
|
|
fdb1dbf397 | ||
|
|
5c2925aeed | ||
|
|
dc5fbbf7eb | ||
|
|
e46844988e | ||
|
|
9d98107f3a | ||
|
|
681176c684 | ||
|
|
5d4757ddf1 | ||
|
|
9731e6811a | ||
|
|
23c86a4fcc | ||
|
|
43ea0136c8 | ||
|
|
2cc8eb1313 | ||
|
|
bfe71900d3 | ||
|
|
c6a6b41193 | ||
|
|
b0f7bef279 | ||
|
|
014f76b2fb | ||
|
|
546928fb79 | ||
|
|
b4ead5a2eb | ||
|
|
124918b744 | ||
|
|
9308ad125a | ||
|
|
7dc43829ab |
38
.drone.yml
38
.drone.yml
@@ -22,6 +22,42 @@ pipeline:
|
||||
when:
|
||||
matrix:
|
||||
TESTS: check-app-compatbility
|
||||
check-app-compatbility-12:
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=stable12
|
||||
- DB=sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
# Code checker
|
||||
- ./occ app:check-code $APP_NAME -c strong-comparison
|
||||
- ./occ app:check-code $APP_NAME -c deprecation
|
||||
- cd apps/$APP_NAME/
|
||||
when:
|
||||
matrix:
|
||||
TESTS: check-app-compatbility-13
|
||||
check-app-compatbility-12:
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
- APP_NAME=deck
|
||||
- CORE_BRANCH=stable12
|
||||
- DB=sqlite
|
||||
commands:
|
||||
# Pre-setup steps
|
||||
- wget https://raw.githubusercontent.com/nextcloud/travis_ci/master/before_install.sh
|
||||
- bash ./before_install.sh $APP_NAME $CORE_BRANCH $DB
|
||||
- cd ../server
|
||||
# Code checker
|
||||
- ./occ app:check-code $APP_NAME -c strong-comparison
|
||||
- ./occ app:check-code $APP_NAME -c deprecation
|
||||
- cd apps/$APP_NAME/
|
||||
when:
|
||||
matrix:
|
||||
TESTS: check-app-compatbility-12
|
||||
signed-off-check:
|
||||
image: nextcloudci/php7.0:php7.0-17
|
||||
environment:
|
||||
@@ -194,6 +230,8 @@ pipeline:
|
||||
matrix:
|
||||
include:
|
||||
- TESTS: check-app-compatbility
|
||||
- TESTS: check-app-compatbility-12
|
||||
- TESTS: check-app-compatbility-13
|
||||
- TESTS: signed-off-check
|
||||
- TESTS: syntax-php5.6
|
||||
- TESTS: syntax-php7.0
|
||||
|
||||
15
CHANGELOG.md
15
CHANGELOG.md
@@ -1,7 +1,19 @@
|
||||
# Changelog
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
## 0.4.0 - unreleased
|
||||
## 0.4.1 - 2018-07-28
|
||||
|
||||
### Added
|
||||
|
||||
- Make app compatible with Nextcloud 14
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fix bug with file upload on unlimited quota
|
||||
- Fix issue on MySQL databases that don't support 4-byte characters
|
||||
- Fix check when assigning users
|
||||
|
||||
## 0.4.0 - 2018-07-11
|
||||
|
||||
### Added
|
||||
|
||||
@@ -9,6 +21,7 @@ All notable changes to this project will be documented in this file.
|
||||
- Embed attachments into the card description
|
||||
- Color picker to use any color value for board and labels
|
||||
- Support for checkboxes inside the description
|
||||
- occ command to export user data as JSON
|
||||
|
||||
### Fixed
|
||||
|
||||
|
||||
4
Makefile
4
Makefile
@@ -12,7 +12,7 @@ sign_dir=$(build_dir)/sign
|
||||
cert_dir=$(HOME)/.nextcloud/certificates
|
||||
|
||||
|
||||
default: build
|
||||
default: package
|
||||
|
||||
clean-build:
|
||||
rm -rf $(build_dir)
|
||||
@@ -95,3 +95,5 @@ test-integration:
|
||||
test-js: install-deps
|
||||
cd js && run test
|
||||
|
||||
package:
|
||||
krankerl package
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
- 🚀 Get your project organized
|
||||
|
||||
</description>
|
||||
<version>0.4.0-beta2</version>
|
||||
<version>0.4.1</version>
|
||||
<licence>agpl</licence>
|
||||
<author>Julius Härtl</author>
|
||||
<namespace>Deck</namespace>
|
||||
@@ -37,4 +37,7 @@
|
||||
<step>OCA\Deck\Migration\UnknownUsers</step>
|
||||
</post-migration>
|
||||
</repair-steps>
|
||||
<commands>
|
||||
<command>OCA\Deck\Command\UserExport</command>
|
||||
</commands>
|
||||
</info>
|
||||
|
||||
38
css/comp-13.scss
Normal file
38
css/comp-13.scss
Normal file
@@ -0,0 +1,38 @@
|
||||
#content-wrapper #content {
|
||||
height: 100%;
|
||||
}
|
||||
#app-content {
|
||||
flex-grow: 1;
|
||||
height: 100%;
|
||||
|
||||
&.details-visible {
|
||||
margin-right: 500px;
|
||||
}
|
||||
}
|
||||
|
||||
#app-sidebar {
|
||||
right: -500px;
|
||||
max-width: 100%;
|
||||
width: 500px;
|
||||
display:flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#content[class*='app-'] * {
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
body:not(.snapjs-left) {
|
||||
.app-navigation-hide {
|
||||
#app-content {
|
||||
margin-left: 0 !important;
|
||||
}
|
||||
#app-navigation {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -70,6 +70,26 @@ input.input-inline {
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
/**
|
||||
* Generic app layout
|
||||
*/
|
||||
|
||||
#content {
|
||||
height: 100%;
|
||||
min-height: initial;
|
||||
}
|
||||
|
||||
.app.app-deck {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
}
|
||||
|
||||
#app-content {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigation sidebar
|
||||
*/
|
||||
@@ -238,7 +258,7 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
#app-navigation-toggle {
|
||||
#app-navigation-toggle-custom {
|
||||
width: 44px;
|
||||
height: 44px;
|
||||
cursor: pointer;
|
||||
@@ -617,17 +637,6 @@ input.input-inline {
|
||||
/**
|
||||
* App sidebar
|
||||
*/
|
||||
#app-sidebar {
|
||||
right: -500px;
|
||||
max-width: 100%;
|
||||
width: 500px;
|
||||
display:flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
#sidebar-header {
|
||||
h3 {
|
||||
@@ -877,6 +886,9 @@ input.input-inline {
|
||||
button.icon-history {
|
||||
width: 44px;
|
||||
}
|
||||
progress {
|
||||
margin-top: 3px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -911,24 +923,11 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
#card-attachments {
|
||||
ul {
|
||||
margin: 5px;
|
||||
}
|
||||
|
||||
.details {
|
||||
font-size: 8pt;
|
||||
padding-left: 15px;
|
||||
}
|
||||
}
|
||||
|
||||
#app-content {
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
|
||||
&.details-visible {
|
||||
margin-right: 500px;
|
||||
.card-attachments {
|
||||
.error {
|
||||
padding-left: 38px;
|
||||
margin-bottom: 5px;
|
||||
background-position: 10px;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -976,8 +975,8 @@ input.input-inline {
|
||||
}
|
||||
}
|
||||
|
||||
.colorselect-label {
|
||||
background-image: url('../img/color_picker.svg');
|
||||
.colorselect-label, .colorselect-label-white {
|
||||
background-image: url('../img/color_picker-dark.svg');
|
||||
background-position: center center;
|
||||
background-repeat: no-repeat;
|
||||
opacity: 1;
|
||||
@@ -988,6 +987,9 @@ input.input-inline {
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
.colorselect-label-white {
|
||||
background-image: url('../img/color_picker.svg');
|
||||
}
|
||||
}
|
||||
|
||||
.labels {
|
||||
@@ -1431,3 +1433,22 @@ input.input-inline {
|
||||
.ui-select-dropdown.select2-drop-active {
|
||||
opacity: 1 !important;
|
||||
}
|
||||
|
||||
/**
|
||||
* Custom app sidebar handling
|
||||
*/
|
||||
body:not(.snapjs-left) {
|
||||
.app-navigation-hide {
|
||||
#app-content {
|
||||
margin-left: 0 !important; /* overwrite margin since we want the translateX to handle it*/
|
||||
}
|
||||
#app-navigation {
|
||||
transform: translateX(-300px);
|
||||
}
|
||||
}
|
||||
}
|
||||
@media only screen and (max-width: 768px) {
|
||||
#app-navigation-toggle-custom {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
1
img/color_picker-dark.svg
Normal file
1
img/color_picker-dark.svg
Normal file
@@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 100 100"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z"/></svg>
|
||||
|
After Width: | Height: | Size: 897 B |
@@ -1,5 +1 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg id="Layer_1" width="15" height="15" enable-background="new 0 0 100 100" version="1.1" viewBox="0 0 100 100" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://web.resource.org/cc/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
||||
<path d="m91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727c-1.959-1.959-5.134-1.959-7.093 0s-1.959 5.134 0 7.093l3.727 3.727-41.51 41.508c-2.039 2.039-3.149 4.656-3.329 7.324-0.073 1.087-0.347 3.105-0.675 5.292-0.053 0.359-0.212 0.706-0.487 0.983l-3.105 3.106c-0.994 0.994-0.994 2.606 0 3.6l3.493 3.493c0.994 0.994 2.606 0.994 3.6 0l3.106-3.105c0.277-0.275 0.622-0.433 0.981-0.486 2.187-0.329 4.205-0.602 5.293-0.675 2.668-0.18 5.285-1.29 7.325-3.33l41.508-41.508 3.727 3.727c1.959 1.959 5.134 1.959 7.093 0s1.959-5.134 0-7.093l-12.365-12.366 9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726 1e-3 -16.2zm-26.594 34.394l-20.53 20.53c-0.994 0.994-2.606 0.994-3.6 0l-3.27-3.27c-0.994-0.993-2.605-0.993-3.599 1e-3l-0.616 0.616-2e-3 -2e-3 -14.728 14.727c-0.337 0.337-0.819 0.401-1.076 0.143s-0.194-0.74 0.143-1.076l23.841-23.841 4e-3 4e-3 15.633-15.633c0.994-0.994 2.606-0.994 3.6 0l4.2 4.201c0.994 0.994 0.994 2.606 0 3.6z" fill="#fff"/>
|
||||
<metadata><rdf:RDF><cc:Work><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><cc:license rdf:resource="http://creativecommons.org/licenses/publicdomain/"/><dc:publisher><cc:Agent rdf:about="http://openclipart.org/"><dc:title>Openclipart</dc:title></cc:Agent></dc:publisher></cc:Work><cc:License rdf:about="http://creativecommons.org/licenses/publicdomain/"><cc:permits rdf:resource="http://creativecommons.org/ns#Reproduction"/><cc:permits rdf:resource="http://creativecommons.org/ns#Distribution"/><cc:permits rdf:resource="http://creativecommons.org/ns#DerivativeWorks"/></cc:License></rdf:RDF></metadata></svg>
|
||||
<svg width="15" height="15" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><path d="M91.645 8.355c-4.474-4.474-11.727-4.474-16.2 0l-13.5 13.501-3.727-3.727a5.015 5.015 0 1 0-7.093 7.093l3.727 3.727-41.51 41.508a11.411 11.411 0 0 0-3.329 7.324c-.073 1.087-.347 3.105-.675 5.292a1.748 1.748 0 0 1-.487.983l-3.105 3.106a2.546 2.546 0 0 0 0 3.6l3.493 3.493a2.546 2.546 0 0 0 3.6 0l3.106-3.105c.277-.275.622-.433.981-.486 2.187-.329 4.205-.602 5.293-.675a11.412 11.412 0 0 0 7.325-3.33l41.508-41.508 3.727 3.727a5.015 5.015 0 1 0 7.093-7.093L69.507 29.419l9.697 7.577 12.44-12.441c4.475-4.473 4.474-11.726.001-16.2zM65.051 42.749l-20.53 20.53a2.546 2.546 0 0 1-3.6 0l-3.27-3.27a2.545 2.545 0 0 0-3.599.001l-.616.616-.002-.002-14.728 14.727c-.337.337-.819.401-1.076.143s-.194-.74.143-1.076l23.841-23.841.004.004 15.633-15.633a2.546 2.546 0 0 1 3.6 0l4.2 4.201a2.546 2.546 0 0 1 0 3.6z" fill="#fff"/></svg>
|
||||
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 910 B |
@@ -33,12 +33,16 @@ app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterPr
|
||||
|
||||
|
||||
$compileProvider.debugInfoEnabled(true);
|
||||
// This should fix adding "unsafe:" prefix to ui-select href links containing javascript
|
||||
// inline JS is blocked by CSP anyway and filtered out by our markdown renderer as well
|
||||
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|javascript):/);
|
||||
|
||||
markdownItConverterProvider.use(markdownitLinkTarget, {
|
||||
markdownItConverterProvider.config({
|
||||
breaks: true,
|
||||
linkify: true,
|
||||
xhtmlOut: true
|
||||
}).use(markdownitCheckbox);
|
||||
});
|
||||
markdownItConverterProvider.use(markdownitLinkTarget).use(markdownitCheckbox);
|
||||
|
||||
$urlRouterProvider.otherwise('/');
|
||||
|
||||
@@ -67,8 +71,9 @@ app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterPr
|
||||
tab: {value: 0, dynamic: true},
|
||||
},
|
||||
views: {
|
||||
'sidebarView': {
|
||||
templateUrl: '/board.sidebarView.html'
|
||||
'sidebarView@': {
|
||||
templateUrl: '/board.sidebarView.html',
|
||||
controller: 'BoardController'
|
||||
}
|
||||
}
|
||||
})
|
||||
@@ -78,7 +83,7 @@ app.config(function ($provide, $interpolateProvider, $httpProvider, $urlRouterPr
|
||||
tab: {value: 0, dynamic: true},
|
||||
},
|
||||
views: {
|
||||
'sidebarView': {
|
||||
'sidebarView@': {
|
||||
templateUrl: '/card.sidebarView.html',
|
||||
controller: 'CardController'
|
||||
}
|
||||
|
||||
@@ -56,26 +56,6 @@ app.run(function ($document, $rootScope, $transitions, BoardService) {
|
||||
OC.filePath('deck', 'img', 'app-512.png')
|
||||
);
|
||||
|
||||
$('#app-navigation-toggle').off('click');
|
||||
// App sidebar on mobile
|
||||
var snapper = new Snap({
|
||||
element: document.getElementById('app-content'),
|
||||
disable: 'right',
|
||||
maxPosition: 250,
|
||||
touchToDrag: false
|
||||
});
|
||||
|
||||
$('#app-navigation-toggle').click(function () {
|
||||
if ($(window).width() > 768) {
|
||||
$('#app-navigation').toggle('hidden');
|
||||
} else {
|
||||
if (snapper.state().state === 'left') {
|
||||
snapper.close();
|
||||
} else {
|
||||
snapper.open('left');
|
||||
}
|
||||
}
|
||||
});
|
||||
// Select all elements with data-toggle="tooltips" in the document
|
||||
$('body').tooltip({
|
||||
selector: '[data-toggle="tooltip"]'
|
||||
|
||||
@@ -23,10 +23,20 @@
|
||||
import app from '../app/App.js';
|
||||
|
||||
/** global: OC */
|
||||
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope) {
|
||||
app.controller('AppController', function ($scope, $location, $http, $log, $rootScope, $attrs) {
|
||||
$rootScope.sidebar = {
|
||||
show: false
|
||||
};
|
||||
$scope.sidebar = $rootScope.sidebar;
|
||||
$scope.user = oc_current_user;
|
||||
$rootScope.config = JSON.parse($attrs.config);
|
||||
|
||||
$scope.appNavigationHide = false;
|
||||
|
||||
$scope.toggleSidebar = function() {
|
||||
if ($(window).width() > 768) {
|
||||
$scope.appNavigationHide = !$scope.appNavigationHide;
|
||||
console.log($scope.appNavigationHide);
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
@@ -43,6 +43,7 @@ app.controller('CardController', function ($scope, $rootScope, $sce, $location,
|
||||
return $state.params;
|
||||
}, function (params) {
|
||||
$scope.params = params;
|
||||
$scope.fileservice.reset();
|
||||
}, true);
|
||||
$scope.params = $state.params;
|
||||
|
||||
|
||||
2438
js/package-lock.json
generated
2438
js/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -22,13 +22,13 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"babel-core": "^6.26.0",
|
||||
"babel-loader": "^7.1.2",
|
||||
"babel-loader": "^7.1.5",
|
||||
"babel-preset-env": "^1.7.0",
|
||||
"css-loader": "^0.28.9",
|
||||
"karma": "^2.0.3",
|
||||
"mini-css-extract-plugin": "^0.4.0",
|
||||
"node-sass": "^4.5.3",
|
||||
"webpack": "^4.12.0",
|
||||
"css-loader": "^1.0.0",
|
||||
"karma": "^2.0.4",
|
||||
"mini-css-extract-plugin": "^0.4.1",
|
||||
"node-sass": "^4.9.2",
|
||||
"webpack": "^4.15.1",
|
||||
"webpack-cli": "^3.0.8",
|
||||
"webpack-merge": "^4.1.3"
|
||||
},
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
@@ -25,18 +25,29 @@ import app from '../app/App.js';
|
||||
/* global OC oc_requesttoken */
|
||||
export default class FileService {
|
||||
|
||||
constructor ($http, FileUploader, CardService) {
|
||||
constructor (FileUploader, CardService, $rootScope, $filter) {
|
||||
this.$filter = $filter;
|
||||
this.uploader = new FileUploader();
|
||||
this.cardservice = CardService;
|
||||
this.uploader.onAfterAddingFile = this.onAfterAddingFile.bind(this);
|
||||
this.uploader.onSuccessItem = this.onSuccessItem.bind(this);
|
||||
this.uploader.onErrorItem = this.onErrorItem.bind(this);
|
||||
this.uploader.onCancelItem = this.onCancelItem.bind(this);
|
||||
|
||||
this.maxUploadSize = $rootScope.config.maxUploadSize;
|
||||
this.progress = [];
|
||||
this.status = null;
|
||||
}
|
||||
|
||||
reset () {
|
||||
this.status = null;
|
||||
}
|
||||
|
||||
runUpload (fileItem, attachmentId) {
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment');
|
||||
this.status = null;
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment?type=deck_file');
|
||||
if (typeof attachmentId !== 'undefined') {
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId);
|
||||
fileItem.url = OC.generateUrl('/apps/deck/cards/' + fileItem.cardId + '/attachment/' + attachmentId + '?type=deck_file');
|
||||
} else {
|
||||
fileItem.formData = [
|
||||
{
|
||||
@@ -51,8 +62,17 @@ export default class FileService {
|
||||
}
|
||||
|
||||
onAfterAddingFile (fileItem) {
|
||||
if (this.maxUploadSize > 0 && fileItem.file.size > this.maxUploadSize) {
|
||||
this.status = {
|
||||
error: t('deck', `Failed to upload {name}`, {name: fileItem.file.name}),
|
||||
message: t('deck', 'Maximum file size of {size} exceeded', {size: this.$filter('bytes')(this.maxUploadSize)})
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
// Fetch card details before trying to upload so we can detect filename collisions properly
|
||||
let self = this;
|
||||
this.progress.push(fileItem);
|
||||
this.cardservice.fetchOne(fileItem.cardId).then(function (data) {
|
||||
let attachments = self.cardservice.get(fileItem.cardId).attachments;
|
||||
let existingFile = attachments.find((attachment) => {
|
||||
@@ -81,7 +101,7 @@ export default class FileService {
|
||||
self.runUpload(fileItem);
|
||||
}
|
||||
}, function (error) {
|
||||
|
||||
this.progress = this.progress.filter((item) => (fileItem.file.name !== item.file.name));
|
||||
});
|
||||
|
||||
}
|
||||
@@ -93,6 +113,23 @@ export default class FileService {
|
||||
attachments = attachments.splice(index, 1);
|
||||
}
|
||||
this.cardservice.get(item.cardId).attachments.push(response);
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
}
|
||||
|
||||
onErrorItem (item, response) {
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
this.status = {
|
||||
error: t('deck', `Failed to upload:`) + ' ' + item.file.name,
|
||||
message: response.message
|
||||
};
|
||||
}
|
||||
|
||||
onCancelItem (item) {
|
||||
this.progress = this.progress.filter((fileItem) => (fileItem.file.name !== item.file.name));
|
||||
}
|
||||
|
||||
getProgressItemsForCard (cardId) {
|
||||
return this.progress.filter((fileItem) => (fileItem.cardId === cardId));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
31
l10n/cs.js
31
l10n/cs.js
@@ -6,15 +6,35 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Odebrat uživatele z karty",
|
||||
"Hours" : "Hodiny",
|
||||
"Minutes" : "Minuty",
|
||||
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
|
||||
"Personal" : "Osobní",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
|
||||
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
|
||||
"No data was provided to create an attachment." : "Žádná data k vytvoření přílohy.",
|
||||
"Finished" : "Dokončeno",
|
||||
"To review" : "K revizi",
|
||||
"Action needed" : "Nutná akce",
|
||||
"Later" : "Později",
|
||||
"To do" : "Udělat",
|
||||
"Doing" : "Provádím",
|
||||
"Done" : "Hotovo",
|
||||
"Example Task 3" : "Třetí úkol pro ukázku",
|
||||
"Example Task 2" : "Druhý úkol pro ukázku",
|
||||
"Example Task 1" : "První úkol pro ukázku",
|
||||
"The file was uploaded" : "Soubor byl nahrán",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Nahrávaný soubor přesahuje nastavení upload_max_filesize v php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný ve formuláři HTML",
|
||||
"The file was only partially uploaded" : "Soubor byl nahrán pouze z části",
|
||||
"No file was uploaded" : "Nebyl nahrán žádný soubor",
|
||||
"Missing a temporary folder" : "Chybí adresář pro dočasné soubory",
|
||||
"Could not write file to disk" : "Nedaří se zapsat soubor do úložiště",
|
||||
"A PHP extension stopped the file upload" : "Rozšíření PHP zastavilo nahrávání souboru.",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Soubor nebyl nahrán nebo jeho velikost přesáhla %s",
|
||||
"Deck" : "Balík",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní management ve stylu Kanban.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Karty jsou nástroj zacílený na osobní nebo projektové plánování týmů v Kanban stylu, jenž je zaintegrovaný do Nextcloudu.\n\n\n- 📥 Vložte a uspořádejte své úkoly do karet\n- 📄 Zapište si dodatečné poznámky \n- 🔖 Přilepte štítek pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přátely nebo rodinou\n- 🚀 Dostaťe svůj projekt pod kontrolu",
|
||||
"Add a new stack" : "Přidat nový zásobník",
|
||||
"Submit" : "Odeslat",
|
||||
"Show archived cards" : "Zobrazit archivované karty",
|
||||
@@ -22,6 +42,7 @@ OC.L10N.register(
|
||||
"Board details" : "Detaily desky",
|
||||
"All Boards" : "Všechny desky",
|
||||
"Archived boards" : "Archivované desky",
|
||||
"Drop your files here to upload it to the card" : "Přetáhněte soubor sem, pokud jej chcete připojit ke kartě.",
|
||||
"Archive" : "Archiv",
|
||||
"Unarchive" : "Zrušit archivování",
|
||||
"Enter a card title" : "Zadejte nadpis karty",
|
||||
@@ -50,9 +71,14 @@ OC.L10N.register(
|
||||
"Delete board" : "Smazat desku",
|
||||
"Reset" : "Obnovit",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
|
||||
"Create new board" : "VYtvořit ovou desku",
|
||||
"Create new board" : "Vytvořit novou desku",
|
||||
"New board title" : "Nadpis nové desky",
|
||||
"Select an attachment" : "Vybrat přílohu",
|
||||
"Cancel upload" : "Zrušit nahrávání",
|
||||
"by" : "od",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Vrátit smazání souboru - v opačném případě bude soubor trvale smazán při dalším běhu cronjobu.",
|
||||
"Undo file deletion" : "Vzít zpět smazání souboru",
|
||||
"Insert the file into the description" : "Vložte soubor do popisku.",
|
||||
"Modified:" : "Upraveno:",
|
||||
"Created:" : "Vytvořeno:",
|
||||
"Choose a tag" : "Vyberte štítek",
|
||||
@@ -65,9 +91,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Klikněte pro výběr",
|
||||
"Remove due date" : "Odstranit termín",
|
||||
"Description" : "Popis",
|
||||
"Attachments" : "Přílohy",
|
||||
"Saved" : "Uloženo",
|
||||
"Unsaved changes" : "Neuložené změny",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Upload attachment" : "Nahrát přílohu",
|
||||
"Insert attachment" : "Vložit přílohu",
|
||||
"Add a card description…" : "Přidat popis karty...",
|
||||
"Shared boards" : "Sdílené desky",
|
||||
"View more" : "Ukázat více",
|
||||
|
||||
31
l10n/cs.json
31
l10n/cs.json
@@ -4,15 +4,35 @@
|
||||
"Remove user from card" : "Odebrat uživatele z karty",
|
||||
"Hours" : "Hodiny",
|
||||
"Minutes" : "Minuty",
|
||||
"Maximum file size of {size} exceeded" : "U souboru {size} překročena nejvyšší umožněná velikost",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Opravdu chcete smazat stack a všechna data v něm?",
|
||||
"Personal" : "Osobní",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "U karty \"%s\" z tabule \"%s\" nastalo plánované datum dokončení.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Tabule \"%s\" s vámi byla nasdílena uživatelem %s.",
|
||||
"{user} has shared the board %s with you." : "{user} s vámi nasdílel tabuli %s.",
|
||||
"No data was provided to create an attachment." : "Žádná data k vytvoření přílohy.",
|
||||
"Finished" : "Dokončeno",
|
||||
"To review" : "K revizi",
|
||||
"Action needed" : "Nutná akce",
|
||||
"Later" : "Později",
|
||||
"To do" : "Udělat",
|
||||
"Doing" : "Provádím",
|
||||
"Done" : "Hotovo",
|
||||
"Example Task 3" : "Třetí úkol pro ukázku",
|
||||
"Example Task 2" : "Druhý úkol pro ukázku",
|
||||
"Example Task 1" : "První úkol pro ukázku",
|
||||
"The file was uploaded" : "Soubor byl nahrán",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Nahrávaný soubor přesahuje nastavení upload_max_filesize v php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Odeslaný soubor přesáhl svou velikostí parametr MAX_FILE_SIZE specifikovaný ve formuláři HTML",
|
||||
"The file was only partially uploaded" : "Soubor byl nahrán pouze z části",
|
||||
"No file was uploaded" : "Nebyl nahrán žádný soubor",
|
||||
"Missing a temporary folder" : "Chybí adresář pro dočasné soubory",
|
||||
"Could not write file to disk" : "Nedaří se zapsat soubor do úložiště",
|
||||
"A PHP extension stopped the file upload" : "Rozšíření PHP zastavilo nahrávání souboru.",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Soubor nebyl nahrán nebo jeho velikost přesáhla %s",
|
||||
"Deck" : "Balík",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nástroj pro projektový a osobní management ve stylu Kanban.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Karty jsou nástroj zacílený na osobní nebo projektové plánování týmů v Kanban stylu, jenž je zaintegrovaný do Nextcloudu.\n\n\n- 📥 Vložte a uspořádejte své úkoly do karet\n- 📄 Zapište si dodatečné poznámky \n- 🔖 Přilepte štítek pro ještě lepší organizaci\n- 👥 Sdílejte se svým týmem, přátely nebo rodinou\n- 🚀 Dostaťe svůj projekt pod kontrolu",
|
||||
"Add a new stack" : "Přidat nový zásobník",
|
||||
"Submit" : "Odeslat",
|
||||
"Show archived cards" : "Zobrazit archivované karty",
|
||||
@@ -20,6 +40,7 @@
|
||||
"Board details" : "Detaily desky",
|
||||
"All Boards" : "Všechny desky",
|
||||
"Archived boards" : "Archivované desky",
|
||||
"Drop your files here to upload it to the card" : "Přetáhněte soubor sem, pokud jej chcete připojit ke kartě.",
|
||||
"Archive" : "Archiv",
|
||||
"Unarchive" : "Zrušit archivování",
|
||||
"Enter a card title" : "Zadejte nadpis karty",
|
||||
@@ -48,9 +69,14 @@
|
||||
"Delete board" : "Smazat desku",
|
||||
"Reset" : "Obnovit",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Vrátit smazání tabule - Tabule bude jinak trvale odstraněna během příštího běhu cronjobu.",
|
||||
"Create new board" : "VYtvořit ovou desku",
|
||||
"Create new board" : "Vytvořit novou desku",
|
||||
"New board title" : "Nadpis nové desky",
|
||||
"Select an attachment" : "Vybrat přílohu",
|
||||
"Cancel upload" : "Zrušit nahrávání",
|
||||
"by" : "od",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Vrátit smazání souboru - v opačném případě bude soubor trvale smazán při dalším běhu cronjobu.",
|
||||
"Undo file deletion" : "Vzít zpět smazání souboru",
|
||||
"Insert the file into the description" : "Vložte soubor do popisku.",
|
||||
"Modified:" : "Upraveno:",
|
||||
"Created:" : "Vytvořeno:",
|
||||
"Choose a tag" : "Vyberte štítek",
|
||||
@@ -63,9 +89,12 @@
|
||||
"Click to set" : "Klikněte pro výběr",
|
||||
"Remove due date" : "Odstranit termín",
|
||||
"Description" : "Popis",
|
||||
"Attachments" : "Přílohy",
|
||||
"Saved" : "Uloženo",
|
||||
"Unsaved changes" : "Neuložené změny",
|
||||
"Formatting help" : "Nápověda k formátování",
|
||||
"Upload attachment" : "Nahrát přílohu",
|
||||
"Insert attachment" : "Vložit přílohu",
|
||||
"Add a card description…" : "Přidat popis karty...",
|
||||
"Shared boards" : "Sdílené desky",
|
||||
"View more" : "Ukázat více",
|
||||
|
||||
17
l10n/de.js
17
l10n/de.js
@@ -6,20 +6,28 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"No file uploaded" : "Keine Datei hochgeladen",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
|
||||
"Add a new stack" : "Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -27,6 +35,7 @@ OC.L10N.register(
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
@@ -58,14 +67,18 @@ OC.L10N.register(
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Anhang auswählen",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Nutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Click to set" : "Klicken zum Übernehmen",
|
||||
|
||||
17
l10n/de.json
17
l10n/de.json
@@ -4,20 +4,28 @@
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchtest du diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Dir geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Dir geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"No file uploaded" : "Keine Datei hochgeladen",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werkzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Füge Deine Aufgaben zu den Karten hinzu und ordne diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teile mit Deinem Team, Freunden oder der Familie\n- 🚀 Organisiere Dein Projekt",
|
||||
"Add a new stack" : "Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -25,6 +33,7 @@
|
||||
"Board details" : "Board-Details",
|
||||
"All Boards" : "Alle Boards",
|
||||
"Archived boards" : "Archivierte Boards",
|
||||
"Drop your files here to upload it to the card" : "Lege Deine Dateien hier ab, um sie auf die Karte hochzuladen",
|
||||
"Archive" : "Archivieren",
|
||||
"Unarchive" : "Dearchivieren",
|
||||
"Enter a card title" : "Kartentitel eingeben",
|
||||
@@ -56,14 +65,18 @@
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Anhang auswählen",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Nutzer zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer zum Zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuweisen",
|
||||
"Due date" : "Fälligkeitsdatum",
|
||||
"Click to set" : "Klicken zum Übernehmen",
|
||||
|
||||
@@ -6,26 +6,28 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded" : "Keine Datei hochgeladen",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie sie ein.\n📄 Zusätzliche Hinweise in der Abschrift notieren\n🔖 Vergabe von Labels für noch bessere Organisation\n👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n🚀 Organisieren Sie Ihr Projekt",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
|
||||
"Add a new stack" : "Neuen Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -65,17 +67,18 @@ OC.L10N.register(
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Wählen Sie einen Anhang",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten Cronjob-Lauf gelöscht.",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Fügen Sie die Datei in die Beschreibung ein",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Benutzer zuordnen",
|
||||
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
|
||||
"Due date" : "Zieltermin",
|
||||
"Click to set" : "Setzen",
|
||||
|
||||
@@ -4,26 +4,28 @@
|
||||
"Remove user from card" : "Benutzer von Karte entfernen",
|
||||
"Hours" : "Stunden",
|
||||
"Minutes" : "Minuten",
|
||||
"Maximum file size of {size} exceeded" : "Maximale Dateigröße von {size} überschritten",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Möchten Sie diesen Stapel mit allen Daten wirklich löschen?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Die Karte \"%s\" auf \"%s\" ist überfällig.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Das Board \"%s\" wurde von %s mit Ihnen geteilt.",
|
||||
"{user} has shared the board %s with you." : "{user} hat das Board %s mit Ihnen geteilt.",
|
||||
"No data was provided to create an attachment." : "Es wurde keine Daten zum Erstellen eines Anhangs bereitgestellt.",
|
||||
"Finished" : "Abgeschlossen",
|
||||
"To review" : "Zu überprüfen",
|
||||
"Action needed" : "Handlung erforderlich",
|
||||
"Later" : "Später",
|
||||
"The file was uploaded" : "Die Datei wurde hochgeladen",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Die hochgeladene Datei überschreitet die upload_max_filesize-Vorgabe in php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe erlaubt, die im HTML-Formular spezifiziert ist",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Die Datei ist größer, als die MAX_FILE_SIZE-Vorgabe, die im HTML-Formular angegeben ist.",
|
||||
"The file was only partially uploaded" : "Die Datei konnte nur teilweise hochgeladen werden",
|
||||
"No file was uploaded" : "Es wurde keine Datei hochgeladen",
|
||||
"Missing a temporary folder" : "Kein temporärer Ordner vorhanden",
|
||||
"Could not write file to disk" : "Die Datei konnte nicht auf die Festplatte geschrieben werden",
|
||||
"A PHP extension stopped the file upload" : "Eine PHP-Erweiterung hat das Hochladen der Datei gestoppt",
|
||||
"No file uploaded" : "Keine Datei hochgeladen",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Keine Datei hochgeladen oder die Dateigröße überschreitet %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Ein Kanban Werzeug für Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie sie ein.\n📄 Zusätzliche Hinweise in der Abschrift notieren\n🔖 Vergabe von Labels für noch bessere Organisation\n👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n🚀 Organisieren Sie Ihr Projekt",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck ist ein Organisationstool im Kanban-Stil für die persönliche Planung und Projektorganisation von Teams, die in Nextcloud integriert sind.\n\n\n- 📥 Fügen Sie Ihre Aufgaben zu den Karten hinzu und ordnen Sie diese\n- 📄 Zusätzliche Hinweise in der Abschrift notieren\n- 🔖 Vergabe von Labels für noch bessere Organisation\n- 👥 Teilen Sie mit Ihrem Team, Ihren Freunden oder Ihrer Familie\n- 🚀 Organisieren Sie Ihr Projekt",
|
||||
"Add a new stack" : "Neuen Stapel hinzufügen",
|
||||
"Submit" : "Übermitteln",
|
||||
"Show archived cards" : "Archivierte Karten anzeigen",
|
||||
@@ -63,17 +65,18 @@
|
||||
"Create new board" : "Neues Board erstellen",
|
||||
"New board title" : "Neuer Board-Titel",
|
||||
"Select an attachment" : "Wählen Sie einen Anhang",
|
||||
"Cancel upload" : "Hochladen abbrechen",
|
||||
"by" : "von",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten Cronjob-Lauf gelöscht.",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dateilöschung rückgängig machen - Andernfalls wird die Datei beim nächsten CronJob-Lauf gelöscht.",
|
||||
"Undo file deletion" : "Dateilöschung rückgängig machen",
|
||||
"Insert the file into the description" : "Fügen Sie die Datei in die Beschreibung ein",
|
||||
"Insert the file into the description" : "Füge die Datei in die Beschreibung ein",
|
||||
"Modified:" : "Geändert:",
|
||||
"Created:" : "Erstellt:",
|
||||
"Choose a tag" : "Schlagwort auswählen",
|
||||
"Add a tag" : "Schlagwort hinzufügen",
|
||||
"Select tags" : "Schlagworte auswählen",
|
||||
"Assign users" : "Benutzer zuordnen",
|
||||
"Choose a user to assign" : "Wählen Sie einen Benutzer zum Zuweisen",
|
||||
"Choose a user to assign" : "Wähle einen Benutzer für die Zuweisung aus",
|
||||
"Assign this card to a user" : "Diese Karte einem Benutzer zuordnen",
|
||||
"Due date" : "Zieltermin",
|
||||
"Click to set" : "Setzen",
|
||||
|
||||
20
l10n/es.js
20
l10n/es.js
@@ -6,14 +6,25 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
|
||||
"No data was provided to create an attachment." : "No se proporcionaron datos para crear un adjunto",
|
||||
"Finished" : "Finalizado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"The file was uploaded" : "Se ha subido el archivo",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
|
||||
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
|
||||
"No file was uploaded" : "No se ha subido ningún archivo",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
|
||||
@@ -24,6 +35,7 @@ OC.L10N.register(
|
||||
"Board details" : "Detalles del tablero",
|
||||
"All Boards" : "Todos los tableros",
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Enter a card title" : "Introducir título de tarjeta",
|
||||
@@ -54,7 +66,12 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
|
||||
"Create new board" : "Crear nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"Select an attachment" : "Selecciona un adjunto",
|
||||
"Cancel upload" : "Cancelar la subida",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
|
||||
"Undo file deletion" : "Deshacer eliminación del archivo",
|
||||
"Insert the file into the description" : "Introduce el archivo en la descripción",
|
||||
"Modified:" : "Modificado: ",
|
||||
"Created:" : "Creado: ",
|
||||
"Choose a tag" : "Escoge una etiqueta",
|
||||
@@ -67,9 +84,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Pinchar para establecer",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Description" : "Descripción",
|
||||
"Attachments" : "Adjuntos",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Upload attachment" : "Subir adjunto",
|
||||
"Insert attachment" : "Insertar adjunto",
|
||||
"Add a card description…" : "Añadir una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
20
l10n/es.json
20
l10n/es.json
@@ -4,14 +4,25 @@
|
||||
"Remove user from card" : "Eliminar usuario de la tarjeta",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Tamaño máximo de archivo de {size} excedido",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "¿Estás seguro de que quieres eliminar el mazo con todos sus datos?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La tarjeta \"%s\" en \"%s\" ha alcanzado su fecha límite.",
|
||||
"The board \"%s\" has been shared with you by %s." : "El tablero \"%s\" ha sido compartido contigo por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha compartido el tablero %s contigo.",
|
||||
"No data was provided to create an attachment." : "No se proporcionaron datos para crear un adjunto",
|
||||
"Finished" : "Finalizado",
|
||||
"To review" : "Para revisar",
|
||||
"Action needed" : "Acción necesaria",
|
||||
"Later" : "Después",
|
||||
"The file was uploaded" : "Se ha subido el archivo",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "El archivo subido excede la directiva upload_max_filesize en php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "El archivo subido excede la directiva MAX_FILE-SIZE directive que se especificó en el formulario web",
|
||||
"The file was only partially uploaded" : "El archivo se ha subido solo parcialmente",
|
||||
"No file was uploaded" : "No se ha subido ningún archivo",
|
||||
"Missing a temporary folder" : "Falta una carpeta temporal",
|
||||
"Could not write file to disk" : "No se ha podido escribir el archivo al disco",
|
||||
"A PHP extension stopped the file upload" : "Una extensión de PHP ha detenido la subida del archivo",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "No se ha subido ningún archivo, o el tamaño del archivo excede el máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Una herramienta de manejo de proyectos y personal al estilo kanban para Nextcloud.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deckes una herramienta de organización al estilo kanban enfocada en la planificación personal y en la organización de proyectos para equipos, integrada en Nextcloud.\n\n\n- 📥 Añade tus tareas a tarjetas y ordénalas\n- 📄 Escribe notas adicionales en markdown\n- 🔖 Asigna etiquetas para una organización aún mejor\n- 👥 Comparte con tu equipo, amigos o familia\n- 🚀 Organiza tu proyecto",
|
||||
@@ -22,6 +33,7 @@
|
||||
"Board details" : "Detalles del tablero",
|
||||
"All Boards" : "Todos los tableros",
|
||||
"Archived boards" : "Tableros archivados",
|
||||
"Drop your files here to upload it to the card" : "Arrastra tus archivos aquí para subirlos a la tarjeta",
|
||||
"Archive" : "Archivar",
|
||||
"Unarchive" : "Desarchivar",
|
||||
"Enter a card title" : "Introducir título de tarjeta",
|
||||
@@ -52,7 +64,12 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Deshacer borrado del tablero. Si no, el tablero será eliminado durante la próxima ejecución del cronjob.",
|
||||
"Create new board" : "Crear nuevo tablero",
|
||||
"New board title" : "Nuevo título de tablero",
|
||||
"Select an attachment" : "Selecciona un adjunto",
|
||||
"Cancel upload" : "Cancelar la subida",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Deshacer eliminación del archivo. De otra forma el archivo se borrará durante la próxima ejecución del trabajo cron.",
|
||||
"Undo file deletion" : "Deshacer eliminación del archivo",
|
||||
"Insert the file into the description" : "Introduce el archivo en la descripción",
|
||||
"Modified:" : "Modificado: ",
|
||||
"Created:" : "Creado: ",
|
||||
"Choose a tag" : "Escoge una etiqueta",
|
||||
@@ -65,9 +82,12 @@
|
||||
"Click to set" : "Pinchar para establecer",
|
||||
"Remove due date" : "Eliminar fecha límite",
|
||||
"Description" : "Descripción",
|
||||
"Attachments" : "Adjuntos",
|
||||
"Saved" : "Guardado",
|
||||
"Unsaved changes" : "Cambios no guardados",
|
||||
"Formatting help" : "Ayuda de formato",
|
||||
"Upload attachment" : "Subir adjunto",
|
||||
"Insert attachment" : "Insertar adjunto",
|
||||
"Add a card description…" : "Añadir una descripción de tarjeta...",
|
||||
"Shared boards" : "Tableros compartidos",
|
||||
"View more" : "Ver más",
|
||||
|
||||
14
l10n/fi.js
14
l10n/fi.js
@@ -6,6 +6,8 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Poista käyttäjä kortilta",
|
||||
"Hours" : "Tunnit",
|
||||
"Minutes" : "Minuutit",
|
||||
"Maximum file size of {size} exceeded" : "Tiedoston enimmäiskoko {size} ylitetty",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Haluatko varmasti poistaa pinon ja kaikki siinä olevat tiedot?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortin \"%s\" on \"%s\" eräpäivä on tullut vastaan.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Taulu \"%s\" on jaettu kanssasi käyttäjän %s toimesta.",
|
||||
"{user} has shared the board %s with you." : "{user} on jakanut taulun %s kanssasi.",
|
||||
@@ -13,12 +15,19 @@ OC.L10N.register(
|
||||
"To review" : "Arvostella",
|
||||
"Action needed" : "Toimia vaaditaan",
|
||||
"Later" : "Myöhemmin",
|
||||
"The file was uploaded" : "Tiedosto lähetettiin",
|
||||
"The file was only partially uploaded" : "Tiedosto lähetettiin vain osittain",
|
||||
"No file was uploaded" : "Tiedostoa ei lähetetty",
|
||||
"Could not write file to disk" : "Tiedostoa ei voitu kirjoittaa levylle",
|
||||
"Deck" : "Kansi",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Kanban-tyylinen projektien ja henkilökohtaisten asioiden hallintatyökalu Nextcloudille",
|
||||
"Add a new stack" : "Lisää uusi pino",
|
||||
"Show archived cards" : "Näytä arkistoidut kortit",
|
||||
"Hide archived cards" : "Piilota arkistoidut kortit",
|
||||
"Board details" : "Taulun tiedot",
|
||||
"All Boards" : "Kaikki taulut",
|
||||
"Archived boards" : "Arkistoidut taulut",
|
||||
"Drop your files here to upload it to the card" : "Pudota tiedostot tähän lähettääksesi ne kortille",
|
||||
"Archive" : "Arkisto",
|
||||
"Unarchive" : "Pois arkistosta",
|
||||
"Enter a card title" : "Anna otsikko",
|
||||
@@ -42,10 +51,13 @@ OC.L10N.register(
|
||||
"More actions" : "Lisää toimintoja",
|
||||
"Edit board" : "Muokkaa taulua",
|
||||
"Archive board" : "Arkistoi taulu",
|
||||
"Unarchive board" : "Kumoa taulun arkistointi",
|
||||
"Delete board" : "Poista taulu",
|
||||
"Create new board" : "Luo uusi taulu",
|
||||
"New board title" : "Uusi taulun otsikko",
|
||||
"Select an attachment" : "Valitse liite",
|
||||
"by" : " Kirjoittaja:",
|
||||
"Undo file deletion" : "Kumoa tiedoston luonti",
|
||||
"Modified:" : "Muokattu:",
|
||||
"Created:" : "Luotu:",
|
||||
"Choose a tag" : "Valitse tunniste",
|
||||
@@ -58,9 +70,11 @@ OC.L10N.register(
|
||||
"Click to set" : "Napsauta asettaaksesi",
|
||||
"Remove due date" : "Poista eräpäivä",
|
||||
"Description" : "Kuvaus",
|
||||
"Attachments" : "Liitteet",
|
||||
"Saved" : "Tallennettu",
|
||||
"Unsaved changes" : "Tallentamattomia muutoksia",
|
||||
"Formatting help" : "Muotoiluapu",
|
||||
"Upload attachment" : "Lähetä liite",
|
||||
"Add a card description…" : "Lisää kortin kuvaus…",
|
||||
"Shared boards" : "Jaetut taulut",
|
||||
"View more" : "Näytä lisää",
|
||||
|
||||
14
l10n/fi.json
14
l10n/fi.json
@@ -4,6 +4,8 @@
|
||||
"Remove user from card" : "Poista käyttäjä kortilta",
|
||||
"Hours" : "Tunnit",
|
||||
"Minutes" : "Minuutit",
|
||||
"Maximum file size of {size} exceeded" : "Tiedoston enimmäiskoko {size} ylitetty",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Haluatko varmasti poistaa pinon ja kaikki siinä olevat tiedot?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Kortin \"%s\" on \"%s\" eräpäivä on tullut vastaan.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Taulu \"%s\" on jaettu kanssasi käyttäjän %s toimesta.",
|
||||
"{user} has shared the board %s with you." : "{user} on jakanut taulun %s kanssasi.",
|
||||
@@ -11,12 +13,19 @@
|
||||
"To review" : "Arvostella",
|
||||
"Action needed" : "Toimia vaaditaan",
|
||||
"Later" : "Myöhemmin",
|
||||
"The file was uploaded" : "Tiedosto lähetettiin",
|
||||
"The file was only partially uploaded" : "Tiedosto lähetettiin vain osittain",
|
||||
"No file was uploaded" : "Tiedostoa ei lähetetty",
|
||||
"Could not write file to disk" : "Tiedostoa ei voitu kirjoittaa levylle",
|
||||
"Deck" : "Kansi",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Kanban-tyylinen projektien ja henkilökohtaisten asioiden hallintatyökalu Nextcloudille",
|
||||
"Add a new stack" : "Lisää uusi pino",
|
||||
"Show archived cards" : "Näytä arkistoidut kortit",
|
||||
"Hide archived cards" : "Piilota arkistoidut kortit",
|
||||
"Board details" : "Taulun tiedot",
|
||||
"All Boards" : "Kaikki taulut",
|
||||
"Archived boards" : "Arkistoidut taulut",
|
||||
"Drop your files here to upload it to the card" : "Pudota tiedostot tähän lähettääksesi ne kortille",
|
||||
"Archive" : "Arkisto",
|
||||
"Unarchive" : "Pois arkistosta",
|
||||
"Enter a card title" : "Anna otsikko",
|
||||
@@ -40,10 +49,13 @@
|
||||
"More actions" : "Lisää toimintoja",
|
||||
"Edit board" : "Muokkaa taulua",
|
||||
"Archive board" : "Arkistoi taulu",
|
||||
"Unarchive board" : "Kumoa taulun arkistointi",
|
||||
"Delete board" : "Poista taulu",
|
||||
"Create new board" : "Luo uusi taulu",
|
||||
"New board title" : "Uusi taulun otsikko",
|
||||
"Select an attachment" : "Valitse liite",
|
||||
"by" : " Kirjoittaja:",
|
||||
"Undo file deletion" : "Kumoa tiedoston luonti",
|
||||
"Modified:" : "Muokattu:",
|
||||
"Created:" : "Luotu:",
|
||||
"Choose a tag" : "Valitse tunniste",
|
||||
@@ -56,9 +68,11 @@
|
||||
"Click to set" : "Napsauta asettaaksesi",
|
||||
"Remove due date" : "Poista eräpäivä",
|
||||
"Description" : "Kuvaus",
|
||||
"Attachments" : "Liitteet",
|
||||
"Saved" : "Tallennettu",
|
||||
"Unsaved changes" : "Tallentamattomia muutoksia",
|
||||
"Formatting help" : "Muotoiluapu",
|
||||
"Upload attachment" : "Lähetä liite",
|
||||
"Add a card description…" : "Lisää kortin kuvaus…",
|
||||
"Shared boards" : "Jaetut taulut",
|
||||
"View more" : "Näytä lisää",
|
||||
|
||||
19
l10n/fr.js
19
l10n/fr.js
@@ -6,18 +6,28 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Supprimer l'utilisateur de la carte",
|
||||
"Hours" : "Heures",
|
||||
"Minutes" : "Minutes",
|
||||
"Maximum file size of {size} exceeded" : "Taille de fichier maximale de {size} dépassée",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Êtes-vous sûr de vouloir supprimer la pile avec toutes ses données ?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Le délais de la carte %s de %s est expiré.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Le tableau %s a été partagé avec vous par %s.",
|
||||
"{user} has shared the board %s with you." : "{user} a partagé le tableau %s avec vous.",
|
||||
"No data was provided to create an attachment." : "Aucune donnée n'a été fournie pour créer une pièce jointe.",
|
||||
"Finished" : "Terminé",
|
||||
"To review" : "A réviser",
|
||||
"Action needed" : "Action requise",
|
||||
"Later" : "Plus tard",
|
||||
"The file was uploaded" : "Le fichier a été téléchargé",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Le fichier téléversé dépasse la valeur upload_max_filesize située dans le fichier php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML",
|
||||
"The file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé",
|
||||
"No file was uploaded" : "Aucun fichier n'a été téléchargé",
|
||||
"Missing a temporary folder" : "Absence de dossier temporaire",
|
||||
"Could not write file to disk" : "Impossible d'écrire le fichier sur le disque.",
|
||||
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté le téléversement du fichier",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Aucun fichier téléversé ou la taille du fichier dépasse la maximum de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : " Un outil de style kanban pour Nextcloud, pour la gestion de votre vie personnelle et de vos projets.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 🚀 Organisez vos projets",
|
||||
"Add a new stack" : "Ajouter une nouvelle pile",
|
||||
"Submit" : "Envoyer",
|
||||
"Show archived cards" : "Afficher les cartes archivées",
|
||||
@@ -25,6 +35,7 @@ OC.L10N.register(
|
||||
"Board details" : "Détails du tableau",
|
||||
"All Boards" : "Tous les tableaux",
|
||||
"Archived boards" : "Tableaux archivés",
|
||||
"Drop your files here to upload it to the card" : "Déposez vos fichiers ici pour les téléverser sur la carte",
|
||||
"Archive" : "Archiver",
|
||||
"Unarchive" : "Ne plus archiver",
|
||||
"Enter a card title" : "Saisissez un titre de carte",
|
||||
@@ -55,7 +66,12 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Annuler la suppression du tableau - Autrement le tableau sera supprimé lors du prochain lancement de la tâche cron.",
|
||||
"Create new board" : "Créer un nouveau tableau",
|
||||
"New board title" : "Nouveau titre pour le tableau",
|
||||
"Select an attachment" : "Sélectionner une pièce jointe",
|
||||
"Cancel upload" : "Annuler le téléversement",
|
||||
"by" : "par",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Annuler la suppression du fichier - Autrement le fichier sera supprimé lors du prochain lancement de la tâche cron.",
|
||||
"Undo file deletion" : "Annuler la suppression du fichier",
|
||||
"Insert the file into the description" : "Insérer le fichier dans la description",
|
||||
"Modified:" : "Modifié le :",
|
||||
"Created:" : "Créé le :",
|
||||
"Choose a tag" : "Choisir une étiquette",
|
||||
@@ -68,9 +84,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Cliquez pour définir",
|
||||
"Remove due date" : "Supprimer la date d'échéance",
|
||||
"Description" : "Description",
|
||||
"Attachments" : "Pièces jointes",
|
||||
"Saved" : "Enregistré",
|
||||
"Unsaved changes" : "Modifications non sauvegardées",
|
||||
"Formatting help" : "Aide sur la mise en forme",
|
||||
"Upload attachment" : "Téléverser la pièce jointe",
|
||||
"Insert attachment" : "Insérer une pièce jointe",
|
||||
"Add a card description…" : "Ajouter une description pour la carte",
|
||||
"Shared boards" : "Tableaux partagés",
|
||||
"View more" : "Voir plus",
|
||||
|
||||
19
l10n/fr.json
19
l10n/fr.json
@@ -4,18 +4,28 @@
|
||||
"Remove user from card" : "Supprimer l'utilisateur de la carte",
|
||||
"Hours" : "Heures",
|
||||
"Minutes" : "Minutes",
|
||||
"Maximum file size of {size} exceeded" : "Taille de fichier maximale de {size} dépassée",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Êtes-vous sûr de vouloir supprimer la pile avec toutes ses données ?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Le délais de la carte %s de %s est expiré.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Le tableau %s a été partagé avec vous par %s.",
|
||||
"{user} has shared the board %s with you." : "{user} a partagé le tableau %s avec vous.",
|
||||
"No data was provided to create an attachment." : "Aucune donnée n'a été fournie pour créer une pièce jointe.",
|
||||
"Finished" : "Terminé",
|
||||
"To review" : "A réviser",
|
||||
"Action needed" : "Action requise",
|
||||
"Later" : "Plus tard",
|
||||
"The file was uploaded" : "Le fichier a été téléchargé",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Le fichier téléversé dépasse la valeur upload_max_filesize située dans le fichier php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Le fichier envoyé dépasse la valeur MAX_FILE_SIZE qui était spécifiée dans le formulaire HTML",
|
||||
"The file was only partially uploaded" : "Le fichier n'a été que partiellement envoyé",
|
||||
"No file was uploaded" : "Aucun fichier n'a été téléchargé",
|
||||
"Missing a temporary folder" : "Absence de dossier temporaire",
|
||||
"Could not write file to disk" : "Impossible d'écrire le fichier sur le disque.",
|
||||
"A PHP extension stopped the file upload" : "Une extension PHP a arrêté le téléversement du fichier",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Aucun fichier téléversé ou la taille du fichier dépasse la maximum de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : " Un outil de style kanban pour Nextcloud, pour la gestion de votre vie personnelle et de vos projets.",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck est un outil d'organisation de style kanban destiné à la planification personnelle et à l'organisation de projets pour les équipes intégrées à Nextcloud.\n\n\n- 📥 Ajoutez vos tâches à des cartes et organisez-les\n- 📄 Écrivez des notes supplémentaires en Markdown\n- 🔖 Affectez des étiquettes pour une organisation encore meilleure\n- 👥 Partagez avec votre équipe, vos amis ou votre famille\n- 🚀 Organisez vos projets",
|
||||
"Add a new stack" : "Ajouter une nouvelle pile",
|
||||
"Submit" : "Envoyer",
|
||||
"Show archived cards" : "Afficher les cartes archivées",
|
||||
@@ -23,6 +33,7 @@
|
||||
"Board details" : "Détails du tableau",
|
||||
"All Boards" : "Tous les tableaux",
|
||||
"Archived boards" : "Tableaux archivés",
|
||||
"Drop your files here to upload it to the card" : "Déposez vos fichiers ici pour les téléverser sur la carte",
|
||||
"Archive" : "Archiver",
|
||||
"Unarchive" : "Ne plus archiver",
|
||||
"Enter a card title" : "Saisissez un titre de carte",
|
||||
@@ -53,7 +64,12 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Annuler la suppression du tableau - Autrement le tableau sera supprimé lors du prochain lancement de la tâche cron.",
|
||||
"Create new board" : "Créer un nouveau tableau",
|
||||
"New board title" : "Nouveau titre pour le tableau",
|
||||
"Select an attachment" : "Sélectionner une pièce jointe",
|
||||
"Cancel upload" : "Annuler le téléversement",
|
||||
"by" : "par",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Annuler la suppression du fichier - Autrement le fichier sera supprimé lors du prochain lancement de la tâche cron.",
|
||||
"Undo file deletion" : "Annuler la suppression du fichier",
|
||||
"Insert the file into the description" : "Insérer le fichier dans la description",
|
||||
"Modified:" : "Modifié le :",
|
||||
"Created:" : "Créé le :",
|
||||
"Choose a tag" : "Choisir une étiquette",
|
||||
@@ -66,9 +82,12 @@
|
||||
"Click to set" : "Cliquez pour définir",
|
||||
"Remove due date" : "Supprimer la date d'échéance",
|
||||
"Description" : "Description",
|
||||
"Attachments" : "Pièces jointes",
|
||||
"Saved" : "Enregistré",
|
||||
"Unsaved changes" : "Modifications non sauvegardées",
|
||||
"Formatting help" : "Aide sur la mise en forme",
|
||||
"Upload attachment" : "Téléverser la pièce jointe",
|
||||
"Insert attachment" : "Insérer une pièce jointe",
|
||||
"Add a card description…" : "Ajouter une description pour la carte",
|
||||
"Shared boards" : "Tableaux partagés",
|
||||
"View more" : "Voir plus",
|
||||
|
||||
20
l10n/he.js
20
l10n/he.js
@@ -6,14 +6,25 @@ OC.L10N.register(
|
||||
"Remove user from card" : "הסרת משתמש מכרטיס",
|
||||
"Hours" : "שעות",
|
||||
"Minutes" : "דקות",
|
||||
"Maximum file size of {size} exceeded" : "גודל הקבצים המרבי {size} הושג",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "למחוק את הערימה הזאת עם כל הנתונים שלה?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "הכרטיס „%s” שתחת „%s” הגיע למועד התפוגה שלו.",
|
||||
"The board \"%s\" has been shared with you by %s." : "הלוח „%s” שותף אתך על ידי %s.",
|
||||
"{user} has shared the board %s with you." : "הלוח %s שותף אתך על ידי {user}",
|
||||
"No data was provided to create an attachment." : "לא סופקו נתונים ליצירת קובץ מצורף",
|
||||
"Finished" : "הסתיים",
|
||||
"To review" : "לסקירה",
|
||||
"Action needed" : "נדרשת פעולה",
|
||||
"Later" : "מאוחר יותר",
|
||||
"The file was uploaded" : "הקובץ הועלה",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "הקובץ שהועלה חורג מההנחיה upload_max_filesize ב־php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "הקובץ שהועלה חורג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML",
|
||||
"The file was only partially uploaded" : "הקובץ הועלה באופן חלקי בלבד",
|
||||
"No file was uploaded" : "לא הועלה קובץ",
|
||||
"Missing a temporary folder" : "חסרה תיקייה זמנית",
|
||||
"Could not write file to disk" : "לא ניתן לכתוב לכונן",
|
||||
"A PHP extension stopped the file upload" : "הרחבת PHP עצרה את העלאת הקובץ",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "לא הועלה אף קובץ או שגודל הקובץ חרג מהסף המרבי של %s",
|
||||
"Deck" : "חפיסה",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "כלי ניהול למיזמים או לדברים אישיים עבור Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "חבילה היא כלי ניהול בסגנון קנבן שמיועד לתכנון אישי או לארגון מיזמים לצוותים בשילוב עם Nextcloud.\n\n\n- 📥 הוספת המשימות שלך וסידור שלהן\n- 📄 כתיבת הערות נוספות בתצורת markdown\n- 🔖 הקצאת תוויות למטרת ארגון טוב יותר\n- 👥 שיתוף עם הצוות, החברים או המשפחה שלך\n- 🚀 ארגון המיזם שלך כמו שצריך",
|
||||
@@ -24,6 +35,7 @@ OC.L10N.register(
|
||||
"Board details" : "פרטי לוח",
|
||||
"All Boards" : "כל הלוחות",
|
||||
"Archived boards" : "לוחות שנשמרו בארכיון",
|
||||
"Drop your files here to upload it to the card" : "ניתן להשליך את הקבצים שלך כאן כדי להעלות אותם לכרטיס",
|
||||
"Archive" : "לארכיון",
|
||||
"Unarchive" : "הוצאה מהארכיון",
|
||||
"Enter a card title" : "נא להקליד כותרת לכרטיס",
|
||||
@@ -54,7 +66,12 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "ביטול מחיקת לוח - אחרת הלוח יימחק במהלך ריצת ה־cronjob הבאה.",
|
||||
"Create new board" : "יצירת לוח חדש",
|
||||
"New board title" : "כותרת לוח חדשה",
|
||||
"Select an attachment" : "נא לבחור קובץ מצורף",
|
||||
"Cancel upload" : "ביטול העלאה",
|
||||
"by" : "מאת",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "ביטול מחיקת קובץ - אחרת הקובץ יימחק עם ריצת משימת ה־cron הבאה.",
|
||||
"Undo file deletion" : "ביטול מחיקת קובץ",
|
||||
"Insert the file into the description" : "הוספת הקובץ לתיאור",
|
||||
"Modified:" : "מועד השינוי",
|
||||
"Created:" : "מועד היצירה:",
|
||||
"Choose a tag" : "נא לבחור תגית",
|
||||
@@ -67,9 +84,12 @@ OC.L10N.register(
|
||||
"Click to set" : "יש ללחוץ להגדרה",
|
||||
"Remove due date" : "הסרת מועד התפוגה",
|
||||
"Description" : "תיאוג",
|
||||
"Attachments" : "קבצים מצורפים",
|
||||
"Saved" : "נשמר",
|
||||
"Unsaved changes" : "שינויים שלא נשמרו",
|
||||
"Formatting help" : "עזרה בסידור בתבנית",
|
||||
"Upload attachment" : "העלאת קבצים מצורפים",
|
||||
"Insert attachment" : "הוספת קובץ מצורף",
|
||||
"Add a card description…" : "הוספת תיאור כרטיס…",
|
||||
"Shared boards" : "לוחות משותפים",
|
||||
"View more" : "הצגת עוד",
|
||||
|
||||
20
l10n/he.json
20
l10n/he.json
@@ -4,14 +4,25 @@
|
||||
"Remove user from card" : "הסרת משתמש מכרטיס",
|
||||
"Hours" : "שעות",
|
||||
"Minutes" : "דקות",
|
||||
"Maximum file size of {size} exceeded" : "גודל הקבצים המרבי {size} הושג",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "למחוק את הערימה הזאת עם כל הנתונים שלה?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "הכרטיס „%s” שתחת „%s” הגיע למועד התפוגה שלו.",
|
||||
"The board \"%s\" has been shared with you by %s." : "הלוח „%s” שותף אתך על ידי %s.",
|
||||
"{user} has shared the board %s with you." : "הלוח %s שותף אתך על ידי {user}",
|
||||
"No data was provided to create an attachment." : "לא סופקו נתונים ליצירת קובץ מצורף",
|
||||
"Finished" : "הסתיים",
|
||||
"To review" : "לסקירה",
|
||||
"Action needed" : "נדרשת פעולה",
|
||||
"Later" : "מאוחר יותר",
|
||||
"The file was uploaded" : "הקובץ הועלה",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "הקובץ שהועלה חורג מההנחיה upload_max_filesize ב־php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "הקובץ שהועלה חורג מההנחיה MAX_FILE_SIZE שצוינה בטופס ה־HTML",
|
||||
"The file was only partially uploaded" : "הקובץ הועלה באופן חלקי בלבד",
|
||||
"No file was uploaded" : "לא הועלה קובץ",
|
||||
"Missing a temporary folder" : "חסרה תיקייה זמנית",
|
||||
"Could not write file to disk" : "לא ניתן לכתוב לכונן",
|
||||
"A PHP extension stopped the file upload" : "הרחבת PHP עצרה את העלאת הקובץ",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "לא הועלה אף קובץ או שגודל הקובץ חרג מהסף המרבי של %s",
|
||||
"Deck" : "חפיסה",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "כלי ניהול למיזמים או לדברים אישיים עבור Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "חבילה היא כלי ניהול בסגנון קנבן שמיועד לתכנון אישי או לארגון מיזמים לצוותים בשילוב עם Nextcloud.\n\n\n- 📥 הוספת המשימות שלך וסידור שלהן\n- 📄 כתיבת הערות נוספות בתצורת markdown\n- 🔖 הקצאת תוויות למטרת ארגון טוב יותר\n- 👥 שיתוף עם הצוות, החברים או המשפחה שלך\n- 🚀 ארגון המיזם שלך כמו שצריך",
|
||||
@@ -22,6 +33,7 @@
|
||||
"Board details" : "פרטי לוח",
|
||||
"All Boards" : "כל הלוחות",
|
||||
"Archived boards" : "לוחות שנשמרו בארכיון",
|
||||
"Drop your files here to upload it to the card" : "ניתן להשליך את הקבצים שלך כאן כדי להעלות אותם לכרטיס",
|
||||
"Archive" : "לארכיון",
|
||||
"Unarchive" : "הוצאה מהארכיון",
|
||||
"Enter a card title" : "נא להקליד כותרת לכרטיס",
|
||||
@@ -52,7 +64,12 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "ביטול מחיקת לוח - אחרת הלוח יימחק במהלך ריצת ה־cronjob הבאה.",
|
||||
"Create new board" : "יצירת לוח חדש",
|
||||
"New board title" : "כותרת לוח חדשה",
|
||||
"Select an attachment" : "נא לבחור קובץ מצורף",
|
||||
"Cancel upload" : "ביטול העלאה",
|
||||
"by" : "מאת",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "ביטול מחיקת קובץ - אחרת הקובץ יימחק עם ריצת משימת ה־cron הבאה.",
|
||||
"Undo file deletion" : "ביטול מחיקת קובץ",
|
||||
"Insert the file into the description" : "הוספת הקובץ לתיאור",
|
||||
"Modified:" : "מועד השינוי",
|
||||
"Created:" : "מועד היצירה:",
|
||||
"Choose a tag" : "נא לבחור תגית",
|
||||
@@ -65,9 +82,12 @@
|
||||
"Click to set" : "יש ללחוץ להגדרה",
|
||||
"Remove due date" : "הסרת מועד התפוגה",
|
||||
"Description" : "תיאוג",
|
||||
"Attachments" : "קבצים מצורפים",
|
||||
"Saved" : "נשמר",
|
||||
"Unsaved changes" : "שינויים שלא נשמרו",
|
||||
"Formatting help" : "עזרה בסידור בתבנית",
|
||||
"Upload attachment" : "העלאת קבצים מצורפים",
|
||||
"Insert attachment" : "הוספת קובץ מצורף",
|
||||
"Add a card description…" : "הוספת תיאור כרטיס…",
|
||||
"Shared boards" : "לוחות משותפים",
|
||||
"View more" : "הצגת עוד",
|
||||
|
||||
@@ -6,10 +6,12 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Rimuovi utente dalla scheda",
|
||||
"Hours" : "Ore",
|
||||
"Minutes" : "Minuti",
|
||||
"Maximum file size of {size} exceeded" : "Dimensione massima dei file di {size} superata",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Sei sicuro di voler eliminare questa pila con tutti i suoi dati?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La scheda \"%s\" in \"%s\" ha raggiunto la sua data di scadenza.",
|
||||
"The board \"%s\" has been shared with you by %s." : "La lavagna \"%s\" è stata condivisa con te da %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha condiviso la lavagna %s con te.",
|
||||
"No data was provided to create an attachment." : "Non è stato fornito alcun dato per creare un allegato.",
|
||||
"Finished" : "Finito",
|
||||
"To review" : "Da revisionare",
|
||||
"Action needed" : "Azione necessaria",
|
||||
@@ -22,7 +24,7 @@ OC.L10N.register(
|
||||
"Missing a temporary folder" : "Manca una cartella temporanea",
|
||||
"Could not write file to disk" : "Impossibile scrivere il file su disco",
|
||||
"A PHP extension stopped the file upload" : "Un'estensione PHP ha fermato il caricamento del file",
|
||||
"No file uploaded" : "Nessun file caricato",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nessun file caricato o la dimensione del file supera il massimo di %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Uno strumento in stile kanban di gestione progetti e personale per Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck è uno strumenti di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrata con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e mettile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Cindividi cin la tua squadra, amici o famiglia\n- 🚀 Organizza il tuo progetto",
|
||||
@@ -65,6 +67,7 @@ OC.L10N.register(
|
||||
"Create new board" : "Crea una nuova lavagna",
|
||||
"New board title" : "Titolo nuova lavagna",
|
||||
"Select an attachment" : "Scegli un allegato",
|
||||
"Cancel upload" : "Annulla caricamento",
|
||||
"by" : "da",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Annulla eliminazione del file - Altrimenti il file sarà eliminato durante la prossima esecuzione del job di cron.",
|
||||
"Undo file deletion" : "Annulla l'eliminazione della file",
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
"Remove user from card" : "Rimuovi utente dalla scheda",
|
||||
"Hours" : "Ore",
|
||||
"Minutes" : "Minuti",
|
||||
"Maximum file size of {size} exceeded" : "Dimensione massima dei file di {size} superata",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Sei sicuro di voler eliminare questa pila con tutti i suoi dati?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "La scheda \"%s\" in \"%s\" ha raggiunto la sua data di scadenza.",
|
||||
"The board \"%s\" has been shared with you by %s." : "La lavagna \"%s\" è stata condivisa con te da %s.",
|
||||
"{user} has shared the board %s with you." : "{user} ha condiviso la lavagna %s con te.",
|
||||
"No data was provided to create an attachment." : "Non è stato fornito alcun dato per creare un allegato.",
|
||||
"Finished" : "Finito",
|
||||
"To review" : "Da revisionare",
|
||||
"Action needed" : "Azione necessaria",
|
||||
@@ -20,7 +22,7 @@
|
||||
"Missing a temporary folder" : "Manca una cartella temporanea",
|
||||
"Could not write file to disk" : "Impossibile scrivere il file su disco",
|
||||
"A PHP extension stopped the file upload" : "Un'estensione PHP ha fermato il caricamento del file",
|
||||
"No file uploaded" : "Nessun file caricato",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nessun file caricato o la dimensione del file supera il massimo di %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Uno strumento in stile kanban di gestione progetti e personale per Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck è uno strumenti di organizzazione in stile kanban destinato alla pianificazione personale e all'organizzazione di progetti per squadre integrata con Nextcloud.\n\n\n- 📥 Aggiungi le tue attività alle schede e mettile in ordine\n- 📄 Scrivi note aggiuntive in markdown\n- 🔖 Assegna etichette per un'organizzazione ancora migliore\n- 👥 Cindividi cin la tua squadra, amici o famiglia\n- 🚀 Organizza il tuo progetto",
|
||||
@@ -63,6 +65,7 @@
|
||||
"Create new board" : "Crea una nuova lavagna",
|
||||
"New board title" : "Titolo nuova lavagna",
|
||||
"Select an attachment" : "Scegli un allegato",
|
||||
"Cancel upload" : "Annulla caricamento",
|
||||
"by" : "da",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Annulla eliminazione del file - Altrimenti il file sarà eliminato durante la prossima esecuzione del job di cron.",
|
||||
"Undo file deletion" : "Annulla l'eliminazione della file",
|
||||
|
||||
@@ -8,6 +8,12 @@ OC.L10N.register(
|
||||
"To review" : "Peržiūrėti",
|
||||
"Action needed" : "Reikalingas veiksmas",
|
||||
"Later" : "Vėliau",
|
||||
"The file was uploaded" : "Failas buvo įkeltas",
|
||||
"The file was only partially uploaded" : "Failas buvo tik dalinai įkeltas",
|
||||
"No file was uploaded" : "Nebuvo įkeltas joks failas",
|
||||
"Missing a temporary folder" : "Trūksta laikinojo aplanko",
|
||||
"Could not write file to disk" : "Nepavyko įrašyti failą į diską",
|
||||
"A PHP extension stopped the file upload" : "PHP plėtinys sustabdė failo įkėlimą",
|
||||
"Deck" : "Užduočių saugykla",
|
||||
"Add a new stack" : "Pridėti naują skiltį",
|
||||
"Submit" : "Pateikti",
|
||||
@@ -19,6 +25,7 @@ OC.L10N.register(
|
||||
"Archive" : "Archyvuoti",
|
||||
"Unarchive" : "Išskleisti",
|
||||
"Enter a card title" : "Įveskite kortelės vardą",
|
||||
"Add card" : "Pridėti kortelę",
|
||||
"Close" : "Užverti",
|
||||
"Sharing" : "Bendrinimas",
|
||||
"Tags" : "Žymės",
|
||||
@@ -29,6 +36,8 @@ OC.L10N.register(
|
||||
"Edit" : "Taisyti",
|
||||
"Manage" : "Redaguoti",
|
||||
"Discard share" : "Atšaukti dalinimąsi",
|
||||
"Update" : "Atnaujinti",
|
||||
"Create" : "Sukurti",
|
||||
"Create a new tag" : "Sukurti naują žymę",
|
||||
"Status" : "Būsena",
|
||||
"Title" : "Pavadinimas",
|
||||
@@ -42,6 +51,8 @@ OC.L10N.register(
|
||||
"Create new board" : "Sukurti naują sąrašą",
|
||||
"New board title" : "Naujas sąrašo vardas",
|
||||
"by" : " ",
|
||||
"Undo file deletion" : "Atšaukti failo ištrynimą",
|
||||
"Insert the file into the description" : "Įterpti failą į aprašą",
|
||||
"Modified:" : "Keitimo laikas:",
|
||||
"Created:" : "Sukūrimo laikas:",
|
||||
"Assign users" : "Priskirti naudotojus",
|
||||
@@ -49,9 +60,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Spustelėkite pakeitimams atlikti",
|
||||
"Remove due date" : "Pašalinti terminą",
|
||||
"Description" : "Aprašas",
|
||||
"Attachments" : "Priedai",
|
||||
"Saved" : "Įrašyta",
|
||||
"Unsaved changes" : "Neįrašyti pakeitimai",
|
||||
"Formatting help" : "Formatavimo pagalba",
|
||||
"Upload attachment" : "Įkelti priedą",
|
||||
"Insert attachment" : "Įterpti priedą",
|
||||
"Add a card description…" : "Pridėti elemento apibūdinimą...",
|
||||
"Shared boards" : "Bendrinami sąrašai",
|
||||
"View more" : "Rodyti daugiau",
|
||||
|
||||
@@ -6,6 +6,12 @@
|
||||
"To review" : "Peržiūrėti",
|
||||
"Action needed" : "Reikalingas veiksmas",
|
||||
"Later" : "Vėliau",
|
||||
"The file was uploaded" : "Failas buvo įkeltas",
|
||||
"The file was only partially uploaded" : "Failas buvo tik dalinai įkeltas",
|
||||
"No file was uploaded" : "Nebuvo įkeltas joks failas",
|
||||
"Missing a temporary folder" : "Trūksta laikinojo aplanko",
|
||||
"Could not write file to disk" : "Nepavyko įrašyti failą į diską",
|
||||
"A PHP extension stopped the file upload" : "PHP plėtinys sustabdė failo įkėlimą",
|
||||
"Deck" : "Užduočių saugykla",
|
||||
"Add a new stack" : "Pridėti naują skiltį",
|
||||
"Submit" : "Pateikti",
|
||||
@@ -17,6 +23,7 @@
|
||||
"Archive" : "Archyvuoti",
|
||||
"Unarchive" : "Išskleisti",
|
||||
"Enter a card title" : "Įveskite kortelės vardą",
|
||||
"Add card" : "Pridėti kortelę",
|
||||
"Close" : "Užverti",
|
||||
"Sharing" : "Bendrinimas",
|
||||
"Tags" : "Žymės",
|
||||
@@ -27,6 +34,8 @@
|
||||
"Edit" : "Taisyti",
|
||||
"Manage" : "Redaguoti",
|
||||
"Discard share" : "Atšaukti dalinimąsi",
|
||||
"Update" : "Atnaujinti",
|
||||
"Create" : "Sukurti",
|
||||
"Create a new tag" : "Sukurti naują žymę",
|
||||
"Status" : "Būsena",
|
||||
"Title" : "Pavadinimas",
|
||||
@@ -40,6 +49,8 @@
|
||||
"Create new board" : "Sukurti naują sąrašą",
|
||||
"New board title" : "Naujas sąrašo vardas",
|
||||
"by" : " ",
|
||||
"Undo file deletion" : "Atšaukti failo ištrynimą",
|
||||
"Insert the file into the description" : "Įterpti failą į aprašą",
|
||||
"Modified:" : "Keitimo laikas:",
|
||||
"Created:" : "Sukūrimo laikas:",
|
||||
"Assign users" : "Priskirti naudotojus",
|
||||
@@ -47,9 +58,12 @@
|
||||
"Click to set" : "Spustelėkite pakeitimams atlikti",
|
||||
"Remove due date" : "Pašalinti terminą",
|
||||
"Description" : "Aprašas",
|
||||
"Attachments" : "Priedai",
|
||||
"Saved" : "Įrašyta",
|
||||
"Unsaved changes" : "Neįrašyti pakeitimai",
|
||||
"Formatting help" : "Formatavimo pagalba",
|
||||
"Upload attachment" : "Įkelti priedą",
|
||||
"Insert attachment" : "Įterpti priedą",
|
||||
"Add a card description…" : "Pridėti elemento apibūdinimą...",
|
||||
"Shared boards" : "Bendrinami sąrašai",
|
||||
"View more" : "Rodyti daugiau",
|
||||
|
||||
@@ -28,7 +28,7 @@ OC.L10N.register(
|
||||
"Add card" : "Dodaj kartę",
|
||||
"Close" : "Zamknij",
|
||||
"Sharing" : "Współdzielenie",
|
||||
"Tags" : "Tagi",
|
||||
"Tags" : "Etykiety",
|
||||
"Select users or groups to share with" : "Wybierz użytkowników lub grupy, żeby współdzielić z nimi",
|
||||
"Access for" : "Dostęp dla",
|
||||
"No matching user or group found." : "Nie znaleziono pasujących użytkowników lub grup",
|
||||
@@ -52,6 +52,7 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Cofnij usunięcie tablicy - w innym przypadku tablica zostanie usunięta przy kolejnym wykonaniu zadania cron.",
|
||||
"Create new board" : "Utwórz nową tablicę",
|
||||
"New board title" : "Tytuł nowej tablicy",
|
||||
"Cancel upload" : "Anuluj wysyłanie",
|
||||
"by" : "przez",
|
||||
"Modified:" : "Zmodyfikowano:",
|
||||
"Created:" : "Utworzono:",
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
"Add card" : "Dodaj kartę",
|
||||
"Close" : "Zamknij",
|
||||
"Sharing" : "Współdzielenie",
|
||||
"Tags" : "Tagi",
|
||||
"Tags" : "Etykiety",
|
||||
"Select users or groups to share with" : "Wybierz użytkowników lub grupy, żeby współdzielić z nimi",
|
||||
"Access for" : "Dostęp dla",
|
||||
"No matching user or group found." : "Nie znaleziono pasujących użytkowników lub grup",
|
||||
@@ -50,6 +50,7 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Cofnij usunięcie tablicy - w innym przypadku tablica zostanie usunięta przy kolejnym wykonaniu zadania cron.",
|
||||
"Create new board" : "Utwórz nową tablicę",
|
||||
"New board title" : "Tytuł nowej tablicy",
|
||||
"Cancel upload" : "Anuluj wysyłanie",
|
||||
"by" : "przez",
|
||||
"Modified:" : "Zmodyfikowano:",
|
||||
"Created:" : "Utworzono:",
|
||||
|
||||
@@ -6,10 +6,12 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Remover usuário do cartão",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Excedeu o tamanho máximo de arquivo de {size}",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Quer realmente excluir a pilha com todos os seus dados?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
|
||||
"The board \"%s\" has been shared with you by %s." : "O quadro \"%s\" foi compartilhado com você por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} compartilhou o quadro %s com você.",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisão",
|
||||
"Action needed" : "Ação necessária",
|
||||
@@ -22,7 +24,7 @@ OC.L10N.register(
|
||||
"Missing a temporary folder" : "Falta uma pasta temporária",
|
||||
"Could not write file to disk" : "Não foi possível escrever no disco",
|
||||
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
|
||||
"No file uploaded" : "Nenhum arquivo enviado",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Um projeto no estilo kanban e uma ferramenta de gerenciamento pessoal para Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização do projeto para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Anote notas adicionais no markdown\n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 🚀 Faça seu projeto organizado",
|
||||
@@ -65,6 +67,7 @@ OC.L10N.register(
|
||||
"Create new board" : "Criar novo painel",
|
||||
"New board title" : "Título do novo painel",
|
||||
"Select an attachment" : "Selecionar um anexo",
|
||||
"Cancel upload" : "Cancelar envio",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Desfazer exclusão de arquivo - Caso contrário será excluído na próxima execução do cronjob.",
|
||||
"Undo file deletion" : "Desfazer exclusão de arquivo",
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
"Remove user from card" : "Remover usuário do cartão",
|
||||
"Hours" : "Horas",
|
||||
"Minutes" : "Minutos",
|
||||
"Maximum file size of {size} exceeded" : "Excedeu o tamanho máximo de arquivo de {size}",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Quer realmente excluir a pilha com todos os seus dados?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "O cartão \"%s\" em \"%s\" atingiu sua data de vencimento.",
|
||||
"The board \"%s\" has been shared with you by %s." : "O quadro \"%s\" foi compartilhado com você por %s.",
|
||||
"{user} has shared the board %s with you." : "{user} compartilhou o quadro %s com você.",
|
||||
"No data was provided to create an attachment." : "Nenhum dado foi fornecido para criar um anexo.",
|
||||
"Finished" : "Terminado",
|
||||
"To review" : "Para revisão",
|
||||
"Action needed" : "Ação necessária",
|
||||
@@ -20,7 +22,7 @@
|
||||
"Missing a temporary folder" : "Falta uma pasta temporária",
|
||||
"Could not write file to disk" : "Não foi possível escrever no disco",
|
||||
"A PHP extension stopped the file upload" : "Uma extensão PHP parou o envio do arquivo",
|
||||
"No file uploaded" : "Nenhum arquivo enviado",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Nenhum arquivo enviado ou o tamanho excede o máximo de %s",
|
||||
"Deck" : "Deck",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Um projeto no estilo kanban e uma ferramenta de gerenciamento pessoal para Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck é uma ferramenta de organização de estilo kanban destinada ao planejamento pessoal e organização do projeto para equipes integradas com o Nextcloud.\n\n\n- 📥 Adicione suas tarefas aos cartões e coloque-os em ordem\n- 📄 Anote notas adicionais no markdown\n- 🔖 Atribua rótulos para uma organização ainda melhor\n- 👥 Compartilhe com sua equipe, amigos ou familiares\n- 🚀 Faça seu projeto organizado",
|
||||
@@ -63,6 +65,7 @@
|
||||
"Create new board" : "Criar novo painel",
|
||||
"New board title" : "Título do novo painel",
|
||||
"Select an attachment" : "Selecionar um anexo",
|
||||
"Cancel upload" : "Cancelar envio",
|
||||
"by" : "por",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Desfazer exclusão de arquivo - Caso contrário será excluído na próxima execução do cronjob.",
|
||||
"Undo file deletion" : "Desfazer exclusão de arquivo",
|
||||
|
||||
@@ -6,10 +6,12 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Убрать пользователя из карточки",
|
||||
"Hours" : "Часы",
|
||||
"Minutes" : "Минуты",
|
||||
"Maximum file size of {size} exceeded" : "Максимальный размер файла {size} превышен",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Вы действительно хотите удалить стек со всеми его данными?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Настал срок карточки «%s» в «%s» .",
|
||||
"The board \"%s\" has been shared with you by %s." : "%s предоставил(а) Вам доступ к доске «%s».",
|
||||
"{user} has shared the board %s with you." : "{user} предоставил(а) Вам доступ к доске «%s».",
|
||||
"No data was provided to create an attachment." : "Никаких данных для создания вложения не было.",
|
||||
"Finished" : "Завершено",
|
||||
"To review" : "Просмотреть",
|
||||
"Action needed" : "Требуется действие",
|
||||
@@ -22,7 +24,7 @@ OC.L10N.register(
|
||||
"Missing a temporary folder" : "Отсутствует временный каталог",
|
||||
"Could not write file to disk" : "Невозможно записать файл на диск",
|
||||
"A PHP extension stopped the file upload" : "Расширение PHP прервало загрузку файла",
|
||||
"No file uploaded" : "Нет загруженных файлов",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Файл не загружен или его размер превышает %s",
|
||||
"Deck" : "Дека",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Проект в стиле канбан и личный инструмент управления для Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck - инструмент, предназначенный для личного планирования и организации проекта в стиле канбан для команд , интегрированных в Nextcloud.\n\n\n- 📥 Добавьте свои задачи в карты и разместите их в нужном порядке\n- 📄 Записывайте дополнительные примечания в Markdown-формате\n- 🔖 Назначьте ярлыки для еще лучшей организации\n- 👥 Поделитесь с вашей командой, друзьями или семьей\n- 🚀 Сделайте свой проект более организованным",
|
||||
@@ -65,6 +67,7 @@ OC.L10N.register(
|
||||
"Create new board" : "Создать новую доску",
|
||||
"New board title" : "Заголовок новой доски",
|
||||
"Select an attachment" : "Выберите вложение",
|
||||
"Cancel upload" : "Прервать загрузку",
|
||||
"by" : "автор",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Отменить удаление файла, иначе он будет автоматически удалена при следующей обработке cronjob.",
|
||||
"Undo file deletion" : "Отменить удаление файла",
|
||||
|
||||
@@ -4,10 +4,12 @@
|
||||
"Remove user from card" : "Убрать пользователя из карточки",
|
||||
"Hours" : "Часы",
|
||||
"Minutes" : "Минуты",
|
||||
"Maximum file size of {size} exceeded" : "Максимальный размер файла {size} превышен",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Вы действительно хотите удалить стек со всеми его данными?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Настал срок карточки «%s» в «%s» .",
|
||||
"The board \"%s\" has been shared with you by %s." : "%s предоставил(а) Вам доступ к доске «%s».",
|
||||
"{user} has shared the board %s with you." : "{user} предоставил(а) Вам доступ к доске «%s».",
|
||||
"No data was provided to create an attachment." : "Никаких данных для создания вложения не было.",
|
||||
"Finished" : "Завершено",
|
||||
"To review" : "Просмотреть",
|
||||
"Action needed" : "Требуется действие",
|
||||
@@ -20,7 +22,7 @@
|
||||
"Missing a temporary folder" : "Отсутствует временный каталог",
|
||||
"Could not write file to disk" : "Невозможно записать файл на диск",
|
||||
"A PHP extension stopped the file upload" : "Расширение PHP прервало загрузку файла",
|
||||
"No file uploaded" : "Нет загруженных файлов",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Файл не загружен или его размер превышает %s",
|
||||
"Deck" : "Дека",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Проект в стиле канбан и личный инструмент управления для Nextcloud",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck - инструмент, предназначенный для личного планирования и организации проекта в стиле канбан для команд , интегрированных в Nextcloud.\n\n\n- 📥 Добавьте свои задачи в карты и разместите их в нужном порядке\n- 📄 Записывайте дополнительные примечания в Markdown-формате\n- 🔖 Назначьте ярлыки для еще лучшей организации\n- 👥 Поделитесь с вашей командой, друзьями или семьей\n- 🚀 Сделайте свой проект более организованным",
|
||||
@@ -63,6 +65,7 @@
|
||||
"Create new board" : "Создать новую доску",
|
||||
"New board title" : "Заголовок новой доски",
|
||||
"Select an attachment" : "Выберите вложение",
|
||||
"Cancel upload" : "Прервать загрузку",
|
||||
"by" : "автор",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Отменить удаление файла, иначе он будет автоматически удалена при следующей обработке cronjob.",
|
||||
"Undo file deletion" : "Отменить удаление файла",
|
||||
|
||||
@@ -11,6 +11,7 @@ OC.L10N.register(
|
||||
"To review" : "Na posúdenie",
|
||||
"Action needed" : "Potrebná akcia",
|
||||
"Later" : "Neskôr",
|
||||
"The file was uploaded" : "Súbor bol nahraný",
|
||||
"Deck" : "Tabuľa",
|
||||
"Add a new stack" : "Pridať nový stoh",
|
||||
"Submit" : "Odoslať",
|
||||
@@ -61,6 +62,7 @@ OC.L10N.register(
|
||||
"Click to set" : "Kliknite pre nastavenie",
|
||||
"Remove due date" : "Odstrániť do dátumu",
|
||||
"Description" : "Popis",
|
||||
"Attachments" : "Prílohy",
|
||||
"Saved" : "Uložené",
|
||||
"Unsaved changes" : "Neuložené zmeny",
|
||||
"Formatting help" : "Pomoc pri formátovaní",
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
"To review" : "Na posúdenie",
|
||||
"Action needed" : "Potrebná akcia",
|
||||
"Later" : "Neskôr",
|
||||
"The file was uploaded" : "Súbor bol nahraný",
|
||||
"Deck" : "Tabuľa",
|
||||
"Add a new stack" : "Pridať nový stoh",
|
||||
"Submit" : "Odoslať",
|
||||
@@ -59,6 +60,7 @@
|
||||
"Click to set" : "Kliknite pre nastavenie",
|
||||
"Remove due date" : "Odstrániť do dátumu",
|
||||
"Description" : "Popis",
|
||||
"Attachments" : "Prílohy",
|
||||
"Saved" : "Uložené",
|
||||
"Unsaved changes" : "Neuložené zmeny",
|
||||
"Formatting help" : "Pomoc pri formátovaní",
|
||||
|
||||
27
l10n/sr.js
27
l10n/sr.js
@@ -6,14 +6,32 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Уклони корисника са картице",
|
||||
"Hours" : "Сати",
|
||||
"Minutes" : "Минути",
|
||||
"Maximum file size of {size} exceeded" : "Премашена максимална величина фајла од {size}",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Да ли стварно желите да обришете ову гомилу са свим подацима на њој?",
|
||||
"Personal" : "Лично",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Картици \"%s\" на табли \"%s\" је истекао рок.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Таблу \"%s\" је поделио \"%s\" са Вама. ",
|
||||
"{user} has shared the board %s with you." : "{user} је поделио таблу %s са Вама.",
|
||||
"No data was provided to create an attachment." : "Нису дати подаци за креирање прилога.",
|
||||
"Finished" : "Завршено",
|
||||
"To review" : "Треба прегледати",
|
||||
"Action needed" : "Потребна акција",
|
||||
"Later" : "После",
|
||||
"To do" : "За урадити",
|
||||
"Doing" : "Ради се",
|
||||
"Done" : "Готово",
|
||||
"Example Task 3" : "Пример задатка 3",
|
||||
"Example Task 2" : "Пример задатка 2",
|
||||
"Example Task 1" : "Пример задатка 1",
|
||||
"The file was uploaded" : "Фајл је отпремљен",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Фајл за отпремање премашује upload_max_filesize директиву у php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Фајл за отпремање премашује MAX_FILE_SIZE директиву наведену у HTML форми",
|
||||
"The file was only partially uploaded" : "Фајл је парцијално отпремљен",
|
||||
"No file was uploaded" : "Ниједан фајл није отпремљен",
|
||||
"Missing a temporary folder" : "Недостаје привремена фасцикла",
|
||||
"Could not write file to disk" : "Не могу да пишем на диск",
|
||||
"A PHP extension stopped the file upload" : "PHP екстензија је зауставила отпремање фајла",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Ниједан фајл није отпремљен или величина фајла премашује максимум од %s",
|
||||
"Deck" : "Шпил",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Канбан стил пројекта и лични менаџмент алат за Некстклауд",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck је алатка канбан организационог стила намењена за лично планирање и организацију пројеката за тимове интегрисане са Некстклаудом.\n\n\n- 📥 Додајте Ваше задатке на картице и распоређујте их како желите\n- 📄 Допишите додатне белешке markdown синтаксом\n- 🔖 Додељујте ознаке за још боље организовање\n- 👥 Делите са Вашим тимом, пријатељима или породицом\n- 🚀 Организујте Ваше пројекте",
|
||||
@@ -24,6 +42,7 @@ OC.L10N.register(
|
||||
"Board details" : "Детаљи табле",
|
||||
"All Boards" : "Све табле",
|
||||
"Archived boards" : "Архивиране табле",
|
||||
"Drop your files here to upload it to the card" : "Превуците Ваше фајлове овде да их отпремите у картицу",
|
||||
"Archive" : "Архива",
|
||||
"Unarchive" : "Врати из архиве",
|
||||
"Enter a card title" : "Унесите назив картице",
|
||||
@@ -54,7 +73,12 @@ OC.L10N.register(
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Врати брисање табле - у супротном ће табла бити обрисана за време следећег крон посла.",
|
||||
"Create new board" : "Направи нову таблу",
|
||||
"New board title" : "Назив нове табле",
|
||||
"Select an attachment" : "Одаберите прилог",
|
||||
"Cancel upload" : "Откажи отпремање",
|
||||
"by" : "од",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Поништи брисање фајла - у супротном, фајл ће бити обрисан на следеће покретање крон посла.",
|
||||
"Undo file deletion" : "Поништи брисање фајла",
|
||||
"Insert the file into the description" : "Убаци фајл у опис",
|
||||
"Modified:" : "Измењена:",
|
||||
"Created:" : "Направљена:",
|
||||
"Choose a tag" : "Одаберите ознаку",
|
||||
@@ -67,9 +91,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Кликните да поставите",
|
||||
"Remove due date" : "Уклони рок",
|
||||
"Description" : "Опис",
|
||||
"Attachments" : "Прилози",
|
||||
"Saved" : "Сачувано",
|
||||
"Unsaved changes" : "Несачуване измене",
|
||||
"Formatting help" : "Помоћ око форматирања",
|
||||
"Upload attachment" : "Отпреми прилог",
|
||||
"Insert attachment" : "Убаци прилог",
|
||||
"Add a card description…" : "Додај опис картице…",
|
||||
"Shared boards" : "Дељене табле",
|
||||
"View more" : "Види још",
|
||||
|
||||
27
l10n/sr.json
27
l10n/sr.json
@@ -4,14 +4,32 @@
|
||||
"Remove user from card" : "Уклони корисника са картице",
|
||||
"Hours" : "Сати",
|
||||
"Minutes" : "Минути",
|
||||
"Maximum file size of {size} exceeded" : "Премашена максимална величина фајла од {size}",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Да ли стварно желите да обришете ову гомилу са свим подацима на њој?",
|
||||
"Personal" : "Лично",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "Картици \"%s\" на табли \"%s\" је истекао рок.",
|
||||
"The board \"%s\" has been shared with you by %s." : "Таблу \"%s\" је поделио \"%s\" са Вама. ",
|
||||
"{user} has shared the board %s with you." : "{user} је поделио таблу %s са Вама.",
|
||||
"No data was provided to create an attachment." : "Нису дати подаци за креирање прилога.",
|
||||
"Finished" : "Завршено",
|
||||
"To review" : "Треба прегледати",
|
||||
"Action needed" : "Потребна акција",
|
||||
"Later" : "После",
|
||||
"To do" : "За урадити",
|
||||
"Doing" : "Ради се",
|
||||
"Done" : "Готово",
|
||||
"Example Task 3" : "Пример задатка 3",
|
||||
"Example Task 2" : "Пример задатка 2",
|
||||
"Example Task 1" : "Пример задатка 1",
|
||||
"The file was uploaded" : "Фајл је отпремљен",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Фајл за отпремање премашује upload_max_filesize директиву у php.ini",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Фајл за отпремање премашује MAX_FILE_SIZE директиву наведену у HTML форми",
|
||||
"The file was only partially uploaded" : "Фајл је парцијално отпремљен",
|
||||
"No file was uploaded" : "Ниједан фајл није отпремљен",
|
||||
"Missing a temporary folder" : "Недостаје привремена фасцикла",
|
||||
"Could not write file to disk" : "Не могу да пишем на диск",
|
||||
"A PHP extension stopped the file upload" : "PHP екстензија је зауставила отпремање фајла",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Ниједан фајл није отпремљен или величина фајла премашује максимум од %s",
|
||||
"Deck" : "Шпил",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Канбан стил пројекта и лични менаџмент алат за Некстклауд",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deck је алатка канбан организационог стила намењена за лично планирање и организацију пројеката за тимове интегрисане са Некстклаудом.\n\n\n- 📥 Додајте Ваше задатке на картице и распоређујте их како желите\n- 📄 Допишите додатне белешке markdown синтаксом\n- 🔖 Додељујте ознаке за још боље организовање\n- 👥 Делите са Вашим тимом, пријатељима или породицом\n- 🚀 Организујте Ваше пројекте",
|
||||
@@ -22,6 +40,7 @@
|
||||
"Board details" : "Детаљи табле",
|
||||
"All Boards" : "Све табле",
|
||||
"Archived boards" : "Архивиране табле",
|
||||
"Drop your files here to upload it to the card" : "Превуците Ваше фајлове овде да их отпремите у картицу",
|
||||
"Archive" : "Архива",
|
||||
"Unarchive" : "Врати из архиве",
|
||||
"Enter a card title" : "Унесите назив картице",
|
||||
@@ -52,7 +71,12 @@
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Врати брисање табле - у супротном ће табла бити обрисана за време следећег крон посла.",
|
||||
"Create new board" : "Направи нову таблу",
|
||||
"New board title" : "Назив нове табле",
|
||||
"Select an attachment" : "Одаберите прилог",
|
||||
"Cancel upload" : "Откажи отпремање",
|
||||
"by" : "од",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Поништи брисање фајла - у супротном, фајл ће бити обрисан на следеће покретање крон посла.",
|
||||
"Undo file deletion" : "Поништи брисање фајла",
|
||||
"Insert the file into the description" : "Убаци фајл у опис",
|
||||
"Modified:" : "Измењена:",
|
||||
"Created:" : "Направљена:",
|
||||
"Choose a tag" : "Одаберите ознаку",
|
||||
@@ -65,9 +89,12 @@
|
||||
"Click to set" : "Кликните да поставите",
|
||||
"Remove due date" : "Уклони рок",
|
||||
"Description" : "Опис",
|
||||
"Attachments" : "Прилози",
|
||||
"Saved" : "Сачувано",
|
||||
"Unsaved changes" : "Несачуване измене",
|
||||
"Formatting help" : "Помоћ око форматирања",
|
||||
"Upload attachment" : "Отпреми прилог",
|
||||
"Insert attachment" : "Убаци прилог",
|
||||
"Add a card description…" : "Додај опис картице…",
|
||||
"Shared boards" : "Дељене табле",
|
||||
"View more" : "Види још",
|
||||
|
||||
@@ -64,9 +64,12 @@ OC.L10N.register(
|
||||
"Click to set" : "Klicka för att sätta",
|
||||
"Remove due date" : "Ta bort slutdatum",
|
||||
"Description" : "Beskrivning",
|
||||
"Attachments" : "Bilagor",
|
||||
"Saved" : "Sparad",
|
||||
"Unsaved changes" : "Osparade ändringar",
|
||||
"Formatting help" : "Formatteringshjälp",
|
||||
"Upload attachment" : "Ladda upp bilaga",
|
||||
"Insert attachment" : "Infoga bilaga",
|
||||
"Add a card description…" : "Lägg till en kortbeskrivning...",
|
||||
"Shared boards" : "Delade tavlor",
|
||||
"View more" : "Titta mer",
|
||||
|
||||
@@ -62,9 +62,12 @@
|
||||
"Click to set" : "Klicka för att sätta",
|
||||
"Remove due date" : "Ta bort slutdatum",
|
||||
"Description" : "Beskrivning",
|
||||
"Attachments" : "Bilagor",
|
||||
"Saved" : "Sparad",
|
||||
"Unsaved changes" : "Osparade ändringar",
|
||||
"Formatting help" : "Formatteringshjälp",
|
||||
"Upload attachment" : "Ladda upp bilaga",
|
||||
"Insert attachment" : "Infoga bilaga",
|
||||
"Add a card description…" : "Lägg till en kortbeskrivning...",
|
||||
"Shared boards" : "Delade tavlor",
|
||||
"View more" : "Titta mer",
|
||||
|
||||
26
l10n/tr.js
26
l10n/tr.js
@@ -6,14 +6,25 @@ OC.L10N.register(
|
||||
"Remove user from card" : "Kullanıcıyı karttan kaldır",
|
||||
"Hours" : "Saat",
|
||||
"Minutes" : "Dakika",
|
||||
"Maximum file size of {size} exceeded" : "{size} olan en büyük dosya boyutu sınırı aşıldı",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Bu yığını tüm bilgileri ile silmek istediğinize emin misiniz?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "\"%s\" kartı \"%s\" zamanında son kullanma tarihine ulaştı.",
|
||||
"The board \"%s\" has been shared with you by %s." : "\"%s\" panosu %s tarafından sizinle paylaşıldı.",
|
||||
"{user} has shared the board %s with you." : "{user} sizinle %s panosunu paylaştı.",
|
||||
"No data was provided to create an attachment." : "Bir ek dosyası oluşturmak için herhangi bir veri sağlanmadı.",
|
||||
"Finished" : "Tamamlandı",
|
||||
"To review" : "İncelenecek",
|
||||
"Action needed" : "İşlem yapılması gerekiyor",
|
||||
"Later" : "Sonra",
|
||||
"The file was uploaded" : "Dosya yüklendi",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
||||
"The file was only partially uploaded" : "Dosyanın yalnız bir bölümü yüklendi",
|
||||
"No file was uploaded" : "Herhangi bir dosya yüklenmedi",
|
||||
"Missing a temporary folder" : "Geçici bir klasör eksik",
|
||||
"Could not write file to disk" : "Dosya diske yazılamadı",
|
||||
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Herhangi bir dosya yüklenmedi ya da %s olan en büyük dosya boyutu sınırı aşıldı",
|
||||
"Deck" : "Tahta",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nextcloud için Kanban tarzında bir proje ve kişisel yönetim uygulaması",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deste, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
|
||||
@@ -24,6 +35,7 @@ OC.L10N.register(
|
||||
"Board details" : "Pano ayrıntıları",
|
||||
"All Boards" : "Tüm Panolar",
|
||||
"Archived boards" : "Arşivlenmiş panolar",
|
||||
"Drop your files here to upload it to the card" : "Karta yüklemek istediğiniz dosyalarınızı sürükleyip buraya bırakın",
|
||||
"Archive" : "Arşivle",
|
||||
"Unarchive" : "Arşivden Çıkar",
|
||||
"Enter a card title" : "Bir kart başlığı yazın",
|
||||
@@ -41,7 +53,7 @@ OC.L10N.register(
|
||||
"Discard share" : "Paylaşımı kaldır",
|
||||
"Update" : "Güncelle",
|
||||
"Create" : "Ekle",
|
||||
"Create a new tag" : "Yeni bir etiket ekle",
|
||||
"Create a new tag" : "Etiket ekle",
|
||||
"Status" : "Durum",
|
||||
"Title" : "Başlık",
|
||||
"Members" : "Üyeler",
|
||||
@@ -52,9 +64,14 @@ OC.L10N.register(
|
||||
"Delete board" : "Panoyu sil",
|
||||
"Reset" : "Sıfırla",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Pano silme işlemini geri alır. Yoksa pano zamanlanmış görevin bir sonraki çalışmasında silinir.",
|
||||
"Create new board" : "Yeni pano ekle",
|
||||
"Create new board" : "Pano ekle",
|
||||
"New board title" : "Yeni pano başlığı",
|
||||
"Select an attachment" : "Bir ek dosyası seçin",
|
||||
"Cancel upload" : "Yüklemeyi iptal et",
|
||||
"by" : "Kişi:",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dosya silme işlemini geri alır. Yoksa dosya zamanlanmış görevin bir sonraki çalışmasında silinir.",
|
||||
"Undo file deletion" : "Dosya silmeyi geri al",
|
||||
"Insert the file into the description" : "Dosyayı açıklamaya ekle",
|
||||
"Modified:" : "Değiştirilme:",
|
||||
"Created:" : "Oluşturulma:",
|
||||
"Choose a tag" : "Bir etiket seçin",
|
||||
@@ -67,13 +84,16 @@ OC.L10N.register(
|
||||
"Click to set" : "Ayarlamak için tıklayın",
|
||||
"Remove due date" : "Bitiş tarihini kaldır",
|
||||
"Description" : "Açıklama",
|
||||
"Attachments" : "Ek dosyalar",
|
||||
"Saved" : "Kaydedildi",
|
||||
"Unsaved changes" : "Kaydedilmemiş değişiklikler",
|
||||
"Formatting help" : "Biçimlendirme yardımı",
|
||||
"Upload attachment" : "Ek dosya yükle",
|
||||
"Insert attachment" : "Ek dosya ekle",
|
||||
"Add a card description…" : "Bir kart açıklaması ekle...",
|
||||
"Shared boards" : "Paylaşılmış panolar",
|
||||
"View more" : "Diğerlerini görüntüle",
|
||||
"Move board to archive" : "Panoyu arşive taşı",
|
||||
"Create a new board" : "Yeni bir pano ekle"
|
||||
"Create a new board" : "Pano ekle"
|
||||
},
|
||||
"nplurals=2; plural=(n > 1);");
|
||||
|
||||
26
l10n/tr.json
26
l10n/tr.json
@@ -4,14 +4,25 @@
|
||||
"Remove user from card" : "Kullanıcıyı karttan kaldır",
|
||||
"Hours" : "Saat",
|
||||
"Minutes" : "Dakika",
|
||||
"Maximum file size of {size} exceeded" : "{size} olan en büyük dosya boyutu sınırı aşıldı",
|
||||
"Are you sure you want to delete the stack with all of its data?" : "Bu yığını tüm bilgileri ile silmek istediğinize emin misiniz?",
|
||||
"The card \"%s\" on \"%s\" has reached its due date." : "\"%s\" kartı \"%s\" zamanında son kullanma tarihine ulaştı.",
|
||||
"The board \"%s\" has been shared with you by %s." : "\"%s\" panosu %s tarafından sizinle paylaşıldı.",
|
||||
"{user} has shared the board %s with you." : "{user} sizinle %s panosunu paylaştı.",
|
||||
"No data was provided to create an attachment." : "Bir ek dosyası oluşturmak için herhangi bir veri sağlanmadı.",
|
||||
"Finished" : "Tamamlandı",
|
||||
"To review" : "İncelenecek",
|
||||
"Action needed" : "İşlem yapılması gerekiyor",
|
||||
"Later" : "Sonra",
|
||||
"The file was uploaded" : "Dosya yüklendi",
|
||||
"The uploaded file exceeds the upload_max_filesize directive in php.ini" : "Yüklenen dosya php.ini dosyasındaki yüklenebilecek dosya boyutunu belirten upload_max_filesize değişkeninin değerini aşıyor",
|
||||
"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form" : "Yüklenen dosya HTML formundaki yüklenebilecek dosya boyutunu belirten MAX_FILE_SIZE değişkeninin değerini aşıyor",
|
||||
"The file was only partially uploaded" : "Dosyanın yalnız bir bölümü yüklendi",
|
||||
"No file was uploaded" : "Herhangi bir dosya yüklenmedi",
|
||||
"Missing a temporary folder" : "Geçici bir klasör eksik",
|
||||
"Could not write file to disk" : "Dosya diske yazılamadı",
|
||||
"A PHP extension stopped the file upload" : "Bir PHP eklentisi dosyanın yüklenmesini engelledi",
|
||||
"No file uploaded or file size exceeds maximum of %s" : "Herhangi bir dosya yüklenmedi ya da %s olan en büyük dosya boyutu sınırı aşıldı",
|
||||
"Deck" : "Tahta",
|
||||
"A kanban style project and personal management tool for Nextcloud" : "Nextcloud için Kanban tarzında bir proje ve kişisel yönetim uygulaması",
|
||||
"Deck is a kanban style organization tool aimed at personal planning and project organization for teams integrated with Nextcloud.\n\n\n- 📥 Add your tasks to cards and put them in order\n- 📄 Write down additional notes in markdown\n- 🔖 Assign labels for even better organization\n- 👥 Share with your team, friends or family\n- 🚀 Get your project organized" : "Deste, Nextcloud ile bütünleştirilmiş takımlar için Kanban tarzında bir kişisel planlama ve proje yönetimi uygulamasıdır.\n\n\n- 📥 Görevleri kartlara ekleyerek sıralayabilirsiniz\n- 📄 Markdown ile biçimlendirilmiş notlar ekleyebilirsiniz\n- 🔖 Daha iyi düzenleme için etiketler atayabilirsiniz\n- 👥 Takımınız, arkadaşlarınız ya da aileniz ile paylaşabilirsiniz\n- 🚀 Projelerinizi düzenli tutarak izleyebilirsiniz",
|
||||
@@ -22,6 +33,7 @@
|
||||
"Board details" : "Pano ayrıntıları",
|
||||
"All Boards" : "Tüm Panolar",
|
||||
"Archived boards" : "Arşivlenmiş panolar",
|
||||
"Drop your files here to upload it to the card" : "Karta yüklemek istediğiniz dosyalarınızı sürükleyip buraya bırakın",
|
||||
"Archive" : "Arşivle",
|
||||
"Unarchive" : "Arşivden Çıkar",
|
||||
"Enter a card title" : "Bir kart başlığı yazın",
|
||||
@@ -39,7 +51,7 @@
|
||||
"Discard share" : "Paylaşımı kaldır",
|
||||
"Update" : "Güncelle",
|
||||
"Create" : "Ekle",
|
||||
"Create a new tag" : "Yeni bir etiket ekle",
|
||||
"Create a new tag" : "Etiket ekle",
|
||||
"Status" : "Durum",
|
||||
"Title" : "Başlık",
|
||||
"Members" : "Üyeler",
|
||||
@@ -50,9 +62,14 @@
|
||||
"Delete board" : "Panoyu sil",
|
||||
"Reset" : "Sıfırla",
|
||||
"Undo board deletion - Otherwise the board will be deleted during the next cronjob run." : "Pano silme işlemini geri alır. Yoksa pano zamanlanmış görevin bir sonraki çalışmasında silinir.",
|
||||
"Create new board" : "Yeni pano ekle",
|
||||
"Create new board" : "Pano ekle",
|
||||
"New board title" : "Yeni pano başlığı",
|
||||
"Select an attachment" : "Bir ek dosyası seçin",
|
||||
"Cancel upload" : "Yüklemeyi iptal et",
|
||||
"by" : "Kişi:",
|
||||
"Undo file deletion - Otherwise the file will be deleted during the next cronjob run." : "Dosya silme işlemini geri alır. Yoksa dosya zamanlanmış görevin bir sonraki çalışmasında silinir.",
|
||||
"Undo file deletion" : "Dosya silmeyi geri al",
|
||||
"Insert the file into the description" : "Dosyayı açıklamaya ekle",
|
||||
"Modified:" : "Değiştirilme:",
|
||||
"Created:" : "Oluşturulma:",
|
||||
"Choose a tag" : "Bir etiket seçin",
|
||||
@@ -65,13 +82,16 @@
|
||||
"Click to set" : "Ayarlamak için tıklayın",
|
||||
"Remove due date" : "Bitiş tarihini kaldır",
|
||||
"Description" : "Açıklama",
|
||||
"Attachments" : "Ek dosyalar",
|
||||
"Saved" : "Kaydedildi",
|
||||
"Unsaved changes" : "Kaydedilmemiş değişiklikler",
|
||||
"Formatting help" : "Biçimlendirme yardımı",
|
||||
"Upload attachment" : "Ek dosya yükle",
|
||||
"Insert attachment" : "Ek dosya ekle",
|
||||
"Add a card description…" : "Bir kart açıklaması ekle...",
|
||||
"Shared boards" : "Paylaşılmış panolar",
|
||||
"View more" : "Diğerlerini görüntüle",
|
||||
"Move board to archive" : "Panoyu arşive taşı",
|
||||
"Create a new board" : "Yeni bir pano ekle"
|
||||
"Create a new board" : "Pano ekle"
|
||||
},"pluralForm" :"nplurals=2; plural=(n > 1);"
|
||||
}
|
||||
@@ -61,6 +61,10 @@ class Application extends App {
|
||||
return $container->getServer()->getConfig()->getSystemValue('dbtype', 'sqlite');
|
||||
});
|
||||
|
||||
$container->registerService('database4ByteSupport', function($container) {
|
||||
return $container->getServer()->getDatabaseConnection()->supports4ByteText();
|
||||
});
|
||||
|
||||
// Delete user/group acl entries when they get deleted
|
||||
/** @var IUserManager $userManager */
|
||||
$userManager = $server->getUserManager();
|
||||
|
||||
119
lib/Command/UserExport.php
Normal file
119
lib/Command/UserExport.php
Normal file
@@ -0,0 +1,119 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Command;
|
||||
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\Service\BoardService;
|
||||
use OCP\AppFramework\Db\DoesNotExistException;
|
||||
use OCP\AppFramework\Db\MultipleObjectsReturnedException;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IUserManager;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use Symfony\Component\Console\Input\InputArgument;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class UserExport extends Command {
|
||||
|
||||
protected $boardService;
|
||||
protected $cardMapper;
|
||||
private $userManager;
|
||||
private $groupManager;
|
||||
private $assignedUsersMapper;
|
||||
|
||||
public function __construct(BoardMapper $boardMapper,
|
||||
BoardService $boardService,
|
||||
StackMapper $stackMapper,
|
||||
CardMapper $cardMapper,
|
||||
AssignedUsersMapper $assignedUsersMapper,
|
||||
IUserManager $userManager,
|
||||
IGroupManager $groupManager) {
|
||||
parent::__construct();
|
||||
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->boardService = $boardService;
|
||||
$this->stackMapper = $stackMapper;
|
||||
$this->assignedUsersMapper = $assignedUsersMapper;
|
||||
$this->boardMapper = $boardMapper;
|
||||
|
||||
$this->userManager = $userManager;
|
||||
$this->groupManager = $groupManager;
|
||||
}
|
||||
|
||||
protected function configure() {
|
||||
$this
|
||||
->setName('deck:export')
|
||||
->setDescription('Export a JSON dump of user data')
|
||||
->addArgument(
|
||||
'user-id',
|
||||
InputArgument::REQUIRED,
|
||||
'User ID of the user'
|
||||
)
|
||||
;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param InputInterface $input
|
||||
* @param OutputInterface $output
|
||||
* @return void
|
||||
* @throws DoesNotExistException
|
||||
* @throws MultipleObjectsReturnedException
|
||||
* @throws \ReflectionException
|
||||
*/
|
||||
protected function execute(InputInterface $input, OutputInterface $output) {
|
||||
|
||||
$userId = $input->getArgument('user-id');
|
||||
|
||||
$groups = $this->groupManager->getUserGroupIds(
|
||||
$this->userManager->get($userId)
|
||||
);
|
||||
$boards = $this->boardService->findAll([
|
||||
'user' => $userId,
|
||||
'groups' => $groups
|
||||
]);
|
||||
|
||||
$data = [];
|
||||
foreach ($boards as $board) {
|
||||
$fullBoard = $this->boardMapper->find($board->getId(), true, true);
|
||||
$data[$board->getId()] = (array)$fullBoard->jsonSerialize();
|
||||
$stacks = $this->stackMapper->findAll($board->getId());
|
||||
foreach ($stacks as $stack) {
|
||||
$data[$board->getId()]['stacks'][] = (array)$stack->jsonSerialize();
|
||||
$cards = $this->cardMapper->findAllByStack($stack->getId());
|
||||
foreach ($cards as $card) {
|
||||
$fullCard = $this->cardMapper->find($card->getId());
|
||||
$assignedUsers = $this->assignedUsersMapper->find($card->getId());
|
||||
$fullCard->setAssignedUsers($assignedUsers);
|
||||
$data[$board->getId()]['stacks'][$stack->getId()]['cards'][] = (array)$fullCard->jsonSerialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
$output->writeln(json_encode($data, JSON_PRETTY_PRINT));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -46,6 +46,7 @@ class PageController extends Controller {
|
||||
public function index() {
|
||||
$params = [
|
||||
'user' => $this->userId,
|
||||
'maxUploadSize' => (int)\OCP\Util::uploadLimit(),
|
||||
];
|
||||
return new TemplateResponse('deck', 'main', $params);
|
||||
}
|
||||
|
||||
@@ -38,29 +38,40 @@ class CardMapper extends DeckMapper implements IPermissionMapper {
|
||||
/** @var IManager */
|
||||
private $notificationManager;
|
||||
private $databaseType;
|
||||
private $database4ByteSupport;
|
||||
|
||||
public function __construct(
|
||||
IDBConnection $db,
|
||||
LabelMapper $labelMapper,
|
||||
IUserManager $userManager,
|
||||
IManager $notificationManager,
|
||||
$databaseType = 'sqlite'
|
||||
$databaseType = 'sqlite',
|
||||
$database4ByteSupport = true
|
||||
) {
|
||||
parent::__construct($db, 'deck_cards', Card::class);
|
||||
$this->labelMapper = $labelMapper;
|
||||
$this->userManager = $userManager;
|
||||
$this->notificationManager = $notificationManager;
|
||||
$this->databaseType = $databaseType;
|
||||
$this->database4ByteSupport = $database4ByteSupport;
|
||||
}
|
||||
|
||||
public function insert(Entity $entity) {
|
||||
$entity->setDatabaseType($this->databaseType);
|
||||
$entity->setCreatedAt(time());
|
||||
$entity->setLastModified(time());
|
||||
if (!$this->database4ByteSupport) {
|
||||
$description = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $entity->getDescription());
|
||||
$entity->setDescription($description);
|
||||
}
|
||||
return parent::insert($entity);
|
||||
}
|
||||
|
||||
public function update(Entity $entity, $updateModified = true) {
|
||||
if (!$this->database4ByteSupport) {
|
||||
$description = preg_replace('/[\x{10000}-\x{10FFFF}]/u', "\xEF\xBF\xBD", $entity->getDescription());
|
||||
$entity->setDescription($description);
|
||||
}
|
||||
$entity->setDatabaseType($this->databaseType);
|
||||
|
||||
if ($updateModified) {
|
||||
|
||||
@@ -32,9 +32,11 @@ use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\NoPermissionException;
|
||||
use OCA\Deck\NotFoundException;
|
||||
use OCA\Deck\StatusException;
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\ICache;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IL10N;
|
||||
|
||||
class AttachmentService {
|
||||
|
||||
@@ -48,6 +50,8 @@ class AttachmentService {
|
||||
private $application;
|
||||
/** @var ICache */
|
||||
private $cache;
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
|
||||
/**
|
||||
* AttachmentService constructor.
|
||||
@@ -58,16 +62,17 @@ class AttachmentService {
|
||||
* @param Application $application
|
||||
* @param ICacheFactory $cacheFactory
|
||||
* @param $userId
|
||||
* @param IL10N $l10n
|
||||
* @throws \OCP\AppFramework\QueryException
|
||||
*/
|
||||
public function __construct(AttachmentMapper $attachmentMapper, CardMapper $cardMapper, PermissionService $permissionService, Application $application, ICacheFactory $cacheFactory, $userId) {
|
||||
public function __construct(AttachmentMapper $attachmentMapper, CardMapper $cardMapper, PermissionService $permissionService, Application $application, ICacheFactory $cacheFactory, $userId, IL10N $l10n) {
|
||||
$this->attachmentMapper = $attachmentMapper;
|
||||
$this->cardMapper = $cardMapper;
|
||||
$this->permissionService = $permissionService;
|
||||
$this->userId = $userId;
|
||||
$this->application = $application;
|
||||
$this->cache = $cacheFactory->createDistributed('deck-card-attachments-');
|
||||
|
||||
$this->l10n = $l10n;
|
||||
|
||||
// Register shipped attachment services
|
||||
// TODO: move this to a plugin based approach once we have different types of attachments
|
||||
@@ -145,6 +150,9 @@ class AttachmentService {
|
||||
} catch (InvalidAttachmentType $e) {
|
||||
// just store the data
|
||||
}
|
||||
if ($attachment->getData() === null) {
|
||||
throw new StatusException($this->l10n->t('No data was provided to create an attachment.'));
|
||||
}
|
||||
$attachment = $this->attachmentMapper->insert($attachment);
|
||||
|
||||
// extend data so the frontend can use it properly after creating
|
||||
|
||||
@@ -195,6 +195,7 @@ class CardService {
|
||||
}
|
||||
|
||||
public function assignUser($cardId, $userId) {
|
||||
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
$assignments = $this->assignedUsersMapper->find($cardId);
|
||||
foreach ($assignments as $assignment) {
|
||||
if ($assignment->getParticipant() === $userId) {
|
||||
@@ -208,6 +209,7 @@ class CardService {
|
||||
}
|
||||
|
||||
public function unassignUser($cardId, $userId) {
|
||||
$this->permissionService->checkPermission($this->cardMapper, $cardId, Acl::PERMISSION_EDIT);
|
||||
$assignments = $this->assignedUsersMapper->find($cardId);
|
||||
foreach ($assignments as $assignment) {
|
||||
if ($assignment->getParticipant() === $userId) {
|
||||
|
||||
@@ -25,14 +25,20 @@ namespace OCA\Deck\Service;
|
||||
|
||||
use OC\Security\CSP\ContentSecurityPolicyManager;
|
||||
use OCA\Deck\Db\Attachment;
|
||||
use OCA\Deck\StatusException;
|
||||
use OCP\AppFramework\Http\ContentSecurityPolicy;
|
||||
use OCP\AppFramework\Http\EmptyContentSecurityPolicy;
|
||||
use OCP\AppFramework\Http\FileDisplayResponse;
|
||||
use OCP\AppFramework\Http\StreamResponse;
|
||||
use OCP\Files\Cache\IScanner;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\NotFoundException;
|
||||
use OCP\Files\NotPermittedException;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\ILogger;
|
||||
use OCP\IRequest;
|
||||
@@ -43,17 +49,23 @@ class FileService implements IAttachmentService {
|
||||
private $appData;
|
||||
private $request;
|
||||
private $logger;
|
||||
private $rootFolder;
|
||||
private $config;
|
||||
|
||||
public function __construct(
|
||||
IL10N $l10n,
|
||||
IAppData $appData,
|
||||
IRequest $request,
|
||||
ILogger $logger
|
||||
ILogger $logger,
|
||||
IRootFolder $rootFolder,
|
||||
IConfig $config
|
||||
) {
|
||||
$this->l10n = $l10n;
|
||||
$this->appData = $appData;
|
||||
$this->request = $request;
|
||||
$this->logger = $logger;
|
||||
$this->rootFolder = $rootFolder;
|
||||
$this->config = $config;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -100,6 +112,10 @@ class FileService implements IAttachmentService {
|
||||
return $attachment;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
* @throws StatusException
|
||||
*/
|
||||
private function getUploadedFile () {
|
||||
$file = $this->request->getUploadedFile('file');
|
||||
$error = null;
|
||||
@@ -115,13 +131,13 @@ class FileService implements IAttachmentService {
|
||||
];
|
||||
|
||||
if (empty($file)) {
|
||||
$error = $this->l10n->t('No file uploaded');
|
||||
$error = $this->l10n->t('No file uploaded or file size exceeds maximum of %s', [\OCP\Util::humanFileSize(\OCP\Util::uploadLimit())]);
|
||||
}
|
||||
if (!empty($file) && array_key_exists('error', $file) && $file['error'] !== UPLOAD_ERR_OK) {
|
||||
$error = $phpFileUploadErrors[$file['error']];
|
||||
}
|
||||
if ($error !== null) {
|
||||
throw new \Exception($error);
|
||||
throw new StatusException($error);
|
||||
}
|
||||
return $file;
|
||||
}
|
||||
@@ -131,16 +147,21 @@ class FileService implements IAttachmentService {
|
||||
$folder = $this->getFolder($attachment);
|
||||
$fileName = $file['name'];
|
||||
if ($folder->fileExists($fileName)) {
|
||||
throw new \Exception('File already exists.');
|
||||
throw new StatusException('File already exists.');
|
||||
}
|
||||
|
||||
$target = $folder->newFile($fileName);
|
||||
$target->putContent(file_get_contents($file['tmp_name'], 'r'));
|
||||
$content = fopen($file['tmp_name'], 'rb');
|
||||
$target->putContent($content);
|
||||
fclose($content);
|
||||
|
||||
$attachment->setData($fileName);
|
||||
}
|
||||
|
||||
/**
|
||||
* This method requires to be used with POST so we can properly get the form data
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
public function update(Attachment $attachment) {
|
||||
$file = $this->getUploadedFile();
|
||||
@@ -148,7 +169,9 @@ class FileService implements IAttachmentService {
|
||||
$attachment->setData($fileName);
|
||||
|
||||
$target = $this->getFileForAttachment($attachment);
|
||||
$target->putContent(file_get_contents($file['tmp_name'], 'r'));
|
||||
$content = fopen($file['tmp_name'], 'rb');
|
||||
$target->putContent($content);
|
||||
fclose($content);
|
||||
|
||||
$attachment->setLastModified(time());
|
||||
}
|
||||
@@ -161,9 +184,32 @@ class FileService implements IAttachmentService {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Workaround until ISimpleFile can be fetched as a resource
|
||||
*
|
||||
* @throws \Exception
|
||||
*/
|
||||
private function getFileFromRootFolder(Attachment $attachment) {
|
||||
$folderName = 'file-card-' . (int)$attachment->getCardId();
|
||||
$instanceId = $this->config->getSystemValue('instanceid', null);
|
||||
if ($instanceId === null) {
|
||||
throw new \Exception('no instance id!');
|
||||
}
|
||||
$name = 'appdata_' . $instanceId;
|
||||
$appDataFolder = $this->rootFolder->get($name);
|
||||
$appDataFolder = $appDataFolder->get('deck');
|
||||
$cardFolder = $appDataFolder->get($folderName);
|
||||
return $cardFolder->get($attachment->getData());
|
||||
}
|
||||
|
||||
public function display(Attachment $attachment) {
|
||||
$file = $this->getFileForAttachment($attachment);
|
||||
$file = $this->getFileFromRootFolder($attachment);
|
||||
if (method_exists($file, 'fopen')) {
|
||||
$response = new StreamResponse($file->fopen('r'));
|
||||
$response->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
|
||||
} else {
|
||||
$response = new FileDisplayResponse($file);
|
||||
}
|
||||
if ($file->getMimeType() === 'application/pdf') {
|
||||
// We need those since otherwise chrome won't show the PDF file with CSP rule object-src 'none'
|
||||
// https://bugs.chromium.org/p/chromium/issues/detail?id=271452
|
||||
|
||||
@@ -28,32 +28,30 @@ Util::addScript('deck', 'build/vendor');
|
||||
|
||||
Util::addStyle('deck', 'style');
|
||||
Util::addScript('deck', 'build/deck');
|
||||
|
||||
if (\OC_Util::getVersion()[0] < 14) {
|
||||
Util::addStyle('deck', 'comp-13');
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="app" class="app-deck" data-ng-app="Deck" ng-controller="AppController" ng-cloak>
|
||||
<div class="app app-deck" data-ng-app="Deck" ng-controller="AppController" ng-cloak config="<?php p(json_encode($_)); ?>" ng-class="{'app-navigation-hide': appNavigationHide}">
|
||||
|
||||
<div id="app-navigation" data-ng-controller="ListController" ng-init="initSidebar()">
|
||||
<?php print_unescaped($this->inc('part.navigation')); ?>
|
||||
<?php /* print_unescaped($this->inc('part.settings')); */ ?>
|
||||
</div>
|
||||
<div id="app-content" ng-class="{ 'details-visible': sidebar.show }">
|
||||
<div ui-view></div>
|
||||
</div>
|
||||
<div id="app-content" ng-class="{ 'details-visible': sidebar.show }"><div id="app-navigation-toggle-custom" class="icon-menu" ng-click="toggleSidebar()"></div><div ui-view></div></div>
|
||||
<div id="app-sidebar" ng-class="{ 'details-visible': sidebar.show }" ng-if="sidebar.show" class="details-view scroll-container" ui-view="sidebarView"></div>
|
||||
<route-loading-indicator></route-loading-indicator>
|
||||
|
||||
|
||||
|
||||
<script type="text/ng-template" id="/boardlist.mainView.html">
|
||||
<?php print_unescaped($this->inc('part.boardlist')); ?>
|
||||
</script>
|
||||
<script type="text/ng-template" id="/board.sidebarView.html">
|
||||
<?php print_unescaped($this->inc('part.board.sidebarView')); ?>
|
||||
</script>
|
||||
<script type="text/ng-template" id="/board.mainView.html">
|
||||
<?php print_unescaped($this->inc('part.board.mainView')); ?>
|
||||
</script>
|
||||
<script type="text/ng-template" id="/board.html">
|
||||
<?php print_unescaped($this->inc('part.board')); ?>
|
||||
<?php print_unescaped($this->inc('part.board.mainView')); ?>
|
||||
</script>
|
||||
<script type="text/ng-template" id="/card.sidebarView.html">
|
||||
<?php print_unescaped($this->inc('part.card')); ?>
|
||||
|
||||
@@ -37,7 +37,6 @@
|
||||
</div>
|
||||
|
||||
<div id="board" class="scroll-container" ng-click="sidebar.show=false" ui-sref="board" ng-class="{'card-selected': params.cardId}">
|
||||
{{ cardOpen }}
|
||||
<search on-search="search" class="ng-hide"></search>
|
||||
|
||||
<div id="innerBoard" data-ng-model="stacks" data-as-sortable="sortOptionsStack">
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<?php print_unescaped($this->inc('part.board.mainView')); ?>
|
||||
<div id="app-sidebar" class="details-view scroll-container"
|
||||
ng-class="{ 'details-visible': sidebar.show }" ui-view="sidebarView">
|
||||
</div>
|
||||
@@ -86,7 +86,7 @@
|
||||
</div>
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in defaultColors" ng-style="{'background-color':'#{{ c }}'}" ng-click="label=setColor(label,c);" ng-class="{'selected': (c == label.color) }"><br /></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(label.hashedColor)" ng-init="label.hashedColor='#' + label.color">
|
||||
<label class="colorselect-label{{ label.color | iconWhiteFilter }} color" ng-style="getCustomBackground(label.hashedColor)" ng-init="label.hashedColor='#' + label.color">
|
||||
<input class="color" type="color" ng-model="label.hashedColor" value="#{{label.color}}" ng-change="label=setHashedColor(label)"/>
|
||||
</label>
|
||||
</div>
|
||||
@@ -104,7 +104,7 @@
|
||||
</div>
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in defaultColors" ng-style="{'background-color':'#{{ c }}'}" ng-click="newLabel=setColor(newLabel,c)" ng-class="{'selected': (c == newLabel.color), 'dark': (newBoard.color | textColorFilter) === '#ffffff' }"><br /></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(newLabel.hashedColor)" ng-init="newLabel.hashedColor='#' + newLabel.color">
|
||||
<label class="colorselect-label{{ newLabel.color | iconWhiteFilter }} color" ng-style="getCustomBackground(newLabel.hashedColor)" ng-init="newLabel.hashedColor='#' + newLabel.color">
|
||||
<input class="color" type="color" ng-model="newLabel.hashedColor" value="#{{newLabel.color}}" ng-change="newLabel=setHashedColor(newLabel)"/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<input class="edit ng-valid ng-empty" type="text" autofocus-on-insert ng-model="b.title" maxlength="100" ng-model-options="{ debounce: 250 }">
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in ::colors" ng-style="{'background-color':'#{{ c }}'}" ng-click="b=setColor(b,c)" ng-class="{'selected': (c == b.color) }"></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(b.hashedColor)" ng-init="b.hashedColor='#' + b.color">
|
||||
<label class="colorselect-label{{ b.color | iconWhiteFilter }} color" ng-style="getCustomBackground(b.hashedColor)" ng-init="b.hashedColor='#' + b.color">
|
||||
<input class="color" type="color" ng-model="b.hashedColor" value="#{{b.color}}" ng-change="b=setHashedColor(b)"/>
|
||||
</label>
|
||||
</div>
|
||||
@@ -107,7 +107,7 @@
|
||||
autofocus-on-insert ng-model="newBoard.title" maxlength="100" ng-model-options="{ debounce: 250 }">
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in ::colors" ng-style="{'background-color':'#{{ c }}'}" ng-click="selectColor(c);b=setColor(b,c);"ng-class="{'selected': (c == newBoard.color), 'dark': (newBoard.color | textColorFilter) === '#ffffff' }"></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(newBoard.hashedColor)" ng-init="newBoard.hashedColor='#' + newBoard.color">
|
||||
<label class="colorselect-label{{ newBoard.color | iconWhiteFilter }} color" ng-style="getCustomBackground(newBoard.hashedColor)" ng-init="newBoard.hashedColor='#' + newBoard.color">
|
||||
<input class="color" type="color" ng-model="newBoard.hashedColor" value="#{{newBoard.color}}" ng-change="newBoard=setHashedColor(newBoard)"/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
@@ -2,6 +2,19 @@
|
||||
<div class="attachment-list" ng-class="{selector: $ctrl.isFileSelector}">
|
||||
<h3 class="attachment-selector" ng-if="$ctrl.isFileSelector"><?php p($l->t('Select an attachment')); ?> <a class="icon-close" ng-click="$ctrl.abort()"></a></h3>
|
||||
<ul>
|
||||
<li class="attachment"
|
||||
ng-repeat="attachment in $ctrl.fileservice.getProgressItemsForCard($ctrl.cardservice.getCurrent().id)">
|
||||
<a class="fileicon icon-file"></a>
|
||||
<div class="details">
|
||||
<div class="filename">
|
||||
<span class="basename">{{ attachment.file.name }}</span>
|
||||
</div>
|
||||
<progress ng-attr-value="{{ attachment.progress }}" max="100"></progress>
|
||||
</div>
|
||||
<button class="icon icon-close button-inline" ng-click="attachment.cancel()">
|
||||
<span class="hidden-visually"><?php p($l->t('Cancel upload')); ?></span>
|
||||
</button>
|
||||
</li>
|
||||
<li class="attachment"
|
||||
ng-repeat="attachment in $ctrl.cardservice.getCurrent().attachments | filter: {type: 'deck_file'} | orderBy: ['deletedAt', '-lastModified']"
|
||||
ng-class="{deleted: attachment.deletedAt > 0, selector: $ctrl.isFileSelector}"
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<div nv-file-drop="" uploader="uploader" class="drop-zone" options="{cardId: cardservice.getCurrent().id}">
|
||||
<div class="drop-indicator" nv-file-over uploader="uploader">
|
||||
<div nv-file-drop="" uploader="fileservice.uploader" class="drop-zone" options="{cardId: cardservice.getCurrent().id}">
|
||||
<div class="drop-indicator" nv-file-over uploader="fileservice.uploader">
|
||||
<p><?php p($l->t('Drop your files here to upload it to the card')); ?></p>
|
||||
</div>
|
||||
<div id="board-status" ng-if="statusservice.active">
|
||||
@@ -97,13 +97,14 @@
|
||||
<span class="save-indicator saved"><?php p($l->t('Saved')); ?></span>
|
||||
<span class="save-indicator unsaved"><?php p($l->t('Unsaved changes')); ?></span>
|
||||
<a ng-if="params.tab === 0" href="https://github.com/nextcloud/deck/wiki/Markdown-Help" target="_blank" class="icon icon-help" data-toggle="tooltip" data-placement="left" title="<?php p($l->t('Formatting help')); ?>"><span class="hidden-visually"><?php p($l->t('Formatting help')); ?></span></a>
|
||||
<label ng-if="params.tab === 1" for="attachment-upload" class="button icon-upload" ng-class="{'icon-loading-small': uploader.isUploading}" data-toggle="tooltip" data-placement="left" title="<?php p($l->t('Upload attachment')); ?>"></label>
|
||||
<input id="attachment-upload" type="file" nv-file-select="" uploader="uploader" class="hidden" options="{cardId: cardservice.getCurrent().id}"/>
|
||||
<label ng-if="params.tab === 1" for="attachment-upload" class="button icon-upload" ng-class="{'icon-loading-small': fileservice.uploader.isUploading}" data-toggle="tooltip" data-placement="left" title="<?php p($l->t('Upload attachment')); ?>"></label>
|
||||
<input id="attachment-upload" type="file" nv-file-select="" uploader="fileservice.uploader" class="hidden" options="{cardId: cardservice.getCurrent().id}"/>
|
||||
<input ng-if="status.cardEditDescription" type="button" ng-mousedown="status.continueEdit = true; status.selectAttachment = true;" class="icon-files-dark" data-toggle="tooltip" data-placement="left" title="<?php p($l->t('Insert attachment')); ?>"/>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="section-content card-attachments">
|
||||
<div class="error icon-error" ng-if="fileservice.status"><strong>{{ fileservice.status.error }}</strong><br />{{ fileservice.status.message }}</div>
|
||||
<attachment-list-component ng-if="params.tab === 1 && cardservice.getCurrent() && isArray(cardservice.getCurrent().attachments)" attachments="cardservice.getCurrent().attachments"></attachment-list-component>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
</form>
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in ::colors" ng-style="{'background-color':'#{{ c }}'}" ng-click="b=setColor(b,c)" ng-class="{'selected': (c == b.color) }"></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(b.hashedColor)" ng-init="b.hashedColor='#' + b.color">
|
||||
<label class="colorselect-label{{ b.color | iconWhiteFilter }} color" ng-style="getCustomBackground(b.hashedColor)" ng-init="b.hashedColor='#' + b.color">
|
||||
<input class="color" type="color" ng-model="b.hashedColor" value="#{{b.color}}" ng-change="b=setHashedColor(b)"/>
|
||||
</label>
|
||||
</div>
|
||||
@@ -58,7 +58,7 @@
|
||||
</form>
|
||||
<div class="colorselect" ng-controller="ColorPickerController">
|
||||
<div class="color" ng-repeat="c in ::colors" ng-style="{'background-color':'#{{ c }}'}" ng-click="selectColor(c);newBoard=setColor(newBoard,c)" ng-class="{'selected': (c == newBoard.color), 'dark': (newBoard.color | textColorFilter) === '#ffffff' }"><br /></div>
|
||||
<label class="colorselect-label color" ng-style="getCustomBackground(newBoard.hashedColor)" ng-init="newBoard.hashedColor='#' + newBoard.color">
|
||||
<label class="colorselect-label{{ newBoard.color | iconWhiteFilter }} color" ng-style="getCustomBackground(newBoard.hashedColor)" ng-init="newBoard.hashedColor='#' + newBoard.color">
|
||||
<input class="color" type="color" ng-model="newBoard.hashedColor" value="#{{newBoard.color}}" ng-change="newBoard=setHashedColor(newBoard)"/>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
141
tests/unit/Command/UserExportTest.php
Normal file
141
tests/unit/Command/UserExportTest.php
Normal file
@@ -0,0 +1,141 @@
|
||||
<?php
|
||||
/**
|
||||
* @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @author Julius Härtl <jus@bitgrid.net>
|
||||
*
|
||||
* @license GNU AGPL version 3 or any later version
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as
|
||||
* published by the Free Software Foundation, either version 3 of the
|
||||
* License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\Deck\Command;
|
||||
|
||||
use OCA\Deck\Db\AssignedUsersMapper;
|
||||
use OCA\Deck\Db\Attachment;
|
||||
use OCA\Deck\Db\AttachmentMapper;
|
||||
use OCA\Deck\Db\Board;
|
||||
use OCA\Deck\Db\BoardMapper;
|
||||
use OCA\Deck\Db\Card;
|
||||
use OCA\Deck\Db\CardMapper;
|
||||
use OCA\Deck\Db\Stack;
|
||||
use OCA\Deck\Db\StackMapper;
|
||||
use OCA\Deck\InvalidAttachmentType;
|
||||
use OCA\Deck\Service\AttachmentService;
|
||||
use OCA\Deck\Service\BoardService;
|
||||
use OCA\Deck\Service\IAttachmentService;
|
||||
use OCP\IGroupManager;
|
||||
use OCP\IUser;
|
||||
use OCP\IUserManager;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
|
||||
class UserExportTest extends \Test\TestCase {
|
||||
|
||||
protected $boardMapper;
|
||||
protected $boardService;
|
||||
protected $stackMapper;
|
||||
protected $cardMapper;
|
||||
protected $assignedUserMapper;
|
||||
protected $userManager;
|
||||
protected $groupManager;
|
||||
|
||||
private $userExport;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
$this->boardMapper = $this->createMock(BoardMapper::class);
|
||||
$this->boardService= $this->createMock(BoardService::class);
|
||||
$this->stackMapper= $this->createMock(StackMapper::class);
|
||||
$this->cardMapper= $this->createMock(CardMapper::class);
|
||||
$this->assignedUserMapper= $this->createMock(AssignedUsersMapper::class);
|
||||
$this->userManager = $this->createMock(IUserManager::class);
|
||||
$this->groupManager = $this->createMock(IGroupManager::class);
|
||||
$this->userExport = new UserExport($this->boardMapper, $this->boardService, $this->stackMapper, $this->cardMapper, $this->assignedUserMapper, $this->userManager, $this->groupManager);
|
||||
}
|
||||
|
||||
public function getBoard($id) {
|
||||
$board = new Board();
|
||||
$board->setId($id);
|
||||
$board->setTitle('Board ' . $id);
|
||||
return $board;
|
||||
}
|
||||
public function getStack($id) {
|
||||
$stack = new Stack();
|
||||
$stack->setId($id);
|
||||
$stack->setTitle('Stack ' . $id);
|
||||
return $stack;
|
||||
}
|
||||
public function getCard($id) {
|
||||
$card = new Card();
|
||||
$card->setId($id);
|
||||
$card->setTitle('Card ' . $id);
|
||||
return $card;
|
||||
}
|
||||
public function testExecute() {
|
||||
$input = $this->createMock(InputInterface::class);
|
||||
$input->expects($this->once())->method('getArgument')->with('user-id')->willReturn('admin');
|
||||
$output = $this->createMock(OutputInterface::class);
|
||||
|
||||
$user = $this->createMock(IUser::class);
|
||||
$this->userManager->expects($this->once())
|
||||
->method('get')
|
||||
->with('admin')
|
||||
->willReturn($user);
|
||||
|
||||
$groups = [];
|
||||
$this->groupManager->expects($this->once())
|
||||
->method('getUserGroupIds')
|
||||
->with($user)
|
||||
->willReturn($groups);
|
||||
|
||||
$boards = [
|
||||
$this->getBoard(1),
|
||||
$this->getBoard(2),
|
||||
];
|
||||
$this->boardService->expects($this->once())
|
||||
->method('findAll')
|
||||
->with([
|
||||
'user' => 'admin',
|
||||
'groups' => $groups
|
||||
])
|
||||
->willReturn($boards);
|
||||
$this->boardMapper->expects($this->exactly(count($boards)))
|
||||
->method('find')
|
||||
->willReturn($boards[0]);
|
||||
$stacks = [
|
||||
$this->getStack(1),
|
||||
$this->getStack(2)
|
||||
];
|
||||
$this->stackMapper->expects($this->exactly(count($boards)))
|
||||
->method('findAll')
|
||||
->willReturn($stacks);
|
||||
$cards = [
|
||||
$this->getCard(1),
|
||||
$this->getCard(2),
|
||||
$this->getCard(3),
|
||||
];
|
||||
$this->cardMapper->expects($this->exactly(count($boards)*count($stacks)))
|
||||
->method('findAllByStack')
|
||||
->willReturn($cards);
|
||||
$this->cardMapper->expects($this->exactly(count($boards)*count($stacks)*count($cards)))
|
||||
->method('find')
|
||||
->willReturn($cards[0]);
|
||||
$this->assignedUserMapper->expects($this->exactly(count($boards)*count($stacks)*count($cards)))
|
||||
->method('find')
|
||||
->willReturn([]);
|
||||
$result = $this->invokePrivate($this->userExport, 'execute', [$input, $output]);
|
||||
}
|
||||
}
|
||||
@@ -34,6 +34,7 @@ use OCP\AppFramework\Http\Response;
|
||||
use OCP\AppFramework\IAppContainer;
|
||||
use OCP\ICache;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IL10N;
|
||||
use PHPUnit\Framework\MockObject\MockObject;
|
||||
use Test\TestCase;
|
||||
|
||||
@@ -67,6 +68,8 @@ class AttachmentServiceTest extends TestCase {
|
||||
private $appContainer;
|
||||
/** ICache */
|
||||
private $cache;
|
||||
/** @var IL10N */
|
||||
private $l10n;
|
||||
|
||||
/**
|
||||
* @throws \OCP\AppFramework\QueryException
|
||||
@@ -91,7 +94,9 @@ class AttachmentServiceTest extends TestCase {
|
||||
->method('getContainer')
|
||||
->willReturn($this->appContainer);
|
||||
|
||||
$this->attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $this->application, $this->cacheFactory, $this->userId);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
|
||||
$this->attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $this->application, $this->cacheFactory, $this->userId, $this->l10n);
|
||||
}
|
||||
|
||||
public function testRegisterAttachmentService() {
|
||||
@@ -103,7 +108,7 @@ class AttachmentServiceTest extends TestCase {
|
||||
$application->expects($this->any())
|
||||
->method('getContainer')
|
||||
->willReturn($appContainer);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $application, $this->cacheFactory, $this->userId);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $application, $this->cacheFactory, $this->userId, $this->l10n);
|
||||
$attachmentService->registerAttachmentService('custom', MyAttachmentService::class);
|
||||
$this->assertEquals($fileServiceMock, $attachmentService->getService('deck_file'));
|
||||
$this->assertEquals(MyAttachmentService::class, get_class($attachmentService->getService('custom')));
|
||||
@@ -121,7 +126,7 @@ class AttachmentServiceTest extends TestCase {
|
||||
$application->expects($this->any())
|
||||
->method('getContainer')
|
||||
->willReturn($appContainer);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $application, $this->cacheFactory, $this->userId);
|
||||
$attachmentService = new AttachmentService($this->attachmentMapper, $this->cardMapper, $this->permissionService, $application, $this->cacheFactory, $this->userId, $this->l10n);
|
||||
$attachmentService->registerAttachmentService('custom', MyAttachmentService::class);
|
||||
$attachmentService->getService('deck_file_invalid');
|
||||
}
|
||||
|
||||
@@ -38,11 +38,15 @@ use OCA\Deck\StatusException;
|
||||
use OCP\AppFramework\Http\ContentSecurityPolicy;
|
||||
use OCP\AppFramework\Http\FileDisplayResponse;
|
||||
use OCP\AppFramework\Http\Response;
|
||||
use OCP\AppFramework\Http\StreamResponse;
|
||||
use OCP\AppFramework\IAppContainer;
|
||||
use OCP\Files\Folder;
|
||||
use OCP\Files\IAppData;
|
||||
use OCP\Files\IRootFolder;
|
||||
use OCP\Files\SimpleFS\ISimpleFile;
|
||||
use OCP\Files\SimpleFS\ISimpleFolder;
|
||||
use OCP\ICacheFactory;
|
||||
use OCP\IConfig;
|
||||
use OCP\IL10N;
|
||||
use OCP\ILogger;
|
||||
use OCP\IRequest;
|
||||
@@ -61,6 +65,10 @@ class FileServiceTest extends TestCase {
|
||||
private $logger;
|
||||
/** @var FileService */
|
||||
private $fileService;
|
||||
/** @var IRootFolder */
|
||||
private $rootFolder;
|
||||
/** @var IConfig */
|
||||
private $config;
|
||||
|
||||
public function setUp() {
|
||||
parent::setUp();
|
||||
@@ -68,7 +76,9 @@ class FileServiceTest extends TestCase {
|
||||
$this->appData = $this->createMock(IAppData::class);
|
||||
$this->l10n = $this->createMock(IL10N::class);
|
||||
$this->logger = $this->createMock(ILogger::class);
|
||||
$this->fileService = new FileService($this->l10n, $this->appData, $this->request, $this->logger);
|
||||
$this->rootFolder = $this->createMock(IRootFolder::class);
|
||||
$this->config = $this->createMock(IConfig::class);
|
||||
$this->fileService = new FileService($this->l10n, $this->appData, $this->request, $this->logger, $this->rootFolder, $this->config);
|
||||
}
|
||||
|
||||
public function mockGetFolder($cardId) {
|
||||
@@ -184,8 +194,8 @@ class FileServiceTest extends TestCase {
|
||||
->willReturn(false);
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$file->expects($this->once())
|
||||
->method('putContent')
|
||||
->with(file_get_contents(__FILE__, 'r'));
|
||||
->method('putContent');
|
||||
// FIXME: test fopen call properly
|
||||
$folder->expects($this->once())
|
||||
->method('newFile')
|
||||
->willReturn($file);
|
||||
@@ -202,8 +212,8 @@ class FileServiceTest extends TestCase {
|
||||
->willReturn(false);
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$file->expects($this->once())
|
||||
->method('putContent')
|
||||
->with(file_get_contents(__FILE__, 'r'));
|
||||
->method('putContent');
|
||||
// FIXME: test fopen call properly
|
||||
$folder->expects($this->once())
|
||||
->method('newFile')
|
||||
->willReturn($file);
|
||||
@@ -231,8 +241,8 @@ class FileServiceTest extends TestCase {
|
||||
$folder = $this->mockGetFolder(123);
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$file->expects($this->once())
|
||||
->method('putContent')
|
||||
->with(file_get_contents(__FILE__, 'r'));
|
||||
->method('putContent');
|
||||
// FIXME: test fopen call properly
|
||||
$folder->expects($this->once())
|
||||
->method('getFile')
|
||||
->willReturn($file);
|
||||
@@ -253,33 +263,60 @@ class FileServiceTest extends TestCase {
|
||||
}
|
||||
|
||||
public function testDisplay() {
|
||||
$this->config->expects($this->once())
|
||||
->method('getSystemValue')
|
||||
->willReturn('123');
|
||||
$appDataFolder = $this->createMock(Folder::class);
|
||||
$deckAppDataFolder = $this->createMock(Folder::class);
|
||||
$cardFolder = $this->createMock(Folder::class);
|
||||
$this->rootFolder->expects($this->once())->method('get')->willReturn($appDataFolder);
|
||||
$appDataFolder->expects($this->once())->method('get')->willReturn($deckAppDataFolder);
|
||||
$deckAppDataFolder->expects($this->once())->method('get')->willReturn($cardFolder);
|
||||
$attachment = $this->getAttachment();
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$folder = $this->mockGetFolder('123');
|
||||
$folder->expects($this->once())
|
||||
->method('getFile')
|
||||
->willReturn($file);
|
||||
$file->expects($this->exactly(2))
|
||||
$file = $this->createMock(\OCP\Files\File::class);
|
||||
$cardFolder->expects($this->once())->method('get')->willReturn($file);
|
||||
$file->expects($this->any())
|
||||
->method('getMimeType')
|
||||
->willReturn('image/jpeg');
|
||||
$file->expects($this->any())
|
||||
->method('getName')
|
||||
->willReturn('file1');
|
||||
$file->expects($this->any())
|
||||
->method('fopen')
|
||||
->willReturn('fileresource');
|
||||
$actual = $this->fileService->display($attachment);
|
||||
$expected = new FileDisplayResponse($file);
|
||||
$expected = new StreamResponse('fileresource');
|
||||
$expected->addHeader('Content-Type', 'image/jpeg');
|
||||
$expected->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
|
||||
|
||||
$this->assertEquals($expected, $actual);
|
||||
}
|
||||
|
||||
public function testDisplayPdf() {
|
||||
$this->config->expects($this->once())
|
||||
->method('getSystemValue')
|
||||
->willReturn('123');
|
||||
$appDataFolder = $this->createMock(Folder::class);
|
||||
$deckAppDataFolder = $this->createMock(Folder::class);
|
||||
$cardFolder = $this->createMock(Folder::class);
|
||||
$this->rootFolder->expects($this->once())->method('get')->willReturn($appDataFolder);
|
||||
$appDataFolder->expects($this->once())->method('get')->willReturn($deckAppDataFolder);
|
||||
$deckAppDataFolder->expects($this->once())->method('get')->willReturn($cardFolder);
|
||||
$attachment = $this->getAttachment();
|
||||
$file = $this->createMock(ISimpleFile::class);
|
||||
$folder = $this->mockGetFolder('123');
|
||||
$folder->expects($this->once())
|
||||
->method('getFile')
|
||||
->willReturn($file);
|
||||
$file->expects($this->exactly(2))
|
||||
$file = $this->createMock(\OCP\Files\File::class);
|
||||
$cardFolder->expects($this->once())->method('get')->willReturn($file);
|
||||
$file->expects($this->any())
|
||||
->method('getMimeType')
|
||||
->willReturn('application/pdf');
|
||||
$file->expects($this->any())
|
||||
->method('getName')
|
||||
->willReturn('file1');
|
||||
$file->expects($this->any())
|
||||
->method('fopen')
|
||||
->willReturn('fileresource');
|
||||
$actual = $this->fileService->display($attachment);
|
||||
$expected = new FileDisplayResponse($file);
|
||||
$expected = new StreamResponse('fileresource');
|
||||
$expected->addHeader('Content-Disposition', 'inline; filename="' . rawurldecode($file->getName()) . '"');
|
||||
$expected->addHeader('Content-Type', 'application/pdf');
|
||||
$policy = new ContentSecurityPolicy();
|
||||
$policy->addAllowedObjectDomain('\'self\'');
|
||||
|
||||
Reference in New Issue
Block a user