Compare commits
370 Commits
feature/pc
...
feature/mu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
71ede69c3f | ||
|
|
b6161e9d92 | ||
|
|
aa56e8ae14 | ||
|
|
1b8436add7 | ||
|
|
ce8377da03 | ||
|
|
4b7c4335e1 | ||
|
|
4f2744f916 | ||
|
|
883e1cc510 | ||
|
|
9483309332 | ||
|
|
07ac1cbbbe | ||
|
|
e62e6a9a08 | ||
|
|
97089670ee | ||
|
|
063b325986 | ||
|
|
2ea3c08c97 | ||
|
|
f3f5cff36e | ||
|
|
d0aee4f72b | ||
|
|
5ac1276f25 | ||
|
|
113ad144e0 | ||
|
|
debec7b4a2 | ||
|
|
0be3e130c1 | ||
|
|
dd28e3dc09 | ||
|
|
09e375654d | ||
|
|
c531631a37 | ||
|
|
a76a55f70a | ||
|
|
98e6ba2b50 | ||
|
|
945158bd60 | ||
|
|
ab831aa493 | ||
|
|
ba493cf984 | ||
|
|
9ffcfeb49b | ||
|
|
41f68cf435 | ||
|
|
072bfcf2aa | ||
|
|
6a258e4a02 | ||
|
|
59fbe2d409 | ||
|
|
aa0f48b1a0 | ||
|
|
a2f8e8b8d8 | ||
|
|
7ae0917564 | ||
|
|
ff30268a4b | ||
|
|
5466dcdad3 | ||
|
|
2035602836 | ||
|
|
326919271a | ||
|
|
043233f79e | ||
|
|
883e623a15 | ||
|
|
728121b1bb | ||
|
|
331a4da3b3 | ||
|
|
017dc67d3c | ||
|
|
aea00db37e | ||
|
|
629cc24090 | ||
|
|
f799d379d1 | ||
|
|
8221f90fd3 | ||
|
|
f6dfff5949 | ||
|
|
38eb65151a | ||
|
|
8435b8444a | ||
|
|
e5c51749da | ||
|
|
132d66fff8 | ||
|
|
0a545f4b33 | ||
|
|
305aad0bfa | ||
|
|
ccf3795601 | ||
|
|
18bd82ba55 | ||
|
|
3ebadf763b | ||
|
|
f9670ea7c2 | ||
|
|
de40977f5f | ||
|
|
aca93a0deb | ||
|
|
e943588ba2 | ||
|
|
db1673dd0a | ||
|
|
2dcad10805 | ||
|
|
ead86806d4 | ||
|
|
cc360be4a4 | ||
|
|
69bd6cc308 | ||
|
|
395fe0cb98 | ||
|
|
d9137b4361 | ||
|
|
e5c9e91104 | ||
|
|
67f88b79c6 | ||
|
|
266cf5c8a3 | ||
|
|
e228dfc8c5 | ||
|
|
fc86abe951 | ||
|
|
ba1c5c1b17 | ||
|
|
48d88d39e7 | ||
|
|
de81fc58dd | ||
|
|
b71ebe45f9 | ||
|
|
05a46445d9 | ||
|
|
907744cf18 | ||
|
|
f7fd9634df | ||
|
|
796e4cea04 | ||
|
|
b2304119fc | ||
|
|
07a124187f | ||
|
|
eab5296c7a | ||
|
|
ab83e23f27 | ||
|
|
5e7a62e022 | ||
|
|
e34dffb176 | ||
|
|
3a2d8bac33 | ||
|
|
58d634a395 | ||
|
|
a0df9d260d | ||
|
|
626cc1cd07 | ||
|
|
c49f8b1def | ||
|
|
2ca3a67c9c | ||
|
|
7be1d76f62 | ||
|
|
c5f64d4805 | ||
|
|
27c1a33762 | ||
|
|
ce0b0a9a79 | ||
|
|
90778c709c | ||
|
|
6e6a6073d2 | ||
|
|
a3a03ec095 | ||
|
|
433e295d07 | ||
|
|
c37430ff12 | ||
|
|
0e5521160b | ||
|
|
83046882b1 | ||
|
|
56f1a7d537 | ||
|
|
fba20b0a91 | ||
|
|
ab69031662 | ||
|
|
14bd599387 | ||
|
|
5ba861f4aa | ||
|
|
c09a237af1 | ||
|
|
d1c87fe102 | ||
|
|
4de3bb99e2 | ||
|
|
d71357cf81 | ||
|
|
004b8c9054 | ||
|
|
8712c6ee37 | ||
|
|
11da303529 | ||
|
|
c97208f609 | ||
|
|
0bebef5ba9 | ||
|
|
27aae995f0 | ||
|
|
4e55b28c43 | ||
|
|
3d722325ca | ||
|
|
5959e7362d | ||
|
|
352457f576 | ||
|
|
7a746653da | ||
|
|
715d3c6768 | ||
|
|
3f9d21167d | ||
|
|
7fc5f24da9 | ||
|
|
5a885868f8 | ||
|
|
fdf4984468 | ||
|
|
7da6408de0 | ||
|
|
084f6d4b2f | ||
|
|
516920f833 | ||
|
|
bc79798723 | ||
|
|
9c22fc9714 | ||
|
|
39ba601074 | ||
|
|
24df09ba71 | ||
|
|
80e12b2020 | ||
|
|
6dcbd62c15 | ||
|
|
5a15a34818 | ||
|
|
a817aa887f | ||
|
|
f4a415a3e8 | ||
|
|
8ef65a82f5 | ||
|
|
f80fa49166 | ||
|
|
55d53bf4d5 | ||
|
|
8d549df088 | ||
|
|
8075bfd0bc | ||
|
|
ddc7dc39b0 | ||
|
|
2a5264bc2c | ||
|
|
d934b2ee1e | ||
|
|
4aea55339f | ||
|
|
94b968963e | ||
|
|
bd648d0cb1 | ||
|
|
e3d49e1352 | ||
|
|
06ecbfeba2 | ||
|
|
b15d419172 | ||
|
|
9013793b5c | ||
|
|
bd3bdb9b13 | ||
|
|
09640d3e43 | ||
|
|
924cb21a83 | ||
|
|
5da301a861 | ||
|
|
afb44798e0 | ||
|
|
a179a19749 | ||
|
|
269d8fb5b3 | ||
|
|
0a8f429d04 | ||
|
|
b41c2ce02d | ||
|
|
15ed0a10e2 | ||
|
|
ea734db79e | ||
|
|
23f40ac4aa | ||
|
|
3384c06c03 | ||
|
|
f944f9ebbc | ||
|
|
c6eea8ba64 | ||
|
|
af273fbfc3 | ||
|
|
8a58ee2124 | ||
|
|
e824fbffcf | ||
|
|
9ab03d2c16 | ||
|
|
232cb5e38d | ||
|
|
5775f5aeaa | ||
|
|
1bda472287 | ||
|
|
6931d2ad81 | ||
|
|
f5609d402a | ||
|
|
9d7e8d6123 | ||
|
|
0299353fb7 | ||
|
|
0fa26cda8b | ||
|
|
19b43e9504 | ||
|
|
232b7f644b | ||
|
|
f020a7a1c6 | ||
|
|
756108af8d | ||
|
|
e3200511ac | ||
|
|
b04421438e | ||
|
|
e5743d8964 | ||
|
|
be392823bb | ||
|
|
f042533576 | ||
|
|
33aefdaef7 | ||
|
|
c6fb008562 | ||
|
|
9a0dd8c192 | ||
|
|
07cd6d078f | ||
|
|
3d74bdb590 | ||
|
|
14988bab34 | ||
|
|
e8c0951b0d | ||
|
|
94b00c7ce5 | ||
|
|
09b71144b6 | ||
|
|
bc59613945 | ||
|
|
24d8287072 | ||
|
|
8baca70ef5 | ||
|
|
1e7e17bdce | ||
|
|
c6890c487a | ||
|
|
8b28bdd443 | ||
|
|
7da6cf1863 | ||
|
|
d83a80c65b | ||
|
|
739b96ed37 | ||
|
|
0783806fd1 | ||
|
|
b9d75e525f | ||
|
|
3b593e10fd | ||
|
|
c1cb983869 | ||
|
|
e5c47f16d4 | ||
|
|
35df61bca1 | ||
|
|
e708e0250e | ||
|
|
fa1450fe5a | ||
|
|
0ffe20befd | ||
|
|
5de63c4477 | ||
|
|
1f0dedc9aa | ||
|
|
779a14977d | ||
|
|
9744cdd358 | ||
|
|
4a4573fb1b | ||
|
|
467ad0dadb | ||
|
|
ffb29e0f54 | ||
|
|
7e801ef02e | ||
|
|
09b92858d9 | ||
|
|
355190e919 | ||
|
|
ab6e2d8c23 | ||
|
|
d41dac5587 | ||
|
|
a5f3d46373 | ||
|
|
c8f7c4ef86 | ||
|
|
e96f748439 | ||
|
|
048ba4b5cd | ||
|
|
45774ccdcf | ||
|
|
2f7c6ed0d9 | ||
|
|
cd077cb076 | ||
|
|
f82b2000c3 | ||
|
|
2748d5959f | ||
|
|
189cda437f | ||
|
|
dc5d25fd00 | ||
|
|
ccd6e8c88c | ||
|
|
c9010f6b5e | ||
|
|
3d970036b2 | ||
|
|
6fe778051e | ||
|
|
7dc260046b | ||
|
|
dda0bbdba9 | ||
|
|
66d2baafb8 | ||
|
|
18a3773b65 | ||
|
|
c43fe38ac9 | ||
|
|
26fce66451 | ||
|
|
28f3b7551d | ||
|
|
37d6070cab | ||
|
|
c07f5a7820 | ||
|
|
ad0643b62a | ||
|
|
bd3e31efa4 | ||
|
|
308472b92b | ||
|
|
a0b31d4bfe | ||
|
|
7be6e8c6ed | ||
|
|
6ec7a2ca4d | ||
|
|
b32563ac8e | ||
|
|
9191c04eb9 | ||
|
|
145161cef4 | ||
|
|
7cde1fe78f | ||
|
|
286a6ba9b8 | ||
|
|
2328355754 | ||
|
|
45f90cce50 | ||
|
|
50f473b698 | ||
|
|
ed8ac47240 | ||
|
|
34184e0726 | ||
|
|
66a49c8335 | ||
|
|
042cef3d0e | ||
|
|
adcf946fbb | ||
|
|
5ac21faced | ||
|
|
de4948b84f | ||
|
|
8302e13d80 | ||
|
|
30738a922c | ||
|
|
473fc09e1a | ||
|
|
4c4409aa1e | ||
|
|
5079b2790e | ||
|
|
67bb84c778 | ||
|
|
c3149a58d6 | ||
|
|
5bb04cc8f4 | ||
|
|
a6c9393aa0 | ||
|
|
e2bfece9ff | ||
|
|
0ecfb83d14 | ||
|
|
6bf352ecbb | ||
|
|
8ae61b87b5 | ||
|
|
aeff40331d | ||
|
|
86af663e91 | ||
|
|
1a20d93e4c | ||
|
|
3d36f1b828 | ||
|
|
928d86088a | ||
|
|
adcc37d8a4 | ||
|
|
c2c95787cb | ||
|
|
9823202405 | ||
|
|
f5d2ea7d9e | ||
|
|
858648782b | ||
|
|
35cc0ea1d6 | ||
|
|
3fa9092d57 | ||
|
|
71946491b3 | ||
|
|
9ba03ff0cb | ||
|
|
ba2be644f6 | ||
|
|
fba236b0fc | ||
|
|
083d6e6fc5 | ||
|
|
daa3ca2430 | ||
|
|
6eb868bdfb | ||
|
|
d444835f99 | ||
|
|
6b79824daf | ||
|
|
642c46ec6f | ||
|
|
452bd45407 | ||
|
|
ed2f2480e6 | ||
|
|
60b7ed6a6d | ||
|
|
e10ff8e8bd | ||
|
|
dd2cef50c8 | ||
|
|
3532ed7c1e | ||
|
|
180c38b746 | ||
|
|
45e90da219 | ||
|
|
6f02d96212 | ||
|
|
2c9a01bdfc | ||
|
|
216673c691 | ||
|
|
17f129e9e6 | ||
|
|
ba4768bcbb | ||
|
|
5b6b35f1c3 | ||
|
|
9b315a7cf4 | ||
|
|
bccf511178 | ||
|
|
330e01972c | ||
|
|
4d362c3957 | ||
|
|
5a70bd0995 | ||
|
|
a7faf7f427 | ||
|
|
9da4710c0f | ||
|
|
d05345ed3c | ||
|
|
ad328b2c3b | ||
|
|
927c0bf657 | ||
|
|
5d8dd19895 | ||
|
|
730cbe922d | ||
|
|
1c65b389ee | ||
|
|
74fd47d86e | ||
|
|
014ba4f4fe | ||
|
|
e85002d4ac | ||
|
|
9efa7c9543 | ||
|
|
8a5a26c0b4 | ||
|
|
6492908c59 | ||
|
|
ce6a1f4020 | ||
|
|
652613452b | ||
|
|
74d8f1d994 | ||
|
|
10eb7d49b2 | ||
|
|
8614bc4bfc | ||
|
|
2bb96ca98d | ||
|
|
eae11a1b0c | ||
|
|
2ebb84f18f | ||
|
|
27d8644438 | ||
|
|
d5c73eaad6 | ||
|
|
09f4d674a4 | ||
|
|
830e83d107 | ||
|
|
24644e3538 | ||
|
|
2dd4ca1f13 | ||
|
|
59661f643b | ||
|
|
0b830c380d | ||
|
|
6b3fe7a876 | ||
|
|
20535529dc | ||
|
|
ac9bc9454d | ||
|
|
ca15cadc5e | ||
|
|
5ec3025120 | ||
|
|
fbb22affaa | ||
|
|
b19225e95d | ||
|
|
2f344f299f |
@@ -10,26 +10,26 @@ variables:
|
|||||||
POSTGRES_PASSWORD: "postgres"
|
POSTGRES_PASSWORD: "postgres"
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||||
MYSQL_DATABASE: "mayan_edms"
|
MYSQL_DATABASE: "mayan_edms"
|
||||||
test:mysql:
|
#test:mysql:
|
||||||
script:
|
# script:
|
||||||
- pip install -r requirements/testing.txt
|
# - pip install -r requirements/testing.txt
|
||||||
- pip install -q mysql-python
|
# - pip install -q mysql-python
|
||||||
- apt-get install -qq mysql-client
|
# - apt-get install -qq mysql-client
|
||||||
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "ALTER DATABASE $MYSQL_DATABASE CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
|
# - mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "ALTER DATABASE $MYSQL_DATABASE CHARACTER SET utf8 COLLATE utf8_unicode_ci;"
|
||||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
# - coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
||||||
- bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
tags:
|
# tags:
|
||||||
- mysql
|
# - mysql
|
||||||
test:postgres:
|
#test:postgres:
|
||||||
script:
|
# script:
|
||||||
- pip install -r requirements/testing.txt
|
# - pip install -r requirements/testing.txt
|
||||||
- pip install -q psycopg2
|
# - pip install -q psycopg2
|
||||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
# - 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
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
tags:
|
# tags:
|
||||||
- postgres
|
# - postgres
|
||||||
test:sqlite:
|
#test:sqlite:
|
||||||
script:
|
# script:
|
||||||
- pip install -r requirements/testing.txt
|
# - pip install -r requirements/testing.txt
|
||||||
- coverage run manage.py runtests --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
# - 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
|
# - bash <(curl https://raw.githubusercontent.com/codecov/codecov-bash/master/codecov) -t $CODECOV_TOKEN
|
||||||
|
|||||||
12
.tx/config
12
.tx/config
@@ -127,10 +127,16 @@ source_lang = en
|
|||||||
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/mirroring/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.navigation-2-0]
|
[mayan-edms.mirroring-2-0]
|
||||||
file_filter = mayan/apps/navigation/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/mirroring/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
source_file = mayan/apps/navigation/locale/en/LC_MESSAGES/django.po
|
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
|
||||||
|
source_file = mayan/apps/motd/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.ocr-2-0]
|
[mayan-edms.ocr-2-0]
|
||||||
|
|||||||
71
HISTORY.rst
71
HISTORY.rst
@@ -1,3 +1,69 @@
|
|||||||
|
2.1.4 (2016-XX-XX)
|
||||||
|
==================
|
||||||
|
- Add missing link to the 2.1.3 release notes in the index file.
|
||||||
|
- Improve TempfileCheckMixin.
|
||||||
|
|
||||||
|
2.1.3 (2016-06-29)
|
||||||
|
==================
|
||||||
|
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296.
|
||||||
|
- Start using self.setdout instead of print as per documentation.
|
||||||
|
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
||||||
|
- Normalize handling of temporary file and directory creation.
|
||||||
|
- Fix GitLab issue #309, "Temp files quickly filling-up my /tmp (1GB tmpfs)".
|
||||||
|
- Explicitly check for residual temporary files in tests.
|
||||||
|
- Add missing temporary file cleanup for office documents.
|
||||||
|
- Fix file descriptor leak in the document signature download test.
|
||||||
|
|
||||||
|
2.1.2 (2016-05-20)
|
||||||
|
==================
|
||||||
|
- Sort document languages and user profile locale language lists. GitLab issue #292.
|
||||||
|
- Fix metadata lookup for {{ users }} and {{ group }}. Fixes GitLab #290.
|
||||||
|
- Add Makefile for common development tasks
|
||||||
|
|
||||||
|
2.1.1 (2016-05-17)
|
||||||
|
==================
|
||||||
|
- Fix navigation issue that make it impossible to add new sources. GitLab issue #288.
|
||||||
|
- The Tesseract OCR backend now reports if the requested language file is missing. GitLab issue #289.
|
||||||
|
- Ensure the automatic default index is created after the default document type.
|
||||||
|
|
||||||
|
2.1 (2016-05-14)
|
||||||
|
================
|
||||||
|
- Upgrade to use Django 1.8.13. Issue #246.
|
||||||
|
- Upgrade requirements.
|
||||||
|
- Remove remaining references to Django's User model. GitLab issue #225
|
||||||
|
- Rename 'Content' search box to 'OCR'.
|
||||||
|
- Remove included login required middleware using django-stronghold instead (http://mikegrouchy.com/django-stronghold/).
|
||||||
|
- Improve generation of success and error messages for class based views.
|
||||||
|
- Remove ownership concept from folders.
|
||||||
|
- Replace strip_spaces middleware with the spaceless template tag. GitLab issue #255
|
||||||
|
- Deselect the update checkbox for optional metadata by default.
|
||||||
|
- Silence all Django 1.8 model import warnings.
|
||||||
|
- Implement per document type document creation permission. Closes GitLab issue #232.
|
||||||
|
- Add icons to the document face menu links.
|
||||||
|
- Increase icon to text spacing to 3px.
|
||||||
|
- Make document type delete time period optional.
|
||||||
|
- Fixed date locale handling in document properties, checkout and user detail views.
|
||||||
|
- Add new permission: checkout details view.
|
||||||
|
- Add HTML5 upload widget. Issue #162.
|
||||||
|
- Add Message of the Day app. Issue #222
|
||||||
|
- Update Document model's uuid field to use Django's native UUIDField class.
|
||||||
|
- Add new split view index navigation
|
||||||
|
- Newly uploaded documents appear in the Recent document list of the user.
|
||||||
|
- Document indexes now have ACL support.
|
||||||
|
- Remove the document index setup permission.
|
||||||
|
- Status messages now display the object class on which they operate not just the word "Object".
|
||||||
|
- More tests added.
|
||||||
|
- Handle unicode filenames in staging folders.
|
||||||
|
- Add staging file deletion permission.
|
||||||
|
- New document_signature_view permission.
|
||||||
|
- Add support for signing documents.
|
||||||
|
- Instead of multiple keyservers only one keyserver is now supported.
|
||||||
|
- Replace document type selection widget with an opened selection list.
|
||||||
|
- Add mailing documentation chapter.
|
||||||
|
- Add roadmap documentation chapter.
|
||||||
|
- API updates.
|
||||||
|
|
||||||
|
|
||||||
2.0.2 (2016-02-09)
|
2.0.2 (2016-02-09)
|
||||||
==================
|
==================
|
||||||
- Install testing dependencies when installing development dependencies.
|
- Install testing dependencies when installing development dependencies.
|
||||||
@@ -10,15 +76,16 @@
|
|||||||
- Strip HTML tags from the browser title.
|
- Strip HTML tags from the browser title.
|
||||||
- Remove Docker and Docker Compose files.
|
- Remove Docker and Docker Compose files.
|
||||||
|
|
||||||
|
|
||||||
2.0.1 (2016-01-22)
|
2.0.1 (2016-01-22)
|
||||||
==================
|
==================
|
||||||
- Fix GitLab issue #243, "System allows a user to skip entering values for a required metadata field while uploading a new document"
|
- Fix GitLab issue #243, "System allows a user to skip entering values for a required metadata field while uploading a new document"
|
||||||
- Fix GitLab issue #245, "Add multiple metadata not possible"
|
- Fix GitLab issue #245, "Add multiple metadata not possible"
|
||||||
- Updated Vagrantfile to provision a production box too.
|
- Updated Vagrantfile to provision a production box too.
|
||||||
|
|
||||||
|
|
||||||
2.0 (2015-12-04)
|
2.0 (2015-12-04)
|
||||||
================
|
================
|
||||||
|
|
||||||
- New source homepage: https://gitlab.com/mayan-edms/mayan-edms
|
- New source homepage: https://gitlab.com/mayan-edms/mayan-edms
|
||||||
- Update to Django 1.7
|
- Update to Django 1.7
|
||||||
- New Bootstrap Frontend UI
|
- New Bootstrap Frontend UI
|
||||||
@@ -90,7 +157,6 @@
|
|||||||
|
|
||||||
1.1 (2015-02-10)
|
1.1 (2015-02-10)
|
||||||
================
|
================
|
||||||
|
|
||||||
- Uses Celery for background tasks
|
- Uses Celery for background tasks
|
||||||
- Removal of the splash screen
|
- Removal of the splash screen
|
||||||
- Adds a home view with common function buttons
|
- Adds a home view with common function buttons
|
||||||
@@ -116,7 +182,6 @@
|
|||||||
|
|
||||||
1.0 (2014-08-27)
|
1.0 (2014-08-27)
|
||||||
================
|
================
|
||||||
|
|
||||||
- New home @ https://github.com/mayan-edms/mayan-edms
|
- New home @ https://github.com/mayan-edms/mayan-edms
|
||||||
- Updated to use Django 1.6
|
- Updated to use Django 1.6
|
||||||
- Translation updates
|
- Translation updates
|
||||||
|
|||||||
113
Makefile
Normal file
113
Makefile
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
.PHONY: clean-pyc clean-build
|
||||||
|
|
||||||
|
define BROWSER_PYSCRIPT
|
||||||
|
import sys, webbrowser
|
||||||
|
webbrowser.open(sys.argv[1])
|
||||||
|
endef
|
||||||
|
export BROWSER_PYSCRIPT
|
||||||
|
BROWSER := python -c "$$BROWSER_PYSCRIPT"
|
||||||
|
|
||||||
|
|
||||||
|
help:
|
||||||
|
@echo
|
||||||
|
@echo "clean-build - Remove build artifacts."
|
||||||
|
@echo "clean-pyc - Remove Python artifacts."
|
||||||
|
@echo "clean - Remove Python and build artifacts."
|
||||||
|
|
||||||
|
@echo "test MODULE=<python module name> - Run tests for a single App, module or test class."
|
||||||
|
@echo "test-all - Run all tests."
|
||||||
|
@echo "docs_serve - Run the livehtml documentation generator."
|
||||||
|
|
||||||
|
@echo "translations_make - Refresh all translation files."
|
||||||
|
@echo "translations_compile - Compile all translation files."
|
||||||
|
@echo "translations_push - Upload all translation files to Transifex."
|
||||||
|
@echo "translations_pull - Download all translation files from Transifex."
|
||||||
|
|
||||||
|
@echo "requirements_dev - Install development requirements."
|
||||||
|
@echo "requirements_docs - Install documentation requirements."
|
||||||
|
@echo "requirements_testing - Install testing requirements."
|
||||||
|
|
||||||
|
@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 "runserver - Run the development server."
|
||||||
|
|
||||||
|
|
||||||
|
# Cleaning
|
||||||
|
|
||||||
|
clean: clean-build clean-pyc
|
||||||
|
|
||||||
|
clean-build:
|
||||||
|
rm -fr build/
|
||||||
|
rm -fr dist/
|
||||||
|
rm -fr *.egg-info
|
||||||
|
|
||||||
|
clean-pyc:
|
||||||
|
find . -name '*.pyc' -exec rm -f {} +
|
||||||
|
find . -name '*.pyo' -exec rm -f {} +
|
||||||
|
find . -name '*~' -exec rm -f {} +
|
||||||
|
|
||||||
|
|
||||||
|
# Testing
|
||||||
|
|
||||||
|
test:
|
||||||
|
python -Wall ./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
||||||
|
|
||||||
|
test-all:
|
||||||
|
python -Wall ./manage.py runtests --settings=mayan.settings.testing --nomigrations
|
||||||
|
|
||||||
|
|
||||||
|
# Documentation
|
||||||
|
|
||||||
|
docs_serve:
|
||||||
|
$(BROWSER) http://127.0.0.1:8000
|
||||||
|
cd docs;make livehtml
|
||||||
|
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
|
||||||
|
translations_make:
|
||||||
|
contrib/scripts/process_messages.py -m
|
||||||
|
|
||||||
|
translations_compile:
|
||||||
|
contrib/scripts/process_messages.py -c
|
||||||
|
|
||||||
|
translations_push:
|
||||||
|
tx push -s
|
||||||
|
|
||||||
|
translations_pull:
|
||||||
|
tx pull
|
||||||
|
|
||||||
|
|
||||||
|
# Requirements
|
||||||
|
|
||||||
|
requirements_dev:
|
||||||
|
pip install -r requirements/development.txt
|
||||||
|
|
||||||
|
requirements_docs:
|
||||||
|
pip install -r requirements/documentation.txt
|
||||||
|
|
||||||
|
requirements_testing:
|
||||||
|
pip install -r requirements/testing.txt
|
||||||
|
|
||||||
|
|
||||||
|
# Releases
|
||||||
|
|
||||||
|
release: clean
|
||||||
|
python setup.py sdist bdist_wheel upload
|
||||||
|
|
||||||
|
sdist: clean
|
||||||
|
python setup.py sdist
|
||||||
|
ls -l dist
|
||||||
|
|
||||||
|
wheel: clean
|
||||||
|
python setup.py bdist_wheel
|
||||||
|
ls -l dist
|
||||||
|
|
||||||
|
|
||||||
|
# Dev server
|
||||||
|
|
||||||
|
runserver:
|
||||||
|
$(BROWSER) http://127.0.0.1:8000
|
||||||
|
./manage.py runserver
|
||||||
14
README.rst
14
README.rst
@@ -1,4 +1,4 @@
|
|||||||
|Build Status| |Coverage badge| |PyPI badge| |Installs badge| |License badge|
|
|PyPI badge| |Build Status| |Coverage badge| |License badge|
|
||||||
|
|
||||||
|Logo|
|
|Logo|
|
||||||
|
|
||||||
@@ -19,10 +19,6 @@ Free Open Source Electronic Document Management System.
|
|||||||
|
|
||||||
|Animation|
|
|Animation|
|
||||||
|
|
||||||
Support
|
|
||||||
-------
|
|
||||||
Help support further improvements and development by donating at: https://www.patreon.com/siloraptor
|
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
||||||
@@ -31,7 +27,7 @@ This project is open sourced under `Apache 2.0 License`_.
|
|||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
|
||||||
To install **Mayan EDMS**, simply do:
|
To install Mayan EDMS, simply do:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
@@ -63,12 +59,10 @@ Contribute
|
|||||||
.. _`the repository`: http://gitlab.com/mayan-edms/mayan-edms
|
.. _`the repository`: http://gitlab.com/mayan-edms/mayan-edms
|
||||||
.. _`contributors file`: https://gitlab.com/mayan-edms/mayan-edms/blob/master/docs/topics/contributors.rst
|
.. _`contributors file`: https://gitlab.com/mayan-edms/mayan-edms/blob/master/docs/topics/contributors.rst
|
||||||
|
|
||||||
.. |Build Status| image:: https://gitlab.com/ci/projects/6169/status.png?ref=master
|
.. |Build Status| image:: https://gitlab.com/mayan-edms/mayan-edms/badges/master/build.svg
|
||||||
:target: https://gitlab.com/ci/projects/6169?ref=master
|
:target: https://gitlab.com/mayan-edms/mayan-edms/commits/master
|
||||||
.. |Logo| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
|
.. |Logo| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
|
||||||
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
.. |Animation| image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
||||||
.. |Installs badge| image:: http://img.shields.io/pypi/dm/mayan-edms.svg?style=flat
|
|
||||||
:target: https://crate.io/packages/mayan-edms/
|
|
||||||
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
|
.. |PyPI badge| image:: http://img.shields.io/pypi/v/mayan-edms.svg?style=flat
|
||||||
:target: http://badge.fury.io/py/mayan-edms
|
:target: http://badge.fury.io/py/mayan-edms
|
||||||
.. |License badge| image:: http://img.shields.io/badge/license-Apache%202.0-green.svg?style=flat
|
.. |License badge| image:: http://img.shields.io/badge/license-Apache%202.0-green.svg?style=flat
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ sudo apt-get -qq update
|
|||||||
sudo apt-get -y upgrade
|
sudo apt-get -y upgrade
|
||||||
|
|
||||||
echo -e "\n -> Installing core binaries \n"
|
echo -e "\n -> Installing core binaries \n"
|
||||||
sudo apt-get -y install git-core python-virtualenv gcc python-dev libjpeg-dev libpng-dev libtiff-dev tesseract-ocr poppler-utils unpaper libreoffice
|
sudo apt-get -y install git-core python-virtualenv gcc python-dev libjpeg-dev libpng-dev libtiff-dev tesseract-ocr poppler-utils libreoffice
|
||||||
|
|
||||||
echo -e "\n -> Cloning development branch of repository \n"
|
echo -e "\n -> Cloning development branch of repository \n"
|
||||||
git clone /mayan-edms-repository/ $INSTALLATION_DIRECTORY
|
git clone /mayan-edms-repository/ $INSTALLATION_DIRECTORY
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ apt-get -qq update
|
|||||||
apt-get -y upgrade
|
apt-get -y upgrade
|
||||||
|
|
||||||
echo -e "\n -> Installing core binaries \n"
|
echo -e "\n -> Installing core binaries \n"
|
||||||
apt-get install nginx supervisor redis-server postgresql libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y
|
apt-get install nginx supervisor redis-server postgresql libpq-dev libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
|
||||||
|
|
||||||
echo -e "\n -> Setting up virtualenv \n"
|
echo -e "\n -> Setting up virtualenv \n"
|
||||||
rm -f ${INSTALLATION_DIRECTORY}
|
rm -f ${INSTALLATION_DIRECTORY}
|
||||||
|
|||||||
@@ -9,19 +9,17 @@ APP_LIST = (
|
|||||||
'converter', 'django_gpg', 'document_comments', 'document_indexing',
|
'converter', 'django_gpg', 'document_comments', 'document_indexing',
|
||||||
'document_signatures', 'document_states', 'documents', 'dynamic_search',
|
'document_signatures', 'document_states', 'documents', 'dynamic_search',
|
||||||
'events', 'folders', 'installation', 'linking', 'lock_manager', 'mailer',
|
'events', 'folders', 'installation', 'linking', 'lock_manager', 'mailer',
|
||||||
'metadata', 'mirroring', 'navigation', 'ocr', 'permissions', 'rest_api',
|
'metadata', 'mirroring', 'motd', 'navigation', 'ocr', 'permissions',
|
||||||
'smart_settings', 'sources', 'statistics', 'storage', 'tags',
|
'rest_api', 'smart_settings', 'sources', 'statistics', 'storage', 'tags',
|
||||||
'user_management'
|
'user_management'
|
||||||
)
|
)
|
||||||
|
|
||||||
LANGUAGE_LIST = (
|
LANGUAGE_LIST = (
|
||||||
'ar', 'bg', 'bs_BA', 'da', 'de_DE', 'en', 'es', 'fa', 'fr', 'hu', 'id',
|
'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', 'vi_VN',
|
'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'vi_VN',
|
||||||
'zh_CN',
|
'zh_CN',
|
||||||
)
|
)
|
||||||
|
|
||||||
# Inactive translations
|
|
||||||
# 'de_CH', 'hr_HR', 'lv', 'nb', 'sq', 'tr_TR', 'zh_TW'
|
|
||||||
|
|
||||||
makemessages = sh.Command('django-admin.py')
|
makemessages = sh.Command('django-admin.py')
|
||||||
makemessages = makemessages.bake('makemessages')
|
makemessages = makemessages.bake('makemessages')
|
||||||
|
|
||||||
|
|||||||
17
docs/_templates/donate.html
vendored
17
docs/_templates/donate.html
vendored
@@ -1,15 +1,4 @@
|
|||||||
<h3>Donate</h3>
|
<h3>Support</h3>
|
||||||
<p>Help support further improvements and development, via:
|
<p>
|
||||||
<ul>
|
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>
|
||||||
<li>
|
|
||||||
- <a href="https://www.paypal.me/RobertoRosario">PayPal.Me</a>
|
|
||||||
</li>
|
|
||||||
<li>
|
|
||||||
- <a href="https://www.patreon.com/siloraptor">Patreon</a>
|
|
||||||
</li>
|
|
||||||
<li>- or Gumroad:
|
|
||||||
<script type="text/javascript" src="https://gumroad.com/js/gumroad.js"></script>
|
|
||||||
<a href="https://gumroad.com/l/UNApl" class="gumroad-button">Buy Mayan EDMS</a>
|
|
||||||
</li>
|
|
||||||
</ul>
|
|
||||||
</p>
|
</p>
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
Welcome to Mayan EDMS!
|
Welcome to Mayan EDMS!
|
||||||
======================
|
======================
|
||||||
|
|
||||||
**Mayan EDMS** is a `Free Open Source`_ `Electronic Document Management System`_, coded in
|
Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_, coded in
|
||||||
the Python language using the Django_ web application framework and released
|
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.
|
under the `Apache 2.0 License`_. It provides an electronic vault or repository for electronic documents.
|
||||||
|
|
||||||
The easiest way to install and try **Mayan EDMS** is by using a Debian based Linux distribution
|
The easiest way to use Mayan EDMS is by using a Debian based Linux distribution
|
||||||
and installing it from PyPI with the following commands:
|
and install it from PyPI with the following commands:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
|
|
||||||
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y
|
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
|
||||||
virtualenv venv
|
virtualenv venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
pip install mayan-edms
|
pip install mayan-edms
|
||||||
@@ -33,6 +33,7 @@ account.
|
|||||||
Concepts <topics/index>
|
Concepts <topics/index>
|
||||||
Development <topics/development>
|
Development <topics/development>
|
||||||
App creation <topics/app_creation>
|
App creation <topics/app_creation>
|
||||||
|
Roadmap <topics/roadmap>
|
||||||
Translations <topics/translations>
|
Translations <topics/translations>
|
||||||
Contributors <topics/contributors>
|
Contributors <topics/contributors>
|
||||||
Screenshots <topics/screenshots>
|
Screenshots <topics/screenshots>
|
||||||
|
|||||||
@@ -25,9 +25,9 @@ What's new in Mayan EDMS v0.12.1
|
|||||||
Fabric file (fabfile)
|
Fabric file (fabfile)
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
A Fabric file is included to help users not very familiar with Ubuntu,
|
A Fabric file is included to help users not very familiar with Ubuntu,
|
||||||
Python and Django install **Mayan EDMS**, or for system administrators
|
Python and Django install Mayan EDMS, or for system administrators
|
||||||
looking to automate the install whether in local or remote systems.
|
looking to automate the install whether in local or remote systems.
|
||||||
At the moment the fabfile will install **Mayan EDMS** in the same configurations
|
At the moment the fabfile will install Mayan EDMS in the same configurations
|
||||||
listed in this documentation, that is: (Ubuntu/Debian/Fedora) + virtualenv + Apache + MySQL.
|
listed in this documentation, that is: (Ubuntu/Debian/Fedora) + virtualenv + Apache + MySQL.
|
||||||
Feel free to submit your configuration settings and files for different databases,
|
Feel free to submit your configuration settings and files for different databases,
|
||||||
webserver or Linux distribution. More configurations will be added to
|
webserver or Linux distribution. More configurations will be added to
|
||||||
@@ -38,7 +38,7 @@ Documentation update
|
|||||||
The installation instructions were updated to include the installation of
|
The installation instructions were updated to include the installation of
|
||||||
the libpng-dev and libjpeg-dev libraries as well as the installation of
|
the libpng-dev and libjpeg-dev libraries as well as the installation of
|
||||||
the poppler-utils package. An additional step to help users test their
|
the poppler-utils package. An additional step to help users test their
|
||||||
new installation of **Mayan EDMS** was also added.
|
new installation of Mayan EDMS was also added.
|
||||||
|
|
||||||
Translations
|
Translations
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ What's new in Mayan EDMS v0.12.2
|
|||||||
|
|
||||||
Smarter auto admin creation
|
Smarter auto admin creation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
**Mayan EDMS** creates a administrator user during the
|
Mayan EDMS creates a administrator user during the
|
||||||
database creation phase to reduce the amount of steps required for a
|
database creation phase to reduce the amount of steps required for a
|
||||||
functional install. The creation of this account is controlled by the configuration
|
functional install. The creation of this account is controlled by the configuration
|
||||||
option `COMMON_AUTO_CREATE_ADMIN`, the username of the account is
|
option `COMMON_AUTO_CREATE_ADMIN`, the username of the account is
|
||||||
@@ -41,7 +41,7 @@ As per the feature request filed under `issue #26`_, a new document
|
|||||||
check out and check in functionality has been added. Users can now
|
check out and check in functionality has been added. Users can now
|
||||||
check out a document and lock new version of it from being uploaded to avoid
|
check out a document and lock new version of it from being uploaded to avoid
|
||||||
editing conflicts. Document check outs have an expiration period after which
|
editing conflicts. Document check outs have an expiration period after which
|
||||||
**Mayan EDMS** will automatically check them back in to avoid a permanent
|
Mayan EDMS will automatically check them back in to avoid a permanent
|
||||||
document lockout. Only the user who has checked out a document can upload
|
document lockout. Only the user who has checked out a document can upload
|
||||||
new versions of it or check the document back in before the expiration period,
|
new versions of it or check the document back in before the expiration period,
|
||||||
unless being granted the ``Allow overriding check out restrictions`` or
|
unless being granted the ``Allow overriding check out restrictions`` or
|
||||||
@@ -52,14 +52,14 @@ Installation environment app
|
|||||||
Diagnosting remote installations of web based applications without access to the
|
Diagnosting remote installations of web based applications without access to the
|
||||||
command line can be a bit hard, to alleviate this situation a new installation
|
command line can be a bit hard, to alleviate this situation a new installation
|
||||||
environment details app has been added. The purpose of this app is to provide
|
environment details app has been added. The purpose of this app is to provide
|
||||||
support staff information about the physical environment where **Mayan EDMS** has
|
support staff information about the physical environment where Mayan EDMS has
|
||||||
been installed. To avoid possible security compromises only administrators
|
been installed. To avoid possible security compromises only administrators
|
||||||
can access this app.
|
can access this app.
|
||||||
|
|
||||||
Editable compressed documents filename
|
Editable compressed documents filename
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Previously when downloading more than one document in a compressed manner,
|
Previously when downloading more than one document in a compressed manner,
|
||||||
**Mayan EDMS** would produce a file with the name ``document_bundle.zip`` for
|
Mayan EDMS would produce a file with the name ``document_bundle.zip`` for
|
||||||
download. A different filename can now be specified at the same download dialog.
|
download. A different filename can now be specified at the same download dialog.
|
||||||
|
|
||||||
German translation
|
German translation
|
||||||
@@ -71,7 +71,7 @@ Statistics gathering
|
|||||||
~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~
|
||||||
Previous attempts at gathering usage statistics have been met with deficient results.
|
Previous attempts at gathering usage statistics have been met with deficient results.
|
||||||
User participation in surveys as well as the quality of the data entered by users
|
User participation in surveys as well as the quality of the data entered by users
|
||||||
was disappointing. That is why this version of **Mayan EDMS** features an
|
was disappointing. That is why this version of Mayan EDMS features an
|
||||||
anonymous statistics gathering functionality.
|
anonymous statistics gathering functionality.
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -6,12 +6,12 @@ Mayan EDMS v0.12 release notes
|
|||||||
|
|
||||||
Welcome to Mayan EDMS v0.12!
|
Welcome to Mayan EDMS v0.12!
|
||||||
|
|
||||||
This release commemorates **Mayan EDMS** first aniversary!
|
This release commemorates Mayan EDMS first aniversary!
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
========
|
||||||
|
|
||||||
Aside from new features, the focus of this release of **Mayan EDMS** also
|
Aside from new features, the focus of this release of Mayan EDMS also
|
||||||
been about improving the code and documentation quality standard
|
been about improving the code and documentation quality standard
|
||||||
even further. The permission system has been completely overhauled to make
|
even further. The permission system has been completely overhauled to make
|
||||||
it entire class based. The other big change is the addition of object
|
it entire class based. The other big change is the addition of object
|
||||||
@@ -61,7 +61,7 @@ Anonymous user support
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Anonymous user support is a two tier function, first is the addition of
|
Anonymous user support is a two tier function, first is the addition of
|
||||||
the `COMMON_ALLOW_ANONYMOUS_ACCESS` configuration option that
|
the `COMMON_ALLOW_ANONYMOUS_ACCESS` configuration option that
|
||||||
allows non authenticated user to browse all the pages of a **Mayan EDMS** installation.
|
allows non authenticated user to browse all the pages of a Mayan EDMS installation.
|
||||||
The second part of this support is the ability to assign permissions
|
The second part of this support is the ability to assign permissions
|
||||||
or individual access to objects to anonymous users.
|
or individual access to objects to anonymous users.
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ the download of several documents in a single compressed file.
|
|||||||
Customizable GPG home directory
|
Customizable GPG home directory
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Addition of the `SIGNATURES_GPG_HOME` configuration option to let
|
Addition of the `SIGNATURES_GPG_HOME` configuration option to let
|
||||||
administrators set **Mayan EDMS**'s GPG instance home directory, used to
|
administrators set Mayan EDMS's GPG instance home directory, used to
|
||||||
store keyrings and other GPG configuration files.
|
store keyrings and other GPG configuration files.
|
||||||
|
|
||||||
Out of process bulk uploading
|
Out of process bulk uploading
|
||||||
@@ -114,7 +114,7 @@ stage to beta stage. Index configuration menus are now available on the
|
|||||||
be populated with document links depending on their metadata and properties.
|
be populated with document links depending on their metadata and properties.
|
||||||
These populated trees can also be mirrored on the physical filesystem and shared
|
These populated trees can also be mirrored on the physical filesystem and shared
|
||||||
using Samba or another filesharing server giving users a structured view
|
using Samba or another filesharing server giving users a structured view
|
||||||
of the documents contained within **Mayan EDMS** from the ``Indexes`` tab
|
of the documents contained within Mayan EDMS from the ``Indexes`` tab
|
||||||
or from a mirrored index shared via the network. A new configuration option
|
or from a mirrored index shared via the network. A new configuration option
|
||||||
has been added, `DOCUMENT_INDEXING_FILESYSTEM_SERVING`, which maps
|
has been added, `DOCUMENT_INDEXING_FILESYSTEM_SERVING`, which maps
|
||||||
the index internal name with the physical directory where such index will be
|
the index internal name with the physical directory where such index will be
|
||||||
@@ -127,7 +127,7 @@ Included in this version is a small feedback application, found under the
|
|||||||
help determine the priority of the next planned features on the pipeline,
|
help determine the priority of the next planned features on the pipeline,
|
||||||
or even help add new features if enough requests are received. All questions
|
or even help add new features if enough requests are received. All questions
|
||||||
are optional but answering as many as possible will help greatly understand
|
are optional but answering as many as possible will help greatly understand
|
||||||
the need of the **Mayan EDMS** user base.
|
the need of the Mayan EDMS user base.
|
||||||
|
|
||||||
Staging file previews
|
Staging file previews
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|||||||
@@ -31,39 +31,39 @@ Attaching or removing tags from a large number of documents is now much easier.
|
|||||||
Registration
|
Registration
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
Based on requests made by the community for greater commercial support and services for
|
Based on requests made by the community for greater commercial support and services for
|
||||||
**Mayan EDMS**, a new feature has been added that allows users to register their
|
Mayan EDMS, a new feature has been added that allows users to register their
|
||||||
copies of **Mayan EDMS** and better help users with commercial support packages.
|
copies of Mayan EDMS and better help users with commercial support packages.
|
||||||
Registration for non commercial users is voluntary and optional, and in no way
|
Registration for non commercial users is voluntary and optional, and in no way
|
||||||
affects the functionality of **Mayan EDMS**. However even for non commercial users
|
affects the functionality of Mayan EDMS. However even for non commercial users
|
||||||
registration offers the advantage of automatically branding the user's copy
|
registration offers the advantage of automatically branding the user's copy
|
||||||
of **Mayan EDMS** with their name or the company name in the title area.
|
of Mayan EDMS with their name or the company name in the title area.
|
||||||
|
|
||||||
Per document type indexing
|
Per document type indexing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Index can now be restricted to update only on specific document types, this
|
Index can now be restricted to update only on specific document types, this
|
||||||
greatly increases the usefulness of indexes, and prevents unwanted index
|
greatly increases the usefulness of indexes, and prevents unwanted index
|
||||||
updates.
|
updates.
|
||||||
|
|
||||||
Bootstrap
|
Bootstrap
|
||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
Setting up **Mayan EDMS** after installation has been indetified by users as the
|
Setting up Mayan EDMS after installation has been indetified by users as the
|
||||||
main difficulty when knowledge about **Mayan EDMS** is relatively low. To
|
main difficulty when knowledge about Mayan EDMS is relatively low. To
|
||||||
address this situation a new feature that provides preconfigured setups has been
|
address this situation a new feature that provides preconfigured setups has been
|
||||||
added. These preconfigured setups are published in the **Mayan EDMS** website and
|
added. These preconfigured setups are published in the Mayan EDMS website and
|
||||||
upon synchonization are available to users, this gives users access and integrators
|
upon synchonization are available to users, this gives users access and integrators
|
||||||
access to new setups without having to wait for new versions of **Mayan EDMS**.
|
access to new setups without having to wait for new versions of Mayan EDMS.
|
||||||
Aside from including preconfigured setups, the new bootstrap app
|
Aside from including preconfigured setups, the new bootstrap app
|
||||||
has the ability of dumping an user's current setup into a serialized text file
|
has the ability of dumping an user's current setup into a serialized text file
|
||||||
which can be tweaked by hand and sent via email to other users. The possibilities
|
which can be tweaked by hand and sent via email to other users. The possibilities
|
||||||
enabled by this range from company wide defaults setups to consultants providing
|
enabled by this range from company wide defaults setups to consultants providing
|
||||||
their clients with customized setups without having to access their clients'
|
their clients with customized setups without having to access their clients'
|
||||||
**Mayan EDMS** instances. ``JSON``, ``YAML`` and a custom ``YAML`` format
|
Mayan EDMS instances. ``JSON``, ``YAML`` and a custom ``YAML`` format
|
||||||
(http://djangosnippets.org/snippets/2461/) are supported by this new app.
|
(http://djangosnippets.org/snippets/2461/) are supported by this new app.
|
||||||
|
|
||||||
Add documents to folders in bulk
|
Add documents to folders in bulk
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
As requested, the ability to add more than one document at a time to a selected
|
As requested, the ability to add more than one document at a time to a selected
|
||||||
folder has been added.
|
folder has been added.
|
||||||
|
|
||||||
Translation updates
|
Translation updates
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~
|
||||||
@@ -96,7 +96,7 @@ removes any traces of code and configuration options related to UNOCONV.
|
|||||||
|
|
||||||
Optimizations
|
Optimizations
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
Inspired by the idea of getting **Mayan EDMS** running effectively on low power hardware such as
|
Inspired by the idea of getting Mayan EDMS running effectively on low power hardware such as
|
||||||
the Raspberry Pi, several rounds or profiling and optimization were done.
|
the Raspberry Pi, several rounds or profiling and optimization were done.
|
||||||
|
|
||||||
Some caching optimization were introduced to the permission model, resulting in
|
Some caching optimization were introduced to the permission model, resulting in
|
||||||
@@ -105,13 +105,13 @@ and a 18% query reduction on cache hits.
|
|||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
=================================
|
||||||
If you installed **Mayan EDMS** by cloning the Git repository issue the commands::
|
If you installed Mayan EDMS by cloning the Git repository issue the commands::
|
||||||
|
|
||||||
$ git reset --hard HEAD
|
$ git reset --hard HEAD
|
||||||
$ git pull
|
$ git pull
|
||||||
|
|
||||||
otherwise download the compressed archived and uncompress it overriding the existing installation.
|
otherwise download the compressed archived and uncompress it overriding the existing installation.
|
||||||
|
|
||||||
Next add the new requirements::
|
Next add the new requirements::
|
||||||
|
|
||||||
$ pip install -r requirements/production.txt
|
$ pip install -r requirements/production.txt
|
||||||
|
|||||||
@@ -118,7 +118,7 @@ to do document OCR using software or services other than Tesseract.
|
|||||||
|
|
||||||
OCR improvements
|
OCR improvements
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
OCR queue state is now reset when reloading **Mayan EMDS**, avoiding the OCR queue
|
OCR queue state is now reset when reloading Mayan EMDS, avoiding the OCR queue
|
||||||
to remain locked. `unpaper` binary is now an optional pre OCR requirement, the OCR
|
to remain locked. `unpaper` binary is now an optional pre OCR requirement, the OCR
|
||||||
queue will now continue working is `unpaper` is not installed. Addition of post
|
queue will now continue working is `unpaper` is not installed. Addition of post
|
||||||
OCR processing support for French and German.
|
OCR processing support for French and German.
|
||||||
@@ -131,7 +131,7 @@ commercial products is now explicitly allowed.
|
|||||||
|
|
||||||
PyPI package
|
PyPI package
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
**Mayan EDMS** has been packaged and submitted to the PyPI_ Python Package Index
|
Mayan EDMS has been packaged and submitted to the PyPI_ Python Package Index
|
||||||
making it even easier to install and use.
|
making it even easier to install and use.
|
||||||
|
|
||||||
New REST API
|
New REST API
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ What's new in Mayan EDMS v1.1
|
|||||||
Celery
|
Celery
|
||||||
~~~~~~
|
~~~~~~
|
||||||
All background tasks processing has been converted to use Celery_. By default
|
All background tasks processing has been converted to use Celery_. By default
|
||||||
**Mayan EDMS** runs in "Eager" until a broker and result backend are configured
|
Mayan EDMS runs in "Eager" until a broker and result backend are configured
|
||||||
as per `Celery's documentation`_. This change made the built-in scheduler and
|
as per `Celery's documentation`_. This change made the built-in scheduler and
|
||||||
job_processing apps obsolete, both were removed.
|
job_processing apps obsolete, both were removed.
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ job_processing apps obsolete, both were removed.
|
|||||||
Views namespaces
|
Views namespaces
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
All views are namespaced_ with the name of the app which defines them. If you have
|
All views are namespaced_ with the name of the app which defines them. If you have
|
||||||
developed 3rd party apps for **Mayan EDMS** be sure to update any reference to a view
|
developed 3rd party apps for Mayan EDMS be sure to update any reference to a view
|
||||||
by prepending the app name to the view name.
|
by prepending the app name to the view name.
|
||||||
|
|
||||||
|
|
||||||
@@ -43,7 +43,7 @@ mail serving.
|
|||||||
|
|
||||||
Update to Django 1.6.8
|
Update to Django 1.6.8
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~
|
||||||
**Mayan EDMS** has been updated to use Django 1.6.8.
|
Mayan EDMS has been updated to use Django 1.6.8.
|
||||||
|
|
||||||
|
|
||||||
Events app
|
Events app
|
||||||
@@ -55,13 +55,13 @@ for `Django activity stream`_
|
|||||||
Watch folders
|
Watch folders
|
||||||
~~~~~~~~~~~~~
|
~~~~~~~~~~~~~
|
||||||
Filesystem folders can be monitored for change and their files automatically
|
Filesystem folders can be monitored for change and their files automatically
|
||||||
uploaded as documents in **Mayan EDMS**.
|
uploaded as documents in Mayan EDMS.
|
||||||
|
|
||||||
|
|
||||||
Vagrant file included
|
Vagrant file included
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
A vagrant file is now included to allow developers to provision a virtual machine
|
A vagrant file is now included to allow developers to provision a virtual machine
|
||||||
with the latest development version of **Mayan EDMS**.
|
with the latest development version of Mayan EDMS.
|
||||||
|
|
||||||
|
|
||||||
User locale profile (language and timezone)
|
User locale profile (language and timezone)
|
||||||
@@ -101,7 +101,7 @@ the metadata types of the new document type are automatically assigned.
|
|||||||
New release cycle
|
New release cycle
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
Starting with this version a new release cycle methodology will come into effect.
|
Starting with this version a new release cycle methodology will come into effect.
|
||||||
The goal of this release cycle is to allow two series of versions of **Mayan EDMS** to be
|
The goal of this release cycle is to allow two series of versions of Mayan EDMS to be
|
||||||
active at a given time: A new major version with new functionality and a minor version
|
active at a given time: A new major version with new functionality and a minor version
|
||||||
providing upgrades and fixes. This release (1.1) will be active and supported
|
providing upgrades and fixes. This release (1.1) will be active and supported
|
||||||
during releases of versions 2.x, but will go into end-of-life as soon as
|
during releases of versions 2.x, but will go into end-of-life as soon as
|
||||||
@@ -111,24 +111,24 @@ maintenance mode.
|
|||||||
|
|
||||||
Deprecation of Python 2.6
|
Deprecation of Python 2.6
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Series 1.0 of **Mayan EDMS** will be the last series supporting Python 2.6. Series
|
Series 1.0 of Mayan EDMS will be the last series supporting Python 2.6. Series
|
||||||
2.0 will be using Django 1.7.x which itself requires Python 2.7 or later.
|
2.0 will be using Django 1.7.x which itself requires Python 2.7 or later.
|
||||||
|
|
||||||
|
|
||||||
Improved testings
|
Improved testings
|
||||||
~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~
|
||||||
**Mayan EDMS** is now automatically tested against SQLite, MySQL and PostgreSQL.
|
Mayan EDMS is now automatically tested against SQLite, MySQL and PostgreSQL.
|
||||||
|
|
||||||
|
|
||||||
API updates
|
API updates
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
Many new API endpoints have been added exposing the majority of **Mayan EDMS** functionality.
|
Many new API endpoints have been added exposing the majority of Mayan EDMS functionality.
|
||||||
|
|
||||||
|
|
||||||
Messages contextual improvements
|
Messages contextual improvements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Many updates and simplifications were made to the source text messages to reduce the
|
Many updates and simplifications were made to the source text messages to reduce the
|
||||||
difficulty of translating **Mayan EDMS** and maintaing the contextual meaning of the
|
difficulty of translating Mayan EDMS and maintaing the contextual meaning of the
|
||||||
text messages.
|
text messages.
|
||||||
|
|
||||||
Improved method for custom settings
|
Improved method for custom settings
|
||||||
@@ -186,7 +186,7 @@ More technical documentation
|
|||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
Many new sub topics were added to the development section of the documentation
|
Many new sub topics were added to the development section of the documentation
|
||||||
to allow developers to better understand the inner workings and philosophies
|
to allow developers to better understand the inner workings and philosophies
|
||||||
of **Mayan EDMS**.
|
of Mayan EDMS.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ What's new in Mayan EDMS v2.0
|
|||||||
Update to Django 1.7
|
Update to Django 1.7
|
||||||
--------------------
|
--------------------
|
||||||
The biggest change of this release comes in the form of support for Django 1.7.
|
The biggest change of this release comes in the form of support for Django 1.7.
|
||||||
**Mayan EDMS** makes use of several new features of Django 1.7 like: migrations,
|
Mayan EDMS makes use of several new features of Django 1.7 like: migrations,
|
||||||
app config and transaction handling. The version of Django supported in this
|
app config and transaction handling. The version of Django supported in this
|
||||||
version is 1.7.10. With the move to Django 1.7, support for South migrations
|
version is 1.7.10. With the move to Django 1.7, support for South migrations
|
||||||
and Python 2.6 is removed. The switch to Django 1.7's app config means that
|
and Python 2.6 is removed. The switch to Django 1.7's app config means that
|
||||||
@@ -27,10 +27,10 @@ update a lot of legacy HTML and CSS was removed, greatly simplifying the
|
|||||||
existing template and allowing the removal of some.
|
existing template and allowing the removal of some.
|
||||||
|
|
||||||
Theming and re-branding
|
Theming and re-branding
|
||||||
----------------------
|
-----------------------
|
||||||
All the presentation logic and markup has been moved into it's own app, the
|
All the presentation logic and markup has been moved into it's own app, the
|
||||||
'appearance' app. All modifications required to customize the entire look of
|
'appearance' app. All modifications required to customize the entire look of
|
||||||
the **Mayan EDMS** can now be done in a single app. Very little markup remains
|
the Mayan EDMS can now be done in a single app. Very little markup remains
|
||||||
in the other apps, and it's usually because of necessity, namely the widgets.py
|
in the other apps, and it's usually because of necessity, namely the widgets.py
|
||||||
modules.
|
modules.
|
||||||
|
|
||||||
@@ -98,7 +98,7 @@ app are no longer required. These are:
|
|||||||
* slate
|
* slate
|
||||||
|
|
||||||
ACL system re-factor
|
ACL system re-factor
|
||||||
-------------------
|
--------------------
|
||||||
The Access Control System has been greatly simplified and optimized. The
|
The Access Control System has been greatly simplified and optimized. The
|
||||||
logistics to grant and revoke permissions are now as follows: Only Roles can
|
logistics to grant and revoke permissions are now as follows: Only Roles can
|
||||||
hold permissions, groups and user can no longer on their own be granted a
|
hold permissions, groups and user can no longer on their own be granted a
|
||||||
@@ -135,7 +135,7 @@ support. Administrators wanting to make a group of documents public are
|
|||||||
encouraged to create an user, group and role for that purpose.
|
encouraged to create an user, group and role for that purpose.
|
||||||
|
|
||||||
Metadata validators re-factor
|
Metadata validators re-factor
|
||||||
----------------------------
|
-----------------------------
|
||||||
The metadata validators have been split into: Validators and Parsers.
|
The metadata validators have been split into: Validators and Parsers.
|
||||||
Validators will just check that the input value conforms to certain
|
Validators will just check that the input value conforms to certain
|
||||||
specification, raising a validation error is not and blocking the user from
|
specification, raising a validation error is not and blocking the user from
|
||||||
@@ -194,11 +194,11 @@ Failure tolerance
|
|||||||
-----------------
|
-----------------
|
||||||
Previous versions made use of transactions to prevent data loss in the event of
|
Previous versions made use of transactions to prevent data loss in the event of
|
||||||
an unexpected error. This release improves on that approach by also reacting
|
an unexpected error. This release improves on that approach by also reacting
|
||||||
to infrastructure failures. **Mayan EDMS** can now recover without any or
|
to infrastructure failures. Mayan EDMS can now recover without any or
|
||||||
minimal data loss from critical events such as loss of connectivity to the
|
minimal data loss from critical events such as loss of connectivity to the
|
||||||
database manager. This changes allow installation of using database managers
|
database manager. This changes allow installation of using database managers
|
||||||
that do not provide guaranteed concurrency such as SQLite, to scale to thousand
|
that do not provide guaranteed concurrency such as SQLite, to scale to thousand
|
||||||
of documents. While this configuration is still not recommended, **Mayan EDMS**
|
of documents. While this configuration is still not recommended, Mayan EDMS
|
||||||
will now work and scale much better in environments where parts of the
|
will now work and scale much better in environments where parts of the
|
||||||
infrastructure cannot be changed (such as the database manager).
|
infrastructure cannot be changed (such as the database manager).
|
||||||
|
|
||||||
@@ -219,7 +219,7 @@ new scheme.
|
|||||||
Default document type and default document source
|
Default document type and default document source
|
||||||
-------------------------------------------------
|
-------------------------------------------------
|
||||||
After installation a default document type and document source are created,
|
After installation a default document type and document source are created,
|
||||||
this means that users can start uploading documents as soon as **Mayan EDMS**
|
this means that users can start uploading documents as soon as Mayan EDMS
|
||||||
is installed without having to do any configuration setting changes. The
|
is installed without having to do any configuration setting changes. The
|
||||||
default document type and default document source are both called 'Default'.
|
default document type and default document source are both called 'Default'.
|
||||||
|
|
||||||
@@ -229,7 +229,7 @@ Support for allowing 3rd party apps to unbind links binded by the core apps
|
|||||||
was added to further improve re-branding and customization.
|
was added to further improve re-branding and customization.
|
||||||
|
|
||||||
Statistics re-factor
|
Statistics re-factor
|
||||||
-------------------
|
--------------------
|
||||||
Statistics gathering and generation has been overhauled to allow for the
|
Statistics gathering and generation has been overhauled to allow for the
|
||||||
creation of scheduled statistics. This allows statistics computation to be
|
creation of scheduled statistics. This allows statistics computation to be
|
||||||
scheduled during low load times. A new management command was added to
|
scheduled during low load times. A new management command was added to
|
||||||
|
|||||||
87
docs/releases/2.1.1.rst
Normal file
87
docs/releases/2.1.1.rst
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
===============================
|
||||||
|
Mayan EDMS v2.1.1 release notes
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Released: May 17, 2016
|
||||||
|
|
||||||
|
What's new
|
||||||
|
==========
|
||||||
|
|
||||||
|
This is a bugfix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Fix object column resolution issue in navigation app
|
||||||
|
----------------------------------------------------
|
||||||
|
Version 2.1 includes a navigation feature that allows model instances from a
|
||||||
|
queryset generated using the .defer() or .only() Django filter optimization
|
||||||
|
features to resolve to their parent class transparently. This optimization
|
||||||
|
caused problems with the sources app which uses a
|
||||||
|
|
||||||
|
Missing Tesseract language files
|
||||||
|
--------------------------------
|
||||||
|
The Tesseract OCR backend now reports if the tesseract language file is missing
|
||||||
|
for the requested document's language.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- Ensure the automatic default index is created after the default document type.
|
||||||
|
|
||||||
|
|
||||||
|
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 #288 <https://gitlab.com/mayan-edms/mayan-edms/issues/288>`_ Can't add sources in mayan-edms 2.1.
|
||||||
|
* `GitLab issue #289 <https://gitlab.com/mayan-edms/mayan-edms/issues/289>`_ OCR fails with Exception.
|
||||||
|
|
||||||
|
|
||||||
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
86
docs/releases/2.1.2.rst
Normal file
86
docs/releases/2.1.2.rst
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
===============================
|
||||||
|
Mayan EDMS v2.1.2 release notes
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Released: May 20, 2016
|
||||||
|
|
||||||
|
What's new
|
||||||
|
==========
|
||||||
|
|
||||||
|
This is a bugfix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Language list sorting
|
||||||
|
---------------------
|
||||||
|
The document language list and the user locale profile language list are now
|
||||||
|
sorted to make it easier to find the desired language.
|
||||||
|
|
||||||
|
Fixed the metadata lookup options: {{ users }} and {{ groups }}
|
||||||
|
---------------------------------------------------------------
|
||||||
|
When configuring metadata type lookup options the {{ users }} and {{ groups }}
|
||||||
|
special options can be used to display a list of users or a list of groups.
|
||||||
|
These options where producing a list in the wrong format and were updated.
|
||||||
|
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
-------------
|
||||||
|
- Add Makefile for common development tasks
|
||||||
|
|
||||||
|
|
||||||
|
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 #290 <https://gitlab.com/mayan-edms/mayan-edms/issues/290>`_ Unicode characters not supported as metadata values
|
||||||
|
* `GitLab issue #292 <https://gitlab.com/mayan-edms/mayan-edms/issues/292>`_ Sort languages by name not by abbreviation
|
||||||
|
|
||||||
|
|
||||||
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
87
docs/releases/2.1.3.rst
Normal file
87
docs/releases/2.1.3.rst
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
===============================
|
||||||
|
Mayan EDMS v2.1.3 release notes
|
||||||
|
===============================
|
||||||
|
|
||||||
|
Released: June 29, 2016
|
||||||
|
|
||||||
|
What's new
|
||||||
|
==========
|
||||||
|
|
||||||
|
This is a bug-fix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Temporary files cleanup
|
||||||
|
-----------------------
|
||||||
|
When uploading PDF files that had been OCRed by previous software, the text
|
||||||
|
parser backend that uses Poppler, would leave behind some temporary files in
|
||||||
|
the /tmp folder. The issue has been resolved and from the fix a test mixin
|
||||||
|
system check has been devised that will identify places in the codebase with
|
||||||
|
similar behaviors, reducing the recurrence of similar issues in the future.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
-------------
|
||||||
|
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296
|
||||||
|
- Start using self.setdout instead of print as per documentation.
|
||||||
|
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
||||||
|
- Normalize handling of temporary file and directory creation.
|
||||||
|
- Explicitly check for residual temporary files in tests.
|
||||||
|
- Add missing temporary file cleanup for office documents.
|
||||||
|
- Fix file descriptor leak in the document signature download test.
|
||||||
|
|
||||||
|
Removals
|
||||||
|
--------
|
||||||
|
* None
|
||||||
|
|
||||||
|
Upgrading from a previous version
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Using PIP
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
Type in the console::
|
||||||
|
|
||||||
|
$ pip install -U mayan-edms
|
||||||
|
|
||||||
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
Using Git
|
||||||
|
~~~~~~~~~
|
||||||
|
|
||||||
|
If you installed Mayan EDMS by cloning the Git repository issue the commands::
|
||||||
|
|
||||||
|
$ git reset --hard HEAD
|
||||||
|
$ git pull
|
||||||
|
|
||||||
|
otherwise download the compressed archived and uncompress it overriding the
|
||||||
|
existing installation.
|
||||||
|
|
||||||
|
Next upgrade/add the new requirements::
|
||||||
|
|
||||||
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
Common steps
|
||||||
|
~~~~~~~~~~~~
|
||||||
|
|
||||||
|
Migrate existing database schema with::
|
||||||
|
|
||||||
|
$ mayan-edms.py performupgrade
|
||||||
|
|
||||||
|
Add new static media::
|
||||||
|
|
||||||
|
$ mayan-edms.py collectstatic --noinput
|
||||||
|
|
||||||
|
The upgrade procedure is now complete.
|
||||||
|
|
||||||
|
|
||||||
|
Backward incompatible changes
|
||||||
|
=============================
|
||||||
|
|
||||||
|
* None
|
||||||
|
|
||||||
|
Bugs fixed or issues closed
|
||||||
|
===========================
|
||||||
|
|
||||||
|
* `GitLab issue #295 <https://gitlab.com/mayan-edms/mayan-edms/issues/295>`_ When editing a user the top bar jumps to the name of the user
|
||||||
|
* `GitLab issue #309 <https://gitlab.com/mayan-edms/mayan-edms/issues/309>`_ Temp files quickly filling-up my /tmp (1GB tmpfs)
|
||||||
|
|
||||||
|
|
||||||
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
238
docs/releases/2.1.rst
Normal file
238
docs/releases/2.1.rst
Normal file
@@ -0,0 +1,238 @@
|
|||||||
|
=============================
|
||||||
|
Mayan EDMS v2.1 release notes
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Released: May 14, 2016
|
||||||
|
|
||||||
|
What's new
|
||||||
|
==========
|
||||||
|
|
||||||
|
Upgrade to use Django 1.8.13
|
||||||
|
----------------------------
|
||||||
|
With the end of life support for Django 1.7, moving to the next Mayan EDMS
|
||||||
|
minor version was a target for this release. The Django minor release chosen was
|
||||||
|
1.8 as it is very compatible with 1.7 and required minimal changes. Django 1.8
|
||||||
|
is an LTS release (Long Term Support) meaning that is no new big feature of a
|
||||||
|
new Django version is required, the project can stay in Django 1.8 for a good
|
||||||
|
amount of time with no downsides.
|
||||||
|
|
||||||
|
Remove remaining references to Django's User model
|
||||||
|
--------------------------------------------------
|
||||||
|
The few remaining hard code references to Django's User model that were missed
|
||||||
|
in a previous release have been removed. Using a custom User model with Mayan
|
||||||
|
should present very little if any obstacles.
|
||||||
|
|
||||||
|
Remove included login required middleware
|
||||||
|
-----------------------------------------
|
||||||
|
The custom middleware include with Mayan EDMS that forces user to be
|
||||||
|
authenticated before being able to access any view has been removed in favor of
|
||||||
|
a dedicated 3rd party Django app for that purpose. The app chosen was
|
||||||
|
django-stronghold (http://mikegrouchy.com/django-stronghold/).
|
||||||
|
|
||||||
|
Improve generation of success and error messages for class based views
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
In the past success messages for actions would show a generic mention to the
|
||||||
|
object being manipulated (document, folder, tag). Now the errors and success
|
||||||
|
messages with be more explicit in describing what the view has or was trying
|
||||||
|
to manipulate.
|
||||||
|
|
||||||
|
Remove ownership concept from folders
|
||||||
|
-------------------------------------
|
||||||
|
Currently Folders in Mayan EDMS have a field that stores a reference to the
|
||||||
|
user that has created that folders. One of the design decisions of Mayan EDMS
|
||||||
|
is that there should never be any explicit ownership of any object. Ownership
|
||||||
|
is relative and is defined by the Access Control List of an object. The
|
||||||
|
removal of the user field from the Folders model brings this app in line with
|
||||||
|
the defined behavior.
|
||||||
|
|
||||||
|
Replacement of strip_spaces middleware with the spaceless template tag
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
As a size optimization technique HTML content was dynamically stripped of spaces
|
||||||
|
as it was being served. The technique used involved detecting the MIME type of
|
||||||
|
the content being served and if found to be of text/HTML type spaces between
|
||||||
|
tags were stripped. An edge case was found where this did not worked always.
|
||||||
|
The approached has been changed to use Django's official tag to strip spaces.
|
||||||
|
In addition to using an official approach, the removal of spaces only happens
|
||||||
|
when the template is compiled and not at each HTTP response. The optimization
|
||||||
|
is minimal but since it happened at every response a small increase in speed
|
||||||
|
is expected for all deployment scenarios.
|
||||||
|
|
||||||
|
Deselect the update checkbox for optional metadata by default
|
||||||
|
-------------------------------------------------------------
|
||||||
|
During the last releases the behavior of the of metadata edit checkbox has seen
|
||||||
|
several tune ups. Thanks to community feedback one small change has been
|
||||||
|
introduced. The edit checkbox will be deselected by default for all optional
|
||||||
|
document type metadata entries.
|
||||||
|
|
||||||
|
Implement per document type document creation permission
|
||||||
|
--------------------------------------------------------
|
||||||
|
If is now possible to grant the document creation permission to a role for a
|
||||||
|
document type. Previously document creation was a "blanket" permission. Having
|
||||||
|
the permission meant that user could create any type of document. With this
|
||||||
|
change it is now possible to restrict which types of document users of a
|
||||||
|
specific role can create.
|
||||||
|
|
||||||
|
Make document type delete time period optional
|
||||||
|
----------------------------------------------
|
||||||
|
The entries that defined after how long a document in the trash would be
|
||||||
|
permanently deleted have been made optional. This means that if a document
|
||||||
|
type has this option blank, the corresponding document of this type would never
|
||||||
|
be deleted from the trash can.
|
||||||
|
|
||||||
|
Fixed date locale handling in document properties, checkout and user detail views
|
||||||
|
---------------------------------------------------------------------------------
|
||||||
|
A few releases back the ability to for users to set their timezone was added.
|
||||||
|
This change also included a smart date rendering update to adjust the dates
|
||||||
|
and times fields to the user's timezone. Some users reported a few views where
|
||||||
|
this timezone adjustment was not happening, this has been fully fixed.
|
||||||
|
|
||||||
|
Default index
|
||||||
|
-------------
|
||||||
|
During new installations a default index that organizes document by year/month
|
||||||
|
when they were uploaded will be created to help users better understand the
|
||||||
|
concept of indexes in Mayan EDMS.
|
||||||
|
|
||||||
|
HTML5 upload widget
|
||||||
|
-------------------
|
||||||
|
A common request is the ability to just drap and drop documents from other
|
||||||
|
windows into Mayan EDMS's document upload wizard. This release includes that
|
||||||
|
capability and will also show a completion bar for the upload. Document
|
||||||
|
uploading is sped up dramatically with this change.
|
||||||
|
|
||||||
|
Message of the Day app
|
||||||
|
----------------------
|
||||||
|
Administrators wanting to display announcements has no other way to do so
|
||||||
|
than to customize the login template. To avoid this a new app has been added
|
||||||
|
that allows for the creation of messages to be shown at the user login
|
||||||
|
screen. These messages can have an activation and an expiration date and
|
||||||
|
time. These messages are useful for display company access policies,
|
||||||
|
maintenance announcement, etc.
|
||||||
|
|
||||||
|
Document signing
|
||||||
|
----------------
|
||||||
|
The biggest change for this release if the addition of document signing from
|
||||||
|
within the UI. Enterprise users request this feature very often as in those
|
||||||
|
environments cryptographic signatures are a basic requirement. Previously
|
||||||
|
Mayan EDMS had the ability to automatically check if a document was signed and
|
||||||
|
if signed, verify the validity of the signature. However, to sign documents
|
||||||
|
user had to download the document, sign the document offline, and either
|
||||||
|
re-upload the signed document as a new version or upload a detached
|
||||||
|
signature for the existing document version. Aside from being now able to sign
|
||||||
|
documents from the web user interface, the way keys are handled has been
|
||||||
|
rewritten from scratch to support distributed key storage. This means that
|
||||||
|
a key uploaded in one computer by one user can be used transparently by
|
||||||
|
other users in other computers to sign documents. The relevant access control
|
||||||
|
updates were added to the new document signing system. Users wanting to sign a
|
||||||
|
document need the singing permission for the document (or document type),
|
||||||
|
for the private key they intend to use, and the passphrase (if the key has one).
|
||||||
|
Finally documents are now checked just once for signatures and not every time
|
||||||
|
they are accessed, this provides a very sizable speed improvement in document
|
||||||
|
access and availability.
|
||||||
|
|
||||||
|
Other changes
|
||||||
|
=============
|
||||||
|
- Upgrade Python requirements to recent versions.
|
||||||
|
- Rename 'Content' search box to 'OCR'.
|
||||||
|
- Silence all Django 1.8 model import warnings.
|
||||||
|
- Add icons to the document face menu links.
|
||||||
|
- Increase icon to text spacing to 3px.
|
||||||
|
- Add new permission: checkout details view.
|
||||||
|
- Add HTML tags stripping to the browser title generation template.
|
||||||
|
- Folder and Tag creation API calls now return the id of the created instances.
|
||||||
|
- Update Document model's uuid field to use Django's native UUIDField class.
|
||||||
|
- Add new split view index navigation
|
||||||
|
- Newly uploaded documents appear in the Recent document list of the user.
|
||||||
|
- Start migration from django-sendfile to django-downloadview.
|
||||||
|
- Index more model fields.
|
||||||
|
- Navigation system support querysets using .defer() or .only() optimizations.
|
||||||
|
- API fixes and improvements.
|
||||||
|
- Increase total test count to 311.
|
||||||
|
- Increase test coverage to 77%.
|
||||||
|
- Documentation improvements.
|
||||||
|
- Handle unicode filenames in staging folders.
|
||||||
|
- Add staging file deletion permission.
|
||||||
|
- New document_signature_view permission.
|
||||||
|
- Instead of multiple keyservers only one keyserver is now supported.
|
||||||
|
- Replace document type selection widget with an opened selection list.
|
||||||
|
- Add roadmap documentation chapter.
|
||||||
|
|
||||||
|
|
||||||
|
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 #137 <https://gitlab.com/mayan-edms/mayan-edms/issues/137>`_ Add app creation chapter to documentation.
|
||||||
|
* `GitLab issue #147 <https://gitlab.com/mayan-edms/mayan-edms/issues/147>`_ Add in app document signing.
|
||||||
|
* `GitLab issue #161 <https://gitlab.com/mayan-edms/mayan-edms/issues/161>`_ Email backend setup documentation.
|
||||||
|
* `GitLab issue #162 <https://gitlab.com/mayan-edms/mayan-edms/issues/162>`_ Add HTML5 file uploader.
|
||||||
|
* `GitLab issue #191 <https://gitlab.com/mayan-edms/mayan-edms/issues/191>`_ Split index contents title into title and path/breadcrumb widget.
|
||||||
|
* `GitLab issue #206 <https://gitlab.com/mayan-edms/mayan-edms/issues/206>`_ Support for dynamic LOGIN_EXEMPT_URLS.
|
||||||
|
* `GitLab issue #208 <https://gitlab.com/mayan-edms/mayan-edms/issues/208>`_ Add tagging step to upload wizard.
|
||||||
|
* `GitLab issue #218 <https://gitlab.com/mayan-edms/mayan-edms/issues/218>`_ Cookie cutter template for Mayan apps.
|
||||||
|
* `GitLab issue #222 <https://gitlab.com/mayan-edms/mayan-edms/issues/222>`_ Add notice board or Message of the Day.
|
||||||
|
* `GitLab issue #225 <https://gitlab.com/mayan-edms/mayan-edms/issues/225>`_ Remove hard coded User model.
|
||||||
|
* `GitLab issue #232 <https://gitlab.com/mayan-edms/mayan-edms/issues/232>`_ "Create documents" is a blanket permission for a user to create a document of any document type.
|
||||||
|
* `GitLab issue #246 <https://gitlab.com/mayan-edms/mayan-edms/issues/246>`_ Upgrade to Django version 1.8 as Django 1.7 is end-of-life.
|
||||||
|
* `GitLab issue #251 <https://gitlab.com/mayan-edms/mayan-edms/issues/251>`_ Add method to disable metadata edit form "update" checkbox when not needed.
|
||||||
|
* `GitLab issue #255 <https://gitlab.com/mayan-edms/mayan-edms/issues/255>`_ UnicodeDecodeError in apps/common/middleware/strip_spaces_widdleware.py.
|
||||||
|
* `GitLab issue #256 <https://gitlab.com/mayan-edms/mayan-edms/issues/256>`_ typo in locale settings (Dutch).
|
||||||
|
* `GitLab issue #261 <https://gitlab.com/mayan-edms/mayan-edms/issues/261>`_ Feature: Document Access Audit Logging.
|
||||||
|
* `GitLab issue #265 <https://gitlab.com/mayan-edms/mayan-edms/issues/265>`_ Indexes show list (show indexe only if the user has ACLs on document type).
|
||||||
|
* `GitLab issue #266 <https://gitlab.com/mayan-edms/mayan-edms/issues/266>`_ Smart links : Dynamic label with Postgresql.
|
||||||
|
* `GitLab issue #267 <https://gitlab.com/mayan-edms/mayan-edms/issues/267>`_ Release 2.1 RC1 : Notes and ideas.
|
||||||
|
* `GitLab issue #268 <https://gitlab.com/mayan-edms/mayan-edms/issues/268>`_ Release 2.1 RC1 : Bug to access inside an indexes.
|
||||||
|
* `GitLab issue #270 <https://gitlab.com/mayan-edms/mayan-edms/issues/270>`_ Release 2.1 RC1 : Bug statistics.
|
||||||
|
* `GitLab issue #274 <https://gitlab.com/mayan-edms/mayan-edms/issues/274>`_ [Release 2.1 RC2] Web Tests.
|
||||||
|
* `GitLab issue #275 <https://gitlab.com/mayan-edms/mayan-edms/issues/275>`_ [Release 2.1 RC2] Notes.
|
||||||
|
* `GitLab issue #276 <https://gitlab.com/mayan-edms/mayan-edms/issues/276>`_ [Release 2.1 RC2] API Tests.
|
||||||
|
|
||||||
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
@@ -2,19 +2,19 @@
|
|||||||
Release notes
|
Release notes
|
||||||
=============
|
=============
|
||||||
|
|
||||||
Release notes for the official **Mayan EDMS** releases. Each release note will tell you
|
Release notes for the official Mayan EDMS releases. Each release note will tell you
|
||||||
what's new in each version, and will also describe any backwards-incompatible
|
what's new in each version, and will also describe any backwards-incompatible
|
||||||
changes made in that version.
|
changes made in that version.
|
||||||
|
|
||||||
For those upgrading to a new version of **Mayan EDMS**, you will need to check
|
For those upgrading to a new version of Mayan EDMS, you will need to check
|
||||||
all the backwards-incompatible changes and deprecated features for
|
all the backwards-incompatible changes and deprecated features for
|
||||||
each 'final' release from the one after your current **Mayan EDMS** version,
|
each 'final' release from the one after your current Mayan EDMS version,
|
||||||
up to and including the latest version.
|
up to and including the latest version.
|
||||||
|
|
||||||
Final releases
|
Final releases
|
||||||
==============
|
==============
|
||||||
|
|
||||||
Below are release notes through **Mayan EDMS** |version| and its minor releases. Newer
|
Below are release notes through Mayan EDMS |version| and its minor releases. Newer
|
||||||
versions of the documentation contain the release notes for any later releases.
|
versions of the documentation contain the release notes for any later releases.
|
||||||
|
|
||||||
2.0 series
|
2.0 series
|
||||||
@@ -22,9 +22,13 @@ versions of the documentation contain the release notes for any later releases.
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
|
|
||||||
2.0
|
2.1.3
|
||||||
2.0.1
|
2.1.2
|
||||||
|
2.1.1
|
||||||
|
2.1
|
||||||
2.0.2
|
2.0.2
|
||||||
|
2.0.1
|
||||||
|
2.0
|
||||||
|
|
||||||
1.0 series
|
1.0 series
|
||||||
----------
|
----------
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Access control lists
|
Access control lists
|
||||||
====================
|
====================
|
||||||
|
|
||||||
Besides the permissions system explained in :doc:`permissions`, **Mayan EDMS**
|
Besides the permissions system explained in :doc:`permissions`, Mayan EDMS
|
||||||
provides per object permission granting. This feature is used to grant a
|
provides per object permission granting. This feature is used to grant a
|
||||||
permission to a role, but this permission can only be executed for a limited
|
permission to a role, but this permission can only be executed for a limited
|
||||||
number of objects (documents, folders, tags) instead of being effective
|
number of objects (documents, folders, tags) instead of being effective
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
App creation
|
App creation
|
||||||
============
|
============
|
||||||
|
|
||||||
**Mayan EDMS** apps are essentially Django app with some extra code to register
|
Mayan EDMS apps are essentially Django app with some extra code to register
|
||||||
navigation, permissions and other relationships.
|
navigation, permissions and other relationships.
|
||||||
|
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ App modules
|
|||||||
|
|
||||||
- api_views.py
|
- api_views.py
|
||||||
|
|
||||||
REST API views go here. **Mayan EDMS** uses Django REST Framework API view
|
REST API views go here. Mayan EDMS uses Django REST Framework API view
|
||||||
classes.
|
classes.
|
||||||
|
|
||||||
- apps.py
|
- apps.py
|
||||||
@@ -135,7 +135,7 @@ Views
|
|||||||
=====
|
=====
|
||||||
|
|
||||||
The module common.generics provides custom generic class based views to be used.
|
The module common.generics provides custom generic class based views to be used.
|
||||||
The basic views used to create, edit, view and delete objects in **Mayan EDMS**
|
The basic views used to create, edit, view and delete objects in Mayan EDMS
|
||||||
are: SingleObjectCreateView, SingleObjectDetailView, SingleObjectEditView,
|
are: SingleObjectCreateView, SingleObjectDetailView, SingleObjectEditView,
|
||||||
and SingleObjectListView
|
and SingleObjectListView
|
||||||
|
|
||||||
|
|||||||
16
docs/topics/backups.rst
Normal file
16
docs/topics/backups.rst
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
=======
|
||||||
|
Backups
|
||||||
|
=======
|
||||||
|
|
||||||
|
To backup your install of Mayan EDMS just copy the actual document files and
|
||||||
|
the database content. If you are using the default storage backend, the
|
||||||
|
document files should be found in ``mayan/media/document_storage/``.
|
||||||
|
|
||||||
|
To dump the content of your database manager refer to the documentation chapter
|
||||||
|
regarding database data "dumping".
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
- Postgresl: http://www.postgresql.org/docs/current/static/backup.html
|
||||||
|
- MySQL: https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html
|
||||||
|
- SQLite: Just copy the file ``mayan/media/db.sqlite3``
|
||||||
@@ -15,14 +15,14 @@ Search for information in the `archives of the mayan-edms mailing list`_, or
|
|||||||
`post a question`_. If you prefer news servers, use the gateway provided by
|
`post a question`_. If you prefer news servers, use the gateway provided by
|
||||||
Gmane_.
|
Gmane_.
|
||||||
|
|
||||||
**Mayan EDMS** community developers do their best to reply to basic questions.
|
Mayan EDMS community developers do their best to reply to basic questions.
|
||||||
Be sure to check the list archives as it may already containt the answers to
|
Be sure to check the list archives as it may already containt the answers to
|
||||||
your questions.
|
your questions.
|
||||||
|
|
||||||
Twitter
|
Twitter
|
||||||
-------
|
-------
|
||||||
|
|
||||||
**Mayan EDMS** has an official Twitter account, `@mayanedms
|
Mayan EDMS has an official Twitter account, `@mayanedms
|
||||||
<http://twitter.com/mayanedms>`_, which is used for announcements and occasional
|
<http://twitter.com/mayanedms>`_, which is used for announcements and occasional
|
||||||
related news tidbits.
|
related news tidbits.
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ related news tidbits.
|
|||||||
Bugs/ticket tracker
|
Bugs/ticket tracker
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Report bugs with **Mayan EDMS** or search existing ones using Github's `ticket tracker`_.
|
Report bugs with Mayan EDMS or search existing ones using Gitlab's `ticket tracker`_.
|
||||||
|
|
||||||
|
|
||||||
.. _archives of the mayan-edms mailing list: http://groups.google.com/group/mayan-edms/
|
.. _archives of the mayan-edms mailing list: http://groups.google.com/group/mayan-edms/
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ Contributors
|
|||||||
How to contribute?
|
How to contribute?
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
You can help further the development of **Mayan EDMS** by testing, reporting
|
You can help further the development of Mayan EDMS by testing, reporting
|
||||||
bugs, submitting documentation or code patches.
|
bugs, submitting documentation or code patches.
|
||||||
|
|
||||||
Lead developer
|
Lead developer
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ Deploying
|
|||||||
OS "bare metal"
|
OS "bare metal"
|
||||||
===============
|
===============
|
||||||
|
|
||||||
Like other Django based projects **Mayan EDMS** can be deployed in a wide variety
|
Like other Django based projects Mayan EDMS can be deployed in a wide variety
|
||||||
of ways. The method provided below is only a bare minimum example.
|
of ways. The method provided below is only a bare minimum example.
|
||||||
These instructions are independent of the instructions mentioned in the
|
These instructions are independent of the instructions mentioned in the
|
||||||
:doc:`installation` chapter but assume you have already made a test install to
|
:doc:`installation` chapter but assume you have already made a test install to
|
||||||
@@ -109,7 +109,7 @@ Create the directory for the uWSGI log files::
|
|||||||
|
|
||||||
mkdir /var/log/uwsgi
|
mkdir /var/log/uwsgi
|
||||||
|
|
||||||
Create the NGINX site file for **Mayan EDMS**, ``/etc/nginx/sites-available/mayan``::
|
Create the NGINX site file for Mayan EDMS, ``/etc/nginx/sites-available/mayan``::
|
||||||
|
|
||||||
server {
|
server {
|
||||||
listen 80;
|
listen 80;
|
||||||
@@ -134,7 +134,7 @@ Create the NGINX site file for **Mayan EDMS**, ``/etc/nginx/sites-available/maya
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Enable the NGINX site for **Mayan EDMS**::
|
Enable the NGINX site for Mayan EDMS::
|
||||||
|
|
||||||
ln -s /etc/nginx/sites-available/mayan /etc/nginx/sites-enabled/
|
ln -s /etc/nginx/sites-available/mayan /etc/nginx/sites-enabled/
|
||||||
|
|
||||||
@@ -198,7 +198,7 @@ Deploy the Docker image stack::
|
|||||||
docker run --name redis -d redis
|
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
|
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
|
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
|
be available by browsing to http://127.0.0.1. You can inspect the initialization
|
||||||
with::
|
with::
|
||||||
|
|
||||||
@@ -242,7 +242,7 @@ Launch the entire stack (Postgres, Redis, and Mayan EDMS) using::
|
|||||||
|
|
||||||
docker-compose -f docker-compose.yml -p mayanedms up -d
|
docker-compose -f docker-compose.yml -p mayanedms up -d
|
||||||
|
|
||||||
After the **Mayan EDMS** container finishes initializing (about 5 minutes), it will
|
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
|
be available by browsing to http://127.0.0.1. You can inspect the initialization
|
||||||
with::
|
with::
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
Development
|
Development
|
||||||
===========
|
===========
|
||||||
|
|
||||||
**Mayan EDMS** is under active development, and contributions are welcome.
|
Mayan EDMS is under active development, and contributions are welcome.
|
||||||
|
|
||||||
If you have a feature request, suggestion or bug report, please open a new
|
If you have a feature request, suggestion or bug report, please open a new
|
||||||
issue on the `GitLab issue tracker`_. To submit patches, please send a pull
|
issue on the `GitLab issue tracker`_. To submit patches, please send a pull
|
||||||
@@ -16,8 +16,8 @@ request on GitLab_. Make sure to add yourself to the :ref:`contributors` file.
|
|||||||
Project philosophies
|
Project philosophies
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
How to think about **Mayan EDMS** when doing changes or adding new features,
|
How to think about Mayan EDMS when doing changes or adding new features,
|
||||||
why things are the way they are in **Mayan EDMS**.
|
why things are the way they are in Mayan EDMS.
|
||||||
|
|
||||||
- Functionality must be as market/sector independent as possible, code for the
|
- Functionality must be as market/sector independent as possible, code for the
|
||||||
95% of use cases.
|
95% of use cases.
|
||||||
@@ -125,7 +125,7 @@ Correct:
|
|||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
~~~~~~~~~~~~
|
~~~~~~~~~~~~
|
||||||
**Mayan EDMS** apps follow a hierarchical model of dependency. Apps import from
|
Mayan EDMS apps follow a hierarchical model of dependency. Apps import from
|
||||||
their parents or siblings, never from their children. Think plugins. A parent
|
their parents or siblings, never from their children. Think plugins. A parent
|
||||||
app must never assume anything about a possible existing child app. The
|
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
|
||||||
@@ -136,7 +136,7 @@ Variables
|
|||||||
~~~~~~~~~
|
~~~~~~~~~
|
||||||
Naming of variables should follow a Major to Minor convention, usually
|
Naming of variables should follow a Major to Minor convention, usually
|
||||||
including the purpose of the variable as the first piece of the name, using
|
including the purpose of the variable as the first piece of the name, using
|
||||||
underscores as spaces. camelCase is not used in **Mayan EDMS**.
|
underscores as spaces. camelCase is not used in Mayan EDMS.
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
|
|
||||||
@@ -171,7 +171,7 @@ Classes:
|
|||||||
|
|
||||||
Strings
|
Strings
|
||||||
~~~~~~~
|
~~~~~~~
|
||||||
Quotation character used in **Mayan EDMS** for strings is the single quote.
|
Quotation character used in Mayan EDMS for strings is the single quote.
|
||||||
Double quote is used for multiple line comments or HTML markup.
|
Double quote is used for multiple line comments or HTML markup.
|
||||||
|
|
||||||
Migrations
|
Migrations
|
||||||
@@ -199,7 +199,7 @@ as passed directly from the exception object.
|
|||||||
Source Control
|
Source Control
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
**Mayan EDMS** source is controlled with Git_.
|
Mayan EDMS source is controlled with Git_.
|
||||||
|
|
||||||
The project is publicly accessible, hosted and can be cloned from **GitLab** using::
|
The project is publicly accessible, hosted and can be cloned from **GitLab** using::
|
||||||
|
|
||||||
@@ -209,7 +209,7 @@ The project is publicly accessible, hosted and can be cloned from **GitLab** usi
|
|||||||
Git branch structure
|
Git branch structure
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
**Mayan EDMS** follows a simplified model layout based on Vincent Driessen's
|
Mayan EDMS follows a simplified model layout based on Vincent Driessen's
|
||||||
`Successful Git Branching Model`_ blog post.
|
`Successful Git Branching Model`_ blog post.
|
||||||
|
|
||||||
``develop``
|
``develop``
|
||||||
@@ -299,7 +299,7 @@ merged.
|
|||||||
Debugging
|
Debugging
|
||||||
---------
|
---------
|
||||||
|
|
||||||
**Mayan EDMS** makes extensive use of Django's new `logging capabilities`_.
|
Mayan EDMS makes extensive use of Django's new `logging capabilities`_.
|
||||||
By default debug logging for all apps is turned on. If you wish to customize
|
By default debug logging for all apps is turned on. If you wish to customize
|
||||||
how logging is managed turn off automatic logging by setting
|
how logging is managed turn off automatic logging by setting
|
||||||
`COMMON_AUTO_LOGGING` to ``False`` and add the following lines to your
|
`COMMON_AUTO_LOGGING` to ``False`` and add the following lines to your
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Document types
|
Document types
|
||||||
==============
|
==============
|
||||||
|
|
||||||
The basic unit of data in **Mayan EDMS** is the ``document type``. A document
|
The basic unit of data in Mayan EDMS is the ``document type``. A document
|
||||||
type can be interpreted also as a document category, a document class, or a
|
type can be interpreted also as a document category, a document class, or a
|
||||||
document template. Document types need to be created before documents can be
|
document template. Document types need to be created before documents can be
|
||||||
uploaded. It is not possible to upload documents without assigning them a
|
uploaded. It is not possible to upload documents without assigning them a
|
||||||
@@ -11,7 +11,7 @@ document type. Examples of document type: **invoices**, **blueprints**,
|
|||||||
|
|
||||||
Settings and attributes are applied to document types and documents will
|
Settings and attributes are applied to document types and documents will
|
||||||
inherit those settings and attributes based on the document type they were
|
inherit those settings and attributes based on the document type they were
|
||||||
assigned when uploaded into **Mayan EDMS**. A document can only be of one
|
assigned when uploaded into Mayan EDMS. A document can only be of one
|
||||||
type at a given moment, but if needed, the type of a document can be changed.
|
type at a given moment, but if needed, the type of a document can be changed.
|
||||||
Upon changing its type, the document will lose its previous settings and
|
Upon changing its type, the document will lose its previous settings and
|
||||||
attributes, and will inherit the settings and attributes of its new type.
|
attributes, and will inherit the settings and attributes of its new type.
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ Frequently asked questions and solutions
|
|||||||
**Q: PostgreSQL vs. MySQL**
|
**Q: PostgreSQL vs. MySQL**
|
||||||
|
|
||||||
Since Django abstracts database operations from a functional point of view
|
Since Django abstracts database operations from a functional point of view
|
||||||
**Mayan EDMS** will behave exactly the same either way. The only concern
|
Mayan EDMS will behave exactly the same either way. The only concern
|
||||||
would be that MySQL doesn't support transactions for schema modifying
|
would be that MySQL doesn't support transactions for schema modifying
|
||||||
commands. The only moment this could cause problems is when running
|
commands. The only moment this could cause problems is when running
|
||||||
South migrations during upgrades, if a migration fails the database
|
South migrations during upgrades, if a migration fails the database
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ Features
|
|||||||
|
|
||||||
* Office document format support.
|
* Office document format support.
|
||||||
|
|
||||||
* **Mayan EDMS** can detect the presence of Libre Office and use it to support
|
* Mayan EDMS can detect the presence of Libre Office and use it to support
|
||||||
word processing files, spreadsheets and presentations.
|
word processing files, spreadsheets and presentations.
|
||||||
|
|
||||||
* User defined metadata fields.
|
* User defined metadata fields.
|
||||||
@@ -44,7 +44,7 @@ Features
|
|||||||
|
|
||||||
* Previews for many file formats.
|
* Previews for many file formats.
|
||||||
|
|
||||||
* **Mayan EDMS** provides image preview generation for many popular file
|
* Mayan EDMS provides image preview generation for many popular file
|
||||||
formats.
|
formats.
|
||||||
|
|
||||||
* Full text searching.
|
* Full text searching.
|
||||||
@@ -78,7 +78,7 @@ Features
|
|||||||
|
|
||||||
* Multilingual user interface.
|
* Multilingual user interface.
|
||||||
|
|
||||||
* **Mayan EDMS** being written using the Django_ framework, can be translated
|
* Mayan EDMS being written using the Django_ framework, can be translated
|
||||||
to practically any language spoken in the world. For a list of translated
|
to practically any language spoken in the world. For a list of translated
|
||||||
languages have a look at the Transifex_ project location.
|
languages have a look at the Transifex_ project location.
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
File storage
|
File storage
|
||||||
============
|
============
|
||||||
|
|
||||||
The files are stored and placed under **Mayan EDMS** "control" to avoid
|
The files are stored and placed under Mayan EDMS "control" to avoid
|
||||||
filename clashes each file gets renamed to its ``UUID`` (Universally Unique ID),
|
filename clashes each file gets renamed to its ``UUID`` (Universally Unique ID),
|
||||||
without extension, and stored in a simple flat arrangement in a directory.
|
without extension, and stored in a simple flat arrangement in a directory.
|
||||||
|
|
||||||
@@ -20,9 +20,16 @@ This doesn't stop access to the files but renaming, moving or updating
|
|||||||
directly them is not recommended because it would throw the database out
|
directly them is not recommended because it would throw the database out
|
||||||
of sync.
|
of sync.
|
||||||
|
|
||||||
Because **Mayan EDMS** components are as decoupled from each other as possible,
|
Because Mayan EDMS components are as decoupled from each other as possible,
|
||||||
storage in this case is decoupled and its behavior is controlled
|
storage in this case is decoupled and its behavior is controlled
|
||||||
not by the project but by the ``Storage`` module class. All the other
|
not by the project but by the ``Storage`` module class. All the other
|
||||||
modules don't make any assumptions about how the actual document files are
|
modules don't make any assumptions about how the actual document files are
|
||||||
stored. This way files can be saved locally, over the network or even across
|
stored. This way files can be saved locally, over the network or even across
|
||||||
the Internet and everything will still operate exactly the same.
|
the Internet and everything will still operate exactly the same.
|
||||||
|
|
||||||
|
The default file storage backend: ``storage.backends.filebasedstorage.FileBasedStorage``
|
||||||
|
is a simple backend that only supports paths and not IP addresses. In case you
|
||||||
|
are interested in using remote volumes to store documents (NFS, SAMBA), first
|
||||||
|
mount these volumes so that they appear as a directories to Mayan EDMS. For
|
||||||
|
direct support for remote volumes a custom backend would be needed such as those
|
||||||
|
provided by the Django Storages project (https://django-storages.readthedocs.org/en/latest/).
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Concepts
|
Concepts
|
||||||
========
|
========
|
||||||
|
|
||||||
Introductions to all the key parts of **Mayan EDMS** you'll need to know:
|
Introductions to all the key parts of Mayan EDMS you'll need to know:
|
||||||
|
|
||||||
.. toctree::
|
.. toctree::
|
||||||
:maxdepth: 1
|
:maxdepth: 1
|
||||||
@@ -15,8 +15,13 @@ Introductions to all the key parts of **Mayan EDMS** you'll need to know:
|
|||||||
checkouts
|
checkouts
|
||||||
versioning
|
versioning
|
||||||
signatures
|
signatures
|
||||||
|
ocr_backend
|
||||||
indexes
|
indexes
|
||||||
|
languages
|
||||||
smart_links
|
smart_links
|
||||||
tags
|
tags
|
||||||
|
mailing
|
||||||
|
settings
|
||||||
file_storage
|
file_storage
|
||||||
|
backups
|
||||||
screenshots
|
screenshots
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Example:
|
|||||||
- Metadata type: ``Product year``, associated as a required metadata for the document type ``Product sheet``.
|
- Metadata type: ``Product year``, associated as a required metadata for the document type ``Product sheet``.
|
||||||
|
|
||||||
- Index: ``Product sheets per year``, and associated to the document type ``Product sheet``.
|
- Index: ``Product sheets per year``, and associated to the document type ``Product sheet``.
|
||||||
- Index slug: ``product-sheets-per-year``. Slugs are internal unique identifiers that can be used by other **Mayan EDMS** modules to reference each index.
|
- Index slug: ``product-sheets-per-year``. Slugs are internal unique identifiers that can be used by other Mayan EDMS modules to reference each index.
|
||||||
- Index tree template as follows:
|
- Index tree template as follows:
|
||||||
|
|
||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|||||||
@@ -2,11 +2,11 @@
|
|||||||
Installation
|
Installation
|
||||||
============
|
============
|
||||||
|
|
||||||
**Mayan EDMS** should be deployed like any other Django_ project and
|
Mayan EDMS should be deployed like any other Django_ project and
|
||||||
preferably using virtualenv_.
|
preferably using virtualenv_.
|
||||||
|
|
||||||
Being a Django_ and a Python_ project, familiarity with these technologies is
|
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
|
recommended to better understand why Mayan EDMS does some of the things it
|
||||||
does.
|
does.
|
||||||
|
|
||||||
Bellow are the step needed for a test install.
|
Bellow are the step needed for a test install.
|
||||||
@@ -20,13 +20,13 @@ Ubuntu
|
|||||||
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
|
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
|
||||||
requirements using::
|
requirements using::
|
||||||
|
|
||||||
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y
|
sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr poppler-utils -y
|
||||||
|
|
||||||
|
|
||||||
Mac OSX
|
Mac OSX
|
||||||
-------
|
-------
|
||||||
|
|
||||||
**Mayan EDMS** is dependent on a number of binary packages and the recommended
|
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/>`_
|
way is to use a package manager such as `MacPorts <https://www.macports.org/>`_
|
||||||
or `Homebrew <http://brew.sh/>`_.
|
or `Homebrew <http://brew.sh/>`_.
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@ With MacPorts installed run the command:
|
|||||||
Set the Binary paths
|
Set the Binary paths
|
||||||
********************
|
********************
|
||||||
|
|
||||||
**Mayan EDMS** by default will look in /usr/bin/ for the binary files it needs
|
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/
|
so either you can symlink the binaries installed via MacPorts in /opt/local/bin/
|
||||||
to /usr/bin/ with ...
|
to /usr/bin/ with ...
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ With Homebrew installed run the command:
|
|||||||
Set the Binary paths
|
Set the Binary paths
|
||||||
********************
|
********************
|
||||||
|
|
||||||
**Mayan EDMS** by default will look in /usr/bin/ for the binary files it needs
|
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/
|
so either you can symlink the binaries installed via brew in /usr/local/bin/
|
||||||
to /usr/bin/ with ...
|
to /usr/bin/ with ...
|
||||||
|
|
||||||
@@ -99,8 +99,8 @@ Initialize a ``virtualenv`` to deploy the project:
|
|||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
pip install mayan-edms
|
pip install mayan-edms
|
||||||
|
|
||||||
By default **Mayan EDMS** will create a single file SQLite_ database, which makes
|
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
|
it very easy to start using Mayan EDMS. Populate the database with the
|
||||||
project's schema doing:
|
project's schema doing:
|
||||||
|
|
||||||
.. code-block:: bash
|
.. code-block:: bash
|
||||||
@@ -112,14 +112,22 @@ 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
|
correctly you should see the login screen and panel showing a randomly generated
|
||||||
admin password.
|
admin password.
|
||||||
|
|
||||||
Note: Background tasks and scheduled tasks will not run when using the test server.
|
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
|
Production use
|
||||||
==============
|
==============
|
||||||
|
|
||||||
After making sure everything is running correctly, stop the `runserver` command.
|
After making sure everything is running correctly, stop the ``runserver`` command.
|
||||||
Deploy **Mayan EDMS** using the webserver of your preference. For more information
|
Deploy Mayan EDMS using the webserver of your preference. For more information
|
||||||
on deployment instructions and examples, checkout Django's official documentation
|
on deployment instructions and examples, checkout Django's official documentation
|
||||||
on the topic https://docs.djangoproject.com/en/1.7/howto/deployment/
|
on the topic https://docs.djangoproject.com/en/1.7/howto/deployment/
|
||||||
For a simple production deployment setup follow the instructions in the
|
For a simple production deployment setup follow the instructions in the
|
||||||
|
|||||||
19
docs/topics/languages.rst
Normal file
19
docs/topics/languages.rst
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
=========
|
||||||
|
Languages
|
||||||
|
=========
|
||||||
|
|
||||||
|
The list of languages choices in the language dropdown used for documents is
|
||||||
|
based on the current ISO 639 list. This list can be quite extensive. To reduce
|
||||||
|
the number of languages available use the settings ``DOCUMENTS_LANGUAGE_CHOICES``,
|
||||||
|
and set it to a nested list of abbreviations + languages names like::
|
||||||
|
|
||||||
|
DOCUMENTS_LANGUAGE_CHOICES = (('eng', 'English'), ('spa', 'Spanish'))
|
||||||
|
|
||||||
|
|
||||||
|
The default language to appear on the dropdown can also be configured using::
|
||||||
|
|
||||||
|
DOCUMENTS_LANGUAGE = 'spa'
|
||||||
|
|
||||||
|
Use the correct ISO 639-3 language abbreviation (https://en.wikipedia.org/wiki/ISO_639)
|
||||||
|
as this code is used in several subsystems in Mayan EDMS such as the OCR app
|
||||||
|
to determine how to interpret the document.
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
License
|
License
|
||||||
=======
|
=======
|
||||||
|
|
||||||
**Mayan EDMS** is distributed under the `Apache 2.0 License`_.
|
Mayan EDMS is distributed under the `Apache 2.0 License`_.
|
||||||
The complete license terms are included below.
|
The complete license terms are included below.
|
||||||
|
|
||||||
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
|
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||||
|
|||||||
17
docs/topics/mailing.rst
Normal file
17
docs/topics/mailing.rst
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
=================
|
||||||
|
Mailing documents
|
||||||
|
=================
|
||||||
|
|
||||||
|
To be able to send documents via email from inside Mayan EDMS you need to add
|
||||||
|
and configure the following configuration variables in your
|
||||||
|
mayan/settings/local.py file::
|
||||||
|
|
||||||
|
EMAIL_HOST = 'smtp.gmail.com' # Or similar
|
||||||
|
EMAIL_PORT = 587
|
||||||
|
EMAIL_HOST_USER = '<your smtp username>'
|
||||||
|
EMAIL_HOST_PASSWORD = '<your smtp password>'
|
||||||
|
EMAIL_USE_TLS = True
|
||||||
|
|
||||||
|
"Mail is sent using the SMTP host and port specified in the EMAIL_HOST and EMAIL_PORT settings. The EMAIL_HOST_USER andEMAIL_HOST_PASSWORD settings, if set, are used to authenticate to the SMTP server, and the EMAIL_USE_TLS and EMAIL_USE_SSL settings control whether a secure connection is used."
|
||||||
|
|
||||||
|
For more details consult Django's documentation on the topic: https://docs.djangoproject.com/en/1.8/ref/settings/#email-host
|
||||||
15
docs/topics/ocr_backend.rst
Normal file
15
docs/topics/ocr_backend.rst
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
===========
|
||||||
|
OCR backend
|
||||||
|
===========
|
||||||
|
|
||||||
|
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract, but it can
|
||||||
|
use other engines. To support other engines a wrapper that subclasess the
|
||||||
|
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
||||||
|
expose the ``execute`` method. For an example of how the Tesseract backend
|
||||||
|
is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py``
|
||||||
|
|
||||||
|
Once you create you own backend, in your local.py settings add the option
|
||||||
|
OCR_BACKEND and point it to your new OCR backend class path.
|
||||||
|
|
||||||
|
The default value of OCR_BACKEND is ``"ocr.backends.tesseract.Tesseract"``
|
||||||
|
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
Permissions
|
Permissions
|
||||||
===========
|
===========
|
||||||
|
|
||||||
**Mayan EDMS** provides very fine control over which actions users can
|
Mayan EDMS provides very fine control over which actions users can
|
||||||
perform. Action control works by allowing ``roles``, that are composed of
|
perform. Action control works by allowing ``roles``, that are composed of
|
||||||
``groups`` of ``users`` to be granted a ``permission`` such that the holder of
|
``groups`` of ``users`` to be granted a ``permission`` such that the holder of
|
||||||
that permission can exercise it throughout the entire system.
|
that permission can exercise it throughout the entire system.
|
||||||
|
|||||||
102
docs/topics/roadmap.rst
Normal file
102
docs/topics/roadmap.rst
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
=======
|
||||||
|
Roadmap
|
||||||
|
=======
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
- Replace indexing and smart linking template language (use Jinja2 instead of Django's).
|
||||||
|
- Display/find documents by their current workflow state.
|
||||||
|
|
||||||
|
- Goals for version 3.0:
|
||||||
|
|
||||||
|
- Replace UI.
|
||||||
|
|
||||||
|
- General goals:
|
||||||
|
|
||||||
|
- Distribution:
|
||||||
|
|
||||||
|
- Debian packages. Limited success so far using https://github.com/astraw/stdeb.
|
||||||
|
|
||||||
|
- Downloads:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
- Notifications:
|
||||||
|
|
||||||
|
- Add support for subscribing to a document's events.
|
||||||
|
- Add support for subscribing to a document type events.
|
||||||
|
- Add support for subscribing specific events.
|
||||||
|
|
||||||
|
- OCR:
|
||||||
|
|
||||||
|
- 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.
|
||||||
|
|
||||||
|
- Python 3:
|
||||||
|
|
||||||
|
- Complete support for Python3.
|
||||||
|
- Find replacement for pdfminer (Python3 support blocker). Use pdfminer.six (#257).
|
||||||
|
|
||||||
|
- 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.
|
||||||
12
docs/topics/settings.rst
Normal file
12
docs/topics/settings.rst
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
========
|
||||||
|
Settings
|
||||||
|
========
|
||||||
|
|
||||||
|
When Mayan EDMS is initially installed a ``local.py`` file is created inside the
|
||||||
|
``/mayan/settings/`` folder. So if you installed Mayan EDMS according to the
|
||||||
|
instructions provided in this documentation your ``local.py`` should be located in
|
||||||
|
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.
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
Document signatures
|
Document signatures
|
||||||
===================
|
===================
|
||||||
|
|
||||||
**Mayan EDMS** supports two types of document signatures: embedded and
|
Mayan EDMS supports two types of document signatures: embedded and
|
||||||
detached signatures. When a document with an embedded signature is
|
detached signatures. When a document with an embedded signature is
|
||||||
uploaded, this signature is readily detected as part of the document
|
uploaded, this signature is readily detected as part of the document
|
||||||
inspection step. The status of the signature can be verified by accessing the
|
inspection step. The status of the signature can be verified by accessing the
|
||||||
|
|||||||
@@ -7,5 +7,16 @@ documents. For example: a scanning equipment may only produce landscape PDFs.
|
|||||||
In this case an useful transformation for that document source would be to
|
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
|
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
|
whenever a document is uploaded from that scanner it will appear in portrait
|
||||||
orientation. Transformations do not physically modify the document file but
|
orientation. In this case add a this transformation to the Mayan EDMS source
|
||||||
are just associated with the document's temporary graphical representation.
|
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, 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
|
||||||
|
file, they just modify the document's graphical representation.
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
Document versioning
|
Document versioning
|
||||||
===================
|
===================
|
||||||
|
|
||||||
**Mayan EDMS** has the ability to store different versions of the same
|
Mayan EDMS has the ability to store different versions of the same
|
||||||
document. A comment field is provided to allow users to summarize the new
|
document. A comment field is provided to allow users to summarize the new
|
||||||
version changes in comparison with the previous one. If a new version was
|
version changes in comparison with the previous one. If a new version was
|
||||||
uploaded by mistake or such new version is no longer necessary the option to
|
uploaded by mistake or such new version is no longer necessary the option to
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
__title__ = 'Mayan EDMS'
|
__title__ = 'Mayan EDMS'
|
||||||
__version__ = '2.0.2'
|
__version__ = '2.1.3'
|
||||||
__build__ = 0x020002
|
__build__ = 0x020103
|
||||||
__author__ = 'Roberto Rosario'
|
__author__ = 'Roberto Rosario'
|
||||||
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
||||||
__description__ = 'Free Open Source Electronic Document Management System'
|
__description__ = 'Free Open Source Electronic Document Management System'
|
||||||
__license__ = 'Apache 2.0'
|
__license__ = 'Apache 2.0'
|
||||||
__copyright__ = 'Copyright 2011-2015 Roberto Rosario'
|
__copyright__ = 'Copyright 2011-2016 Roberto Rosario'
|
||||||
|
|||||||
@@ -5,8 +5,7 @@ from django.utils.translation import ugettext_lazy as _
|
|||||||
from common import MayanAppConfig, menu_object, menu_sidebar
|
from common import MayanAppConfig, menu_object, menu_sidebar
|
||||||
from navigation import SourceColumn
|
from navigation import SourceColumn
|
||||||
|
|
||||||
from .links import link_acl_new, link_acl_delete, link_acl_permissions
|
from .links import link_acl_create, link_acl_delete, link_acl_permissions
|
||||||
from .models import AccessControlList
|
|
||||||
|
|
||||||
|
|
||||||
class ACLsApp(MayanAppConfig):
|
class ACLsApp(MayanAppConfig):
|
||||||
@@ -17,6 +16,8 @@ class ACLsApp(MayanAppConfig):
|
|||||||
def ready(self):
|
def ready(self):
|
||||||
super(ACLsApp, self).ready()
|
super(ACLsApp, self).ready()
|
||||||
|
|
||||||
|
AccessControlList = self.get_model('AccessControlList')
|
||||||
|
|
||||||
SourceColumn(
|
SourceColumn(
|
||||||
source=AccessControlList, label=_('Permissions'),
|
source=AccessControlList, label=_('Permissions'),
|
||||||
attribute='get_permission_titles'
|
attribute='get_permission_titles'
|
||||||
@@ -30,5 +31,5 @@ class ACLsApp(MayanAppConfig):
|
|||||||
sources=(AccessControlList,)
|
sources=(AccessControlList,)
|
||||||
)
|
)
|
||||||
menu_sidebar.bind_links(
|
menu_sidebar.bind_links(
|
||||||
links=(link_acl_new,), sources=('acls:acl_list',)
|
links=(link_acl_create,), sources=('acls:acl_list',)
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from __future__ import unicode_literals, absolute_import
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from permissions.models import StoredPermission
|
from django.apps import apps
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
@@ -20,15 +20,23 @@ class ModelPermission(object):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_for_instance(cls, instance):
|
def get_for_instance(cls, instance):
|
||||||
try:
|
StoredPermission = apps.get_model(
|
||||||
permissions = cls._registry[type(instance)]
|
app_label='permissions', model_name='StoredPermission'
|
||||||
except KeyError:
|
)
|
||||||
try:
|
|
||||||
permissions = cls._registry[cls._proxies[type(instance)]]
|
|
||||||
except KeyError:
|
|
||||||
permissions = ()
|
|
||||||
|
|
||||||
pks = [permission.stored_permission.pk for permission in permissions]
|
permissions = []
|
||||||
|
|
||||||
|
class_permissions = cls._registry.get(type(instance))
|
||||||
|
|
||||||
|
if class_permissions:
|
||||||
|
permissions.extend(class_permissions)
|
||||||
|
|
||||||
|
proxy = cls._proxies.get(type(instance))
|
||||||
|
|
||||||
|
if proxy:
|
||||||
|
permissions.extend(cls._registry.get(proxy))
|
||||||
|
|
||||||
|
pks = [permission.stored_permission.pk for permission in set(permissions)]
|
||||||
return StoredPermission.objects.filter(pk__in=pks)
|
return StoredPermission.objects.filter(pk__in=pks)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -23,18 +23,20 @@ def get_kwargs_factory(variable_name):
|
|||||||
|
|
||||||
|
|
||||||
link_acl_delete = Link(
|
link_acl_delete = Link(
|
||||||
permissions=(permission_acl_edit,), tags='dangerous', text=_('Delete'),
|
permissions=(permission_acl_edit,), permissions_related='content_object',
|
||||||
view='acls:acl_delete', args='resolved_object.pk'
|
tags='dangerous', text=_('Delete'), view='acls:acl_delete',
|
||||||
|
args='resolved_object.pk'
|
||||||
)
|
)
|
||||||
link_acl_list = Link(
|
link_acl_list = Link(
|
||||||
permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list',
|
permissions=(permission_acl_view,), text=_('ACLs'), view='acls:acl_list',
|
||||||
kwargs=get_kwargs_factory('resolved_object')
|
kwargs=get_kwargs_factory('resolved_object')
|
||||||
)
|
)
|
||||||
link_acl_new = Link(
|
link_acl_create = Link(
|
||||||
permissions=(permission_acl_edit,), text=_('New ACL'),
|
permissions=(permission_acl_edit,), text=_('New ACL'),
|
||||||
view='acls:acl_new', kwargs=get_kwargs_factory('resolved_object')
|
view='acls:acl_create', kwargs=get_kwargs_factory('resolved_object')
|
||||||
)
|
)
|
||||||
link_acl_permissions = Link(
|
link_acl_permissions = Link(
|
||||||
permissions=(permission_acl_edit,), text=_('Permissions'),
|
permissions=(permission_acl_edit,), permissions_related='content_object',
|
||||||
view='acls:acl_permissions', args='resolved_object.pk'
|
text=_('Permissions'), view='acls:acl_permissions',
|
||||||
|
args='resolved_object.pk'
|
||||||
)
|
)
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,34 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/ar/)\n"
|
"Language-Team: Arabic (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"ar/)\n"
|
||||||
|
"Language: ar\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ar\n"
|
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "الصلاحيات"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,13 +37,12 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Insufficient access."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,53 +54,52 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "لا شيء"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Access control lists"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Edit ACLs"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "View ACLs"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/language/bg/)\n"
|
"Language-Team: Bulgarian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/bg/)\n"
|
||||||
|
"Language: bg\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: bg\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Разрешения"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,13 +36,12 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Недостатъчен достъп."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,11 +53,11 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Няма"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Контролни списъци за достъп"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
@@ -68,39 +67,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,34 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/rosarior/mayan-edms/language/bs_BA/)\n"
|
"Language-Team: Bosnian (Bosnia and Herzegovina) (http://www.transifex.com/"
|
||||||
|
"rosarior/mayan-edms/language/bs_BA/)\n"
|
||||||
|
"Language: bs_BA\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: bs_BA\n"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Dozvole"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,13 +37,12 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Nedovoljne dozvole."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,53 +54,52 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Nijedno"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Liste kontrole pristupa (ACLs)"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Izmjeniti ACLs"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Pregledati ACLs"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/da/)\n"
|
"Language-Team: Danish (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"da/)\n"
|
||||||
|
"Language: da\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: da\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,11 +36,10 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -54,7 +53,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Ingen"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
@@ -68,39 +67,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,7 +1,7 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
# Berny <berny@bernhard-marx.de>, 2015
|
# Berny <berny@bernhard-marx.de>, 2015
|
||||||
@@ -9,26 +9,26 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 17:20+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Berny <berny@bernhard-marx.de>\n"
|
"Last-Translator: Mathias Behrle <mathiasb@m9s.biz>\n"
|
||||||
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-edms/language/de_DE/)\n"
|
"Language-Team: German (Germany) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/de_DE/)\n"
|
||||||
|
"Language: de_DE\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: de_DE\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "Zugriffsberechtigungen"
|
msgstr "Zugriffsberechtigungen"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Berechtigungen"
|
msgstr "Berechtigungen"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rolle"
|
msgstr "Rolle"
|
||||||
|
|
||||||
@@ -37,11 +37,10 @@ msgid "Delete"
|
|||||||
msgstr "Löschen"
|
msgstr "Löschen"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Neue Berechtigung"
|
msgstr "Neue Berechtigung"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr "Fehlende Berechtigung"
|
msgstr "Fehlende Berechtigung"
|
||||||
|
|
||||||
@@ -69,39 +68,39 @@ msgstr "Zugriffsberechtigungen bearbeiten"
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "Zugriffsberechtigungen anzeigen"
|
msgstr "Zugriffsberechtigungen anzeigen"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr "Zugriffsberechtigungen für %s"
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "Neue Zugriffsberechtigung für %s"
|
msgstr "Neue Zugriffsberechtigung für %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "ACL \"%s\" löschen"
|
msgstr "ACL \"%s\" löschen"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Zugriffsberechtigungen für %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr "Verfügbare Berechtigungen"
|
msgstr "Verfügbare Berechtigungen"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr "Erteilte Berechtigungen"
|
msgstr "Erteilte Berechtigungen"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr "Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
|
msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
"Deaktivierte Berechtigungen sind von einem übergeordneten Objekt vererbt."
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -196,8 +195,10 @@ msgstr "Berechtigungen von Rolle \"%(role)s\" für \"%(object)s\""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -7,7 +7,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
|
"PO-Revision-Date: 2012-02-02 18:20+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
|
"Language-Team: English (http://www.transifex.com/projects/p/mayan-edms/"
|
||||||
@@ -22,12 +22,12 @@ msgstr ""
|
|||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "ACLs"
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "permissions"
|
msgstr "permissions"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Roles"
|
#| msgid "Roles"
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
@@ -43,7 +43,7 @@ msgstr ""
|
|||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "View ACLs"
|
msgstr "View ACLs"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr "Insufficient access."
|
msgstr "Insufficient access."
|
||||||
|
|
||||||
@@ -73,41 +73,41 @@ msgstr "Edit ACLs"
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "View ACLs"
|
msgstr "View ACLs"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, fuzzy, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr "access control lists for: %s"
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, fuzzy, python-format
|
#, fuzzy, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "access control lists for: %s"
|
msgstr "access control lists for: %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, fuzzy, python-format
|
#, fuzzy, python-format
|
||||||
#| msgid "Default ACLs"
|
#| msgid "Default ACLs"
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr "Default ACLs"
|
msgstr "Default ACLs"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, fuzzy, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "access control lists for: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr "has permission"
|
msgstr "has permission"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr "has permission"
|
msgstr "has permission"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -6,13 +6,13 @@
|
|||||||
# Translators:
|
# Translators:
|
||||||
# jmcainzos <jmcainzos@vodafone.es>, 2015
|
# jmcainzos <jmcainzos@vodafone.es>, 2015
|
||||||
# Roberto Rosario, 2015
|
# Roberto Rosario, 2015
|
||||||
# Roberto Rosario, 2015
|
# Roberto Rosario, 2015-2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-05-09 01:48+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
|
"Language-Team: Spanish (http://www.transifex.com/rosarior/mayan-edms/language/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@@ -25,11 +25,11 @@ msgstr ""
|
|||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr "LCAs"
|
msgstr "LCAs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr "Permisos"
|
msgstr "Permisos"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
#| msgid "Roles"
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr "Rol"
|
msgstr "Rol"
|
||||||
@@ -43,7 +43,7 @@ msgstr "Borrar"
|
|||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr "Nueva LCA"
|
msgstr "Nueva LCA"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr "Acceso insuficiente."
|
msgstr "Acceso insuficiente."
|
||||||
|
|
||||||
@@ -71,39 +71,39 @@ msgstr "Editar LCAs"
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr "Ver LCAs"
|
msgstr "Ver LCAs"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr "Listas de control de acceso para: %s"
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr "Nueva lista de control de acceso para: %s"
|
msgstr "Nueva lista de control de acceso para: %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
#| msgid "Default ACLs"
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr "Borrar LCA: %s"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Listas de control de acceso para: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr "Permisos disponibles"
|
msgstr "Permisos disponibles"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr "Permisos otorgados"
|
msgstr "Permisos otorgados"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr "Los permisos inactivos se heredan de un objeto precedente."
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\""
|
msgstr "Permisos del rol \"%(role)s\" para \"%(object)s\""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr "Los permisos inactivos se heredan de un objeto precedente."
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@@ -1,106 +1,104 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/language/fa/)\n"
|
"Language-Team: Persian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/fa/)\n"
|
||||||
|
"Language: fa\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: fa\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "مجوزها"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "نقش"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "حذف"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "دسترسی ناکافی"
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "ورودی دسترسی"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "ورودیهای دسترسی"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "هیچکدام."
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "لیست کنترل دسترسی ها"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "ویرایش دسترسی ها"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "دیدن دسترسی ها"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "لیست کنترل دسترسی ها برای : %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,105 +1,104 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Christophe CHAUVET <christophe.chauvet@gmail.com>, 2015
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Christophe CHAUVET <christophe.chauvet@gmail.com>\n"
|
||||||
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/fr/)\n"
|
"Language-Team: French (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"fr/)\n"
|
||||||
|
"Language: fr\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: fr\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "Droits"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permissions"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "Rôle"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Suppression"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr "Nouveau droit"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "droit d'accès insuffisant."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "Entrée d'accès"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "Entrées d'accès"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Aucun"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Liste de contrôle des accès"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Editer les droits"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "voir les droits d'accès"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr "Nouvelle liste de contrôle d'accès pour: %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr "Supprimer le droit: %s"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Liste des contrôle d'accès pour: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr "Permissions disponibles"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr "Permissions autorisées"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr "Permission du rôle \"%(role)s\" pour \"%(object)s\"@"
|
||||||
|
|
||||||
|
#: 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"
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/language/hu/)\n"
|
"Language-Team: Hungarian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/hu/)\n"
|
||||||
|
"Language: hu\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: hu\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACL-ek"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,11 +36,10 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -54,7 +53,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Semmi"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
@@ -68,39 +67,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/language/id/)\n"
|
"Language-Team: Indonesian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/id/)\n"
|
||||||
|
"Language: id\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: id\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,11 +36,10 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -68,39 +67,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,106 +1,104 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/language/it/)\n"
|
"Language-Team: Italian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/it/)\n"
|
||||||
|
"Language: it\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: it\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permessi"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "Ruolo"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Cancella"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Accesso insufficiente."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "Voce di accesso"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "Voci di accesso"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Nessuna "
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Liste di controllo accessi"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Modifica ACL"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Visualizza ACL"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Lista dei permessi d'accesso per: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr "Autorizzazioni disponibili "
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr "Autorizzazioni concesse "
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,105 +1,104 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Justin Albstbstmeijer <justin@albstmeijer.nl>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Justin Albstbstmeijer <justin@albstmeijer.nl>\n"
|
||||||
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-edms/language/nl_NL/)\n"
|
"Language-Team: Dutch (Netherlands) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/nl_NL/)\n"
|
||||||
|
"Language: nl_NL\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: nl_NL\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "Authorisatielijsten"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permissies"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "Gebruikersrol"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Verwijder"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr "Nieuwe authorisatielijst"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Permissie is ontoereikend"
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "Authorisatie invoer"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "Authorisaties invoer"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Geen"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Authorisatielijsten"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Bewerk authorisatielijsten"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Bekijk authorisatielijsten"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr "Nieuwe authorisatielijsten voor: %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr "Verwijder authorisatielijst: %s"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Authorisatielijsten voor: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr "Beschikbare permissies"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr "Toegekende permissies"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr "Rol \"%(role)s\" permissies voor \"%(object)s\""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr "Uitgeschakelde permissies zijn geërfd van een parent object."
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,105 +1,105 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
|
# Wojciech Warczakowski <w.warczakowski@gmail.com>, 2016
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Wojciech Warczakowski <w.warczakowski@gmail.com>\n"
|
||||||
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/pl/)\n"
|
"Language-Team: Polish (http://www.transifex.com/rosarior/mayan-edms/language/"
|
||||||
|
"pl/)\n"
|
||||||
|
"Language: pl\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pl\n"
|
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
"|| n%100>=20) ? 1 : 2);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "Listy ACL"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Uprawnienia"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "Rola"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Usuń"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr "Nowa lista ACL"
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Niewystarczający dostęp."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "Zgłoszenie dostępu"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "Zgłoszenia dostępu"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Brak"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Listy ACL"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Edytuj listy ACL"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Przeglądaj listy ACL"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr "Nowe listy ACL dla: %s"
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr "Usuń listę ACL: %s"
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "Listy ACL dla: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr "Dostępne uprawnienia"
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr "Przyznane uprawnienia"
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr "Uprawnienia roli \"%(role)s\" dla obiektu \"%(object)s\""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr "Domyślne uprawnienia są dziedziczone z obiektu nadrzędnego."
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
@@ -195,8 +195,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,48 +1,47 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/language/pt/)\n"
|
"Language-Team: Portuguese (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/pt/)\n"
|
||||||
|
"Language: pt\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pt\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACL's"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permissões"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Eliminar"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Acesso insuficiente."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,53 +53,52 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Nenhum"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Listas de controlo de acesso"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Editar ACL's"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Ver ACL's"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,106 +1,104 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-edms/language/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazil) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/pt_BR/)\n"
|
||||||
|
"Language: pt_BR\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: pt_BR\n"
|
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permissões"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr "Regras"
|
||||||
|
|
||||||
#: links.py:26
|
#: links.py:26
|
||||||
msgid "Delete"
|
msgid "Delete"
|
||||||
msgstr ""
|
msgstr "Excluir"
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Acesso insuficiente."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "Acesso entrada"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "Entradas de acesso"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Nenhum"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Listas de controle de acesso"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Editar ACLs"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Visualizar ACLs"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr "listas de controle de acesso para: %s"
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,34 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-edms/language/ro_RO/)\n"
|
"Language-Team: Romanian (Romania) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/ro_RO/)\n"
|
||||||
|
"Language: ro_RO\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ro_RO\n"
|
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1));\n"
|
"2:1));\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACL-uri"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Permisiuni"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,13 +37,12 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Accesul insuficient."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,53 +54,52 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Nici unul"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Lista de control acces"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Editați ACL-uri"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Vezi ACL-uri"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,35 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/language/ru/)\n"
|
"Language-Team: Russian (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/ru/)\n"
|
||||||
|
"Language: ru\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: ru\n"
|
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n"
|
"%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n"
|
||||||
|
"%100>=11 && n%100<=14)? 2 : 3);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "Разрешения"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,13 +38,12 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "Недостаточный доступ."
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
@@ -54,53 +55,52 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Ни один"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "Списки контроля доступа"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "Редактировать списки ACL"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "Просмотр списков ACL"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +195,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,34 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-edms/language/sl_SI/)\n"
|
"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/rosarior/mayan-"
|
||||||
|
"edms/language/sl_SI/)\n"
|
||||||
|
"Language: sl_SI\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: sl_SI\n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
|
"%100==4 ? 2 : 3);\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,11 +37,10 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -54,7 +54,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "Brez"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
@@ -68,39 +68,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +194,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/mayan-edms/language/vi_VN/)\n"
|
"Language-Team: Vietnamese (Viet Nam) (http://www.transifex.com/rosarior/"
|
||||||
|
"mayan-edms/language/vi_VN/)\n"
|
||||||
|
"Language: vi_VN\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: vi_VN\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "ACLs"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,11 +36,10 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -54,7 +53,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "None"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
@@ -68,39 +67,38 @@ msgstr ""
|
|||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
Binary file not shown.
@@ -1,33 +1,33 @@
|
|||||||
# SOME DESCRIPTIVE TITLE.
|
# SOME DESCRIPTIVE TITLE.
|
||||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||||
# This file is distributed under the same license as the PACKAGE package.
|
# This file is distributed under the same license as the PACKAGE package.
|
||||||
#
|
#
|
||||||
# Translators:
|
# Translators:
|
||||||
# Translators:
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: Mayan EDMS\n"
|
"Project-Id-Version: Mayan EDMS\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2015-09-24 16:24-0400\n"
|
"POT-Creation-Date: 2016-04-27 14:09-0400\n"
|
||||||
"PO-Revision-Date: 2015-09-24 05:15+0000\n"
|
"PO-Revision-Date: 2016-03-21 21:03+0000\n"
|
||||||
"Last-Translator: Roberto Rosario\n"
|
"Last-Translator: Roberto Rosario\n"
|
||||||
"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/language/zh_CN/)\n"
|
"Language-Team: Chinese (China) (http://www.transifex.com/rosarior/mayan-edms/"
|
||||||
|
"language/zh_CN/)\n"
|
||||||
|
"Language: zh_CN\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Language: zh_CN\n"
|
|
||||||
"Plural-Forms: nplurals=1; plural=0;\n"
|
"Plural-Forms: nplurals=1; plural=0;\n"
|
||||||
|
|
||||||
#: apps.py:14 links.py:30
|
#: apps.py:14 links.py:30
|
||||||
msgid "ACLs"
|
msgid "ACLs"
|
||||||
msgstr ""
|
msgstr "访问控制列表"
|
||||||
|
|
||||||
#: apps.py:20 links.py:38 models.py:36
|
#: apps.py:22 links.py:38 models.py:36
|
||||||
msgid "Permissions"
|
msgid "Permissions"
|
||||||
msgstr ""
|
msgstr "权限"
|
||||||
|
|
||||||
#: apps.py:24 models.py:38
|
#: apps.py:26 models.py:38
|
||||||
#| msgid "Roles"
|
|
||||||
msgid "Role"
|
msgid "Role"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@@ -36,71 +36,69 @@ msgid "Delete"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: links.py:34
|
#: links.py:34
|
||||||
#| msgid "View ACLs"
|
|
||||||
msgid "New ACL"
|
msgid "New ACL"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: managers.py:72
|
#: managers.py:85
|
||||||
msgid "Insufficient access."
|
msgid "Insufficient access."
|
||||||
msgstr ""
|
msgstr "权限不足"
|
||||||
|
|
||||||
#: models.py:44
|
#: models.py:44
|
||||||
msgid "Access entry"
|
msgid "Access entry"
|
||||||
msgstr ""
|
msgstr "访问入口"
|
||||||
|
|
||||||
#: models.py:45
|
#: models.py:45
|
||||||
msgid "Access entries"
|
msgid "Access entries"
|
||||||
msgstr ""
|
msgstr "多个访问入口"
|
||||||
|
|
||||||
#: models.py:60
|
#: models.py:60
|
||||||
msgid "None"
|
msgid "None"
|
||||||
msgstr ""
|
msgstr "无"
|
||||||
|
|
||||||
#: permissions.py:7
|
#: permissions.py:7
|
||||||
msgid "Access control lists"
|
msgid "Access control lists"
|
||||||
msgstr ""
|
msgstr "访问控制列表"
|
||||||
|
|
||||||
#: permissions.py:10
|
#: permissions.py:10
|
||||||
msgid "Edit ACLs"
|
msgid "Edit ACLs"
|
||||||
msgstr ""
|
msgstr "编辑访问控制列表"
|
||||||
|
|
||||||
#: permissions.py:13
|
#: permissions.py:13
|
||||||
msgid "View ACLs"
|
msgid "View ACLs"
|
||||||
msgstr ""
|
msgstr "查看访问控制列表"
|
||||||
|
|
||||||
#: views.py:61
|
#: views.py:78
|
||||||
#, python-format
|
|
||||||
msgid "Access control lists for: %s"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:107
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "New access control lists for: %s"
|
msgid "New access control lists for: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:132
|
#: views.py:109
|
||||||
#, python-format
|
#, python-format
|
||||||
#| msgid "Default ACLs"
|
|
||||||
msgid "Delete ACL: %s"
|
msgid "Delete ACL: %s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:147
|
#: views.py:151
|
||||||
|
#, python-format
|
||||||
|
msgid "Access control lists for: %s"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:162
|
||||||
msgid "Available permissions"
|
msgid "Available permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:148
|
#: views.py:163
|
||||||
msgid "Granted permissions"
|
msgid "Granted permissions"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: views.py:187
|
#: views.py:222
|
||||||
msgid "Disabled permissions are inherited from a parent object."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: views.py:218
|
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
msgid "Role \"%(role)s\" permission's for \"%(object)s\""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: views.py:242
|
||||||
|
msgid "Disabled permissions are inherited from a parent object."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#~ msgid "New holder"
|
#~ msgid "New holder"
|
||||||
#~ msgstr "New holder"
|
#~ msgstr "New holder"
|
||||||
|
|
||||||
@@ -195,8 +193,10 @@ msgstr ""
|
|||||||
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
#~ msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||||
|
|
||||||
#~ msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ msgid ""
|
||||||
#~ msgstr "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||||
|
|
||||||
#~ msgid "Add new holder for: %s"
|
#~ msgid "Add new holder for: %s"
|
||||||
#~ msgstr "add new holder for: %s"
|
#~ msgstr "add new holder for: %s"
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ from django.db import models
|
|||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.utils.translation import ugettext
|
from django.utils.translation import ugettext
|
||||||
|
|
||||||
|
from common.utils import return_attrib
|
||||||
from permissions.models import StoredPermission
|
from permissions.models import StoredPermission
|
||||||
|
|
||||||
from .classes import ModelPermission
|
from .classes import ModelPermission
|
||||||
@@ -54,10 +55,11 @@ class AccessControlListManager(models.Manager):
|
|||||||
permission.stored_permission for permission in permissions
|
permission.stored_permission for permission in permissions
|
||||||
]
|
]
|
||||||
except TypeError:
|
except TypeError:
|
||||||
|
# Not a list of permissions, just one
|
||||||
stored_permissions = [permissions.stored_permission]
|
stored_permissions = [permissions.stored_permission]
|
||||||
|
|
||||||
if related:
|
if related:
|
||||||
obj = getattr(obj, related)
|
obj = return_attrib(obj, related)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
parent_accessor = ModelPermission.get_inheritance(obj._meta.model)
|
parent_accessor = ModelPermission.get_inheritance(obj._meta.model)
|
||||||
@@ -72,15 +74,14 @@ class AccessControlListManager(models.Manager):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
user_roles = []
|
user_roles = []
|
||||||
for group in user.groups.all():
|
for group in user.organization_groups.all():
|
||||||
for role in group.roles.all():
|
for role in group.roles.all():
|
||||||
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
if set(stored_permissions).intersection(set(self.get_inherited_permissions(role=role, obj=obj))):
|
||||||
return True
|
return True
|
||||||
|
|
||||||
user_roles.append(role)
|
user_roles.append(role)
|
||||||
|
|
||||||
# TODO: possible .exists() optimization
|
if not self.model.on_organization.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles).exists():
|
||||||
if not self.filter(content_type=ContentType.objects.get_for_model(obj), object_id=obj.pk, permissions__in=stored_permissions, role__in=user_roles):
|
|
||||||
raise PermissionDenied(ugettext('Insufficient access.'))
|
raise PermissionDenied(ugettext('Insufficient access.'))
|
||||||
|
|
||||||
def filter_by_access(self, permission, user, queryset):
|
def filter_by_access(self, permission, user, queryset):
|
||||||
@@ -88,7 +89,7 @@ class AccessControlListManager(models.Manager):
|
|||||||
return queryset
|
return queryset
|
||||||
|
|
||||||
user_roles = []
|
user_roles = []
|
||||||
for group in user.groups.all():
|
for group in user.organization_groups.all():
|
||||||
for role in group.roles.all():
|
for role in group.roles.all():
|
||||||
user_roles.append(role)
|
user_roles.append(role)
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import migrations, models
|
||||||
|
import organizations.shortcuts
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('organizations', '0002_add_data_default_organization'),
|
||||||
|
('acls', '0002_auto_20150703_0513'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AddField(
|
||||||
|
model_name='accesscontrollist',
|
||||||
|
name='organization',
|
||||||
|
field=models.ForeignKey(default=organizations.shortcuts.get_current_organization, to='organizations.Organization'),
|
||||||
|
),
|
||||||
|
]
|
||||||
@@ -2,12 +2,15 @@ from __future__ import absolute_import, unicode_literals
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
from django.contrib.contenttypes import generic
|
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.encoding import python_2_unicode_compatible
|
from django.utils.encoding import python_2_unicode_compatible
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
|
from organizations.models import Organization
|
||||||
|
from organizations.managers import CurrentOrganizationManager
|
||||||
|
from organizations.shortcuts import get_current_organization
|
||||||
from permissions.models import Role, StoredPermission
|
from permissions.models import Role, StoredPermission
|
||||||
|
|
||||||
from .managers import AccessControlListManager
|
from .managers import AccessControlListManager
|
||||||
@@ -26,10 +29,13 @@ class AccessControlList(models.Model):
|
|||||||
related_name='object_content_type'
|
related_name='object_content_type'
|
||||||
)
|
)
|
||||||
object_id = models.PositiveIntegerField()
|
object_id = models.PositiveIntegerField()
|
||||||
content_object = generic.GenericForeignKey(
|
content_object = GenericForeignKey(
|
||||||
ct_field='content_type',
|
ct_field='content_type',
|
||||||
fk_field='object_id',
|
fk_field='object_id',
|
||||||
)
|
)
|
||||||
|
organization = models.ForeignKey(
|
||||||
|
Organization, default=get_current_organization
|
||||||
|
)
|
||||||
# TODO: limit choices to the permissions valid for the content_object
|
# TODO: limit choices to the permissions valid for the content_object
|
||||||
permissions = models.ManyToManyField(
|
permissions = models.ManyToManyField(
|
||||||
StoredPermission, blank=True, related_name='acls',
|
StoredPermission, blank=True, related_name='acls',
|
||||||
@@ -38,6 +44,7 @@ class AccessControlList(models.Model):
|
|||||||
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
|
role = models.ForeignKey(Role, related_name='acls', verbose_name=_('Role'))
|
||||||
|
|
||||||
objects = AccessControlListManager()
|
objects = AccessControlListManager()
|
||||||
|
on_organization = CurrentOrganizationManager()
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('content_type', 'object_id', 'role')
|
unique_together = ('content_type', 'object_id', 'role')
|
||||||
@@ -45,7 +52,11 @@ class AccessControlList(models.Model):
|
|||||||
verbose_name_plural = _('Access entries')
|
verbose_name_plural = _('Access entries')
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return '{} <=> {}'.format(self.content_object, self.role)
|
return _('Permissions "%(permissions)s" to role "%(role)s" for "%(object)s"') % {
|
||||||
|
'permissions': self.get_permission_titles(),
|
||||||
|
'object': self.content_object,
|
||||||
|
'role': self.role
|
||||||
|
}
|
||||||
|
|
||||||
def get_inherited_permissions(self):
|
def get_inherited_permissions(self):
|
||||||
return AccessControlList.objects.get_inherited_permissions(
|
return AccessControlList.objects.get_inherited_permissions(
|
||||||
|
|||||||
103
mayan/apps/acls/tests/test_links.py
Normal file
103
mayan/apps/acls/tests/test_links.py
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
from django.core.urlresolvers import reverse
|
||||||
|
|
||||||
|
from documents.tests.test_views import GenericDocumentViewTestCase
|
||||||
|
from user_management.tests.literals import (
|
||||||
|
TEST_USER_PASSWORD, TEST_USER_USERNAME
|
||||||
|
)
|
||||||
|
|
||||||
|
from ..links import (
|
||||||
|
link_acl_delete, link_acl_list, link_acl_create, link_acl_permissions
|
||||||
|
)
|
||||||
|
from ..models import AccessControlList
|
||||||
|
from ..permissions import permission_acl_edit, permission_acl_view
|
||||||
|
|
||||||
|
|
||||||
|
class ACLsLinksTestCase(GenericDocumentViewTestCase):
|
||||||
|
def test_document_acl_create_link(self):
|
||||||
|
acl = AccessControlList.objects.create(
|
||||||
|
content_object=self.document, role=self.role
|
||||||
|
)
|
||||||
|
|
||||||
|
acl.permissions.add(permission_acl_edit.stored_permission)
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.add_test_view(test_object=self.document)
|
||||||
|
context = self.get_test_view()
|
||||||
|
resolved_link = link_acl_create.resolve(context=context)
|
||||||
|
|
||||||
|
self.assertNotEqual(resolved_link, None)
|
||||||
|
|
||||||
|
content_type = ContentType.objects.get_for_model(self.document)
|
||||||
|
kwargs = {
|
||||||
|
'app_label': content_type.app_label,
|
||||||
|
'model': content_type.model,
|
||||||
|
'object_id': self.document.pk
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
resolved_link.url, reverse('acls:acl_create', kwargs=kwargs)
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_document_acl_delete_link(self):
|
||||||
|
acl = AccessControlList.objects.create(
|
||||||
|
content_object=self.document, role=self.role
|
||||||
|
)
|
||||||
|
|
||||||
|
acl.permissions.add(permission_acl_edit.stored_permission)
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.add_test_view(test_object=acl)
|
||||||
|
context = self.get_test_view()
|
||||||
|
resolved_link = link_acl_delete.resolve(context=context)
|
||||||
|
|
||||||
|
self.assertNotEqual(resolved_link, None)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
resolved_link.url, reverse('acls:acl_delete', args=(acl.pk,))
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_document_acl_edit_link(self):
|
||||||
|
acl = AccessControlList.objects.create(
|
||||||
|
content_object=self.document, role=self.role
|
||||||
|
)
|
||||||
|
|
||||||
|
acl.permissions.add(permission_acl_edit.stored_permission)
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.add_test_view(test_object=acl)
|
||||||
|
context = self.get_test_view()
|
||||||
|
resolved_link = link_acl_permissions.resolve(context=context)
|
||||||
|
|
||||||
|
self.assertNotEqual(resolved_link, None)
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
resolved_link.url, reverse('acls:acl_permissions', args=(acl.pk,))
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_document_acl_list_link(self):
|
||||||
|
acl = AccessControlList.objects.create(
|
||||||
|
content_object=self.document, role=self.role
|
||||||
|
)
|
||||||
|
|
||||||
|
acl.permissions.add(permission_acl_view.stored_permission)
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.add_test_view(test_object=self.document)
|
||||||
|
context = self.get_test_view()
|
||||||
|
resolved_link = link_acl_list.resolve(context=context)
|
||||||
|
|
||||||
|
self.assertNotEqual(resolved_link, None)
|
||||||
|
|
||||||
|
content_type = ContentType.objects.get_for_model(self.document)
|
||||||
|
kwargs = {
|
||||||
|
'app_label': content_type.app_label,
|
||||||
|
'model': content_type.model,
|
||||||
|
'object_id': self.document.pk
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assertEqual(
|
||||||
|
resolved_link.url, reverse('acls:acl_list', kwargs=kwargs)
|
||||||
|
)
|
||||||
@@ -1,17 +1,17 @@
|
|||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.contrib.auth.models import Group
|
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.core.files import File
|
from django.test import override_settings
|
||||||
from django.test import TestCase, override_settings
|
|
||||||
|
|
||||||
from documents.models import Document, DocumentType
|
from documents.models import Document, DocumentType
|
||||||
from documents.permissions import permission_document_view
|
from documents.permissions import permission_document_view
|
||||||
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
from documents.tests import TEST_SMALL_DOCUMENT_PATH, TEST_DOCUMENT_TYPE
|
||||||
|
from organizations.tests.base import OrganizationTestCase
|
||||||
from permissions.classes import Permission
|
from permissions.classes import Permission
|
||||||
from permissions.models import Role
|
from permissions.models import Role
|
||||||
from permissions.tests.literals import TEST_ROLE_LABEL
|
from permissions.tests.literals import TEST_ROLE_LABEL
|
||||||
|
from user_management.models import MayanGroup
|
||||||
from user_management.tests.literals import TEST_USER_USERNAME, TEST_GROUP
|
from user_management.tests.literals import TEST_USER_USERNAME, TEST_GROUP
|
||||||
|
|
||||||
from ..models import AccessControlList
|
from ..models import AccessControlList
|
||||||
@@ -20,46 +20,50 @@ TEST_DOCUMENT_TYPE_2 = 'test document type 2'
|
|||||||
|
|
||||||
|
|
||||||
@override_settings(OCR_AUTO_OCR=False)
|
@override_settings(OCR_AUTO_OCR=False)
|
||||||
class PermissionTestCase(TestCase):
|
class PermissionTestCase(OrganizationTestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.document_type_1 = DocumentType.objects.create(
|
super(PermissionTestCase, self).setUp()
|
||||||
|
|
||||||
|
self.document_type_1 = DocumentType.on_organization.create(
|
||||||
label=TEST_DOCUMENT_TYPE
|
label=TEST_DOCUMENT_TYPE
|
||||||
)
|
)
|
||||||
|
|
||||||
self.document_type_2 = DocumentType.objects.create(
|
self.document_type_2 = DocumentType.on_organization.create(
|
||||||
label=TEST_DOCUMENT_TYPE_2
|
label=TEST_DOCUMENT_TYPE_2
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||||
self.document_1 = self.document_type_1.new_document(
|
self.document_1 = self.document_type_1.new_document(
|
||||||
file_object=File(file_object)
|
file_object=file_object
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||||
self.document_2 = self.document_type_1.new_document(
|
self.document_2 = self.document_type_1.new_document(
|
||||||
file_object=File(file_object)
|
file_object=file_object
|
||||||
)
|
)
|
||||||
|
|
||||||
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
with open(TEST_SMALL_DOCUMENT_PATH) as file_object:
|
||||||
self.document_3 = self.document_type_2.new_document(
|
self.document_3 = self.document_type_2.new_document(
|
||||||
file_object=File(file_object)
|
file_object=file_object
|
||||||
)
|
)
|
||||||
|
|
||||||
self.user = get_user_model().objects.create(
|
self.user = get_user_model().on_organization.create(
|
||||||
username=TEST_USER_USERNAME
|
username=TEST_USER_USERNAME
|
||||||
)
|
)
|
||||||
self.group = Group.objects.create(name=TEST_GROUP)
|
self.group = MayanGroup.on_organization.create(name=TEST_GROUP)
|
||||||
self.role = Role.objects.create(label=TEST_ROLE_LABEL)
|
self.role = Role.on_organization.create(label=TEST_ROLE_LABEL)
|
||||||
|
|
||||||
self.group.user_set.add(self.user)
|
self.group.users.add(self.user)
|
||||||
self.role.groups.add(self.group)
|
self.role.organization_groups.add(self.group)
|
||||||
|
|
||||||
Permission.invalidate_cache()
|
Permission.invalidate_cache()
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
for document_type in DocumentType.objects.all():
|
for document_type in DocumentType.on_organization.all():
|
||||||
document_type.delete()
|
document_type.delete()
|
||||||
|
|
||||||
|
super(PermissionTestCase, self).tearDown()
|
||||||
|
|
||||||
def test_check_access_without_permissions(self):
|
def test_check_access_without_permissions(self):
|
||||||
with self.assertRaises(PermissionDenied):
|
with self.assertRaises(PermissionDenied):
|
||||||
AccessControlList.objects.check_access(
|
AccessControlList.objects.check_access(
|
||||||
@@ -76,7 +80,7 @@ class PermissionTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_check_access_with_acl(self):
|
def test_check_access_with_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_1, role=self.role
|
content_object=self.document_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -92,7 +96,7 @@ class PermissionTestCase(TestCase):
|
|||||||
def test_filtering_with_permissions(self):
|
def test_filtering_with_permissions(self):
|
||||||
self.role.permissions.add(permission_document_view.stored_permission)
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_1, role=self.role
|
content_object=self.document_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -105,7 +109,7 @@ class PermissionTestCase(TestCase):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_check_access_with_inherited_acl(self):
|
def test_check_access_with_inherited_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -119,12 +123,12 @@ class PermissionTestCase(TestCase):
|
|||||||
self.fail('PermissionDenied exception was not expected.')
|
self.fail('PermissionDenied exception was not expected.')
|
||||||
|
|
||||||
def test_check_access_with_inherited_acl_and_local_acl(self):
|
def test_check_access_with_inherited_acl_and_local_acl(self):
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_3, role=self.role
|
content_object=self.document_3, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -140,7 +144,7 @@ class PermissionTestCase(TestCase):
|
|||||||
def test_filtering_with_inherited_permissions(self):
|
def test_filtering_with_inherited_permissions(self):
|
||||||
self.role.permissions.add(permission_document_view.stored_permission)
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
@@ -156,12 +160,12 @@ class PermissionTestCase(TestCase):
|
|||||||
def test_filtering_with_inherited_permissions_and_local_acl(self):
|
def test_filtering_with_inherited_permissions_and_local_acl(self):
|
||||||
self.role.permissions.add(permission_document_view.stored_permission)
|
self.role.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_type_1, role=self.role
|
content_object=self.document_type_1, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|
||||||
acl = AccessControlList.objects.create(
|
acl = AccessControlList.on_organization.create(
|
||||||
content_object=self.document_3, role=self.role
|
content_object=self.document_3, role=self.role
|
||||||
)
|
)
|
||||||
acl.permissions.add(permission_document_view.stored_permission)
|
acl.permissions.add(permission_document_view.stored_permission)
|
||||||
|
|||||||
111
mayan/apps/acls/tests/test_views.py
Normal file
111
mayan/apps/acls/tests/test_views.py
Normal file
@@ -0,0 +1,111 @@
|
|||||||
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
|
||||||
|
from django.contrib.contenttypes.models import ContentType
|
||||||
|
|
||||||
|
from documents.tests.test_views import GenericDocumentViewTestCase
|
||||||
|
from user_management.tests import (
|
||||||
|
TEST_USER_USERNAME, TEST_USER_PASSWORD
|
||||||
|
)
|
||||||
|
|
||||||
|
from ..models import AccessControlList
|
||||||
|
from ..permissions import permission_acl_edit
|
||||||
|
|
||||||
|
|
||||||
|
class AccessControlListViewTestCase(GenericDocumentViewTestCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(AccessControlListViewTestCase, self).setUp()
|
||||||
|
|
||||||
|
content_type = ContentType.objects.get_for_model(self.document)
|
||||||
|
|
||||||
|
self.view_arguments = {
|
||||||
|
'app_label': content_type.app_label,
|
||||||
|
'model': content_type.model,
|
||||||
|
'object_id': self.document.pk
|
||||||
|
}
|
||||||
|
|
||||||
|
def test_acl_create_view_no_permission(self):
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
response = self.post(
|
||||||
|
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
||||||
|
'role': self.role.pk
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertEquals(response.status_code, 403)
|
||||||
|
self.assertEqual(AccessControlList.on_organization.count(), 0)
|
||||||
|
|
||||||
|
def test_acl_create_view_with_permission(self):
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.role.permissions.add(
|
||||||
|
permission_acl_edit.stored_permission
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.post(
|
||||||
|
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
||||||
|
'role': self.role.pk
|
||||||
|
}, follow=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertContains(response, text='created', status_code=200)
|
||||||
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
|
|
||||||
|
def test_acl_create_duplicate_view_with_permission(self):
|
||||||
|
"""
|
||||||
|
Test creating a duplicate ACL entry: same object & role
|
||||||
|
Result: Should redirect to existing ACL for object + role combination
|
||||||
|
"""
|
||||||
|
|
||||||
|
acl = AccessControlList.on_organization.create(
|
||||||
|
content_object=self.document, role=self.role
|
||||||
|
)
|
||||||
|
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.role.permissions.add(
|
||||||
|
permission_acl_edit.stored_permission
|
||||||
|
)
|
||||||
|
|
||||||
|
response = self.post(
|
||||||
|
viewname='acls:acl_create', kwargs=self.view_arguments, data={
|
||||||
|
'role': self.role.pk
|
||||||
|
}, follow=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertContains(
|
||||||
|
response, text='vailable permissions', status_code=200
|
||||||
|
)
|
||||||
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
|
self.assertEqual(AccessControlList.on_organization.first().pk, acl.pk)
|
||||||
|
|
||||||
|
def test_orphan_acl_create_view_with_permission(self):
|
||||||
|
"""
|
||||||
|
Test creating an ACL entry for an object with no model permissions.
|
||||||
|
Result: Should display a blank permissions list (not optgroup)
|
||||||
|
"""
|
||||||
|
|
||||||
|
self.login(username=TEST_USER_USERNAME, password=TEST_USER_PASSWORD)
|
||||||
|
|
||||||
|
self.role.permissions.add(
|
||||||
|
permission_acl_edit.stored_permission
|
||||||
|
)
|
||||||
|
|
||||||
|
recent_entry = self.document.add_as_recent_document_for_user(self.user)
|
||||||
|
|
||||||
|
content_type = ContentType.objects.get_for_model(recent_entry)
|
||||||
|
|
||||||
|
view_arguments = {
|
||||||
|
'app_label': content_type.app_label,
|
||||||
|
'model': content_type.model,
|
||||||
|
'object_id': recent_entry.pk
|
||||||
|
}
|
||||||
|
|
||||||
|
response = self.post(
|
||||||
|
viewname='acls:acl_create', kwargs=view_arguments, data={
|
||||||
|
'role': self.role.pk
|
||||||
|
}, follow=True
|
||||||
|
)
|
||||||
|
|
||||||
|
self.assertNotContains(response, text='optgroup', status_code=200)
|
||||||
|
self.assertEqual(AccessControlList.on_organization.count(), 1)
|
||||||
@@ -9,8 +9,8 @@ from .views import (
|
|||||||
urlpatterns = patterns(
|
urlpatterns = patterns(
|
||||||
'acls.views',
|
'acls.views',
|
||||||
url(
|
url(
|
||||||
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/new/$',
|
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/create/$',
|
||||||
ACLCreateView.as_view(), name='acl_new'
|
ACLCreateView.as_view(), name='acl_create'
|
||||||
),
|
),
|
||||||
url(
|
url(
|
||||||
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/list/$',
|
r'^(?P<app_label>[-\w]+)/(?P<model>[-\w]+)/(?P<object_id>\d+)/list/$',
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import logging
|
|||||||
from django.contrib.contenttypes.models import ContentType
|
from django.contrib.contenttypes.models import ContentType
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import Http404
|
from django.http import Http404, HttpResponseRedirect
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
@@ -24,7 +24,9 @@ from .permissions import permission_acl_edit, permission_acl_view
|
|||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ACLListView(SingleObjectListView):
|
class ACLCreateView(SingleObjectCreateView):
|
||||||
|
fields = ('role',)
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
self.content_type = get_object_or_404(
|
self.content_type = get_object_or_404(
|
||||||
ContentType, app_label=self.kwargs['app_label'],
|
ContentType, app_label=self.kwargs['app_label'],
|
||||||
@@ -38,47 +40,6 @@ class ACLListView(SingleObjectListView):
|
|||||||
except self.content_type.model_class().DoesNotExist:
|
except self.content_type.model_class().DoesNotExist:
|
||||||
raise Http404
|
raise Http404
|
||||||
|
|
||||||
try:
|
|
||||||
Permission.check_permissions(
|
|
||||||
request.user, permissions=(permission_acl_view,)
|
|
||||||
)
|
|
||||||
except PermissionDenied:
|
|
||||||
AccessControlList.objects.check_access(
|
|
||||||
permission_acl_view, request.user, self.content_object
|
|
||||||
)
|
|
||||||
|
|
||||||
return super(ACLListView, self).dispatch(request, *args, **kwargs)
|
|
||||||
|
|
||||||
def get_queryset(self):
|
|
||||||
return AccessControlList.objects.filter(
|
|
||||||
content_type=self.content_type, object_id=self.content_object.pk
|
|
||||||
)
|
|
||||||
|
|
||||||
def get_extra_context(self):
|
|
||||||
return {
|
|
||||||
'hide_object': True,
|
|
||||||
'object': self.content_object,
|
|
||||||
'title': _('Access control lists for: %s' % self.content_object),
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class ACLCreateView(SingleObjectCreateView):
|
|
||||||
fields = ('role',)
|
|
||||||
model = AccessControlList
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
|
||||||
content_type = get_object_or_404(
|
|
||||||
ContentType, app_label=self.kwargs['app_label'],
|
|
||||||
model=self.kwargs['model']
|
|
||||||
)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.content_object = content_type.get_object_for_this_type(
|
|
||||||
pk=self.kwargs['object_id']
|
|
||||||
)
|
|
||||||
except content_type.model_class().DoesNotExist:
|
|
||||||
raise Http404
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
Permission.check_permissions(
|
Permission.check_permissions(
|
||||||
request.user, permissions=(permission_acl_edit,)
|
request.user, permissions=(permission_acl_edit,)
|
||||||
@@ -91,14 +52,18 @@ class ACLCreateView(SingleObjectCreateView):
|
|||||||
return super(ACLCreateView, self).dispatch(request, *args, **kwargs)
|
return super(ACLCreateView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
self.instance = form.save(commit=False)
|
try:
|
||||||
self.instance.content_object = self.content_object
|
acl = AccessControlList.on_organization.get(
|
||||||
self.instance.save()
|
content_type=self.content_type,
|
||||||
|
object_id=self.content_object.pk,
|
||||||
return super(ACLCreateView, self).form_valid(form)
|
role=form.cleaned_data['role']
|
||||||
|
)
|
||||||
def get_success_url(self):
|
except AccessControlList.DoesNotExist:
|
||||||
return reverse('acls:acl_permissions', args=(self.instance.pk,))
|
return super(ACLCreateView, self).form_valid(form)
|
||||||
|
else:
|
||||||
|
return HttpResponseRedirect(
|
||||||
|
reverse('acls:acl_permissions', args=(acl.pk,))
|
||||||
|
)
|
||||||
|
|
||||||
def get_extra_context(self):
|
def get_extra_context(self):
|
||||||
return {
|
return {
|
||||||
@@ -108,10 +73,22 @@ class ACLCreateView(SingleObjectCreateView):
|
|||||||
) % self.content_object
|
) % self.content_object
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def get_instance_extra_data(self):
|
||||||
|
return {
|
||||||
|
'content_object': self.content_object
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return AccessControlList.on_organization.all()
|
||||||
|
|
||||||
|
def get_success_url(self):
|
||||||
|
if self.object.pk:
|
||||||
|
return reverse('acls:acl_permissions', args=(self.object.pk,))
|
||||||
|
else:
|
||||||
|
return super(ACLCreateView, self).get_success_url()
|
||||||
|
|
||||||
|
|
||||||
class ACLDeleteView(SingleObjectDeleteView):
|
class ACLDeleteView(SingleObjectDeleteView):
|
||||||
model = AccessControlList
|
|
||||||
|
|
||||||
def dispatch(self, request, *args, **kwargs):
|
def dispatch(self, request, *args, **kwargs):
|
||||||
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
acl = get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||||
|
|
||||||
@@ -141,6 +118,47 @@ class ACLDeleteView(SingleObjectDeleteView):
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return AccessControlList.on_organization.all()
|
||||||
|
|
||||||
|
|
||||||
|
class ACLListView(SingleObjectListView):
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
self.content_type = get_object_or_404(
|
||||||
|
ContentType, app_label=self.kwargs['app_label'],
|
||||||
|
model=self.kwargs['model']
|
||||||
|
)
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.content_object = self.content_type.get_object_for_this_type(
|
||||||
|
pk=self.kwargs['object_id']
|
||||||
|
)
|
||||||
|
except self.content_type.model_class().DoesNotExist:
|
||||||
|
raise Http404
|
||||||
|
|
||||||
|
try:
|
||||||
|
Permission.check_permissions(
|
||||||
|
request.user, permissions=(permission_acl_view,)
|
||||||
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permission_acl_view, request.user, self.content_object
|
||||||
|
)
|
||||||
|
|
||||||
|
return super(ACLListView, self).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
|
def get_extra_context(self):
|
||||||
|
return {
|
||||||
|
'hide_object': True,
|
||||||
|
'object': self.content_object,
|
||||||
|
'title': _('Access control lists for: %s' % self.content_object),
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
return AccessControlList.on_organization.filter(
|
||||||
|
content_type=self.content_type, object_id=self.content_object.pk
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ACLPermissionsView(AssignRemoveView):
|
class ACLPermissionsView(AssignRemoveView):
|
||||||
grouped = True
|
grouped = True
|
||||||
@@ -181,17 +199,6 @@ class ACLPermissionsView(AssignRemoveView):
|
|||||||
ACLPermissionsView, self
|
ACLPermissionsView, self
|
||||||
).dispatch(request, *args, **kwargs)
|
).dispatch(request, *args, **kwargs)
|
||||||
|
|
||||||
def get_right_list_help_text(self):
|
|
||||||
if self.get_object().get_inherited_permissions():
|
|
||||||
return _(
|
|
||||||
'Disabled permissions are inherited from a parent object.'
|
|
||||||
)
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
def get_object(self):
|
|
||||||
return get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
|
||||||
|
|
||||||
def get_available_list(self):
|
def get_available_list(self):
|
||||||
return ModelPermission.get_for_instance(
|
return ModelPermission.get_for_instance(
|
||||||
instance=self.get_object().content_object
|
instance=self.get_object().content_object
|
||||||
@@ -229,12 +236,23 @@ class ACLPermissionsView(AssignRemoveView):
|
|||||||
merged_pks = self.get_object().permissions.values_list('pk', flat=True) | self.get_object().get_inherited_permissions().values_list('pk', flat=True)
|
merged_pks = self.get_object().permissions.values_list('pk', flat=True) | self.get_object().get_inherited_permissions().values_list('pk', flat=True)
|
||||||
return StoredPermission.objects.filter(pk__in=merged_pks)
|
return StoredPermission.objects.filter(pk__in=merged_pks)
|
||||||
|
|
||||||
|
def get_object(self):
|
||||||
|
return get_object_or_404(AccessControlList, pk=self.kwargs['pk'])
|
||||||
|
|
||||||
|
def get_right_list_help_text(self):
|
||||||
|
if self.get_object().get_inherited_permissions():
|
||||||
|
return _(
|
||||||
|
'Disabled permissions are inherited from a parent object.'
|
||||||
|
)
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
def left_list(self):
|
def left_list(self):
|
||||||
return ACLPermissionsView.generate_choices(self.get_available_list())
|
return ACLPermissionsView.generate_choices(self.get_available_list())
|
||||||
|
|
||||||
def right_list(self):
|
|
||||||
return ACLPermissionsView.generate_choices(self.get_granted_list())
|
|
||||||
|
|
||||||
def remove(self, item):
|
def remove(self, item):
|
||||||
permission = get_object_or_404(StoredPermission, pk=item)
|
permission = get_object_or_404(StoredPermission, pk=item)
|
||||||
self.get_object().permissions.remove(permission)
|
self.get_object().permissions.remove(permission)
|
||||||
|
|
||||||
|
def right_list(self):
|
||||||
|
return ACLPermissionsView.generate_choices(self.get_granted_list())
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user