Merge branch 'development' into feature/sane_source

This commit is contained in:
Roberto Rosario
2017-05-12 18:06:19 -04:00
1690 changed files with 85050 additions and 27793 deletions

41
.gitignore vendored
View File

@@ -3,26 +3,27 @@
*.pyo
*.sqlite
*.sqlite3
settings_local.py
/celerybeat-schedule
document_storage/
/misc/mayan.geany
mayan/media/document_cache/
build/
_build/
gpg_home/
/mayan/media/static/
/whoosh_index/
/fabfile_install
/venv/
.coverage
/dist/
.idea/
static_collected/
*egg-info*
mayan/settings/local.py
.vagrant
.tox/
coverage.xml
.coverage
.coverage.tox*
.idea/
.tox/
.vagrant
_build/
build/
coverage.xml
document_storage/
gpg_home/
htmlcov/
mayan/media/
mayan/media/document_cache/
mayan/settings/local.py
settings_local.py
static_collected/
/celerybeat-schedule
/fabfile_install
/dist/
/misc/mayan.geany
/mayan/media/static/
/venv/
/whoosh_index/

View File

@@ -21,7 +21,7 @@ test:mysql:
- pip install mysql-python
- apt-get install -qq mysql-client
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;"
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
tags:
- mysql
@@ -30,12 +30,12 @@ test:postgres:
- apt-get install -qq libpq-dev
- pip install -r requirements/testing.txt
- pip install psycopg2
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
tags:
- postgres
test:sqlite:
script:
- pip install -r requirements/testing.txt
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN

View File

