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:
|
||||
- mysql:latest
|
||||
- mysql
|
||||
- postgres
|
||||
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 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:
|
||||
POSTGRES_DB: "mayan_edms"
|
||||
POSTGRES_PASSWORD: "postgres"
|
||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||
MYSQL_DATABASE: "mayan_edms"
|
||||
test:mysql:
|
||||
script:
|
||||
- apt-get install -qq libmysqlclient-dev
|
||||
- pip install -r requirements/testing.txt
|
||||
- pip install mysql-python
|
||||
- apt-get install -qq mysql-client
|
||||
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;"
|
||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||
tags:
|
||||
- mysql
|
||||
test:postgres:
|
||||
script:
|
||||
- apt-get install -qq libpq-dev
|
||||
- pip install -r requirements/testing.txt
|
||||
- pip install psycopg2
|
||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||
tags:
|
||||
- postgres
|
||||
test:sqlite:
|
||||
script:
|
||||
- pip install -r requirements/testing.txt
|
||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||
#test:mysql:
|
||||
# script:
|
||||
# - pip install -r requirements/testing.txt
|
||||
# - pip install -q mysql-python
|
||||
# - apt-get install -qq mysql-client
|
||||
# - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "ALTER DATABASE $MYSQL_DATABASE CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
|
||||
# - 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
|
||||
# tags:
|
||||
# - mysql
|
||||
#test:postgres:
|
||||
# script:
|
||||
# - pip install -r requirements/testing.txt
|
||||
# - pip install -q psycopg2
|
||||
# - coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
||||
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||
# tags:
|
||||
# - postgres
|
||||
#test:sqlite:
|
||||
# script:
|
||||
# - pip install -r requirements/testing.txt
|
||||
# - coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
||||
# - 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)
|
||||
==================
|
||||
- Sort document languages and user profile locale language lists. GitLab issue #292.
|
||||
|
||||
31
Makefile
@@ -1,5 +1,12 @@
|
||||
.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:
|
||||
@echo
|
||||
@@ -25,10 +32,6 @@ help:
|
||||
@echo "release - Package (sdist and wheel) and upload a release."
|
||||
|
||||
@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
|
||||
@@ -49,15 +52,16 @@ clean-pyc:
|
||||
# Testing
|
||||
|
||||
test:
|
||||
./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
||||
python -Wall ./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
||||
|
||||
test-all:
|
||||
./manage.py runtests --settings=mayan.settings.testing --nomigrations
|
||||
python -Wall ./manage.py runtests --settings=mayan.settings.testing --nomigrations
|
||||
|
||||
|
||||
# Documentation
|
||||
|
||||
docs_serve:
|
||||
$(BROWSER) http://127.0.0.1:8000
|
||||
cd docs;make livehtml
|
||||
|
||||
|
||||
@@ -105,18 +109,5 @@ wheel: clean
|
||||
# Dev server
|
||||
|
||||
runserver:
|
||||
./manage.py runserver
|
||||
|
||||
runserver_plus:
|
||||
$(BROWSER) http://127.0.0.1:8000
|
||||
./manage.py runserver_plus --settings=mayan.settings.development
|
||||
|
||||
shell_plus:
|
||||
./manage.py shell_plus --settings=mayan.settings.development
|
||||
|
||||
|
||||
# Security
|
||||
|
||||
safety_check:
|
||||
safety check
|
||||
|
||||
./manage.py runserver
|
||||
|
||||
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|
|
||||
|
||||
@@ -33,13 +33,22 @@ To install Mayan EDMS, simply do:
|
||||
|
||||
$ virtualenv venv
|
||||
$ source venv/bin/activate
|
||||
(venv) $ pip install mayan-edms
|
||||
(venv) $ mayan-edms.py initialsetup
|
||||
(venv) $ mayan-edms.py runserver
|
||||
$ pip install mayan-edms
|
||||
$ mayan-edms.py initialsetup
|
||||
$ mayan-edms.py runserver
|
||||
|
||||
Point your browser to 127.0.0.1:8000 and use the automatically created admin
|
||||
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
|
||||
.. _Video demostration: http://bit.ly/pADNXv
|
||||
@@ -47,19 +56,20 @@ account.
|
||||
.. _Translations: https://www.transifex.com/projects/p/mayan-edms/
|
||||
.. _Mailing list (via Google Groups): http://groups.google.com/group/mayan-edms
|
||||
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
.. _`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
|
||||
:target: https://gitlab.com/mayan-edms/mayan-edms/commits/master
|
||||
.. |Logo| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
|
||||
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
||||
.. |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
|
||||
: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
|
||||
.. |Coverage badge| image:: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
|
||||
:target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
|
||||
.. |Documentation| image:: https://readthedocs.org/projects/mayan/badge/?version=latest
|
||||
:target: http://mayan.readthedocs.io/en/latest
|
||||
.. |Python version| images:: https://img.shields.io/pypi/pyversions/mayan-edms.svg
|
||||
|
||||
|Analytics|
|
||||
|
||||
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_html_image_format = "SVG"
|
||||
blockdiag_latex_image_format = "PDF"
|
||||
blockdiag_tex_image_format = "PDF"
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
|
||||
@@ -10,14 +10,12 @@ and install it from PyPI with the following commands:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ sudo apt-get install libjpeg-dev libmagic1 libpng-dev \
|
||||
libreoffice libtiff-dev gcc ghostscript gnupg python-dev \
|
||||
python-virtualenv tesseract-ocr poppler-utils -y
|
||||
$ virtualenv venv
|
||||
$ source venv/bin/activate
|
||||
(venv) pip install mayan-edms
|
||||
(venv) mayan-edms.py initialsetup
|
||||
(venv) mayan-edms.py runserver
|
||||
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
|
||||
virtualenv venv
|
||||
source venv/bin/activate
|
||||
pip install mayan-edms
|
||||
mayan-edms.py initialsetup
|
||||
mayan-edms.py runserver
|
||||
|
||||
Point your browser to 127.0.0.1:8000 and use the automatically created admin
|
||||
account.
|
||||
@@ -38,6 +36,7 @@ account.
|
||||
Roadmap <topics/roadmap>
|
||||
Translations <topics/translations>
|
||||
Contributors <topics/contributors>
|
||||
Screenshots <topics/screenshots>
|
||||
Licensing <topics/license>
|
||||
FAQ <topics/faq>
|
||||
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::
|
||||
:maxdepth: 1
|
||||
|
||||
2.2
|
||||
2.1.6
|
||||
2.1.5
|
||||
2.1.4
|
||||
2.1.3
|
||||
2.1.2
|
||||
2.1.1
|
||||
2.1
|
||||
|
||||
@@ -2,17 +2,15 @@
|
||||
Deploying
|
||||
=========
|
||||
|
||||
Below are some ways to deploye and use Mayan EDMS. Do use more than one method.
|
||||
|
||||
OS "bare metal" method
|
||||
======================
|
||||
OS "bare metal"
|
||||
===============
|
||||
|
||||
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.
|
||||
These instructions are independent of the instructions mentioned in the
|
||||
:doc:`installation` chapter but assume you have already made a test install to
|
||||
test the compatibility of your operating system. These instruction are for
|
||||
Ubuntu 16.10.
|
||||
Ubuntu 15.04.
|
||||
|
||||
Switch to superuser::
|
||||
|
||||
@@ -22,12 +20,8 @@ Install all system dependencies::
|
||||
|
||||
apt-get install nginx supervisor redis-server postgresql \
|
||||
libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice \
|
||||
libtiff-dev gcc ghostscript gnupg python-dev python-virtualenv \
|
||||
tesseract-ocr 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
|
||||
libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv \
|
||||
tesseract-ocr unpaper poppler-utils -y
|
||||
|
||||
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'
|
||||
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::
|
||||
|
||||
mayan-edms.py initialsetup
|
||||
@@ -196,12 +186,11 @@ Make the installation directory readable and writable by the webserver user::
|
||||
|
||||
Restart the services::
|
||||
|
||||
systemctl enable supervisor
|
||||
systemctl restart supervisor
|
||||
systemctl restart nginx
|
||||
/etc/init.d/nginx restart
|
||||
/etc/init.d/supervisor restart
|
||||
|
||||
Docker method
|
||||
=============
|
||||
Docker
|
||||
======
|
||||
|
||||
Deploy the Docker image stack::
|
||||
|
||||
@@ -216,8 +205,8 @@ with::
|
||||
docker logs mayan-edms
|
||||
|
||||
|
||||
Docker Compose method
|
||||
=====================
|
||||
Docker Compose
|
||||
==============
|
||||
|
||||
Create a file named ``environment`` with the following content::
|
||||
|
||||
@@ -259,8 +248,8 @@ with::
|
||||
|
||||
docker logs mayanedms_mayan-edms_1
|
||||
|
||||
Vagrant method
|
||||
==============
|
||||
Vagrant
|
||||
=======
|
||||
Make sure you have Vagrant and a provider properly installed as per
|
||||
https://docs.vagrantup.com/v2/installation/index.html
|
||||
Clone the repository and execute::
|
||||
|
||||
@@ -6,8 +6,8 @@ Development
|
||||
Mayan EDMS is under active development, and contributions are welcome.
|
||||
|
||||
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
|
||||
request on GitLab_.
|
||||
issue on the `GitLab issue tracker`_. To submit patches, please send a pull
|
||||
request on GitLab_. Make sure to add yourself to the :ref:`contributors` file.
|
||||
|
||||
.. _GitLab: https://gitlab.com/mayan-edms/mayan-edms/
|
||||
.. _`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?**
|
||||
|
||||
* 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.
|
||||
If not using a virtualenv, pip would install Mayan's dependencies
|
||||
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?**
|
||||
|
||||
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
|
||||
file_storage
|
||||
backups
|
||||
screenshots
|
||||
|
||||
@@ -2,9 +2,8 @@
|
||||
OCR backend
|
||||
===========
|
||||
|
||||
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract
|
||||
(https://github.com/tesseract-ocr/tesseract/), but it can
|
||||
use other engines. To support other engines crate a wrapper that subclasess the
|
||||
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract, but it can
|
||||
use other engines. To support other engines a wrapper that subclasess the
|
||||
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
||||
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``
|
||||
@@ -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"``
|
||||
|
||||
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 version 1 of `GNU Privacy Guard`_ is supported for now.
|
||||
|
||||
.. _`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
|
||||
when clicked to allow selection of files in the user's computer to be
|
||||
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
|
||||
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
|
||||
@@ -17,19 +20,6 @@ The current document sources supported are:
|
||||
the ``IMAP`` protocol.
|
||||
- Watch folder - A filesystem folder that is scanned periodically for files.
|
||||
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
|
||||
compressed files which are decompressed and their content uploaded as separate
|
||||
|
||||
19
manage.py
@@ -4,20 +4,7 @@ import sys
|
||||
|
||||
if __name__ == "__main__":
|
||||
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
|
||||
|
||||
__title__ = 'Mayan EDMS'
|
||||
__version__ = '2.1.6'
|
||||
__build__ = 0x020106
|
||||
__version__ = '2.1.2'
|
||||
__build__ = 0x020102
|
||||
__author__ = 'Roberto Rosario'
|
||||
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
||||
__description__ = 'Free Open Source Electronic Document Management System'
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
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 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(context):
|
||||
ContentType = apps.get_model(
|
||||
app_label='contenttypes', model_name='ContentType'
|
||||
)
|
||||
|
||||
content_type = ContentType.objects.get_for_model(
|
||||
context[variable_name]
|
||||
)
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\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 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "الصلاحيات"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +52,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "لا شيء"
|
||||
|
||||
@@ -81,7 +75,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +172,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +194,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: bg\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Разрешения"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -46,19 +45,13 @@ msgstr "Недостатъчен достъп."
|
||||
|
||||
#: models.py:44
|
||||
msgid "Access entry"
|
||||
msgstr "достъп вписване"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:45
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Няма"
|
||||
|
||||
@@ -68,11 +61,11 @@ msgstr "Контролни списъци за достъп"
|
||||
|
||||
#: permissions.py:10
|
||||
msgid "Edit ACLs"
|
||||
msgstr "Редактиране на контролни списъци за достъп"
|
||||
msgstr ""
|
||||
|
||||
#: permissions.py:13
|
||||
msgid "View ACLs"
|
||||
msgstr "Преглед на контролни списъци за достъп"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:78
|
||||
#, python-format
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\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%10<=4 && (n%100<10 || n%100>=20) ? 1 : 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"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Dozvole"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +52,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Nijedno"
|
||||
|
||||
@@ -81,7 +75,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +172,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +194,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: da\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Ingen"
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,44 +1,42 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Berny <berny@bernhard-marx.de>, 2015
|
||||
# Tobias Paepke <tobias.paepke@paepke.net>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-31 18:56+0000\n"
|
||||
"Last-Translator: Tobias Paepke <tobias.paepke@paepke.net>\n"
|
||||
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: de_DE\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "Zugriffsberechtigungen"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Berechtigungen"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Rolle"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Neue Berechtigung"
|
||||
|
||||
@@ -54,13 +52,7 @@ msgstr "Berechtigungseintrag"
|
||||
msgid "Access entries"
|
||||
msgstr "Berechtigungseinträge"
|
||||
|
||||
#: 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 "Berechtigungen \"%(permissions)s\" zur Rolle \"%(role)s\" für \"%(object)s\""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Keine"
|
||||
|
||||
@@ -83,7 +75,6 @@ msgstr "Neue Zugriffsberechtigung für %s"
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr "ACL \"%s\" löschen"
|
||||
|
||||
@@ -107,7 +98,8 @@ msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
|
||||
|
||||
#: views.py:242
|
||||
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"
|
||||
#~ 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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
|
||||
@@ -18,11 +18,11 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
#, fuzzy
|
||||
msgid "Permissions"
|
||||
msgstr "permissions"
|
||||
@@ -33,11 +33,11 @@ msgstr "permissions"
|
||||
msgid "Role"
|
||||
msgstr "Roles"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#: links.py:34
|
||||
#, fuzzy
|
||||
#| msgid "View ACLs"
|
||||
msgid "New ACL"
|
||||
@@ -57,13 +57,7 @@ msgstr "access entry"
|
||||
msgid "Access entries"
|
||||
msgstr "access entries"
|
||||
|
||||
#: models.py:48
|
||||
#, fuzzy, python-format
|
||||
#| msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
|
||||
msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
@@ -197,6 +191,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
|
||||
@@ -11,8 +11,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:38+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-05-09 01:48+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@@ -21,11 +21,11 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "LCAs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permisos"
|
||||
|
||||
@@ -34,11 +34,11 @@ msgstr "Permisos"
|
||||
msgid "Role"
|
||||
msgstr "Rol"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: links.py:35
|
||||
#: links.py:34
|
||||
#| msgid "View ACLs"
|
||||
msgid "New ACL"
|
||||
msgstr "Nueva LCA"
|
||||
@@ -55,13 +55,7 @@ msgstr "Entrada de acceso"
|
||||
msgid "Access entries"
|
||||
msgstr "Entradas de acceso"
|
||||
|
||||
#: 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 "Permisos \"%(permissions)s\" para el rol \"%(role)s\" para \"%(object)s\""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fa\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "مجوزها"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "نقش"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "حذف"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr "ورودی دسترسی"
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "هیچکدام."
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
|
||||
@@ -9,35 +9,34 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||
"Last-Translator: Christophe CHAUVET <christophe.chauvet@gmail.com>\n"
|
||||
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||
"fr/)\n"
|
||||
"Language: fr\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "Droits"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permissions"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Rôle"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Suppression"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Nouveau droit"
|
||||
|
||||
@@ -53,13 +52,7 @@ msgstr "Entrée d'accès"
|
||||
msgid "Access entries"
|
||||
msgstr "Entrées d'accès"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Aucun"
|
||||
|
||||
@@ -82,7 +75,6 @@ msgstr "Nouvelle liste de contrôle d'accès pour: %s"
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: hu\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACL-ek"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Semmi"
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2015-09-24 05:15+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: id\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr ""
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,45 +1,43 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Marco Camplese <marco.camplese.mc@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-30 21:18+0000\n"
|
||||
"Last-Translator: Marco Camplese <marco.camplese.mc@gmail.com>\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||
"language/it/)\n"
|
||||
"Language: it\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permessi"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Ruolo"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Cancella"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Nuova ACL"
|
||||
msgstr ""
|
||||
|
||||
#: managers.py:85
|
||||
msgid "Insufficient access."
|
||||
@@ -53,13 +51,7 @@ msgstr "Voce di accesso"
|
||||
msgid "Access entries"
|
||||
msgstr "Voci di accesso"
|
||||
|
||||
#: 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 "Permessi \"%(permissions)s\" del ruolo \"%(role)s\" per \"%(object)s\""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Nessuna "
|
||||
|
||||
@@ -78,13 +70,12 @@ msgstr "Visualizza ACL"
|
||||
#: views.py:78
|
||||
#, python-format
|
||||
msgid "New access control lists for: %s"
|
||||
msgstr "Nuova lista di controllo accesso per: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr "Cancella ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:151
|
||||
#, python-format
|
||||
@@ -102,11 +93,11 @@ msgstr "Autorizzazioni concesse "
|
||||
#: views.py:222
|
||||
#, python-format
|
||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||
msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\""
|
||||
msgstr ""
|
||||
|
||||
#: views.py:242
|
||||
msgid "Disabled permissions are inherited from a parent object."
|
||||
msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,44 +1,42 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Evelijn Saaltink <evelijnsaaltink@gmail.com>, 2016
|
||||
# Justin Albstbstmeijer <justin@albstmeijer.nl>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 12:43+0000\n"
|
||||
"Last-Translator: Evelijn Saaltink <evelijnsaaltink@gmail.com>\n"
|
||||
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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: nl_NL\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: nl_NL\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "Authorisatielijsten"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permissies"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Gebruikersrol"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Verwijder"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Nieuwe authorisatielijst"
|
||||
|
||||
@@ -54,13 +52,7 @@ msgstr "Authorisatie invoer"
|
||||
msgid "Access entries"
|
||||
msgstr "Authorisaties invoer"
|
||||
|
||||
#: 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 "Permissies \"%(permissions)s\" voor gebruikersrol \"%(role)s\" voor \"%(object)s\""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Geen"
|
||||
|
||||
@@ -83,7 +75,6 @@ msgstr "Nieuwe authorisatielijsten voor: %s"
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,43 +1,43 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Wojtek Warczakowski <w.warczakowski@gmail.com>, 2016
|
||||
# Wojciech Warczakowski <w.warczakowski@gmail.com>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||
"Last-Translator: Wojciech Warczakowski <w.warczakowski@gmail.com>\n"
|
||||
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||
"pl/)\n"
|
||||
"Language: pl\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pl\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=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"
|
||||
msgstr "Listy ACL"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Uprawnienia"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Rola"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Usuń"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Nowa lista ACL"
|
||||
|
||||
@@ -53,13 +53,7 @@ msgstr "Zgłoszenie dostępu"
|
||||
msgid "Access entries"
|
||||
msgstr "Zgłoszenia dostępu"
|
||||
|
||||
#: 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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Brak"
|
||||
|
||||
@@ -82,7 +76,6 @@ msgstr "Nowe listy ACL dla: %s"
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete 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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pt\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACL's"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permissões"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Eliminar"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,45 +1,43 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Aline Freitas <aline@alinefreitas.com.br>, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-11-17 22:31+0000\n"
|
||||
"Last-Translator: Aline Freitas <aline@alinefreitas.com.br>\n"
|
||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||
"Last-Translator: Roberto Rosario\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: pt_BR\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permissões"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Regras"
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Excluir"
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Nova ACL"
|
||||
msgstr ""
|
||||
|
||||
#: managers.py:85
|
||||
msgid "Insufficient access."
|
||||
@@ -53,13 +51,7 @@ msgstr "Acesso entrada"
|
||||
msgid "Access entries"
|
||||
msgstr "Entradas de acesso"
|
||||
|
||||
#: 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 "Permissões \"%(permissions)s\" do papel \"%(role)s\" para \"%(object)s\""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Nenhum"
|
||||
|
||||
@@ -78,13 +70,12 @@ msgstr "Visualizar ACLs"
|
||||
#: views.py:78
|
||||
#, python-format
|
||||
msgid "New access control lists for: %s"
|
||||
msgstr "Nova lista de controle de acesso para: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr "Apagar ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:151
|
||||
#, python-format
|
||||
@@ -93,20 +84,20 @@ msgstr "listas de controle de acesso para: %s"
|
||||
|
||||
#: views.py:162
|
||||
msgid "Available permissions"
|
||||
msgstr "Permissões disponíveis"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:163
|
||||
msgid "Granted permissions"
|
||||
msgstr "Permissões outorgadas"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:222
|
||||
#, python-format
|
||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||
msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\""
|
||||
msgstr ""
|
||||
|
||||
#: views.py:242
|
||||
msgid "Disabled permissions are inherited from a parent object."
|
||||
msgstr "As permissões inativas foram herdadas de um objeto precedente."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "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?"
|
||||
#~ 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 ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(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."
|
||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid "%(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 ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,42 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\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)))?2:1));\n"
|
||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||
"2:1));\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACL-uri"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "Permisiuni"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Șterge"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +52,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Nici unul"
|
||||
|
||||
@@ -81,7 +75,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +172,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +194,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,67 +1,61 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# lilo.panic, 2016
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\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%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"
|
||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
|
||||
"%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
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"
|
||||
msgstr "Разрешения"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr "Роль"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr "Удалить"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr "Создать СУД"
|
||||
msgstr ""
|
||||
|
||||
#: managers.py:85
|
||||
msgid "Insufficient access."
|
||||
msgstr "Неполный доступ."
|
||||
msgstr "Недостаточный доступ."
|
||||
|
||||
#: models.py:44
|
||||
msgid "Access entry"
|
||||
msgstr "Элемент доступа"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:45
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Пусто"
|
||||
msgstr "Ни один"
|
||||
|
||||
#: permissions.py:7
|
||||
msgid "Access control lists"
|
||||
@@ -69,44 +63,43 @@ msgstr "Списки контроля доступа"
|
||||
|
||||
#: permissions.py:10
|
||||
msgid "Edit ACLs"
|
||||
msgstr "Редактировать СУДы"
|
||||
msgstr "Редактировать списки ACL"
|
||||
|
||||
#: permissions.py:13
|
||||
msgid "View ACLs"
|
||||
msgstr "Просмотр СУДов"
|
||||
msgstr "Просмотр списков ACL"
|
||||
|
||||
#: views.py:78
|
||||
#, python-format
|
||||
msgid "New access control lists for: %s"
|
||||
msgstr "Новый СУД для: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr "Удалить СУД: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:151
|
||||
#, python-format
|
||||
msgid "Access control lists for: %s"
|
||||
msgstr "СУДы для: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:162
|
||||
msgid "Available permissions"
|
||||
msgstr "Доступные разрешения"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:163
|
||||
msgid "Granted permissions"
|
||||
msgstr "Предоставленные разрешения"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:222
|
||||
#, python-format
|
||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||
msgstr "Права роли \"%(role)s\" для \"%(object)s\""
|
||||
msgstr ""
|
||||
|
||||
#: views.py:242
|
||||
msgid "Disabled permissions are inherited from a parent object."
|
||||
msgstr "Отключенные права наследуются от родительского объекта."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "New holder"
|
||||
#~ msgstr "New holder"
|
||||
@@ -180,6 +173,9 @@ msgstr "Отключенные права наследуются от родит
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -199,8 +195,10 @@ msgstr "Отключенные права наследуются от родит
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,78 +1,72 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-11-17 08:58+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\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%100==4 ? 2 : 3);\n"
|
||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
|
||||
"%100==4 ? 2 : 3);\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
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"
|
||||
msgstr "Pravice"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
#: managers.py:85
|
||||
msgid "Insufficient access."
|
||||
msgstr "Nezadosten dostop"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:44
|
||||
msgid "Access entry"
|
||||
msgstr "Vstopna točka"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:45
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "Brez"
|
||||
|
||||
#: permissions.py:7
|
||||
msgid "Access control lists"
|
||||
msgstr "Seznami za nadzor dostopa"
|
||||
msgstr ""
|
||||
|
||||
#: permissions.py:10
|
||||
msgid "Edit ACLs"
|
||||
msgstr "Uredi dostopne pravice"
|
||||
msgstr ""
|
||||
|
||||
#: permissions.py:13
|
||||
msgid "View ACLs"
|
||||
msgstr "Preglej dostopne pravice"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:78
|
||||
#, python-format
|
||||
@@ -81,14 +75,13 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:151
|
||||
#, python-format
|
||||
msgid "Access control lists for: %s"
|
||||
msgstr "Dostopne pravice za %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:162
|
||||
msgid "Available permissions"
|
||||
@@ -179,6 +172,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +194,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: vi_VN\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr ""
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "None"
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -1,42 +1,41 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
|
||||
"PO-Revision-Date: 2016-10-28 07:32+0000\n"
|
||||
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||
"PO-Revision-Date: 2016-03-21 21:03+0000\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"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Language: zh_CN\n"
|
||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||
|
||||
#: apps.py:14 links.py:31
|
||||
#: apps.py:14 links.py:30
|
||||
msgid "ACLs"
|
||||
msgstr "访问控制列表"
|
||||
|
||||
#: apps.py:22 links.py:40 models.py:36
|
||||
#: apps.py:22 links.py:38 models.py:36
|
||||
msgid "Permissions"
|
||||
msgstr "权限"
|
||||
|
||||
#: apps.py:26 models.py:38
|
||||
#| msgid "Roles"
|
||||
msgid "Role"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:27
|
||||
#: links.py:26
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:35
|
||||
#| msgid "View ACLs"
|
||||
#: links.py:34
|
||||
msgid "New ACL"
|
||||
msgstr ""
|
||||
|
||||
@@ -52,13 +51,7 @@ msgstr "访问入口"
|
||||
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 ""
|
||||
|
||||
#: models.py:64
|
||||
#: models.py:60
|
||||
msgid "None"
|
||||
msgstr "无"
|
||||
|
||||
@@ -81,7 +74,6 @@ msgstr ""
|
||||
|
||||
#: views.py:109
|
||||
#, python-format
|
||||
#| msgid "Default ACLs"
|
||||
msgid "Delete ACL: %s"
|
||||
msgstr ""
|
||||
|
||||
@@ -179,6 +171,9 @@ msgstr ""
|
||||
#~ 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?"
|
||||
|
||||
#~ msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
#~ msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#~ msgid ""
|
||||
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
#~ "%(object)s."
|
||||
@@ -198,8 +193,10 @@ msgstr ""
|
||||
#~ msgid "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."
|
||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
#~ msgid ""
|
||||
#~ "%(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"
|
||||
#~ msgstr "add new holder for: %s"
|
||||
|
||||
@@ -9,7 +9,6 @@ from django.db.models import Q
|
||||
from django.utils.translation import ugettext
|
||||
|
||||
from common.utils import return_attrib
|
||||
from permissions import Permission
|
||||
from permissions.models import StoredPermission
|
||||
|
||||
from .classes import ModelPermission
|
||||
@@ -52,100 +51,78 @@ class AccessControlListManager(models.Manager):
|
||||
return True
|
||||
|
||||
try:
|
||||
return Permission.check_permissions(
|
||||
requester=user, permissions=permissions
|
||||
)
|
||||
except PermissionDenied:
|
||||
try:
|
||||
stored_permissions = [
|
||||
permission.stored_permission for permission in permissions
|
||||
]
|
||||
except TypeError:
|
||||
# Not a list of permissions, just one
|
||||
stored_permissions = (permissions.stored_permission,)
|
||||
stored_permissions = [
|
||||
permission.stored_permission for permission in permissions
|
||||
]
|
||||
except TypeError:
|
||||
# Not a list of permissions, just one
|
||||
stored_permissions = [permissions.stored_permission]
|
||||
|
||||
if related:
|
||||
obj = return_attrib(obj, related)
|
||||
if related:
|
||||
obj = return_attrib(obj, related)
|
||||
|
||||
try:
|
||||
parent_accessor = ModelPermission.get_inheritance(obj._meta.model)
|
||||
except KeyError:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
parent_accessor = ModelPermission.get_inheritance(
|
||||
model=obj._meta.model
|
||||
return self.check_access(
|
||||
permissions, user, getattr(obj, parent_accessor)
|
||||
)
|
||||
except AttributeError:
|
||||
# AttributeError means non model objects: ie Statistics
|
||||
# These can't have ACLS so we raise PermissionDenied
|
||||
raise PermissionDenied
|
||||
except KeyError:
|
||||
except PermissionDenied:
|
||||
pass
|
||||
else:
|
||||
try:
|
||||
return self.check_access(
|
||||
permissions, user, getattr(obj, parent_accessor)
|
||||
)
|
||||
except PermissionDenied:
|
||||
pass
|
||||
|
||||
user_roles = []
|
||||
for group in user.groups.all():
|
||||
for role in group.roles.all():
|
||||
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
||||
return True
|
||||
user_roles = []
|
||||
for group in user.organization_groups.all():
|
||||
for role in group.roles.all():
|
||||
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
||||
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():
|
||||
raise PermissionDenied(ugettext('Insufficient access.'))
|
||||
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.'))
|
||||
|
||||
def filter_by_access(self, permission, user, queryset):
|
||||
if user.is_superuser or user.is_staff:
|
||||
return queryset
|
||||
|
||||
user_roles = []
|
||||
for group in user.organization_groups.all():
|
||||
for role in group.roles.all():
|
||||
user_roles.append(role)
|
||||
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
requester=user, permissions=(permission,)
|
||||
)
|
||||
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)
|
||||
parent_accessor = ModelPermission.get_inheritance(queryset.model)
|
||||
except KeyError:
|
||||
parent_acl_query = Q()
|
||||
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.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 .managers import AccessControlListManager
|
||||
@@ -30,6 +33,9 @@ class AccessControlList(models.Model):
|
||||
ct_field='content_type',
|
||||
fk_field='object_id',
|
||||
)
|
||||
organization = models.ForeignKey(
|
||||
Organization, default=get_current_organization
|
||||
)
|
||||
# TODO: limit choices to the permissions valid for the content_object
|
||||
permissions = models.ManyToManyField(
|
||||
StoredPermission, blank=True, related_name='acls',
|
||||
@@ -38,6 +44,7 @@ class AccessControlList(models.Model):
|
||||
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
|
||||
|
||||
objects = AccessControlListManager()
|
||||
on_organization = CurrentOrganizationManager()
|
||||
|
||||
class Meta:
|
||||
unique_together = ('content_type', 'object_id', 'role')
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django.contrib.auth import get_user_model
|
||||
from django.contrib.auth.models import Group
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from documents.models import Document, DocumentType
|
||||
from documents.permissions import permission_document_view
|
||||
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
||||
from organizations.tests.base import OrganizationTestCase
|
||||
from permissions.classes import Permission
|
||||
from permissions.models import Role
|
||||
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 ..models import AccessControlList
|
||||
@@ -19,13 +20,15 @@ TEST_DOCUMENT_TYPE_2 = 'test document type 2'
|
||||
|
||||
|
||||
@override_settings(OCR_AUTO_OCR=False)
|
||||
class PermissionTestCase(TestCase):
|
||||
class PermissionTestCase(OrganizationTestCase):
|
||||
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
|
||||
)
|
||||
|
||||
self.document_type_2 = DocumentType.objects.create(
|
||||
self.document_type_2 = DocumentType.on_organization.create(
|
||||
label=TEST_DOCUMENT_TYPE_2
|
||||
)
|
||||
|
||||
@@ -44,21 +47,23 @@ class PermissionTestCase(TestCase):
|
||||
file_object=file_object
|
||||
)
|
||||
|
||||
self.user = get_user_model().objects.create(
|
||||
self.user = get_user_model().on_organization.create(
|
||||
username=TEST_USER_USERNAME
|
||||
)
|
||||
self.group = Group.objects.create(name=TEST_GROUP)
|
||||
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
|
||||
self.group = MayanGroup.on_organization.create(name=TEST_GROUP)
|
||||
self.role = Role.on_organization.create(label=TEST_ROLE_LABEL)
|
||||
|
||||
self.group.user_set.add(self.user)
|
||||
self.role.groups.add(self.group)
|
||||
self.group.users.add(self.user)
|
||||
self.role.organization_groups.add(self.group)
|
||||
|
||||
Permission.invalidate_cache()
|
||||
|
||||
def tearDown(self):
|
||||
for document_type in DocumentType.objects.all():
|
||||
for document_type in DocumentType.on_organization.all():
|
||||
document_type.delete()
|
||||
|
||||
super(PermissionTestCase, self).tearDown()
|
||||
|
||||
def test_check_access_without_permissions(self):
|
||||
with self.assertRaises(PermissionDenied):
|
||||
AccessControlList.objects.check_access(
|
||||
@@ -75,7 +80,7 @@ class PermissionTestCase(TestCase):
|
||||
)
|
||||
|
||||
def test_check_access_with_acl(self):
|
||||
acl = AccessControlList.objects.create(
|
||||
acl = AccessControlList.on_organization.create(
|
||||
content_object=self.document_1, role=self.role
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
@@ -89,7 +94,9 @@ class PermissionTestCase(TestCase):
|
||||
self.fail('PermissionDenied exception was not expected.')
|
||||
|
||||
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
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
@@ -102,7 +109,7 @@ class PermissionTestCase(TestCase):
|
||||
)
|
||||
|
||||
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
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
@@ -116,12 +123,12 @@ class PermissionTestCase(TestCase):
|
||||
self.fail('PermissionDenied exception was not expected.')
|
||||
|
||||
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
|
||||
)
|
||||
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
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
@@ -135,7 +142,9 @@ class PermissionTestCase(TestCase):
|
||||
self.fail('PermissionDenied exception was not expected.')
|
||||
|
||||
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
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
@@ -144,10 +153,6 @@ class PermissionTestCase(TestCase):
|
||||
permission=permission_document_view, user=self.user,
|
||||
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_2 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):
|
||||
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
|
||||
)
|
||||
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
|
||||
)
|
||||
acl.permissions.add(permission_document_view.stored_permission)
|
||||
|
||||
@@ -8,7 +8,7 @@ from user_management.tests import (
|
||||
)
|
||||
|
||||
from ..models import AccessControlList
|
||||
from ..permissions import permission_acl_edit, permission_acl_view
|
||||
from ..permissions import permission_acl_edit
|
||||
|
||||
|
||||
class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
@@ -26,35 +26,6 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
def test_acl_create_view_no_permission(self):
|
||||
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(
|
||||
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
||||
'role': self.role.pk
|
||||
@@ -62,9 +33,9 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
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.role.permissions.add(
|
||||
@@ -78,7 +49,7 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
)
|
||||
|
||||
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):
|
||||
"""
|
||||
@@ -86,7 +57,7 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
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
|
||||
)
|
||||
|
||||
@@ -105,8 +76,8 @@ class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||
self.assertContains(
|
||||
response, text='vailable permissions', status_code=200
|
||||
)
|
||||
self.assertEqual(AccessControlList.objects.count(), 1)
|
||||
self.assertEqual(AccessControlList.objects.first().pk, acl.pk)
|
||||
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||
self.assertEqual(AccessControlList.on_organization.first().pk, acl.pk)
|
||||
|
||||
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.assertEqual(AccessControlList.objects.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)
|
||||
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.conf.urls import url
|
||||
from django.conf.urls import patterns, url
|
||||
|
||||
from .views import (
|
||||
ACLCreateView, ACLDeleteView, ACLListView, ACLPermissionsView
|
||||
)
|
||||
|
||||
urlpatterns = [
|
||||
urlpatterns = patterns(
|
||||
'acls.views',
|
||||
url(
|
||||
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/create/$',
|
||||
ACLCreateView.as_view(), name='acl_create'
|
||||
@@ -20,4 +21,4 @@ urlpatterns = [
|
||||
r'^(?P<pk>\d+)/permissions/$', ACLPermissionsView.as_view(),
|
||||
name='acl_permissions'
|
||||
),
|
||||
]
|
||||
)
|
||||
|
||||
@@ -4,6 +4,7 @@ import itertools
|
||||
import logging
|
||||
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.core.urlresolvers import reverse
|
||||
from django.http import Http404, HttpResponseRedirect
|
||||
from django.shortcuts import get_object_or_404
|
||||
@@ -13,7 +14,7 @@ from common.views import (
|
||||
AssignRemoveView, SingleObjectCreateView, SingleObjectDeleteView,
|
||||
SingleObjectListView
|
||||
)
|
||||
from permissions import PermissionNamespace
|
||||
from permissions import Permission, PermissionNamespace
|
||||
from permissions.models import StoredPermission
|
||||
|
||||
from .classes import ModelPermission
|
||||
@@ -25,37 +26,35 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class ACLCreateView(SingleObjectCreateView):
|
||||
fields = ('role',)
|
||||
model = AccessControlList
|
||||
|
||||
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'],
|
||||
model=self.kwargs['model']
|
||||
)
|
||||
|
||||
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']
|
||||
)
|
||||
except self.object_content_type.model_class().DoesNotExist:
|
||||
except self.content_type.model_class().DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_acl_edit, user=request.user,
|
||||
obj=self.content_object
|
||||
)
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
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)
|
||||
|
||||
def get_instance_extra_data(self):
|
||||
return {
|
||||
'content_object': self.content_object
|
||||
}
|
||||
|
||||
def form_valid(self, form):
|
||||
try:
|
||||
acl = AccessControlList.objects.get(
|
||||
content_type=self.object_content_type,
|
||||
acl = AccessControlList.on_organization.get(
|
||||
content_type=self.content_type,
|
||||
object_id=self.content_object.pk,
|
||||
role=form.cleaned_data['role']
|
||||
)
|
||||
@@ -74,6 +73,14 @@ class ACLCreateView(SingleObjectCreateView):
|
||||
) % 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):
|
||||
if self.object.pk:
|
||||
return reverse('acls:acl_permissions', args=(self.object.pk,))
|
||||
@@ -82,15 +89,17 @@ class ACLCreateView(SingleObjectCreateView):
|
||||
|
||||
|
||||
class ACLDeleteView(SingleObjectDeleteView):
|
||||
model = AccessControlList
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_acl_edit, user=request.user,
|
||||
obj=acl.content_object
|
||||
)
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
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)
|
||||
|
||||
@@ -109,25 +118,32 @@ class ACLDeleteView(SingleObjectDeleteView):
|
||||
)
|
||||
)
|
||||
|
||||
def get_queryset(self):
|
||||
return AccessControlList.on_organization.all()
|
||||
|
||||
|
||||
class ACLListView(SingleObjectListView):
|
||||
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'],
|
||||
model=self.kwargs['model']
|
||||
)
|
||||
|
||||
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']
|
||||
)
|
||||
except self.object_content_type.model_class().DoesNotExist:
|
||||
except self.content_type.model_class().DoesNotExist:
|
||||
raise Http404
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_acl_view, user=request.user,
|
||||
obj=self.content_object
|
||||
)
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
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)
|
||||
|
||||
@@ -139,8 +155,8 @@ class ACLListView(SingleObjectListView):
|
||||
}
|
||||
|
||||
def get_queryset(self):
|
||||
return AccessControlList.objects.filter(
|
||||
content_type=self.object_content_type, object_id=self.content_object.pk
|
||||
return AccessControlList.on_organization.filter(
|
||||
content_type=self.content_type, object_id=self.content_object.pk
|
||||
)
|
||||
|
||||
|
||||
@@ -170,10 +186,14 @@ class ACLPermissionsView(AssignRemoveView):
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||
|
||||
AccessControlList.objects.check_access(
|
||||
permissions=permission_acl_edit, user=request.user,
|
||||
obj=acl.content_object
|
||||
)
|
||||
try:
|
||||
Permission.check_permissions(
|
||||
request.user, permissions=(permission_acl_edit,)
|
||||
)
|
||||
except PermissionDenied:
|
||||
AccessControlList.objects.check_access(
|
||||
permission_acl_edit, request.user, acl.content_object
|
||||
)
|
||||
|
||||
return super(
|
||||
ACLPermissionsView, self
|
||||
|
||||