Compare commits
89 Commits
feature/ex
...
feature/mu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
971d643759 | ||
|
|
ba493cf984 | ||
|
|
9ffcfeb49b | ||
|
|
41f68cf435 | ||
|
|
072bfcf2aa | ||
|
|
6a258e4a02 | ||
|
|
59fbe2d409 | ||
|
|
aa0f48b1a0 | ||
|
|
a2f8e8b8d8 | ||
|
|
7ae0917564 | ||
|
|
ff30268a4b | ||
|
|
5466dcdad3 | ||
|
|
2035602836 | ||
|
|
326919271a | ||
|
|
331a4da3b3 | ||
|
|
017dc67d3c | ||
|
|
aea00db37e | ||
|
|
629cc24090 | ||
|
|
f799d379d1 | ||
|
|
8221f90fd3 | ||
|
|
f6dfff5949 | ||
|
|
38eb65151a | ||
|
|
8435b8444a | ||
|
|
e5c51749da | ||
|
|
132d66fff8 | ||
|
|
0a545f4b33 | ||
|
|
305aad0bfa | ||
|
|
ccf3795601 | ||
|
|
18bd82ba55 | ||
|
|
3ebadf763b | ||
|
|
f9670ea7c2 | ||
|
|
de40977f5f | ||
|
|
aca93a0deb | ||
|
|
e943588ba2 | ||
|
|
db1673dd0a | ||
|
|
2dcad10805 | ||
|
|
ead86806d4 | ||
|
|
cc360be4a4 | ||
|
|
69bd6cc308 | ||
|
|
395fe0cb98 | ||
|
|
d9137b4361 | ||
|
|
e5c9e91104 | ||
|
|
67f88b79c6 | ||
|
|
266cf5c8a3 | ||
|
|
e228dfc8c5 | ||
|
|
fc86abe951 | ||
|
|
bc7682ab8a | ||
|
|
ba1c5c1b17 | ||
|
|
48d88d39e7 | ||
|
|
de81fc58dd | ||
|
|
b71ebe45f9 | ||
|
|
05a46445d9 | ||
|
|
907744cf18 | ||
|
|
f7fd9634df | ||
|
|
796e4cea04 | ||
|
|
b2304119fc | ||
|
|
07a124187f | ||
|
|
eab5296c7a | ||
|
|
ab83e23f27 | ||
|
|
5e7a62e022 | ||
|
|
e34dffb176 | ||
|
|
3a2d8bac33 | ||
|
|
58d634a395 | ||
|
|
a0df9d260d | ||
|
|
626cc1cd07 | ||
|
|
c49f8b1def | ||
|
|
2ca3a67c9c | ||
|
|
7be1d76f62 | ||
|
|
c5f64d4805 | ||
|
|
27c1a33762 | ||
|
|
ce0b0a9a79 | ||
|
|
90778c709c | ||
|
|
6e6a6073d2 | ||
|
|
a3a03ec095 | ||
|
|
433e295d07 | ||
|
|
c37430ff12 | ||
|
|
0e5521160b | ||
|
|
83046882b1 | ||
|
|
56f1a7d537 | ||
|
|
fba20b0a91 | ||
|
|
ab69031662 | ||
|
|
14bd599387 | ||
|
|
d71357cf81 | ||
|
|
4aea55339f | ||
|
|
9013793b5c | ||
|
|
bd3bdb9b13 | ||
|
|
9efa7c9543 | ||
|
|
8a5a26c0b4 | ||
|
|
6492908c59 |
@@ -1,41 +1,35 @@
|
|||||||
image: ubuntu:16.10
|
image: python:2.7
|
||||||
services:
|
services:
|
||||||
- mysql:latest
|
- mysql
|
||||||
- postgres
|
- postgres
|
||||||
before_script:
|
before_script:
|
||||||
- echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
|
|
||||||
- locale-gen en_US.UTF-8
|
|
||||||
- update-locale LANG=en_US.UTF-8
|
|
||||||
- export LC_ALL=en_US.UTF-8
|
|
||||||
- apt-get update -qq
|
- apt-get update -qq
|
||||||
- apt-get install -qq curl python-dev python-pip gcc gnupg1 tesseract-ocr tesseract-ocr-deu ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice
|
- apt-get install -qq python-dev gcc tesseract-ocr tesseract-ocr-deu unpaper ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice
|
||||||
variables:
|
variables:
|
||||||
POSTGRES_DB: "mayan_edms"
|
POSTGRES_DB: "mayan_edms"
|
||||||
POSTGRES_PASSWORD: "postgres"
|
POSTGRES_PASSWORD: "postgres"
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||||
MYSQL_DATABASE: "mayan_edms"
|
MYSQL_DATABASE: "mayan_edms"
|
||||||
test:mysql:
|
#test:mysql:
|
||||||
script:
|
# script:
|
||||||
- apt-get install -qq libmysqlclient-dev
|
# - pip install -r requirements/testing.txt
|
||||||
- pip install -r requirements/testing.txt
|
# - pip install -q mysql-python
|
||||||
- pip install mysql-python
|
# - apt-get install -qq mysql-client
|
||||||
- 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 "ALTER DATABASE $MYSQL_DATABASE CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
|
||||||
- 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 runtests --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
# tags:
|
||||||
tags:
|
# - mysql
|
||||||
- mysql
|
#test:postgres:
|
||||||
test:postgres:
|
# script:
|
||||||
script:
|
# - pip install -r requirements/testing.txt
|
||||||
- apt-get install -qq libpq-dev
|
# - pip install -q psycopg2
|
||||||
- pip install -r requirements/testing.txt
|
# - coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
||||||
- pip install psycopg2
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
# tags:
|
||||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
# - postgres
|
||||||
tags:
|
#test:sqlite:
|
||||||
- postgres
|
# script:
|
||||||
test:sqlite:
|
# - pip install -r requirements/testing.txt
|
||||||
script:
|
# - coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
||||||
- pip install -r requirements/testing.txt
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
|
||||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
|
||||||
|
|||||||
@@ -1,71 +0,0 @@
|
|||||||
Contributing to Mayan EDMS
|
|
||||||
==========================
|
|
||||||
|
|
||||||
Issues
|
|
||||||
------
|
|
||||||
|
|
||||||
- Before submitting a new issue, check for **open issues** first and join the
|
|
||||||
discussion.
|
|
||||||
- If your issue is not attended in a while, **be patient**, the core team is
|
|
||||||
small and the codebase big.
|
|
||||||
- Try to reproduce the issue using a **separate, clean installation**, sometimes
|
|
||||||
the issue can be caused by an error in a configuration file and not with the
|
|
||||||
code itself.
|
|
||||||
- **Do not upload** sensitive, private or classified information or files with
|
|
||||||
your issue. If the issue is triggered by a user file, create a dummy file with the
|
|
||||||
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.
|
|
||||||
- Do not open issues asking for **support or consulting**.
|
|
||||||
|
|
||||||
Code
|
|
||||||
----
|
|
||||||
|
|
||||||
1. Fork [the repository](http://gitlab.com/mayan-edms/mayan-edms).
|
|
||||||
1. Choose the version for which you want to develop. The code is divided in the
|
|
||||||
following branches:
|
|
||||||
|
|
||||||
a. **master:** Current stable version.
|
|
||||||
a. **series/X.Y:** There will be a **series** branch for each major version
|
|
||||||
release (1.0, 2.0). The **master** branch will be in sync with the latest
|
|
||||||
**series** branch.
|
|
||||||
a. **development:** Unstable branch where the development for the next minor or
|
|
||||||
major release is happening.
|
|
||||||
a. **feature/X:** These are branches dealing with a specific bug or feature
|
|
||||||
that is not yet ready to be merged.
|
|
||||||
a. The **master** and **series** branches are stable and not braking changes
|
|
||||||
must be submitted or merged. The **development** and **feature** 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. Submit a merge request for your changes.
|
|
||||||
|
|
||||||
Feature requests
|
|
||||||
----------------
|
|
||||||
|
|
||||||
- Opening issues to start a discussion around a new feature or idea are welcomed.
|
|
||||||
- Be explicit about your idea and provide a simple scenario, others need to really
|
|
||||||
understand the concepts behind your idea if it is to be implemented.
|
|
||||||
- Be realistic in your expectation and scope of your idea.
|
|
||||||
|
|
||||||
Translations
|
|
||||||
------------
|
|
||||||
- Translations are handled using [Transifex](https://www.transifex.com/rosarior/mayan-edms/).
|
|
||||||
- Join an existing team for the language to which you wish to contribute,
|
|
||||||
if there is no team for your language, request for one to be created.
|
|
||||||
- Don't request the creation of a new language and expect others to do all the
|
|
||||||
work. If you request the creation of a new language try to do some of the
|
|
||||||
translation. Language teams that don't see activity for a while are deleted.
|
|
||||||
|
|
||||||
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.
|
|
||||||
59
HISTORY.rst
@@ -1,62 +1,3 @@
|
|||||||
2.2 (2016-XX-XX)
|
|
||||||
================
|
|
||||||
- Remove the installation app (GitLab #301).
|
|
||||||
- Add support for document 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
|
|
||||||
- New Dashboard view
|
|
||||||
- Moved licenses to their own module in every app
|
|
||||||
- Update project to work with Django 1.10.4.
|
|
||||||
- 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).
|
|
||||||
|
|
||||||
|
|
||||||
2.1.6 (2016-11-23)
|
|
||||||
=================
|
|
||||||
- Fix variable name typo in the rotation transformation class.
|
|
||||||
- Update translations
|
|
||||||
|
|
||||||
2.1.5 (2016-11-08)
|
|
||||||
==================
|
|
||||||
- Backport resize transformation math operation fix (GitLab #319).
|
|
||||||
- Update Pillow to 3.1.2 (Security fix).
|
|
||||||
- Backport zoom transformation performance improvement (GitLab #334).
|
|
||||||
- Backport trash can navigation link resolution fix (GitLab #331).
|
|
||||||
- Improve documentation regarding the use of GPG version 1 (GitLab #333).
|
|
||||||
- Fix ACL create view HTML response type. (GitLab #335).
|
|
||||||
- Expland staging folder and watch folder explanation.
|
|
||||||
|
|
||||||
2.1.4 (2016-10-28)
|
|
||||||
==================
|
|
||||||
- Add missing link to the 2.1.3 release notes in the index file.
|
|
||||||
- Improve TempfileCheckMixin.
|
|
||||||
- Fix statistics namespace list display view.
|
|
||||||
- Fix events list display view.
|
|
||||||
- Update required Django version to 1.8.15.
|
|
||||||
- Update required python-gnupg version to 0.3.9.
|
|
||||||
- Improved orphaned temporary files test mixin.
|
|
||||||
- Re-enable and improve GitLab CI MySQL testing.
|
|
||||||
- Improved GPG handling.
|
|
||||||
- New GPG backend system.
|
|
||||||
- Minor documentation updates.
|
|
||||||
|
|
||||||
2.1.3 (2016-06-29)
|
|
||||||
==================
|
|
||||||
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296.
|
|
||||||
- Start using self.setdout instead of print as per documentation.
|
|
||||||
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
|
||||||
- Normalize handling of temporary file and directory creation.
|
|
||||||
- Fix GitLab issue #309, "Temp files quickly filling-up my /tmp (1GB tmpfs)".
|
|
||||||
- Explicitly check for residual temporary files in tests.
|
|
||||||
- Add missing temporary file cleanup for office documents.
|
|
||||||
- Fix file descriptor leak in the document signature download test.
|
|
||||||
|
|
||||||
2.1.2 (2016-05-20)
|
2.1.2 (2016-05-20)
|
||||||
==================
|
==================
|
||||||
- Sort document languages and user profile locale language lists. GitLab issue #292.
|
- Sort document languages and user profile locale language lists. GitLab issue #292.
|
||||||
|
|||||||
31
Makefile
@@ -1,5 +1,12 @@
|
|||||||
.PHONY: clean-pyc clean-build
|
.PHONY: clean-pyc clean-build
|
||||||
|
|
||||||
|
define BROWSER_PYSCRIPT
|
||||||
|
import sys, webbrowser
|
||||||
|
webbrowser.open(sys.argv[1])
|
||||||
|
endef
|
||||||
|
export BROWSER_PYSCRIPT
|
||||||
|
BROWSER := python -c "$$BROWSER_PYSCRIPT"
|
||||||
|
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo
|
@echo
|
||||||
@@ -25,10 +32,6 @@ help:
|
|||||||
@echo "release - Package (sdist and wheel) and upload a release."
|
@echo "release - Package (sdist and wheel) and upload a release."
|
||||||
|
|
||||||
@echo "runserver - Run the development 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 "safety_check - Run a package safety check."
|
|
||||||
|
|
||||||
|
|
||||||
# Cleaning
|
# Cleaning
|
||||||
@@ -49,15 +52,16 @@ clean-pyc:
|
|||||||
# Testing
|
# Testing
|
||||||
|
|
||||||
test:
|
test:
|
||||||
./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
python -Wall ./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
||||||
|
|
||||||
test-all:
|
test-all:
|
||||||
./manage.py runtests --settings=mayan.settings.testing --nomigrations
|
python -Wall ./manage.py runtests --settings=mayan.settings.testing --nomigrations
|
||||||
|
|
||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
docs_serve:
|
docs_serve:
|
||||||
|
$(BROWSER) http://127.0.0.1:8000
|
||||||
cd docs;make livehtml
|
cd docs;make livehtml
|
||||||
|
|
||||||
|
|
||||||
@@ -105,18 +109,5 @@ wheel: clean
|
|||||||
# Dev server
|
# Dev server
|
||||||
|
|
||||||
runserver:
|
runserver:
|
||||||
./manage.py runserver
|
|
||||||
|
|
||||||
runserver_plus:
|
|
||||||
$(BROWSER) http://127.0.0.1:8000
|
$(BROWSER) http://127.0.0.1:8000
|
||||||
./manage.py runserver_plus --settings=mayan.settings.development
|
./manage.py runserver
|
||||||
|
|
||||||
shell_plus:
|
|
||||||
./manage.py shell_plus --settings=mayan.settings.development
|
|
||||||
|
|
||||||
|
|
||||||
# Security
|
|
||||||
|
|
||||||
safety_check:
|
|
||||||
safety check
|
|
||||||
|
|
||||||
|
|||||||
26
README.rst
@@ -1,4 +1,4 @@
|
|||||||
|PyPI badge| |Build Status| |Coverage badge| |Documentation| |License badge| |Python version|
|
|PyPI badge| |Build Status| |Coverage badge| |Installs badge| |License badge|
|
||||||
|
|
||||||
|Logo|
|
|Logo|
|
||||||
|
|
||||||
@@ -33,13 +33,22 @@ To install Mayan EDMS, simply do:
|
|||||||
|
|
||||||
$ virtualenv venv
|
$ virtualenv venv
|
||||||
$ source venv/bin/activate
|
$ source venv/bin/activate
|
||||||
(venv) $ pip install mayan-edms
|
$ pip install mayan-edms
|
||||||
(venv) $ mayan-edms.py initialsetup
|
$ mayan-edms.py initialsetup
|
||||||
(venv) $ mayan-edms.py runserver
|
$ mayan-edms.py runserver
|
||||||
|
|
||||||
Point your browser to 127.0.0.1:8000 and use the automatically created admin
|
Point your browser to 127.0.0.1:8000 and use the automatically created admin
|
||||||
account.
|
account.
|
||||||
|
|
||||||
|
Contribute
|
||||||
|
----------
|
||||||
|
|
||||||
|
- Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug.
|
||||||
|
- Fork `the repository`_ on GitLab to start making your changes to the **development** branch (or branch off of it).
|
||||||
|
- Write a test which shows that the bug was fixed or that the feature works as expected.
|
||||||
|
- Add yourself to the `contributors file`_.
|
||||||
|
- Send a merge request.
|
||||||
|
|
||||||
|
|
||||||
.. _Website: http://www.mayan-edms.com
|
.. _Website: http://www.mayan-edms.com
|
||||||
.. _Video demostration: http://bit.ly/pADNXv
|
.. _Video demostration: http://bit.ly/pADNXv
|
||||||
@@ -47,19 +56,20 @@ account.
|
|||||||
.. _Translations: https://www.transifex.com/projects/p/mayan-edms/
|
.. _Translations: https://www.transifex.com/projects/p/mayan-edms/
|
||||||
.. _Mailing list (via Google Groups): http://groups.google.com/group/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
|
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||||
|
.. _`the repository`: http://gitlab.com/mayan-edms/mayan-edms
|
||||||
|
.. _`contributors file`: https://gitlab.com/mayan-edms/mayan-edms/blob/master/docs/topics/contributors.rst
|
||||||
|
|
||||||
.. |Build Status| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
|
.. |Build Status| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
|
||||||
:target: https://gitlab.com/mayan-edms/mayan-edms/commits/master
|
: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
|
.. |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
|
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
||||||
|
.. |Installs badge| image:: http://img.shields.io/pypi/dm/mayan-edms.svg?style=flat
|
||||||
|
:target: https://crate.io/packages/mayan-edms/
|
||||||
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
|
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
|
||||||
:target: http://badge.fury.io/py/mayan-edms
|
:target: http://badge.fury.io/py/mayan-edms
|
||||||
.. |License badge| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
|
.. |License badge| image:: http://img.shields.io/badge/license-Apache%202.0-green.svg?style=flat
|
||||||
.. |Analytics| image:: https://ga-beacon.appspot.com/UA-52965619-2/mayan-edms/readme?pixel
|
.. |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
|
.. |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
|
: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|
|
|Analytics|
|
||||||
|
|||||||
33
Vagrantfile
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
# -*- mode: ruby -*-
|
||||||
|
# vi: set ft=ruby :
|
||||||
|
|
||||||
|
VAGRANTFILE_API_VERSION = "2"
|
||||||
|
|
||||||
|
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
|
||||||
|
config.vm.box = "ubuntu/trusty64"
|
||||||
|
|
||||||
|
config.vm.provider :lxc do |v, override|
|
||||||
|
override.vm.box = "fgrehm/trusty64-lxc"
|
||||||
|
end
|
||||||
|
|
||||||
|
config.vm.provider :virtualbox do |vb|
|
||||||
|
vb.customize ["modifyvm", :id, "--memory", "1024"]
|
||||||
|
end
|
||||||
|
|
||||||
|
# Development box
|
||||||
|
config.vm.define "development", autostart: false do |development|
|
||||||
|
development.vm.network "forwarded_port", guest: 8000, host: 8000
|
||||||
|
development.vm.synced_folder ".", "/mayan-edms-repository"
|
||||||
|
development.vm.provision :shell, :path => "contrib/scripts/install/development.sh", privileged: false
|
||||||
|
|
||||||
|
development.vm.provision "file", destination: "/home/vagrant/mayan-edms/mayan/settings/celery_redis.py", source: "contrib/settings/celery_redis.py"
|
||||||
|
development.vm.provision "file", destination: "/home/vagrant/mayan-edms/mayan_edms_worker.sh", source: "contrib/misc/mayan_edms_worker.sh"
|
||||||
|
end
|
||||||
|
|
||||||
|
# Production box
|
||||||
|
config.vm.define "production", autostart: false do |production|
|
||||||
|
production.vm.network "forwarded_port", guest: 80, host: 8080
|
||||||
|
production.vm.provision :shell, :path => "contrib/scripts/install/production.sh", privileged: true
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
||||||
3
contrib/misc/mayan_edms_worker.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
DJANGO_SETTINGS_MODULE='mayan.settings.celery_redis' celery -A mayan worker -l DEBUG -Ofair -B
|
||||||
22
contrib/nginx/mayan
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name localhost;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
include uwsgi_params;
|
||||||
|
uwsgi_pass unix:/usr/share/mayan-edms/uwsgi.sock;
|
||||||
|
|
||||||
|
client_max_body_size 30M; # Increse if your plan to upload bigger documents
|
||||||
|
proxy_read_timeout 30s; # Increase if your document uploads take more than 30 seconds
|
||||||
|
}
|
||||||
|
|
||||||
|
location /static {
|
||||||
|
alias /usr/share/mayan-edms/mayan/media/static;
|
||||||
|
expires 1h;
|
||||||
|
}
|
||||||
|
|
||||||
|
location /favicon.ico {
|
||||||
|
alias /usr/share/mayan-edms/mayan/media/static/appearance/images/favicon.ico;
|
||||||
|
expires 1h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
|
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
1
contrib/scripts/PEP8_check.sh
Executable file
@@ -0,0 +1 @@
|
|||||||
|
flake8 --ignore=E501 mayan/apps | grep -v "F401 'models' imported but unused" | grep -v "F811 redefinition of unused 'models'"| grep -v "F401 'db' imported but unused" | grep -v "F812 list comprehension redefines 'user_id'" | grep -v "F812 list comprehension redefines 'document_id'" |less
|
||||||
3
contrib/scripts/make_fabfile_tar.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
find 'fabfile' -depth -name '*.pyc' -exec rm {} \;
|
||||||
|
tar -czvf contrib/fabfile.tar.gz fabfile
|
||||||
5
contrib/settings/celery_redis.py
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
from .local import *
|
||||||
|
|
||||||
|
CELERY_ALWAYS_EAGER = False
|
||||||
|
BROKER_URL = 'redis://127.0.0.1:6379/0'
|
||||||
|
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
|
||||||
26
contrib/supervisor/mayan-celery.conf
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
[program:mayan-worker]
|
||||||
|
command = /usr/share/mayan-edms/bin/python /usr/share/mayan-edms/bin/mayan-edms.py celery --settings=mayan.settings.production worker -Ofair -l ERROR
|
||||||
|
directory = /usr/share/mayan-edms
|
||||||
|
user = www-data
|
||||||
|
stdout_logfile = /var/log/mayan/worker-stdout.log
|
||||||
|
stderr_logfile = /var/log/mayan/worker-stderr.log
|
||||||
|
autostart = true
|
||||||
|
autorestart = true
|
||||||
|
startsecs = 10
|
||||||
|
stopwaitsecs = 10
|
||||||
|
killasgroup = true
|
||||||
|
priority = 998
|
||||||
|
|
||||||
|
[program:mayan-beat]
|
||||||
|
command = /usr/share/mayan-edms/bin/python /usr/share/mayan-edms/bin/mayan-edms.py celery --settings=mayan.settings.production beat -l ERROR
|
||||||
|
directory = /usr/share/mayan-edms
|
||||||
|
user = www-data
|
||||||
|
numprocs = 1
|
||||||
|
stdout_logfile = /var/log/mayan/beat-stdout.log
|
||||||
|
stderr_logfile = /var/log/mayan/beat-stderr.log
|
||||||
|
autostart = true
|
||||||
|
autorestart = true
|
||||||
|
startsecs = 10
|
||||||
|
stopwaitsecs = 1
|
||||||
|
killasgroup = true
|
||||||
|
priority = 998
|
||||||
6
contrib/supervisor/mayan-uwsgi.conf
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[program:mayan-uwsgi]
|
||||||
|
command = /usr/share/mayan-edms/bin/uwsgi --ini /usr/share/mayan-edms/uwsgi.ini
|
||||||
|
user = root
|
||||||
|
autostart = true
|
||||||
|
autorestart = true
|
||||||
|
redirect_stderr = true
|
||||||
BIN
docs/_static/api.png
vendored
Normal file
|
After Width: | Height: | Size: 78 KiB |
BIN
docs/_static/document_view.png
vendored
Normal file
|
After Width: | Height: | Size: 67 KiB |
BIN
docs/_static/main.png
vendored
Normal file
|
After Width: | Height: | Size: 32 KiB |
BIN
docs/_static/page_view.png
vendored
Normal file
|
After Width: | Height: | Size: 69 KiB |
BIN
docs/_static/setup.png
vendored
Normal file
|
After Width: | Height: | Size: 61 KiB |
BIN
docs/_static/statistics.png
vendored
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
docs/_static/tools.png
vendored
Normal file
|
After Width: | Height: | Size: 67 KiB |
@@ -38,6 +38,7 @@ extensions = ['djangodocs', 'sphinxcontrib.blockdiag']
|
|||||||
blockdiag_antialias = True
|
blockdiag_antialias = True
|
||||||
blockdiag_html_image_format = "SVG"
|
blockdiag_html_image_format = "SVG"
|
||||||
blockdiag_latex_image_format = "PDF"
|
blockdiag_latex_image_format = "PDF"
|
||||||
|
blockdiag_tex_image_format = "PDF"
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = ['_templates']
|
templates_path = ['_templates']
|
||||||
|
|||||||
@@ -10,14 +10,12 @@ and install it from PyPI with the following commands:
|
|||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
$ sudo apt-get install libjpeg-dev libmagic1 libpng-dev \
|
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
|
||||||
libreoffice libtiff-dev gcc ghostscript gnupg python-dev \
|
virtualenv venv
|
||||||
python-virtualenv tesseract-ocr poppler-utils -y
|
source venv/bin/activate
|
||||||
$ virtualenv venv
|
pip install mayan-edms
|
||||||
$ source venv/bin/activate
|
mayan-edms.py initialsetup
|
||||||
(venv) pip install mayan-edms
|
mayan-edms.py runserver
|
||||||
(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
|
Point your browser to 127.0.0.1:8000 and use the automatically created admin
|
||||||
account.
|
account.
|
||||||
@@ -38,6 +36,7 @@ account.
|
|||||||
Roadmap <topics/roadmap>
|
Roadmap <topics/roadmap>
|
||||||
Translations <topics/translations>
|
Translations <topics/translations>
|
||||||
Contributors <topics/contributors>
|
Contributors <topics/contributors>
|
||||||
|
Screenshots <topics/screenshots>
|
||||||
Licensing <topics/license>
|
Licensing <topics/license>
|
||||||
FAQ <topics/faq>
|
FAQ <topics/faq>
|
||||||
Contact <topics/contact>
|
Contact <topics/contact>
|
||||||
|
|||||||
@@ -1,87 +0,0 @@
|
|||||||
===============================
|
|
||||||
Mayan EDMS v2.1.3 release notes
|
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: June 29, 2016
|
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
|
||||||
|
|
||||||
Temporary files cleanup
|
|
||||||
-----------------------
|
|
||||||
When uploading PDF files that had been OCRed by previous software, the text
|
|
||||||
parser backend that uses Poppler, would leave behind some temporary files in
|
|
||||||
the /tmp folder. The issue has been resolved and from the fix a test mixin
|
|
||||||
system check has been devised that will identify places in the codebase with
|
|
||||||
similar behaviors, reducing the recurrence of similar issues in the future.
|
|
||||||
|
|
||||||
Other changes
|
|
||||||
-------------
|
|
||||||
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296
|
|
||||||
- Start using self.setdout instead of print as per documentation.
|
|
||||||
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
|
||||||
- Normalize handling of temporary file and directory creation.
|
|
||||||
- Explicitly check for residual temporary files in tests.
|
|
||||||
- Add missing temporary file cleanup for office documents.
|
|
||||||
- Fix file descriptor leak in the document signature download test.
|
|
||||||
|
|
||||||
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 #295 <https://gitlab.com/mayan-edms/mayan-edms/issues/295>`_ When editing a user the top bar jumps to the name of the user
|
|
||||||
* `GitLab issue #309 <https://gitlab.com/mayan-edms/mayan-edms/issues/309>`_ Temp files quickly filling-up my /tmp (1GB tmpfs)
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
|
||||||
@@ -1,81 +0,0 @@
|
|||||||
===============================
|
|
||||||
Mayan EDMS v2.1.4 release notes
|
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: October 28, 2016
|
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
|
||||||
|
|
||||||
Other changes
|
|
||||||
-------------
|
|
||||||
- Fix statistics namespace list display view
|
|
||||||
- Fix events list display view
|
|
||||||
- Update required Django version to 1.8.15
|
|
||||||
- Update required python-gnupg version to 0.3.9
|
|
||||||
- Improved orphaned temporary files test mixin
|
|
||||||
- Re-enable and improve GitLab CI MySQL testing
|
|
||||||
- Improved GPG handling
|
|
||||||
- New GPG backend system
|
|
||||||
- Minor documentation updates
|
|
||||||
|
|
||||||
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 #311 <https://gitlab.com/mayan-edms/mayan-edms/issues/311>`_ acl page return ContentType:Document
|
|
||||||
* `GitLab issue #316 <https://gitlab.com/mayan-edms/mayan-edms/issues/316>`_ Error when trying to access the statistics
|
|
||||||
* `GitLab issue #324 <https://gitlab.com/mayan-edms/mayan-edms/issues/324>`_ Document signature tests fail in Ubuntu 16.10
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
===============================
|
|
||||||
Mayan EDMS v2.1.5 release notes
|
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: November 8, 2016
|
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
|
||||||
|
|
||||||
Other changes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- Backport resize transformation math operation fix (GitLab #319).
|
|
||||||
- Update Pillow to 3.1.2
|
|
||||||
|
|
||||||
- https://pillow.readthedocs.io/en/3.4.x/releasenotes/3.1.1.html
|
|
||||||
- https://pillow.readthedocs.io/en/3.4.x/releasenotes/3.1.2.html
|
|
||||||
|
|
||||||
- Backport zoom performance improvement (GitLab #334).
|
|
||||||
- Backport trash can navigation link resolution fix (GitLab #331).
|
|
||||||
- Improve documentation regarding the use of GPG version 1 (GitLab #333).
|
|
||||||
- Fix ACL create view HTML response type. (GitLab #335).
|
|
||||||
- Expland staging folder and watch folder explanation.
|
|
||||||
|
|
||||||
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 #319 <https://gitlab.com/mayan-edms/mayan-edms/issues/319>`_ TransformationResize issue with very "long" image
|
|
||||||
* `GitLab issue #331 <https://gitlab.com/mayan-edms/mayan-edms/issues/331>`_ Trash List View: Items actions should be limited
|
|
||||||
* `GitLab issue #333 <https://gitlab.com/mayan-edms/mayan-edms/issues/333>`_ "Unable to run gpg - it may not be available."
|
|
||||||
* `GitLab issue #334 <https://gitlab.com/mayan-edms/mayan-edms/issues/334>`_ Perfomance improvment: prevent unnecessary image.resize in TransformationZoom
|
|
||||||
* `GitLab issue #335 <https://gitlab.com/mayan-edms/mayan-edms/issues/335>`_ Wrong HTML Content-Type in ACL->NEW
|
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
===============================
|
|
||||||
Mayan EDMS v2.1.6 release notes
|
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: November 23, 2016
|
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
|
||||||
|
|
||||||
Changes
|
|
||||||
-------------
|
|
||||||
|
|
||||||
- Fix variable name typo in the rotation transformation class.
|
|
||||||
- Update translations
|
|
||||||
|
|
||||||
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/
|
|
||||||
@@ -1,96 +0,0 @@
|
|||||||
=============================
|
|
||||||
Mayan EDMS v2.2 release notes
|
|
||||||
=============================
|
|
||||||
|
|
||||||
Released: XX, 2017
|
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
|
|
||||||
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
|
|
||||||
- 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
|
|
||||||
|
|
||||||
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
|
|
||||||
|
|
||||||
Common steps
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Remove deprecated requirements::
|
|
||||||
|
|
||||||
$ pip uninstall -y -r removals.txt 2> /dev/null
|
|
||||||
|
|
||||||
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 #294 <https://gitlab.com/mayan-edms/mayan-edms/issues/294>`_ Move new version creation blocking from the documents app to the checkouts app
|
|
||||||
* `GitLab issue #301 <https://gitlab.com/mayan-edms/mayan-edms/issues/301>`_ Remove the installation app
|
|
||||||
* `GitLab issue #307 <https://gitlab.com/mayan-edms/mayan-edms/issues/307>`_ Enter multiple Tags at once
|
|
||||||
* `GitLab issue #311 <https://gitlab.com/mayan-edms/mayan-edms/issues/311>`_ acl page return ContentType:Document
|
|
||||||
* `GitLab issue #319 <https://gitlab.com/mayan-edms/mayan-edms/issues/319>`_ TransformationResize issue with very "long" image
|
|
||||||
* `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
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
|
||||||
@@ -22,11 +22,6 @@ versions of the documentation contain the release notes for any later releases.
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
2.2
|
|
||||||
2.1.6
|
|
||||||
2.1.5
|
|
||||||
2.1.4
|
|
||||||
2.1.3
|
|
||||||
2.1.2
|
2.1.2
|
||||||
2.1.1
|
2.1.1
|
||||||
2.1
|
2.1
|
||||||
|
|||||||
@@ -2,17 +2,15 @@
|
|||||||
Deploying
|
Deploying
|
||||||
=========
|
=========
|
||||||
|
|
||||||
Below are some ways to deploye and use Mayan EDMS. Do use more than one method.
|
OS "bare metal"
|
||||||
|
===============
|
||||||
OS "bare metal" method
|
|
||||||
======================
|
|
||||||
|
|
||||||
Like other Django based projects Mayan EDMS can be deployed in a wide variety
|
Like other Django based projects Mayan EDMS can be deployed in a wide variety
|
||||||
of ways. The method provided below is only a bare minimum example.
|
of ways. The method provided below is only a bare minimum example.
|
||||||
These instructions are independent of the instructions mentioned in the
|
These instructions are independent of the instructions mentioned in the
|
||||||
:doc:`installation` chapter but assume you have already made a test install to
|
:doc:`installation` chapter but assume you have already made a test install to
|
||||||
test the compatibility of your operating system. These instruction are for
|
test the compatibility of your operating system. These instruction are for
|
||||||
Ubuntu 16.10.
|
Ubuntu 15.04.
|
||||||
|
|
||||||
Switch to superuser::
|
Switch to superuser::
|
||||||
|
|
||||||
@@ -22,12 +20,8 @@ Install all system dependencies::
|
|||||||
|
|
||||||
apt-get install nginx supervisor redis-server postgresql \
|
apt-get install nginx supervisor redis-server postgresql \
|
||||||
libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice \
|
libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice \
|
||||||
libtiff-dev gcc ghostscript gnupg python-dev python-virtualenv \
|
libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv \
|
||||||
tesseract-ocr poppler-utils -y
|
tesseract-ocr unpaper poppler-utils -y
|
||||||
|
|
||||||
If using Ubuntu 16.10 also install GPG version 1 (as GPG version 2 is the new default for this distribution and not yet supported by Mayan EDMS) ::
|
|
||||||
|
|
||||||
apt-get install gnupg1 -y
|
|
||||||
|
|
||||||
Change to the directory where the project will be deployed::
|
Change to the directory where the project will be deployed::
|
||||||
|
|
||||||
@@ -86,10 +80,6 @@ Append the following to the ``mayan/settings/local.py`` file, paying attention t
|
|||||||
BROKER_URL = 'redis://127.0.0.1:6379/0'
|
BROKER_URL = 'redis://127.0.0.1:6379/0'
|
||||||
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
|
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
|
||||||
|
|
||||||
If using Ubuntu 16.10, also add this line to the ``mayan/settings/local.py`` file::
|
|
||||||
|
|
||||||
SIGNATURES_GPG_PATH = '/usr/bin/gpg1'
|
|
||||||
|
|
||||||
Migrate the database or initialize the project::
|
Migrate the database or initialize the project::
|
||||||
|
|
||||||
mayan-edms.py initialsetup
|
mayan-edms.py initialsetup
|
||||||
@@ -196,12 +186,11 @@ Make the installation directory readable and writable by the webserver user::
|
|||||||
|
|
||||||
Restart the services::
|
Restart the services::
|
||||||
|
|
||||||
systemctl enable supervisor
|
/etc/init.d/nginx restart
|
||||||
systemctl restart supervisor
|
/etc/init.d/supervisor restart
|
||||||
systemctl restart nginx
|
|
||||||
|
|
||||||
Docker method
|
Docker
|
||||||
=============
|
======
|
||||||
|
|
||||||
Deploy the Docker image stack::
|
Deploy the Docker image stack::
|
||||||
|
|
||||||
@@ -216,8 +205,8 @@ with::
|
|||||||
docker logs mayan-edms
|
docker logs mayan-edms
|
||||||
|
|
||||||
|
|
||||||
Docker Compose method
|
Docker Compose
|
||||||
=====================
|
==============
|
||||||
|
|
||||||
Create a file named ``environment`` with the following content::
|
Create a file named ``environment`` with the following content::
|
||||||
|
|
||||||
@@ -259,8 +248,8 @@ with::
|
|||||||
|
|
||||||
docker logs mayanedms_mayan-edms_1
|
docker logs mayanedms_mayan-edms_1
|
||||||
|
|
||||||
Vagrant method
|
Vagrant
|
||||||
==============
|
=======
|
||||||
Make sure you have Vagrant and a provider properly installed as per
|
Make sure you have Vagrant and a provider properly installed as per
|
||||||
https://docs.vagrantup.com/v2/installation/index.html
|
https://docs.vagrantup.com/v2/installation/index.html
|
||||||
Clone the repository and execute::
|
Clone the repository and execute::
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ Development
|
|||||||
Mayan EDMS is under active development, and contributions are welcome.
|
Mayan EDMS is under active development, and contributions are welcome.
|
||||||
|
|
||||||
If you have a feature request, suggestion or bug report, please open a new
|
If you have a feature request, suggestion or bug report, please open a new
|
||||||
issue on the `GitLab issue tracker`_. To submit patches, please send a merge
|
issue on the `GitLab issue tracker`_. To submit patches, please send a pull
|
||||||
request on GitLab_.
|
request on GitLab_. Make sure to add yourself to the :ref:`contributors` file.
|
||||||
|
|
||||||
.. _GitLab: https://gitlab.com/mayan-edms/mayan-edms/
|
.. _GitLab: https://gitlab.com/mayan-edms/mayan-edms/
|
||||||
.. _`GitLab issue tracker`: https://gitlab.com/mayan-edms/mayan-edms/issues
|
.. _`GitLab issue tracker`: https://gitlab.com/mayan-edms/mayan-edms/issues
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ When using ``MySQL`` and doing OCR on languages other than English
|
|||||||
|
|
||||||
**Q: Is virtualenv required as specified in the documentation?**
|
**Q: Is virtualenv required as specified in the documentation?**
|
||||||
|
|
||||||
* It is not necessary, but it's a strong recommendation mainly to reduce
|
* It is not necessary, it's just a strong recommendation mainly to reduce
|
||||||
dependency conflicts by isolation from the main Python system install.
|
dependency conflicts by isolation from the main Python system install.
|
||||||
If not using a virtualenv, pip would install Mayan's dependencies
|
If not using a virtualenv, pip would install Mayan's dependencies
|
||||||
globally coming in conflict with the distribution's prepackaged Python
|
globally coming in conflict with the distribution's prepackaged Python
|
||||||
@@ -116,13 +116,3 @@ http://mayan-edms-ru.blogspot.com/2011/11/blog-post_09.html
|
|||||||
**Q: Can you change the display order of documents...i.e can they be in alphabetical order?**
|
**Q: Can you change the display order of documents...i.e can they be in alphabetical order?**
|
||||||
|
|
||||||
A the moment no, but it is something being considered.
|
A the moment no, but it is something being considered.
|
||||||
|
|
||||||
**Q: Does Mayan EDMS work with Python 3?**
|
|
||||||
|
|
||||||
Not at the moment. When all the projects and libraries upon which Mayan is
|
|
||||||
dependent support Python 3 then will the project move to fully support Python 3.
|
|
||||||
|
|
||||||
**Q: The watched folder feature is not working**
|
|
||||||
|
|
||||||
Make sure that the Celery BEAT scheduler is running correctly as it is the element
|
|
||||||
that triggers the periodics tasks.
|
|
||||||
|
|||||||
@@ -24,3 +24,4 @@ Introductions to all the key parts of Mayan EDMS you'll need to know:
|
|||||||
settings
|
settings
|
||||||
file_storage
|
file_storage
|
||||||
backups
|
backups
|
||||||
|
screenshots
|
||||||
|
|||||||
@@ -2,9 +2,8 @@
|
|||||||
OCR backend
|
OCR backend
|
||||||
===========
|
===========
|
||||||
|
|
||||||
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract
|
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract, but it can
|
||||||
(https://github.com/tesseract-ocr/tesseract/), but it can
|
use other engines. To support other engines a wrapper that subclasess the
|
||||||
use other engines. To support other engines crate a wrapper that subclasess the
|
|
||||||
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
||||||
expose the ``execute`` method. For an example of how the Tesseract backend
|
expose the ``execute`` method. For an example of how the Tesseract backend
|
||||||
is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py``
|
is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py``
|
||||||
@@ -14,8 +13,3 @@ OCR_BACKEND and point it to your new OCR backend class path.
|
|||||||
|
|
||||||
The default value of OCR_BACKEND is ``"ocr.backends.tesseract.Tesseract"``
|
The default value of OCR_BACKEND is ``"ocr.backends.tesseract.Tesseract"``
|
||||||
|
|
||||||
To add support to OCR more languages when using Tesseract, install the
|
|
||||||
corresponding language file. If using a Debian based OS, this command will
|
|
||||||
display the available language files:
|
|
||||||
|
|
||||||
apt-cache search tesseract-ocr
|
|
||||||
|
|||||||
64
docs/topics/screenshots.rst
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
===========
|
||||||
|
Screenshots
|
||||||
|
===========
|
||||||
|
|
||||||
|
.. figure:: /_static/main.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Home screen
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
Home screen
|
||||||
|
|
||||||
|
.. figure:: /_static/page_view.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Page view
|
||||||
|
:align: right
|
||||||
|
|
||||||
|
Page view
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: /_static/document_view.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Document view
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
Document view
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: /_static/api.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: REST API
|
||||||
|
:align: right
|
||||||
|
|
||||||
|
REST API
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: /_static/tools.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Tools
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
Tools
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: /_static/setup.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Setup
|
||||||
|
:align: right
|
||||||
|
|
||||||
|
Setup
|
||||||
|
|
||||||
|
|
||||||
|
.. figure:: /_static/statistics.png
|
||||||
|
:figwidth: 40%
|
||||||
|
:scale: 30 %
|
||||||
|
:alt: Statistics
|
||||||
|
:align: left
|
||||||
|
|
||||||
|
Statistics
|
||||||
@@ -21,6 +21,4 @@ keys no longer needed can also be deleted from this menu.
|
|||||||
|
|
||||||
Only `GNU Privacy Guard`_ signatures are support at the moment.
|
Only `GNU Privacy Guard`_ signatures are support at the moment.
|
||||||
|
|
||||||
Only version 1 of `GNU Privacy Guard`_ is supported for now.
|
|
||||||
|
|
||||||
.. _`GNU Privacy Guard`: www.gnupg.org/
|
.. _`GNU Privacy Guard`: www.gnupg.org/
|
||||||
|
|||||||
@@ -9,6 +9,9 @@ The current document sources supported are:
|
|||||||
- Web - ``HTML`` forms with a ``Browse`` button that will open the file dialog
|
- Web - ``HTML`` forms with a ``Browse`` button that will open the file dialog
|
||||||
when clicked to allow selection of files in the user's computer to be
|
when clicked to allow selection of files in the user's computer to be
|
||||||
uploaded as documents.
|
uploaded as documents.
|
||||||
|
- Staging folder - Folder where networked attached scanned can save image
|
||||||
|
files. The files in these staging folders are scanned and a preview is
|
||||||
|
generated to help the process of upload.
|
||||||
- POP3 email - Provide the email, server and credential of a ``POP3`` based
|
- POP3 email - Provide the email, server and credential of a ``POP3`` based
|
||||||
email to be scanned periodically for email. The body of the email is uploaded
|
email to be scanned periodically for email. The body of the email is uploaded
|
||||||
as a document and the attachments of the email are uploaded as separate
|
as a document and the attachments of the email are uploaded as separate
|
||||||
@@ -17,19 +20,6 @@ The current document sources supported are:
|
|||||||
the ``IMAP`` protocol.
|
the ``IMAP`` protocol.
|
||||||
- Watch folder - A filesystem folder that is scanned periodically for files.
|
- Watch folder - A filesystem folder that is scanned periodically for files.
|
||||||
Any file in the watch folder is automatically uploaded.
|
Any file in the watch folder is automatically uploaded.
|
||||||
- Staging folder - Folder where networked attached scanned can save image
|
|
||||||
files. The files in these staging folders are scanned and a preview is
|
|
||||||
generated to help the process of upload. Staging folders and Watch folders
|
|
||||||
work in a similar way with the main difference being that Staging folders are
|
|
||||||
interactive while Watch folders are automatic; documents in a Watch folder
|
|
||||||
are uploaded periodically and documents in a Staging folder remain indefinitely
|
|
||||||
there until an user uploads them. A preview for files in a Staging folder is
|
|
||||||
also provided. An example of Staging folder use is when multiple people
|
|
||||||
are scanning documents but only one person must be allowed to upload those
|
|
||||||
documents. This one person examines the scans quality and decides what to
|
|
||||||
upload and what to reject and have re-scanned. Watch folders can be used
|
|
||||||
when the quality of the scans is irrelevant or when they will be known
|
|
||||||
to be of good quality, such as when receiving e-faxes as PDFs.
|
|
||||||
|
|
||||||
Document source can be configure to allow document bundles to uploaded as
|
Document source can be configure to allow document bundles to uploaded as
|
||||||
compressed files which are decompressed and their content uploaded as separate
|
compressed files which are decompressed and their content uploaded as separate
|
||||||
|
|||||||
19
manage.py
@@ -4,20 +4,7 @@ import sys
|
|||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mayan.settings")
|
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mayan.settings")
|
||||||
try:
|
|
||||||
from django.core.management import execute_from_command_line
|
|
||||||
except ImportError:
|
|
||||||
# The above import may fail for some other reason. Ensure that the
|
|
||||||
# issue is really that Django is missing to avoid masking other
|
|
||||||
# exceptions on Python 2.
|
|
||||||
try:
|
|
||||||
import django
|
|
||||||
except ImportError:
|
|
||||||
raise ImportError(
|
|
||||||
"Couldn't import Django. Are you sure it's installed and "
|
|
||||||
"available on your PYTHONPATH environment variable? Did you "
|
|
||||||
"forget to activate a virtual environment?"
|
|
||||||
)
|
|
||||||
raise
|
|
||||||
execute_from_command_line(sys.argv)
|
|
||||||
|
|
||||||
|
from django.core.management import execute_from_command_line
|
||||||
|
|
||||||
|
execute_from_command_line(sys.argv)
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__title__ = 'Mayan EDMS'
|
__title__ = 'Mayan EDMS'
|
||||||
__version__ = '2.1.6'
|
__version__ = '2.1.2'
|
||||||
__build__ = 0x020106
|
__build__ = 0x020102
|
||||||
__author__ = 'Roberto Rosario'
|
__author__ = 'Roberto Rosario'
|
||||||
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
||||||
__description__ = 'Free Open Source Electronic Document Management System'
|
__description__ = 'Free Open Source Electronic Document Management System'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.apps import apps
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from navigation import Link
|
from navigation import Link
|
||||||
@@ -10,10 +10,6 @@ from .permissions import permission_acl_view, permission_acl_edit
|
|||||||
|
|
||||||
def get_kwargs_factory(variable_name):
|
def get_kwargs_factory(variable_name):
|
||||||
def get_kwargs(context):
|
def get_kwargs(context):
|
||||||
ContentType = apps.get_model(
|
|
||||||
app_label='contenttypes', model_name='ContentType'
|
|
||||||
)
|
|
||||||
|
|
||||||
content_type = ContentType.objects.get_for_model(
|
content_type = ContentType.objects.get_for_model(
|
||||||
context[variable_name]
|
context[variable_name]
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -8,35 +8,35 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n"
|
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"ar/)\n"
|
||||||
|
"Language: ar\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ar\n"
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||||
"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"
|
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "الصلاحيات"
|
msgstr "الصلاحيات"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +52,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "لا شيء"
|
msgstr "لا شيء"
|
||||||
|
|
||||||
@@ -81,7 +75,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +172,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n"
|
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/bg/)\n"
|
||||||
|
"Language: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: bg\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Разрешения"
|
msgstr "Разрешения"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -46,19 +45,13 @@ msgstr "Недостатъчен достъп."
|
|||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr "достъп вписване"
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "достъп вписвания"
|
|
||||||
|
|
||||||
#: models.py:48
|
|
||||||
#, 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 ""
|
||||||
|
|
||||||
#: models.py:64
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Няма"
|
msgstr "Няма"
|
||||||
|
|
||||||
@@ -68,11 +61,11 @@ msgstr "Контролни списъци за достъп"
|
|||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr "Редактиране на контролни списъци за достъп"
|
msgstr ""
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "Преглед на контролни списъци за достъп"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:78
|
#: views.py:78
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,35 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n"
|
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/"
|
||||||
|
"rosarior/mayan-edms/language/bs_BA/)\n"
|
||||||
|
"Language: bs_BA\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: bs_BA\n"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && 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"
|
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Dozvole"
|
msgstr "Dozvole"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +52,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nijedno"
|
msgstr "Nijedno"
|
||||||
|
|
||||||
@@ -81,7 +75,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +172,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n"
|
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"da/)\n"
|
||||||
|
"Language: da\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: da\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Ingen"
|
msgstr "Ingen"
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -5,40 +5,38 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Berny <berny@bernhard-marx.de>, 2015
|
# Berny <berny@bernhard-marx.de>, 2015
|
||||||
# Tobias Paepke <tobias.paepke@paepke.net>, 2016
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-31 18:56+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Tobias Paepke <tobias.paepke@paepke.net>\n"
|
"Last-Translator: Mathias Behrle <mathiasb@m9s.biz>\n"
|
||||||
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n"
|
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/de_DE/)\n"
|
||||||
|
"Language: de_DE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: de_DE\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Zugriffsberechtigungen"
|
msgstr "Zugriffsberechtigungen"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Berechtigungen"
|
msgstr "Berechtigungen"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rolle"
|
msgstr "Rolle"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Löschen"
|
msgstr "Löschen"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Neue Berechtigung"
|
msgstr "Neue Berechtigung"
|
||||||
|
|
||||||
@@ -54,13 +52,7 @@ msgstr "Berechtigungseintrag"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Berechtigungseinträge"
|
msgstr "Berechtigungseinträge"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Keine"
|
msgstr "Keine"
|
||||||
|
|
||||||
@@ -83,7 +75,6 @@ msgstr "Neue Zugriffsberechtigung für %s"
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "ACL \"%s\" löschen"
|
msgstr "ACL \"%s\" löschen"
|
||||||
|
|
||||||
@@ -107,7 +98,8 @@ msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
|
|||||||
|
|
||||||
#: views.py:242
|
#: views.py:242
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
|
msgstr ""
|
||||||
|
"Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -181,6 +173,9 @@ msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererb
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -200,8 +195,10 @@ msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererb
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
|
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
|
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
|
||||||
@@ -18,11 +18,11 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "permissions"
|
msgstr "permissions"
|
||||||
@@ -33,11 +33,11 @@ msgstr "permissions"
|
|||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Roles"
|
msgstr "Roles"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "View ACLs"
|
#| msgid "View ACLs"
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
@@ -57,13 +57,7 @@ msgstr "access entry"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "access entries"
|
msgstr "access entries"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -197,6 +191,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:38+0000\n"
|
"PO-Revision-Date: 2016-05-09 01:48+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
|
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -21,11 +21,11 @@ msgstr ""
|
|||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "LCAs"
|
msgstr "LCAs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permisos"
|
msgstr "Permisos"
|
||||||
|
|
||||||
@@ -34,11 +34,11 @@ msgstr "Permisos"
|
|||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rol"
|
msgstr "Rol"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Borrar"
|
msgstr "Borrar"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
#| msgid "View ACLs"
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nueva LCA"
|
msgstr "Nueva LCA"
|
||||||
@@ -55,13 +55,7 @@ msgstr "Entrada de acceso"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Entradas de acceso"
|
msgstr "Entradas de acceso"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Ninguno"
|
msgstr "Ninguno"
|
||||||
|
|
||||||
@@ -182,6 +176,9 @@ msgstr "Los permisos inactivos se heredan de un objeto precedente."
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n"
|
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/fa/)\n"
|
||||||
|
"Language: fa\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: fa\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "مجوزها"
|
msgstr "مجوزها"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "نقش"
|
msgstr "نقش"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "حذف"
|
msgstr "حذف"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr "ورودی دسترسی"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "ورودیهای دسترسی"
|
msgstr "ورودیهای دسترسی"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "هیچکدام."
|
msgstr "هیچکدام."
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -9,35 +9,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Christophe CHAUVET <christophe.chauvet@gmail.com>\n"
|
||||||
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n"
|
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"fr/)\n"
|
||||||
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: fr\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Droits"
|
msgstr "Droits"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permissions"
|
msgstr "Permissions"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rôle"
|
msgstr "Rôle"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Suppression"
|
msgstr "Suppression"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nouveau droit"
|
msgstr "Nouveau droit"
|
||||||
|
|
||||||
@@ -53,13 +52,7 @@ msgstr "Entrée d'accès"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Entrées d'accès"
|
msgstr "Entrées d'accès"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Aucun"
|
msgstr "Aucun"
|
||||||
|
|
||||||
@@ -82,7 +75,6 @@ msgstr "Nouvelle liste de contrôle d'accès pour: %s"
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Supprimer le droit: %s"
|
msgstr "Supprimer le droit: %s"
|
||||||
|
|
||||||
@@ -180,6 +172,9 @@ msgstr "La désactivation de permission est hérité de l'objet parent"
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -199,8 +194,10 @@ msgstr "La désactivation de permission est hérité de l'objet parent"
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n"
|
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/hu/)\n"
|
||||||
|
"Language: hu\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: hu\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACL-ek"
|
msgstr "ACL-ek"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Semmi"
|
msgstr "Semmi"
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n"
|
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/id/)\n"
|
||||||
|
"Language: id\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: id\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -4,42 +4,40 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Marco Camplese <marco.camplese.mc@gmail.com>, 2016
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-30 21:18+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Marco Camplese <marco.camplese.mc@gmail.com>\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/it/)\n"
|
||||||
|
"Language: it\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: it\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permessi"
|
msgstr "Permessi"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Ruolo"
|
msgstr "Ruolo"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Cancella"
|
msgstr "Cancella"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nuova ACL"
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:85
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
@@ -53,13 +51,7 @@ msgstr "Voce di accesso"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Voci di accesso"
|
msgstr "Voci di accesso"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nessuna "
|
msgstr "Nessuna "
|
||||||
|
|
||||||
@@ -78,13 +70,12 @@ msgstr "Visualizza ACL"
|
|||||||
#: views.py:78
|
#: views.py:78
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "Nuova lista di controllo accesso per: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Cancella ACL: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:151
|
#: views.py:151
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -102,11 +93,11 @@ msgstr "Autorizzazioni concesse "
|
|||||||
#: views.py:222
|
#: views.py:222
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:242
|
#: views.py:242
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -180,6 +171,9 @@ msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -199,8 +193,10 @@ msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -4,41 +4,39 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Evelijn Saaltink <evelijnsaaltink@gmail.com>, 2016
|
|
||||||
# Justin Albstbstmeijer <justin@albstmeijer.nl>, 2016
|
# Justin Albstbstmeijer <justin@albstmeijer.nl>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 12:43+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Evelijn Saaltink <evelijnsaaltink@gmail.com>\n"
|
"Last-Translator: Justin Albstbstmeijer <justin@albstmeijer.nl>\n"
|
||||||
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n"
|
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/nl_NL/)\n"
|
||||||
|
"Language: nl_NL\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: nl_NL\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Authorisatielijsten"
|
msgstr "Authorisatielijsten"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permissies"
|
msgstr "Permissies"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Gebruikersrol"
|
msgstr "Gebruikersrol"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Verwijder"
|
msgstr "Verwijder"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nieuwe authorisatielijst"
|
msgstr "Nieuwe authorisatielijst"
|
||||||
|
|
||||||
@@ -54,13 +52,7 @@ msgstr "Authorisatie invoer"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Authorisaties invoer"
|
msgstr "Authorisaties invoer"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Geen"
|
msgstr "Geen"
|
||||||
|
|
||||||
@@ -83,7 +75,6 @@ msgstr "Nieuwe authorisatielijsten voor: %s"
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Verwijder authorisatielijst: %s"
|
msgstr "Verwijder authorisatielijst: %s"
|
||||||
|
|
||||||
@@ -181,6 +172,9 @@ msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -200,8 +194,10 @@ msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -4,40 +4,40 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Wojtek Warczakowski <w.warczakowski@gmail.com>, 2016
|
# Wojciech Warczakowski <w.warczakowski@gmail.com>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Wojciech Warczakowski <w.warczakowski@gmail.com>\n"
|
||||||
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n"
|
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"pl/)\n"
|
||||||
|
"Language: pl\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\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 "
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"|| n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Listy ACL"
|
msgstr "Listy ACL"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Uprawnienia"
|
msgstr "Uprawnienia"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rola"
|
msgstr "Rola"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Usuń"
|
msgstr "Usuń"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nowa lista ACL"
|
msgstr "Nowa lista ACL"
|
||||||
|
|
||||||
@@ -53,13 +53,7 @@ msgstr "Zgłoszenie dostępu"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Zgłoszenia dostępu"
|
msgstr "Zgłoszenia dostępu"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Brak"
|
msgstr "Brak"
|
||||||
|
|
||||||
@@ -82,7 +76,6 @@ msgstr "Nowe listy ACL dla: %s"
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Usuń listę ACL: %s"
|
msgstr "Usuń listę ACL: %s"
|
||||||
|
|
||||||
@@ -180,6 +173,9 @@ msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -199,8 +195,10 @@ msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n"
|
"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/pt/)\n"
|
||||||
|
"Language: pt\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pt\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACL's"
|
msgstr "ACL's"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permissões"
|
msgstr "Permissões"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Eliminar"
|
msgstr "Eliminar"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nenhum"
|
msgstr "Nenhum"
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -4,42 +4,40 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Aline Freitas <aline@alinefreitas.com.br>, 2016
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-11-17 22:31+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Aline Freitas <aline@alinefreitas.com.br>\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/pt_BR/)\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pt_BR\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permissões"
|
msgstr "Permissões"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Regras"
|
msgstr "Regras"
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Excluir"
|
msgstr "Excluir"
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nova ACL"
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:85
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
@@ -53,13 +51,7 @@ msgstr "Acesso entrada"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Entradas de acesso"
|
msgstr "Entradas de acesso"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nenhum"
|
msgstr "Nenhum"
|
||||||
|
|
||||||
@@ -78,13 +70,12 @@ msgstr "Visualizar ACLs"
|
|||||||
#: views.py:78
|
#: views.py:78
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "Nova lista de controle de acesso para: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Apagar ACL: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:151
|
#: views.py:151
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -93,20 +84,20 @@ msgstr "listas de controle de acesso para: %s"
|
|||||||
|
|
||||||
#: views.py:162
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr "Permissões disponíveis"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:163
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr "Permissões outorgadas"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:222
|
#: views.py:222
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:242
|
#: views.py:242
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
msgstr "As permissões inativas foram herdadas de um objeto precedente."
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -180,6 +171,9 @@ msgstr "As permissões inativas foram herdadas de um objeto precedente."
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -199,8 +193,10 @@ msgstr "As permissões inativas foram herdadas de um objeto precedente."
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,35 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n"
|
"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/ro_RO/)\n"
|
||||||
|
"Language: ro_RO\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ro_RO\n"
|
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
"2:1));\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACL-uri"
|
msgstr "ACL-uri"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permisiuni"
|
msgstr "Permisiuni"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Șterge"
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +52,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Nici unul"
|
msgstr "Nici unul"
|
||||||
|
|
||||||
@@ -81,7 +75,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +172,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -4,64 +4,58 @@
|
|||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# lilo.panic, 2016
|
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n"
|
"Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/ru/)\n"
|
||||||
|
"Language: ru\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ru\n"
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && 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"
|
"%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:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "СУДы"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Разрешения"
|
msgstr "Разрешения"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Роль"
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr "Удалить"
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Создать СУД"
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:85
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr "Неполный доступ."
|
msgstr "Недостаточный доступ."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr "Элемент доступа"
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Элементы доступа"
|
|
||||||
|
|
||||||
#: models.py:48
|
|
||||||
#, 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 ""
|
||||||
|
|
||||||
#: models.py:64
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Пусто"
|
msgstr "Ни один"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
@@ -69,44 +63,43 @@ msgstr "Списки контроля доступа"
|
|||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr "Редактировать СУДы"
|
msgstr "Редактировать списки ACL"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "Просмотр СУДов"
|
msgstr "Просмотр списков ACL"
|
||||||
|
|
||||||
#: views.py:78
|
#: views.py:78
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "Новый СУД для: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Удалить СУД: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:151
|
#: views.py:151
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Access control lists for: %s"
|
msgid "Access control lists for: %s"
|
||||||
msgstr "СУДы для: %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:162
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr "Доступные разрешения"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:163
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr "Предоставленные разрешения"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:222
|
#: views.py:222
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr "Права роли \"%(role)s\" для \"%(object)s\""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:242
|
#: views.py:242
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
msgstr "Отключенные права наследуются от родительского объекта."
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -180,6 +173,9 @@ msgstr "Отключенные права наследуются от родит
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -199,8 +195,10 @@ msgstr "Отключенные права наследуются от родит
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,71 +8,65 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-11-17 08:58+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n"
|
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/sl_SI/)\n"
|
||||||
|
"Language: sl_SI\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: sl_SI\n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
|
"%100==4 ? 2 : 3);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Pravice"
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Pravice"
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:85
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr "Nezadosten dostop"
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr "Vstopna točka"
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "Vstopne točke"
|
|
||||||
|
|
||||||
#: models.py:48
|
|
||||||
#, 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 ""
|
||||||
|
|
||||||
#: models.py:64
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "Brez"
|
msgstr "Brez"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr "Seznami za nadzor dostopa"
|
msgstr ""
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr "Uredi dostopne pravice"
|
msgstr ""
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "Preglej dostopne pravice"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:78
|
#: views.py:78
|
||||||
#, python-format
|
#, python-format
|
||||||
@@ -81,14 +75,13 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:151
|
#: views.py:151
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Access control lists for: %s"
|
msgid "Access control lists for: %s"
|
||||||
msgstr "Dostopne pravice za %s"
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:162
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
@@ -179,6 +172,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n"
|
"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/"
|
||||||
|
"mayan-edms/language/vi_VN/)\n"
|
||||||
|
"Language: vi_VN\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: vi_VN\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr ""
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "None"
|
msgstr "None"
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,35 +8,34 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n"
|
"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/zh_CN/)\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: zh_CN\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:31
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "访问控制列表"
|
msgstr "访问控制列表"
|
||||||
|
|
||||||
#: apps.py:22 links.py:40 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "权限"
|
msgstr "权限"
|
||||||
|
|
||||||
#: apps.py:26 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:27
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:35
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -52,13 +51,7 @@ msgstr "访问入口"
|
|||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr "多个访问入口"
|
msgstr "多个访问入口"
|
||||||
|
|
||||||
#: models.py:48
|
#: models.py:60
|
||||||
#, 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
|
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr "无"
|
msgstr "无"
|
||||||
|
|
||||||
@@ -81,7 +74,6 @@ msgstr ""
|
|||||||
|
|
||||||
#: views.py:109
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -179,6 +171,9 @@ msgstr ""
|
|||||||
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||||
|
|
||||||
|
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid ""
|
#~ msgid ""
|
||||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||||
#~ "%(object)s."
|
#~ "%(object)s."
|
||||||
@@ -198,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ from django.db.models import Q
|
|||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
|
|
||||||
from common.utils import return_attrib
|
from common.utils import return_attrib
|
||||||
from permissions import Permission
|
|
||||||
from permissions.models import StoredPermission
|
from permissions.models import StoredPermission
|
||||||
|
|
||||||
from .classes import ModelPermission
|
from .classes import ModelPermission
|
||||||
@@ -52,100 +51,78 @@ class AccessControlListManager(models.Manager):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return Permission.check_permissions(
|
stored_permissions = [
|
||||||
requester=user, permissions=permissions
|
permission.stored_permission for permission in permissions
|
||||||
)
|
]
|
||||||
except PermissionDenied:
|
except TypeError:
|
||||||
try:
|
# Not a list of permissions, just one
|
||||||
stored_permissions = [
|
stored_permissions = [permissions.stored_permission]
|
||||||
permission.stored_permission for permission in permissions
|
|
||||||
]
|
|
||||||
except TypeError:
|
|
||||||
# Not a list of permissions, just one
|
|
||||||
stored_permissions = (permissions.stored_permission,)
|
|
||||||
|
|
||||||
if related:
|
if related:
|
||||||
obj = return_attrib(obj, related)
|
obj = return_attrib(obj, related)
|
||||||
|
|
||||||
|
try:
|
||||||
|
parent_accessor = ModelPermission.get_inheritance(obj._meta.model)
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
try:
|
try:
|
||||||
parent_accessor = ModelPermission.get_inheritance(
|
return self.check_access(
|
||||||
model=obj._meta.model
|
permissions, user, getattr(obj, parent_accessor)
|
||||||
)
|
)
|
||||||
except AttributeError:
|
except PermissionDenied:
|
||||||
# AttributeError means non model objects: ie Statistics
|
|
||||||
# These can't have ACLS so we raise PermissionDenied
|
|
||||||
raise PermissionDenied
|
|
||||||
except KeyError:
|
|
||||||
pass
|
pass
|
||||||
else:
|
|
||||||
try:
|
|
||||||
return self.check_access(
|
|
||||||
permissions, user, getattr(obj, parent_accessor)
|
|
||||||
)
|
|
||||||
except PermissionDenied:
|
|
||||||
pass
|
|
||||||
|
|
||||||
user_roles = []
|
user_roles = []
|
||||||
for group in user.groups.all():
|
for group in user.organization_groups.all():
|
||||||
for role in group.roles.all():
|
for role in group.roles.all():
|
||||||
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
user_roles.append(role)
|
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():
|
if not self.model.on_organization.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists():
|
||||||
raise PermissionDenied(ugettext('Insufficient access.'))
|
raise PermissionDenied(ugettext('Insufficient access.'))
|
||||||
|
|
||||||
def filter_by_access(self, permission, user, queryset):
|
def filter_by_access(self, permission, user, queryset):
|
||||||
if user.is_superuser or user.is_staff:
|
if user.is_superuser or user.is_staff:
|
||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
|
user_roles = []
|
||||||
|
for group in user.organization_groups.all():
|
||||||
|
for role in group.roles.all():
|
||||||
|
user_roles.append(role)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
Permission.check_permissions(
|
parent_accessor = ModelPermission.get_inheritance(queryset.model)
|
||||||
requester=user, permissions=(permission,)
|
except KeyError:
|
||||||
)
|
parent_acl_query = Q()
|
||||||
except PermissionDenied:
|
|
||||||
user_roles = []
|
|
||||||
for group in user.groups.all():
|
|
||||||
for role in group.roles.all():
|
|
||||||
user_roles.append(role)
|
|
||||||
|
|
||||||
try:
|
|
||||||
parent_accessor = ModelPermission.get_inheritance(
|
|
||||||
model=queryset.model
|
|
||||||
)
|
|
||||||
except KeyError:
|
|
||||||
parent_acl_query = Q()
|
|
||||||
else:
|
|
||||||
instance = queryset.first()
|
|
||||||
if instance:
|
|
||||||
parent_object = getattr(instance, parent_accessor)
|
|
||||||
parent_content_type = ContentType.objects.get_for_model(
|
|
||||||
parent_object
|
|
||||||
)
|
|
||||||
parent_queryset = self.filter(
|
|
||||||
content_type=parent_content_type, role__in=user_roles,
|
|
||||||
permissions=permission.stored_permission
|
|
||||||
)
|
|
||||||
parent_acl_query = Q(
|
|
||||||
**{
|
|
||||||
'{}__pk__in'.format(
|
|
||||||
parent_accessor
|
|
||||||
): parent_queryset.values_list(
|
|
||||||
'object_id', flat=True
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
else:
|
|
||||||
parent_acl_query = Q()
|
|
||||||
|
|
||||||
# Directly granted access
|
|
||||||
content_type = ContentType.objects.get_for_model(queryset.model)
|
|
||||||
acl_query = Q(pk__in=self.filter(
|
|
||||||
content_type=content_type, role__in=user_roles,
|
|
||||||
permissions=permission.stored_permission
|
|
||||||
).values_list('object_id', flat=True))
|
|
||||||
|
|
||||||
return queryset.filter(parent_acl_query | acl_query)
|
|
||||||
else:
|
else:
|
||||||
return queryset
|
instance = queryset.first()
|
||||||
|
if instance:
|
||||||
|
parent_object = getattr(instance, parent_accessor)
|
||||||
|
parent_content_type = ContentType.objects.get_for_model(
|
||||||
|
parent_object
|
||||||
|
)
|
||||||
|
parent_queryset = self.filter(
|
||||||
|
content_type=parent_content_type, role__in=user_roles,
|
||||||
|
permissions=permission.stored_permission
|
||||||
|
)
|
||||||
|
parent_acl_query = Q(
|
||||||
|
**{
|
||||||
|
'{}__pk__in'.format(
|
||||||
|
parent_accessor
|
||||||
|
): parent_queryset.values_list('object_id', flat=True)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
parent_acl_query = Q()
|
||||||
|
|
||||||
|
# Directly granted access
|
||||||
|
content_type = ContentType.objects.get_for_model(queryset.model)
|
||||||
|
acl_query = Q(pk__in=self.filter(
|
||||||
|
content_type=content_type, role__in=user_roles,
|
||||||
|
permissions=permission.stored_permission
|
||||||
|
).values_list('object_id', flat=True))
|
||||||
|
|
||||||
|
return queryset.filter(parent_acl_query | acl_query)
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import organizations.shortcuts
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('organizations', '0002_add_data_default_organization'),
|
||||||
|
('acls', '0002_auto_20150703_0513'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='accesscontrollist',
|
||||||
|
name='organization',
|
||||||
|
field=models.ForeignKey(default=organizations.shortcuts.get_current_organization, to='organizations.Organization'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -8,6 +8,9 @@ from django.db import models
|
|||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from organizations.models import Organization
|
||||||
|
from organizations.managers import CurrentOrganizationManager
|
||||||
|
from organizations.shortcuts import get_current_organization
|
||||||
from permissions.models import Role, StoredPermission
|
from permissions.models import Role, StoredPermission
|
||||||
|
|
||||||
from .managers import AccessControlListManager
|
from .managers import AccessControlListManager
|
||||||
@@ -30,6 +33,9 @@ class AccessControlList(models.Model):
|
|||||||
ct_field='content_type',
|
ct_field='content_type',
|
||||||
fk_field='object_id',
|
fk_field='object_id',
|
||||||
)
|
)
|
||||||
|
organization = models.ForeignKey(
|
||||||
|
Organization, default=get_current_organization
|
||||||
|
)
|
||||||
# TODO: limit choices to the permissions valid for the content_object
|
# TODO: limit choices to the permissions valid for the content_object
|
||||||
permissions = models.ManyToManyField(
|
permissions = models.ManyToManyField(
|
||||||
StoredPermission, blank=True, related_name='acls',
|
StoredPermission, blank=True, related_name='acls',
|
||||||
@@ -38,6 +44,7 @@ class AccessControlList(models.Model):
|
|||||||
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
|
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
|
||||||
|
|
||||||
objects = AccessControlListManager()
|
objects = AccessControlListManager()
|
||||||
|
on_organization = CurrentOrganizationManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('content_type', 'object_id', 'role')
|
unique_together = ('content_type', 'object_id', 'role')
|
||||||
|
|||||||
@@ -1,16 +1,17 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.test import TestCase, override_settings
|
from django.test import TestCase, override_settings
|
||||||
|
|
||||||
from documents.models import Document, DocumentType
|
from documents.models import Document, DocumentType
|
||||||
from documents.permissions import permission_document_view
|
from documents.permissions import permission_document_view
|
||||||
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
||||||
|
from organizations.tests.base import OrganizationTestCase
|
||||||
from permissions.classes import Permission
|
from permissions.classes import Permission
|
||||||
from permissions.models import Role
|
from permissions.models import Role
|
||||||
from permissions.tests.literals import TEST_ROLE_LABEL
|
from permissions.tests.literals import TEST_ROLE_LABEL
|
||||||
|
from user_management.models import MayanGroup
|
||||||
from user_management.tests.literals import TEST_USER_USERNAME, TEST_GROUP
|
from user_management.tests.literals import TEST_USER_USERNAME, TEST_GROUP
|
||||||
|
|
||||||
from ..models import AccessControlList
|
from ..models import AccessControlList
|
||||||
@@ -19,13 +20,15 @@ TEST_DOCUMENT_TYPE_2 = 'test document type 2'
|
|||||||
|
|
||||||
|
|
||||||
@override_settings(OCR_AUTO_OCR=False)
|
@override_settings(OCR_AUTO_OCR=False)
|
||||||
class PermissionTestCase(TestCase):
|
class PermissionTestCase(OrganizationTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.document_type_1 = DocumentType.objects.create(
|
super(PermissionTestCase, self).setUp()
|
||||||
|
|
||||||
|
self.document_type_1 = DocumentType.on_organization.create(
|
||||||
label=TEST_DOCUMENT_TYPE
|
label=TEST_DOCUMENT_TYPE
|
||||||
)
|
)
|
||||||
|
|
||||||
self.document_type_2 = DocumentType.objects.create(
|
self.document_type_2 = DocumentType.on_organization.create(
|
||||||
label=TEST_DOCUMENT_TYPE_2
|
label=TEST_DOCUMENT_TYPE_2
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -44,21 +47,23 @@ class PermissionTestCase(TestCase):
|
|||||||
file_object=file_object
|
file_object=file_object
|
||||||
)
|
)
|
||||||
|
|
||||||
self.user = get_user_model().objects.create(
|
self.user = get_user_model().on_organization.create(
|
||||||
username=TEST_USER_USERNAME
|
username=TEST_USER_USERNAME
|
||||||
)
|
)
|
||||||
self.group = Group.objects.create(name=TEST_GROUP)
|
self.group = MayanGroup.on_organization.create(name=TEST_GROUP)
|
||||||
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
|
self.role = Role.on_organization.create(label=TEST_ROLE_LABEL)
|
||||||
|
|
||||||
self.group.user_set.add(self.user)
|
self.group.users.add(self.user)
|
||||||
self.role.groups.add(self.group)
|
self.role.organization_groups.add(self.group)
|
||||||
|
|
||||||
Permission.invalidate_cache()
|
Permission.invalidate_cache()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for document_type in DocumentType.objects.all():
|
for document_type in DocumentType.on_organization.all():
|
||||||
document_type.delete()
|
document_type.delete()
|
||||||
|
|
||||||
|
super(PermissionTestCase, self).tearDown()
|
||||||
|
|
||||||
def test_check_access_without_permissions(self):
|
def test_check_access_without_permissions(self):
|
||||||
with self.assertRaises(PermissionDenied):
|
with self.assertRaises(PermissionDenied):
|
||||||
AccessControlList.objects.check_access(
|
AccessControlList.objects.check_access(
|
||||||
@@ -75,7 +80,7 @@ class PermissionTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_check_access_with_acl(self):
|
def test_check_access_with_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_1, role=self.role
|
content_object=self.document_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -89,7 +94,9 @@ class PermissionTestCase(TestCase):
|
|||||||
self.fail('PermissionDenied exception was not expected.')
|
self.fail('PermissionDenied exception was not expected.')
|
||||||
|
|
||||||
def test_filtering_with_permissions(self):
|
def test_filtering_with_permissions(self):
|
||||||
acl = AccessControlList.objects.create(
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_1, role=self.role
|
content_object=self.document_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -102,7 +109,7 @@ class PermissionTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_check_access_with_inherited_acl(self):
|
def test_check_access_with_inherited_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -116,12 +123,12 @@ class PermissionTestCase(TestCase):
|
|||||||
self.fail('PermissionDenied exception was not expected.')
|
self.fail('PermissionDenied exception was not expected.')
|
||||||
|
|
||||||
def test_check_access_with_inherited_acl_and_local_acl(self):
|
def test_check_access_with_inherited_acl_and_local_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_3, role=self.role
|
content_object=self.document_3, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -135,7 +142,9 @@ class PermissionTestCase(TestCase):
|
|||||||
self.fail('PermissionDenied exception was not expected.')
|
self.fail('PermissionDenied exception was not expected.')
|
||||||
|
|
||||||
def test_filtering_with_inherited_permissions(self):
|
def test_filtering_with_inherited_permissions(self):
|
||||||
acl = AccessControlList.objects.create(
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -144,10 +153,6 @@ class PermissionTestCase(TestCase):
|
|||||||
permission=permission_document_view, user=self.user,
|
permission=permission_document_view, user=self.user,
|
||||||
queryset=Document.objects.all()
|
queryset=Document.objects.all()
|
||||||
)
|
)
|
||||||
|
|
||||||
# Since document_1 and document_2 are of document_type_1
|
|
||||||
# they are the only ones that should be returned
|
|
||||||
|
|
||||||
self.assertTrue(self.document_1 in result)
|
self.assertTrue(self.document_1 in result)
|
||||||
self.assertTrue(self.document_2 in result)
|
self.assertTrue(self.document_2 in result)
|
||||||
self.assertTrue(self.document_3 not in result)
|
self.assertTrue(self.document_3 not in result)
|
||||||
@@ -155,12 +160,12 @@ class PermissionTestCase(TestCase):
|
|||||||
def test_filtering_with_inherited_permissions_and_local_acl(self):
|
def test_filtering_with_inherited_permissions_and_local_acl(self):
|
||||||
self.role.permissions.add(permission_document_view.stored_permission)
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_3, role=self.role
|
content_object=self.document_3, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from user_management.tests import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from ..models import AccessControlList
|
from ..models import AccessControlList
|
||||||
from ..permissions import permission_acl_edit, permission_acl_view
|
from ..permissions import permission_acl_edit
|
||||||
|
|
||||||
|
|
||||||
class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||||
@@ -26,35 +26,6 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
def test_acl_create_view_no_permission(self):
|
def test_acl_create_view_no_permission(self):
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
response = self.get(
|
|
||||||
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
|
||||||
'role': self.role.pk
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertEquals(response.status_code, 403)
|
|
||||||
self.assertEqual(AccessControlList.objects.count(), 0)
|
|
||||||
|
|
||||||
def test_acl_create_view_with_permission(self):
|
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
|
||||||
|
|
||||||
self.role.permissions.add(
|
|
||||||
permission_acl_edit.stored_permission
|
|
||||||
)
|
|
||||||
|
|
||||||
response = self.get(
|
|
||||||
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
|
||||||
'role': self.role.pk
|
|
||||||
}, follow=True
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertContains(
|
|
||||||
response, text=self.document.label, status_code=200
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_acl_create_view_post_no_permission(self):
|
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
|
||||||
|
|
||||||
response = self.post(
|
response = self.post(
|
||||||
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
||||||
'role': self.role.pk
|
'role': self.role.pk
|
||||||
@@ -62,9 +33,9 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertEquals(response.status_code, 403)
|
self.assertEquals(response.status_code, 403)
|
||||||
self.assertEqual(AccessControlList.objects.count(), 0)
|
self.assertEqual(AccessControlList.on_organization.count(), 0)
|
||||||
|
|
||||||
def test_acl_create_view_with_post_permission(self):
|
def test_acl_create_view_with_permission(self):
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
self.role.permissions.add(
|
self.role.permissions.add(
|
||||||
@@ -78,7 +49,7 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertContains(response, text='created', status_code=200)
|
self.assertContains(response, text='created', status_code=200)
|
||||||
self.assertEqual(AccessControlList.objects.count(), 1)
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
|
|
||||||
def test_acl_create_duplicate_view_with_permission(self):
|
def test_acl_create_duplicate_view_with_permission(self):
|
||||||
"""
|
"""
|
||||||
@@ -86,7 +57,7 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
Result: Should redirect to existing ACL for object + role combination
|
Result: Should redirect to existing ACL for object + role combination
|
||||||
"""
|
"""
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document, role=self.role
|
content_object=self.document, role=self.role
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -105,8 +76,8 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
self.assertContains(
|
self.assertContains(
|
||||||
response, text='vailable permissions', status_code=200
|
response, text='vailable permissions', status_code=200
|
||||||
)
|
)
|
||||||
self.assertEqual(AccessControlList.objects.count(), 1)
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
self.assertEqual(AccessControlList.objects.first().pk, acl.pk)
|
self.assertEqual(AccessControlList.on_organization.first().pk, acl.pk)
|
||||||
|
|
||||||
def test_orphan_acl_create_view_with_permission(self):
|
def test_orphan_acl_create_view_with_permission(self):
|
||||||
"""
|
"""
|
||||||
@@ -137,61 +108,4 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
self.assertNotContains(response, text='optgroup', status_code=200)
|
self.assertNotContains(response, text='optgroup', status_code=200)
|
||||||
self.assertEqual(AccessControlList.objects.count(), 1)
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
|
|
||||||
def test_acl_list_view_no_permission(self):
|
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
|
||||||
|
|
||||||
document = self.document.add_as_recent_document_for_user(
|
|
||||||
self.user
|
|
||||||
).document
|
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
|
||||||
content_object=document, role=self.role
|
|
||||||
)
|
|
||||||
acl.permissions.add(permission_acl_edit.stored_permission)
|
|
||||||
|
|
||||||
content_type = ContentType.objects.get_for_model(document)
|
|
||||||
|
|
||||||
view_arguments = {
|
|
||||||
'app_label': content_type.app_label,
|
|
||||||
'model': content_type.model,
|
|
||||||
'object_id': document.pk
|
|
||||||
}
|
|
||||||
|
|
||||||
response = self.get(
|
|
||||||
viewname='acls:acl_list', kwargs=view_arguments
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertNotContains(response, text=document.label, status_code=403)
|
|
||||||
self.assertNotContains(response, text='otal: 1', status_code=403)
|
|
||||||
|
|
||||||
def test_acl_list_view_with_permission(self):
|
|
||||||
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
|
||||||
|
|
||||||
self.role.permissions.add(
|
|
||||||
permission_acl_view.stored_permission
|
|
||||||
)
|
|
||||||
|
|
||||||
document = self.document.add_as_recent_document_for_user(
|
|
||||||
self.user
|
|
||||||
).document
|
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
|
||||||
content_object=document, role=self.role
|
|
||||||
)
|
|
||||||
acl.permissions.add(permission_acl_view.stored_permission)
|
|
||||||
|
|
||||||
content_type = ContentType.objects.get_for_model(document)
|
|
||||||
|
|
||||||
view_arguments = {
|
|
||||||
'app_label': content_type.app_label,
|
|
||||||
'model': content_type.model,
|
|
||||||
'object_id': document.pk
|
|
||||||
}
|
|
||||||
|
|
||||||
response = self.get(
|
|
||||||
viewname='acls:acl_list', kwargs=view_arguments
|
|
||||||
)
|
|
||||||
self.assertContains(response, text=document.label, status_code=200)
|
|
||||||
self.assertContains(response, text='otal: 1', status_code=200)
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
from django.conf.urls import url
|
from django.conf.urls import patterns, url
|
||||||
|
|
||||||
from .views import (
|
from .views import (
|
||||||
ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView
|
ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView
|
||||||
)
|
)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = patterns(
|
||||||
|
'acls.views',
|
||||||
url(
|
url(
|
||||||
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/create/$',
|
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/create/$',
|
||||||
ACLCreateView.as_view(), name='acl_create'
|
ACLCreateView.as_view(), name='acl_create'
|
||||||
@@ -20,4 +21,4 @@ urlpatterns = [
|
|||||||
r'^(?P<pk>\d+)/permissions/$', ACLPermissionsView.as_view(),
|
r'^(?P<pk>\d+)/permissions/$', ACLPermissionsView.as_view(),
|
||||||
name='acl_permissions'
|
name='acl_permissions'
|
||||||
),
|
),
|
||||||
]
|
)
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import itertools
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import Http404, HttpResponseRedirect
|
from django.http import Http404, HttpResponseRedirect
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
@@ -13,7 +14,7 @@ from common.views import (
|
|||||||
AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
|
AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
|
||||||
SingleObjectListView
|
SingleObjectListView
|
||||||
)
|
)
|
||||||
from permissions import PermissionNamespace
|
from permissions import Permission, PermissionNamespace
|
||||||
from permissions.models import StoredPermission
|
from permissions.models import StoredPermission
|
||||||
|
|
||||||
from .classes import ModelPermission
|
from .classes import ModelPermission
|
||||||
@@ -25,37 +26,35 @@ logger = logging.getLogger(__name__)
|
|||||||
|
|
||||||
class ACLCreateView(SingleObjectCreateView):
|
class ACLCreateView(SingleObjectCreateView):
|
||||||
fields = ('role',)
|
fields = ('role',)
|
||||||
model = AccessControlList
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
self.object_content_type = get_object_or_404(
|
self.content_type = get_object_or_404(
|
||||||
ContentType, app_label=self.kwargs['app_label'],
|
ContentType, app_label=self.kwargs['app_label'],
|
||||||
model=self.kwargs['model']
|
model=self.kwargs['model']
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.content_object = self.object_content_type.get_object_for_this_type(
|
self.content_object = self.content_type.get_object_for_this_type(
|
||||||
pk=self.kwargs['object_id']
|
pk=self.kwargs['object_id']
|
||||||
)
|
)
|
||||||
except self.object_content_type.model_class().DoesNotExist:
|
except self.content_type.model_class().DoesNotExist:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
AccessControlList.objects.check_access(
|
try:
|
||||||
permissions=permission_acl_edit, user=request.user,
|
Permission.check_permissions(
|
||||||
obj=self.content_object
|
request.user, permissions=(permission_acl_edit,)
|
||||||
)
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permission_acl_edit, request.user, self.content_object
|
||||||
|
)
|
||||||
|
|
||||||
return super(ACLCreateView, self).dispatch(request, *args, **kwargs)
|
return super(ACLCreateView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_instance_extra_data(self):
|
|
||||||
return {
|
|
||||||
'content_object': self.content_object
|
|
||||||
}
|
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
try:
|
try:
|
||||||
acl = AccessControlList.objects.get(
|
acl = AccessControlList.on_organization.get(
|
||||||
content_type=self.object_content_type,
|
content_type=self.content_type,
|
||||||
object_id=self.content_object.pk,
|
object_id=self.content_object.pk,
|
||||||
role=form.cleaned_data['role']
|
role=form.cleaned_data['role']
|
||||||
)
|
)
|
||||||
@@ -74,6 +73,14 @@ class ACLCreateView(SingleObjectCreateView):
|
|||||||
) % self.content_object
|
) % self.content_object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_instance_extra_data(self):
|
||||||
|
return {
|
||||||
|
'content_object': self.content_object
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return AccessControlList.on_organization.all()
|
||||||
|
|
||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
if self.object.pk:
|
if self.object.pk:
|
||||||
return reverse('acls:acl_permissions', args=(self.object.pk,))
|
return reverse('acls:acl_permissions', args=(self.object.pk,))
|
||||||
@@ -82,15 +89,17 @@ class ACLCreateView(SingleObjectCreateView):
|
|||||||
|
|
||||||
|
|
||||||
class ACLDeleteView(SingleObjectDeleteView):
|
class ACLDeleteView(SingleObjectDeleteView):
|
||||||
model = AccessControlList
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||||
|
|
||||||
AccessControlList.objects.check_access(
|
try:
|
||||||
permissions=permission_acl_edit, user=request.user,
|
Permission.check_permissions(
|
||||||
obj=acl.content_object
|
request.user, permissions=(permission_acl_edit,)
|
||||||
)
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permission_acl_edit, request.user, acl.content_object
|
||||||
|
)
|
||||||
|
|
||||||
return super(ACLDeleteView, self).dispatch(request, *args, **kwargs)
|
return super(ACLDeleteView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
@@ -109,25 +118,32 @@ class ACLDeleteView(SingleObjectDeleteView):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return AccessControlList.on_organization.all()
|
||||||
|
|
||||||
|
|
||||||
class ACLListView(SingleObjectListView):
|
class ACLListView(SingleObjectListView):
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
self.object_content_type = get_object_or_404(
|
self.content_type = get_object_or_404(
|
||||||
ContentType, app_label=self.kwargs['app_label'],
|
ContentType, app_label=self.kwargs['app_label'],
|
||||||
model=self.kwargs['model']
|
model=self.kwargs['model']
|
||||||
)
|
)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
self.content_object = self.object_content_type.get_object_for_this_type(
|
self.content_object = self.content_type.get_object_for_this_type(
|
||||||
pk=self.kwargs['object_id']
|
pk=self.kwargs['object_id']
|
||||||
)
|
)
|
||||||
except self.object_content_type.model_class().DoesNotExist:
|
except self.content_type.model_class().DoesNotExist:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
AccessControlList.objects.check_access(
|
try:
|
||||||
permissions=permission_acl_view, user=request.user,
|
Permission.check_permissions(
|
||||||
obj=self.content_object
|
request.user, permissions=(permission_acl_view,)
|
||||||
)
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permission_acl_view, request.user, self.content_object
|
||||||
|
)
|
||||||
|
|
||||||
return super(ACLListView, self).dispatch(request, *args, **kwargs)
|
return super(ACLListView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
@@ -139,8 +155,8 @@ class ACLListView(SingleObjectListView):
|
|||||||
}
|
}
|
||||||
|
|
||||||
def get_queryset(self):
|
def get_queryset(self):
|
||||||
return AccessControlList.objects.filter(
|
return AccessControlList.on_organization.filter(
|
||||||
content_type=self.object_content_type, object_id=self.content_object.pk
|
content_type=self.content_type, object_id=self.content_object.pk
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -170,10 +186,14 @@ class ACLPermissionsView(AssignRemoveView):
|
|||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||||
|
|
||||||
AccessControlList.objects.check_access(
|
try:
|
||||||
permissions=permission_acl_edit, user=request.user,
|
Permission.check_permissions(
|
||||||
obj=acl.content_object
|
request.user, permissions=(permission_acl_edit,)
|
||||||
)
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permission_acl_edit, request.user, acl.content_object
|
||||||
|
)
|
||||||
|
|
||||||
return super(
|
return super(
|
||||||
ACLPermissionsView, self
|
ACLPermissionsView, self
|
||||||
|
|||||||