Compare commits

..

1 Commits

Author SHA1 Message Date
Roberto Rosario
6063aa5cd8 Tornado experiments 2016-12-22 03:16:09 -04:00
2397 changed files with 111431 additions and 148553 deletions

View File

@@ -1,2 +0,0 @@
[flake8]
ignore = E501

38
.gitignore vendored
View File

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

View File

@@ -8,7 +8,7 @@ before_script:
- update-locale LANG=en_US.UTF-8
- export LC_ALL=en_US.UTF-8
- apt-get update -qq
- apt-get install -qq curl graphviz 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 curl python-dev python-pip gcc gnupg1 tesseract-ocr tesseract-ocr-deu ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice
variables:
POSTGRES_DB: "mayan_edms"
POSTGRES_PASSWORD: "postgres"
@@ -21,8 +21,8 @@ test:mysql:
- pip install mysql-python
- apt-get install -qq mysql-client
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;"
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
- codecov
- 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:
@@ -30,12 +30,12 @@ test:postgres:
- apt-get install -qq libpq-dev
- pip install -r requirements/testing.txt
- pip install psycopg2
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
- codecov
- 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 test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations
- codecov
- 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

View File

@@ -1,5 +1,3 @@
dist: trusty
sudo: required
language: python
python:
- 2.7
@@ -10,7 +8,7 @@ env:
- DB=sqlite
before_install:
- sudo apt-get update -qq
- sudo apt-get install -qq python-dev python-pip gcc tesseract-ocr tesseract-ocr-deu ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice
- sudo apt-get install -qq python-dev gcc tesseract-ocr tesseract-ocr-deu unpaper ghostscript libjpeg-dev libpng-dev poppler-utils libreoffice
install:
- "pip install -r requirements/testing.txt"
- if [[ $DB == mysql ]]; then pip install -q mysql-python; fi
@@ -19,9 +17,9 @@ before_script:
- mysql -e 'create database mayan_edms;'
- psql -c 'create database mayan_edms;' -U postgres
script:
- if [[ $DB == mysql ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi
- if [[ $DB == postgres ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi
- if [[ $DB == sqlite ]]; then coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.base --nomigrations; fi
- if [[ $DB == mysql ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.travis.db_mysql --nomigrations; fi
- if [[ $DB == postgres ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.travis.db_postgres --nomigrations; fi
- if [[ $DB == sqlite ]]; then coverage run manage.py runtests --settings=mayan.settings.testing.base --nomigrations; fi
after_success:
- coveralls
branches:

View File

@@ -19,12 +19,6 @@ source_lang = en
source_file = mayan/apps/authentication/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.cabinets-2-0]
file_filter = mayan/apps/cabinets/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/cabinets/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.checkouts-2-0]
file_filter = mayan/apps/checkouts/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -67,12 +61,6 @@ source_lang = en
source_file = mayan/apps/document_indexing/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.document_parsing-2-0]
file_filter = mayan/apps/document_parsing/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/document_parsing/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.document_signatures-2-0]
file_filter = mayan/apps/document_signatures/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -97,6 +85,18 @@ source_lang = en
source_file = mayan/apps/events/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.folders-2-0]
file_filter = mayan/apps/folders/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/folders/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.installation-2-0]
file_filter = mayan/apps/installation/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/installation/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.linking-2-0]
file_filter = mayan/apps/linking/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -127,6 +127,12 @@ source_lang = en
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.mirroring-2-0]
file_filter = mayan/apps/mirroring/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.motd-2-0]
file_filter = mayan/apps/motd/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
@@ -164,9 +170,9 @@ source_file = mayan/apps/sources/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.statistics-2-0]
file_filter = mayan/apps/mayan_statistics/locale/<lang>/LC_MESSAGES/django.po
file_filter = mayan/apps/statistics/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/mayan_statistics/locale/en/LC_MESSAGES/django.po
source_file = mayan/apps/statistics/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.storage-2-0]
@@ -181,12 +187,6 @@ source_lang = en
source_file = mayan/apps/tags/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.task_manager-2-0]
file_filter = mayan/apps/task_manager/locale/<lang>/LC_MESSAGES/django.po
source_lang = en
source_file = mayan/apps/task_manager/locale/en/LC_MESSAGES/django.po
type = PO
[mayan-edms.user_management-2-0]
file_filter = mayan/apps/user_management/locale/<lang>/LC_MESSAGES/django.po
source_lang = en

View File

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

36
DCO
View File

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

View File