@@ -17,9 +17,9 @@ before_script:
- mysql -e 'create database mayan_edms;'
- psql -c 'create database mayan_edms;' -U postgres
script:
- if [[ $DB == mysql ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi
- if [[ $DB == postgres ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi
- if [[ $DB == sqlite ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.base --nomigrations; fi
- if [[ $DB == mysql ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi
- if [[ $DB == postgres ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi
- if [[ $DB == sqlite ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.base --nomigrations; fi
after_success:
- coveralls
branches:

View File

@@ -19,6 +19,12 @@ source_lang = en
source_file = mayan/apps/authentication/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.cabinets-2-0]
file_filter = mayan/apps/cabinets/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.checkouts-2-0]
file_filter = mayan/apps/checkouts/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -91,12 +97,6 @@ source_lang = en
source_file = mayan/apps/folders/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.installation-2-0]
file_filter = mayan/apps/installation/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/installation/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.linking-2-0]
file_filter = mayan/apps/linking/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -127,12 +127,6 @@ source_lang = en
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.mirroring-2-0]
file_filter = mayan/apps/mirroring/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.motd-2-0]
file_filter = mayan/apps/motd/locale/<lang>/LC_MESSAGES/django.po
source_lang = en

View File

@@ -17,7 +17,7 @@ same properties that can trigger the issue and upload that file instead.
- Add steps that trigger the issue in a **repeatable manner**.
- **Screenshots** go a long way in helping understand problems.
- The issue must be related to the code only, do not open issues for problems
with webservers, cloud providers, etc.
with deployments, webservers, cloud providers, etc.
- Do not open issues asking for **support or consulting**.
Code
@@ -40,7 +40,19 @@ following branches:
are unstable and should not be used in production.
1. Start making your changes in your own separate branch.
1. Write a test which shows that the bug was fixed or that the feature works as expected.
1. Write a test which shows that the bug was fixed or that the feature works as
expected.
1. Sign your work. Your signature certifies your submission according to the
articles of the [Developer Certificate of Origin](https://gitlab.com/mayan-edms/mayan-edms/blob/master/DCO).
The sign-off should be in the form:
````
Signed-off-by: John Doe <john.doe@example.com>
````
You must use your real name and email, pseudonyms or anonymous contributions
are not allowed. If you set your user.name and user.email git configs, you can
sign your commit automatically with git commit -s.
1. Submit a merge request for your changes.
Feature requests
@@ -64,8 +76,3 @@ Code style
----------
- Refer to the [Development](http://mayan.readthedocs.io/en/latest/topics/development.html)
chapter for information and examples of the code style.
License
-------
By contributing your code, you agree to license your contribution under the
terms of the project's license.

36
DCO Normal file
View File

@@ -0,0 +1,36 @@
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
660 York Street, Suite 102,
San Francisco, CA 94110 USA
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.

View File

@@ -1,4 +1,10 @@
2.2 (2016-XX-XX)
3.0 (2017-XX-XX)
================
- Metadat widget appearance changes
- Content windows appearance changes
- Add new document's version list view permission
2.2 (2017-04-26)
================
- Remove the installation app (GitLab #301).
- Add support for document page search
@@ -15,6 +21,47 @@ the user links
- Tags are alphabetically ordered by label (GitLab #342).
- Stop loading theme fonts from the web (GitLab #343).
- Add support for attaching multiple tags (GitLab #307).
- Integrate the Cabinets app.
2.1.11 (2017-03-14)
===================
- Added a quick rename serializer to the document type API serializer.
- Added per document type, workflow list API view.
- Mayan EDMS was adopted a version 1.1 of the Linux Foundation Developer Certificate of Origin.
- Added the detail url of a permission in the permission serializer.
- Added endpoints for the ACL app API.
- Implemented document workflows transition ACLs. GitLab issue #321.
- Add document comments API endpoints. GitHub issue #249.
- Add support for overriding the Celery class.
- Changed the document upload view in source app to not use the HTTP referer
URL blindly, but instead recompose the URL using known view name. Needed
when integrating Mayan EDMS into other app via using iframes.
- Addes size field to the document version serializer.
- Removed the serializer from the deleted document restore API endpoint.
- Added support for adding or editing document types to smart links via the
API.
2.1.10 (2017-02-13)
===================
- Update Makefile to use twine for releases.
- Add Makefile target to make test releases.
2.1.9 (2017-02-13)
==================
- Update make file to Workaround long standing pypa wheel bug #99
2.1.8 (2017-02-12)
==================
- Fixes in the trashed document API endpoints.
- Improved tags API PUT and PATCH endpoints.
- Bulk document adding when creating and editing tags.
- The version of django-mptt is preserved in case mayan-cabinets is installed.
- Add Django GPG API endpoints for singing keys.
- Add API endpoints for the document states (workflows) app.
- Add API endpoints for the messsage of the day (MOTD) app.
- Add Smart link API endpoints.
- Add writable versions of the Document and Document Type serializers (GitLab issues #348 and #349).
- Close GitLab issue #310 "Metadata's lookup with chinese messages when new document"
2.1.7 (2017-02-01)
==================
@@ -26,7 +73,7 @@ the user links
- Enable the parser and validation fields of the metadata serializer.
2.1.6 (2016-11-23)
=================
==================
- Fix variable name typo in the rotation transformation class.
- Update translations

View File

@@ -1,3 +1,3 @@
include README.rst LICENSE HISTORY.rst
recursive-include mayan *.txt *.html *.css *.ico *.png *.jpg *.js *.po *.mo *.ttf *.woff *.woff2 LICENSE
include README.md LICENSE HISTORY.rst mayan/LICENSE
recursive-include mayan/apps *.txt *.html *.css *.ico *.png *.jpg *.js *.po *.mo *.ttf *.woff *.woff2 *.gif *.eot *.svg *.doc *.pdf *.tiff *.sig *.asc *.gpg *.zip
global-exclude mayan/settings/local.py mayan/settings/travis/* mayan/media/*

View File

@@ -7,8 +7,8 @@ help:
@echo "clean-pyc - Remove Python artifacts."
@echo "clean - Remove Python and build artifacts."
@echo "test MODULE=<python module name> - Run tests for a single App, module or test class."
@echo "test-all - Run all tests."
@echo "test MODULE=<python module name> - Run tests for a single App, module or test class."
@echo "docs_serve - Run the livehtml documentation generator."
@echo "translations_make - Refresh all translation files."
@@ -23,11 +23,17 @@ help:
@echo "sdist - Build the source distribution package."
@echo "wheel - Build the wheel distribution package."
@echo "release - Package (sdist and wheel) and upload a release."
@echo "test_release - Package (sdist and wheel) and upload to the PyPI test server."
@echo "runserver - Run the development server."
@echo "runserver_plus - Run the Django extension's development server."
@echo "shell_plus - Run the shell_plus command."
@echo "docker_services_on - Launch and initialize production-like services using Docker (Postgres and Redis)."
@echo "docker_services_off - Stop and delete the Docker production-like services."
@echo "docker_services_frontend - Launch a front end instance that uses the production-like services."
@echo "docker_services_worker - Launch a worker instance that uses the production-like services."
@echo "safety_check - Run a package safety check."
@@ -52,7 +58,7 @@ test:
./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
test-all:
./manage.py runtests --settings=mayan.settings.testing --nomigrations
./manage.py test --mayan-apps --settings=mayan.settings.testing --nomigrations
# Documentation
@@ -90,15 +96,20 @@ requirements_testing:
# Releases
release: clean
python setup.py sdist bdist_wheel upload
test_release: clean wheel
twine upload dist/* -r testpypi
@echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms"
release: clean wheel
twine upload dist/* -r pypi
sdist: clean
python setup.py sdist
ls -l dist
wheel: clean
python setup.py bdist_wheel
wheel: clean sdist
pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz
ls -l dist
@@ -113,9 +124,25 @@ runserver_plus:
shell_plus:
./manage.py shell_plus --settings=mayan.settings.development
docker_services_on:
docker run -d --name redis -p 6379:6379 redis
docker run -d --name postgres -p 5432:5432 postgres
while ! nc -z 127.0.0.1 6379; do sleep 1; done
while ! nc -z 127.0.0.1 5432; do sleep 1; done
sleep 1
./manage.py initialsetup --settings=mayan.settings.testing.docker
docker_services_off:
docker stop postgres redis
docker rm postgres redis
docker_services_frontend:
./manage.py runserver --settings=mayan.settings.testing.docker
docker_services_worker:
./manage.py celery worker --settings=mayan.settings.testing.docker -B -l INFO -O fair
# Security
safety_check:
safety check

78
README.md Normal file
View File

@@ -0,0 +1,78 @@
[![pypi][pypi]][pypi-url]
[![builds][builds]][builds-url]
[![coverage][cover]][cover-url]
![python][python]
![license][license]
[pypi]: http://img.shields.io/pypi/v/mayan-edms.svg
[pypi-url]: http://badge.fury.io/py/mayan-edms
[builds]: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
[builds-url]: https://gitlab.com/mayan-edms/mayan-edms/pipelines
[cover]: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
[cover-url]: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
[python]: https://img.shields.io/pypi/pyversions/mayan-edms.svg
[python-url]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
[license]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
[license-url]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
<div align="center">
<a href="http://www.mayan-edms.com">
<img width="200" heigth="200" src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png">
</a>
<br>
<br>
<p>
Mayan EDMS is a document management system. Its main purpose is to store,
introspect, and categorize files, with a strong emphasis on preserving the
contextual and business information of documents. It can also OCR, preview,
label, sign, send, and receive thoses files. Other features of interest
are its workflow system, role based access control, and REST API.
<p>
<p align="center">
<img src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif">
</p>
</div>
<h2 align="center">Installation</h2>
The installation procedure uses the <a href="https://www.docker.com">Docker container manager (docker.com)</a>. Make sure Docker is properly installed and working before attempting to install Mayan EDMS.
Step 1- Initialize the installation
```bash
docker run --rm -v mayan_media:/var/lib/mayan \
-v mayan_settings:/etc/mayan mayanedms/mayanedms mayan:init
```
Step 2- Deploy a container
```bash
docker run -d --name mayan-edms --restart=always -p 80:80 \
-v mayan_media:/var/lib/mayan -v mayan_settings:/etc/mayan mayanedms/mayanedms
```
Step 3- Open a browser and go to http://localhost
<h2 align="center">Important links</h2>
- [Homepage](http://www.mayan-edms.com)
- [Videos](https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw)
- [Documentation](http://mayan.readthedocs.io/en/stable/)
- [Paid support](http://www.mayan-edms.com/providers/)
- [Roadmap](https://gitlab.com/mayan-edms/mayan-edms/wikis/roadmap)
- [Contributing](https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md)
- [Community forum](https://groups.google.com/forum/#!forum/mayan-edms)
- [Community forum archive](http://mayan-edms.1003.x6.nabble.com/)
- [Source code, issues, bugs](https://gitlab.com/mayan-edms/mayan-edms)
- [Plug-ins, other related projects](https://gitlab.com/mayan-edms/)
- [Translations](https://www.transifex.com/rosarior/mayan-edms/)

View File

@@ -1,65 +0,0 @@
|PyPI badge| |Build Status| |Coverage badge| |Documentation| |License badge| |Python version|
|Logo|
Description
-----------
Free Open Source Electronic Document Management System.
`Website`_
`Video demostration`_
`Documentation`_
`Translations`_
`Mailing list (via Google Groups)`_
|Animation|
License
-------
This project is open sourced under `Apache 2.0 License`_.
Installation
------------
To install Mayan EDMS, simply do:
.. code-block:: bash
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install mayan-edms
(venv) $ mayan-edms.py initialsetup
(venv) $ mayan-edms.py runserver
Point your browser to 127.0.0.1:8000 and use the automatically created admin
account.
.. _Website: http://www.mayan-edms.com
.. _Video demostration: http://bit.ly/pADNXv
.. _Documentation: http://readthedocs.org/docs/mayan/en/latest/
.. _Translations: https://www.transifex.com/projects/p/mayan-edms/
.. _Mailing list (via Google Groups): http://groups.google.com/group/mayan-edms
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
.. |Build Status| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
:target: https://gitlab.com/mayan-edms/mayan-edms/commits/master
.. |Logo| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
:target: http://badge.fury.io/py/mayan-edms
.. |License badge| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
.. |Analytics| image:: https://ga-beacon.appspot.com/UA-52965619-2/mayan-edms/readme?pixel
.. |Coverage badge| image:: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
:target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
.. |Documentation| image:: https://readthedocs.org/projects/mayan/badge/?version=latest
:target: http://mayan.readthedocs.io/en/latest
.. |Python version| images:: https://img.shields.io/pypi/pyversions/mayan-edms.svg
|Analytics|

View File

@@ -5,10 +5,10 @@ import optparse
import sh
APP_LIST = (
'acls', 'appearance', 'authentication', 'checkouts', 'common',
'acls', 'appearance', 'authentication', 'cabinets', 'checkouts', 'common',
'converter', 'django_gpg', 'document_comments', 'document_indexing',
'document_signatures', 'document_states', 'documents', 'dynamic_search',
'events', 'folders', 'installation', 'linking', 'lock_manager', 'mailer',
'events', 'folders', 'linking', 'lock_manager', 'mailer',
'metadata', 'mirroring', 'motd', 'navigation', 'ocr', 'permissions',
'rest_api', 'smart_settings', 'sources', 'statistics', 'storage', 'tags',
'user_management'

75
docs/releases/2.1.10.rst Normal file
View File

@@ -0,0 +1,75 @@
================================
Mayan EDMS v2.1.10 release notes
================================
Released: February 13, 2017
What's new
==========
This is a micro release equal to the previews version from the user's point of view.
The version number was increase to workaround some issues with the Python
Package Index not allowing re-uploads.
Changes
-------------
- Update Makefile to use twine for releases.
- Add Makefile target to make test releases.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

94
docs/releases/2.1.11.rst Normal file
View File

@@ -0,0 +1,94 @@
================================
Mayan EDMS v2.1.11 release notes
================================
Released: March 14, 2017
What's new
==========
This is a bug-fix release and all users are encouraged to upgrade. The focus
of this micro release was REST API improvement.
Changes
-------------
- Added a quick rename serializer to the document type API serializer.
- Added per document type, workflow list API view. The URL for this endpoint is
GET /api/document_states/document_type/{pk}/workflows/
- Added Developer Certificate of Origin. Mayan EDMS was adopted a version 1.1 of
the Linux Foundation Developer Certificate of Origin. All commits must be
signed (`git commit -s`) in order to be merged.
- Added the detail url of a permission in the permission serializer.
- Added endpoints for the ACL app API.
- Implemented document workflows transition ACLs. GitLab issue #321.
- Add document comments API endpoints. GitHub issue #249.
- Add support for overriding the Celery class. The setting is named
MAYAN_CELERY_CLASS and expects a dotted python path to the class to use.
- Changed the document upload view in source app to not use the HTTP referer
URL blindly, but instead recompose the URL using known view name. Needed
when integrating Mayan EDMS into other app via using iframes.
- Addes size field to the document version serializer.
- Removed the serializer from the deleted document restore API endpoint
it doesn't need a serializer being just an action POST endpoint.
- Added support for adding or editing document types to smart links via the
API.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `Github issue #249 <https://github.com/mayan-edms/mayan-edms/issues/249>`_ Add document comments API [$50 US]
* `GitLab issue #321 <https://gitlab.com/mayan-edms/mayan-edms/issues/321>`_ Transition ACLS
* `GitLab issue #357 <https://gitlab.com/mayan-edms/mayan-edms/issues/357>`_ It should be possible to retrieve all workflows for a given DocumentType from the API
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

83
docs/releases/2.1.8.rst Normal file
View File

@@ -0,0 +1,83 @@
===============================
Mayan EDMS v2.1.8 release notes
===============================
Released: February 12, 2017
What's new
==========
This is a bug-fix release and all users are encouraged to upgrade. The focus
of this micro release was REST API improvement.
Changes
-------------
- Fixes in the trashed document API endpoints.
- Improved tags API PUT and PATCH endpoints.
- Bulk document adding when creating and editing tags.
- The version of django-mptt is preserved in case mayan-cabinets is installed.
- Add Django GPG API endpoints for singing keys.
- Add API endpoints for the document states app.
- Add API endpoints for the messsage of the day (MOTD) app.
- Add Smart link API endpoints.
- Add writable versions of the Document and Document Type serializers (GitLab issues #348 and #349).
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `GitLab issue #310 <https://gitlab.com/mayan-edms/mayan-edms/issues/310>`_ Metadata's lookup with chinese messages when new document
* `GitLab issue #348 <https://gitlab.com/mayan-edms/mayan-edms/issues/348>`_ REST API: Document version comments are not getting updated
* `GitLab issue #349 <https://gitlab.com/mayan-edms/mayan-edms/issues/349>`_ REST API: Document Label, Description are not able to update
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

74
docs/releases/2.1.9.rst Normal file
View File

@@ -0,0 +1,74 @@
===============================
Mayan EDMS v2.1.9 release notes
===============================
Released: February 13, 2017
What's new
==========
This is a micro release equal to the previews version from the user's point of view.
The version number was increase to workaround some issues with the Python
Package Index not allowing re-uploads.
Changes
-------------
- Update make file to Workaround long standing pypa wheel bug #99
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -2,32 +2,160 @@
Mayan EDMS v2.2 release notes
=============================
Released: XX, 2017
Released: April 26, 2017
What's new
==========
API changes
-----------
Refactor of the metadata API URLs to use the resource/sub resource paradigm.
Before:
/api/metadata/metadata_types/
/api/metadata/metadata_types/{pk}/
/api/metadata/document/metadata/{pk}/
/api/metadata/document/{pk}/metadata/
/api/metadata/document_type/{document_type_pk}/metadata_types/optional/
/api/metadata/document_type/{document_type_pk}/metadata_types/required/
After:
/api/metadata/metadata_types/
/api/metadata/metadata_types/{metadata_type_pk}/
/api/metadata/document_types/{document_type_pk}/metadata_types/
/api/metadata/document_types/{document_type_pk}/metadata_types/{metadata_type_pk}/
/api/metadata/documents/{document_pk}/metadata/
/api/metadata/documents/{document_pk}/metadata/{metadata_pk}/
Document API URLs updated to use the resource/sub resource paradigm.
Before:
/api/documents/document_version<pk>
/api/documents/document_pages<pk>
After:
/api/documents/<pk>/version/<version_pk>
/api/documents/<pk>/version/<version_pk>/pages/<page_pk>
Fields that reference a resource by URL now have the suffix '_url' to differentiate
then from fields include the resource.
Before:
'document': '/api/documents/10'
After:
'document_url': '/api/documents/10'
Removal of the document version revert API endpoint. To revert a document to a
previous version using the API, use the DELETE verb to delete the most recent
document version to be discarded.
Pages data is no longer included as part of the version data. Instead a link to
the document version's pages has been added by the name 'pages_url'. This
resolved to '/api/documents/<pk>/pages/<page_pk>/pages'.
- New API endpoints (initial work by @lokeshmanmode):
- API endpoint to change an user's groups subscription.
- API endpoint that list all available permissions types.
- API endpoint to view or change a role's groups.
- API endpoint to view or change a role's permissions.
Code cleanups
-------------
As with every release time was dedicated to improve the organization, size, and
readability of code. To this end the licenses of each app were moved to their
own module in every app, called licenses.py. As part of the code cleanup the
seldom used app called 'installation' which tracked runtime Python packages
installed alongside Mayan EDMS for debugging purposes has been removed. The
dependency on django-filetransfer has been removed by using
django-downloadviews which allows the creation of class based download views.
Performance
-----------
The document language list has been moved from the document model to the
document form. This change speeds up loading time, document properties views
and API documentation views. This version includes the new image caching
pipeline which stores transformed (rotated, scaled, etc) versions of the
document's images resulting in an overall display loading speed up. The fonts
used are now loaded from Mayan EDMS itself and not from the web. This change
also allow Mayan EDMS to work in a completely off-line manner.
Searching
---------
Support for searching pages as well as documents has been added. This
functionality has been exposed in the API too.
Security
--------
This release enables the password validation for the user password validation
support provided by Django. This change allows administrator to set password
policies limiting the minimum amount of characters needed for example. For
more information on how to configure the password validation feature refer
to Django's documentation at: https://docs.djangoproject.com/en/1.11/topics/auth/passwords/#enabling-password-validation
Sources
-------
To help test the interval sources (POP3 Email, IMAP Email, Watch folders) a
"Check now" button was added that allows users to trigger the source's
document fetching code instantly. Previously users had to wait until the next
scheduled interval to verify if their source's settings were correct.
Testing
-------
The testing process has been simplified by adding a new option '--mayan-apps'
to the test runner that automatically tests all Mayan EDMS apps that report to
include tests. The app flag that indicates when an app has test was changed
from 'test' to the more explicit 'has_test'. The packaging manifest now
includes test files, this means that tests can now be executed in production.
The total number of tests was raised to 359 and the total coverage increased
to 81%.
A custom test runner replacing the previous custom management command
called `runtests`. Testing for orphaned temporary files and orphaned file
handles is now optional and controlled by the COMMON_TEST_FILE_HANDLES and
COMMON_TEST_FILE_HANDLES settings.
User interface
--------------
To avoid warping on long full names or usernames, the user's full name or
username is no longer displayed in the main menu. Instead the word "Profile"
is displayed and the users's full name or username is displayed when the
"Profile" icon is clicked. Drop down menus support has been added and enabled
for several apps like documents, folders, and tags. This change make navigation
much faster and required less mouse travel.
Support was added for a dashboard widgets and several default widgets are
included and enabled.
A view to clone a document page transformation to other pages has been added.
A document page transformation navigation bug has been fixed. To aid visual
lookup, tags are now alphabetically ordered by label.
A new workflow view that lists documents currently executing a workflow and
documents by their specific current workflow state has been added to the
main menu.
Other changes
-------------
- Remove the installation app
- Add support for page search
- Remove recent searches feature
- Remove dependency on the django-filetransfer library
- Fix height calculation in resize transformation
- Improve upgrade instructions
- New image caching pipeline
- New drop down menus for the documents, folders and tags app as well as for
the user links
- Dashboard
- Moved licenses to their own module in every app
- Update project to work with Django 1.10.4
- Tags are alphabetically ordered by label
- Stop loading theme fonts from the web
- Cabinets app is now integrated as a core app.
- Now that the Cabinets app is included, the Folders app has been disabled
by default. To enable the Folders apps add the following line to your
settings/local.py file::
INSTALLED_APPS += ('folders',)
- Fix height calculation in resize transformation.
- Improve upgrade instructions.
- Update project to work with Django 1.10.
- Add support for attaching multiple tags to single or multiple documents.
- Refactor the workflow for removing tags from single and multiple documents.
- Move new version creation blocking from the documents app to the checkouts app.
- Sample documents moved to distribution to allow running all tests in production.
- DEBUG now defaults to False.
- Production settings don't override the DEBUG variable. DEBUG can be set to True
on production install to debug errors live.
@@ -38,20 +166,7 @@ Other changes
- Addition of a new OCR backend using PyOCR. This backend tries first to do OCR
using libtesseract. If libtesseract is not available the backend defaults to
calling the Tesseract executable.
- Language list moved from document model to document form.
- Enable password validation for the user password change view, user password change API endpoint, current user view and current user API endpoint.
- New API endpoints (initial work by @lokeshmanmode):
- API endpoint to change an user's groups subscription.
- API endpoint that list all available permissions types.
- API endpoint to view or change a role's groups.
- API endpoint to view or change a role's permissions.
- Make the lock_manager.backends.file_lock.FileLock the new default locking backend.
- Add view to clone a document page transformation to other pages.
- Document page transformation navigation bug fixed.
- Move test total to 359.
- Increase test coverage to 81%.
- New transformations added:
- Rotate 90 degrees
@@ -62,11 +177,15 @@ Other changes
- Gaussian blur
- Unsharp masking
- Add tool to launch all workflows. GitLab issue #355
Removals
--------
- Removal of the OCR_TESSERACT_PATH configuration setting.
- Removal of the Tesseract OCR backend. Replaced with a PyOCR backend.
- Remove usage of pytesseract Python library.
- Installation app.
- Recent searches feature.
Upgrading from a previous version
---------------------------------
@@ -95,13 +214,13 @@ Manually upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Remove deprecated requirements::
$ pip uninstall -y -r removals.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
@@ -134,5 +253,6 @@ Bugs fixed or issues closed
* `GitLab issue #328 <https://gitlab.com/mayan-edms/mayan-edms/issues/328>`_ Upgrade Warning/Error during performupgrade (v2.1.3 to v2.1.4)
* `GitLab issue #342 <https://gitlab.com/mayan-edms/mayan-edms/issues/342>`_ Tags should be of unordered / unsorted data type
* `GitLab issue #343 <https://gitlab.com/mayan-edms/mayan-edms/issues/343>`_ Bootstrap's dependency on fonts.googleapis.com causes Mayan EDMS web interface load slowly if public internet is unreachable
* `GitLab issue #355 <https://gitlab.com/mayan-edms/mayan-edms/issues/355>`_ Workflow changes only on new added documents
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

81
docs/releases/3.0.rst Normal file
View File

@@ -0,0 +1,81 @@
=============================
Mayan EDMS v3.0 release notes
=============================
Released: XX XX, 2017
What's new
==========
Other changes
-------------
- Metadat widget appearance changes
- Content windows appearance changes
- Add new document's version list view permission
- Resource based API endpoints
- SANE scanner document source
Removals
--------
- None
Upgrading from a previous version
---------------------------------
If installed via PIP
~~~~~~~~~~~~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
If installed using Git
~~~~~~~~~~~~~~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Manually upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Remove deprecated requirements::
$ pip uninstall -y -r removals.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `GitLab issue #366 <https://gitlab.com/mayan-edms/mayan-edms/issues/366>`_ Proofread documentation
* `GitLab issue #379 <https://gitlab.com/mayan-edms/mayan-edms/issues/379>`_ Add new document version list view permission.
* `GitLab issue #379 <https://gitlab.com/mayan-edms/mayan-edms/issues/379>`_ Add new document version list view permission.
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -23,6 +23,10 @@ versions of the documentation contain the release notes for any later releases.
:maxdepth: 1
2.2
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5

View File

@@ -3,7 +3,8 @@ Advanced deployment
===================
Mayan EDMS should be deployed like any other Django_ project and
preferably using virtualenv_.
preferably using virtualenv_. Below are some ways to deploy and use Mayan EDMS.
Do not use more than one method.
Being a Django_ and a Python_ project, familiarity with these technologies is
recommended to better understand why Mayan EDMS does some of the things it
@@ -58,7 +59,7 @@ to /usr/bin/ with ...
sudo ln -s /opt/local/bin/tesseract /usr/bin/tesseract
... alternatively set the paths in the ``settings/locals.py``
Alternatively, set the paths in the ``settings/locals.py``
.. code-block:: python
@@ -76,9 +77,9 @@ With Homebrew installed run the command:
Set the Binary paths
********************
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs
so either you can symlink the binaries installed via brew in /usr/local/bin/
to /usr/bin/ with ...
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs.
You can symlink the binaries installed via brew in /usr/local/bin/
to /usr/bin/ with:
.. code-block:: bash
@@ -87,7 +88,7 @@ to /usr/bin/ with ...
sudo ln -s /usr/local/bin/pdftotext /usr/bin/pdftotext && \
sudo ln -s /usr/local/bin/gs /usr/bin/gs
... alternatively set the paths in the ``settings/locals.py``
Alternatively, set the paths in the ``settings/locals.py``
.. code-block:: python
@@ -265,15 +266,18 @@ Make the installation directory readable and writable by the webserver user::
chown www-data:www-data /usr/share/mayan-edms -R
Restart the services::
Enable and restart the services [1_]::
systemctl enable supervisor
systemctl restart supervisor
systemctl restart nginx
[1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740
.. _Debian: http://www.debian.org/
.. _Django: http://www.djangoproject.com/
.. _Python: http://www.python.org/
.. _SQLite: https://www.sqlite.org/
.. _Ubuntu: http://www.ubuntu.com/
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html
.. _1: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740

View File

@@ -16,8 +16,8 @@ request on GitLab_.
Project philosophies
--------------------
How to think about Mayan EDMS when doing changes or adding new features,
why things are the way they are in Mayan EDMS.
How to think about Mayan EDMS when doing changes or adding new features;
why things are the way they are in Mayan EDMS:
- Functionality must be as market/sector independent as possible, code for the
95% of use cases.
@@ -36,7 +36,7 @@ why things are the way they are in Mayan EDMS.
not viable/mature/efficient.
- Each app is as independent and self contained as possible. Exceptions, the
basic requirements: navigation, permissions, common, main.
- If an app is meant to be used by more than one other app it should be as
- If an app is meant to be used by more than one other app, it should be as
generic as possible in regard to the project and another app will bridge the functionality.
- Example: since indexing (document_indexing) only applies to documents, the
@@ -48,7 +48,7 @@ Coding conventions
Follow PEP8
~~~~~~~~~~~
Whenever possible, but don't obsess over things like line length.
Whenever possible, but don't obsess over things like line length:
.. code-block:: bash
@@ -103,9 +103,9 @@ Example:
)
from .models import Index, IndexInstanceNode, DocumentRenameCount
All local app module imports are in relative form, local app module name is to
All local app module imports are in relative form. Local app module name is to
be referenced as little as possible, unless required by a specific feature,
trick, restriction, ie: Runtime modification of the module's attributes.
trick, restriction (e.g., Runtime modification of the module's attributes).
Incorrect:
@@ -128,7 +128,7 @@ Dependencies
Mayan EDMS apps follow a hierarchical model of dependency. Apps import from
their parents or siblings, never from their children. Think plugins. A parent
app must never assume anything about a possible existing child app. The
documents app and the Document model are the basic entities they must never
documents app and the Document model are the basic entities; they must never
import anything else. The common and main apps are the base apps.
@@ -423,3 +423,16 @@ Wheel package
$ pip install <path of the Git repository>/dist/mayan_edms-x.y.z-py2-none-any.whl
$ mayan-edms.py initialsetup
$ mayan-edms.py runserver
Version numbering
~~~~~~~~~~~~~~~~~
Mayan EDMS uses the Semantic Versioning (http://semver.org/) method to choose
version numbers along with Python's PEP-0440 (https://www.python.org/dev/peps/pep-0440/)
to format them.
X.YaN # Alpha release
X.YbN # Beta release
X.YrcN # Release Candidate
X.Y # Final release

View File

@@ -30,7 +30,7 @@ Features
* Dynamic default values for metadata.
* Metadata fields can have an initial value, which can be static or determined
by an user provided template code snippet.
by a template code snippet provided by the user.
* Documents can be uploaded from different sources.
@@ -68,7 +68,7 @@ Features
* Multi page document support.
* Multiple page PDFs and TIFFs files are supported.
* Multiple page PDF and TIFF files are supported.
* Automatic OCR processing.

View File

@@ -2,21 +2,20 @@
Transformations
===============
Transformation are persistent manipulations to the previews of the stored
documents. For example: a scanning equipment may only produce landscape PDFs.
In this case an useful transformation for that document source would be to
rotate all documents scanned by 270 degrees after being uploaded, this way
whenever a document is uploaded from that scanner it will appear in portrait
orientation. In this case add a this transformation to the Mayan EDMS source
that is connected to that device this way all pages scanned via that source
with inherit the transformation as they are created.
Transformations are persistent manipulations to the previews of the stored
documents. For example: a scanning equipment may only produce landscape PDFs.
In this case a useful transformation for that document source would be to rotate
all scanned documents by 270 degrees after being uploaded. By adding this
transformation to the Mayan EDMS source that is connected to the scanner, all
pages scanned via that source will inherit the transformation as they are
created. The result is that whenever a document is uploaded from that scanner,
it will appear in portrait orientation, instead of landscape orientation.
Transformations can also be added to existing documents, by clicking on a
document's page, then clicking on "transformations". In this view the Actions
menu will have a new option that reads "Create new transformation". At the
moment the rotation, zoom, crop, and resize transformations are available.
Once the document image has been corrected resubmit it for OCR for improved
results.
Transformations can also be added to existing documents by clicking on a
document's page and then clicking on "transformations". In this view the Actions
menu will have a new option that reads "Create new transformation". Currently,
the available transformations are: rotation, zoom, crop, and resize. Once the
document image has been corrected, resubmit it for OCR for improved results.
Transformations are not destructive and do not physically modify the document
Transformations are not destructive and do not physically modify the document
file, they just modify the document's graphical representation.

View File

@@ -1,8 +1,8 @@
from __future__ import unicode_literals
__title__ = 'Mayan EDMS'
__version__ = '2.1.7'
__build__ = 0x020107
__version__ = '2.2'
__build__ = 0x020200
__author__ = 'Roberto Rosario'
__author_email__ = 'roberto.rosario@mayan-edms.com'
__description__ = 'Free Open Source Electronic Document Management System'

View File

@@ -0,0 +1,250 @@
from __future__ import absolute_import, unicode_literals
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.shortcuts import get_object_or_404
from rest_framework import generics
from permissions import Permission
from .models import AccessControlList
from .permissions import permission_acl_edit, permission_acl_view
from .serializers import (
AccessControlListPermissionSerializer, AccessControlListSerializer,
WritableAccessControlListPermissionSerializer,
WritableAccessControlListSerializer
)
class APIObjectACLListView(generics.ListCreateAPIView):
def get(self, *args, **kwargs):
"""
Returns a list of all the object's access control lists
"""
return super(APIObjectACLListView, self).get(*args, **kwargs)
def get_content_object(self):
content_type = get_object_or_404(
ContentType, app_label=self.kwargs['app_label'],
model=self.kwargs['model']
)
content_object = get_object_or_404(
content_type.model_class(), pk=self.kwargs['object_pk']
)
if self.request.method == 'GET':
permission_required = permission_acl_view
else:
permission_required = permission_acl_edit
try:
Permission.check_permissions(
self.request.user, permissions=(permission_required,)
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_required, self.request.user, content_object
)
return content_object
def get_queryset(self):
return self.get_content_object().acls.all()
def get_serializer_context(self):
"""
Extra context provided to the serializer class.
"""
return {
'content_object': self.get_content_object(),
'format': self.format_kwarg,
'request': self.request,
'view': self
}
def get_serializer_class(self):
if self.request.method == 'GET':
return AccessControlListSerializer
else:
return WritableAccessControlListSerializer
def post(self, *args, **kwargs):
"""
Create a new access control list for the selected object.
"""
return super(APIObjectACLListView, self).post(*args, **kwargs)
class APIObjectACLView(generics.RetrieveDestroyAPIView):
serializer_class = AccessControlListSerializer
def delete(self, *args, **kwargs):
"""
Delete the selected access control list.
"""
return super(APIObjectACLView, self).delete(*args, **kwargs)
def get(self, *args, **kwargs):
"""
Returns the details of the selected access control list.
"""
return super(APIObjectACLView, self).get(*args, **kwargs)
def get_content_object(self):
if self.request.method == 'GET':
permission_required = permission_acl_view
else:
permission_required = permission_acl_edit
content_type = get_object_or_404(
ContentType, app_label=self.kwargs['app_label'],
model=self.kwargs['model']
)
content_object = get_object_or_404(
content_type.model_class(), pk=self.kwargs['object_pk']
)
try:
Permission.check_permissions(
self.request.user, permissions=(permission_required,)
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_required, self.request.user, content_object
)
return content_object
def get_queryset(self):
return self.get_content_object().acls.all()
class APIObjectACLPermissionListView(generics.ListCreateAPIView):
def get(self, *args, **kwargs):
"""
Returns the access control list permission list.
"""
return super(
APIObjectACLPermissionListView, self
).get(*args, **kwargs)
def get_acl(self):
return get_object_or_404(
self.get_content_object().acls, pk=self.kwargs['pk']
)
def get_content_object(self):
content_type = get_object_or_404(
ContentType, app_label=self.kwargs['app_label'],
model=self.kwargs['model']
)
content_object = get_object_or_404(
content_type.model_class(), pk=self.kwargs['object_pk']
)
try:
Permission.check_permissions(
self.request.user, permissions=(permission_acl_view,)
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_acl_view, self.request.user, content_object
)
return content_object
def get_queryset(self):
return self.get_acl().permissions.all()
def get_serializer_class(self):
if self.request.method == 'GET':
return AccessControlListPermissionSerializer
else:
return WritableAccessControlListPermissionSerializer
def get_serializer_context(self):
return {
'acl': self.get_acl(),
'format': self.format_kwarg,
'request': self.request,
'view': self
}
def post(self, *args, **kwargs):
"""
Add a new permission to the selected access control list.
"""
return super(
APIObjectACLPermissionListView, self
).post(*args, **kwargs)
class APIObjectACLPermissionView(generics.RetrieveDestroyAPIView):
lookup_url_kwarg = 'permission_pk'
serializer_class = AccessControlListPermissionSerializer
def delete(self, *args, **kwargs):
"""
Remove the permission from the selected access control list.
"""
return super(
APIObjectACLPermissionView, self
).delete(*args, **kwargs)
def get(self, *args, **kwargs):
"""
Returns the details of the selected access control list permission.
"""
return super(
APIObjectACLPermissionView, self
).get(*args, **kwargs)
def get_acl(self):
return get_object_or_404(
self.get_content_object().acls, pk=self.kwargs['pk']
)
def get_content_object(self):
content_type = get_object_or_404(
ContentType, app_label=self.kwargs['app_label'],
model=self.kwargs['model']
)
content_object = get_object_or_404(
content_type.model_class(), pk=self.kwargs['object_pk']
)
try:
Permission.check_permissions(
self.request.user, permissions=(permission_acl_view,)
)
except PermissionDenied:
AccessControlList.objects.check_access(
permission_acl_view, self.request.user, content_object
)
return content_object
def get_queryset(self):
return self.get_acl().permissions.all()
def get_serializer_context(self):
return {
'acl': self.get_acl(),
'format': self.format_kwarg,
'request': self.request,
'view': self
}

View File

@@ -4,18 +4,21 @@ from django.utils.translation import ugettext_lazy as _
from common import MayanAppConfig, menu_object, menu_sidebar
from navigation import SourceColumn
from rest_api.classes import APIEndPoint
from .links import link_acl_create, link_acl_delete, link_acl_permissions
class ACLsApp(MayanAppConfig):
has_tests = True
name = 'acls'
test = True
verbose_name = _('ACLs')
def ready(self):
super(ACLsApp, self).ready()
APIEndPoint(app=self, version_string='1')
AccessControlList = self.get_model('AccessControlList')
SourceColumn(

View File

@@ -14,10 +14,18 @@ class ModelPermission(object):
@classmethod
def register(cls, model, permissions):
from django.contrib.contenttypes.fields import GenericRelation
cls._registry.setdefault(model, [])
for permission in permissions:
cls._registry[model].append(permission)
AccessControlList = apps.get_model(
app_label='acls', model_name='AccessControlList'
)
model.add_to_class('acls', GenericRelation(AccessControlList))
@classmethod
def get_for_instance(cls, instance):
StoredPermission = apps.get_model(
@@ -36,7 +44,9 @@ class ModelPermission(object):
if proxy:
permissions.extend(cls._registry.get(proxy))
pks = [permission.stored_permission.pk for permission in set(permissions)]
pks = [
permission.stored_permission.pk for permission in set(permissions)
]
return StoredPermission.objects.filter(pk__in=pks)
@classmethod

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "الصلاحيات"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Insufficient access."
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "لا شيء"
@@ -74,36 +74,67 @@ msgstr "Edit ACLs"
msgid "View ACLs"
msgstr "View ACLs"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Разрешения"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Недостатъчен достъп."
@@ -52,13 +52,13 @@ msgstr "достъп вписване"
msgid "Access entries"
msgstr "достъп вписвания"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Няма"
@@ -74,36 +74,67 @@ msgstr "Редактиране на контролни списъци за до
msgid "View ACLs"
msgstr "Преглед на контролни списъци за достъп"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: bs_BA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Dozvole"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Nedovoljne dozvole."
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Nijedno"
@@ -74,36 +74,67 @@ msgstr "Izmjeniti ACLs"
msgid "View ACLs"
msgstr "Pregledati ACLs"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr ""
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Ingen"
@@ -74,36 +74,67 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -5,14 +5,15 @@
# Translators:
# Translators:
# Berny <berny@bernhard-marx.de>, 2015
# Jesaja Everling <jeverling@gmail.com>, 2017
# Tobias Paepke <tobias.paepke@paepke.net>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-31 18:56+0000\n"
"Last-Translator: Tobias Paepke <tobias.paepke@paepke.net>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-24 23:10+0000\n"
"Last-Translator: Jesaja Everling <jeverling@gmail.com>\n"
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,29 +21,29 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "Zugriffsberechtigungen"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Berechtigungen"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rolle"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Löschen"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Neue Berechtigung"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Fehlende Berechtigung"
@@ -54,13 +55,13 @@ msgstr "Berechtigungseintrag"
msgid "Access entries"
msgstr "Berechtigungseinträge"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Berechtigungen \"%(permissions)s\" zur Rolle \"%(role)s\" für \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Keine"
@@ -76,36 +77,67 @@ msgstr "Zugriffsberechtigungen bearbeiten"
msgid "View ACLs"
msgstr "Zugriffsberechtigungen anzeigen"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "API URL für die Liste der Berechtigungen dieser ACL"
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL für die Berechtigung in Relation zur ACL zu der sie zugeordnet ist. Diese URL unterscheidet sich von der normalen Workflow URL."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Primary key der zur ACL hinzuzufügenden Berechtigung."
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr "Keine solche Berechtigung: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Durch Komma getrennte Liste von Primary Keys der zu dieser ACL hinzuzufügenden Berechtigungen."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Primary Key der Rolle die dieser ACL zugeordnet ist."
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Neue Zugriffsberechtigung für %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "ACL \"%s\" löschen"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Zugriffsberechtigungen für %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Verfügbare Berechtigungen"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Erteilte Berechtigungen"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
@@ -224,8 +256,5 @@ msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererb
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
@@ -18,32 +18,32 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
#, fuzzy
msgid "Permissions"
msgstr "permissions"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#, fuzzy
#| msgid "Roles"
msgid "Role"
msgstr "Roles"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#, fuzzy
#| msgid "View ACLs"
msgid "New ACL"
msgstr "View ACLs"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Insufficient access."
@@ -57,13 +57,13 @@ msgstr "access entry"
msgid "Access entries"
msgstr "access entries"
#: models.py:48
#: models.py:49
#, fuzzy, python-format
#| msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
#: models.py:64
#: models.py:66
msgid "None"
msgstr ""
@@ -79,38 +79,69 @@ msgstr "Edit ACLs"
msgid "View ACLs"
msgstr "View ACLs"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, fuzzy, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr "permission"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, fuzzy, python-format
msgid "New access control lists for: %s"
msgstr "access control lists for: %s"
#: views.py:109
#: views.py:100
#, fuzzy, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Default ACLs"
#: views.py:151
#: views.py:138
#, fuzzy, python-format
msgid "Access control lists for: %s"
msgstr "access control lists for: %s"
#: views.py:162
#: views.py:150
#, fuzzy
msgid "Available permissions"
msgstr "has permission"
#: views.py:163
#: views.py:151
#, fuzzy
msgid "Granted permissions"
msgstr "has permission"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -247,8 +278,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -11,8 +11,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:38+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-23 03:03+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -21,29 +21,29 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "LCAs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permisos"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rol"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Borrar"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nueva LCA"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Acceso insuficiente."
@@ -55,13 +55,13 @@ msgstr "Entrada de acceso"
msgid "Access entries"
msgstr "Entradas de acceso"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Permisos \"%(permissions)s\" para el rol \"%(role)s\" para \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Ninguno"
@@ -77,36 +77,67 @@ msgstr "Editar LCAs"
msgid "View ACLs"
msgstr "Ver LCAs"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr "No existe el permiso: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nueva lista de control de acceso para: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Borrar LCA: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Listas de control de acceso para: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Permisos disponibles"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Permisos otorgados"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Los permisos inactivos se heredan de un objeto precedente."
@@ -225,8 +256,5 @@ msgstr "Los permisos inactivos se heredan de un objeto precedente."
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "مجوزها"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "نقش"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "حذف"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "دسترسی ناکافی"
@@ -52,13 +52,13 @@ msgstr "ورودی دسترسی"
msgid "Access entries"
msgstr "ورودیهای دسترسی"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "هیچکدام."
@@ -74,36 +74,67 @@ msgstr "ویرایش دسترسی ها"
msgid "View ACLs"
msgstr "دیدن دسترسی ها"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "لیست کنترل دسترسی ها برای : %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -4,13 +4,14 @@
#
# Translators:
# Translators:
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2016
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n"
"MIME-Version: 1.0\n"
@@ -19,29 +20,29 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "Droits"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permissions"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rôle"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Suppression"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nouveau droit"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "droit d'accès insuffisant."
@@ -53,13 +54,13 @@ msgstr "Entrée d'accès"
msgid "Access entries"
msgstr "Entrées d'accès"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
msgstr "Permissions \"%(permissions)s\" du rôle \"%(role)s\" pour \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Aucun"
@@ -75,36 +76,67 @@ msgstr "Editer les droits"
msgid "View ACLs"
msgstr "voir les droits d'accès"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nouvelle liste de contrôle d'accès pour: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Supprimer le droit: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Liste des contrôle d'accès pour: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Permissions disponibles"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Permissions autorisées"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permission du rôle \"%(role)s\" pour \"%(object)s\"@"
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "La désactivation de permission est hérité de l'objet parent"
@@ -223,8 +255,5 @@ msgstr "La désactivation de permission est hérité de l'objet parent"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACL-ek"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr ""
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Semmi"
@@ -74,36 +74,67 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr ""
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr ""
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr ""
@@ -74,36 +74,67 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-30 21:18+0000\n"
"Last-Translator: Marco Camplese <marco.camplese.mc@gmail.com>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,29 +19,29 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permessi"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Ruolo"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Cancella"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nuova ACL"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Accesso insufficiente."
@@ -53,13 +53,13 @@ msgstr "Voce di accesso"
msgid "Access entries"
msgstr "Voci di accesso"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Permessi \"%(permissions)s\" del ruolo \"%(role)s\" per \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Nessuna "
@@ -75,36 +75,67 @@ msgstr "Modifica ACL"
msgid "View ACLs"
msgstr "Visualizza ACL"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nuova lista di controllo accesso per: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Cancella ACL: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Lista dei permessi d'accesso per: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Autorizzazioni disponibili "
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Autorizzazioni concesse "
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
@@ -223,8 +254,5 @@ msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -10,9 +10,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 12:43+0000\n"
"Last-Translator: Evelijn Saaltink <evelijnsaaltink@gmail.com>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,29 +20,29 @@ msgstr ""
"Language: nl_NL\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "Authorisatielijsten"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permissies"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Gebruikersrol"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Verwijder"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nieuwe authorisatielijst"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Permissie is ontoereikend"
@@ -54,13 +54,13 @@ msgstr "Authorisatie invoer"
msgid "Access entries"
msgstr "Authorisaties invoer"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Permissies \"%(permissions)s\" voor gebruikersrol \"%(role)s\" voor \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Geen"
@@ -76,36 +76,67 @@ msgstr "Bewerk authorisatielijsten"
msgid "View ACLs"
msgstr "Bekijk authorisatielijsten"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nieuwe authorisatielijsten voor: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Verwijder authorisatielijst: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Authorisatielijsten voor: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Beschikbare permissies"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Toegekende permissies"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Rol \"%(role)s\" permissies voor \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
@@ -224,8 +255,5 @@ msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -9,39 +9,39 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>=14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "Listy ACL"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Uprawnienia"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rola"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Usuń"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nowa lista ACL"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Niewystarczający dostęp."
@@ -53,13 +53,13 @@ msgstr "Zgłoszenie dostępu"
msgid "Access entries"
msgstr "Zgłoszenia dostępu"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Brak"
@@ -75,36 +75,67 @@ msgstr "Edytuj listy ACL"
msgid "View ACLs"
msgstr "Przeglądaj listy ACL"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nowe listy ACL dla: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Usuń listę ACL: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Listy ACL dla: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Dostępne uprawnienia"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Przyznane uprawnienia"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Uprawnienia roli \"%(role)s\" dla obiektu \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
@@ -223,8 +254,5 @@ msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACL's"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permissões"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Eliminar"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Acesso insuficiente."
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Nenhum"
@@ -74,36 +74,67 @@ msgstr "Editar ACL's"
msgid "View ACLs"
msgstr "Ver ACL's"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -9,9 +9,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-11-17 22:31+0000\n"
"Last-Translator: Aline Freitas <aline@alinefreitas.com.br>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,29 +19,29 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permissões"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Regras"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Excluir"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nova ACL"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Acesso insuficiente."
@@ -53,13 +53,13 @@ msgstr "Acesso entrada"
msgid "Access entries"
msgstr "Entradas de acesso"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "Permissões \"%(permissions)s\" do papel \"%(role)s\" para \"%(object)s\""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Nenhum"
@@ -75,36 +75,67 @@ msgstr "Editar ACLs"
msgid "View ACLs"
msgstr "Visualizar ACLs"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Nova lista de controle de acesso para: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Apagar ACL: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "listas de controle de acesso para: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Permissões disponíveis"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Permissões outorgadas"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "As permissões inativas foram herdadas de um objeto precedente."
@@ -223,8 +254,5 @@ msgstr "As permissões inativas foram herdadas de um objeto precedente."
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACL-uri"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Permisiuni"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Șterge"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Accesul insuficient."
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Nici unul"
@@ -74,36 +74,67 @@ msgstr "Editați ACL-uri"
msgid "View ACLs"
msgstr "Vezi ACL-uri"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -9,8 +9,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -19,29 +19,29 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "СУДы"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Разрешения"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Роль"
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr "Удалить"
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Создать СУД"
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Неполный доступ."
@@ -53,13 +53,13 @@ msgstr "Элемент доступа"
msgid "Access entries"
msgstr "Элементы доступа"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Пусто"
@@ -75,36 +75,67 @@ msgstr "Редактировать СУДы"
msgid "View ACLs"
msgstr "Просмотр СУДов"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr "Новый СУД для: %s"
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Удалить СУД: %s"
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "СУДы для: %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr "Доступные разрешения"
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr "Предоставленные разрешения"
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Права роли \"%(role)s\" для \"%(object)s\""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr "Отключенные права наследуются от родительского объекта."
@@ -223,8 +254,5 @@ msgstr "Отключенные права наследуются от родит
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-11-17 08:58+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: sl_SI\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "Pravice"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "Pravice"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "Nezadosten dostop"
@@ -52,13 +52,13 @@ msgstr "Vstopna točka"
msgid "Access entries"
msgstr "Vstopne točke"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "Brez"
@@ -74,36 +74,67 @@ msgstr "Uredi dostopne pravice"
msgid "View ACLs"
msgstr "Preglej dostopne pravice"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr "Dostopne pravice za %s"
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: vi_VN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "ACLs"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr ""
@@ -52,13 +52,13 @@ msgstr ""
msgid "Access entries"
msgstr ""
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "None"
@@ -74,36 +74,67 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -18,29 +18,29 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:14 links.py:31
#: apps.py:15 links.py:35
msgid "ACLs"
msgstr "访问控制列表"
#: apps.py:22 links.py:40 models.py:36
#: apps.py:25 links.py:44 models.py:36
msgid "Permissions"
msgstr "权限"
#: apps.py:26 models.py:38
#: apps.py:29 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:27
#: links.py:31
msgid "Delete"
msgstr ""
#: links.py:35
#: links.py:39
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:85
#: managers.py:109
msgid "Insufficient access."
msgstr "权限不足"
@@ -52,13 +52,13 @@ msgstr "访问入口"
msgid "Access entries"
msgstr "多个访问入口"
#: models.py:48
#: models.py:49
#, python-format
#| msgid "mission \"%(permission)s\" granted to %(actor)s for %(object)s."
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr ""
#: models.py:64
#: models.py:66
msgid "None"
msgstr "无"
@@ -74,36 +74,67 @@ msgstr "编辑访问控制列表"
msgid "View ACLs"
msgstr "查看访问控制列表"
#: views.py:78
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
#| msgid "permission"
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:73
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:109
#: views.py:100
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:151
#: views.py:138
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:162
#: views.py:150
msgid "Available permissions"
msgstr ""
#: views.py:163
#: views.py:151
msgid "Granted permissions"
msgstr ""
#: views.py:222
#: views.py:206
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:242
#: views.py:226
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
@@ -222,8 +253,5 @@ msgstr ""
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -49,6 +49,10 @@ class AccessControlListManager(models.Manager):
def check_access(self, permissions, user, obj, related=None):
if user.is_superuser or user.is_staff:
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" as superuser or staff',
permissions, obj, user
)
return True
try:
@@ -89,15 +93,32 @@ class AccessControlListManager(models.Manager):
for group in user.groups.all():
for role in group.roles.all():
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" through role "%s" via inherited ACL',
permissions, obj, user, role
)
return True
user_roles.append(role)
if not self.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists():
logger.debug(
'Permissions "%s" on "%s" denied for user "%s"',
permissions, obj, user
)
raise PermissionDenied(ugettext('Insufficient access.'))
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" through roles "%s" by direct ACL',
permissions, obj, user, user_roles
)
def filter_by_access(self, permission, user, queryset):
if user.is_superuser or user.is_staff:
logger.debug(
'Unfiltered queryset returned to user "%s" as superuser '
'or staff', user
)
return queryset
try:
@@ -145,6 +166,10 @@ class AccessControlListManager(models.Manager):
content_type=content_type, role__in=user_roles,
permissions=permission.stored_permission
).values_list('object_id', flat=True))
logger.debug(
'Filtered queryset returned to user "%s" based on roles "%s"',
user, user_roles
)
return queryset.filter(parent_acl_query | acl_query)
else:

View File

@@ -18,9 +18,17 @@ logger = logging.getLogger(__name__)
@python_2_unicode_compatible
class AccessControlList(models.Model):
"""
Model that hold the permission, object, actor relationship
ACL means Access Control List it is a more fine-grained method of
granting access to objects. In the case of ACLs, they grant access using
3 elements: actor, permission, object. In this case the actor is the role,
the permission is the Mayan permission and the object can be anything:
a document, a folder, an index, etc. This means = "Grant X permissions
to role Y for object Z". This model holds the permission, object, actor
relationship for one access control list.
Fields:
* Role - Custom role that is being granted a permission. Roles are created
in the Setup menu.
"""
content_type = models.ForeignKey(
ContentType,
related_name='object_content_type'
@@ -45,7 +53,9 @@ class AccessControlList(models.Model):
verbose_name_plural = _('Access entries')
def __str__(self):
return _('Permissions "%(permissions)s" to role "%(role)s" for "%(object)s"') % {
return _(
'Permissions "%(permissions)s" to role "%(role)s" for "%(object)s"'
) % {
'permissions': self.get_permission_titles(),
'object': self.content_object,
'role': self.role

View File

@@ -0,0 +1,204 @@
from __future__ import absolute_import, unicode_literals
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError as DjangoValidationError
from django.utils.encoding import force_text
from django.utils.translation import ugettext_lazy as _
from rest_framework import serializers
from rest_framework.exceptions import ValidationError
from rest_framework.reverse import reverse
from common.serializers import ContentTypeSerializer
from permissions import Permission
from permissions.models import Role, StoredPermission
from permissions.serializers import PermissionSerializer, RoleSerializer
from .models import AccessControlList
class AccessControlListSerializer(serializers.ModelSerializer):
content_type = ContentTypeSerializer(read_only=True)
permissions_url = serializers.SerializerMethodField(
help_text=_(
'API URL pointing to the list of permissions for this access '
'control list.'
)
)
role = RoleSerializer(read_only=True)
url = serializers.SerializerMethodField()
class Meta:
fields = (
'content_type', 'id', 'object_id', 'permissions_url', 'role', 'url'
)
model = AccessControlList
def get_permissions_url(self, instance):
return reverse(
'rest_api:accesscontrollist-permission-list', args=(
instance.content_type.app_label, instance.content_type.model,
instance.object_id, instance.pk
), request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
'rest_api:accesscontrollist-detail', args=(
instance.content_type.app_label, instance.content_type.model,
instance.object_id, instance.pk
), request=self.context['request'], format=self.context['format']
)
class AccessControlListPermissionSerializer(PermissionSerializer):
acl_permission_url = serializers.SerializerMethodField(
help_text=_(
'API URL pointing to a permission in relation to the '
'access control list to which it is attached. This URL is '
'different than the canonical workflow URL.'
)
)
acl_url = serializers.SerializerMethodField()
def get_acl_permission_url(self, instance):
return reverse(
'rest_api:accesscontrollist-permission-detail', args=(
self.context['acl'].content_type.app_label,
self.context['acl'].content_type.model,
self.context['acl'].object_id, self.context['acl'].pk,
instance.stored_permission.pk
), request=self.context['request'], format=self.context['format']
)
def get_acl_url(self, instance):
return reverse(
'rest_api:accesscontrollist-detail', args=(
self.context['acl'].content_type.app_label,
self.context['acl'].content_type.model,
self.context['acl'].object_id, self.context['acl'].pk
), request=self.context['request'], format=self.context['format']
)
class WritableAccessControlListPermissionSerializer(AccessControlListPermissionSerializer):
permission_pk = serializers.CharField(
help_text=_(
'Primary key of the new permission to grant to the access control '
'list.'
), write_only=True
)
class Meta:
fields = ('namespace',)
read_only_fields = ('namespace',)
def create(self, validated_data):
for permission in validated_data['permissions']:
self.context['acl'].permissions.add(permission)
return validated_data['permissions'][0]
def validate(self, attrs):
permissions_pk_list = attrs.pop('permission_pk', None)
permissions_result = []
if permissions_pk_list:
for pk in permissions_pk_list.split(','):
try:
permission = Permission.get(pk=pk)
except KeyError:
raise ValidationError(_('No such permission: %s') % pk)
else:
# Accumulate valid stored permission pks
permissions_result.append(permission.pk)
attrs['permissions'] = StoredPermission.objects.filter(
pk__in=permissions_result
)
return attrs
class WritableAccessControlListSerializer(serializers.ModelSerializer):
content_type = ContentTypeSerializer(read_only=True)
permissions_pk_list = serializers.CharField(
help_text=_(
'Comma separated list of permission primary keys to grant to this '
'access control list.'
), required=False
)
permissions_url = serializers.SerializerMethodField(
help_text=_(
'API URL pointing to the list of permissions for this access '
'control list.'
), read_only=True
)
role_pk = serializers.IntegerField(
help_text=_(
'Primary keys of the role to which this access control list '
'binds to.'
), write_only=True
)
url = serializers.SerializerMethodField()
class Meta:
fields = (
'content_type', 'id', 'object_id', 'permissions_pk_list',
'permissions_url', 'role_pk', 'url'
)
model = AccessControlList
read_only_fields = ('content_type', 'object_id')
def get_permissions_url(self, instance):
return reverse(
'rest_api:accesscontrollist-permission-list', args=(
instance.content_type.app_label, instance.content_type.model,
instance.object_id, instance.pk
), request=self.context['request'], format=self.context['format']
)
def get_url(self, instance):
return reverse(
'rest_api:accesscontrollist-detail', args=(
instance.content_type.app_label, instance.content_type.model,
instance.object_id, instance.pk
), request=self.context['request'], format=self.context['format']
)
def validate(self, attrs):
attrs['content_type'] = ContentType.objects.get_for_model(
self.context['content_object']
)
attrs['object_id'] = self.context['content_object'].pk
try:
attrs['role'] = Role.objects.get(pk=attrs.pop('role_pk'))
except Role.DoesNotExist as exception:
raise ValidationError(force_text(exception))
permissions_pk_list = attrs.pop('permissions_pk_list', None)
permissions_result = []
if permissions_pk_list:
for pk in permissions_pk_list.split(','):
try:
permission = Permission.get(pk=pk)
except KeyError:
raise ValidationError(_('No such permission: %s') % pk)
else:
# Accumulate valid stored permission pks
permissions_result.append(permission.pk)
instance = AccessControlList(**attrs)
try:
instance.full_clean()
except DjangoValidationError as exception:
raise ValidationError(exception)
# Add a queryset of valid stored permissions so that they get added
# after the ACL gets created.
attrs['permissions'] = StoredPermission.objects.filter(
pk__in=permissions_result
)
return attrs

View File

@@ -0,0 +1,254 @@
from __future__ import absolute_import, unicode_literals
from django.contrib.auth import get_user_model
from django.contrib.contenttypes.models import ContentType
from django.core.urlresolvers import reverse
from django.test import override_settings
from rest_framework.test import APITestCase
from documents.models import DocumentType
from documents.permissions import permission_document_view
from documents.tests.literals import (
TEST_DOCUMENT_TYPE, TEST_SMALL_DOCUMENT_PATH
)
from permissions.classes import Permission
from permissions.models import Role
from permissions.tests.literals import TEST_ROLE_LABEL
from user_management.tests.literals import (
TEST_ADMIN_EMAIL, TEST_ADMIN_PASSWORD, TEST_ADMIN_USERNAME
)
from ..models import AccessControlList
from ..permissions import permission_acl_view
@override_settings(OCR_AUTO_OCR=False)
class ACLAPITestCase(APITestCase):
def setUp(self):
self.admin_user = get_user_model().objects.create_superuser(
username=TEST_ADMIN_USERNAME, email=TEST_ADMIN_EMAIL,
password=TEST_ADMIN_PASSWORD
)
self.client.login(
username=TEST_ADMIN_USERNAME, password=TEST_ADMIN_PASSWORD
)
self.document_type = DocumentType.objects.create(
label=TEST_DOCUMENT_TYPE
)
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
self.document = self.document_type.new_document(
file_object=file_object
)
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
self.document_content_type = ContentType.objects.get_for_model(
self.document
)
Permission.invalidate_cache()
def tearDown(self):
if hasattr(self, 'document_type'):
self.document_type.delete()
def _create_acl(self):
self.acl = AccessControlList.objects.create(
content_object=self.document,
role=self.role
)
self.acl.permissions.add(permission_document_view.stored_permission)
def test_object_acl_list_view(self):
self._create_acl()
response = self.client.get(
reverse(
'rest_api:accesscontrollist-list',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk
)
)
)
self.assertEqual(
response.data['results'][0]['content_type']['app_label'],
self.document_content_type.app_label
)
self.assertEqual(
response.data['results'][0]['role']['label'], TEST_ROLE_LABEL
)
def test_object_acl_delete_view(self):
self._create_acl()
response = self.client.delete(
reverse(
'rest_api:accesscontrollist-detail',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk
)
)
)
self.assertEqual(response.status_code, 204)
self.assertEqual(AccessControlList.objects.count(), 0)
def test_object_acl_detail_view(self):
self._create_acl()
response = self.client.get(
reverse(
'rest_api:accesscontrollist-detail',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk
)
)
)
self.assertEqual(
response.data['content_type']['app_label'],
self.document_content_type.app_label
)
self.assertEqual(
response.data['role']['label'], TEST_ROLE_LABEL
)
def test_object_acl_permission_delete_view(self):
self._create_acl()
permission = self.acl.permissions.first()
response = self.client.delete(
reverse(
'rest_api:accesscontrollist-permission-detail',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk,
permission.pk
)
)
)
self.assertEqual(response.status_code, 204)
self.assertEqual(self.acl.permissions.count(), 0)
def test_object_acl_permission_detail_view(self):
self._create_acl()
permission = self.acl.permissions.first()
response = self.client.get(
reverse(
'rest_api:accesscontrollist-permission-detail',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk,
permission.pk
)
)
)
self.assertEqual(
response.data['pk'], permission_document_view.pk
)
def test_object_acl_permission_list_view(self):
self._create_acl()
response = self.client.get(
reverse(
'rest_api:accesscontrollist-permission-list',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk
)
)
)
self.assertEqual(
response.data['results'][0]['pk'],
permission_document_view.pk
)
def test_object_acl_permission_list_post_view(self):
self._create_acl()
response = self.client.post(
reverse(
'rest_api:accesscontrollist-permission-list',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk, self.acl.pk
)
), data={'permission_pk': permission_acl_view.pk}
)
self.assertEqual(response.status_code, 201)
self.assertQuerysetEqual(
ordered=False, qs=self.acl.permissions.all(), values=(
repr(permission_document_view.stored_permission),
repr(permission_acl_view.stored_permission)
)
)
def test_object_acl_post_no_permissions_added_view(self):
response = self.client.post(
reverse(
'rest_api:accesscontrollist-list',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk
)
), data={'role_pk': self.role.pk}
)
self.assertEqual(response.status_code, 201)
self.assertEqual(
self.document.acls.first().role, self.role
)
self.assertEqual(
self.document.acls.first().content_object, self.document
)
self.assertEqual(
self.document.acls.first().permissions.count(), 0
)
def test_object_acl_post_with_permissions_added_view(self):
response = self.client.post(
reverse(
'rest_api:accesscontrollist-list',
args=(
self.document_content_type.app_label,
self.document_content_type.model,
self.document.pk
)
), data={
'role_pk': self.role.pk,
'permissions_pk_list': permission_acl_view.pk
}
)
self.assertEqual(response.status_code, 201)
self.assertEqual(
self.document.acls.first().content_object, self.document
)
self.assertEqual(
self.document.acls.first().role, self.role
)
self.assertEqual(
self.document.acls.first().permissions.first(),
permission_acl_view.stored_permission
)

View File

@@ -2,6 +2,10 @@ from __future__ import unicode_literals
from django.conf.urls import url
from .api_views import (
APIObjectACLListView, APIObjectACLPermissionListView,
APIObjectACLPermissionView, APIObjectACLView
)
from .views import (
ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView
)
@@ -21,3 +25,22 @@ urlpatterns = [
name='acl_permissions'
),
]
api_urls = [
url(
r'^objects/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_pk>\d+)/acls/$',
APIObjectACLListView.as_view(), name='accesscontrollist-list'
),
url(
r'^objects/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_pk>\d+)/acls/(?P<pk>\d+)/$',
APIObjectACLView.as_view(), name='accesscontrollist-detail'
),
url(
r'^objects/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_pk>\d+)/acls/(?P<pk>\d+)/permissions/$',
APIObjectACLPermissionListView.as_view(), name='accesscontrollist-permission-list'
),
url(
r'^objects/(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_pk>\d+)/acls/(?P<pk>\d+)/permissions/(?P<permission_pk>\d+)/$',
APIObjectACLPermissionView.as_view(), name='accesscontrollist-permission-detail'
),
]

View File

@@ -140,7 +140,8 @@ class ACLListView(SingleObjectListView):
def get_queryset(self):
return AccessControlList.objects.filter(
content_type=self.object_content_type, object_id=self.content_object.pk
content_type=self.object_content_type,
object_id=self.content_object.pk
)

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "صلاحيات غير كافية"
@@ -29,7 +29,7 @@ msgstr "صلاحيات غير كافية"
msgid "You don't have enough permissions for this operation."
msgstr "ليس لديك صلاحيات كافية لهذه العملية."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "لم يتم العثور على الصفحة"
@@ -37,7 +37,7 @@ msgstr "لم يتم العثور على الصفحة"
msgid "Sorry, but the requested page could not be found."
msgstr "عفواً، لا يمكن العثور على الصفحة المطلوبة."
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr "الاصدار"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "مجهول"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "تفاصيل المستخدم"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "الإجراءات"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr "انشاء"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr "تأكيد حذف"
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "نعم"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "لا"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "مطلوب"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "حفظ"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "ارسال"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "إلغاء"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "معرف"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "البحث"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Login"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr "Be sure to change the password to increase security and to disable this message."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
msgid "You don't have enough permissions for this operation."
msgstr ""
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Страницата не е намерена"
@@ -37,7 +37,7 @@ msgstr "Страницата не е намерена"
msgid "Sorry, but the requested page could not be found."
msgstr ""
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr "Версия"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Анонимен"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Данни за потребител"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Действия"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr "Създаване"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr "Потвърдете изтриване"
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Да"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "Не"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Запазване"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Подаване"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Отказ"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Идентификатор"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Търсене"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Влез"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr "Моля променете паролата, за да повишите нивото на сигурност и да деактивирате това съобщение."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: bs_BA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "Nedovoljno dozvola"
@@ -29,7 +29,7 @@ msgstr "Nedovoljno dozvola"
msgid "You don't have enough permissions for this operation."
msgstr "Nemate odgovarajuca prava za ovu operaciju."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Stranica nije pronađena"
@@ -37,7 +37,7 @@ msgstr "Stranica nije pronađena"
msgid "Sorry, but the requested page could not be found."
msgstr "Žao nam je, ali tražena stranica ne može biti pronađena."
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr "Verzija"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anonimni"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Detalji o korisniku"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Akcije"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr "Kreirati"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr "Potvrditi brisanje"
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Da"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "Ne"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "potrebno"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Sačuvati"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Podnijeti"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Otkazati"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Identifikator"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Pretraga"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Prijava"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr "Ne zaboravite promijeniti pasvord da pojačate sigurnost i onemogućite dalje prikazivanje ove poruke."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
msgid "You don't have enough permissions for this operation."
msgstr ""
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr ""
@@ -37,7 +37,7 @@ msgstr ""
msgid "Sorry, but the requested page could not be found."
msgstr ""
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr "Version"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anonym"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Bruger detaljer"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Handlinger"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr ""
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr ""
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr ""
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr ""
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr ""
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr ""
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr ""
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Log ind"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr ""
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -4,13 +4,14 @@
#
# Translators:
# Berny <berny@bernhard-marx.de>, 2015
# Jesaja Everling <jeverling@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"Last-Translator: Mathias Behrle <mathiasb@m9s.biz>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-24 22:57+0000\n"
"Last-Translator: Jesaja Everling <jeverling@gmail.com>\n"
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,11 +19,11 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr "Erscheinungsbild"
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "Unzureichende Berechtigungen"
@@ -30,7 +31,7 @@ msgstr "Unzureichende Berechtigungen"
msgid "You don't have enough permissions for this operation."
msgstr "Sie haben unzureichende Berechtigungen für diesen Vorgang."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Seite nicht gefunden"
@@ -38,7 +39,7 @@ msgstr "Seite nicht gefunden"
msgid "Sorry, but the requested page could not be found."
msgstr "Die angeforderte Seite konnte leider nicht gefunden werden"
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr "Serverfehler"
@@ -54,7 +55,7 @@ msgid ""
"identifier:"
msgstr "Wenn Sie Hilfe brauchen, können Sie den Fehler über folgende Kennung referenzieren: "
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "Über"
@@ -67,47 +68,47 @@ msgstr "Version"
msgid "Build number: %(build_number)s"
msgstr "Build Nummer: %(build_number)s"
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr "Veröffentlicht unter der Apache 2.0 Lizenz"
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr "Copyright &copy; 2011-2015 Roberto Rosario."
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr "Navigation ein-/ausschalten"
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr "Profil"
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anonymer Benutzer"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Benutzerdetails"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr "Erfolg"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr "Information"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr "Warnung"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr "Fehler"
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Aktionen"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr "Ausklappmenü ein-/ausschalten"
@@ -125,6 +126,10 @@ msgstr "%(object)s bearbeiten"
msgid "Create"
msgstr "Erstellen"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -139,39 +144,39 @@ msgstr "Löschen bestätigen"
msgid "Delete: %(object)s?"
msgstr "%(object)s löschen?"
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Ja"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "Nein"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "erforderlich"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Speichern"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Absenden"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Abbrechen"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr "Kein Ergebnis"
@@ -188,34 +193,38 @@ msgstr "Gesamt (%(start)s - %(end)s von %(total)s) (Seite %(page_number)s von %(
msgid "Total: %(total)s"
msgstr "Gesamt: %(total)s"
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Bezeichner"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
msgstr "Start"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr "Erste Schritte"
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr "Bevor Mayan EDMS voll genutzt werden kann, muss folgendes passieren:"
#: templates/appearance/home.html:57
msgid "Space separated terms"
msgstr "Begriffe durch Leerzeichen getrennt"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Suche"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr "Erweitert"
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Login"
@@ -255,7 +264,7 @@ msgid ""
"message."
msgstr "Bitte ändern Sie das Passwort, um die Sicherheit zu erhöhen und diese Nachricht zu deaktivieren."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr "Anmelden"

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -17,11 +17,11 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
msgid "You don't have enough permissions for this operation."
msgstr ""
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr ""
@@ -37,7 +37,7 @@ msgstr ""
msgid "Sorry, but the requested page could not be found."
msgstr ""
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr ""
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr ""
#: templates/appearance/base.html:74
msgid "User details"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr ""
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr ""
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr ""
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr ""
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr ""
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr ""
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr ""
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr ""
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr ""
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr ""
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Roberto Rosario, 2015-2016
# Roberto Rosario, 2015-2017
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:41+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-23 03:05+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
"MIME-Version: 1.0\n"
@@ -18,11 +18,11 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr "Apariencia"
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "Permisos insuficientes"
@@ -30,7 +30,7 @@ msgstr "Permisos insuficientes"
msgid "You don't have enough permissions for this operation."
msgstr "No tienes suficientes permisos para esta operación"
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Página no encontrada"
@@ -38,7 +38,7 @@ msgstr "Página no encontrada"
msgid "Sorry, but the requested page could not be found."
msgstr "Lo sentimos, la página solicitada no pudo ser encontrada"
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr "Error de servidor"
@@ -54,7 +54,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "Sobre"
@@ -67,47 +67,47 @@ msgstr "Versión"
msgid "Build number: %(build_number)s"
msgstr "Número de compilación: %(build_number)s"
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr "Liberado bajo la licencia Apache 2.0 License"
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr "Todos los derechos reservados &copy; 2011-2015 Roberto Rosario."
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr "Activar/Desactivar navegación"
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr "Perfil"
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anónimo"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Detalles del usuario"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr "Exitoso"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr "Información"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr "Advertencia"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr "Error"
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Acciones"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr "Alternar desplegable"
@@ -125,6 +125,10 @@ msgstr "Editar: %(object)s"
msgid "Create"
msgstr "Crear"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr "Ver detalles"
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -139,39 +143,39 @@ msgstr "Confirmar eliminación"
msgid "Delete: %(object)s?"
msgstr "¿Borrar: %(object)s?"
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Sí"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "No"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "requerido"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Guardar"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Enviar"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Cancelar"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr "Ningún resultado"
@@ -188,34 +192,38 @@ msgstr "Total (%(start)s - %(end)s de %(total)s) (Página %(page_number)s de %(t
msgid "Total: %(total)s"
msgstr "Total: %(total)s"
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Identificador"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
msgstr "inicio"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr "Tablero"
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr "Iniciando"
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr "Antes de comenzar a utilizar Mayan EDMS usted necesita lo siguiente:"
#: templates/appearance/home.html:57
msgid "Space separated terms"
msgstr "Términos separados por espacios"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr "Buscar páginas "
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Búsqueda"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr "Avanzada"
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr "Buscar documentos"
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Iniciar sesión"
@@ -255,7 +263,7 @@ msgid ""
"message."
msgstr "Asegúrese de cambiar su contraseña para aumentar la seguridad y para desactivar este mensaje"
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr "Entrar"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "مجوز ناکافی"
@@ -29,7 +29,7 @@ msgstr "مجوز ناکافی"
msgid "You don't have enough permissions for this operation."
msgstr "مجوزهای لازم برای انجام این عملیات را ندارید."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "صفحه پیدا نشد."
@@ -37,7 +37,7 @@ msgstr "صفحه پیدا نشد."
msgid "Sorry, but the requested page could not be found."
msgstr "متاسفانه صفحه درخواستی پیدا نشد."
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "درباره"
@@ -66,47 +66,47 @@ msgstr "نسخه"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr "تحت لیسانس Apache 2.0"
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr "کپی رایت و کپی"
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "ناشناس"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "جزئیات کاربر"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "عملیات"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr "ویرایش : %(object)s"
msgid "Create"
msgstr "ایجاد"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr "تائید حذف"
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "بلی"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "خیر"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "الزامی"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "ذخیره"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "ارسال"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "لغو"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr "بی جواب و یا بی جواب"
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "مشخصه Identifier"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
msgstr "خانه"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
msgstr "عبارات جداکننده فضا"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "جستجو"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "لاگین"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr "برای امنیت بیشتر پسورد خود را تغییر دهید"
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"Last-Translator: Thierry Schott <DarkDare@users.noreply.github.com>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,11 +18,11 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr "Apparence"
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "Droits insuffisants"
@@ -30,7 +30,7 @@ msgstr "Droits insuffisants"
msgid "You don't have enough permissions for this operation."
msgstr "Vous n'avez pas les permissions requises pour cette opération."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Page non trouvée"
@@ -38,7 +38,7 @@ msgstr "Page non trouvée"
msgid "Sorry, but the requested page could not be found."
msgstr "Désolé, la page demandée n'a pu être trouvée."
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr "Erreur du serveur"
@@ -54,7 +54,7 @@ msgid ""
"identifier:"
msgstr "Si vous avez besoin d'assistance, vous pouvez faire référence à cette erreur grâce à l'identifiant suivant :"
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "A propos"
@@ -67,47 +67,47 @@ msgstr "Version"
msgid "Build number: %(build_number)s"
msgstr "Numéro de build : %(build_number)s"
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr "Publié sous licence Apache 2.0"
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr "Copyright &copy; 2011-2015 Roberto Rosario."
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr "Activer la navigation"
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anonyme"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Détails de l'utilisateur"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr "Succès de l'opération"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr "Information"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr "Alerte"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr "Erreur"
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Actions"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr "Activer la liste déroulante"
@@ -125,6 +125,10 @@ msgstr "Modifie r: %(object)s"
msgid "Create"
msgstr "Créer"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -139,39 +143,39 @@ msgstr "Confirmer la suppression"
msgid "Delete: %(object)s?"
msgstr "Supprimer : %(object)s?"
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Oui"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "Non"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "Requis"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Enregistrer"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Soumettre"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Annuler"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr "Pas de résultats"
@@ -188,34 +192,38 @@ msgstr "Total (%(start)s - %(end)s surof %(total)s) (Page %(page_number)s sur %(
msgid "Total: %(total)s"
msgstr "Total : %(total)s"
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Identifiant"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
msgstr "Accueil"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr "Démarrage"
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr "Avant d'utiliser pleinement Mayan EDMS, les éléments suivants sont nécessaires :"
#: templates/appearance/home.html:57
msgid "Space separated terms"
msgstr "Termes séparés par des espaces"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Recherche"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr "Avancé"
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Connexion"
@@ -255,7 +263,7 @@ msgid ""
"message."
msgstr "Assurez-vous de modifier votre mot de passe pour accroître la sécurité et pour ne plus avoir ce message."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr "Connexion"

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
msgid "You don't have enough permissions for this operation."
msgstr ""
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr ""
@@ -37,7 +37,7 @@ msgstr ""
msgid "Sorry, but the requested page could not be found."
msgstr ""
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr ""
@@ -66,47 +66,47 @@ msgstr "Verzió"
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "névtelen felhasználó"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "A felhasználó adatai"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Műveletek"
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr ""
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr ""
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr ""
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr ""
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr ""
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr ""
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Keresés"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Bejelentkezés"
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr ""
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -7,8 +7,8 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-03-21 21:06+0000\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -17,11 +17,11 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr ""
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr ""
@@ -29,7 +29,7 @@ msgstr ""
msgid "You don't have enough permissions for this operation."
msgstr ""
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr ""
@@ -37,7 +37,7 @@ msgstr ""
msgid "Sorry, but the requested page could not be found."
msgstr ""
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr ""
@@ -53,7 +53,7 @@ msgid ""
"identifier:"
msgstr ""
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "Tentang"
@@ -66,47 +66,47 @@ msgstr ""
msgid "Build number: %(build_number)s"
msgstr ""
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr ""
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr ""
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr ""
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr ""
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Profil lengkap pengguna"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr ""
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr ""
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr ""
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr ""
@@ -124,6 +124,10 @@ msgstr ""
msgid "Create"
msgstr ""
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -138,39 +142,39 @@ msgstr ""
msgid "Delete: %(object)s?"
msgstr ""
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr ""
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr ""
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr ""
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr ""
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr ""
@@ -187,34 +191,38 @@ msgstr ""
msgid "Total: %(total)s"
msgstr ""
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr ""
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr ""
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr ""
#: templates/appearance/home.html:57
msgid "Space separated terms"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr ""
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr ""
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr ""
@@ -254,7 +262,7 @@ msgid ""
"message."
msgstr ""
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr ""

View File

@@ -8,9 +8,9 @@ msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-09-24 10:35+0000\n"
"Last-Translator: Marco Camplese <marco.camplese.mc@gmail.com>\n"
"POT-Creation-Date: 2017-04-21 12:22-0400\n"
"PO-Revision-Date: 2017-04-21 16:25+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,11 +18,11 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:11
#: apps.py:12
msgid "Appearance"
msgstr "Aspetto"
#: templates/403.html:5 templates/403.html.py:9
#: templates/403.html:5 templates/403.html:9
msgid "Insufficient permissions"
msgstr "Permessi insufficienti"
@@ -30,7 +30,7 @@ msgstr "Permessi insufficienti"
msgid "You don't have enough permissions for this operation."
msgstr "Non hai i permessi per effettuare questa operazione."
#: templates/404.html:5 templates/404.html.py:9
#: templates/404.html:5 templates/404.html:9
msgid "Page not found"
msgstr "Pagina non trovata"
@@ -38,7 +38,7 @@ msgstr "Pagina non trovata"
msgid "Sorry, but the requested page could not be found."
msgstr "Scusa ma la pagina richiesta non è disponibile"
#: templates/500.html:5 templates/500.html.py:9
#: templates/500.html:5 templates/500.html:9
msgid "Server error"
msgstr "Errore del server"
@@ -54,7 +54,7 @@ msgid ""
"identifier:"
msgstr "Se hai bisogno di assistenza, ti puoi riferire a questo errore con questo numero:"
#: templates/appearance/about.html:8 templates/appearance/about.html.py:57
#: templates/appearance/about.html:8 templates/appearance/about.html:57
msgid "About"
msgstr "Informazioni"
@@ -67,47 +67,47 @@ msgstr "Versione"
msgid "Build number: %(build_number)s"
msgstr "Build numbero: %(build_number)s"
#: templates/appearance/about.html:88
#: templates/appearance/about.html:76
msgid "Released under the Apache 2.0 License"
msgstr "Rilasciato sotto la licenza Apache 2.0"
#: templates/appearance/about.html:100
#: templates/appearance/about.html:88
msgid "Copyright &copy; 2011-2015 Roberto Rosario."
msgstr "Copyright &copy; 2011-2015 Roberto Rosario."
#: templates/appearance/base.html:43
#: templates/appearance/base.html:45
msgid "Toggle navigation"
msgstr "Cambia navigazione"
#: templates/appearance/base.html:72
#: templates/appearance/base.html:75
msgid "Profile"
msgstr ""
#: templates/appearance/base.html:81
msgid "Anonymous"
msgstr "Anonimo"
#: templates/appearance/base.html:74
msgid "User details"
msgstr "Dettagli utente"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Success"
msgstr "Riuscito"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Information"
msgstr "Informazione"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Warning"
msgstr "Attenzione"
#: templates/appearance/base.html:87
#: templates/appearance/base.html:115
msgid "Error"
msgstr "Errore"
#: templates/appearance/base.html:116
#: templates/appearance/base.html:144
msgid "Actions"
msgstr "Azioni "
#: templates/appearance/base.html:117
#: templates/appearance/base.html:146
msgid "Toggle Dropdown"
msgstr "Apri dropdown"
@@ -125,6 +125,10 @@ msgstr "Modifica: %(object)s"
msgid "Create"
msgstr "Crea"
#: templates/appearance/dashboard_widget.html:25
msgid "View details"
msgstr ""
#: templates/appearance/generic_confirm.html:6
#: templates/appearance/generic_confirm.html:13
msgid "Confirm"
@@ -139,39 +143,39 @@ msgstr "Conferma la cancellazione"
msgid "Delete: %(object)s?"
msgstr "Cancella: %(object)s?"
#: templates/appearance/generic_confirm.html:47
#: templates/appearance/generic_confirm.html:48
msgid "Yes"
msgstr "Si"
#: templates/appearance/generic_confirm.html:49
#: templates/appearance/generic_confirm.html:52
msgid "No"
msgstr "No"
#: templates/appearance/generic_form_instance.html:39
#: templates/appearance/generic_form_instance.html:46
#: templates/appearance/generic_form_subtemplate.html:51
#: templates/appearance/generic_multiform_subtemplate.html:43
#: templates/appearance/generic_multiform_subtemplate.html:42
msgid "required"
msgstr "richiesto"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Save"
msgstr "Salva"
#: templates/appearance/generic_form_subtemplate.html:71
#: templates/appearance/generic_list_subtemplate.html:31
#: templates/appearance/generic_multiform_subtemplate.html:65
#: templates/appearance/generic_list_subtemplate.html:33
#: templates/appearance/generic_multiform_subtemplate.html:64
msgid "Submit"
msgstr "Conferma"
#: templates/appearance/generic_form_subtemplate.html:74
#: templates/appearance/generic_multiform_subtemplate.html:69
#: templates/appearance/generic_multiform_subtemplate.html:68
msgid "Cancel"
msgstr "Annullare"
#: templates/appearance/generic_list_horizontal.html:21
#: templates/appearance/generic_list_subtemplate.html:108
#: templates/appearance/generic_list_subtemplate.html:112
msgid "No results"
msgstr "Nessun risultato"
@@ -188,34 +192,38 @@ msgstr "Totale (%(start)s - %(end)s di %(total)s) (Pagina %(page_number)s di %(t
msgid "Total: %(total)s"
msgstr "Totale: %(total)s"
#: templates/appearance/generic_list_subtemplate.html:51
#: templates/appearance/generic_list_subtemplate.html:53
msgid "Identifier"
msgstr "Identificatore"
#: templates/appearance/home.html:8 templates/appearance/home.html.py:12
msgid "Home"
msgstr "Home"
#: templates/appearance/home.html:9 templates/appearance/home.html:13
msgid "Dashboard"
msgstr ""
#: templates/appearance/home.html:21
#: templates/appearance/home.html:22
msgid "Getting started"
msgstr "Iniziare"
#: templates/appearance/home.html:24
#: templates/appearance/home.html:25
msgid "Before you can fully use Mayan EDMS you need the following:"
msgstr "Prima di usare completamente Mayan EDMS hai bisogno di:"
#: templates/appearance/home.html:57
msgid "Space separated terms"
msgstr "Parole separate da spazi"
#: templates/appearance/home.html:46
msgid "Search pages"
msgstr ""
#: templates/appearance/home.html:59
#: templates/appearance/home.html:48 templates/appearance/home.html:58
msgid "Search"
msgstr "Cerca"
#: templates/appearance/home.html:60
#: templates/appearance/home.html:49 templates/appearance/home.html:59
msgid "Advanced"
msgstr "Avanzato"
#: templates/appearance/home.html:56
msgid "Search documents"
msgstr ""
#: templates/appearance/login.html:10
msgid "Login"
msgstr "Login"
@@ -255,7 +263,7 @@ msgid ""
"message."
msgstr "Ricordati di cambiare la password per aumentare la sicurezza e disabilitare questo messaggio."
#: templates/appearance/login.html:45 templates/appearance/login.html.py:54
#: templates/appearance/login.html:45 templates/appearance/login.html:54
msgid "Sign in"
msgstr "Accedi"

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