@@ -1,206 +1,4 @@
3.0 (2017-XX-XX)
================
- Add support for notifications. GitLab #262.
- Add quota support. GitLab #284.
2.7.2 (2017-09-06)
==================
- Fix new mailer creation view. GitLab issue #431.
Thanks to Robert Schöftner(@robert.schoeftner) for the
report and the solution.
- Consolidate intial document created event and the first
document properties edited events. Preserve the user that
initially creates the document. GitLab issue #433. Thanks
to Jesaja Everling(@jeverling) for the report.
- Sort the list of root cabinets. Thanks to Thomas Plotkowiak
for the request.
- Sort the list of a document's cabinets.
- Display a document's cabinet list in italics. GitLab issue #435.
Thanks to LeVon Smoker for the request.
- Install mock by default to allow easier testing of deployed
instances.
2.7.1 (2017-09-03)
==================
- Support unicode in URL querystring. GitLab issue #423.
Thanks to Gustavo Teixeira (@gsteixei) for the find.
- Import errors during initialization are only ignored
if they are cause by a missing local.py. Thanks to
MacRobb Simpson for the report and solution.
- Make sure the local.py created used unicode for strings
by default. GitLab issue #424. Thanks to Gustavo Teixeira
(@gsteixei) for the find.
2.7 (2017-08-30)
================
- Add workaround for PDF with IndirectObject as the
rotation value. GitHub #261.
- Add ACL list link with icon and use it for the document facet menu.
- Fix mailing app permissions labels.
- Add ACLs link and ACLs permissions to the mailer profile model.
- Improve mailer URL regex.
- Add ordering support to the SourceColumn class. GitLab issue #417.
- Shows the cabinets in the document list. GitLab #417 @corneliusludmann
- Add workaround for pycountry versions without the bibliographical key.
GitHub issue #250.
- Skip UUID migration on Oracle backends. GitHub issue #251.
- Allow changing the output format, DPI of the pdftoppm command, and
the output format of the converter via the CONVERTER_GRAPHICS_BACKEND_CONFIG
setting. GitHub issues #256 #257 GitLab issue #416.
- Add support for workflow triggers.
- Add support for workflow actions.
- Add support for rendering workflows.
- Add support for unbinding sub menus.
- Fix mailing profile test view.
- Disregard the last 3 dots that mark the end of the YAML document.
- Add support for multiple dashboards.
- Add support for removing dashboard widgets.
- Convert document version view to item list view.
- Add support for browsing individual document versions.
- Add support for dropdown menus to the item list view template.
- Add support for preserving the file extenstion when downloading a document
version. GitLab #415.
- Split OCR app into OCR and parsing.
- Remove Folders app.
- Use the literal 'System' instead of the target name when
the action user in unknown.
- Remove the view to submit all document for OCR.
- When changing document types, don't delete the old metadata that is
also found in the new document type. GitLab issue #421.
- Add tag attach and tag remove events.
- Change the permission needed to attach and remove tags.
- Add HTTP POST workflow state action.
- Add access control grant workflow state action.
- Beta Python 3 support.
2.6.4 (2017-07-26)
==================
- Add missing replacements of reverse to resolve_url.
2.6.3 (2017-07-25)
==================
- Add makefile target to launch a PostgreSQL container.
- Use resolve_url instead of redirect to resolve the post login URL.
- Make the intialsetup and performupgrade management tasks work
with signals to allow customization from 3rd party apps.
- PEP8 cleanups.
- Add tag_ids keyword argument to the Source.handle_upload
model method. GitLab issue #413.
- Add overflow wrapping so wrap long titles in Firefox too.
- Makes Roles searchable. GitLab issue #402.
- Add line numbers to the debug and production loggers.
Add date and time to the production logger.
- Add support for generating setup.py from a template. GitLab
#149 #200.
- Add fade in animation to document images.
2.6.2 (2017-07-19)
==================
- Fix deprecation warning to prepare upgrade to Django 1.11 and 2.0.
- Fix document page zoom.
- Add support to run tests against a MySQL, Postgres or Oracle container.
- Improve tag widget customization by moving the markup to its own template.
- Fix document page widget appearance in the document page list view.
- Make document version order deterministic.
- Allow total page number instrospection of encrypted PDF with non ASCII user properties. GitLab issue #411.
- Oracle database compatibility update in the cabinets app. GitHub #258.
2.6.1 (2017-07-18)
==================
- Fix issue when editing or removing metadata from multiple documents.
2.6 (2017-07-18)
================
- Fix HTML mark up in window title. GitLab #397.
- Add support for emailing documents to a recipient list. GitLab #396.
- Backport metadata widget changes from @Macrobb. GitLab #377.
- Make users and group searchable.
- Add support for logging errors during in production mode.
Add COMMON_PRODUCTION_ERROR_LOG_PATH to control path of log file.
Defaults to mayan/error.log.
- Add support logging request exceptions.
- Add document list item view.
- Sort setting by namespace label and by global name second.
- Sort indexes by label.
- Fix cabinets permission and access control checking.
- The permission to add or remove documents to cabinets now applies to documents too.
- Equalize dashboard widgets heights.
- Switch the order of the DEFAULT_AUTHENTICATION_CLASSES of DRF. GitLab #400.
- Backport document's version list view permission.
- Improve code to unbind menu entries.
- Renamed the document type permission namespace from "Document setup" to "Document types".
- Add support for granting the document type edit, document type delete, and document type view
permissions to individual document type instances.
- Improved tests by testing for accesses.
- Increase the size of the mailing profile label field to 128 characters.
2.5.2 (2017-07-08)
==================
- Improve new document creation signal handling.
Fixes issue with duplicate scanning at upload.
2.5.1 (2017-07-08)
==================
- Update release target due to changes in PyPI.
2.5 (2017-07-07)
================
- Add view to download a document's OCR text. GitLab #215
- Add user configurable mailer. GitLab #286.
- Use Toasts library for screen messages.
- Reduce verbosity of some debug messages.
- Add new lineart transformation.
- Fix SANE source resolution field.
- About and Profile menu reorganization.
- PDF compatibility improvements.
- Office document coversion improvements.
- New metadata type setup UI.
- Duplicated document scan support.
- "Remember me" login support.
- Forgotten password restore via email.
- Document cache disabling.
- Translation improvements.
- Image loading improvements.
- Lower Javascript memory utilization.
- HTML reponsive layout improvements.
- Make document deletion a background task.
- Unicode handling improvements.
- Python3 compatilibyt improvements.
- New screen messages using Toastr.
2.4 (2017-06-23)
================
- Add Django-mathfilters.
- Improve render of documents with no pages.
- Add SANE scanner document source.
- Added PDF orientation detection. GitLab issue #387.
- Fix repeated permission list API URL. GitLab issue #389.
- Fix role creation API endpoint not returning id. GitLab issue #390.
- Make tags, metadata types and cabinets searchable via the dynamic search API. GitLab issue #344.
- Add support for updating configuration options from environment variables.
- Add purgelocks management command. GitLab issue #221.
- Fix index rebuilding for multi value first levels. GitLab issue #391.
- Truncate views titles via the APPEARANCE_MAXIMUM_TITLE_LENGTH setting. GitLab issue #217.
- Add background task manager app. GitLab issue #132.
- Add link to show a document's OCR errors. GitLab issue #291.
2.3 (2017-06-08)
================
- Allow for bigger indexing expression templates.
- Auto select checkbox when updating metadata values. GitLab issue #371.
- Added support for passing the options allow-other and allow-root to the
FUSE index mirror. GitLab issue #385
- Add support for check for the latest released version of Mayan from the
About menu.
- Support for rebuilding specific indexes. GitLab issue #372.
- Rewrite document indexing code to be faster and use less locking.
- Use a predefined file path for the file lock.
- Catch documents with not document version when displaying their thumbnails.
- Document page navigation fix when using Mayan as a sub URL app.
- Add support for indexing on workflow state changes.
- Add search model list API endpoint.
2.2 (2017-04-26)
2.2 (2016-XX-XX)
================
- Remove the installation app (GitLab #301).
- Add support for document page search
@@ -210,66 +8,17 @@
- 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.
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).
- Integrate the Cabinets app.
2.1.11 (2017-03-14)
===================
- Added a quick rename serializer to the document type API serializer.
- Added per document type, workflow list API view.
- Mayan EDMS was adopted a version 1.1 of the Linux Foundation Developer Certificate of Origin.
- Added the detail url of a permission in the permission serializer.
- Added endpoints for the ACL app API.
- Implemented document workflows transition ACLs. GitLab issue #321.
- Add document comments API endpoints. GitHub issue #249.
- Add support for overriding the Celery class.
- Changed the document upload view in source app to not use the HTTP referer
URL blindly, but instead recompose the URL using known view name. Needed
when integrating Mayan EDMS into other app via using iframes.
- Addes size field to the document version serializer.
- Removed the serializer from the deleted document restore API endpoint.
- Added support for adding or editing document types to smart links via the
API.
2.1.10 (2017-02-13)
===================
- Update Makefile to use twine for releases.
- Add Makefile target to make test releases.
2.1.9 (2017-02-13)
==================
- Update make file to Workaround long standing pypa wheel bug #99
2.1.8 (2017-02-12)
==================
- Fixes in the trashed document API endpoints.
- Improved tags API PUT and PATCH endpoints.
- Bulk document adding when creating and editing tags.
- The version of django-mptt is preserved in case mayan-cabinets is installed.
- Add Django GPG API endpoints for singing keys.
- Add API endpoints for the document states (workflows) app.
- Add API endpoints for the messsage of the day (MOTD) app.
- Add Smart link API endpoints.
- Add writable versions of the Document and Document Type serializers (GitLab issues #348 and #349).
- Close GitLab issue #310 "Metadata's lookup with chinese messages when new document"
2.1.7 (2017-02-01)
==================
- Improved user management API endpoints.
- Improved permissions API endpoints.
- Improvements in the API tests of a few apps.
- Addition Content type list API view to the common app.
- Add API endpoints to the events app.
- Enable the parser and validation fields of the metadata serializer.
2.1.6 (2016-11-23)
==================
=================
- Fix variable name typo in the rotation transformation class.
- Update translations

View File

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

238
Makefile
View File

@@ -6,17 +6,9 @@ help:
@echo "clean-build - Remove build artifacts."
@echo "clean-pyc - Remove Python artifacts."
@echo "clean - Remove Python and build artifacts."
@echo "generate_setup - Create and updated setup.py"
@echo "test MODULE=<python module name> - Run tests for a single App, module or test class."
@echo "test-all - Run all tests."
@echo "test MODULE=<python module name> - Run tests for a single app, module or test class."
@echo "test-with-postgres-all - Run all tests against a Postgres database container."
@echo "test-postgres MODULE=<python module name> - Run tests for a single app, module or test class against a Postgres database container."
@echo "test-with-mysql-all - Run all tests against a MySQL database container."
@echo "test-mysql MODULE=<python module name> - Run tests for a single app, module or test class against a MySQL database container."
@echo "test-with-oracle-all - Run all tests against a Oracle database container."
@echo "test-oracle MODULE=<python module name> - Run tests for a single app, module or test class against a Oracle database container."
@echo "docs_serve - Run the livehtml documentation generator."
@echo "translations_make - Refresh all translation files."
@@ -31,27 +23,11 @@ help:
@echo "sdist - Build the source distribution package."
@echo "wheel - Build the wheel distribution package."
@echo "release - Package (sdist and wheel) and upload a release."
@echo "test_release - Package (sdist and wheel) and upload to the PyPI test server."
@echo "release_test_via_docker_ubuntu - Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder."
@echo "release_test_via_docker_alpine - Package (sdist and wheel) and upload to the PyPI test server using an Alpine Docker builder."
@echo "release_via_docker_ubuntu - Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder."
@echo "release_via_docker_alpine - Package (sdist and wheel) and upload to PyPI using an Alpine Docker builder."
@echo "test_sdist_via_docker_ubuntu - Make an sdist packange and test it using an Ubuntu Docker container."
@echo "test_wheel_via_docker_ubuntu - Make a wheel package and test it using an Ubuntu Docker container."
@echo "runserver - Run the development server."
@echo "runserver_plus - Run the Django extension's development server."
@echo "shell_plus - Run the shell_plus command."
@echo "docker_services_on - Launch and initialize production-like services using Docker (Postgres and Redis)."
@echo "docker_services_off - Stop and delete the Docker production-like services."
@echo "docker_services_frontend - Launch a front end instance that uses the production-like services."
@echo "docker_services_worker - Launch a worker instance that uses the production-like services."
@echo "docker_service_mysql_on - Launch and initialize a MySQL Docker container."
@echo "docker_service_mysql_off - Stop and delete the MySQL Docker container."
@echo "docker_service_postgres_on - Launch and initialize a PostgreSQL Docker container."
@echo "docker_service_postgres_off - Stop and delete the PostgreSQL Docker container."
@echo "safety_check - Run a package safety check."
@@ -76,63 +52,8 @@ test:
./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
test-all:
./manage.py test --mayan-apps --settings=mayan.settings.testing --nomigrations
./manage.py runtests --settings=mayan.settings.testing --nomigrations
test-launch-postgres:
@docker rm -f test-postgres || true
@docker volume rm test-postgres || true
docker run -d --name test-postgres -p 5432:5432 -v test-postgres:/var/lib/postgresql/data healthcheck/postgres
sudo apt-get install -qq libpq-dev
pip install psycopg2
while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done
test-with-postgres: test-launch-postgres
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_postgres --nomigrations
@docker rm -f test-postgres || true
@docker volume rm test-postgres || true
test-with-postgres-all: test-launch-postgres
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_postgres --nomigrations
@docker rm -f test-postgres || true
@docker volume rm test-postgres || true
test-launch-mysql:
@docker rm -f test-mysql || true
@docker volume rm test-mysql || true
docker run -d --name test-mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan -v test-mysql:/var/lib/mysql healthcheck/mysql
sudo apt-get install -qq libmysqlclient-dev mysql-client
pip install mysql-python
while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done
mysql -h 127.0.0.1 -P 3306 -uroot -e "set global character_set_server=utf8mb4;"
test-with-mysql: test-launch-mysql
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_mysql --nomigrations
@docker rm -f test-mysql || true
@docker volume rm test-mysql || true
test-with-mysql-all: test-launch-mysql
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_mysql --nomigrations
@docker rm -f test-mysql || true
@docker volume rm test-mysql || true
test-launch-oracle:
@docker rm -f test-oracle || true
@docker volume rm test-oracle || true
docker run -d --name test-oracle -p 49160:22 -p 49161:1521 -e ORACLE_ALLOW_REMOTE=true -v test-oracle:/u01/app/oracle wnameless/oracle-xe-11g
# https://gist.github.com/kimus/10012910
pip install cx_Oracle
while ! nc -z 127.0.0.1 49161; do sleep 1; done
sleep 10
test-with-oracle: test-launch-oracle
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_oracle --nomigrations
@docker rm -f test-oracle || true
@docker volume rm test-oracle || true
test-with-oracle-all: test-launch-oracle
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_oracle --nomigrations
@docker rm -f test-oracle || true
@docker volume rm test-oracle || true
# Documentation
@@ -152,7 +73,7 @@ translations_push:
tx push -s
translations_pull:
tx pull -f
tx pull
# Requirements
@@ -166,175 +87,36 @@ requirements_docs:
requirements_testing:
pip install -r requirements/testing.txt
generate_setup:
@./generate_setup.py
@echo "Complete."
# Releases
test_release: clean wheel
twine upload dist/* -r testpypi
@echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms"
release: clean wheel
twine upload dist/* -r pypi
release: clean
python setup.py sdist bdist_wheel upload
sdist: clean
python setup.py sdist
ls -l dist
wheel: clean sdist
pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz
wheel: clean
python setup.py bdist_wheel
ls -l dist
release_test_via_docker_ubuntu:
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
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 && \
cp -r /host_source/* . && \
apt-get update && \
apt-get install make python-pip -y && \
pip install -r requirements/build.txt && \
cp -r /host_home/.pypirc ~/.pypirc && \
make test_release"
release_via_docker_ubuntu:
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
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 && \
cp -r /host_source/* . && \
apt-get update && \
apt-get install make python-pip -y && \
pip install -r requirements/build.txt && \
cp -r /host_home/.pypirc ~/.pypirc && \
make release"
release_test_via_docker_alpine:
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\
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 && \
cp -r /host_source/* . && \
apk update && \
apk add python2 py2-pip make && \
pip install -r requirements/build.txt && \
cp -r /host_home/.pypirc ~/.pypirc && \
make test_release"
release_via_docker_alpine:
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\
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 && \
cp -r /host_source/* . && \
apk update && \
apk add python2 py2-pip make && \
pip install -r requirements/build.txt && \
cp -r /host_home/.pypirc ~/.pypirc && \
make release"
test_sdist_via_docker_ubuntu:
docker run --rm --name mayan_sdist_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
cp -r /host_source/* . && \
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 && \
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
pip install -r requirements/development.txt && \
make sdist_test_suit \
"
test_wheel_via_docker_ubuntu:
docker run --rm --name mayan_wheel_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
cp -r /host_source/* . && \
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 && \
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
pip install -r requirements/development.txt && \
make wheel_test_suit \
"
sdist_test_suit: sdist
rm -f -R _virtualenv
virtualenv _virtualenv
sh -c '\
. _virtualenv/bin/activate; \
pip install `ls dist/*.gz`; \
_virtualenv/bin/mayan-edms.py initialsetup; \
pip install mock==2.0.0; \
_virtualenv/bin/mayan-edms.py test --mayan-apps \
'
wheel_test_suit: wheel
rm -f -R _virtualenv
virtualenv _virtualenv
sh -c '\
. _virtualenv/bin/activate; \
pip install `ls dist/*.whl`; \
_virtualenv/bin/mayan-edms.py initialsetup; \
pip install mock==2.0.0; \
_virtualenv/bin/mayan-edms.py test --mayan-apps \
'
# Dev server
runserver:
./manage.py runserver --settings=mayan.settings.development
./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
docker_services_on:
docker run -d --name redis -p 6379:6379 redis
docker run -d --name postgres -p 5432:5432 postgres
while ! nc -z 127.0.0.1 6379; do sleep 1; done
while ! nc -z 127.0.0.1 5432; do sleep 1; done
sleep 2
./manage.py initialsetup --settings=mayan.settings.staging.docker
docker_services_off:
docker stop postgres redis
docker rm postgres redis
docker_services_frontend:
./manage.py runserver --settings=mayan.settings.staging.docker
docker_services_worker:
./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair
docker_service_mysql_on:
docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql
while ! nc -z 127.0.0.1 3306; do sleep 1; done
docker_service_mysql_off:
docker stop mysql
docker rm mysql
docker_service_postgres_on:
docker run -d --name postgres -p 5432:5432 postgres
while ! nc -z 127.0.0.1 5432; do sleep 1; done
docker_service_postgres_off:
docker stop postgres
docker rm postgres
# Security
safety_check:
safety check

View File

@@ -1,72 +0,0 @@
[![pypi][pypi]][pypi-url]
[![builds][builds]][builds-url]
[![coverage][cover]][cover-url]
![python][python]
![license][license]
[pypi]: http://img.shields.io/pypi/v/mayan-edms.svg
[pypi-url]: http://badge.fury.io/py/mayan-edms
[builds]: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
[builds-url]: https://gitlab.com/mayan-edms/mayan-edms/pipelines
[cover]: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
[cover-url]: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
[python]: https://img.shields.io/pypi/pyversions/mayan-edms.svg
[python-url]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
[license]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
[license-url]: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
<div align="center">
<a href="http://www.mayan-edms.com">
<img width="200" heigth="200" src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png">
</a>
<br>
<br>
<p>
Mayan EDMS is a document management system. Its main purpose is to store,
introspect, and categorize files, with a strong emphasis on preserving the
contextual and business information of documents. It can also OCR, preview,
label, sign, send, and receive thoses files. Other features of interest
are its workflow system, role based access control, and REST API.
<p>
<p align="center">
<img src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif">
</p>
</div>
<h2 align="center">Installation</h2>
The easiest way to use Mayan EDMS is by using the official
[Docker](https://www.docker.com/) image. Make sure Docker is properly installed
and working before attempting to install Mayan EDMS.
For the complete set of installation, configuration, upgrade, and backup
instructions visit the Mayan EDMS Docker Hub page at:
https://hub.docker.com/r/mayanedms/mayanedms/
<h2 align="center">Hardware requirements</h2>
- 2 Gigabytes of RAM (1 Gigabyte if OCR is turned off).
- Multiple core CPU (64 bit, faster than 1 GHz recommended).
<h2 align="center">Important links</h2>
- [Homepage](http://www.mayan-edms.com)
- [Videos](https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw)
- [Documentation](http://mayan.readthedocs.io/en/stable/)
- [Paid support](http://www.mayan-edms.com/providers/)
- [Roadmap](https://gitlab.com/mayan-edms/mayan-edms/wikis/roadmap)
- [Contributing](https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md)
- [Community forum](https://groups.google.com/forum/#!forum/mayan-edms)
- [Community forum archive](http://mayan-edms.1003.x6.nabble.com/)
- [Source code, issues, bugs](https://gitlab.com/mayan-edms/mayan-edms)
- [Plug-ins, other related projects](https://gitlab.com/mayan-edms/)
- [Translations](https://www.transifex.com/rosarior/mayan-edms/)

View File

@@ -1,58 +1,65 @@
|pypi| |builds| |coverage| |python| |license|
|PyPI badge| |Build Status| |Coverage badge| |Documentation| |License badge| |Python version|
|Logo|
Description
-----------
Free Open Source Electronic Document Management System.
`Website`_
`Video demostration`_
`Documentation`_
`Translations`_
`Mailing list (via Google Groups)`_
|Animation|
License
-------
This project is open sourced under `Apache 2.0 License`_.
Installation
------------
To install Mayan EDMS, simply do:
.. code-block:: bash
$ virtualenv venv
$ source venv/bin/activate
(venv) $ pip install mayan-edms
(venv) $ mayan-edms.py initialsetup
(venv) $ mayan-edms.py runserver
Point your browser to 127.0.0.1:8000 and use the automatically created admin
account.
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
:align: center
:width: 200
:height: 200
.. _Website: http://www.mayan-edms.com
.. _Video demostration: http://bit.ly/pADNXv
.. _Documentation: http://readthedocs.org/docs/mayan/en/latest/
.. _Translations: https://www.transifex.com/projects/p/mayan-edms/
.. _Mailing list (via Google Groups): http://groups.google.com/group/mayan-edms
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
Mayan EDMS is a document management system. Its main purpose is to store,
introspect, and categorize files, with a strong emphasis on preserving the
contextual and business information of documents. It can also OCR, preview,
label, sign, send, and receive thoses files. Other features of interest
are its workflow system, role based access control, and REST API.
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
:align: center
The easiest way to use Mayan EDMS is by using the official Docker_ image.
Make sure Docker is properly installed and working before attempting to install
Mayan EDMS.
For the complete set of installation, configuration, upgrade, and backup
instructions visit the Mayan EDMS Docker Hub page at:
https://hub.docker.com/r/mayanedms/mayanedms/
.. _Docker: https://www.docker.com/
Hardware requirements
- 2 Gigabytes of RAM (1 Gigabyte if OCR is turned off).
- Multiple core CPU (64 bit, faster than 1 GHz recommended).
Important links
- `Homepage <http://www.mayan-edms.com>`__
- `Videos <https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw>`__
- `Documentation <http://mayan.readthedocs.io/en/stable/>`__
- `Paid support <http://www.mayan-edms.com/providers/>`__
- `Roadmap <https://gitlab.com/mayan-edms/mayan-edms/wikis/roadmap>`__
- `Contributing <https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md>`__
- `Community forum <https://groups.google.com/forum/#!forum/mayan-edms>`__
- `Community forum archive <http://mayan-edms.1003.x6.nabble.com/>`__
- `Source code, issues, bugs <https://gitlab.com/mayan-edms/mayan-edms>`__
- `Plug-ins, other related projects <https://gitlab.com/mayan-edms/>`__
- `Translations <https://www.transifex.com/rosarior/mayan-edms/>`__
.. |pypi| image:: http://img.shields.io/pypi/v/mayan-edms.svg
.. |Build Status| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
:target: https://gitlab.com/mayan-edms/mayan-edms/commits/master
.. |Logo| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
:target: http://badge.fury.io/py/mayan-edms
.. |builds| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
:target: https://gitlab.com/mayan-edms/mayan-edms/pipelines
.. |coverage| image:: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
.. |License badge| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
.. |Analytics| image:: https://ga-beacon.appspot.com/UA-52965619-2/mayan-edms/readme?pixel
.. |Coverage badge| image:: https://codecov.io/gitlab/mayan-edms/mayan-edms/coverage.svg?branch=master
:target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
.. |python| image:: https://img.shields.io/pypi/pyversions/mayan-edms.svg
.. |license| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
.. |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|

4
contrib/scripts/make_dists.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
python setup.py sdist
pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz

View File

@@ -4,21 +4,20 @@ import optparse
import sh
APP_LIST = (
'acls', 'appearance', 'authentication', 'cabinets', 'checkouts', 'common',
'acls', 'appearance', 'authentication', 'checkouts', 'common',
'converter', 'django_gpg', 'document_comments', 'document_indexing',
'document_parsing', 'document_signatures', 'document_states', 'documents',
'dynamic_search', 'events', 'linking', 'lock_manager', 'mayan_statistics',
'mailer', 'metadata', 'mirroring', 'motd', 'navigation', 'ocr',
'permissions', 'rest_api', 'smart_settings', 'sources', 'storage', 'tags',
'task_manager', 'user_management'
'document_signatures', 'document_states', 'documents', 'dynamic_search',
'events', 'folders', 'installation', 'linking', 'lock_manager', 'mailer',
'metadata', 'mirroring', 'motd', 'navigation', 'ocr', 'permissions',
'rest_api', 'smart_settings', 'sources', 'statistics', 'storage', 'tags',
'user_management'
)
LANGUAGE_LIST = (
'ar', 'bg', 'bs_BA', 'da', 'de_DE', 'en', 'es', 'fa', 'fr', 'hu', 'id',
'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'tr_TR',
'vi_VN', 'zh_CN',
'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'vi_VN',
'zh_CN',
)
makemessages = sh.Command('django-admin.py')

View File

@@ -1,63 +0,0 @@
from __future__ import absolute_import
import ldap
from django_auth_ldap.config import LDAPSearch
from .base import *
from django.conf import settings
from django.contrib.auth import get_user_model
SECRET_KEY = '<your secret key>'
# makes sure this works in Active Directory
ldap.set_option(ldap.OPT_REFERRALS, 0)
# This is the default, but I like to be explicit.
AUTH_LDAP_ALWAYS_UPDATE_USER = True
LDAP_USER_AUTO_CREATION = "False"
LDAP_URL = "ldap://<your ldap server IP>:389/"
LDAP_BASE_DN = "dc=paramatrix,dc=co,dc=in"
LDAP_ADDITIONAL_USER_DN = "dc=people"
LDAP_ADMIN_DN = ""
LDAP_PASSWORD = ""
AUTH_LDAP_SERVER_URI = LDAP_URL
AUTH_LDAP_BIND_DN = LDAP_ADMIN_DN
AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD
AUTH_LDAP_USER_SEARCH = LDAPSearch('%s,%s'%(LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN), ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
AUTH_LDAP_USER_ATTR_MAP = {
"first_name": "cn",
"last_name": "sn",
"email": "mail"
}
AUTHENTICATION_BACKENDS = (
'django_auth_ldap.backend.LDAPBackend',
'mayan.settings.settings_local.EmailOrUsernameModelBackend',
)
class EmailOrUsernameModelBackend(object):
"""
This is a ModelBacked that allows authentication with either a username or an email address.
"""
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = get_user_model().objects.get(**kwargs)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
def get_user(self, username):
try:
return get_user_model().objects.get(pk=username)
except get_user_model().DoesNotExist:
return None

View File

@@ -1,16 +1,4 @@
<h3>Support</h3>
<p>
<a href='http://www.mayan-edms.com/providers/'>Consulting and support plans are available, click here</a>.
Consulting, support, customization, rebranding, and plug-in development are available. Email for information to: <a href='mailto:info@mayan-edms.com'>info@mayan-edms.com</a>
</p>
<hr />
<p>
Or consider supporting Mayan EDMS by contributing to its development. (US tax payers, please note this contribution is not tax deductible).
</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="hosted_button_id" value="3PXN336XFXQNN">
<input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!">
<img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" style="display: none !important;">
</form>
<hr />

View File

@@ -1,10 +1,26 @@
Welcome to Mayan EDMS!
======================
Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_,
coded in the Python language using the Django_ web application framework and
released under the `Apache 2.0 License`_. It provides an electronic vault or
repository for electronic documents.
Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_, coded in
the Python language using the Django_ web application framework and released
under the `Apache 2.0 License`_. It provides an electronic vault or repository for electronic documents.
The easiest way to use Mayan EDMS is by using a Debian based Linux distribution
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
Point your browser to 127.0.0.1:8000 and use the automatically created admin
account.
.. image:: /_static/overview.gif
:alt: Overview
@@ -12,9 +28,9 @@ repository for electronic documents.
.. toctree::
:hidden:
Installation <topics/installation>
Features <topics/features>
Advanced deployment <topics/deploying>
Installation <topics/installation>
Deploying <topics/deploying>
Release notes and upgrading <releases/index>
Concepts <topics/index>
Development <topics/development>
@@ -26,7 +42,6 @@ repository for electronic documents.
FAQ <topics/faq>
Contact <topics/contact>
.. _Docker: https://www.docker.com/
.. _Django: http://www.djangoproject.com/
.. _Free Open Source: http://en.wikipedia.org/wiki/Open_source
.. _Electronic Document Management System: https://en.wikipedia.org/wiki/Document_management_system

View File

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

View File

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

View File

@@ -1,102 +0,0 @@
===============================
Mayan EDMS v2.1.7 release notes
===============================
Released: February 2, 2017
What's new
==========
This is a bug-fix release and all users are encouraged to upgrade. The focus
of this micro release was REST API improvement.
Changes
-------------
- Improved user management API endpoints (initial work by @lokeshmanmode):
- Improved user creation API endpoint to allow specifying the group
membership.
- Improved user editing API endpoint to allow specifying the group
membership.
- Improved permissions API endpoints (initial work by @lokeshmanmode):
- Add permission list API endpoint. This API endpoint lists all possible
permissions in the system.
- Improved role creation API endpoint to allow specifying the role's group
membership and role's permissions.
- Improved role editing API endpoint to allow specifying the role's group
membership and role's permissions.
- Improvements in the API tests of a few apps.
- Add content type list API view to the common app. Content type is required
when querying the events of an object, this view show list of content types
available.
- Add event type list api view. This API view shows all the possible events
that are registered in the system.
- Add event list API view. This view shows all the events that have taken
place in the system.
- Add object event list API view. This view show all the events for a specific
object (document, etc). The content type of the object whose events are being
requested must be specified. The list of available content types is provided
now by the common app API.
- The parser and validation fields of the metadata type model have been enable
in the metadata type API serializer.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

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

View File

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

View File

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

View File

@@ -1,101 +0,0 @@
=============================
Mayan EDMS v2.3 release notes
=============================
Released: June 08, 2017
What's new
==========
This is a bug-fix and minor feature release and all users are encouraged to
upgrade.
Changes
-------------
- Index node expression template field changed from a 128 character field to an
unlimited size text field to allow for complex indexing expressions.
- When updating the metadata of a document, any input in the value form field
will select the adjacent checkbox.
- Support for passing the FUSE option `allow-other` and `allow-root` was added
to the index mirroring management command.
- Added support for checking for the latest released version of Mayan from the
About menu.
- Added support for rebuilding specific indexes instead of only being able to
rebuild all index. GitLab issue #372.
- Rewrite document indexing code to be faster and use less locking. Thanks to
Macrobb Simpson (@Macrobb) for the initial implementation.
- Use a predefined file path for the file lock.
- Catch documents with not document version when displaying their thumbnails.
- Add custom script_prefix aware resolve function and use it for the
document page navigation views. Fixes an issue when Mayan is installed
as a sub URL app. Thanks to Gustavo Teixeira(@gsteixei) for the issue and
investigation.
- Support was added to update document indexes after workflow state changes.
- An helper was added to access a documents workflow by name. To this end
a new field was added to the Workflow class called `Internal name`.
This new field makes it much easier to get a document's workflow instance.
If for example a document has a workflow called `Publish` with the internal
name `publish_workflow`, it will be accessible in the indexing template as
{{ document.workflow.publish_workflow }}. The latest state of the workflow
can be accessed using {{ document.workflow.publish_workflow.get_current_state }}.
- Added a new API endpoint to display a list of all the available search models.
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 #371 <https://gitlab.com/mayan-edms/mayan-edms/issues/371>`_ Auto select checkbox when updating metadata
* `GitLab issue #372 <https://gitlab.com/mayan-edms/mayan-edms/issues/372>`_ (Feature request) Allow 'rebuild index' to rebuild only a selected index
* `GitLab issue #383 <https://gitlab.com/mayan-edms/mayan-edms/issues/383>`_ Page not found when deployed to sub-uri
* `GitLab issue #385 <https://gitlab.com/mayan-edms/mayan-edms/issues/385>`_ mountindex: how to specify FUSE mount option allow_other?
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,156 +0,0 @@
=============================
Mayan EDMS v2.4 release notes
=============================
Released: June 23, 2017
What's new
==========
SANE document source
--------------------
A new document source has been added with the ability to retrieve documents from
scanners directly. This new document source uses the SANE (Scanner Access Now Easy)
(https://en.wikipedia.org/wiki/Scanner_Access_Now_Easy) API client to communicate
with USB and network scanners. SANE must be properly installed for this document
source to work. Your scanner must also be supported by the SANE API
(http://www.sane-project.org/sane-supported-devices.html).
Automatic PDF orientation detection
-----------------------------------
The orientation of PDF documents is now detected at creation and a rotation
transformation applied to each of the document's pages to correct the orientation.
Environment variables
---------------------
Configuration options can now be updated from environment variables. To update
a configuration option, prepend the string `MAYAN_` to the name of the configuration
option. For example, to increase the number of documents displayed per search results
page (from a default of 40) to 50 documents, set the environment variable
MAYAN_COMMON_PAGINATE_BY to 50 with::
$ export MAYAN_COMMON_PAGINATE_BY=50
and restart Mayan EDMS. A list of the configuration options can be found in the
`Setup` menu, under `Settings`.
Math filters
------------
The django-mathfilters (https://pypi.python.org/pypi/django-mathfilters) package
has been included to provide proper math filters in the indexes. An example of
this is indexing documents by quarter::
{% load mathfilters %}{{ document.metadata_value_of.date|date:"Y"}}Q{{ document.metadata_value_of.date|date:"m"|sub:1|intdiv:3|add:1 }}
Expand searchable objects
-------------------------
Previously, only documents and later on document pages were searchable. This release
add support for searching for tags, metadata types and cabinets. This search support
is available via the dynamic search API.
Management command to reset locks
---------------------------------
During testing or development error occur and locks can remain behind, blocking
execution of a process or task until they expire. To help resolve this a
management command has been added called `purgelocks` that will delete all locks
in the system.
Index by workflow state
-----------------------
Support was added to update the a document indexes from workflow state changes.
To make workflow referencing easier from the index template, a new fields was
added to the workflow model called internal_name. For example, for a workflow
called `Publishing Workflow` with an internal name of `publishing_workflow`,
use the following string to reference the current state in an index::
{{ document.workflow.publishing_workflow.get_current_state }}
Task manager
------------
A new app to monitor the distribution and consumption of background task has been
added. This app is call `Task manager` and can be found in the `Tools` menu.
Use this new tool to diagnose your background task workers or to determine when
to scale up the number of workers.
Other Changes
-------------
- Improve render of documents with no pages.
- Fix repeated permission list API URL. GitLab issue #389.
- Fix role creation API endpoint not returning id. GitLab issue #390.
- Fix index rebuilding for multi value first levels. GitLab issue #391.
- Add hardware requirements. GitHub issue #247.
- Fix URL query string encoding for the document page navigation views. GitLab
issue #383.
- Truncate views titles via the APPEARANCE_MAXIMUM_TITLE_LENGTH setting.
GitLab issue #217.
- Add link to show a document's OCR errors. GitLab issue #291.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `GitHub issue #247 <https://github.com/mayan-edms/mayan-edms/issues/247>`_ Hardware requirements
* `GitLab issue #132 <https://gitlab.com/mayan-edms/mayan-edms/issues/132>`_ Task queue viewer
* `GitLab issue #217 <https://gitlab.com/mayan-edms/mayan-edms/issues/217>`_ [Documents] Truncate document label for avoid double lines in mobile or reduce font
* `GitLab issue #221 <https://gitlab.com/mayan-edms/mayan-edms/issues/221>`_ Add flush lock management command
* `GitLab issue #291 <https://gitlab.com/mayan-edms/mayan-edms/issues/291>`_ Link to OCR error log from document OCR tab
* `GitLab issue #344 <https://gitlab.com/mayan-edms/mayan-edms/issues/344>`_ Add support for searching folders, tags, metadata.
* `GitLab issue #383 <https://gitlab.com/mayan-edms/mayan-edms/issues/383>`_ Page not found when deployed to sub-uri
* `GitLab issue #387 <https://gitlab.com/mayan-edms/mayan-edms/issues/387>`_ Document Scanning not Functioning on rotated landscape PDF's
* `GitLab issue #389 <https://gitlab.com/mayan-edms/mayan-edms/issues/389>`_ How can we map permissions with a particular role using REST API?
* `GitLab issue #390 <https://gitlab.com/mayan-edms/mayan-edms/issues/390>`_ Id is not getting in response
* `GitLab issue #391 <https://gitlab.com/mayan-edms/mayan-edms/issues/391>`_ "Rebuild indexes" does not work in Mayan EDMS 2.3
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,71 +0,0 @@
===============================
Mayan EDMS v2.5.1 release notes
===============================
Released: July 07, 2017
What's new
==========
This version is identical to version 2.5. It was released to workaround some
issues with the recent migration of PyPI (https://mail.python.org/pipermail/distutils-sig/2017-June/030766.html)
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
=======
* `GitLab issue #378 <https://gitlab.com/mayan-edms/mayan-edms/issues/378>`_ Add metadata widget changes from @Macrobb
* `GitLab issue #379 <https://gitlab.com/mayan-edms/mayan-edms/issues/379>`_ Add new document version list view permission.
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,74 +0,0 @@
===============================
Mayan EDMS v2.5.2 release notes
===============================
Released: July 08, 2017
What's new
==========
Improve duplicate document scan
-------------------------------
Previously the way document creation code was enclosed in a single database
transactions. This cause the duplicate scan at upload code to received a
document reference to uncommitted database data. The single database
transaction was split into smaller units to make sure the duplicate scan
recevies saved and committed data.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,243 +0,0 @@
=============================
Mayan EDMS v2.5 release notes
=============================
Released: July 07, 2017
What's new
==========
OCR text download
-----------------
A link and view were added to download the entire OCR text of a document as a
separate file. The link can be found under the "Actions" dropdown when the
"OCR" tab of a document is selected.
SANE document source
--------------------
A validation error was being raised when the resolution field of the SANE
document source was left blank. This issue has been fixed and works as expected
now.
Mailing profiles
----------------
Previously, the way documents were emailed was controlled by configuration
settings that only system administrator could change as the OS level. It is
now possible to create mailing profiles from within the user interface. This
allows for Mayan administrators to add mailing profiles without the
intervention system administrators. It also provides the opportunity to create
multiple mailing profiles. This is useful for sending documents via different
email providers depending on things like priority of delivery, or email size
limitations. For multi-tenant environments, this also means that each tenant
can now send documents via email with their own respective email accounts.
For system administrators, this means there is no longer a need to rely on a
single email profile for the entirety of all the tenants in a deployment,
which could be taxing email quota limits or triggering spam filters. For
more information on the multi-tenant plugin visit the Mayan app store at:
http://www.mayan-edms.com/store/
New transformation
------------------
A lineart transformation was added to reduce the amount of colors in a
document's image to just 2. This is useful to increase the OCR accuracy on
some kind of documents whose color or layout may confuse the OCR engine
and lower the accuracy of the text recognition.
UI reorganization
-----------------
The main menu was been reorganization for clarity of function. The "About" menu
has been renamed to "System" to signify that the items in this menu relate
to system configuration topics. The "Tools" and "Setup" sub-menus, were moved
from the "Profile" menu to the new "System" menu. The "Profile" menu has been
renamed to "User". Additionally, the "User" menu is now part of the main menu
instead of floating right on the layout. This change along with others
improve the usability on small devices like tablets and smartphones.
PDF compatibility updates
-------------------------
Support for non-compliant, "broken", and PDFs encrypted with no passwords has
been added. Previously no effort was made to process the images for these
files. The code for detecting the number of pages in a PDF has also been
improved to retry several methods when failing on non-compliant PDF documents.
Office documents compatibility updates
--------------------------------------
Improvements to the Libre Office conversion code were added, including a
workaround for Libre Office bug #37531 (https://bugs.documentfoundation.org/show_bug.cgi?id=37531)
which sometimes manifested when uploading multiple office documents
sequentially.
Metadata setup UI improvements
------------------------------
A new widget to define the document type to metadata type relationship has been
added. The new widget provides a method to switch between required metadata
and optional metadata for a document type. This new method is not only faster
but does not force users to remove a metadata type before making the switch
and thus avoid deletion of existing metadata entries. A new view was also added
to change the document type to metadata type relation not only the document
type view but also from the metadata type view eliminating travel between these
two views when creating new metadata types and assigning them to document
types.
Duplicated document scanning
----------------------------
Support to scan and list duplicated document scanning was added in the form of
a new document list link under the "Documents" main menu. Every time a document
is uploaded, a document scan will be triggered to determine if the new document
is a duplicate of an existing document. Duplicate documents will be listed
in a new "Duplicated documents" link in the main menu. A full document list
scan can also be triggered by using the new "Duplicated document scan" button
in the tools menu. Finally, a new tab in the document view has been added
called "Duplicates" that will list all duplicates of the currently
selected document when in the document's view. Related to this feature is the
addition of being able to search documents by their checksum. This was done by
indexing the checksum database field and by adding the checksum as a search
field in the advanced document search view and via the API.
Login session control
---------------------
Support was added to control the length of time a log in session lasts. First
from the user interface side of things a "Remember me" checkbox was added to
the log in form that will cause the session to persist after the browser is
closed. If this checkbox is left blank the session will be destroyed when the
browser closes and the user will need to log in again when accessing any of the
URLs. The second part of this feature is for administrators. The configuration
setting AUTHENTICATION_MAXIMUM_SESSION_LENGTH was added to control the maximum
time a logged in session will persist when users click the "Remember me"
checkbox. The default of this setting is 30 days.
Document image cache disabling
------------------------------
It is now possible to disable the document page image caching. The document
image cache works on two level and hence two setting options were added.
The first is the DOCUMENTS_DISABLE_BASE_IMAGE_CACHE option which disables the
first layer of caching, the generation of a master image file for each document
page. This means that subsequent request for a page's image will trigger the
conversion of the document from its original uploaded file. The second option,
DOCUMENTS_DISABLE_TRANSFORMED_IMAGE_CACHE, disables just the caching of the
transformed (rotated, resized, zoomed) images of document pages. The settings
can be used together or separately depending on how much disk space saving is
desired. These settings give control over the trade-off between disk space
savings and higher CPU utilization. These settings are ideal for installations
with a lot of documents, that want to conserve disk space, and have CPU capacity
to spare. Multi-tenant installations can also benefit from these new settings.
Document filter by workflow state
---------------------------------
A few versions over, a main menu item was added to list documents by their
workflow and/or their current workflow state. Support for filtering by the
initial workflow state has been added to this feature.
Support for restoring forgotten password
----------------------------------------
Views and templates were added to enable the typical "Forgotten
password" worflow using a signed token via email.
Other Changes
-------------
- Add missing OCR migration.
- Improve error output of the performupgrade command to debug upgrade errors
that could stop an upgrade (missing document files, etc).
- Enable the django-mathfilters app added in version 2.4.
- Do a complete pull and synchronization of the translations to fix missing
translations for Polish. Thanks to Wojtek Warczakowski for the report.
- Allow null for the SANE source resolution field. Even though the field was
marked as allowing blank values it was failing because it is a number field
and number fields need to allow explicit null values when left blank.
- Rename the mayan_task_manager app to task_manager.
- Make the task manager translatable.
- Add Turkish to the list of processes languages.
- Use Toastr libary for screen messages.
- Reduce verbosity of some debug messages in the MayanAppConfig, settings and,
mailing discovery.
- Make sure lookup selection widgets also trigger the metadata update
checkbox on change.
- Usability improvements on small displays.
- Removal of the CONVERTER_LIBREOFFICE_PATH and CONVERTER_PDFTOPPM_PATH
settings. These setting have been consolidated into
CONVERTER_GRAPHICS_BACKEND_CONFIG.
- Improve the documentation of the document creation API endpoint.
GitHub issue #255. Thanks to @lcerliani opening the issue.
- Libre Office conversion improvements. Give every libreoffice instance
its own separate $HOME directory. Additionally give every libreoffice
its own UserInstallation file in the $HOME directory. Works around
Libre Office issue: https://bugs.documentfoundation.org/show_bug.cgi?id=37531
Solves or affects GitLab issues #393 #258 #198 #175
- The trashed document deletion action is now a background task. This
feature results is much faster trashed document deletion and trash
can emptying.
- Remove animated spinners to lower browser memory usage and increase
responsiveness.
- Render a document page placeholder while the real document page
loads. This change avoids "jumping" effect when loading many thumbnails.
- Increase lazy load thresholds. More thumbnails and document pages
will be loaded and visible by default when a view loads.
- Improve usability and appearance on medium and small devices like
tablets and smartphones.
- Do hard word break on form titles to avoid horizontal scroll on
small displays.
- Python3 compatilibty improvements by removing all explicit conversion
using the unicode() function.
- Unicode handling improvements.
- Update required versions of Pillow and django-suit.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `GitHub issue #255 <https://github.com/mayan-edms/mayan-edms/issues/255>`_ Uploading a local file via api
* `GitLab issue #215 <https://gitlab.com/mayan-edms/mayan-edms/issues/215>`_ Download text contents
* `GitLab issue #286 <https://gitlab.com/mayan-edms/mayan-edms/issues/286>`_ User configurable mailer
* `GitLab issue #337 <https://gitlab.com/mayan-edms/mayan-edms/issues/337>`_ Better way to switch Optional to Required Metadata
* `GitLab issue #373 <https://gitlab.com/mayan-edms/mayan-edms/issues/373>`_ (feature request) Allow selecting document types for metadata
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,69 +0,0 @@
=============================
Mayan EDMS v2.6 release notes
=============================
Released: July 18, 2017
What's new
==========
Other Changes
-------------
- Fix issue when editing or removing metadata from multiple documents.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,78 +0,0 @@
===============================
Mayan EDMS v2.6.2 release notes
===============================
Released: July 22, 2017
What's new
==========
This is a bug fix release and users are encouraged to upgrade.
Other Changes
-------------
- Fix deprecation warning to prepare upgrade to Django 1.11 and 2.0.
- Fix zoom feature in document page view.
- Add support to run tests against a MySQL or Postgres container.
- Improve tag widget customization by moving the markup to its own template.
- Fix document page widget appearance in the document page list view.
- Make document version order deterministic.
- Allow total page number instrospection of encrypted PDF with non ASCII
user properties. GitLab issue #411.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,87 +0,0 @@
===============================
Mayan EDMS v2.6.3 release notes
===============================
Released: July 25, 2017
What's new
==========
This is a bug fix release and users are encouraged to upgrade.
Changes
-------
- Add makefile target to launch a PostgreSQL container.
- Use resolve_url instead of redirect to resolve the post login URL.
- Make the intialsetup and performupgrade management tasks work
with signals to allow customization from 3rd party apps.
- PEP8 cleanups.
- Add tag_ids keyword argument to the Source.handle_upload
model method. GitLab issue #413.
- Add overflow wrapping so wrap long titles in Firefox too.
- Makes Roles searchable. GitLab issue #402.
- Add line numbers to the debug and production loggers.
Add date and time to the production logger.
- Add support for generating setup.py from a template. GitLab
#149 #200.
- Add fade in animation to document images.
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 #149 <https://gitlab.com/mayan-edms/mayan-edms/issues/149>`_ Autogenerate setup.py
* `GitLab issue #200 <https://gitlab.com/mayan-edms/mayan-edms/issues/200>`_ dependencies in setup.py not up to date with requirements
* `GitLab issue #402 <https://gitlab.com/mayan-edms/mayan-edms/issues/402>`_ Make permissions and roles searchable.
* `GitLab issue #413 <https://gitlab.com/mayan-edms/mayan-edms/issues/413>`_ source.models.Source.handle_upload does not support tag_ids but upload_document does
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,71 +0,0 @@
===============================
Mayan EDMS v2.6.4 release notes
===============================
Released: July 25, 2017
What's new
==========
This is a bug fix release and users are encouraged to upgrade.
Changes
-------
- Add missing replacements of reverse to resolve_url.
Removals
--------
* None
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* None
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,143 +0,0 @@
=============================
Mayan EDMS v2.6 release notes
=============================
Released: July 18, 2017
What's new
==========
Sending documents to multiple recipients
----------------------------------------
Support was added to send a document as an attachment, or a link to a document
to multiple email recipients. To use this feature enter a comman separated
list of email recipients in the "Email address" field.
Visual changes
--------------
Several patches to change and improve the user interface landed on this release.
The first, by Macrobb Simpson @Macrobb, makes the content area width, match
window area. This means that on almost all device screen sizes the content area
will be almost fullscreen. Another path from Macrobb Simpson, improves the
visual appearance of the document metadata widget. The other big change is the
new list item view template which lists documents in an column, row layout.
With this layout document thumbnails are more clearly visible, much more
information can be displayed for each document, and works much better on small
screen devices like tablets and smartphone than a responsive table which
requires two axis navigation on small screens. The height of the dashboard
items is now adjusted via javascript to ensure correct layout regardless of
screen size of message length when translated.
Search
------
This release adds users and groups to the list of objects that are searchable
via the API. The current list of searchable objects is: metadata types,
users, groups, tags, documents, document pages, and cabinets.
Logging
-------
The logging configuration was improved to create a log for critical errors
when running on production mode. The default location for this log file is:
/mayan/error.log. This path can be changed with the COMMON_PRODUCTION_ERROR_LOG_PATH
setting. This log file will capture application errors and request exceptions.
Cabinets
--------
The access control for cabinets has been fixed in some regards and improved in
others. The permission to add and remove documents can now be applied to
individual root cabinets instead of globally for a role. Also, the permission
to add or remove documents from cabinets must also now be granted to a document
or document type. In other words, to add a document to a cabinet, the user's
role must have the permission to add documents to cabinet, for the cabinet
to recieve the document and for the document about to be added.
New permission
--------------
The patch to add a permission to view a document's version list was backported
from the development branch to make it accesible now. Like cabinets, the tag
access control now works on two levels. Now to attach a tag to a document,
the permission to attach tags must be granted to the tag to attach and to the
document that will receive the tag.
ACL changes
-----------
The document type permissions namespace was renamed from "Document setup" to
"Document types" for clarity. Along with that change, support was added
for granting the document type edit, document type delete, and document type view
permissions to individual document type instances instead of just globally.
Testing
-------
The documents app view tests now test for view access and not just permission.
Testing against access is more robust and also tests for permissions
implicitly.
Other Changes
-------------
- Fix HTML mark up in window title. GitLab #397.
- Sort setting by namespace label and by global name second.
- Sort indexes by label.
- Switch the order of the DEFAULT_AUTHENTICATION_CLASSES of DRF. GitLab #400.
- Improve code to unbind menu entries.
- Increase the size of the mailing profile label field to 128 characters.
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 #378 <https://gitlab.com/mayan-edms/mayan-edms/issues/378>`_ Add metadata widget changes from @Macrobb
* `GitLab issue #396 <https://gitlab.com/mayan-edms/mayan-edms/issues/396>`_ Add support for emailing documents to a recipient list.
* `GitLab issue #397 <https://gitlab.com/mayan-edms/mayan-edms/issues/397>`_ Title on Index Page is Broken
* `GitLab issue #400 <https://gitlab.com/mayan-edms/mayan-edms/issues/400>`_ Django REST framework's BasicAuthentication doesn't work with Oauth2_proxy
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,97 +0,0 @@
===============================
Mayan EDMS v2.7.1 release notes
===============================
Released: September 3, 2017
What's new
==========
Unicode metadata when uploading a document
------------------------------------------
An issue with Django's unquote_plus caused documents being uploaded with an
unicode, no English character in an initial metadata value field to fail.
The unquote_plus usage was remove in favor of a dedicate URL parsing library
called furl. GitLab issue #423. Thanks to Gustavo Teixeira (@gsteixei) for the
find.
Silent errors during initialization
-----------------------------------
When Python raises an ImportError exception, it is not possible to determine
the cause of the error. The local.py import code was updated to interpret the
text of the ImportError exception and ignore it only if the local.py was
missing, which is the case during the initialization commands execute after
the initial installation. Any error in the local.py file will now cause Mayan
to exit. Thanks to MacRobb Simpson for the report and solution.
String usage in the local.py file
---------------------------------
Python 2.7 uses byte strings by default. Byte strings cannot be used in
conjunction with unicode strings. A missing import was causing strings in
the local.py file to be interpreted as byte string while the rest of Mayan
uses unicode strings. Using non English special characters in a string located
in the local.py file would have cause a Unicode errors. For new installations
from Mayan version 2.7.1 onwards, the line
`from __future__ import absolute_imports, unicode_literals` is included when
generating the local.py for the first time. For existing installations,
adding this line at the top is all that's needed. GitLab issue #424. Thanks to
Gustavo Teixeira (@gsteixei) for the find and researching the cause.
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 #423 <https://gitlab.com/mayan-edms/mayan-edms/issues/423>`_ Metadata can't handle non ascii chars on upload
* `GitLab issue #424 <https://gitlab.com/mayan-edms/mayan-edms/issues/424>`_ DjangoUnicodeDecodeError on document proprieties due document language field
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,101 +0,0 @@
===============================
Mayan EDMS v2.7.2 release notes
===============================
Released: September 06, 2017
What's new
==========
Fixes to the new mailer creation view
-------------------------------------
Some last minute changes to the dynamic form creation code added to support
workflow state actions broke the creation of new mailer profiles. This is fixed
now and a test was added to avoid future regressions. GitLab issue #431.
Thanks to Robert Schöftner(@robert.schoeftner) for the report and the solution.
Event consolidation
-------------------
Several events were created to audit the creation of new documents. These events
caused some confusion and were improved. When creating a new document the two
'document properties edited' events were removed as this is an internal process
and not an user event. Another change is the preservation of the user ID that
submits the file to create the document. Now instead of 'System' the actual
username of the user that uploaded the document will appear in the events log.
GitLab issue #433. Thanks to Jesaja Everling(@jeverling) for the report.
Cabinet list sorting
--------------------
The root cabinet list is now displayed alphabetically sorted. The list of
cabinets to which a document belongs to is now displayed sorted too. Thanks
to Thomas Plotkowiak for the request.
Visual cue for the document cabinet list
----------------------------------------
In the document list item view, a simple visual cue in the form of italized
text was added to the document cabinet list. GitLab issue #435. Thanks to LeVon
Smoker for the request.
Easier testing of production deployments
----------------------------------------
The testing library mock is now installed by default, making it easier to run
the entire test suit on deployed instances.
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 #431 <https://gitlab.com/mayan-edms/mayan-edms/issues/431>`_ can't create new mailer
* `GitLab issue #433 <https://gitlab.com/mayan-edms/mayan-edms/issues/433>`_ Events are not created correctly for document upload
* `GitLab issue #435 <https://gitlab.com/mayan-edms/mayan-edms/issues/435>`_ Add visual cue to differentiate the Cabinet list on a document's preview card.
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

@@ -1,279 +0,0 @@
=============================
Mayan EDMS v2.7 release notes
=============================
Released: August 30, 2017
What's new
==========
Beta Python 3 support
---------------------
Preliminary support for Python 3 has landed in this version. More testing
is still needed but for the most part seems to be usable. This is just
initial support and not meant for production. Please submit any issue with
Python 3 to help improve the support for it.
PDF introspection improvements
------------------------------
Some PDF files encode their page rotation information using indirect values
instead of actually storing the rotation value as an integer. Support these
types of PDF files was added.
3rd party apps
--------------
Support was added to allow 3rd party app adding data columns to existing
models to specify the order in which such new columns will appear. Support
was also added to allow any app to remove existing main menus. App can now in
addition to adding their own dashboard widget, remove existing widgets. As
part of the dashboard updates support was also added to allow app developers to
create multiple dashboards.
Converter customization improvements
------------------------------------
For users wanting more control over the document image conversion process,
support was added to change the internal format used for image conversion.
By default JPG used but via the `pdftoppm_format` and `pillow_format` entries
of the CONVERTER_GRAPHICS_BACKEND_CONFIG setting option any other format
support by Python's Pillow can use used. Support was also added to change the
DPI value used by the conversion process of PDF files to images. The default
value for this coversion was set to 300 DPI. The entry used to specify this
value is `pdftoppm_dpi`.
Workflow refactor
-----------------
This version includes a preview release of the workflow refactor that includes
three new features: transition triggers, state actions, and graphical previews.
The transition triggers allow setting document events as triggers to perform
a workflow transition automatically. State actions allow performing system
actions when a workflow enters or leaves a specify state. For this release
5 actions were included: attaching and removing tags to a document, granting
or revoking access via the ACL, and performing a HTTP POST request. As the
feature matures more actions will be added. These two features make the
workflow app the automation center for Mayan. This feature allow users to program
behaviors to perform, even provoke changes in 3rd party software using the HTTP
POST. This feature works very much like services like IFTTT [ifttt.com]
(If This Then That) or conditionals in programming languages. The last
improvement added to the workflow app is the ability to render a workflow
in a graphical manner, useful for visually understanding, explaining and
debugging workflows.
OCR refactor
------------
As part of the plan to add OCR zone and barcode support the first set of
changes was included in this version. These initial changes bring the OCR
app up to standard with the rest of the system and splits the OCR app into two
new apps: the OCR app and the Document parsing app. The document parsing app
will read text content from documents that provide them and display the result
under the "Content" document tab. The OCR app will also launch for each
document even if they provide text content to recognize any text on images.
This separation gives users the two choices of text information one extracted
from the document (not always available or of quality) and the other recognized
by OCR.
Document parsing
----------------
Historically Mayan has had two methods to extract text from PDF files. First
it will try the program called `pdftotext` and failing that will try the
PDFMiner Python library. The official PDFMiner library is unmaintained and
doesn't support Python 3 will be a requirement for Django 2.0, which will
force Mayan to move to Python 3 exclusively in the near future. For this
reason the PDFMiner parser has been removed. A new library called PyPDF2 was
added in a past version to improve the PDF page count and rotation detection,
initial experience with this library has been positive and since it supports
text extraction might also replace PDFMiner as the secondary PDF text
extraction strategy.
Document version UI
-------------------
The list of versions of a document was updated to use the new item list
view templated added in version 2.6 for document lists. Along with this update
preview support was added for individual document version. It is also possible
to explore and navigate different versions of a document much easier and with
more information that previously available, being able to visually see for
example the difference in a document's versions.
Events system
-------------
The events system has been updated to provide more information and improve
navigation. The `Actor` field will now display `System` when an event was
performed by the system instead of displaying the document name. The
column `Action object` was added to help identify via which object the
event was performed. This is significant when performing actions on objects
which are children of another like document versions. The number and types
of events that are monitored has been increased all of which can also be used
to trigger a workflow transition. The current list:
- Document added to cabinet
- Document removed from cabinet
- Document automatically checked in
- Document checked in
- Document checked out
- Document forcefully checked in
- Document comment created
- Document comment deleted
- Document created
- Document downloaded
- Document properties edited
- New version uploaded
- Document type changed
- Document version reverted
- Document viewed
- Document version OCR finished
- Document version submitted for OCR
- Document version parsing finished
- Document version submitted for parsing
- Tag attached to document
- Tag removed from document
Metadata on document type change
--------------------------------
Changing document types will no longer delete all metadata from the document.
Any existing metadata whose type matches the metadata in the new type will be
preserved.
Permission rebalance
--------------------
In order to attach or remove a tag to a document, the tag view permissions
was needed. This has been update to required the tag attach and remove
permissions respectively.
Other Changes
-------------
- Add workaround for PDF with IndirectObject as the
rotation value. GitHub #261.
- Add ACL list link with icon and use it for the document facet menu.
- Fix mailing app permissions labels.
- Add ACLs link and ACLs permissions to the mailer profile model.
- Improve mailer URL regex.
- Add ordering support to the SourceColumn class. GitLab issue #417.
- Shows the cabinets in the document list. GitLab #417 @corneliusludmann
- Update the index information colums to show the
total number of documents and nodes contained in a level.
- Add workaround for pycountry versions without the bibliographical key.
GitHub issue #250.
- Skip UUID migration on Oracle backends. GitHub issue #251.
- Allow changing the output format, DPI of the pdftoppm command, and
the output format of the converter via the CONVERTER_GRAPHICS_BACKEND_CONFIG
setting sub options: pdftoppm_dpi: 300, pdftoppm_format: jpeg, pillow_format: jpeg
GitHub issues #256 #257 GitLab issue #416.
- Add support for workflow triggers.
- Add support for workflow actions. Includes actions to attach and remove tags,
grant and remove access and perform an HTTP POST request.
- Add support for rendering workflows. Required graphviz binary.
- Add support for unbinding sub menus.
- Fix mailing profile test view.
- Disregard the last 3 dots that mark the end of the YAML document.
- Add support for multiple dashboards.
- Add support for removing dashboard widgets.
- Convert document version view to item list view.
- Add support for browsing individual document versions.
- Add support for dropdown menus to the item list view template.
- Add support for preserving the file extenstion when downloading a document
version. GitLab #415.
- Split OCR app into OCR and parsing.
- Use the literal 'System' instead of the target name when
the action user in unknown.
- When changing document types, don't delete the old metadata that is
also found in the new document type. GitLab issue #421.
- Change the permission needed to attach and remove tags.
- Reduces debug verbosity during tests.
- Remove the NoMimetype match exception. Not needed now that this is
a separate app from the OCR app.
- Make error messages persistent.
- Add 'Action object' column to the event list. Display the
object or target type (document, tag, etc).
- Rebalance tag permissions. Change the required permission to attach
and remove a tag from view to attach and remove respectively.
- Start of error log consolidation sub project.
- Implement field order for the action dynamic forms.
Perform action class validation by importing the class and
not relying on an instance of action model, which might not
exisit when still creating the action.
- Navigation improvements in the workflow app.
- Rename index nodes to index levels.
- Avoid Maximum recursion depth exceeded exception on index document
list view.
Removals
--------
- Folders app.
- The view to submit all document for OCR. The view to submit documents by type
substitutes this once.
- The PDFMiner parser.
Upgrading from a previous version
---------------------------------
Using PIP
~~~~~~~~~
Type in the console::
$ pip install -U mayan-edms
the requirements will also be updated automatically.
Using Git
~~~~~~~~~
If you installed Mayan EDMS by cloning the Git repository issue the commands::
$ git reset --hard HEAD
$ git pull
otherwise download the compressed archived and uncompress it overriding the
existing installation.
Next upgrade/add the new requirements::
$ pip install --upgrade -r requirements.txt
Common steps
~~~~~~~~~~~~
Migrate existing database schema with::
$ mayan-edms.py performupgrade
Add new static media::
$ mayan-edms.py collectstatic --noinput
The upgrade procedure is now complete.
Backward incompatible changes
=============================
* None
Bugs fixed or issues closed
===========================
* `GitHub issue #250 <https://github.com/mayan-edms/mayan-edms/issues/250>`_ migrate fails on documents.0025_auto_20150718_0742
* `GitHub issue #251 <https://github.com/mayan-edms/mayan-edms/issues/251>`_ migrate fails on documents.0032_auto_20160315_0537
* `GitHub issue #256 <https://github.com/mayan-edms/mayan-edms/issues/256>`_ Make it possible to adjust values in apps\converter\literals.py from Settings
* `GitHub issue #257 <https://github.com/mayan-edms/mayan-edms/issues/257>`_ Use the DEFAULT_FILE_FORMAT from literals.py in python.py
* `GitHub issue #261 <https://github.com/mayan-edms/mayan-edms/issues/261>`_ fix_orientation method causes document add to crash
* `GitHub issue #263 <https://github.com/mayan-edms/mayan-edms/issues/263>`_ Typo in mayan/apps/ocr/migrations/0004_documenttypesettings.py
* `GitLab issue #172 <https://gitlab.com/mayan-edms/mayan-edms/issues/172>`_ Metadata default value ignored when changing document type
* `GitLab issue #329 <https://gitlab.com/mayan-edms/mayan-edms/issues/329>`_ Move code to Python 3
* `GitLab issue #415 <https://gitlab.com/mayan-edms/mayan-edms/issues/415>`_ Wrong filename when downloading document version
* `GitLab issue #416 <https://gitlab.com/mayan-edms/mayan-edms/issues/416>`_ DPI value for OCR not taken from document metadata
* `GitLab issue #417 <https://gitlab.com/mayan-edms/mayan-edms/issues/417>`_ Display document cabinets in documents list
* `GitLab issue #421 <https://gitlab.com/mayan-edms/mayan-edms/issues/421>`_ Metadata lost when changing document type
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/

View File

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

View File

@@ -22,25 +22,7 @@ versions of the documentation contain the release notes for any later releases.
.. toctree::
:maxdepth: 1
2.7.2
2.7.1
2.7
2.6.4
2.6.3
2.6.2
2.6.1
2.6
2.5.2
2.5.1
2.5
2.4
2.3
2.2
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.6
2.1.5
2.1.4

Binary file not shown.

View File

@@ -1,25 +1,26 @@
===================
Advanced deployment
===================
=========
Deploying
=========
Mayan EDMS should be deployed like any other Django_ project and
preferably using virtualenv_. Below are some ways to deploy and use Mayan EDMS.
Do not use more than one method.
Below are some ways to deploye and use Mayan EDMS. Do use more than one method.
Being a Django_ and a Python_ project, familiarity with these technologies is
recommended to better understand why Mayan EDMS does some of the things it
does.
OS "bare metal" method
======================
Binary dependencies
===================
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
------
Switch to superuser::
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
requirements using::
sudo -i
apt-get install graphviz nginx supervisor redis-server postgresql \
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
@@ -28,79 +29,6 @@ If using Ubuntu 16.10 also install GPG version 1 (as GPG version 2 is the new de
apt-get install gnupg1 -y
Mac OSX
-------
Mayan EDMS is dependent on a number of binary packages and the recommended
way is to use a package manager such as `MacPorts <https://www.macports.org/>`_
or `Homebrew <http://brew.sh/>`_.
Use MacPorts to install binary dependencies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With MacPorts installed run the command:
.. code-block:: bash
sudo port install python-dev gcc tesseract-ocr unpaper \
python-virtualenv ghostscript libjpeg-dev libpng-dev \
poppler-utils
Set the Binary paths
********************
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs
so either you can symlink the binaries installed via MacPorts in /opt/local/bin/
to /usr/bin/ with ...
.. code-block:: bash
sudo ln -s /opt/local/bin/tesseract /usr/bin/tesseract
Alternatively, set the paths in the ``settings/locals.py``
.. code-block:: python
LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice'
Or Use Homebrew
~~~~~~~~~~~~~~~
With Homebrew installed run the command:
.. code-block:: bash
brew install python gcc tesseract unpaper poppler libpng postgresql
Set the Binary paths
********************
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs.
You can symlink the binaries installed via brew in /usr/local/bin/
to /usr/bin/ with:
.. code-block:: bash
sudo ln -s /usr/local/bin/tesseract /usr/bin/tesseract && \
sudo ln -s /usr/local/bin/unpaper /usr/bin/unpaper && \
sudo ln -s /usr/local/bin/pdftotext /usr/bin/pdftotext && \
sudo ln -s /usr/local/bin/gs /usr/bin/gs
Alternatively, set the paths in the ``settings/locals.py``
.. code-block:: python
LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice'
Common steps
------------
Switch to superuser::
sudo -i
Change to the directory where the project will be deployed::
cd /usr/share
@@ -266,18 +194,76 @@ Make the installation directory readable and writable by the webserver user::
chown www-data:www-data /usr/share/mayan-edms -R
Enable and restart the services [1_]::
Restart the services::
systemctl enable supervisor
systemctl restart supervisor
systemctl restart nginx
[1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740
Docker method
=============
Deploy the Docker image stack::
docker run --name postgres -e POSTGRES_DB=mayan -e POSTGRES_USER=mayan -e POSTGRES_PASSWORD=mysecretpassword -v /var/lib/postgresql/data -d postgres
docker run --name redis -d redis
docker run --name mayan-edms -p 80:80 --link postgres:postgres --link redis:redis -e POSTGRES_DB=mayan -e POSTGRES_USER=mayan -e POSTGRES_PASSWORD=mysecretpassword -v /usr/local/lib/python2.7/dist-packages/mayan/media -d mayanedms/monolithic
After the Mayan EDMS container finishes initializing (about 5 minutes), it will
be available by browsing to http://127.0.0.1. You can inspect the initialization
with::
docker logs mayan-edms
Docker Compose method
=====================
Create a file named ``environment`` with the following content::
POSTGRES_DB=mayan
POSTGRES_PASSWORD=mayanpassword
POSTGRES_USER=mayan
Create a file named ``docker-compose.yml`` with the content::
postgres:
env_file:
- ./environment
image: postgres
volumes:
- /var/lib/postgresql/data
redis:
image: redis
mayan-edms:
env_file:
- ./environment
image: mayanedms/monolithic
links:
- postgres
- redis
ports:
- "80:80"
volumes:
- /usr/local/lib/python2.7/dist-packages/mayan/media
Launch the entire stack (Postgres, Redis, and Mayan EDMS) using::
docker-compose -f docker-compose.yml -p mayanedms up -d
After the Mayan EDMS container finishes initializing (about 5 minutes), it will
be available by browsing to http://127.0.0.1. You can inspect the initialization
with::
docker logs mayanedms_mayan-edms_1
Vagrant method
==============
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::
vagrant up production
.. _Debian: http://www.debian.org/
.. _Django: http://www.djangoproject.com/
.. _Python: http://www.python.org/
.. _SQLite: https://www.sqlite.org/
.. _Ubuntu: http://www.ubuntu.com/
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html
.. _1: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740

View File

@@ -16,8 +16,8 @@ request on GitLab_.
Project philosophies
--------------------
How to think about Mayan EDMS when doing changes or adding new features;
why things are the way they are in Mayan EDMS:
How to think about Mayan EDMS when doing changes or adding new features,
why things are the way they are in Mayan EDMS.
- Functionality must be as market/sector independent as possible, code for the
95% of use cases.
@@ -36,7 +36,7 @@ why things are the way they are in Mayan EDMS:
not viable/mature/efficient.
- Each app is as independent and self contained as possible. Exceptions, the
basic requirements: navigation, permissions, common, main.
- If an app is meant to be used by more than one other app, it should be as
- If an app is meant to be used by more than one other app it should be as
generic as possible in regard to the project and another app will bridge the functionality.
- Example: since indexing (document_indexing) only applies to documents, the
@@ -48,18 +48,12 @@ Coding conventions
Follow PEP8
~~~~~~~~~~~
Whenever possible, but don't obsess over things like line length:
Whenever possible, but don't obsess over things like line length.
.. code-block:: bash
$ flake8 --ignore=E501,E128,E122 |less
To perform automatic PEP8 checks, install flake8's git hook using:
.. code-block:: bash
$ flake8 --install-hook git
Imports
~~~~~~~
@@ -109,9 +103,9 @@ Example:
)
from .models import Index, IndexInstanceNode, DocumentRenameCount
All local app module imports are in relative form. Local app module name is to
All local app module imports are in relative form, local app module name is to
be referenced as little as possible, unless required by a specific feature,
trick, restriction (e.g., Runtime modification of the module's attributes).
trick, restriction, ie: Runtime modification of the module's attributes.
Incorrect:
@@ -134,7 +128,7 @@ Dependencies
Mayan EDMS apps follow a hierarchical model of dependency. Apps import from
their parents or siblings, never from their children. Think plugins. A parent
app must never assume anything about a possible existing child app. The
documents app and the Document model are the basic entities; they must never
documents app and the Document model are the basic entities they must never
import anything else. The common and main apps are the base apps.
@@ -209,7 +203,7 @@ Mayan EDMS source is controlled with Git_.
The project is publicly accessible, hosted and can be cloned from **GitLab** using::
$ git clone https://gitlab.com/mayan-edms/mayan-edms.git
git clone https://gitlab.com/mayan-edms/mayan-edms.git
Git branch structure
@@ -241,14 +235,55 @@ Steps to deploy a development version
-------------------------------------
.. code-block:: bash
$ git clone https://gitlab.com/mayan-edms/mayan-edms.git
$ cd mayan-edms
$ git checkout development
$ virtualenv venv
$ source venv/bin/activate
$ pip install -r requirements.txt
$ ./manage.py initialsetup
$ ./manage.py runserver
git clone https://gitlab.com/mayan-edms/mayan-edms.git
cd mayan-edms
git checkout development
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
./manage.py initialsetup
./manage.py runserver
Setting up a development version using Vagrant
----------------------------------------------
Make sure you have Vagrant and a provider properly installed as per
https://docs.vagrantup.com/v2/installation/index.html
Start and provision a machine using:
.. code-block:: bash
vagrant up development
To launch a standalone development server
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
vagrant ssh
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000
To launch a development server with a celery worker and Redis as broker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: bash
vagrant ssh
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000 --settings=mayan.settings.celery_redis
Then on a separate console launch a celery worker from the same provisioned Vagrant machine:
.. code-block:: bash
vagrant ssh
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
vagrant@vagrant-ubuntu-trusty-32:~$ DJANGO_SETTINGS_MODULE='mayan.settings.celery_redis' celery -A mayan worker -l DEBUG -Q checkouts,mailing,uploads,converter,ocr,tools,indexing,metadata -Ofair -B
Contributing changes
@@ -326,12 +361,12 @@ The documentation is written in `reStructured Text`_ format, processed with
Sphinx_, and resides in the ``docs`` directory. In order to build it, you will
first need to install the documentation editing dependencies with::
$ pip install -r requirements/documentation.txt
pip install -r requirements/documentation.txt
Then, to build an HTML version of the documentation, run the following command
from the **docs** directory::
$ make docs_serve
make livehtml
The generated documentation can be viewed by browsing to http://127.0.0.1:8000
or by browsing to the ``docs/_build/html`` directory.
@@ -351,18 +386,22 @@ Source file package
This is the sequence of step used to produce an installable package:
1. Generate the packaged version (will produce dist/mayan-edms-x.y.z.tar.gz)::
1. Make sure there are no lingering packages from previous attempts::
$ make sdist
rm dist -R
2. Do a test install::
2. Generate the packaged version (will produce dist/mayan-edms-x.y.z.tar.gz)::
$ cd /tmp
$ virtualenv venv
$ source venv/bin/activate
$ pip install <path of the Git repository>/dist/mayan-edms-x.y.z.tar.gz
$ mayan-edms.py initialsetup
$ mayan-edms.py runserver
python setup.py sdist
3. Do a test install::
cd /tmp
virtualenv venv
source venv/bin/activate
pip install <path of the Git repository>/dist/mayan-edms-x.y.z.tar.gz
mayan-edms.py initialsetup
mayan-edms.py runserver
Wheel package
@@ -372,9 +411,9 @@ Wheel package
$ pip install -r requirements/development.txt
2. Create wheel package using the makefile::
2. Create wheel package using the source file package (Until issue #99 of wheel is fixed: https://bitbucket.org/pypa/wheel/issue/99/cannot-exclude-directory)::
$ make wheel
$ pip wheel --no-index --no-deps --wheel-dir dist dist/mayan-edms-x.y.z.tar.gz
3. Do a test install::
@@ -384,60 +423,3 @@ Wheel package
$ pip install <path of the Git repository>/dist/mayan_edms-x.y.z-py2-none-any.whl
$ mayan-edms.py initialsetup
$ mayan-edms.py runserver
Version numbering
~~~~~~~~~~~~~~~~~
Mayan EDMS uses the Semantic Versioning (http://semver.org/) method to choose
version numbers along with Python's PEP-0440 (https://www.python.org/dev/peps/pep-0440/)
to format them.
X.YaN # Alpha release
X.YbN # Beta release
X.YrcN # Release Candidate
X.Y # Final release
Release checklist
~~~~~~~~~~~~~~~~~
1. Check for missing migrations::
$ ./manage.py makemigrations
2. Synchronize translations::
$ make translations_pull
3. Compile translations::
$ make translations_compile
4. Write release notes.
5. Update changelog.
6. Update requirements version in `setup.py`
7. Bump version in `mayan/__init__.py`
8. Build source package and test::
$ make test_sdist_via_docker_ubuntu
9. Build wheel package and test::
$ make test_whell_via_docker_ubuntu
10. Tag version::
$ git tag -a vX.Y.Z -m "Version X.Y.Z"
11. Push tag upstream::
$ git push --tags
12. Build and upload a test release::
$ make release_test_via_docker_ubuntu
13. Build and upload a final release::
$ make release_via_docker_ubuntu

View File

@@ -126,10 +126,3 @@ dependent support Python 3 then will the project move to fully support Python 3.
Make sure that the Celery BEAT scheduler is running correctly as it is the element
that triggers the periodics tasks.
**Q: How to do LDAP authentication**
A sample settings file called ldap_connection_settings.py is included in the
contrib/settings/ folder of the repository showing how to setup LDAP
authentication.

View File

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

View File

@@ -1,22 +1,143 @@
============
Installation
============
The easiest way to use Mayan EDMS is by using the official Docker_ image.
Make sure Docker is properly installed and working before attempting to install
Mayan EDMS.
Mayan EDMS should be deployed like any other Django_ project and
preferably using virtualenv_.
Hardware requirements
---------------------
Being a Django_ and a Python_ project, familiarity with these technologies is
recommended to better understand why Mayan EDMS does some of the things it
does.
- 2 Gigabytes of RAM (1 Gigabyte if OCR is turned off).
- Multiple core CPU (64 bit, faster than 1 GHz recommended).
Bellow are the step needed for a test install.
Docker procedure
----------------
Binary dependencies
===================
For the complete set of installation, configuration, upgrade, and backup
instructions visit the Mayan EDMS Docker Hub page at:
https://hub.docker.com/r/mayanedms/mayanedms/
Ubuntu
------
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
requirements using::
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
.. _Docker: https://www.docker.com/
Mac OSX
-------
Mayan EDMS is dependent on a number of binary packages and the recommended
way is to use a package manager such as `MacPorts <https://www.macports.org/>`_
or `Homebrew <http://brew.sh/>`_.
Use MacPorts to install binary dependencies
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
With MacPorts installed run the command:
.. code-block:: bash
sudo port install python-dev gcc tesseract-ocr unpaper \
python-virtualenv ghostscript libjpeg-dev libpng-dev \
poppler-utils
Set the Binary paths
********************
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs
so either you can symlink the binaries installed via MacPorts in /opt/local/bin/
to /usr/bin/ with ...
.. code-block:: bash
sudo ln -s /opt/local/bin/tesseract /usr/bin/tesseract
... alternatively set the paths in the ``settings/locals.py``
.. code-block:: python
LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice'
Or Use Homebrew
~~~~~~~~~~~~~~~
With Homebrew installed run the command:
.. code-block:: bash
brew install python gcc tesseract unpaper poppler libpng postgresql
Set the Binary paths
********************
Mayan EDMS by default will look in /usr/bin/ for the binary files it needs
so either you can symlink the binaries installed via brew in /usr/local/bin/
to /usr/bin/ with ...
.. code-block:: bash
sudo ln -s /usr/local/bin/tesseract /usr/bin/tesseract && \
sudo ln -s /usr/local/bin/unpaper /usr/bin/unpaper && \
sudo ln -s /usr/local/bin/pdftotext /usr/bin/pdftotext && \
sudo ln -s /usr/local/bin/gs /usr/bin/gs
... alternatively set the paths in the ``settings/locals.py``
.. code-block:: python
LIBREOFFICE_PATH = '/Applications/LibreOffice.app/Contents/MacOS/soffice'
Actual project installation
===========================
Initialize a ``virtualenv`` to deploy the project:
.. code-block:: bash
virtualenv venv
source venv/bin/activate
pip install mayan-edms
By default Mayan EDMS will create a single file SQLite_ database, which makes
it very easy to start using Mayan EDMS. Populate the database with the
project's schema doing:
.. code-block:: bash
mayan-edms.py initialsetup
mayan-edms.py runserver
Point your browser to http://127.0.0.1:8000. If everything was installed
correctly you should see the login screen and panel showing a randomly generated
admin password.
Background tasks and scheduled tasks will not run when using the test server.
The ``runserver`` command is only meant for testing, do not use in a production
server.
Note that the default IP address, 127.0.0.1, is not accessible from other
machines on your network. To make your test server viewable to other
machines on the network, use its own IP address (e.g. 192.168.2.1) or 0.0.0.0 or :: (with IPv6 enabled).
You can provide an IPv6 address surrounded by brackets (e.g. [200a::1]:8000). This will automatically enable IPv6 support.
Production use
==============
After making sure everything is running correctly, stop the ``runserver`` command.
Deploy Mayan EDMS using the webserver of your preference. For more information
on deployment instructions and examples, checkout Django's official documentation
on the topic https://docs.djangoproject.com/en/1.7/howto/deployment/
For a simple production deployment setup follow the instructions in the
:doc:`deploying` chapter.
.. _Debian: http://www.debian.org/
.. _Django: http://www.djangoproject.com/
.. _Download: https://github.com/mayan-edms/mayan-edms/archives/master
.. _Python: http://www.python.org/
.. _SQLite: https://www.sqlite.org/
.. _Ubuntu: http://www.ubuntu.com/
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html

View File

@@ -2,73 +2,101 @@
Roadmap
=======
- Workflow:
- Goals for version 2.2:
- Improve workflow system
- Workflow indexing support. Accessor already works ``{{ document.workflows.all.0.get_current_state }}``. Index recalculation after workflow transition is missing.
- Workflow actions. Predefined actions to be execute on document leaving or entering a state or a transition. Example: "Add to folder X", "Attach tag X".
- Add support for state recipients.
- Add workflow document inbox notification.
- Indexing
- Replace indexing and smart linking template language (use Jinja2 instead of Django's).
- Display/find documents by their current workflow state.
- Distribution:
- Goals for version 3.0:
- Debian packages. Limited success so far using https://github.com/astraw/stdeb.
- Replace UI.
- Notifications:
- General goals:
- Add support for subscribing to a document's events.
- Add support for subscribing to a document type events.
- Add support for subscribing specific events.
- Distribution:
- OCR:
- Debian packages. Limited success so far using https://github.com/astraw/stdeb.
- Add image preprocessing for OCR. Increase effectiveness of Tesseract.
- Downloads:
- Python 3:
- Transition from filetransfer package to django-downloadview. This task was started and the view ``common.generics.SingleObjectDownloadView`` was created. The ``document_signatures`` app is the first app to use it.
- Complete support for Python3.
- Find replacement for pdfminer (Python3 support blocker). Use pdfminer.six (#257).
- Notifications:
- Simple serving:
- Add support for subscribing to a document's events.
- Add support for subscribing to a document type events.
- Add support for subscribing specific events.
- Provide option to serve Mayan EDMS without a webserver (using Tornado o similar). Work started in branch: ``/feature/tornado``
- OCR:
- Upload wizard:
- Add image preprocessing for OCR. Increase effectiveness of Tesseract.
- Improve interface with tesseract.
- Fix pytesseract shortcomings via upstream patches or re-implement. Move to PyOCR.
- Make wizard step configurable. Create ``WirzardStep`` class so apps can add their own upload wizard steps, instead of the steps being hardcoded in the sources app.
- Add upload wizard step to add the new documents to a folder.
- Python 3:
- Other
- Complete support for Python3.
- Find replacement for pdfminer (Python3 support blocker). Use pdfminer.six (#257).
- Use a sequence and not the document upload date to determine the document version sequence. MySQL doesn't store milisecond value in dates and if several version are uploaded in a single second there is no way to know the order or which one is the latests. This is why the document version tests include a 2 second delay. Possible solution: http://schinckel.net/2015/05/17/django-second-autofield/
- Include external app Mayan-EXIF into main code.
- Convert all views from functions to class based views (CBV).
- Increase test coverage.
- Mock external services in tests. For example the ``django_GPG`` app key search and receive tests.
- Pluggable icon app. Make switching icon set easier.
- Reduce dependency on binary executables for a default install.
- Find replacement for ``cssmin`` & ``django-compressor``.
- Find replacement for ``python-gnupg``. Unstable & inconsistent API.
- Google docs integration. Upload document from Google Drive.
- Get ``dumpdata`` and ``loaddata`` working flawlessly. Will allow for easier backups, restores and database backend migrations.
- Add generic list ordering. ``django.views.generic.list.MultipleObjectMixin`` (https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin) now supports an ``ordering`` parameter.
- Add support to convert any document to PDF. https://gitlab.mister-muffin.de/josch/img2pdf
- Add support for combining documents.
- Add support for splitting documents.
- Add new document source to get documents from an URL.
- Document overlay support. Such as watermarks. https://gist.github.com/umrashrf/8616550
- Add support for metadata mapping files. CSV file containing filename to metadata values mapping, useful for bulk upload and migrations.
- Add support for registering widgets to the home screen.
- Merge mimetype and converter apps.
- Add GPG key generation.
- If SourceColumn label is None take description from model. Avoid unnecessary translatable strings.
- Metadata widgets (Date, time, timedate).
- Datatime widget: https://github.com/smalot/bootstrap-datetimepicker
- Separate Event class instances with a parent namespace class: EventNamespace.
- Add events for document signing app (uploaded detached signateure, signed document, deleted signature)
- A configurable conversion process. Being able to invoke different binaries for file conversion, as opposed to the current libreoffice only solution.
- A tool in the admin interface to mass (re)convert the files (basically the page count function, but then applied on all documents).
- Find solution so that documents in watched folders are not processed until they are ready. Use case scanning directly to scanned folders.
- Simple serving:
- Provide option to serve Mayan EDMS without a webserver (using Tornado o similar). Work started in branch: ``/feature/tornado``
- Source code:
- Implement Developer certificate of origin: http://developercertificate.org/
- Upload wizard:
- Make wizard step configurable. Create ``WirzardStep`` class so apps can add their own upload wizard steps, instead of the steps being hardcoded in the sources app.
- Add upload wizard step to add the new documents to a folder.
- Other
- Use a sequence and not the document upload date to determine the document version sequence. MySQL doesn't store milisecond value in dates and if several version are uploaded in a single second there is no way to know the order or which one is the latests. This is why the document version tests include a 2 second delay. Possible solution: http://schinckel.net/2015/05/17/django-second-autofield/
- Include external app Mayan-EXIF into main code.
- Convert all views from functions to class based views (CBV).
- Increase test coverage.
- Mock external services in tests. For example the ``django_GPG`` app key search and receive tests.
- Pluggable icon app. Make switching icon set easier.
- Reduce dependency on binary executables for a default install.
- Find replacement for ``cssmin`` & ``django-compressor``.
- Find replacement for ``python-gnupg``. Unstable & inconsistent API.
- Google docs integration. Upload document from Google Drive.
- Get ``dumpdata`` and ``loaddata`` working flawlessly. Will allow for easier backups, restores and database backend migrations.
- Make more view asynchronous:
- trash can emptying.
- document delete view.
- Add support for loading settings from environment variables, not just settings/local.py.
- Add generic list ordering. ``django.views.generic.list.MultipleObjectMixin`` (https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-multiple-object/#django.views.generic.list.MultipleObjectMixin) now supports an ``ordering`` parameter.
- Workaround GitLab CI MySQL test errors. GitLab MySQL's container doesn't support UTF-8 content.
- Add support for downloading the OCR content as a text file.
- Add support to convert any document to PDF. https://gitlab.mister-muffin.de/josch/img2pdf
- Add support for combining documents.
- Add support for splitting documents.
- Add task viewer.
- Add new document source to get documents from an URL.
- Document overlay support. Such as watermarks. https://gist.github.com/umrashrf/8616550
- Add support for metadata mapping files. CSV file containing filename to metadata values mapping, useful for bulk upload and migrations.
- Add support for registering widgets to the home screen.
- Merge mimetype and converter apps.
- Add entry in About menu to check latest Mayan EDMS version via PyPI.
- Add GPG key generation.
- Add documentation section on editing the settings/local.py file.
- Add documentation section with warning about using runserver.
- Replace ``urlpatterns = patterns( ''``, with Python lists. Django recommendation for post 1.7.
- If SourceColumn label is None take description from model. Avoid unnecessary translatable strings.
- Metadata widgets (Date, time, timedate).
- Datatime widget: https://github.com/smalot/bootstrap-datetimepicker
- Separate Event class instances with a parent namespace class: EventNamespace.
- Add events for document signing app (uploaded detached signateure, signed document, deleted signature)
- A configurable conversion process. Being able to invoke different binaries for file conversion, as opposed to the current libreoffice only solution.
- A tool in the admin interface to mass (re)convert the files (basically the page count function, but then applied on all documents).
- Find solution so that documents in watched folders are not processed until they are ready. Use case scanning directly to scanned folders.

View File

@@ -10,9 +10,3 @@ the directory: ``/usr/share/mayan-edms/mayan/settings/local.py``.
For a list of all the configuration options, go to "Setup" then "Settings" on
your browser. This is also a good place to check if your overrided setting
option value in your ``local.py`` file is being interpreted correctly.
Settings can also be changed via environment variables by prepending the string
"MAYAN_" to the configuration name. For example, to change the number of documents
displayed per page (COMMON_PAGINATE_BY, by default 40), use::
MAYAN_COMMON_PAGINATE_BY=10

View File

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

View File

@@ -1,51 +0,0 @@
#!/usr/bin/env python
from __future__ import unicode_literals
import os
import django
from django.conf import settings
from django.template import Template, Context
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
REQUIREMENTS_FILE = 'requirements.txt'
SETUP_TEMPLATE = 'setup.py.tmpl'
def get_requirements(base_directory, filename):
result = []
with open(os.path.join(base_directory, filename)) as file_object:
for line in file_object:
if line.startswith('-r'):
line = line.split('\n')[0][3:]
directory, filename = os.path.split(line)
result.extend(
get_requirements(
base_directory=os.path.join(base_directory, directory), filename=filename
)
)
elif not line.startswith('\n'):
result.append(line.split('\n')[0])
return result
if __name__ == '__main__':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mayan.settings')
django.setup()
requirements = get_requirements(
base_directory=BASE_DIR, filename=REQUIREMENTS_FILE
)
with open(SETUP_TEMPLATE) as file_object:
template = file_object.read()
result = Template(template).render(
context=Context({'requirements': requirements})
)
with open('setup.py', 'w') as file_object:
file_object.write(result)

View File

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

View File

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

View File

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

View File

@@ -14,40 +14,10 @@ class ModelPermission(object):
@classmethod
def register(cls, model, permissions):
from django.contrib.contenttypes.fields import GenericRelation
cls._registry.setdefault(model, [])
for permission in permissions:
cls._registry[model].append(permission)
AccessControlList = apps.get_model(
app_label='acls', model_name='AccessControlList'
)
model.add_to_class('acls', GenericRelation(AccessControlList))
@classmethod
def get_classes(cls, as_content_type=False):
ContentType = apps.get_model(
app_label='contenttypes', model_name='ContentType'
)
if as_content_type:
content_type_dictionary = ContentType.objects.get_for_models(
*cls._registry.keys()
)
content_type_ids = [
content_type.pk for content_type in content_type_dictionary.values()
]
return ContentType.objects.filter(pk__in=content_type_ids)
else:
return cls._registry.keys()
@classmethod
def get_for_class(cls, klass):
return cls._registry.get(klass, ())
@classmethod
def get_for_instance(cls, instance):
StoredPermission = apps.get_model(
@@ -66,9 +36,7 @@ class ModelPermission(object):
if proxy:
permissions.extend(cls._registry.get(proxy))
pks = [
permission.stored_permission.pk for permission in set(permissions)
]
pks = [permission.stored_permission.pk for permission in set(permissions)]
return StoredPermission.objects.filter(pk__in=pks)
@classmethod

View File

@@ -1,16 +0,0 @@
from __future__ import unicode_literals
class ACLsBaseException(Exception):
"""
Base exception for the acls app
"""
pass
class PermissionNotValidForClass(ACLsBaseException):
"""
The permission is not one that has been registered for a class using the
ModelPermission class.
"""
pass

View File

@@ -35,10 +35,6 @@ link_acl_list = Link(
permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list',
kwargs=get_kwargs_factory('resolved_object')
)
link_acl_list_with_icon = Link(
icon='fa fa-lock', permissions=(permission_acl_view,), text=_('ACLs'),
view='acls:acl_list', kwargs=get_kwargs_factory('resolved_object')
)
link_acl_create = Link(
permissions=(permission_acl_edit,), text=_('New ACL'),
view='acls:acl_create', kwargs=get_kwargs_factory('resolved_object')

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "الصلاحيات"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Insufficient access."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "لا شيء"
@@ -71,102 +74,156 @@ msgstr "Edit ACLs"
msgid "View ACLs"
msgstr "View ACLs"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Roles"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: bg\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Разрешения"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Недостатъчен достъп."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "достъп вписване"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "достъп вписвания"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Няма"
@@ -71,102 +74,156 @@ msgstr "Редактиране на контролни списъци за до
msgid "View ACLs"
msgstr "Преглед на контролни списъци за достъп"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Роли"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: bs_BA\n"
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Dozvole"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr "Nedovoljne dozvole."
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:54
msgid "Access entry"
msgstr "Pristupni unos"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Pristupni unosi"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Nijedno"
@@ -71,102 +74,156 @@ msgstr "Izmjeniti ACLs"
msgid "View ACLs"
msgstr "Pregledati ACLs"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Liste kontrole pristupa (ACL) za: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Role"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: da\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr ""
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Ingen"
@@ -71,102 +74,156 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr ""
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,16 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Translators:
# Berny <berny@bernhard-marx.de>, 2015
# Jesaja Everling <jeverling@gmail.com>, 2017
# Tobias Paepke <tobias.paepke@paepke.net>, 2016
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"Last-Translator: Roberto Rosario\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -20,45 +20,47 @@ msgstr ""
"Language: de_DE\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Zugriffsberechtigungen"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Berechtigungen"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rolle"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Löschen"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Neue Berechtigung"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Fehlende Berechtigung"
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Berechtigungseintrag"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Berechtigungseinträge"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Keine"
@@ -74,102 +76,156 @@ msgstr "Zugriffsberechtigungen bearbeiten"
msgid "View ACLs"
msgstr "Zugriffsberechtigungen anzeigen"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "API URL für die Liste der Berechtigungen dieser ACL"
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL für die Berechtigung in Relation zur ACL zu der sie zugeordnet ist. Diese URL unterscheidet sich von der normalen Workflow URL."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Primary key der zur ACL hinzuzufügenden Berechtigung."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Keine solche Berechtigung: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Durch Komma getrennte Liste von Primary Keys der zu dieser ACL hinzuzufügenden Berechtigungen."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Primary Key der Rolle die dieser ACL zugeordnet ist."
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Neue Zugriffsberechtigung für %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "ACL \"%s\" löschen"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Zugriffsberechtigungen für %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Verfügbare Berechtigungen"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Erteilte Berechtigungen"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Rollen"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -1,171 +1,254 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"POT-Creation-Date: 2016-11-23 02:52-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/"
"language/en/)\n"
"Language: en\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr ""
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
#, fuzzy
msgid "Permissions"
msgstr ""
msgstr "permissions"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#, fuzzy
#| msgid "Roles"
msgid "Role"
msgstr ""
msgstr "Roles"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#, fuzzy
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
msgstr "View ACLs"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Insufficient access."
#: models.py:54
#: models.py:44
#, fuzzy
msgid "Access entry"
msgstr ""
msgstr "access entry"
#: models.py:55
#: models.py:45
#, fuzzy
msgid "Access entries"
msgstr ""
msgstr "access entries"
#: models.py:59
#, python-format
#: 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 ""
msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
#: models.py:76
#: models.py:64
msgid "None"
msgstr ""
#: permissions.py:7
msgid "Access control lists"
msgstr ""
msgstr "Access control lists"
#: permissions.py:10
msgid "Edit ACLs"
msgstr ""
msgstr "Edit ACLs"
#: permissions.py:13
msgid "View ACLs"
msgstr ""
msgstr "View ACLs"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#, python-format
#: views.py:78
#, fuzzy, python-format
msgid "New access control lists for: %s"
msgstr ""
msgstr "access control lists for: %s"
#: views.py:101
#, python-format
#: views.py:109
#, fuzzy, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#, python-format
msgid "Access control lists for: %s"
msgstr ""
msgstr "Default ACLs"
#: views.py:151
#, fuzzy, python-format
msgid "Access control lists for: %s"
msgstr "access control lists for: %s"
#: views.py:162
#, fuzzy
msgid "Available permissions"
msgstr ""
msgstr "has permission"
#: views.py:152
#: views.py:163
#, fuzzy
msgid "Granted permissions"
msgstr ""
msgstr "has permission"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid "Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr ""
#, fuzzy
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#, fuzzy
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#, fuzzy
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#, fuzzy
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#, fuzzy
#~ msgid "Permission"
#~ msgstr "permissions"
#, fuzzy
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#, fuzzy
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#, fuzzy
#~ msgid "Holder"
#~ msgstr "holder"
#, fuzzy
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#, fuzzy
#~ msgid "Namespace"
#~ msgstr "namespace"
#, fuzzy
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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."
#, fuzzy
#~ msgid "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#, fuzzy
#~ msgid "Class"
#~ msgstr "class"
#, fuzzy
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#, fuzzy
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#, fuzzy
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,15 +3,16 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Translators:
# jmcainzos <jmcainzos@vodafone.es>, 2015
# Roberto Rosario, 2015
# Roberto Rosario, 2015-2017
# Roberto Rosario, 2015-2016
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:38+0000\n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-10-28 07:38+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"
@@ -20,45 +21,47 @@ msgstr ""
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "LCAs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permisos"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rol"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Borrar"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nueva LCA"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr "Acceso insuficiente para: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr "Acceso insuficiente."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Entrada de acceso"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Entradas de acceso"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Ninguno"
@@ -74,102 +77,156 @@ msgstr "Editar LCAs"
msgid "View ACLs"
msgstr "Ver LCAs"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "URL de la API que apunta a la lista de permisos para esta lista de control de acceso."
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "URL de la API que apunta a un permiso en relación con la lista de control de acceso a la que está conectado. Esta URL es diferente de la URL canónica de flujo de trabajo."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Llave primaria del nuevo permiso para conceder a la lista de control de acceso."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "No existe el permiso: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Lista separada por comas de las llaves primarias de permisos para conceder a esta lista de control de acceso."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Las llaves primarias de los roles a los que se vincula esta lista de control de acceso."
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nueva lista de control de acceso para: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Borrar LCA: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Listas de control de acceso para: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Permisos disponibles"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Permisos otorgados"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Los permisos inactivos se heredan de un objeto precedente."
#: workflow_actions.py:25
msgid "Object type"
msgstr "Tipo de objeto"
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr "Tipo de objeto para el que se modificará el acceso."
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr "ID de objeto"
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr "Identificador numérico del objeto para el que se modificará el acceso."
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Roles"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr "Roles cuyo acceso será modificado."
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr "Permisos para otorgar/revocar a los roles para el objeto seleccionado anteriormente."
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr "Otorgar acceso"
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr "Revocar acceso"
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,13 +3,13 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Nima Towhidi <nima.towhidi@gmail.com>, 2017
# Translators:
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n"
"MIME-Version: 1.0\n"
@@ -18,45 +18,47 @@ msgstr ""
"Language: fa\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "مجوزها"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "نقش"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "حذف"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "دسترسی ناکافی"
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "ورودی دسترسی"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "ورودیهای دسترسی"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "هیچکدام."
@@ -72,102 +74,156 @@ msgstr "ویرایش دسترسی ها"
msgid "View ACLs"
msgstr "دیدن دسترسی ها"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "لیست کنترل دسترسی ها برای : %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "مجوزهای موجود"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "مجوزهای داده شده"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "مجوزهای غیرفعال، از شیء بالاتر به ارث رسیده‌اند."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:42
msgid "Roles"
msgstr "نقش ها"
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,14 +3,14 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2016-2017
# Translators:
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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"
"MIME-Version: 1.0\n"
@@ -19,45 +19,47 @@ msgstr ""
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Droits"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permissions"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rôle"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Suppression"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nouveau droit"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "droit d'accès insuffisant."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Entrée d'accès"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Entrées d'accès"
#: models.py:59
#: 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 "Permissions \"%(permissions)s\" du rôle \"%(role)s\" pour \"%(object)s\""
msgstr ""
#: models.py:76
#: models.py:64
msgid "None"
msgstr "Aucun"
@@ -73,102 +75,156 @@ msgstr "Editer les droits"
msgid "View ACLs"
msgstr "voir les droits d'accès"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "URL de l'API indiquant la liste des autorisations pour cette liste de contrôle d'accès."
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "URL de l'API pointant vers une autorisation en relation avec la liste de contrôle d'accès à laquelle elle est attachée. Cette URL est différente de l'URL du flux de travail canonique."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Clé principale de la nouvelle autorisation pour autoriser à la liste de contrôle d'accès."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Aucune autorisation de ce genre: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Liste séparée par des virgules des clés primaires d'autorisation pour autoriser à cette liste de contrôle d'accès."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Clés primaires du rôle auquel cette liste de contrôle d'accès se rattache."
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nouvelle liste de contrôle d'accès pour: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Supprimer le droit: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Liste des contrôle d'accès pour: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Permissions disponibles"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Permissions autorisées"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permission du rôle \"%(role)s\" pour \"%(object)s\"@"
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "La désactivation de permission est hérité de l'objet parent"
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Rôles"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n"
"MIME-Version: 1.0\n"
@@ -17,156 +18,212 @@ msgstr ""
"Language: hu\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACL-ek"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Engedélyek"
msgstr ""
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Szerepkör"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Törlés"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr ""
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Hozzáférési bejegyzés"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Hozzáférési bejegyzések"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Semmi"
#: permissions.py:7
msgid "Access control lists"
msgstr "Hozzáférési lista"
msgstr ""
#: permissions.py:10
msgid "Edit ACLs"
msgstr "Hozzáférési listák szerkesztése"
msgstr ""
#: permissions.py:13
msgid "View ACLs"
msgstr "Hozzáférési listák megtekintése"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Nincs ilyen jogosúltság: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Hozzáférési lista a: %s -hoz"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Elérhető jogosúltságok"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Élvezett jogosúltságok"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Szerepkörök"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: id\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr ""
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr ""
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr ""
@@ -71,102 +74,156 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr ""
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,14 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Marco Camplese <marco.camplese.mc@gmail.com>, 2016-2017
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"Last-Translator: Roberto Rosario\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -18,45 +19,47 @@ msgstr ""
"Language: it\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permessi"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Ruolo"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Cancella"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nuova ACL"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Accesso insufficiente."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Voce di accesso"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Voci di accesso"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Nessuna "
@@ -72,102 +75,156 @@ msgstr "Modifica ACL"
msgid "View ACLs"
msgstr "Visualizza ACL"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "URL delle API che punta alla lista controllo accessi"
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL che indica una autorizzazione in relazione all'elenco di controllo di accesso a cui è associato. Questo URL è diverso dall'originale canonico URL."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Chiavi primarie del permesso per garantire la lista controllo accessi"
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Nessun permesso: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Lista separata da virgole delle chiavi primarie dei permessi per garantire l'accesso alle liste di controllo"
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Chiavi primarie del ruolo a cui si lega la lista controllo accessi"
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nuova lista di controllo accesso per: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Cancella ACL: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Lista dei permessi d'accesso per: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Autorizzazioni disponibili "
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Autorizzazioni concesse "
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permessi del ruolo \"%(role)s\" per \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Il permesso disabilita è ereditato dall'oggetto padre"
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Ruoli "
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,15 +3,16 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"Last-Translator: Roberto Rosario\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,45 +20,47 @@ msgstr ""
"Language: nl_NL\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Authorisatielijsten"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permissies"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Gebruikersrol"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Verwijder"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nieuwe authorisatielijst"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Permissie is ontoereikend"
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Authorisatie invoer"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Authorisaties invoer"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Geen"
@@ -73,102 +76,156 @@ msgstr "Bewerk authorisatielijsten"
msgid "View ACLs"
msgstr "Bekijk authorisatielijsten"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nieuwe authorisatielijsten voor: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Verwijder authorisatielijst: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Authorisatielijsten voor: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Beschikbare permissies"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Toegekende permissies"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Rol \"%(role)s\" permissies voor \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Gebruikersrollen"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,61 +3,63 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Translators:
# Wojtek Warczakowski <w.warczakowski@gmail.com>, 2016
# Wojtek Warczakowski <w.warczakowski@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: pl\n"
"Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
"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:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Listy ACL"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Uprawnienia"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Rola"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Usuń"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nowa lista ACL"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Niewystarczający dostęp."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Zgłoszenie dostępu"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Zgłoszenia dostępu"
#: models.py:59
#: 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 "Uprawnienia \"%(permissions)s\" dla roli \"%(role)s\" dotyczące \"%(object)s\""
msgstr ""
#: models.py:76
#: models.py:64
msgid "None"
msgstr "Brak"
@@ -73,102 +75,156 @@ msgstr "Edytuj listy ACL"
msgid "View ACLs"
msgstr "Przeglądaj listy ACL"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "API URL prowadzący do listy uprawnień dla listy kontroli dostępu."
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL prowadzący do uprawnienia w liście kontroli dostępu, w której uprawnienie występuje. "
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Klucz główny nowego uprawnienia dla udzielenia dostępu do listy kontroli dostępu."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Brak uprawnienia: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Rozdzielona przecinkami lista uprawnień kluczy głównych dla udzielenia dostępu do listy kontroli dostępu."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Klucze główne roli, z którymi związana jest ta lista kontroli dostępu."
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nowe listy ACL dla: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Usuń listę ACL: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Listy ACL dla: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Dostępne uprawnienia"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Przyznane uprawnienia"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Uprawnienia roli \"%(role)s\" dla obiektu \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Role"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: pt\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACL's"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permissões"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Eliminar"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Acesso insuficiente."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Nenhum"
@@ -71,102 +74,156 @@ msgstr "Editar ACL's"
msgid "View ACLs"
msgstr "Ver ACL's"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Funções"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,15 +3,15 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Translators:
# Aline Freitas <aline@alinefreitas.com.br>, 2016
# Jadson Ribeiro <jadsonbr@outlook.com.br>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"Last-Translator: Roberto Rosario\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"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
@@ -19,45 +19,47 @@ msgstr ""
"Language: pt_BR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Controle Acesso \"ACLs\""
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permissões"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Regras"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Excluir"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Nova regra"
msgstr "Nova ACL"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Acesso insuficiente."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Acesso entrada"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Entradas de acesso"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Nenhum"
@@ -67,108 +69,162 @@ msgstr "Listas de controle de acesso"
#: permissions.py:10
msgid "Edit ACLs"
msgstr "Editar regras"
msgstr "Editar ACLs"
#: permissions.py:13
msgid "View ACLs"
msgstr "Visualizar regras"
msgstr "Visualizar ACLs"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "API URL apontando para a lista de permissões para esta lista de controle de acesso."
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL apontando para uma permissão em relação à lista de controle de acesso à qual ela está anexada. Esse URL é diferente do URL de fluxo de trabalho canônico."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Chave primária da nova permissão para conceder à lista de controle de acesso."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Sem permissão: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Lista de chaves primárias de permissão separadas por vírgulas para conceder a esta lista de controle de acesso."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "As chaves primárias da função a que esta lista de controle de acesso se liga."
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Nova lista de controle de acesso para: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Apagar ACL: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "listas de controle de acesso para: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Permissões disponíveis"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Permissões outorgadas"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Permissões do papel \"%(role)s\" para \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "As permissões inativas foram herdadas de um objeto precedente."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Regras"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: ro_RO\n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACL-uri"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Permisiuni"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Șterge"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Accesul insuficient."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Nici unul"
@@ -71,102 +74,156 @@ msgstr "Editați ACL-uri"
msgid "View ACLs"
msgstr "Vezi ACL-uri"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Roluri"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,13 +3,14 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n"
"MIME-Version: 1.0\n"
@@ -18,45 +19,47 @@ msgstr ""
"Language: ru\n"
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "СУДы"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Разрешения"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr "Роль"
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr "Удалить"
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr "Создать СУД"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Неполный доступ."
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Элемент доступа"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Элементы доступа"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Пусто"
@@ -72,102 +75,156 @@ msgstr "Редактировать СУДы"
msgid "View ACLs"
msgstr "Просмотр СУДов"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr "Новый СУД для: %s"
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr "Удалить СУД: %s"
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "СУДы для: %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr "Доступные разрешения"
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr "Предоставленные разрешения"
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "Права роли \"%(role)s\" для \"%(object)s\""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr "Отключенные права наследуются от родительского объекта."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Роли"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"POT-Creation-Date: 2016-11-23 02:52-0400\n"
"PO-Revision-Date: 2016-11-17 08:58+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: sl_SI\n"
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "Pravice"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "Pravice"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "Nezadosten dostop"
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "Vstopna točka"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "Vstopne točke"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "Brez"
@@ -71,102 +74,156 @@ msgstr "Uredi dostopne pravice"
msgid "View ACLs"
msgstr "Preglej dostopne pravice"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr "Dostopne pravice za %s"
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "Vloge"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -1,173 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# serhatcan77 <serhat_can@yahoo.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Mayan EDMS\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\n"
"Last-Translator: Roberto Rosario\n"
"Language-Team: Turkish (Turkey) (http://www.transifex.com/rosarior/mayan-edms/language/tr_TR/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: tr_TR\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:15 links.py:35 links.py:39
msgid "ACLs"
msgstr "Erişim Kontrol Listeleri"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
msgid "Permissions"
msgstr "İzinler"
#: apps.py:29 models.py:47
msgid "Role"
msgstr "Rol"
#: links.py:31
msgid "Delete"
msgstr "Sil"
#: links.py:43
msgid "New ACL"
msgstr "Yeni Erişim Kontrol Listesi"
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: models.py:54
msgid "Access entry"
msgstr "Erişim Girişi"
#: models.py:55
msgid "Access entries"
msgstr "Erişim Girişleri"
#: models.py:59
#, python-format
msgid "Permissions \"%(permissions)s\" to role \"%(role)s\" for \"%(object)s\""
msgstr "\"%(permissions)s\", \"%(object)s\" için \"%(role)s\" rolüne izinler"
#: models.py:76
msgid "None"
msgstr "Yok"
#: permissions.py:7
msgid "Access control lists"
msgstr "Erişim Kontrol Listesi"
#: permissions.py:10
msgid "Edit ACLs"
msgstr "Erişim Kontrolünü Düzenle"
#: permissions.py:13
msgid "View ACLs"
msgstr "Erişim Kontrolünü Görüntüle"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr "Bu erişim kontrol listesinin izin listesine işaret eden API URL'si."
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr "API URL'si, bağlı olduğu erişim kontrol listesiyle ilgili olarak bir izne işaret ediyor. Bu URL, kurallı iş akışı URL'sinden farklı."
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr "Erişim kontrol listesine yeni izin verilmesi için birincil anahtar."
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr "Böyle bir izin yok: %s"
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr "Bu erişim denetim listesine vermek üzere birincil anahtarların virgülle ayrılmış listesi."
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr "Bu erişim denetim listesinin bağlandığı role ait birincil anahtarlar."
#: views.py:74
#, python-format
msgid "New access control lists for: %s"
msgstr "Için yeni erişim kontrol listeleri: %s"
#: views.py:101
#, python-format
msgid "Delete ACL: %s"
msgstr "Erişim Kontrol Listesi sil: %s"
#: views.py:139
#, python-format
msgid "Access control lists for: %s"
msgstr "%s için Erişim kontrol listeleri"
#: views.py:151
msgid "Available permissions"
msgstr "Kullanılabilir izinler"
#: views.py:152
msgid "Granted permissions"
msgstr "İzinler izin verildi"
#: views.py:207
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr "\"%(role)s\" yetkisi \"%(object)s\" için rol"
#: views.py:227
msgid "Disabled permissions are inherited from a parent object."
msgstr "Devre Dışı İzinler üst nesneden devralınır."
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#: workflow_actions.py:42
msgid "Roles"
msgstr "Roller"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: vi_VN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "ACLs"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr ""
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
#: managers.py:85
msgid "Insufficient access."
msgstr ""
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr ""
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr ""
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "None"
@@ -71,102 +74,156 @@ msgstr ""
msgid "View ACLs"
msgstr ""
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr ""
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -3,12 +3,13 @@
# 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: 2017-08-27 12:45-0400\n"
"PO-Revision-Date: 2017-08-27 16:32+0000\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: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n"
"MIME-Version: 1.0\n"
@@ -17,45 +18,47 @@ msgstr ""
"Language: zh_CN\n"
"Plural-Forms: nplurals=1; plural=0;\n"
#: apps.py:15 links.py:35 links.py:39
#: apps.py:14 links.py:31
msgid "ACLs"
msgstr "访问控制列表"
#: apps.py:25 links.py:48 models.py:43 workflow_actions.py:48
#: apps.py:22 links.py:40 models.py:36
msgid "Permissions"
msgstr "权限"
#: apps.py:29 models.py:47
#: apps.py:26 models.py:38
#| msgid "Roles"
msgid "Role"
msgstr ""
#: links.py:31
#: links.py:27
msgid "Delete"
msgstr ""
#: links.py:43
#: links.py:35
#| msgid "View ACLs"
msgid "New ACL"
msgstr ""
#: managers.py:57 managers.py:86
#, python-format
msgid "Insufficient access for: %s"
msgstr ""
#: managers.py:85
msgid "Insufficient access."
msgstr "权限不足"
#: models.py:54
#: models.py:44
msgid "Access entry"
msgstr "访问入口"
#: models.py:55
#: models.py:45
msgid "Access entries"
msgstr "多个访问入口"
#: models.py:59
#: 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:76
#: models.py:64
msgid "None"
msgstr "无"
@@ -71,102 +74,156 @@ msgstr "编辑访问控制列表"
msgid "View ACLs"
msgstr "查看访问控制列表"
#: serializers.py:24 serializers.py:132
msgid ""
"API URL pointing to the list of permissions for this access control list."
msgstr ""
#: serializers.py:57
msgid ""
"API URL pointing to a permission in relation to the access control list to "
"which it is attached. This URL is different than the canonical workflow URL."
msgstr ""
#: serializers.py:87
msgid "Primary key of the new permission to grant to the access control list."
msgstr ""
#: serializers.py:111 serializers.py:187
#, python-format
msgid "No such permission: %s"
msgstr ""
#: serializers.py:126
msgid ""
"Comma separated list of permission primary keys to grant to this access "
"control list."
msgstr ""
#: serializers.py:138
msgid "Primary keys of the role to which this access control list binds to."
msgstr ""
#: views.py:74
#: views.py:78
#, python-format
msgid "New access control lists for: %s"
msgstr ""
#: views.py:101
#: views.py:109
#, python-format
#| msgid "Default ACLs"
msgid "Delete ACL: %s"
msgstr ""
#: views.py:139
#: views.py:151
#, python-format
msgid "Access control lists for: %s"
msgstr ""
#: views.py:151
#: views.py:162
msgid "Available permissions"
msgstr ""
#: views.py:152
#: views.py:163
msgid "Granted permissions"
msgstr ""
#: views.py:207
#: views.py:222
#, python-format
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
msgstr ""
#: views.py:227
#: views.py:242
msgid "Disabled permissions are inherited from a parent object."
msgstr ""
#: workflow_actions.py:25
msgid "Object type"
msgstr ""
#~ msgid "New holder"
#~ msgstr "New holder"
#: workflow_actions.py:28
msgid "Type of the object for which the access will be modified."
msgstr ""
#~ msgid "Users"
#~ msgstr "Users"
#: workflow_actions.py:34
msgid "Object ID"
msgstr ""
#~ msgid "Groups"
#~ msgstr "Groups"
#: workflow_actions.py:37
msgid ""
"Numeric identifier of the object for which the access will be modified."
msgstr ""
#~ msgid "Special"
#~ msgstr "Special"
#: workflow_actions.py:42
msgid "Roles"
msgstr "角色"
#~ msgid "Details"
#~ msgstr "details"
#: workflow_actions.py:44
msgid "Roles whose access will be modified."
msgstr ""
#~ msgid "Grant"
#~ msgstr "grant"
#: workflow_actions.py:51
msgid ""
"Permissions to grant/revoke to/from the role for the object selected above."
msgstr ""
#~ msgid "Revoke"
#~ msgstr "revoke"
#: workflow_actions.py:59
msgid "Grant access"
msgstr ""
#~ msgid "Classes"
#~ msgstr "classes"
#: workflow_actions.py:129
msgid "Revoke access"
msgstr ""
#~ msgid "ACLs for class"
#~ msgstr "ACLs for class"
#~ msgid "Permission"
#~ msgstr "permissions"
#~ msgid "Default access entry"
#~ msgstr "default access entry"
#~ msgid "Default access entries"
#~ msgstr "default access entries"
#~ msgid "Creator"
#~ msgstr "Creator"
#~ msgid "Edit class default ACLs"
#~ msgstr "Edit class default ACLs"
#~ msgid "View class default ACLs"
#~ msgstr "View class default ACLs"
#~ msgid "Holder"
#~ msgstr "holder"
#~ msgid "Permissions available to: %(actor)s for %(obj)s"
#~ msgstr "permissions available to: %(actor)s for %(obj)s"
#~ msgid "Namespace"
#~ msgstr "namespace"
#~ msgid "Label"
#~ msgstr "label"
#~ msgid ", "
#~ msgstr ", "
#~ msgid " for %s"
#~ msgstr " for %s"
#~ msgid " to %s"
#~ msgstr " to %s"
#~ msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
#~ msgid ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgstr ""
#~ "%(actor)s, already had the permission \"%(permission)s\" granted for "
#~ "%(object)s."
#~ msgid " from %s"
#~ msgstr " from %s"
#~ msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
#~ msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
#~ 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 "Add new holder for: %s"
#~ msgstr "add new holder for: %s"
#~ msgid "Select"
#~ msgstr "Select"
#~ msgid "Class"
#~ msgstr "class"
#~ msgid "Default access control lists for class: %s"
#~ msgstr "default access control lists for class: %s"
#~ msgid "Permissions available to: %(actor)s for class %(class)s"
#~ msgstr "permissions available to: %(actor)s for class %(class)s"
#~ msgid "Add new holder for class: %s"
#~ msgstr "add new holder for class: %s"
#~ msgid "List of classes"
#~ msgstr "List of classes"
#~ msgid "permission"
#~ msgstr "permission"
#~ msgid "creator"
#~ msgstr "creator"

View File

@@ -6,13 +6,12 @@ from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import PermissionDenied
from django.db import models
from django.db.models import Q
from django.utils.translation import ugettext, ugettext_lazy as _
from django.utils.translation import ugettext
from common.utils import return_attrib
from permissions import Permission
from permissions.models import StoredPermission
from .exceptions import PermissionNotValidForClass
from .classes import ModelPermission
logger = logging.getLogger(__name__)
@@ -23,12 +22,33 @@ class AccessControlListManager(models.Manager):
Implement a 3 tier permission system, involving a permissions, an actor
and an object
"""
def get_inherited_permissions(self, role, obj):
try:
instance = obj.first()
except AttributeError:
instance = obj
else:
if not instance:
return StoredPermission.objects.none()
try:
parent_accessor = ModelPermission.get_inheritance(type(instance))
except KeyError:
return StoredPermission.objects.none()
else:
parent_object = getattr(instance, parent_accessor)
content_type = ContentType.objects.get_for_model(parent_object)
try:
return self.get(
role=role, content_type=content_type,
object_id=parent_object.pk
).permissions.all()
except self.model.DoesNotExist:
return StoredPermission.objects.none()
def check_access(self, permissions, user, obj, related=None):
if user.is_superuser or user.is_staff:
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" as superuser '
'or staff', permissions, obj, user
)
return True
try:
@@ -53,15 +73,14 @@ class AccessControlListManager(models.Manager):
)
except AttributeError:
# AttributeError means non model objects: ie Statistics
# These can't have ACLs so we raise PermissionDenied
raise PermissionDenied(_('Insufficient access for: %s') % obj)
# These can't have ACLS so we raise PermissionDenied
raise PermissionDenied
except KeyError:
pass
else:
try:
return self.check_access(
obj=getattr(obj, parent_accessor),
permissions=permissions, user=user
permissions, user, getattr(obj, parent_accessor)
)
except PermissionDenied:
pass
@@ -70,32 +89,15 @@ class AccessControlListManager(models.Manager):
for group in user.groups.all():
for role in group.roles.all():
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" through role "%s" via inherited ACL',
permissions, obj, user, role
)
return True
user_roles.append(role)
if not self.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists():
logger.debug(
'Permissions "%s" on "%s" denied for user "%s"',
permissions, obj, user
)
raise PermissionDenied(ugettext('Insufficient access for: %s') % obj)
logger.debug(
'Permissions "%s" on "%s" granted to user "%s" through roles "%s" by direct ACL',
permissions, obj, user, user_roles
)
raise PermissionDenied(ugettext('Insufficient access.'))
def filter_by_access(self, permission, user, queryset):
if user.is_superuser or user.is_staff:
logger.debug(
'Unfiltered queryset returned to user "%s" as superuser '
'or staff', user
)
return queryset
try:
@@ -118,41 +120,22 @@ class AccessControlListManager(models.Manager):
instance = queryset.first()
if instance:
parent_object = getattr(instance, parent_accessor)
try:
# Try to see if parent_object is a function
parent_object()
except TypeError:
# Is not a function, try it as a field
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:
# Is a function. Can't perform Q object filtering.
# Perform iterative filtering.
result = []
for entry in queryset:
try:
self.check_access(permissions=permission, user=user, obj=entry)
except PermissionDenied:
pass
else:
result.append(entry.pk)
return queryset.filter(pk__in=result)
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()
@@ -162,60 +145,7 @@ class AccessControlListManager(models.Manager):
content_type=content_type, role__in=user_roles,
permissions=permission.stored_permission
).values_list('object_id', flat=True))
logger.debug(
'Filtered queryset returned to user "%s" based on roles "%s"',
user, user_roles
)
return queryset.filter(parent_acl_query | acl_query)
else:
return queryset
def get_inherited_permissions(self, role, obj):
try:
instance = obj.first()
except AttributeError:
instance = obj
else:
if not instance:
return StoredPermission.objects.none()
try:
parent_accessor = ModelPermission.get_inheritance(type(instance))
except KeyError:
return StoredPermission.objects.none()
else:
parent_object = return_attrib(instance, parent_accessor)
content_type = ContentType.objects.get_for_model(parent_object)
try:
return self.get(
role=role, content_type=content_type,
object_id=parent_object.pk
).permissions.all()
except self.model.DoesNotExist:
return StoredPermission.objects.none()
def grant(self, permission, role, obj):
class_permissions = ModelPermission.get_for_class(klass=obj.__class__)
if permission not in class_permissions:
raise PermissionNotValidForClass
content_type = ContentType.objects.get_for_model(model=obj)
acl, created = self.get_or_create(
content_type=content_type, object_id=obj.pk,
role=role
)
acl.permissions.add(permission.stored_permission)
def revoke(self, permission, role, obj):
content_type = ContentType.objects.get_for_model(model=obj)
acl, created = self.get_or_create(
content_type=content_type, object_id=obj.pk,
role=role
)
acl.permissions.remove(permission.stored_permission)
if acl.permissions.count() == 0:
acl.delete()

View File

@@ -5,7 +5,7 @@ import logging
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.db import models
from django.utils.encoding import force_text, python_2_unicode_compatible
from django.utils.encoding import python_2_unicode_compatible
from django.utils.translation import ugettext_lazy as _
from permissions.models import Role, StoredPermission
@@ -18,34 +18,24 @@ logger = logging.getLogger(__name__)
@python_2_unicode_compatible
class AccessControlList(models.Model):
"""
ACL means Access Control List it is a more fine-grained method of
granting access to objects. In the case of ACLs, they grant access using
3 elements: actor, permission, object. In this case the actor is the role,
the permission is the Mayan permission and the object can be anything:
a document, a folder, an index, etc. This means = "Grant X permissions
to role Y for object Z". This model holds the permission, object, actor
relationship for one access control list.
Fields:
* Role - Custom role that is being granted a permission. Roles are created
in the Setup menu.
Model that hold the permission, object, actor relationship
"""
content_type = models.ForeignKey(
ContentType, on_delete=models.CASCADE,
ContentType,
related_name='object_content_type'
)
object_id = models.PositiveIntegerField()
content_object = GenericForeignKey(
ct_field='content_type', fk_field='object_id',
ct_field='content_type',
fk_field='object_id',
)
# TODO: limit choices to the permissions valid for the content_object
permissions = models.ManyToManyField(
StoredPermission, blank=True, related_name='acls',
verbose_name=_('Permissions')
)
role = models.ForeignKey(
Role, on_delete=models.CASCADE, related_name='acls',
verbose_name=_('Role')
)
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
objects = AccessControlListManager()
@@ -55,9 +45,7 @@ class AccessControlList(models.Model):
verbose_name_plural = _('Access entries')
def __str__(self):
return _(
'Permissions "%(permissions)s" to role "%(role)s" for "%(object)s"'
) % {
return _('Permissions "%(permissions)s" to role "%(role)s" for "%(object)s"') % {
'permissions': self.get_permission_titles(),
'object': self.content_object,
'role': self.role
@@ -70,7 +58,7 @@ class AccessControlList(models.Model):
def get_permission_titles(self):
result = ', '.join(
[force_text(permission) for permission in self.permissions.all()]
[unicode(permission) for permission in self.permissions.all()]
)
return result or _('None')

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