Compare commits
1524 Commits
feature/to
...
features/f
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
757cf3d869 | ||
|
|
5ea0b02964 | ||
|
|
3346a88f81 | ||
|
|
56c8e2741b | ||
|
|
6a2e039a83 | ||
|
|
d4a7592467 | ||
|
|
9edb9fff0a | ||
|
|
07e7b55686 | ||
|
|
268fce138d | ||
|
|
916ba688b1 | ||
|
|
4baeb6ce7e | ||
|
|
fbe0e14b82 | ||
|
|
410e6a4a55 | ||
|
|
38a34cc98c | ||
|
|
90393e043e | ||
|
|
9e3e0d9e64 | ||
|
|
818cf97d5b | ||
|
|
f649a77b2f | ||
|
|
2ee2b2f5e0 | ||
|
|
5619a6014e | ||
|
|
4851c9f6d7 | ||
|
|
f002d8b38e | ||
|
|
484f09db75 | ||
|
|
5b45769423 | ||
|
|
54c007b149 | ||
|
|
3b518998c9 | ||
|
|
0a21748b0c | ||
|
|
edd6f4eb76 | ||
|
|
f8258c078a | ||
|
|
b2cefa79a5 | ||
|
|
ab5028887c | ||
|
|
4a03e2a47f | ||
|
|
c9809becba | ||
|
|
a1fa6aadfb | ||
|
|
c3991c3798 | ||
|
|
66ac9eebee | ||
|
|
4f9c2314fa | ||
|
|
b2ddf0c6bb | ||
|
|
ebc7886c81 | ||
|
|
fbbc6bace9 | ||
|
|
811c8075ca | ||
|
|
de7a7448ae | ||
|
|
7d725f8170 | ||
|
|
8e32c5adae | ||
|
|
7339eb2a09 | ||
|
|
e5daea674f | ||
|
|
170434e71b | ||
|
|
54acf0f254 | ||
|
|
76f320faf5 | ||
|
|
21e1a3c4ad | ||
|
|
0a9c01cb0f | ||
|
|
a5ab9f3ea6 | ||
|
|
8586bd1909 | ||
|
|
62f49e390a | ||
|
|
dfb368e6dc | ||
|
|
7971b081a9 | ||
|
|
290dc847c4 | ||
|
|
1982c9920f | ||
|
|
1ae1804f5d | ||
|
|
e68928901e | ||
|
|
febc7cf4f7 | ||
|
|
ab97c95bab | ||
|
|
b28bdf5475 | ||
|
|
f041ae9966 | ||
|
|
2e632f658d | ||
|
|
6ef9b04d57 | ||
|
|
b687a7f519 | ||
|
|
ebf8cbdd62 | ||
|
|
d338da5491 | ||
|
|
2e2797bba5 | ||
|
|
2b43aa8d40 | ||
|
|
c59f35225c | ||
|
|
3a623ee416 | ||
|
|
4e5c513529 | ||
|
|
8b073c3151 | ||
|
|
60c0c131ae | ||
|
|
f561eb2f57 | ||
|
|
a0b4d38d19 | ||
|
|
a69e74ac90 | ||
|
|
d41fe1b701 | ||
|
|
2f998ab4ce | ||
|
|
92e12f3ec5 | ||
|
|
78b0abf50c | ||
|
|
d003818cae | ||
|
|
98157b7083 | ||
|
|
d4130cd393 | ||
|
|
f3a849c031 | ||
|
|
a38426d823 | ||
|
|
501acbfb0f | ||
|
|
082981e25f | ||
|
|
03f128ff23 | ||
|
|
f76b9e4f3f | ||
|
|
1acc352801 | ||
|
|
17030472f1 | ||
|
|
c7e9a4dc99 | ||
|
|
0d53e74238 | ||
|
|
4617afafb2 | ||
|
|
2d819e64c9 | ||
|
|
545366a477 | ||
|
|
74ec939779 | ||
|
|
aa94247c3d | ||
|
|
c3594651d2 | ||
|
|
578c1b2f07 | ||
|
|
7cf8cd2f28 | ||
|
|
f6696771f9 | ||
|
|
eb79ebf6bb | ||
|
|
e89367f827 | ||
|
|
40035ea39a | ||
|
|
8aa97c7fd7 | ||
|
|
45ca7ea480 | ||
|
|
bbf3ede2e6 | ||
|
|
c1612c8182 | ||
|
|
76b75af1c2 | ||
|
|
680a7b6ae1 | ||
|
|
f73179a600 | ||
|
|
cbd51c5f26 | ||
|
|
fffcf4d3da | ||
|
|
72cdfe58c5 | ||
|
|
f55979b1a6 | ||
|
|
f5aaff9ab1 | ||
|
|
e6ccfb4b59 | ||
|
|
f6afec031d | ||
|
|
33a2ca97ec | ||
|
|
7b69c2f76e | ||
|
|
6cc23fbfd0 | ||
|
|
648fcc32a9 | ||
|
|
de581cde5f | ||
|
|
1beb44d85d | ||
|
|
e5c1aa5606 | ||
|
|
0b68463ed5 | ||
|
|
d533e48f46 | ||
|
|
8e5b60e1c0 | ||
|
|
28114264c1 | ||
|
|
6330e40036 | ||
|
|
f69fcbcc82 | ||
|
|
5e4518211f | ||
|
|
ddbb0d496a | ||
|
|
e1e2454e2a | ||
|
|
264e90a7d7 | ||
|
|
4507f75711 | ||
|
|
a0d2000419 | ||
|
|
ebc68d3c36 | ||
|
|
7a4a4818fe | ||
|
|
b6e7a462b0 | ||
|
|
0d6409512a | ||
|
|
988b4dcb37 | ||
|
|
9e2891216b | ||
|
|
0e6f34d0ee | ||
|
|
00d4406b1f | ||
|
|
4a7540f8b2 | ||
|
|
95a1df8072 | ||
|
|
7181852c2d | ||
|
|
547ffe0e0d | ||
|
|
5e2a1e997b | ||
|
|
ca3a48f92d | ||
|
|
251b4bac40 | ||
|
|
ce70701b7e | ||
|
|
3c0316dae6 | ||
|
|
030b7d5d91 | ||
|
|
99b180f269 | ||
|
|
c9b5d2794e | ||
|
|
d7db8468ac | ||
|
|
3d240a7f42 | ||
|
|
9c92b9a59e | ||
|
|
b67bfa8ec4 | ||
|
|
8e731d6280 | ||
|
|
d271f1503d | ||
|
|
5f89d228dc | ||
|
|
73546bd99f | ||
|
|
8320ca814c | ||
|
|
48a7a25212 | ||
|
|
a3ea854e73 | ||
|
|
bd9c75cdaa | ||
|
|
ea3b513ae3 | ||
|
|
11e13cea1d | ||
|
|
3faefd653c | ||
|
|
80a9b9ef9d | ||
|
|
8084b59e6e | ||
|
|
8b2f5eaf69 | ||
|
|
98e51079a3 | ||
|
|
a2e718361e | ||
|
|
e042c5275b | ||
|
|
b4227a608b | ||
|
|
fda0dd4eaf | ||
|
|
66d5016407 | ||
|
|
77d897ab1f | ||
|
|
68a4b72c37 | ||
|
|
8b447a7050 | ||
|
|
e36eb5421d | ||
|
|
d0a452d838 | ||
|
|
825af3152f | ||
|
|
efff750f06 | ||
|
|
ae595dd359 | ||
|
|
136434c973 | ||
|
|
b1e464f52f | ||
|
|
6a8b062be7 | ||
|
|
2e670254e5 | ||
|
|
d2ab2ec91f | ||
|
|
cfe623e093 | ||
|
|
aee3645c7a | ||
|
|
bd1e8d9e31 | ||
|
|
713e644599 | ||
|
|
a544924c08 | ||
|
|
ae8a444e42 | ||
|
|
e01017ffe5 | ||
|
|
85deaf3327 | ||
|
|
f057d7f81f | ||
|
|
e916e73ead | ||
|
|
5c07c61b69 | ||
|
|
395c360784 | ||
|
|
959cdc56e5 | ||
|
|
7a4c9f3ad2 | ||
|
|
5a736d83bc | ||
|
|
33056dec04 | ||
|
|
dda0f0d2af | ||
|
|
8374a66011 | ||
|
|
873055c4d5 | ||
|
|
4963a9689f | ||
|
|
1a91640047 | ||
|
|
2e9b5454a7 | ||
|
|
6069c67342 | ||
|
|
95123e0078 | ||
|
|
8bbd83ea76 | ||
|
|
4f92bde7d7 | ||
|
|
041464fc1c | ||
|
|
086a1e5168 | ||
|
|
32cf0a0595 | ||
|
|
e5aa4553be | ||
|
|
dcde4b1968 | ||
|
|
84c88f9173 | ||
|
|
799d47054e | ||
|
|
3fa08debe9 | ||
|
|
cd5bc8ba4b | ||
|
|
89bc78bd55 | ||
|
|
ebaa18f552 | ||
|
|
e80f602974 | ||
|
|
cd24eef107 | ||
|
|
e6ad202ee9 | ||
|
|
dd81d8e237 | ||
|
|
6e91ebe5f4 | ||
|
|
f9866e846a | ||
|
|
fba0c40bef | ||
|
|
74c97314d7 | ||
|
|
20acc24c7f | ||
|
|
1c5681c79d | ||
|
|
4b4629ce2b | ||
|
|
fb1f5dbfe3 | ||
|
|
510cdf894c | ||
|
|
2f8cd26d0f | ||
|
|
1a71e02aab | ||
|
|
b3b92e8cda | ||
|
|
5574aaec9e | ||
|
|
3f9421fc75 | ||
|
|
2aadb203eb | ||
|
|
f5ec2e9b22 | ||
|
|
46d0e5562b | ||
|
|
52f734ee9f | ||
|
|
a556f2a1ba | ||
|
|
fa076df89e | ||
|
|
2330bb9da2 | ||
|
|
c2d287c262 | ||
|
|
fcfadb0caa | ||
|
|
575b2bc61c | ||
|
|
21c1dc36d8 | ||
|
|
5cde7de29b | ||
|
|
4d99590dad | ||
|
|
296c580a5e | ||
|
|
2619777d41 | ||
|
|
a5f3937228 | ||
|
|
2e8e4588c0 | ||
|
|
120896001f | ||
|
|
9a706ac09f | ||
|
|
a97c2ec662 | ||
|
|
6ad306b3cf | ||
|
|
b766f85995 | ||
|
|
25ad5c1420 | ||
|
|
a1c733807a | ||
|
|
720115e122 | ||
|
|
e75b5ea2ff | ||
|
|
2300ab52de | ||
|
|
d790efdef5 | ||
|
|
47a8355c79 | ||
|
|
d297d734d2 | ||
|
|
3789d5cfcf | ||
|
|
87b0be65d4 | ||
|
|
ff5d35832a | ||
|
|
4ffd25c570 | ||
|
|
cd00c6abf0 | ||
|
|
c1d2c8baf3 | ||
|
|
0dbb6cc6ea | ||
|
|
6f57d3c650 | ||
|
|
d48665c595 | ||
|
|
b44e4141a4 | ||
|
|
41c1326498 | ||
|
|
3d8cf3e235 | ||
|
|
ddf96120de | ||
|
|
a6d474eaa5 | ||
|
|
9f723c95ac | ||
|
|
4b3d94017a | ||
|
|
48249b977d | ||
|
|
26792d3c5a | ||
|
|
042745e0ca | ||
|
|
1a79b4192e | ||
|
|
fddd8a56c2 | ||
|
|
4fed1111f4 | ||
|
|
e609e89e0e | ||
|
|
3043f22de8 | ||
|
|
1265c16161 | ||
|
|
0865975f2e | ||
|
|
18dbb0cfe6 | ||
|
|
ef26296dc6 | ||
|
|
0a39eac419 | ||
|
|
9aa9840231 | ||
|
|
1acf67a91c | ||
|
|
d66cf089ee | ||
|
|
fb04d75376 | ||
|
|
966641c447 | ||
|
|
e12098abe4 | ||
|
|
724f15c006 | ||
|
|
fb6d7b5668 | ||
|
|
eccc2d74a3 | ||
|
|
3437d8b471 | ||
|
|
7f0377a8c5 | ||
|
|
ce0a6368f2 | ||
|
|
66e0d9f357 | ||
|
|
bc08ada938 | ||
|
|
eadcf7382b | ||
|
|
75ed93c35b | ||
|
|
1e37ca8315 | ||
|
|
d410e1ef6c | ||
|
|
a3e8b53f01 | ||
|
|
9ebace4014 | ||
|
|
c04063838b | ||
|
|
8c5c324a09 | ||
|
|
655e2b3469 | ||
|
|
02187ab5a5 | ||
|
|
c9bd2ab9a5 | ||
|
|
90b3d01171 | ||
|
|
5cfc5dda92 | ||
|
|
64cd0c232d | ||
|
|
d7a5db711b | ||
|
|
102e3ccde3 | ||
|
|
6b76d62fda | ||
|
|
caad463e8a | ||
|
|
fa441149e4 | ||
|
|
ba73a9b55e | ||
|
|
0267c79b07 | ||
|
|
bfcad278aa | ||
|
|
33d073e7a0 | ||
|
|
54020a8813 | ||
|
|
97a9d21ac4 | ||
|
|
f176f6ae4f | ||
|
|
313311d008 | ||
|
|
0e1fe3968d | ||
|
|
4c0b3e9134 | ||
|
|
0d1daeaedf | ||
|
|
6bd8206236 | ||
|
|
156c008eee | ||
|
|
b829f0a20a | ||
|
|
4b625025ee | ||
|
|
b3da28e915 | ||
|
|
2f5a0d071f | ||
|
|
0cdba79738 | ||
|
|
030ee8efe3 | ||
|
|
7be25df7d0 | ||
|
|
847bfb721b | ||
|
|
50be0ad889 | ||
|
|
58813310b7 | ||
|
|
811a752efb | ||
|
|
29f81b2087 | ||
|
|
5071eb6fda | ||
|
|
29b41a7638 | ||
|
|
b6976210a5 | ||
|
|
0d2a827413 | ||
|
|
cdb55ab5dd | ||
|
|
0d69274bb4 | ||
|
|
cb102ed115 | ||
|
|
78517971ed | ||
|
|
5ef73d992c | ||
|
|
0d05589206 | ||
|
|
afc65eed32 | ||
|
|
acffe8a721 | ||
|
|
6411433b24 | ||
|
|
5127712711 | ||
|
|
33f84ec327 | ||
|
|
3bcadd047b | ||
|
|
c34ec5ddab | ||
|
|
4f772bbecf | ||
|
|
18faaa69bd | ||
|
|
24304636d9 | ||
|
|
9b2633e6c7 | ||
|
|
7752ca0f03 | ||
|
|
421d91bb0f | ||
|
|
9e262220e5 | ||
|
|
2a780cb4b0 | ||
|
|
94b9db7f27 | ||
|
|
c0f51103d2 | ||
|
|
334f0cd03f | ||
|
|
655c1fd09f | ||
|
|
663eb1b360 | ||
|
|
0015ad4abe | ||
|
|
e2b5817d18 | ||
|
|
f6089e689e | ||
|
|
f3413b4283 | ||
|
|
0d4ab4f2cf | ||
|
|
d42b9bbdf4 | ||
|
|
72311c73b5 | ||
|
|
93c4814a89 | ||
|
|
7823c80710 | ||
|
|
2d9cdbe8b0 | ||
|
|
fdacbb94c3 | ||
|
|
3f1caf8da0 | ||
|
|
f8d5332786 | ||
|
|
1ccc631bd4 | ||
|
|
86183b873e | ||
|
|
56adf598ae | ||
|
|
fe1337fa8d | ||
|
|
16915b6480 | ||
|
|
15c8459a15 | ||
|
|
feb9d9e714 | ||
|
|
a8fd2a1136 | ||
|
|
9c571b222e | ||
|
|
37840f3b6c | ||
|
|
927d77cfd7 | ||
|
|
265bcd7b65 | ||
|
|
c69127f37c | ||
|
|
45ae821f5c | ||
|
|
1f8879df92 | ||
|
|
7093ac54a3 | ||
|
|
5118cad9a2 | ||
|
|
2b0b9675fd | ||
|
|
40c9436071 | ||
|
|
b976f8d0ed | ||
|
|
a54e17caeb | ||
|
|
0416ac4064 | ||
|
|
1fa91f0ef7 | ||
|
|
fab94319bb | ||
|
|
5ff15895b6 | ||
|
|
0188afcd54 | ||
|
|
ae814a18c5 | ||
|
|
1f5dffa0e5 | ||
|
|
4d91d82515 | ||
|
|
4c8e647415 | ||
|
|
14e71ce42f | ||
|
|
f6f9287e33 | ||
|
|
456c322c19 | ||
|
|
a12c90268f | ||
|
|
a10f2330fd | ||
|
|
03ba13e5cb | ||
|
|
335c21488e | ||
|
|
d26279275d | ||
|
|
4f66129a7c | ||
|
|
7d756de3de | ||
|
|
69bd6c116e | ||
|
|
0065edfae9 | ||
|
|
9ec021241c | ||
|
|
3a60155bfa | ||
|
|
f6a0a421a5 | ||
|
|
7ed26f4d4c | ||
|
|
daca9dd539 | ||
|
|
8c1a9c8798 | ||
|
|
966d8498bc | ||
|
|
36a51eeb73 | ||
|
|
382173351a | ||
|
|
d35323aa65 | ||
|
|
9b21275b7e | ||
|
|
d493ec34b2 | ||
|
|
51ea493a26 | ||
|
|
49403978b1 | ||
|
|
8c770d5ba3 | ||
|
|
b01e8707a3 | ||
|
|
8896f58d6f | ||
|
|
3afb74224d | ||
|
|
3a4f97c5c2 | ||
|
|
8419facb8a | ||
|
|
3cbc6435a2 | ||
|
|
e7627a723e | ||
|
|
e77afeee37 | ||
|
|
6a5a2350bb | ||
|
|
912675bf99 | ||
|
|
a56e3ca111 | ||
|
|
5f877cdc22 | ||
|
|
d5efd53b5b | ||
|
|
c156c02376 | ||
|
|
a196205593 | ||
|
|
26cf7fb97c | ||
|
|
863892f909 | ||
|
|
5a64a3e833 | ||
|
|
45786005ab | ||
|
|
f45384e399 | ||
|
|
33a542b9d5 | ||
|
|
00d07214b1 | ||
|
|
1e8030a722 | ||
|
|
f6404fbd4b | ||
|
|
b59c39261f | ||
|
|
a5b513f986 | ||
|
|
45a688749c | ||
|
|
15473620c4 | ||
|
|
7cd0e16cc2 | ||
|
|
caab7b3b59 | ||
|
|
47d850e164 | ||
|
|
b27e160d15 | ||
|
|
3eb4a70fbf | ||
|
|
d4df7e69d7 | ||
|
|
0055429703 | ||
|
|
eafdfd8177 | ||
|
|
a8e52126f5 | ||
|
|
70facb96f0 | ||
|
|
f583e24c47 | ||
|
|
7db27aa9fe | ||
|
|
f5bc055a11 | ||
|
|
965160b7a2 | ||
|
|
85b3164592 | ||
|
|
7634d9e5da | ||
|
|
48253f3f85 | ||
|
|
dd2c64d453 | ||
|
|
517c05a9c2 | ||
|
|
99bbe7d47c | ||
|
|
586d41eeff | ||
|
|
7fb18b14eb | ||
|
|
68398e2ce6 | ||
|
|
d23f5eb540 | ||
|
|
4bbd5dab70 | ||
|
|
c4b9ae596e | ||
|
|
5c9ff90d28 | ||
|
|
f5d2f34e30 | ||
|
|
8cbae9021b | ||
|
|
8a971400b1 | ||
|
|
fb3678bb6f | ||
|
|
7c5477b439 | ||
|
|
cc7362b269 | ||
|
|
dcb55f4aff | ||
|
|
ba6fd842d2 | ||
|
|
cf1726505b | ||
|
|
8b41a9bfc9 | ||
|
|
e109068b29 | ||
|
|
9fc7c4fc09 | ||
|
|
5a8455bfc2 | ||
|
|
033d6751e0 | ||
|
|
d9ee75cc47 | ||
|
|
6ae24493eb | ||
|
|
b4f43adc1a | ||
|
|
46d48cc5ea | ||
|
|
b74a323f2b | ||
|
|
bcd2427ab6 | ||
|
|
8fcc61bde5 | ||
|
|
b716971ba0 | ||
|
|
ad822834d4 | ||
|
|
e222a71966 | ||
|
|
1f27670921 | ||
|
|
321b7ad5ae | ||
|
|
cc79e75d35 | ||
|
|
70bb250a23 | ||
|
|
5eee810d8e | ||
|
|
37bd5862e6 | ||
|
|
8bf6c37e35 | ||
|
|
e6c43bebf5 | ||
|
|
7cd62b5a85 | ||
|
|
d5ef08b636 | ||
|
|
c9fb3814d9 | ||
|
|
5a922e2689 | ||
|
|
e55ce29c5f | ||
|
|
9634ba75a6 | ||
|
|
665dbb6766 | ||
|
|
4efc3ec182 | ||
|
|
e2e89efb47 | ||
|
|
680e6721f1 | ||
|
|
7a4302415a | ||
|
|
8c6ba747f0 | ||
|
|
88f41a570e | ||
|
|
e731cca629 | ||
|
|
eb357b18fc | ||
|
|
38c84de708 | ||
|
|
417fc8f766 | ||
|
|
e508b3a7a2 | ||
|
|
abe9fa0e47 | ||
|
|
6c9da58ec3 | ||
|
|
cc27233765 | ||
|
|
4cbe27a462 | ||
|
|
15b9c0c56f | ||
|
|
f34bead7d2 | ||
|
|
1e08653b88 | ||
|
|
838035291d | ||
|
|
4ad84195e0 | ||
|
|
7ff974382b | ||
|
|
c715d0fc8e | ||
|
|
a49e7ebd0b | ||
|
|
8c486d8459 | ||
|
|
6a3aae3348 | ||
|
|
f0453357f8 | ||
|
|
03f5fdda56 | ||
|
|
9fae8ceb64 | ||
|
|
36f21b063d | ||
|
|
efc17eb075 | ||
|
|
eeeb246ed7 | ||
|
|
55c83689d2 | ||
|
|
733216448d | ||
|
|
16dce6b3aa | ||
|
|
8d81d1df7b | ||
|
|
c6354beb92 | ||
|
|
c97ab57f51 | ||
|
|
06c783820e | ||
|
|
7fb13a5888 | ||
|
|
c6e68515ed | ||
|
|
28706f5ea5 | ||
|
|
36e4d78487 | ||
|
|
277ff7ef67 | ||
|
|
9c81c41624 | ||
|
|
a99b044555 | ||
|
|
025fafabf4 | ||
|
|
0f8825454d | ||
|
|
58fb762fac | ||
|
|
ffbdcef3b4 | ||
|
|
598312c4d3 | ||
|
|
fc82f64705 | ||
|
|
bac8c4f77c | ||
|
|
599ea0056c | ||
|
|
8e3484663b | ||
|
|
e9180f68d7 | ||
|
|
b6fbce16c0 | ||
|
|
c9d7f7757f | ||
|
|
e0b7f31111 | ||
|
|
2b2981af25 | ||
|
|
d663d0cf63 | ||
|
|
071e0db610 | ||
|
|
08a69f534e | ||
|
|
72678e31f3 | ||
|
|
e9db07bfd3 | ||
|
|
a023d893ea | ||
|
|
626e1f3451 | ||
|
|
3b369193a5 | ||
|
|
a076c751ad | ||
|
|
fb83a838fb | ||
|
|
34c2fd6177 | ||
|
|
bbfe35b8fd | ||
|
|
f6e39380af | ||
|
|
da8c9d08d8 | ||
|
|
ded7eb0bfd | ||
|
|
4228338870 | ||
|
|
4b4aac246b | ||
|
|
cdcf9096fb | ||
|
|
916c8e2cab | ||
|
|
b25ebbef95 | ||
|
|
8f56adf311 | ||
|
|
e3aeb8cfef | ||
|
|
2d69c6114b | ||
|
|
635263dc95 | ||
|
|
26ac7de70b | ||
|
|
06e013788f | ||
|
|
38485b1cf8 | ||
|
|
3c2557fb47 | ||
|
|
4716e3eb15 | ||
|
|
6159bdca45 | ||
|
|
67b97c0ed0 | ||
|
|
c67c0e3742 | ||
|
|
402039ff99 | ||
|
|
71a0510af1 | ||
|
|
9f17d7662b | ||
|
|
7bda5b1fce | ||
|
|
d3c1204626 | ||
|
|
bd359a9ad9 | ||
|
|
e46f55a2a2 | ||
|
|
8c229d4b36 | ||
|
|
1246d4360a | ||
|
|
97108fb9df | ||
|
|
98c44df9cc | ||
|
|
758a14e358 | ||
|
|
ff5a0d32d4 | ||
|
|
f600ca5a1a | ||
|
|
c8ff089707 | ||
|
|
7c4de79c8f | ||
|
|
a96e7574b2 | ||
|
|
9716e51914 | ||
|
|
022c92f775 | ||
|
|
5d24521049 | ||
|
|
9e4ad9a64f | ||
|
|
06288e3d6d | ||
|
|
ef1f011cd5 | ||
|
|
923cb3a7f2 | ||
|
|
eda8d18146 | ||
|
|
fdfa4755e9 | ||
|
|
74d45212ec | ||
|
|
ce7ae7a606 | ||
|
|
041f4e7331 | ||
|
|
618a5f0f59 | ||
|
|
55284c4681 | ||
|
|
fc9a782fb8 | ||
|
|
0112e12375 | ||
|
|
d1118e3767 | ||
|
|
5e98bedbc9 | ||
|
|
bbdab284f8 | ||
|
|
ab56758197 | ||
|
|
e9bc10a056 | ||
|
|
531ca12021 | ||
|
|
a986b58338 | ||
|
|
ecdc122b15 | ||
|
|
f2fff77aab | ||
|
|
c2bb697306 | ||
|
|
62e221ffbb | ||
|
|
58f7b1b555 | ||
|
|
206dbb9b5b | ||
|
|
804ef00d41 | ||
|
|
ac07d4a63f | ||
|
|
4d53c9aec7 | ||
|
|
a372fc5a07 | ||
|
|
03c54395cc | ||
|
|
fafdb538b3 | ||
|
|
654f2a1ad2 | ||
|
|
51cf39f4d8 | ||
|
|
e6eebe11a7 | ||
|
|
89256bfb9a | ||
|
|
4df9fae737 | ||
|
|
632f4b598b | ||
|
|
a09511d0e9 | ||
|
|
5880a650b3 | ||
|
|
0fadd84567 | ||
|
|
b8c5e2380e | ||
|
|
98f34a2f42 | ||
|
|
afc48ae331 | ||
|
|
b42161e404 | ||
|
|
ab34694d49 | ||
|
|
efdc35aaec | ||
|
|
031f5c8312 | ||
|
|
dd3013826f | ||
|
|
bc398d79cf | ||
|
|
ecc60ce540 | ||
|
|
c82125c611 | ||
|
|
732d275ec1 | ||
|
|
e51a1a93d0 | ||
|
|
f51ee02f08 | ||
|
|
a85d33fd8e | ||
|
|
1f5da1745a | ||
|
|
55930689bb | ||
|
|
9bc16aabc3 | ||
|
|
e42ea89db7 | ||
|
|
962f395831 | ||
|
|
6a251575ac | ||
|
|
29aaa8d452 | ||
|
|
bc5715254e | ||
|
|
2be29a2300 | ||
|
|
c2a1c2ca7b | ||
|
|
3f7fd9a445 | ||
|
|
5d39ec4ed3 | ||
|
|
f7a9550bb1 | ||
|
|
e0d0567f1f | ||
|
|
4ae7a32443 | ||
|
|
e41f2f73e7 | ||
|
|
d3af59ec06 | ||
|
|
91b2c99e77 | ||
|
|
4eab4670be | ||
|
|
388b61ca7a | ||
|
|
976872df35 | ||
|
|
9eb3d39558 | ||
|
|
44ac0932b3 | ||
|
|
2fe6a15f1a | ||
|
|
5b806a43e9 | ||
|
|
64ca5a623f | ||
|
|
4b2226cf04 | ||
|
|
435fa774f0 | ||
|
|
aac0852128 | ||
|
|
12143ffda7 | ||
|
|
1919e78041 | ||
|
|
e5bb00d514 | ||
|
|
61d2cc3d03 | ||
|
|
891dc2d74b | ||
|
|
f57a3b23ba | ||
|
|
7e68853e47 | ||
|
|
d2ee960d42 | ||
|
|
0cb4e687ab | ||
|
|
bf079a8945 | ||
|
|
1088248bf5 | ||
|
|
4eb3c47457 | ||
|
|
d8ade58472 | ||
|
|
fce7ee99ea | ||
|
|
6baa63a989 | ||
|
|
427aad8277 | ||
|
|
c312a2a304 | ||
|
|
607d178e94 | ||
|
|
85a5bd995f | ||
|
|
a314e59be2 | ||
|
|
c9dedde1d0 | ||
|
|
41b8d6157a | ||
|
|
6594756c5b | ||
|
|
5eba4f67e5 | ||
|
|
495ab7fd9b | ||
|
|
671b7f102e | ||
|
|
e6db0ff098 | ||
|
|
3eb68db323 | ||
|
|
abcc6539c8 | ||
|
|
10f10cadeb | ||
|
|
57eb390845 | ||
|
|
600fa16d8c | ||
|
|
69b80aff1d | ||
|
|
c3312d964f | ||
|
|
baeefe7e07 | ||
|
|
de000735ba | ||
|
|
e7279a391e | ||
|
|
c6aab372cb | ||
|
|
b5abb04c0d | ||
|
|
4a61275e80 | ||
|
|
040c99d809 | ||
|
|
9adf48821d | ||
|
|
7389369832 | ||
|
|
58cb79c95a | ||
|
|
1126837993 | ||
|
|
d6b767eb93 | ||
|
|
c6d3ffa28b | ||
|
|
9273eccbd6 | ||
|
|
2a45f52eb9 | ||
|
|
377166e491 | ||
|
|
7b6c38e85b | ||
|
|
75f6d44509 | ||
|
|
2f120d99aa | ||
|
|
ec8cbee3c8 | ||
|
|
d5b9c785fb | ||
|
|
d36faa5b7a | ||
|
|
5174f03994 | ||
|
|
12cfdafecf | ||
|
|
c760dd883d | ||
|
|
649fb544a9 | ||
|
|
4c3ca0de91 | ||
|
|
f11eef7445 | ||
|
|
26b31da443 | ||
|
|
ec44e81864 | ||
|
|
48e7b7970c | ||
|
|
d6fd1b66c6 | ||
|
|
7056f0691a | ||
|
|
5c015ccdc3 | ||
|
|
1c2c77728a | ||
|
|
103ded5145 | ||
|
|
34b3cc3286 | ||
|
|
5a2f7495c1 | ||
|
|
9a7e95f5b7 | ||
|
|
2787a1c395 | ||
|
|
3c57f7ffa7 | ||
|
|
66e7524924 | ||
|
|
a4552cf415 | ||
|
|
78bfc6501c | ||
|
|
6098bdb0b0 | ||
|
|
a33027dc39 | ||
|
|
b5215b40c3 | ||
|
|
66cf86e816 | ||
|
|
dfd2d3dc78 | ||
|
|
1890ff5bee | ||
|
|
5210fdc9d8 | ||
|
|
76895db846 | ||
|
|
79095a88a0 | ||
|
|
b3c4dd380c | ||
|
|
bf3723ae24 | ||
|
|
8e39016f12 | ||
|
|
2f48bf4fcb | ||
|
|
bf7c9fc0fd | ||
|
|
78c374dfe6 | ||
|
|
dee7dd5429 | ||
|
|
958f85eb1e | ||
|
|
04868e66bc | ||
|
|
885be348d4 | ||
|
|
89c145adde | ||
|
|
900276fe74 | ||
|
|
9965866639 | ||
|
|
3ca6595fe6 | ||
|
|
076468a922 | ||
|
|
fcb209caae | ||
|
|
b1d31b1f6b | ||
|
|
df6a3dfe28 | ||
|
|
9bb7708ffb | ||
|
|
4fe0f47a9c | ||
|
|
073bc4fde9 | ||
|
|
e400327770 | ||
|
|
1491a6d47b | ||
|
|
dca2b49624 | ||
|
|
405e46ca09 | ||
|
|
bb7fffff46 | ||
|
|
687b2e2024 | ||
|
|
a4f8cc56b8 | ||
|
|
e2a4892b1b | ||
|
|
48dfc06e49 | ||
|
|
9ebe80595a | ||
|
|
ed76278096 | ||
|
|
be7169c259 | ||
|
|
a9a66391b6 | ||
|
|
9a0f2a0084 | ||
|
|
c384b137a3 | ||
|
|
d63a133852 | ||
|
|
947568de3a | ||
|
|
737b39cdb5 | ||
|
|
a4d21c76e9 | ||
|
|
418aa14e2a | ||
|
|
1034a3056d | ||
|
|
05633ddc7e | ||
|
|
d567602d2a | ||
|
|
3c304976f7 | ||
|
|
eff9988239 | ||
|
|
d29044d034 | ||
|
|
b22174adf5 | ||
|
|
571cd172fc | ||
|
|
7f692710b3 | ||
|
|
dba94fbff3 | ||
|
|
c5c269f7ea | ||
|
|
1910547454 | ||
|
|
693948fa61 | ||
|
|
0f955937a9 | ||
|
|
35d1b31e1c | ||
|
|
8af684aa0a | ||
|
|
a015dbc4dd | ||
|
|
90cd142e76 | ||
|
|
ac5f53c538 | ||
|
|
3d1771a783 | ||
|
|
5f233ca632 | ||
|
|
930c9bdc51 | ||
|
|
301df39be4 | ||
|
|
27a27daed2 | ||
|
|
65f27b006a | ||
|
|
bdfb62d2b3 | ||
|
|
0022548e35 | ||
|
|
0a653a08bd | ||
|
|
954dd8b994 | ||
|
|
52ef2f3dae | ||
|
|
4e762d7522 | ||
|
|
4c394aec50 | ||
|
|
cd76b1fd4a | ||
|
|
b3ef018d6c | ||
|
|
5cd7ac88d6 | ||
|
|
b619444e43 | ||
|
|
57e1fe8cf0 | ||
|
|
fe9a395724 | ||
|
|
11e017b3db | ||
|
|
7124676eb5 | ||
|
|
7f14b9c5e1 | ||
|
|
65f24b4227 | ||
|
|
af66abaf57 | ||
|
|
62892105a0 | ||
|
|
526dac7a26 | ||
|
|
8fb2c78f29 | ||
|
|
709403a01f | ||
|
|
de87f83c05 | ||
|
|
ba28d08a7b | ||
|
|
87ff0696d3 | ||
|
|
565f6caa0d | ||
|
|
c9bb13f149 | ||
|
|
170a83b06f | ||
|
|
928c80cc02 | ||
|
|
418e603222 | ||
|
|
0d46b0a252 | ||
|
|
e7cb4cf6c3 | ||
|
|
648b3e9d7f | ||
|
|
1b1d549bbf | ||
|
|
0489eb8f7d | ||
|
|
0d1c9a5ac1 | ||
|
|
1594e7a792 | ||
|
|
493ba214f2 | ||
|
|
14bea94030 | ||
|
|
3937696774 | ||
|
|
7994803e8f | ||
|
|
c02a8bb3e3 | ||
|
|
9183369bdb | ||
|
|
10231363e6 | ||
|
|
4f028b1f54 | ||
|
|
7a4202b459 | ||
|
|
ffa8a4c5e2 | ||
|
|
37fc968f50 | ||
|
|
cc62988d4d | ||
|
|
42ea33d760 | ||
|
|
81f340ee16 | ||
|
|
e6fa31a4e5 | ||
|
|
3aecf817ce | ||
|
|
b14d7d6da0 | ||
|
|
0c1c38917c | ||
|
|
f756584176 | ||
|
|
cbcb8a84c5 | ||
|
|
0626529228 | ||
|
|
f42e1a96b2 | ||
|
|
4dea5911da | ||
|
|
fc304394f5 | ||
|
|
e18c043c1f | ||
|
|
1ad7d2a406 | ||
|
|
0faeb2626a | ||
|
|
c665e75871 | ||
|
|
57b60c7b2f | ||
|
|
71ada209f6 | ||
|
|
d78527ec10 | ||
|
|
6722394e34 | ||
|
|
27dcc2a7e7 | ||
|
|
39a94f8b4f | ||
|
|
2e3ae3f78b | ||
|
|
fd87e28113 | ||
|
|
306b764a5c | ||
|
|
0987bbe0fa | ||
|
|
7a2f7d81bc | ||
|
|
64ac165f03 | ||
|
|
8cea56aceb | ||
|
|
aabd5651d8 | ||
|
|
29b680ef84 | ||
|
|
89a7b9d6b5 | ||
|
|
90b7c1ffa3 | ||
|
|
be4365bbf7 | ||
|
|
f8b50ab94b | ||
|
|
bcf995b459 | ||
|
|
30957b24c4 | ||
|
|
340eabc725 | ||
|
|
d8492f99ab | ||
|
|
abe6d53c2c | ||
|
|
9a809c493a | ||
|
|
aa38b1c0e8 | ||
|
|
7dd56bbf15 | ||
|
|
061366ffec | ||
|
|
aa4e8e3507 | ||
|
|
40d8c7049c | ||
|
|
8f0ad91d96 | ||
|
|
f5e3470deb | ||
|
|
e0d812ac74 | ||
|
|
85926ae8f8 | ||
|
|
c4c73666aa | ||
|
|
fb845abf10 | ||
|
|
9dfe187202 | ||
|
|
66e53bac22 | ||
|
|
60a3e1aa42 | ||
|
|
e5e619e045 | ||
|
|
53c17ce7ab | ||
|
|
694f7675e5 | ||
|
|
74a252afcf | ||
|
|
46f593654c | ||
|
|
96f5c28059 | ||
|
|
0f6d33140a | ||
|
|
460570ed05 | ||
|
|
3e58fd4e38 | ||
|
|
4d11234ba5 | ||
|
|
76513e7b38 | ||
|
|
ac433d9651 | ||
|
|
2cc9339715 | ||
|
|
b8151f848a | ||
|
|
ca6d6f3fc7 | ||
|
|
5e98c17601 | ||
|
|
854304d0c9 | ||
|
|
bdf2bfcd12 | ||
|
|
e8798abc78 | ||
|
|
ec3fcbf5dd | ||
|
|
530a055733 | ||
|
|
acea52400a | ||
|
|
b5a4a9cf45 | ||
|
|
d1973e6e05 | ||
|
|
6008c15610 | ||
|
|
ed6a5c8ff7 | ||
|
|
d6232b4b28 | ||
|
|
ffbac43293 | ||
|
|
76208022b9 | ||
|
|
df980292cb | ||
|
|
66205c11d3 | ||
|
|
124f68125d | ||
|
|
2ee73e12b4 | ||
|
|
9896f7d52a | ||
|
|
54e9808eb9 | ||
|
|
f0bb633eee | ||
|
|
6c3f5430b7 | ||
|
|
e524c3bd79 | ||
|
|
e48b85a392 | ||
|
|
e2f95b4d48 | ||
|
|
15badf4ff9 | ||
|
|
37d2f82b6d | ||
|
|
53c0ca20a5 | ||
|
|
5d05b4ea7c | ||
|
|
2a3d4eedc8 | ||
|
|
bf51ad3c8d | ||
|
|
e7637151b9 | ||
|
|
e4af58d4b7 | ||
|
|
1ea684737a | ||
|
|
39e605df11 | ||
|
|
e7d99ff6dd | ||
|
|
9c8326fd0e | ||
|
|
30238c20b6 | ||
|
|
9a5c281a8b | ||
|
|
047962d946 | ||
|
|
7744dac423 | ||
|
|
ba7716f23d | ||
|
|
b41c932796 | ||
|
|
e0d8eff711 | ||
|
|
a734538170 | ||
|
|
f1ce12663e | ||
|
|
160d8f94a9 | ||
|
|
45702548b6 | ||
|
|
83ec4761d9 | ||
|
|
682fab24e8 | ||
|
|
199ffde283 | ||
|
|
bdd6849d83 | ||
|
|
d560ec5df7 | ||
|
|
ec82738a47 | ||
|
|
4833aaf17c | ||
|
|
b2b8549f8a | ||
|
|
3612f6dbfb | ||
|
|
6c04e7dbd6 | ||
|
|
f410ae40e7 | ||
|
|
b7b100b01a | ||
|
|
ea4886dc2b | ||
|
|
fc42849b00 | ||
|
|
188b7559d2 | ||
|
|
ae9a519263 | ||
|
|
55359c72cf | ||
|
|
9fad6c37bf | ||
|
|
1693b36b2d | ||
|
|
55879d3488 | ||
|
|
d610f8d5f6 | ||
|
|
b4d1ce33e5 | ||
|
|
9cde4d7b04 | ||
|
|
4db641372d | ||
|
|
5c83cff767 | ||
|
|
3689df4aac | ||
|
|
cbad7ee504 | ||
|
|
441127ae45 | ||
|
|
a788a99d93 | ||
|
|
430c7b8c14 | ||
|
|
83ca7a7476 | ||
|
|
2ef31d2ec3 | ||
|
|
018c641e8b | ||
|
|
78961bec49 | ||
|
|
8ee45162aa | ||
|
|
a84568574f | ||
|
|
f3c86ada45 | ||
|
|
3145cb4231 | ||
|
|
d97b080586 | ||
|
|
4f801154aa | ||
|
|
9fbedd244c | ||
|
|
8e3446c13e | ||
|
|
27d84bea5a | ||
|
|
077910bf72 | ||
|
|
455fcef114 | ||
|
|
bbc338120e | ||
|
|
d8941ea810 | ||
|
|
f1ed40adba | ||
|
|
238595e1bc | ||
|
|
222037daa9 | ||
|
|
2a3b37cbf7 | ||
|
|
2604a22772 | ||
|
|
6a65544fb7 | ||
|
|
6839f1b529 | ||
|
|
e2058f91c1 | ||
|
|
3e062a5517 | ||
|
|
b165b9a5f2 | ||
|
|
aa13953326 | ||
|
|
c482bb604c | ||
|
|
a7f4dc2f10 | ||
|
|
6a3bb455b4 | ||
|
|
ad351a1368 | ||
|
|
eb2c7c6f34 | ||
|
|
2a77078022 | ||
|
|
be73264341 | ||
|
|
59d958982f | ||
|
|
f7ca35c9b6 | ||
|
|
0641b568ee | ||
|
|
44d0198c6f | ||
|
|
c828c3acd9 | ||
|
|
b9c51792d1 | ||
|
|
b2815ad30b | ||
|
|
05aa1fc038 | ||
|
|
bce5411ea7 | ||
|
|
8ba3b71d1c | ||
|
|
8496ea7072 | ||
|
|
3484dc8f33 | ||
|
|
b5d79f42a9 | ||
|
|
74628ab04b | ||
|
|
d534dfe65b | ||
|
|
64ad07d95d | ||
|
|
3618778737 | ||
|
|
07444f0688 | ||
|
|
63a77d0235 | ||
|
|
3909481205 | ||
|
|
13f1730dda | ||
|
|
27a257f010 | ||
|
|
440f96c75b | ||
|
|
a8043e9560 | ||
|
|
668f15fab8 | ||
|
|
2a61328e7b | ||
|
|
12fce15d14 | ||
|
|
90623ed372 | ||
|
|
bbd7704e2e | ||
|
|
d9f0caeee7 | ||
|
|
29ca2f731e | ||
|
|
694b3dd629 | ||
|
|
6e59c8d749 | ||
|
|
7fe5f22770 | ||
|
|
1f059dbb5d | ||
|
|
7b38cffd85 | ||
|
|
d7ecdac6b0 | ||
|
|
e525dfffcd | ||
|
|
12a2d54f35 | ||
|
|
b77c7bba30 | ||
|
|
b0c2d6cd76 | ||
|
|
e35cde1f6c | ||
|
|
89d72da92c | ||
|
|
60fb00ff2d | ||
|
|
ebe9633665 | ||
|
|
99c4f2ccfb | ||
|
|
da5445eef9 | ||
|
|
1d55e67b00 | ||
|
|
a0b7561ed7 | ||
|
|
46b38b30d7 | ||
|
|
97d39b3336 | ||
|
|
c7c5df1190 | ||
|
|
41ed852822 | ||
|
|
c234a65a7b | ||
|
|
ae2297b0bd | ||
|
|
c46a2cd372 | ||
|
|
049342def2 | ||
|
|
a6791d41f8 | ||
|
|
096935c826 | ||
|
|
b7b1a87f23 | ||
|
|
94bdea3c69 | ||
|
|
4c1e1f0fb1 | ||
|
|
3b13713295 | ||
|
|
0207018547 | ||
|
|
b4b8d9403c | ||
|
|
2677ece123 | ||
|
|
4b23d30fa6 | ||
|
|
93a1a436a7 | ||
|
|
bad90c9848 | ||
|
|
5fa0dc8d0d | ||
|
|
fc560fe63a | ||
|
|
1248908f1f | ||
|
|
988e6227cc | ||
|
|
9ec7fa7f93 | ||
|
|
a1568be7a7 | ||
|
|
f850d0ea1b | ||
|
|
045056dc46 | ||
|
|
9e8cd4d3d7 | ||
|
|
bb7caa3c10 | ||
|
|
271838888c | ||
|
|
424d6a5af9 | ||
|
|
1076d5f1ff | ||
|
|
f9b7012389 | ||
|
|
0667519052 | ||
|
|
123acdd795 | ||
|
|
fb2ba25f23 | ||
|
|
0bc6a42192 | ||
|
|
ed5d7cd812 | ||
|
|
92bd82320b | ||
|
|
dc6eb77f43 | ||
|
|
68d96fae7e | ||
|
|
a5856da810 | ||
|
|
73ec2f0fed | ||
|
|
f86acd07a4 | ||
|
|
887bb3f718 | ||
|
|
1d3ca382aa | ||
|
|
db235a7e78 | ||
|
|
27bca4c438 | ||
|
|
7fb3828d77 | ||
|
|
cf99201b89 | ||
|
|
57e7722f59 | ||
|
|
010d56bda9 | ||
|
|
cac19ec614 | ||
|
|
7a6ac5d794 | ||
|
|
bcdc419b66 | ||
|
|
0e4c1dd75a | ||
|
|
b06918c333 | ||
|
|
7e8868ea80 | ||
|
|
c3f00069c9 | ||
|
|
cd267d0f1a | ||
|
|
a3e602a670 | ||
|
|
c64cdea754 | ||
|
|
91ee905843 | ||
|
|
53239385ae | ||
|
|
038cd30960 | ||
|
|
6dcc6dbd30 | ||
|
|
da49c64095 | ||
|
|
8cd7779b14 | ||
|
|
30fd0a397f | ||
|
|
fe242c3039 | ||
|
|
9b08cf221a | ||
|
|
0ef05ad4e3 | ||
|
|
a6ca3f211e | ||
|
|
59c8bbdf2b | ||
|
|
1b8333a7f8 | ||
|
|
0fbfb17d83 | ||
|
|
d2eef74bb8 | ||
|
|
0ecb2260e0 | ||
|
|
4c1ae55410 | ||
|
|
59d746db97 | ||
|
|
15115a51bf | ||
|
|
a3aa3fb0b5 | ||
|
|
fed7921cdf | ||
|
|
57325bc6ad | ||
|
|
a9e8076abe | ||
|
|
9abe4e8f96 | ||
|
|
cc96ae0a09 | ||
|
|
62bb9e80d9 | ||
|
|
31c9282d87 | ||
|
|
e9a365333f | ||
|
|
b200438c4e | ||
|
|
05966afe1e | ||
|
|
460d747424 | ||
|
|
a23f26f4f4 | ||
|
|
8ecd9a31c8 | ||
|
|
c7fda3447c | ||
|
|
eb5bd252db | ||
|
|
bd5fe1af10 | ||
|
|
79c1b761d4 | ||
|
|
26fe832bd9 | ||
|
|
de65d96fe2 | ||
|
|
f44fbe5687 | ||
|
|
75542ebcc3 | ||
|
|
6c4ec805dc | ||
|
|
6c738793fd | ||
|
|
5fadeadce2 | ||
|
|
942dd7f710 | ||
|
|
3159a6bf1f | ||
|
|
6ecd12d250 | ||
|
|
c69147bdc5 | ||
|
|
0c4a52558b | ||
|
|
3fc9a14015 | ||
|
|
5d2d821c6e | ||
|
|
a4f5febf38 | ||
|
|
ee3683f6ac | ||
|
|
ed8cdb9da4 | ||
|
|
ed4f97cea7 | ||
|
|
53b47455d3 | ||
|
|
af85d37307 | ||
|
|
1fc06a350b | ||
|
|
ff9e291cd7 | ||
|
|
17acb444bd | ||
|
|
d173f9f863 | ||
|
|
764a80fab2 | ||
|
|
4e908db62b | ||
|
|
b9f7326f6f | ||
|
|
28aa0b913c | ||
|
|
a172538dfc | ||
|
|
f3c5391d54 | ||
|
|
0a480066df | ||
|
|
4f5cf81212 | ||
|
|
96836065a8 | ||
|
|
77777deec5 | ||
|
|
ee58303fbb | ||
|
|
82000bfe39 | ||
|
|
cbd8ed52c7 | ||
|
|
66b873e6e5 | ||
|
|
8e7b288c00 | ||
|
|
395be18151 | ||
|
|
1fdb452c9d | ||
|
|
2802ee233c | ||
|
|
d03c6b4646 | ||
|
|
13d36ab174 | ||
|
|
ce782a37f7 | ||
|
|
7a6465303d | ||
|
|
8590bff6e4 | ||
|
|
d29d4ba110 | ||
|
|
f978eb49f4 | ||
|
|
3e13d5ae1f | ||
|
|
cffc63a29e | ||
|
|
43955d680a | ||
|
|
baa1307870 | ||
|
|
fb565aeb2a | ||
|
|
27286fce24 | ||
|
|
9b10f59162 | ||
|
|
ad3438b859 | ||
|
|
61cb9ac524 | ||
|
|
55a4798ac3 | ||
|
|
f85b30c967 | ||
|
|
abf0ecebaf | ||
|
|
49bb7c879e | ||
|
|
afd4748426 | ||
|
|
f8cb63b11a | ||
|
|
8a3f9c7e4e | ||
|
|
2abd37c131 | ||
|
|
67b940aec9 | ||
|
|
c267933fb8 | ||
|
|
ac7cef2fd9 | ||
|
|
00185ef936 | ||
|
|
9e1dd7aa26 | ||
|
|
6afd3eb869 | ||
|
|
5b8ae1be2e | ||
|
|
c7caa53b52 | ||
|
|
5f80563e49 | ||
|
|
cc7eb92550 | ||
|
|
98c61bf819 | ||
|
|
b083bd534b | ||
|
|
6aca0cd874 | ||
|
|
ee75f0e92d | ||
|
|
63f3f83fa3 | ||
|
|
c8911b901e | ||
|
|
410f8fed76 | ||
|
|
5b3285c006 | ||
|
|
5704c21d56 | ||
|
|
c2e25e6d0d | ||
|
|
05dc569a6f | ||
|
|
3d3684daeb | ||
|
|
d6c9ce071c | ||
|
|
accfee4c50 | ||
|
|
57f03b21fc | ||
|
|
fc8dc74de4 | ||
|
|
d83a50d36a | ||
|
|
53c277b420 | ||
|
|
3be28131c9 | ||
|
|
f3f4dcd84a | ||
|
|
e4f61b3ad8 | ||
|
|
9ca7ca5ce6 | ||
|
|
381dafc7b9 | ||
|
|
69adce5c02 | ||
|
|
d0c6c7e6de | ||
|
|
e2cc939260 | ||
|
|
702618b924 | ||
|
|
d93fafcf57 | ||
|
|
f93521395c | ||
|
|
9977759f85 | ||
|
|
efc470ff4c | ||
|
|
d7567f4b97 | ||
|
|
c29d7c6e5b | ||
|
|
4b36c27e33 | ||
|
|
55ba6786b3 | ||
|
|
3165912837 | ||
|
|
44320838a0 | ||
|
|
cedf5ac7d0 | ||
|
|
1946250cea | ||
|
|
4378b28777 | ||
|
|
77a3c103d1 | ||
|
|
e1956f8d80 | ||
|
|
36d19ea284 | ||
|
|
744976e8a1 | ||
|
|
d8d6dada5e | ||
|
|
58c762d9e8 | ||
|
|
3c4f9ced11 | ||
|
|
938093db6f | ||
|
|
b4bf9bfaee | ||
|
|
f3427c7470 | ||
|
|
3919e6404c | ||
|
|
775894ee0d | ||
|
|
a4a3c96228 | ||
|
|
471458fda3 | ||
|
|
b8e97164c8 | ||
|
|
974fa8e210 | ||
|
|
6525f3b854 | ||
|
|
984e8a5b2c | ||
|
|
fd9a7217e9 | ||
|
|
b1080e5fe5 | ||
|
|
2b77da369d | ||
|
|
8f3e1a3eb0 | ||
|
|
a2a58e925b | ||
|
|
9043291b8d | ||
|
|
4af9dfa36d | ||
|
|
72160bf806 | ||
|
|
bc85c3be59 | ||
|
|
e3d400c70d | ||
|
|
0edb028bbf | ||
|
|
cc7f69b908 | ||
|
|
1d5a60ef9e | ||
|
|
7000ba1630 | ||
|
|
026c7d391b | ||
|
|
a1876c065e | ||
|
|
d991c82693 | ||
|
|
1ed9f9819a | ||
|
|
7db6bd3fc4 | ||
|
|
47dfdfbffe | ||
|
|
17a75d3b2a | ||
|
|
381dd305c1 | ||
|
|
a0980b0fbd | ||
|
|
ad293a8f40 | ||
|
|
0b77c5c319 | ||
|
|
48834eb8b4 | ||
|
|
7b68e271c8 | ||
|
|
a1c8b8e5de | ||
|
|
b616ffaf1f | ||
|
|
8c37bd87d6 | ||
|
|
98f31ff491 | ||
|
|
d201f2c31c | ||
|
|
b45be228d2 | ||
|
|
99a9a87a56 | ||
|
|
c85035b58e | ||
|
|
f923904a0e | ||
|
|
eceb3ed877 | ||
|
|
0a05c87c9c | ||
|
|
ec51aecad6 | ||
|
|
c21fec9e1d | ||
|
|
6886b22360 | ||
|
|
54e93c1ed6 | ||
|
|
d64f72351d | ||
|
|
34fc5a5bcf | ||
|
|
93cba698e4 | ||
|
|
93dbf789d0 | ||
|
|
d59466123b | ||
|
|
1d0ef774e6 | ||
|
|
68c572bd6e | ||
|
|
54e8f85def | ||
|
|
80d7410c15 | ||
|
|
837d64dfdb | ||
|
|
db735bc454 | ||
|
|
2f4abb22f8 | ||
|
|
679cf70269 | ||
|
|
3b5c5666b3 | ||
|
|
bfa7950d6a | ||
|
|
89b9492f39 | ||
|
|
8bf3822e54 | ||
|
|
9f3f41f39e | ||
|
|
8d50e5ecb9 | ||
|
|
3093a82a9f | ||
|
|
eae881c35a | ||
|
|
c9f6d64b44 | ||
|
|
f542dfb07c | ||
|
|
c604ec9c6d | ||
|
|
9adddace83 | ||
|
|
f53350a699 | ||
|
|
4834b9d491 | ||
|
|
c556e095e0 | ||
|
|
57bb282dbc | ||
|
|
d3e4876511 | ||
|
|
05c5151c38 | ||
|
|
3fc9b8e62c | ||
|
|
0cd5f3c3a3 | ||
|
|
b660c8055f | ||
|
|
677f49aed5 | ||
|
|
68bb791c96 | ||
|
|
3a695618c1 | ||
|
|
db83f09b19 | ||
|
|
824c371d92 | ||
|
|
f2e84c0256 | ||
|
|
f475709b08 | ||
|
|
3628035884 | ||
|
|
2b119ddb93 | ||
|
|
08d4fbbecd | ||
|
|
f0baa16cde | ||
|
|
c4c0d4a007 | ||
|
|
72fc940cd7 | ||
|
|
2dff4c14f9 | ||
|
|
f14c67a444 | ||
|
|
6e93985fe2 | ||
|
|
816c0ee703 | ||
|
|
89a3d1d32a | ||
|
|
b44ccc3d0d | ||
|
|
a82d963998 |
10
.dockerignore
Normal file
10
.dockerignore
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
HISTORY.md
|
||||||
|
mayan/media
|
||||||
|
db.sqlite*
|
||||||
|
docker
|
||||||
|
!docker/rootfs
|
||||||
|
./.*
|
||||||
|
docs
|
||||||
|
|
||||||
3
.flake8
3
.flake8
@@ -1,2 +1,3 @@
|
|||||||
[flake8]
|
[flake8]
|
||||||
ignore = E501
|
exclude = node_modules,static,templates
|
||||||
|
ignore = E501, N801, N802, N804, N805, N806
|
||||||
|
|||||||
3
.gitignore
vendored
3
.gitignore
vendored
@@ -7,6 +7,7 @@
|
|||||||
.coverage
|
.coverage
|
||||||
.coverage.tox*
|
.coverage.tox*
|
||||||
.idea/
|
.idea/
|
||||||
|
*.swp
|
||||||
.tox/
|
.tox/
|
||||||
.vagrant
|
.vagrant
|
||||||
_build/
|
_build/
|
||||||
@@ -27,4 +28,6 @@ static_collected/
|
|||||||
/misc/mayan.geany
|
/misc/mayan.geany
|
||||||
/mayan/media/static/
|
/mayan/media/static/
|
||||||
/venv/
|
/venv/
|
||||||
|
/venv3/
|
||||||
/whoosh_index/
|
/whoosh_index/
|
||||||
|
node_modules/
|
||||||
|
|||||||
254
.gitlab-ci.yml
254
.gitlab-ci.yml
@@ -1,41 +1,227 @@
|
|||||||
image: ubuntu:16.10
|
stages:
|
||||||
services:
|
- test
|
||||||
- mysql:latest
|
- build_python
|
||||||
- postgres
|
- build_docker
|
||||||
before_script:
|
- build_documentation
|
||||||
- echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
|
- push_python
|
||||||
- locale-gen en_US.UTF-8
|
- push_docker
|
||||||
- update-locale LANG=en_US.UTF-8
|
- push_documentation
|
||||||
- export LC_ALL=en_US.UTF-8
|
- deploy
|
||||||
- apt-get update -qq
|
|
||||||
- apt-get install -qq curl graphviz python-dev python-pip gcc gnupg1 tesseract-ocr tesseract-ocr-deu ghostscript libjpeg-dev libpng-dev libtiff-dev poppler-utils libreoffice
|
job_docker_build:
|
||||||
variables:
|
stage: build_docker
|
||||||
POSTGRES_DB: "mayan_edms"
|
image: docker:latest
|
||||||
POSTGRES_PASSWORD: "postgres"
|
services:
|
||||||
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
- docker:dind
|
||||||
MYSQL_DATABASE: "mayan_edms"
|
before_script:
|
||||||
test:mysql:
|
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||||
script:
|
script:
|
||||||
- apt-get install -qq libmysqlclient-dev
|
- docker build --pull -t "$CI_REGISTRY_IMAGE" -f docker/Dockerfile .
|
||||||
- pip install -r requirements/testing.txt
|
- VERSION=`cat docker/version`
|
||||||
- pip install mysql-python
|
- docker tag "$CI_REGISTRY_IMAGE" "$CI_REGISTRY_IMAGE:$VERSION"
|
||||||
- apt-get install -qq mysql-client
|
- docker run --rm "$CI_REGISTRY_IMAGE:$VERSION" run-tests
|
||||||
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;"
|
- docker push "$CI_REGISTRY_IMAGE:$VERSION"
|
||||||
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
- docker push "$CI_REGISTRY_IMAGE:latest"
|
||||||
- codecov
|
- docker tag "$CI_REGISTRY_IMAGE:$VERSION" registry-1.docker.io/mayanedms/mayanedms:"$VERSION"
|
||||||
|
- docker tag "$CI_REGISTRY_IMAGE:$VERSION" registry-1.docker.io/mayanedms/mayanedms:latest
|
||||||
|
- docker logout
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/docker
|
||||||
|
|
||||||
|
job_docker_push:
|
||||||
|
stage: push_docker
|
||||||
|
image: docker:latest
|
||||||
|
services:
|
||||||
|
- docker:dind
|
||||||
|
before_script:
|
||||||
|
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||||
|
script:
|
||||||
|
- VERSION=`cat docker/version`
|
||||||
|
- docker pull "$CI_REGISTRY_IMAGE:$VERSION"
|
||||||
|
- docker tag "$CI_REGISTRY_IMAGE:$VERSION" registry-1.docker.io/mayanedms/mayanedms:"$VERSION"
|
||||||
|
- docker tag "$CI_REGISTRY_IMAGE:$VERSION" registry-1.docker.io/mayanedms/mayanedms:latest
|
||||||
|
- docker logout
|
||||||
|
- docker login -u "$DOCKER_HUB_USERNAME" -p "$DOCKER_HUB_PASSWORD" https://registry-1.docker.io
|
||||||
|
- docker push registry-1.docker.io/mayanedms/mayanedms:"$VERSION"
|
||||||
|
- docker push registry-1.docker.io/mayanedms/mayanedms:latest
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/docker
|
||||||
|
|
||||||
|
job_docker_nightly:
|
||||||
|
stage: build_docker
|
||||||
|
image: docker:latest
|
||||||
|
services:
|
||||||
|
- docker:dind
|
||||||
|
before_script:
|
||||||
|
- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
|
||||||
|
script:
|
||||||
|
- docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" -f docker/Dockerfile .
|
||||||
|
- docker run --rm "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" run-tests
|
||||||
|
- docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
|
||||||
|
only:
|
||||||
|
- nightly
|
||||||
|
- staging
|
||||||
|
|
||||||
|
job_documentation_build:
|
||||||
|
stage: build_documentation
|
||||||
|
image: ubuntu:18.04
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 hr
|
||||||
|
paths:
|
||||||
|
- docs
|
||||||
|
before_script:
|
||||||
|
- apt-get -qq update
|
||||||
|
- apt-get install -qq locales make python-pip enchant
|
||||||
|
- echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
|
||||||
|
- locale-gen en_US.UTF-8
|
||||||
|
- update-locale LANG=en_US.UTF-8
|
||||||
|
- export LC_ALL=en_US.UTF-8
|
||||||
|
script:
|
||||||
|
- pip install -r requirements/documentation.txt
|
||||||
|
- cd docs
|
||||||
|
- make html
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/documentation
|
||||||
|
|
||||||
|
job_documentation_push:
|
||||||
|
stage: push_documentation
|
||||||
|
image: ubuntu:18.04
|
||||||
|
before_script:
|
||||||
|
- mkdir -p ~/.ssh
|
||||||
|
- chmod 700 ~/.ssh
|
||||||
|
- echo "$DOCUMENTATION_SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts
|
||||||
|
- chmod 644 ~/.ssh/known_hosts
|
||||||
|
- 'which ssh-agent || ( apt-get update -y && apt-get install openssh-client rsync -y )'
|
||||||
|
- eval $(ssh-agent -s)
|
||||||
|
- echo "$DOCUMENTATION_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null
|
||||||
|
script:
|
||||||
|
- rsync -avzP --progress -e ssh docs/_build/html/* mayandocs@docs.mayan-edms.com:/home/rosarior/webapps/mayan_docs
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/documentation
|
||||||
|
|
||||||
|
job_build_python:
|
||||||
|
stage: build_python
|
||||||
|
image: ubuntu:18.04
|
||||||
|
artifacts:
|
||||||
|
expire_in: 1 hr
|
||||||
|
paths:
|
||||||
|
- dist
|
||||||
|
before_script:
|
||||||
|
- apt-get -qq update
|
||||||
|
- apt-get install -qq locales make python-pip
|
||||||
|
script:
|
||||||
|
- echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
|
||||||
|
- locale-gen en_US.UTF-8
|
||||||
|
- update-locale LANG=en_US.UTF-8
|
||||||
|
- export LC_ALL=en_US.UTF-8
|
||||||
|
- pip install -r requirements/build.txt
|
||||||
|
- make python-wheel
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/python
|
||||||
|
|
||||||
|
job_push_python:
|
||||||
|
stage: push_python
|
||||||
|
image: ubuntu:18.04
|
||||||
|
before_script:
|
||||||
|
- apt-get -qq update
|
||||||
|
- apt-get install -qq python-pip
|
||||||
|
script:
|
||||||
|
- pip install -r requirements/build.txt
|
||||||
|
- echo "$PYPIRC" > ~/.pypirc
|
||||||
|
- twine upload dist/* -r pypi
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/python
|
||||||
|
|
||||||
|
.test_base: &test_base
|
||||||
|
stage: test
|
||||||
|
image: ubuntu:18.04
|
||||||
|
cache:
|
||||||
|
paths:
|
||||||
|
- ~/.cache/pip/
|
||||||
|
- /var/cache/apt/archives/
|
||||||
|
before_script:
|
||||||
|
- apt-get -qq update
|
||||||
|
- apt-get install -qq locales
|
||||||
|
- echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale
|
||||||
|
- locale-gen en_US.UTF-8
|
||||||
|
- update-locale LANG=en_US.UTF-8
|
||||||
|
- export LC_ALL=en_US.UTF-8
|
||||||
|
- apt-get install -qq curl exiftool gcc ghostscript gnupg1 graphviz libfuse2 libjpeg-dev libmagic1 libpng-dev libtiff-dev poppler-utils libreoffice poppler-utils python-dev python-pip tesseract-ocr tesseract-ocr-deu
|
||||||
|
- pip install -r requirements.txt -r requirements/testing-base.txt
|
||||||
|
only:
|
||||||
|
- releases/all
|
||||||
|
- releases/docker
|
||||||
|
- releases/python
|
||||||
|
- master
|
||||||
|
- staging
|
||||||
|
- nightly
|
||||||
|
|
||||||
|
test-mysql:
|
||||||
|
<<: *test_base
|
||||||
|
variables:
|
||||||
|
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
|
||||||
|
MYSQL_DATABASE: "mayan_edms"
|
||||||
|
services:
|
||||||
|
- mysql:8.0.3
|
||||||
|
script:
|
||||||
|
- apt-get install -qq libmysqlclient-dev mysql-client
|
||||||
|
- pip install mysqlclient
|
||||||
|
- mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD" -e "set global character_set_server=utf8mb4;"
|
||||||
|
- python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_mysql --nomigrations
|
||||||
tags:
|
tags:
|
||||||
- mysql
|
- mysql
|
||||||
test:postgres:
|
|
||||||
|
test-postgres:
|
||||||
|
<<: *test_base
|
||||||
|
variables:
|
||||||
|
POSTGRES_DB: "mayan_edms"
|
||||||
|
POSTGRES_PASSWORD: "postgres"
|
||||||
|
services:
|
||||||
|
- postgres
|
||||||
script:
|
script:
|
||||||
- apt-get install -qq libpq-dev
|
- apt-get install -qq libpq-dev
|
||||||
- pip install -r requirements/testing.txt
|
- pip install psycopg2
|
||||||
- pip install psycopg2
|
- python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
||||||
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci.db_postgres --nomigrations
|
|
||||||
- codecov
|
|
||||||
tags:
|
tags:
|
||||||
- postgres
|
- postgres
|
||||||
test:sqlite:
|
|
||||||
|
test-sqlite:
|
||||||
|
<<: *test_base
|
||||||
script:
|
script:
|
||||||
- pip install -r requirements/testing.txt
|
- python manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
||||||
- coverage run manage.py test --mayan-apps --settings=mayan.settings.testing.gitlab-ci --nomigrations
|
|
||||||
- codecov
|
deploy_demo:
|
||||||
|
environment:
|
||||||
|
name: demo
|
||||||
|
stage: deploy
|
||||||
|
before_script:
|
||||||
|
- mkdir -p ~/.ssh
|
||||||
|
- echo "${DEMO_SSH_KNOWN_HOST}" > ~/.ssh/known_hosts
|
||||||
|
- chmod 644 ~/.ssh/known_hosts
|
||||||
|
- echo "${DEMO_PRIVATE_KEY}" > ~/.ssh/id_rsa
|
||||||
|
- chmod 600 ~/.ssh/id_rsa
|
||||||
|
script:
|
||||||
|
- scp contrib/scripts/install/docker.sh root@$DEMO_IP_ADDRESS:~
|
||||||
|
- ssh root@$DEMO_IP_ADDRESS "DELETE_VOLUMES=true ./docker.sh"
|
||||||
|
when: manual
|
||||||
|
|
||||||
|
deploy_staging:
|
||||||
|
environment:
|
||||||
|
name: staging
|
||||||
|
stage: deploy
|
||||||
|
before_script:
|
||||||
|
- mkdir -p ~/.ssh
|
||||||
|
- echo "${STAGING_SSH_KNOWN_HOST}" > ~/.ssh/known_hosts
|
||||||
|
- chmod 644 ~/.ssh/known_hosts
|
||||||
|
- echo "${STAGING_PRIVATE_KEY}" > ~/.ssh/id_rsa
|
||||||
|
- chmod 600 ~/.ssh/id_rsa
|
||||||
|
script:
|
||||||
|
- scp contrib/scripts/install/docker.sh root@$STAGING_IP_ADDRESS:~
|
||||||
|
- ssh root@$STAGING_IP_ADDRESS "DOCKER_MAYAN_IMAGE=registry.gitlab.com/mayan-edms/mayan-edms:staging ./docker.sh"
|
||||||
|
when: manual
|
||||||
|
|||||||
42
.tx/config
42
.tx/config
@@ -19,6 +19,12 @@ source_lang = en
|
|||||||
source_file = mayan/apps/authentication/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/authentication/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.autoadmin-2-0]
|
||||||
|
file_filter = mayan/apps/autoadmin/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/autoadmin/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.cabinets-2-0]
|
[mayan-edms.cabinets-2-0]
|
||||||
file_filter = mayan/apps/cabinets/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/cabinets/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
@@ -43,18 +49,24 @@ source_lang = en
|
|||||||
source_file = mayan/apps/converter/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/converter/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.dashboards-2-0]
|
||||||
|
file_filter = mayan/apps/dashboards/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/dashboards/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.dependencies-3-0]
|
||||||
|
file_filter = mayan/apps/dependencies/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/dependencies/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.django_gpg-2-0]
|
[mayan-edms.django_gpg-2-0]
|
||||||
file_filter = mayan/apps/django_gpg/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/django_gpg/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
source_file = mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/django_gpg/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.documents-2-0]
|
|
||||||
file_filter = mayan/apps/documents/locale/<lang>/LC_MESSAGES/django.po
|
|
||||||
source_lang = en
|
|
||||||
source_file = mayan/apps/documents/locale/en/LC_MESSAGES/django.po
|
|
||||||
type = PO
|
|
||||||
|
|
||||||
[mayan-edms.document_comments-2-0]
|
[mayan-edms.document_comments-2-0]
|
||||||
file_filter = mayan/apps/document_comments/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/document_comments/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
@@ -85,6 +97,12 @@ source_lang = en
|
|||||||
source_file = mayan/apps/document_states/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/document_states/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.documents-2-0]
|
||||||
|
file_filter = mayan/apps/documents/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/documents/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.dynamic_search-2-0]
|
[mayan-edms.dynamic_search-2-0]
|
||||||
file_filter = mayan/apps/dynamic_search/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/dynamic_search/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
@@ -97,6 +115,12 @@ source_lang = en
|
|||||||
source_file = mayan/apps/events/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/events/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.file_metadata-3-0]
|
||||||
|
file_filter = mayan/apps/file_metadata/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/file_metadata/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.linking-2-0]
|
[mayan-edms.linking-2-0]
|
||||||
file_filter = mayan/apps/linking/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/linking/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
@@ -145,6 +169,12 @@ source_lang = en
|
|||||||
source_file = mayan/apps/permissions/locale/en/LC_MESSAGES/django.po
|
source_file = mayan/apps/permissions/locale/en/LC_MESSAGES/django.po
|
||||||
type = PO
|
type = PO
|
||||||
|
|
||||||
|
[mayan-edms.platform-2-0]
|
||||||
|
file_filter = mayan/apps/platform/locale/<lang>/LC_MESSAGES/django.po
|
||||||
|
source_lang = en
|
||||||
|
source_file = mayan/apps/platform/locale/en/LC_MESSAGES/django.po
|
||||||
|
type = PO
|
||||||
|
|
||||||
[mayan-edms.rest_api-2-0]
|
[mayan-edms.rest_api-2-0]
|
||||||
file_filter = mayan/apps/rest_api/locale/<lang>/LC_MESSAGES/django.po
|
file_filter = mayan/apps/rest_api/locale/<lang>/LC_MESSAGES/django.po
|
||||||
source_lang = en
|
source_lang = en
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ with deployments, webservers, cloud providers, etc.
|
|||||||
Code
|
Code
|
||||||
----
|
----
|
||||||
|
|
||||||
|
1. Complete and mail, or scan and email the corresponding Contributor Assignment Agreement: [Mayan EDMS Individual Contributor Assignment Agreement](https://gitlab.com/mayan-edms/mayan-edms/blob/master/docs/chapters/caa_individual.rst) or [Mayan EDMS Entity Contributor Assignment Agreement](https://gitlab.com/mayan-edms/mayan-edms/blob/master/docs/chapters/caa_entity.rst).
|
||||||
1. Fork [the repository](http://gitlab.com/mayan-edms/mayan-edms).
|
1. Fork [the repository](http://gitlab.com/mayan-edms/mayan-edms).
|
||||||
1. Choose the version for which you want to develop. The code is divided in the
|
1. Choose the version for which you want to develop. The code is divided in the
|
||||||
following branches:
|
following branches:
|
||||||
@@ -74,5 +75,5 @@ translation. Language teams that don't see activity for a while are deleted.
|
|||||||
|
|
||||||
Code style
|
Code style
|
||||||
----------
|
----------
|
||||||
- Refer to the [Development](http://mayan.readthedocs.io/en/latest/topics/development.html)
|
- Refer to the [Development](https://docs.mayan-edms.com/topics/development.html)
|
||||||
chapter for information and examples of the code style.
|
chapter for information and examples of the code style.
|
||||||
|
|||||||
1336
HISTORY.rst
1336
HISTORY.rst
File diff suppressed because it is too large
Load Diff
60
HISTORY_1_x.rst
Normal file
60
HISTORY_1_x.rst
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
1.1.1 (2015-05-21)
|
||||||
|
==================
|
||||||
|
|
||||||
|
- Update to Django 1.6.11
|
||||||
|
- Fix make_dist.sh script
|
||||||
|
- Add test for issue #163
|
||||||
|
- Activate tests for the sources app
|
||||||
|
- Removal of the registration app
|
||||||
|
- New simplified official project description
|
||||||
|
- Improvements to the index admin interface
|
||||||
|
- Removal of installation statistics gathering
|
||||||
|
- Remove unused folder tag
|
||||||
|
- Fix usage of ugettext to ugettext_lazy
|
||||||
|
- Increase size of the lock name field
|
||||||
|
- New style documentation
|
||||||
|
|
||||||
|
|
||||||
|
1.1 (2015-02-10)
|
||||||
|
================
|
||||||
|
- Uses Celery for background tasks
|
||||||
|
- Removal of the splash screen
|
||||||
|
- Adds a home view with common function buttons
|
||||||
|
- Support for sending and receiving documents via email
|
||||||
|
- Removed custom logging app in favor of django-actvity-stream
|
||||||
|
- Adds watch folders
|
||||||
|
- Includes Vagrant file for unified development and testing environments
|
||||||
|
- Per user locale profile (language and timezone)
|
||||||
|
- Includes news document workflow app
|
||||||
|
- Optional and required metadata types
|
||||||
|
- Improved testings. Automated tests against SQLite, MySQL, PostgreSQL
|
||||||
|
- Many new REST API endpoints added
|
||||||
|
- Simplified text messages
|
||||||
|
- Improved method for custom settings
|
||||||
|
- Addition of CORS support to the REST API
|
||||||
|
- Per document language setting instead of per installation language setting
|
||||||
|
- Metadata validation and parsing support
|
||||||
|
- Start of code updates towards Python 3 support
|
||||||
|
- Simplified UI
|
||||||
|
- Stable PDF previews generation
|
||||||
|
- More technical documentation
|
||||||
|
|
||||||
|
|
||||||
|
1.0 (2014-08-27)
|
||||||
|
================
|
||||||
|
- New home @ https://github.com/mayan-edms/mayan-edms
|
||||||
|
- Updated to use Django 1.6
|
||||||
|
- Translation updates
|
||||||
|
- Custom model properties removal
|
||||||
|
- Source code improvements
|
||||||
|
- Removal of included 3rd party modules
|
||||||
|
- Automatic testing and code coverage check
|
||||||
|
- Update of required modules and libraries versions
|
||||||
|
- Database connection leaks fixes
|
||||||
|
- Support for deletion of detached signatures
|
||||||
|
- Removal of Fabric based installations script
|
||||||
|
- Pluggable OCR backends
|
||||||
|
- OCR improvements
|
||||||
|
- License change, Mayan EDMS in now licensed under the Apache 2.0 License
|
||||||
|
- PyPI package, Mayan EDMS in now available on PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
- New REST API
|
||||||
435
HISTORY_2_x.rst
Normal file
435
HISTORY_2_x.rst
Normal file
@@ -0,0 +1,435 @@
|
|||||||
|
2.7.3 (2017-09-11)
|
||||||
|
==================
|
||||||
|
- Fix task manager queue list view. Thanks to LeVon Smoker for
|
||||||
|
the report.
|
||||||
|
- Fix resolved link class URL mangling when the keep_query argument is
|
||||||
|
used. Thanks to Nick Douma (LordGaav) for the report and diagnostic
|
||||||
|
information. Fixes source navigation on the document upload wizard.
|
||||||
|
|
||||||
|
2.7.2 (2017-09-06)
|
||||||
|
==================
|
||||||
|
- Fix new mailer creation view. GitLab issue #431.
|
||||||
|
Thanks to Robert Schöftner (@robert.schoeftner) for the
|
||||||
|
report and the solution.
|
||||||
|
- Consolidate intial document created event and the first
|
||||||
|
document properties edited events. Preserve the user that
|
||||||
|
initially creates the document. GitLab issue #433. Thanks
|
||||||
|
to Jesaja Everling (@jeverling) for the report.
|
||||||
|
- Sort the list of root cabinets. Thanks to Thomas Plotkowiak
|
||||||
|
for the request.
|
||||||
|
- Sort the list of a document's cabinets.
|
||||||
|
- Display a document's cabinet list in italics. GitLab issue #435.
|
||||||
|
Thanks to LeVon Smoker for the request.
|
||||||
|
- Install mock by default to allow easier testing of deployed
|
||||||
|
instances.
|
||||||
|
|
||||||
|
2.7.1 (2017-09-03)
|
||||||
|
==================
|
||||||
|
- Support unicode in URL querystring. GitLab issue #423.
|
||||||
|
Thanks to Gustavo Teixeira (@gsteixei) for the find.
|
||||||
|
- Import errors during initialization are only ignored
|
||||||
|
if they are cause by a missing local.py. Thanks to
|
||||||
|
MacRobb Simpson for the report and solution.
|
||||||
|
- Make sure the local.py created used unicode for strings
|
||||||
|
by default. GitLab issue #424. Thanks to Gustavo Teixeira
|
||||||
|
(@gsteixei) for the find.
|
||||||
|
|
||||||
|
2.7 (2017-08-30)
|
||||||
|
================
|
||||||
|
- Add workaround for PDF with IndirectObject as the
|
||||||
|
rotation value. GitHub #261.
|
||||||
|
- Add ACL list link with icon and use it for the document facet menu.
|
||||||
|
- Fix mailing app permissions labels.
|
||||||
|
- Add ACLs link and ACLs permissions to the mailer profile model.
|
||||||
|
- Improve mailer URL regex.
|
||||||
|
- Add ordering support to the SourceColumn class. GitLab issue #417.
|
||||||
|
- Shows the cabinets in the document list. GitLab #417 @corneliusludmann
|
||||||
|
- Add workaround for pycountry versions without the bibliographical key.
|
||||||
|
GitHub issue #250.
|
||||||
|
- Skip UUID migration on Oracle backends. GitHub issue #251.
|
||||||
|
- Allow changing the output format, DPI of the pdftoppm command, and
|
||||||
|
the output format of the converter via the CONVERTER_GRAPHICS_BACKEND_CONFIG
|
||||||
|
setting. GitHub issues #256 #257 GitLab issue #416.
|
||||||
|
- Add support for workflow triggers.
|
||||||
|
- Add support for workflow actions.
|
||||||
|
- Add support for rendering workflows.
|
||||||
|
- Add support for unbinding sub menus.
|
||||||
|
- Fix mailing profile test view.
|
||||||
|
- Disregard the last 3 dots that mark the end of the YAML document.
|
||||||
|
- Add support for multiple dashboards.
|
||||||
|
- Add support for removing dashboard widgets.
|
||||||
|
- Convert document version view to item list view.
|
||||||
|
- Add support for browsing individual document versions.
|
||||||
|
- Add support for dropdown menus to the item list view template.
|
||||||
|
- Add support for preserving the file extension when downloading a document
|
||||||
|
version. GitLab #415.
|
||||||
|
- Split OCR app into OCR and parsing.
|
||||||
|
- Remove Folders app.
|
||||||
|
- Use the literal 'System' instead of the target name when
|
||||||
|
the action user in unknown.
|
||||||
|
- Remove the view to submit all document for OCR.
|
||||||
|
- When changing document types, don't delete the old metadata that is
|
||||||
|
also found in the new document type. GitLab issue #421.
|
||||||
|
- Add tag attach and tag remove events.
|
||||||
|
- Change the permission needed to attach and remove tags.
|
||||||
|
- Add HTTP POST workflow state action.
|
||||||
|
- Add access control grant workflow state action.
|
||||||
|
- Beta Python 3 support.
|
||||||
|
|
||||||
|
2.6.4 (2017-07-26)
|
||||||
|
==================
|
||||||
|
- Add missing replacements of reverse to resolve_url.
|
||||||
|
|
||||||
|
2.6.3 (2017-07-25)
|
||||||
|
==================
|
||||||
|
- Add makefile target to launch a PostgreSQL container.
|
||||||
|
- Use resolve_url instead of redirect to resolve the post login URL.
|
||||||
|
- Make the intialsetup and performupgrade management tasks work
|
||||||
|
with signals to allow customization from 3rd party apps.
|
||||||
|
- PEP8 cleanups.
|
||||||
|
- Add tag_ids keyword argument to the Source.handle_upload
|
||||||
|
model method. GitLab issue #413.
|
||||||
|
- Add overflow wrapping so wrap long titles in Firefox too.
|
||||||
|
- Makes Roles searchable. GitLab issue #402.
|
||||||
|
- Add line numbers to the debug and production loggers.
|
||||||
|
Add date and time to the production logger.
|
||||||
|
- Add support for generating setup.py from a template. GitLab
|
||||||
|
#149 #200.
|
||||||
|
- Add fade in animation to document images.
|
||||||
|
|
||||||
|
2.6.2 (2017-07-19)
|
||||||
|
==================
|
||||||
|
- Fix deprecation warning to prepare upgrade to Django 1.11 and 2.0.
|
||||||
|
- Fix document page zoom.
|
||||||
|
- Add support to run tests against a MySQL, Postgres or Oracle container.
|
||||||
|
- Improve tag widget customization by moving the markup to its own template.
|
||||||
|
- Fix document page widget appearance in the document page list view.
|
||||||
|
- Make document version order deterministic.
|
||||||
|
- Allow total page number instrospection of encrypted PDF with non ASCII user properties. GitLab issue #411.
|
||||||
|
- Oracle database compatibility update in the cabinets app. GitHub #258.
|
||||||
|
|
||||||
|
2.6.1 (2017-07-18)
|
||||||
|
==================
|
||||||
|
- Fix issue when editing or removing metadata from multiple documents.
|
||||||
|
|
||||||
|
2.6 (2017-07-18)
|
||||||
|
================
|
||||||
|
- Fix HTML mark up in window title. GitLab #397.
|
||||||
|
- Add support for emailing documents to a recipient list. GitLab #396.
|
||||||
|
- Backport metadata widget changes from @Macrobb. GitLab #377.
|
||||||
|
- Make users and group searchable.
|
||||||
|
- Add support for logging errors during in production mode.
|
||||||
|
Add COMMON_PRODUCTION_ERROR_LOG_PATH to control path of log file.
|
||||||
|
Defaults to mayan/error.log.
|
||||||
|
- Add support logging request exceptions.
|
||||||
|
- Add document list item view.
|
||||||
|
- Sort setting by namespace label and by global name second.
|
||||||
|
- Sort indexes by label.
|
||||||
|
- Fix cabinets permission and access control checking.
|
||||||
|
- The permission to add or remove documents to cabinets now applies to documents too.
|
||||||
|
- Equalize dashboard widgets heights.
|
||||||
|
- Switch the order of the DEFAULT_AUTHENTICATION_CLASSES of DRF. GitLab #400.
|
||||||
|
- Backport document's version list view permission.
|
||||||
|
- Improve code to unbind menu entries.
|
||||||
|
- Renamed the document type permission namespace from "Document setup" to "Document types".
|
||||||
|
- Add support for granting the document type edit, document type delete, and document type view
|
||||||
|
permissions to individual document type instances.
|
||||||
|
- Improved tests by testing for accesses.
|
||||||
|
- Increase the size of the mailing profile label field to 128 characters.
|
||||||
|
|
||||||
|
2.5.2 (2017-07-08)
|
||||||
|
==================
|
||||||
|
- Improve new document creation signal handling.
|
||||||
|
Fixes issue with duplicate scanning at upload.
|
||||||
|
|
||||||
|
2.5.1 (2017-07-08)
|
||||||
|
==================
|
||||||
|
- Update release target due to changes in PyPI.
|
||||||
|
|
||||||
|
2.5 (2017-07-07)
|
||||||
|
================
|
||||||
|
- Add view to download a document's OCR text. GitLab #215
|
||||||
|
- Add user configurable mailer. GitLab #286.
|
||||||
|
- Use Toasts library for screen messages.
|
||||||
|
- Reduce verbosity of some debug messages.
|
||||||
|
- Add new lineart transformation.
|
||||||
|
- Fix SANE source resolution field.
|
||||||
|
- About and Profile menu reorganization.
|
||||||
|
- PDF compatibility improvements.
|
||||||
|
- Office document coversion improvements.
|
||||||
|
- New metadata type setup UI.
|
||||||
|
- Duplicated document scan support.
|
||||||
|
- "Remember me" login support.
|
||||||
|
- Forgotten password restore via email.
|
||||||
|
- Document cache disabling.
|
||||||
|
- Translation improvements.
|
||||||
|
- Image loading improvements.
|
||||||
|
- Lower JavaScript memory utilization.
|
||||||
|
- HTML reponsive layout improvements.
|
||||||
|
- Make document deletion a background task.
|
||||||
|
- Unicode handling improvements.
|
||||||
|
- Python3 compatilibyt improvements.
|
||||||
|
- New screen messages using Toastr.
|
||||||
|
|
||||||
|
2.4 (2017-06-23)
|
||||||
|
================
|
||||||
|
- Add Django-mathfilters.
|
||||||
|
- Improve render of documents with no pages.
|
||||||
|
- Add SANE scanner document source.
|
||||||
|
- Added PDF orientation detection. GitLab issue #387.
|
||||||
|
- Fix repeated permission list API URL. GitLab issue #389.
|
||||||
|
- Fix role creation API endpoint not returning id. GitLab issue #390.
|
||||||
|
- Make tags, metadata types and cabinets searchable via the dynamic search API. GitLab issue #344.
|
||||||
|
- Add support for updating configuration options from environment variables.
|
||||||
|
- Add purgelocks management command. GitLab issue #221.
|
||||||
|
- Fix index rebuilding for multi value first levels. GitLab issue #391.
|
||||||
|
- Truncate views titles via the APPEARANCE_MAXIMUM_TITLE_LENGTH setting. GitLab issue #217.
|
||||||
|
- Add background task manager app. GitLab issue #132.
|
||||||
|
- Add link to show a document's OCR errors. GitLab issue #291.
|
||||||
|
|
||||||
|
2.3 (2017-06-08)
|
||||||
|
================
|
||||||
|
- Allow for bigger indexing expression templates.
|
||||||
|
- Auto select checkbox when updating metadata values. GitLab issue #371.
|
||||||
|
- Added support for passing the options allow-other and allow-root to the
|
||||||
|
FUSE index mirror. GitLab issue #385
|
||||||
|
- Add support for check for the latest released version of Mayan from the
|
||||||
|
About menu.
|
||||||
|
- Support for rebuilding specific indexes. GitLab issue #372.
|
||||||
|
- Rewrite document indexing code to be faster and use less locking.
|
||||||
|
- Use a predefined file path for the file lock.
|
||||||
|
- Catch documents with not document version when displaying their thumbnails.
|
||||||
|
- Document page navigation fix when using Mayan as a sub URL app.
|
||||||
|
- Add support for indexing on workflow state changes.
|
||||||
|
- Add search model list API endpoint.
|
||||||
|
|
||||||
|
2.2 (2017-04-26)
|
||||||
|
================
|
||||||
|
- Remove the installation app (GitLab #301).
|
||||||
|
- Add support for document page search
|
||||||
|
- Remove recent searches feature
|
||||||
|
- Remove dependency on the django-filetransfer library
|
||||||
|
- Fix height calculation in resize transformation
|
||||||
|
- Improve upgrade instructions
|
||||||
|
- New image caching pipeline
|
||||||
|
- New drop down menus for the documents, folders and tags app as well as for
|
||||||
|
the user links.
|
||||||
|
- New Dashboard view
|
||||||
|
- Moved licenses to their own module in every app
|
||||||
|
- Update project to work with Django 1.10.4.
|
||||||
|
- Tags are alphabetically ordered by label (GitLab #342).
|
||||||
|
- Stop loading theme fonts from the web (GitLab #343).
|
||||||
|
- Add support for attaching multiple tags (GitLab #307).
|
||||||
|
- Integrate the Cabinets app.
|
||||||
|
|
||||||
|
2.1.11 (2017-03-14)
|
||||||
|
===================
|
||||||
|
- Added a quick rename serializer to the document type API serializer.
|
||||||
|
- Added per document type, workflow list API view.
|
||||||
|
- Mayan EDMS was adopted a version 1.1 of the Linux Foundation Developer Certificate of Origin.
|
||||||
|
- Added the detail url of a permission in the permission serializer.
|
||||||
|
- Added endpoints for the ACL app API.
|
||||||
|
- Implemented document workflows transition ACLs. GitLab issue #321.
|
||||||
|
- Add document comments API endpoints. GitHub issue #249.
|
||||||
|
- Add support for overriding the Celery class.
|
||||||
|
- Changed the document upload view in source app to not use the HTTP referer
|
||||||
|
URL blindly, but instead recompose the URL using known view name. Needed
|
||||||
|
when integrating Mayan EDMS into other app via using iframes.
|
||||||
|
- Addes size field to the document version serializer.
|
||||||
|
- Removed the serializer from the deleted document restore API endpoint.
|
||||||
|
- Added support for adding or editing document types to smart links via the
|
||||||
|
API.
|
||||||
|
|
||||||
|
2.1.10 (2017-02-13)
|
||||||
|
===================
|
||||||
|
- Update Makefile to use twine for releases.
|
||||||
|
- Add Makefile target to make test releases.
|
||||||
|
|
||||||
|
2.1.9 (2017-02-13)
|
||||||
|
==================
|
||||||
|
- Update make file to Workaround long standing pypa wheel bug #99
|
||||||
|
|
||||||
|
2.1.8 (2017-02-12)
|
||||||
|
==================
|
||||||
|
- Fixes in the trashed document API endpoints.
|
||||||
|
- Improved tags API PUT and PATCH endpoints.
|
||||||
|
- Bulk document adding when creating and editing tags.
|
||||||
|
- The version of django-mptt is preserved in case mayan-cabinets is installed.
|
||||||
|
- Add Django GPG API endpoints for singing keys.
|
||||||
|
- Add API endpoints for the document states (workflows) app.
|
||||||
|
- Add API endpoints for the messsage of the day (MOTD) app.
|
||||||
|
- Add Smart link API endpoints.
|
||||||
|
- Add writable versions of the Document and Document Type serializers (GitLab issues #348 and #349).
|
||||||
|
- Close GitLab issue #310 "Metadata's lookup with chinese messages when new document"
|
||||||
|
|
||||||
|
2.1.7 (2017-02-01)
|
||||||
|
==================
|
||||||
|
- Improved user management API endpoints.
|
||||||
|
- Improved permissions API endpoints.
|
||||||
|
- Improvements in the API tests of a few apps.
|
||||||
|
- Addition Content type list API view to the common app.
|
||||||
|
- Add API endpoints to the events app.
|
||||||
|
- Enable the parser and validation fields of the metadata serializer.
|
||||||
|
|
||||||
|
2.1.6 (2016-11-23)
|
||||||
|
==================
|
||||||
|
- Fix variable name typo in the rotation transformation class.
|
||||||
|
- Update translations
|
||||||
|
|
||||||
|
2.1.5 (2016-11-08)
|
||||||
|
==================
|
||||||
|
- Backport resize transformation math operation fix (GitLab #319).
|
||||||
|
- Update Pillow to 3.1.2 (Security fix).
|
||||||
|
- Backport zoom transformation performance improvement (GitLab #334).
|
||||||
|
- Backport trash can navigation link resolution fix (GitLab #331).
|
||||||
|
- Improve documentation regarding the use of GPG version 1 (GitLab #333).
|
||||||
|
- Fix ACL create view HTML response type. (GitLab #335).
|
||||||
|
- Expland staging folder and watch folder explanation.
|
||||||
|
|
||||||
|
2.1.4 (2016-10-28)
|
||||||
|
==================
|
||||||
|
- Add missing link to the 2.1.3 release notes in the index file.
|
||||||
|
- Improve TempfileCheckMixin.
|
||||||
|
- Fix statistics namespace list display view.
|
||||||
|
- Fix events list display view.
|
||||||
|
- Update required Django version to 1.8.15.
|
||||||
|
- Update required python-gnupg version to 0.3.9.
|
||||||
|
- Improved orphaned temporary files test mixin.
|
||||||
|
- Re-enable and improve GitLab CI MySQL testing.
|
||||||
|
- Improved GPG handling.
|
||||||
|
- New GPG backend system.
|
||||||
|
- Minor documentation updates.
|
||||||
|
|
||||||
|
2.1.3 (2016-06-29)
|
||||||
|
==================
|
||||||
|
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296.
|
||||||
|
- Start using self.setdout instead of print as per documentation.
|
||||||
|
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
||||||
|
- Normalize handling of temporary file and directory creation.
|
||||||
|
- Fix GitLab issue #309, "Temp files quickly filling-up my /tmp (1GB tmpfs)".
|
||||||
|
- Explicitly check for residual temporary files in tests.
|
||||||
|
- Add missing temporary file cleanup for office documents.
|
||||||
|
- Fix file descriptor leak in the document signature download test.
|
||||||
|
|
||||||
|
2.1.2 (2016-05-20)
|
||||||
|
==================
|
||||||
|
- Sort document languages and user profile locale language lists. GitLab issue #292.
|
||||||
|
- 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)
|
||||||
|
==================
|
||||||
|
- Install testing dependencies when installing development dependencies.
|
||||||
|
- Fix GitLab issue #250 "Empty optional lookup metadata trigger validation error".
|
||||||
|
- Fix OCR API test.
|
||||||
|
- Move metadata form value validation to .clean() method.
|
||||||
|
- Only extract validation error messages from ValidationError exception instances.
|
||||||
|
- Don't store empty metadata value if the update checkbox is not checked.
|
||||||
|
- Add 2 second delay to document version tests to workaround MySQL limitation.
|
||||||
|
- Strip HTML tags from the browser title.
|
||||||
|
- Remove Docker and Docker Compose files.
|
||||||
|
|
||||||
|
|
||||||
|
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 #245, "Add multiple metadata not possible"
|
||||||
|
- Updated Vagrantfile to provision a production box too.
|
||||||
|
|
||||||
|
|
||||||
|
2.0 (2015-12-04)
|
||||||
|
================
|
||||||
|
- New source homepage: https://gitlab.com/mayan-edms/mayan-edms
|
||||||
|
- Update to Django 1.7
|
||||||
|
- New Bootstrap Frontend UI
|
||||||
|
- Easier theming and rebranding
|
||||||
|
- Improved page navigation interface
|
||||||
|
- Menu reorganization
|
||||||
|
- Removal of famfam icon set
|
||||||
|
- Improved document preview generation
|
||||||
|
- Document submission for OCR changed to POST
|
||||||
|
- New YAML based settings system
|
||||||
|
- Removal of auto admin creation as separate app
|
||||||
|
- Removal of dependencies
|
||||||
|
- ACL system refactor
|
||||||
|
- Object access control inheritance
|
||||||
|
- Removal of anonymous user support
|
||||||
|
- Metadata validators refactor
|
||||||
|
- Trash can support
|
||||||
|
- Retention policies
|
||||||
|
- Support for sharing indexes as FUSE filesystems
|
||||||
|
- Clickable preview images titles
|
||||||
|
- Removal of eval
|
||||||
|
- Smarter OCR, per page parsing or OCR fallback
|
||||||
|
- Improve failure tolerance (not all Operational Errors are critical now)
|
||||||
|
- RGB tags
|
||||||
|
- Default document type and default document source
|
||||||
|
- Link unbinding
|
||||||
|
- Statistics refactor
|
||||||
|
- Apps merge
|
||||||
|
- New signals
|
||||||
|
- Test improvements
|
||||||
|
- Indexes recalculation after document creation too
|
||||||
|
- Upgrade command
|
||||||
|
- OCR data moved to ocr app from documents app
|
||||||
|
- New internal document creation workflow return a document stub
|
||||||
|
- Auto console debug logging during development and info during production
|
||||||
|
- New class based and menu based navigation system
|
||||||
|
- New class based transformations
|
||||||
|
- Usage of Font Awesome icons set
|
||||||
|
- Management command to remove obsolete permissions: `purgepermissions`
|
||||||
|
- Normalization of 'title' and 'name' fields to 'label'
|
||||||
|
- Improved API, now at version 1
|
||||||
|
- Invert page title/project name order in browser title
|
||||||
|
- Django's class based views pagination
|
||||||
|
- Reduction of text strings
|
||||||
|
- Removal of the CombinedSource class
|
||||||
|
- Removal of default class ACLs
|
||||||
|
- Removal of the ImageMagick and GraphicsMagick converter backends
|
||||||
|
- Remove support for applying roles to new users automatically
|
||||||
|
- Removal of the DOCUMENT_RESTRICTIONS_OVERRIDE permission
|
||||||
|
- Removed the page_label field
|
||||||
2
LICENSE
2
LICENSE
@@ -1,4 +1,4 @@
|
|||||||
Copyright 2011-2015 Roberto Rosario
|
Copyright 2011-2018 Roberto Rosario
|
||||||
|
|
||||||
Licensed under the Apache License, Version 2.0 (the "License");
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
you may not use this file except in compliance with the License.
|
you may not use this file except in compliance with the License.
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
include README.md LICENSE HISTORY.rst mayan/LICENSE
|
include README.md LICENSE HISTORY.rst mayan/LICENSE
|
||||||
recursive-include mayan/apps *.txt *.html *.css *.ico *.png *.jpg *.js *.po *.mo *.ttf *.woff *.woff2 *.gif *.eot *.svg *.doc *.pdf *.tiff *.sig *.asc *.gpg *.zip
|
recursive-include mayan/apps *.txt *.html *.css *.ico *.png *.jpg *.js *.mo *.ttf *.woff *.woff2 *.gif *.eot *.svg *.doc *.pdf *.tiff *.sig *.asc *.gpg *.zip *.tar *.gz *.bz2 *.tmpl
|
||||||
global-exclude mayan/settings/local.py mayan/settings/travis/* mayan/media/*
|
global-exclude mayan/settings/local.py *.po
|
||||||
|
prune mayan/apps/*/static/*/node_modules/*
|
||||||
|
prune mayan/settings/travis/*
|
||||||
|
prune mayan/media/*
|
||||||
|
|||||||
249
Makefile
249
Makefile
@@ -1,70 +1,20 @@
|
|||||||
.PHONY: clean-pyc clean-build
|
.PHONY: clean-pyc clean-build
|
||||||
|
|
||||||
|
|
||||||
help:
|
help:
|
||||||
@echo
|
@echo "Usage: make <target>\n"
|
||||||
@echo "clean-build - Remove build artifacts."
|
@awk 'BEGIN {FS = ":.*##"} /^[a-zA-Z_-]+:.*?## / { printf " * %-40s -%s\n", $$1, $$2 }' $(MAKEFILE_LIST)|sort
|
||||||
@echo "clean-pyc - Remove Python artifacts."
|
|
||||||
@echo "clean - Remove Python and build artifacts."
|
|
||||||
@echo "generate_setup - Create and updated setup.py"
|
|
||||||
|
|
||||||
@echo "test-all - Run all tests."
|
|
||||||
@echo "test MODULE=<python module name> - Run tests for a single app, module or test class."
|
|
||||||
@echo "test-with-postgres-all - Run all tests against a Postgres database container."
|
|
||||||
@echo "test-postgres MODULE=<python module name> - Run tests for a single app, module or test class against a Postgres database container."
|
|
||||||
@echo "test-with-mysql-all - Run all tests against a MySQL database container."
|
|
||||||
@echo "test-mysql MODULE=<python module name> - Run tests for a single app, module or test class against a MySQL database container."
|
|
||||||
@echo "test-with-oracle-all - Run all tests against a Oracle database container."
|
|
||||||
@echo "test-oracle MODULE=<python module name> - Run tests for a single app, module or test class against a Oracle database container."
|
|
||||||
|
|
||||||
@echo "docs_serve - Run the livehtml documentation generator."
|
|
||||||
|
|
||||||
@echo "translations_make - Refresh all translation files."
|
|
||||||
@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 "test_release - Package (sdist and wheel) and upload to the PyPI test server."
|
|
||||||
@echo "release_test_via_docker_ubuntu - Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder."
|
|
||||||
@echo "release_test_via_docker_alpine - Package (sdist and wheel) and upload to the PyPI test server using an Alpine Docker builder."
|
|
||||||
@echo "release_via_docker_ubuntu - Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder."
|
|
||||||
@echo "release_via_docker_alpine - Package (sdist and wheel) and upload to PyPI using an Alpine Docker builder."
|
|
||||||
@echo "test_sdist_via_docker_ubuntu - Make an sdist packange and test it using an Ubuntu Docker container."
|
|
||||||
@echo "test_wheel_via_docker_ubuntu - Make a wheel package and test it using an Ubuntu Docker container."
|
|
||||||
|
|
||||||
@echo "runserver - Run the development server."
|
|
||||||
@echo "runserver_plus - Run the Django extension's development server."
|
|
||||||
@echo "shell_plus - Run the shell_plus command."
|
|
||||||
|
|
||||||
@echo "docker_services_on - Launch and initialize production-like services using Docker (Postgres and Redis)."
|
|
||||||
@echo "docker_services_off - Stop and delete the Docker production-like services."
|
|
||||||
@echo "docker_services_frontend - Launch a front end instance that uses the production-like services."
|
|
||||||
@echo "docker_services_worker - Launch a worker instance that uses the production-like services."
|
|
||||||
@echo "docker_service_mysql_on - Launch and initialize a MySQL Docker container."
|
|
||||||
@echo "docker_service_mysql_off - Stop and delete the MySQL Docker container."
|
|
||||||
@echo "docker_service_postgres_on - Launch and initialize a PostgreSQL Docker container."
|
|
||||||
@echo "docker_service_postgres_off - Stop and delete the PostgreSQL Docker container."
|
|
||||||
|
|
||||||
@echo "safety_check - Run a package safety check."
|
|
||||||
|
|
||||||
|
|
||||||
# Cleaning
|
# Cleaning
|
||||||
|
|
||||||
|
clean: ## Remove Python and build artifacts.
|
||||||
clean: clean-build clean-pyc
|
clean: clean-build clean-pyc
|
||||||
|
|
||||||
clean-build:
|
clean-build: ## Remove build artifacts.
|
||||||
rm -fr build/
|
rm -fr build/
|
||||||
rm -fr dist/
|
rm -fr dist/
|
||||||
rm -fr *.egg-info
|
rm -fr *.egg-info
|
||||||
|
|
||||||
clean-pyc:
|
clean-pyc: ## Remove Python artifacts.
|
||||||
find . -name '*.pyc' -exec rm -f {} +
|
find . -name '*.pyc' -exec rm -f {} +
|
||||||
find . -name '*.pyo' -exec rm -f {} +
|
find . -name '*.pyo' -exec rm -f {} +
|
||||||
find . -name '*~' -exec rm -f {} +
|
find . -name '*~' -exec rm -f {} +
|
||||||
@@ -72,25 +22,29 @@ clean-pyc:
|
|||||||
|
|
||||||
# Testing
|
# Testing
|
||||||
|
|
||||||
test:
|
test: clean-pyc
|
||||||
./manage.py test $(MODULE) --settings=mayan.settings.testing --nomigrations
|
test: ## MODULE=<python module name> - Run tests for a single app, module or test class.
|
||||||
|
./manage.py test $(MODULE) --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS)
|
||||||
|
|
||||||
test-all:
|
test-all: ## Run all tests.
|
||||||
./manage.py test --mayan-apps --settings=mayan.settings.testing --nomigrations
|
test-all: clean-pyc
|
||||||
|
./manage.py test --mayan-apps --settings=mayan.settings.testing.development --nomigrations $(ARGUMENTS)
|
||||||
|
|
||||||
test-launch-postgres:
|
test-launch-postgres:
|
||||||
@docker rm -f test-postgres || true
|
@docker rm -f test-postgres || true
|
||||||
@docker volume rm test-postgres || true
|
@docker volume rm test-postgres || true
|
||||||
docker run -d --name test-postgres -p 5432:5432 -v test-postgres:/var/lib/postgresql/data healthcheck/postgres
|
docker run -d --name test-postgres -p 5432:5432 -v test-postgres:/var/lib/postgresql/data healthcheck/postgres
|
||||||
sudo apt-get install -qq libpq-dev
|
sudo apt-get install -q libpq-dev
|
||||||
pip install psycopg2
|
pip install psycopg2
|
||||||
while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done
|
while ! docker inspect --format='{{json .State.Health}}' test-postgres|grep 'Status":"healthy"'; do sleep 1; done
|
||||||
|
|
||||||
|
test-with-postgres: ## MODULE=<python module name> - Run tests for a single app, module or test class against a Postgres database container.
|
||||||
test-with-postgres: test-launch-postgres
|
test-with-postgres: test-launch-postgres
|
||||||
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_postgres --nomigrations
|
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_postgres --nomigrations
|
||||||
@docker rm -f test-postgres || true
|
@docker rm -f test-postgres || true
|
||||||
@docker volume rm test-postgres || true
|
@docker volume rm test-postgres || true
|
||||||
|
|
||||||
|
test-with-postgres-all: ## Run all tests against a Postgres database container.
|
||||||
test-with-postgres-all: test-launch-postgres
|
test-with-postgres-all: test-launch-postgres
|
||||||
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_postgres --nomigrations
|
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_postgres --nomigrations
|
||||||
@docker rm -f test-postgres || true
|
@docker rm -f test-postgres || true
|
||||||
@@ -100,16 +54,19 @@ test-launch-mysql:
|
|||||||
@docker rm -f test-mysql || true
|
@docker rm -f test-mysql || true
|
||||||
@docker volume rm test-mysql || true
|
@docker volume rm test-mysql || true
|
||||||
docker run -d --name test-mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan -v test-mysql:/var/lib/mysql healthcheck/mysql
|
docker run -d --name test-mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan -v test-mysql:/var/lib/mysql healthcheck/mysql
|
||||||
sudo apt-get install -qq libmysqlclient-dev mysql-client
|
sudo apt-get install -q libmysqlclient-dev mysql-client
|
||||||
pip install mysql-python
|
pip install mysqlclient
|
||||||
while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done
|
while ! docker inspect --format='{{json .State.Health}}' test-mysql|grep 'Status":"healthy"'; do sleep 1; done
|
||||||
mysql -h 127.0.0.1 -P 3306 -uroot -e "set global character_set_server=utf8mb4;"
|
mysql -h 127.0.0.1 -P 3306 -uroot -e "set global character_set_server=utf8mb4;"
|
||||||
|
|
||||||
|
test-with-mysql: ## MODULE=<python module name> - Run tests for a single app, module or test class against a MySQL database container.
|
||||||
test-with-mysql: test-launch-mysql
|
test-with-mysql: test-launch-mysql
|
||||||
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_mysql --nomigrations
|
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_mysql --nomigrations
|
||||||
@docker rm -f test-mysql || true
|
@docker rm -f test-mysql || true
|
||||||
@docker volume rm test-mysql || true
|
@docker volume rm test-mysql || true
|
||||||
|
|
||||||
|
|
||||||
|
test-with-mysql-all: ## Run all tests against a MySQL database container.
|
||||||
test-with-mysql-all: test-launch-mysql
|
test-with-mysql-all: test-launch-mysql
|
||||||
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_mysql --nomigrations
|
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_mysql --nomigrations
|
||||||
@docker rm -f test-mysql || true
|
@docker rm -f test-mysql || true
|
||||||
@@ -124,11 +81,13 @@ test-launch-oracle:
|
|||||||
while ! nc -z 127.0.0.1 49161; do sleep 1; done
|
while ! nc -z 127.0.0.1 49161; do sleep 1; done
|
||||||
sleep 10
|
sleep 10
|
||||||
|
|
||||||
|
test-with-oracle: ## MODULE=<python module name> - Run tests for a single app, module or test class against a Oracle database container.
|
||||||
test-with-oracle: test-launch-oracle
|
test-with-oracle: test-launch-oracle
|
||||||
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_oracle --nomigrations
|
./manage.py test $(MODULE) --settings=mayan.settings.testing.docker.db_oracle --nomigrations
|
||||||
@docker rm -f test-oracle || true
|
@docker rm -f test-oracle || true
|
||||||
@docker volume rm test-oracle || true
|
@docker volume rm test-oracle || true
|
||||||
|
|
||||||
|
test-with-oracle-all: ## Run all tests against a Oracle database container.
|
||||||
test-with-oracle-all: test-launch-oracle
|
test-with-oracle-all: test-launch-oracle
|
||||||
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_oracle --nomigrations
|
./manage.py test --mayan-apps --settings=mayan.settings.testing.docker.db_oracle --nomigrations
|
||||||
@docker rm -f test-oracle || true
|
@docker rm -f test-oracle || true
|
||||||
@@ -136,59 +95,56 @@ test-with-oracle-all: test-launch-oracle
|
|||||||
|
|
||||||
# Documentation
|
# Documentation
|
||||||
|
|
||||||
docs_serve:
|
docs-serve: ## Run the livehtml documentation generator.
|
||||||
cd docs;make livehtml
|
cd docs;make livehtml
|
||||||
|
|
||||||
|
docs-spellcheck: ## Spellcheck the documentation.
|
||||||
|
sphinx-build -b spelling -d docs/_build/ docs docs/_build/spelling
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
|
|
||||||
translations_make:
|
translations-make: ## Refresh all translation files.
|
||||||
contrib/scripts/process_messages.py -m
|
contrib/scripts/process_messages.py -m
|
||||||
|
|
||||||
translations_compile:
|
translations-compile: ## Compile all translation files.
|
||||||
contrib/scripts/process_messages.py -c
|
contrib/scripts/process_messages.py -c
|
||||||
|
|
||||||
translations_push:
|
translations-push: ## Upload all translation files to Transifex.
|
||||||
tx push -s
|
tx push -s
|
||||||
|
|
||||||
translations_pull:
|
translations-pull: ## Download all translation files from Transifex.
|
||||||
tx pull -f
|
tx pull -f
|
||||||
|
|
||||||
|
|
||||||
# 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
|
|
||||||
|
|
||||||
generate_setup:
|
|
||||||
@./generate_setup.py
|
|
||||||
@echo "Complete."
|
|
||||||
|
|
||||||
# Releases
|
# Releases
|
||||||
|
|
||||||
|
increase-version: ## Increase the version number of the entire project's files.
|
||||||
|
@VERSION=`grep "__version__ =" mayan/__init__.py| cut -d\' -f 2|./increase_version.py - $(PART)`; \
|
||||||
|
BUILD=`echo $$VERSION|awk '{split($$VERSION,a,"."); printf("0x%02d%02d%02d\n", a[1],a[2], a[3])}'`; \
|
||||||
|
sed -i -e "s/__build__ = 0x[0-9]*/__build__ = $${BUILD}/g" mayan/__init__.py; \
|
||||||
|
sed -i -e "s/__version__ = '[0-9\.]*'/__version__ = '$${VERSION}'/g" mayan/__init__.py; \
|
||||||
|
echo $$VERSION > docker/rootfs/version
|
||||||
|
make generate-setup
|
||||||
|
|
||||||
test_release: clean wheel
|
python-test-release: ## Package (sdist and wheel) and upload to the PyPI test server.
|
||||||
|
python-test-release: clean wheel
|
||||||
twine upload dist/* -r testpypi
|
twine upload dist/* -r testpypi
|
||||||
@echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms"
|
@echo "Test with: pip install -i https://testpypi.python.org/pypi mayan-edms"
|
||||||
|
|
||||||
release: clean wheel
|
python-release: ## Package (sdist and wheel) and upload a release.
|
||||||
|
python-release: clean python-wheel
|
||||||
twine upload dist/* -r pypi
|
twine upload dist/* -r pypi
|
||||||
|
|
||||||
sdist: clean
|
python-sdist: ## Build the source distribution package.
|
||||||
|
python-sdist: clean
|
||||||
python setup.py sdist
|
python setup.py sdist
|
||||||
ls -l dist
|
ls -l dist
|
||||||
|
|
||||||
wheel: clean sdist
|
python-wheel: ## Build the wheel distribution package.
|
||||||
|
python-wheel: clean python-sdist
|
||||||
pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz
|
pip wheel --no-index --no-deps --wheel-dir dist dist/*.tar.gz
|
||||||
ls -l dist
|
ls -l dist
|
||||||
|
|
||||||
release_test_via_docker_ubuntu:
|
python-release-test-via-docker-ubuntu: ## Package (sdist and wheel) and upload to the PyPI test server using an Ubuntu Docker builder.
|
||||||
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
||||||
locale-gen en_US.UTF-8 && \
|
locale-gen en_US.UTF-8 && \
|
||||||
@@ -199,48 +155,23 @@ release_test_via_docker_ubuntu:
|
|||||||
apt-get install make python-pip -y && \
|
apt-get install make python-pip -y && \
|
||||||
pip install -r requirements/build.txt && \
|
pip install -r requirements/build.txt && \
|
||||||
cp -r /host_home/.pypirc ~/.pypirc && \
|
cp -r /host_home/.pypirc ~/.pypirc && \
|
||||||
make test_release"
|
make test-release"
|
||||||
|
|
||||||
release_via_docker_ubuntu:
|
python-release-via-docker-ubuntu: ## Package (sdist and wheel) and upload to PyPI using an Ubuntu Docker builder.
|
||||||
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
||||||
|
apt-get update && \
|
||||||
|
apt-get -y install locales && \
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
||||||
locale-gen en_US.UTF-8 && \
|
locale-gen en_US.UTF-8 && \
|
||||||
update-locale LANG=en_US.UTF-8 && \
|
update-locale LANG=en_US.UTF-8 && \
|
||||||
export LC_ALL=en_US.UTF-8 && \
|
export LC_ALL=en_US.UTF-8 && \
|
||||||
cp -r /host_source/* . && \
|
cp -r /host_source/* . && \
|
||||||
apt-get update && \
|
|
||||||
apt-get install make python-pip -y && \
|
apt-get install make python-pip -y && \
|
||||||
pip install -r requirements/build.txt && \
|
pip install -r requirements/build.txt && \
|
||||||
cp -r /host_home/.pypirc ~/.pypirc && \
|
cp -r /host_home/.pypirc ~/.pypirc && \
|
||||||
make release"
|
make release"
|
||||||
|
|
||||||
release_test_via_docker_alpine:
|
test-sdist-via-docker-ubuntu: ## Make an sdist package and test it using an Ubuntu Docker container.
|
||||||
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\
|
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
|
||||||
locale-gen en_US.UTF-8 && \
|
|
||||||
update-locale LANG=en_US.UTF-8 && \
|
|
||||||
export LC_ALL=en_US.UTF-8 && \
|
|
||||||
cp -r /host_source/* . && \
|
|
||||||
apk update && \
|
|
||||||
apk add python2 py2-pip make && \
|
|
||||||
pip install -r requirements/build.txt && \
|
|
||||||
cp -r /host_home/.pypirc ~/.pypirc && \
|
|
||||||
make test_release"
|
|
||||||
|
|
||||||
release_via_docker_alpine:
|
|
||||||
docker run --rm --name mayan_release -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source alpine /bin/busybox sh -c "\
|
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
|
||||||
locale-gen en_US.UTF-8 && \
|
|
||||||
update-locale LANG=en_US.UTF-8 && \
|
|
||||||
export LC_ALL=en_US.UTF-8 && \
|
|
||||||
cp -r /host_source/* . && \
|
|
||||||
apk update && \
|
|
||||||
apk add python2 py2-pip make && \
|
|
||||||
pip install -r requirements/build.txt && \
|
|
||||||
cp -r /host_home/.pypirc ~/.pypirc && \
|
|
||||||
make release"
|
|
||||||
|
|
||||||
test_sdist_via_docker_ubuntu:
|
|
||||||
docker run --rm --name mayan_sdist_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
docker run --rm --name mayan_sdist_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
||||||
cp -r /host_source/* . && \
|
cp -r /host_source/* . && \
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
||||||
@@ -250,10 +181,10 @@ test_sdist_via_docker_ubuntu:
|
|||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
|
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
|
||||||
pip install -r requirements/development.txt && \
|
pip install -r requirements/development.txt && \
|
||||||
make sdist_test_suit \
|
make sdist-test-suit \
|
||||||
"
|
"
|
||||||
|
|
||||||
test_wheel_via_docker_ubuntu:
|
test-wheel-via-docker-ubuntu: ## Make a wheel package and test it using an Ubuntu Docker container.
|
||||||
docker run --rm --name mayan_wheel_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
docker run --rm --name mayan_wheel_test -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source ubuntu:16.04 /bin/bash -c "\
|
||||||
cp -r /host_source/* . && \
|
cp -r /host_source/* . && \
|
||||||
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
echo "LC_ALL=\"en_US.UTF-8\"" >> /etc/default/locale && \
|
||||||
@@ -263,10 +194,10 @@ test_wheel_via_docker_ubuntu:
|
|||||||
apt-get update && \
|
apt-get update && \
|
||||||
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
|
apt-get install make python-pip libreoffice tesseract-ocr tesseract-ocr-deu poppler-utils -y && \
|
||||||
pip install -r requirements/development.txt && \
|
pip install -r requirements/development.txt && \
|
||||||
make wheel_test_suit \
|
make wheel-test-suit \
|
||||||
"
|
"
|
||||||
|
|
||||||
sdist_test_suit: sdist
|
python-sdist-test-suit: sdist
|
||||||
rm -f -R _virtualenv
|
rm -f -R _virtualenv
|
||||||
virtualenv _virtualenv
|
virtualenv _virtualenv
|
||||||
sh -c '\
|
sh -c '\
|
||||||
@@ -277,7 +208,7 @@ sdist_test_suit: sdist
|
|||||||
_virtualenv/bin/mayan-edms.py test --mayan-apps \
|
_virtualenv/bin/mayan-edms.py test --mayan-apps \
|
||||||
'
|
'
|
||||||
|
|
||||||
wheel_test_suit: wheel
|
python-wheel-test-suit: wheel
|
||||||
rm -f -R _virtualenv
|
rm -f -R _virtualenv
|
||||||
virtualenv _virtualenv
|
virtualenv _virtualenv
|
||||||
sh -c '\
|
sh -c '\
|
||||||
@@ -288,53 +219,95 @@ wheel_test_suit: wheel
|
|||||||
_virtualenv/bin/mayan-edms.py test --mayan-apps \
|
_virtualenv/bin/mayan-edms.py test --mayan-apps \
|
||||||
'
|
'
|
||||||
|
|
||||||
|
generate-setup: ## Create and update the setup.py file.
|
||||||
|
generate-setup: generate-requirements
|
||||||
|
@./generate_setup.py
|
||||||
|
@echo "Complete."
|
||||||
|
|
||||||
|
generate-requirements: ## Generate all requirements files from the project depedency declarations.
|
||||||
|
@./manage.py generaterequirements build > requirements/build.txt
|
||||||
|
@./manage.py generaterequirements development > requirements/development.txt
|
||||||
|
@./manage.py generaterequirements testing > requirements/testing-base.txt
|
||||||
|
@./manage.py generaterequirements production --exclude=django > requirements/base.txt
|
||||||
|
@./manage.py generaterequirements production --only=django > requirements/common.txt
|
||||||
|
|
||||||
# Dev server
|
# Dev server
|
||||||
|
|
||||||
runserver:
|
runserver: ## Run the development server.
|
||||||
./manage.py runserver --settings=mayan.settings.development
|
./manage.py runserver --settings=mayan.settings.development $(ADDRPORT)
|
||||||
|
|
||||||
runserver_plus:
|
runserver_plus: ## Run the Django extension's development server.
|
||||||
./manage.py runserver_plus --settings=mayan.settings.development
|
./manage.py runserver_plus --settings=mayan.settings.development $(ADDRPORT)
|
||||||
|
|
||||||
shell_plus:
|
shell_plus: ## Run the shell_plus command.
|
||||||
./manage.py shell_plus --settings=mayan.settings.development
|
./manage.py shell_plus --settings=mayan.settings.development
|
||||||
|
|
||||||
docker_services_on:
|
test-with-docker-services-on: ## Launch and initialize production-like services using Docker (Postgres and Redis).
|
||||||
docker run -d --name redis -p 6379:6379 redis
|
docker run -d --name redis -p 6379:6379 redis
|
||||||
docker run -d --name postgres -p 5432:5432 postgres
|
docker run -d --name postgres -p 5432:5432 postgres
|
||||||
while ! nc -z 127.0.0.1 6379; do sleep 1; done
|
while ! nc -z 127.0.0.1 6379; do sleep 1; done
|
||||||
while ! nc -z 127.0.0.1 5432; do sleep 1; done
|
while ! nc -z 127.0.0.1 5432; do sleep 1; done
|
||||||
sleep 2
|
sleep 4
|
||||||
./manage.py initialsetup --settings=mayan.settings.staging.docker
|
./manage.py initialsetup --settings=mayan.settings.staging.docker
|
||||||
|
|
||||||
docker_services_off:
|
test-with-docker-services-off: ## Stop and delete the Docker production-like services.
|
||||||
docker stop postgres redis
|
docker stop postgres redis
|
||||||
docker rm postgres redis
|
docker rm postgres redis
|
||||||
|
|
||||||
docker_services_frontend:
|
test-with-docker-frontend: ## Launch a front end instance that uses the production-like services.
|
||||||
./manage.py runserver --settings=mayan.settings.staging.docker
|
./manage.py runserver --settings=mayan.settings.staging.docker
|
||||||
|
|
||||||
docker_services_worker:
|
test-with-docker-worker: ## Launch a worker instance that uses the production-like services.
|
||||||
./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair
|
./manage.py celery worker --settings=mayan.settings.staging.docker -B -l INFO -O fair
|
||||||
|
|
||||||
docker_service_mysql_on:
|
docker-mysql-on: ## Launch and initialize a MySQL Docker container.
|
||||||
docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql
|
docker run -d --name mysql -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=True -e MYSQL_DATABASE=mayan_edms mysql
|
||||||
while ! nc -z 127.0.0.1 3306; do sleep 1; done
|
while ! nc -z 127.0.0.1 3306; do sleep 1; done
|
||||||
|
|
||||||
docker_service_mysql_off:
|
docker-mysql-off: ## Stop and delete the MySQL Docker container.
|
||||||
docker stop mysql
|
docker stop mysql
|
||||||
docker rm mysql
|
docker rm mysql
|
||||||
|
|
||||||
docker_service_postgres_on:
|
docker-postgres-on: ## Launch and initialize a PostgreSQL Docker container.
|
||||||
docker run -d --name postgres -p 5432:5432 postgres
|
docker run -d --name postgres -p 5432:5432 postgres
|
||||||
while ! nc -z 127.0.0.1 5432; do sleep 1; done
|
while ! nc -z 127.0.0.1 5432; do sleep 1; done
|
||||||
|
|
||||||
docker_service_postgres_off:
|
docker-postgres-off: ## Stop and delete the PostgreSQL Docker container.
|
||||||
docker stop postgres
|
docker stop postgres
|
||||||
docker rm postgres
|
docker rm postgres
|
||||||
|
|
||||||
|
|
||||||
# Security
|
# Security
|
||||||
|
|
||||||
safety_check:
|
safety-check: ## Run a package safety check.
|
||||||
safety check
|
safety check
|
||||||
|
|
||||||
|
|
||||||
|
# Other
|
||||||
|
find-gitignores: ## Find stray .gitignore files.
|
||||||
|
@export FIND_GITIGNORES=`find -name '.gitignore'| wc -l`; \
|
||||||
|
if [ $${FIND_GITIGNORES} -gt 1 ] ;then echo "More than one .gitignore found."; fi
|
||||||
|
|
||||||
|
python-build:
|
||||||
|
docker rm -f mayan-edms-build || true && \
|
||||||
|
docker run --rm --name mayan-edms-build -v $(HOME):/host_home:ro -v `pwd`:/host_source -w /source python:2-slim sh -c "\
|
||||||
|
rm /host_source/dist -R || true && \
|
||||||
|
mkdir /host_source/dist || true && \
|
||||||
|
export LC_ALL=C.UTF-8 && \
|
||||||
|
cp -r /host_source/* . && \
|
||||||
|
apt-get update && \
|
||||||
|
apt-get install -y make && \
|
||||||
|
pip install -r requirements/build.txt && \
|
||||||
|
make wheel && \
|
||||||
|
cp dist/* /host_source/dist/"
|
||||||
|
|
||||||
|
check-readme: ## Checks validity of the README.rst file for PyPI publication.
|
||||||
|
python setup.py check -r -s
|
||||||
|
|
||||||
|
check-missing-migrations: ## Make sure all models have proper migrations.
|
||||||
|
./manage.py makemigrations --dry-run --noinput --check
|
||||||
|
|
||||||
|
setup-dev-environment: ## Bootstrap a virtualenv by install all dependencies to start developing.
|
||||||
|
pip install -r requirements.txt -r requirements/development.txt -r requirements/testing-base.txt -r requirements/documentation.txt -r requirements/build.txt
|
||||||
|
|
||||||
|
-include docker/Makefile
|
||||||
|
|||||||
20
README.md
20
README.md
@@ -3,6 +3,9 @@
|
|||||||
[![coverage][cover]][cover-url]
|
[![coverage][cover]][cover-url]
|
||||||
![python][python]
|
![python][python]
|
||||||
![license][license]
|
![license][license]
|
||||||
|
[](https://hub.docker.com/r/mayanedms/mayanedms/)
|
||||||
|
[](https://hub.docker.com/r/mayanedms/mayanedms/)
|
||||||
|
[](https://microbadger.com/images/mayanedms/mayanedms)
|
||||||
|
|
||||||
[pypi]: http://img.shields.io/pypi/v/mayan-edms.svg
|
[pypi]: http://img.shields.io/pypi/v/mayan-edms.svg
|
||||||
[pypi-url]: http://badge.fury.io/py/mayan-edms
|
[pypi-url]: http://badge.fury.io/py/mayan-edms
|
||||||
@@ -35,7 +38,7 @@
|
|||||||
<p>
|
<p>
|
||||||
|
|
||||||
<p align="center">
|
<p align="center">
|
||||||
<img src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif">
|
<img width="400" src="https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif">
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -46,9 +49,8 @@ The easiest way to use Mayan EDMS is by using the official
|
|||||||
[Docker](https://www.docker.com/) image. Make sure Docker is properly installed
|
[Docker](https://www.docker.com/) image. Make sure Docker is properly installed
|
||||||
and working before attempting to install Mayan EDMS.
|
and working before attempting to install Mayan EDMS.
|
||||||
|
|
||||||
For the complete set of installation, configuration, upgrade, and backup
|
For the complete set of installation instructions visit the Mayan EDMS documentation
|
||||||
instructions visit the Mayan EDMS Docker Hub page at:
|
at: https://docs.mayan-edms.com/topics/installation.html
|
||||||
https://hub.docker.com/r/mayanedms/mayanedms/
|
|
||||||
|
|
||||||
<h2 align="center">Hardware requirements</h2>
|
<h2 align="center">Hardware requirements</h2>
|
||||||
|
|
||||||
@@ -59,14 +61,12 @@ https://hub.docker.com/r/mayanedms/mayanedms/
|
|||||||
|
|
||||||
|
|
||||||
- [Homepage](http://www.mayan-edms.com)
|
- [Homepage](http://www.mayan-edms.com)
|
||||||
- [Videos](https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw)
|
- [Documentation](https://docs.mayan-edms.com)
|
||||||
- [Documentation](http://mayan.readthedocs.io/en/stable/)
|
- [Wiki](https://wiki.mayan-edms.com/)
|
||||||
- [Paid support](http://www.mayan-edms.com/providers/)
|
|
||||||
- [Roadmap](https://gitlab.com/mayan-edms/mayan-edms/wikis/roadmap)
|
|
||||||
- [Contributing](https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md)
|
- [Contributing](https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md)
|
||||||
- [Community forum](https://groups.google.com/forum/#!forum/mayan-edms)
|
- [Forum](https://forum.mayan-edms.com/)
|
||||||
- [Community forum archive](http://mayan-edms.1003.x6.nabble.com/)
|
|
||||||
- [Source code, issues, bugs](https://gitlab.com/mayan-edms/mayan-edms)
|
- [Source code, issues, bugs](https://gitlab.com/mayan-edms/mayan-edms)
|
||||||
- [Plug-ins, other related projects](https://gitlab.com/mayan-edms/)
|
- [Plug-ins, other related projects](https://gitlab.com/mayan-edms/)
|
||||||
- [Translations](https://www.transifex.com/rosarior/mayan-edms/)
|
- [Translations](https://www.transifex.com/rosarior/mayan-edms/)
|
||||||
|
- [Videos](https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw)
|
||||||
|
|
||||||
|
|||||||
26
README.rst
26
README.rst
@@ -1,4 +1,4 @@
|
|||||||
|pypi| |builds| |coverage| |python| |license|
|
|pypi| |builds| |coverage| |python| |license| |docker_pulls| |docker_stars| |docker_layers|
|
||||||
|
|
||||||
|
|
||||||
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
|
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/mayan_logo.png
|
||||||
@@ -14,15 +14,14 @@ are its workflow system, role based access control, and REST API.
|
|||||||
|
|
||||||
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
.. image:: https://gitlab.com/mayan-edms/mayan-edms/raw/master/docs/_static/overview.gif
|
||||||
:align: center
|
:align: center
|
||||||
|
:width: 300
|
||||||
|
|
||||||
The easiest way to use Mayan EDMS is by using the official Docker_ image.
|
The easiest way to use Mayan EDMS is by using the official Docker_ image.
|
||||||
Make sure Docker is properly installed and working before attempting to install
|
Make sure Docker is properly installed and working before attempting to install
|
||||||
Mayan EDMS.
|
Mayan EDMS.
|
||||||
|
|
||||||
For the complete set of installation, configuration, upgrade, and backup
|
For the complete set of installation instructions visit the Mayan EDMS documentation
|
||||||
instructions visit the Mayan EDMS Docker Hub page at:
|
at: https://docs.mayan-edms.com/topics/installation.html
|
||||||
https://hub.docker.com/r/mayanedms/mayanedms/
|
|
||||||
|
|
||||||
.. _Docker: https://www.docker.com/
|
.. _Docker: https://www.docker.com/
|
||||||
|
|
||||||
@@ -35,17 +34,14 @@ Hardware requirements
|
|||||||
Important links
|
Important links
|
||||||
|
|
||||||
- `Homepage <http://www.mayan-edms.com>`__
|
- `Homepage <http://www.mayan-edms.com>`__
|
||||||
- `Videos <https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw>`__
|
- `Documentation <https://docs.mayan-edms.com>`__
|
||||||
- `Documentation <http://mayan.readthedocs.io/en/stable/>`__
|
- `Wiki <https://wiki.mayan-edms.com>`__
|
||||||
- `Paid support <http://www.mayan-edms.com/providers/>`__
|
|
||||||
- `Roadmap <https://gitlab.com/mayan-edms/mayan-edms/wikis/roadmap>`__
|
|
||||||
- `Contributing <https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md>`__
|
- `Contributing <https://gitlab.com/mayan-edms/mayan-edms/blob/master/CONTRIBUTING.md>`__
|
||||||
- `Community forum <https://groups.google.com/forum/#!forum/mayan-edms>`__
|
- `Forum <https://forum.mayan-edms.com>`__
|
||||||
- `Community forum archive <http://mayan-edms.1003.x6.nabble.com/>`__
|
|
||||||
- `Source code, issues, bugs <https://gitlab.com/mayan-edms/mayan-edms>`__
|
- `Source code, issues, bugs <https://gitlab.com/mayan-edms/mayan-edms>`__
|
||||||
- `Plug-ins, other related projects <https://gitlab.com/mayan-edms/>`__
|
- `Plug-ins, other related projects <https://gitlab.com/mayan-edms/>`__
|
||||||
- `Translations <https://www.transifex.com/rosarior/mayan-edms/>`__
|
- `Translations <https://www.transifex.com/rosarior/mayan-edms/>`__
|
||||||
|
- `Videos <https://www.youtube.com/channel/UCJOOXHP1MJ9lVA7d8ZTlHPw>`__
|
||||||
|
|
||||||
|
|
||||||
.. |pypi| image:: http://img.shields.io/pypi/v/mayan-edms.svg
|
.. |pypi| image:: http://img.shields.io/pypi/v/mayan-edms.svg
|
||||||
@@ -56,3 +52,9 @@ Important links
|
|||||||
:target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
|
:target: https://codecov.io/gitlab/mayan-edms/mayan-edms?branch=master
|
||||||
.. |python| image:: https://img.shields.io/pypi/pyversions/mayan-edms.svg
|
.. |python| image:: https://img.shields.io/pypi/pyversions/mayan-edms.svg
|
||||||
.. |license| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
|
.. |license| image:: https://img.shields.io/pypi/l/mayan-edms.svg?style=flat
|
||||||
|
.. |docker_pulls| image:: https://img.shields.io/docker/pulls/mayanedms/mayanedms.svg?maxAge=3600
|
||||||
|
:target: https://hub.docker.com/r/mayanedms/mayanedms/
|
||||||
|
.. |docker_stars| image:: https://img.shields.io/docker/stars/mayanedms/mayanedms.svg?maxAge=3600
|
||||||
|
:target: https://hub.docker.com/r/mayanedms/mayanedms/
|
||||||
|
.. |docker_layers| image:: https://images.microbadger.com/badges/image/mayanedms/mayanedms.svg
|
||||||
|
:target: https://microbadger.com/images/mayanedms/mayanedms
|
||||||
|
|||||||
14
__init__.py.tmpl
Normal file
14
__init__.py.tmpl
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
__title__ = 'Mayan EDMS'
|
||||||
|
__version__ = '{{ version }}'
|
||||||
|
__build__ = {{ build }}
|
||||||
|
__build_string__ = '{{ build_string }}'
|
||||||
|
__django_version__ = '1.11'
|
||||||
|
__author__ = 'Roberto Rosario'
|
||||||
|
__author_email__ = 'roberto.rosario@mayan-edms.com'
|
||||||
|
__description__ = 'Free Open Source Electronic Document Management System'
|
||||||
|
__license__ = 'Apache 2.0'
|
||||||
|
__copyright_short__ = '2011-2018 Roberto Rosario'
|
||||||
|
__copyright__ = '{} {}'.format('Copyright', __copyright_short__)
|
||||||
|
__website__ = 'https://www.mayan-edms.com'
|
||||||
10
contrib/scripts/docker/run-tests.sh
Executable file
10
contrib/scripts/docker/run-tests.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y --no-install-recommends tesseract-ocr-deu
|
||||||
|
|
||||||
|
$MAYAN_PIP_BIN install -r ${MAYAN_INSTALL_DIR}/requirements-testing.txt
|
||||||
|
|
||||||
|
$MAYAN_BIN test --mayan-apps --settings=mayan.settings.testing
|
||||||
1733
contrib/scripts/install/dialog.sh
Normal file
1733
contrib/scripts/install/dialog.sh
Normal file
File diff suppressed because it is too large
Load Diff
131
contrib/scripts/install/docker.sh
Executable file
131
contrib/scripts/install/docker.sh
Executable file
@@ -0,0 +1,131 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# This script is meant for quick & easy install via:
|
||||||
|
# $ curl -fsSL get.mayan-edms.com -o get-mayan-edms.sh
|
||||||
|
# $ sh get-mayan-edms.sh
|
||||||
|
#
|
||||||
|
# NOTE: Make sure to verify the contents of the script
|
||||||
|
# you downloaded matches the contents of docker.sh
|
||||||
|
# located at https://gitlab.com/mayan-edms/mayan-edms/blob/master/contrib/scripts/install/docker.sh
|
||||||
|
# before executing.
|
||||||
|
|
||||||
|
: ${VERBOSE:=true}
|
||||||
|
: ${INSTALL_DOCKER:=false}
|
||||||
|
: ${DELETE_VOLUMES:=false}
|
||||||
|
: ${DATABASE_USER:=mayan}
|
||||||
|
: ${DATABASE_NAME:=mayan}
|
||||||
|
: ${DATABASE_PASSWORD:=mayanuserpass}
|
||||||
|
: ${DOCKER_POSTGRES_IMAGE:=postgres:9.6}
|
||||||
|
: ${DOCKER_POSTGRES_CONTAINER:=mayan-edms-postgres}
|
||||||
|
: ${DOCKER_POSTGRES_VOLUME:=/docker-volumes/mayan-edms/postgres}
|
||||||
|
: ${DOCKER_POSTGRES_PORT:=5432}
|
||||||
|
: ${DOCKER_MAYAN_IMAGE:=mayanedms/mayanedms:latest}
|
||||||
|
: ${DOCKER_MAYAN_CONTAINER:=mayan-edms}
|
||||||
|
: ${DOCKER_MAYAN_VOLUME:=/docker-volumes/mayan-edms/media}
|
||||||
|
|
||||||
|
cat << EOF
|
||||||
|
|
||||||
|
███╗ ███╗ █████╗ ██╗ ██╗ █████╗ ███╗ ██╗
|
||||||
|
████╗ ████║██╔══██╗╚██╗ ██╔╝██╔══██╗████╗ ██║
|
||||||
|
██╔████╔██║███████║ ╚████╔╝ ███████║██╔██╗ ██║
|
||||||
|
██║╚██╔╝██║██╔══██║ ╚██╔╝ ██╔══██║██║╚██╗██║
|
||||||
|
██║ ╚═╝ ██║██║ ██║ ██║ ██║ ██║██║ ╚████║
|
||||||
|
╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═══╝
|
||||||
|
Docker deploy script
|
||||||
|
|
||||||
|
NOTE: Make sure to verify the contents of this script
|
||||||
|
matches the contents of docker.sh located at https://gitlab.com/mayan-edms/mayan-edms/blob/master/contrib/scripts/install/docker.sh before executing.
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [ "$VERBOSE" = true ]; then
|
||||||
|
echo "Variable values to be used:"
|
||||||
|
echo "---------------------------"
|
||||||
|
echo "INSTALL_DOCKER: $INSTALL_DOCKER"
|
||||||
|
echo "DELETE_VOLUMES: $DELETE_VOLUMES"
|
||||||
|
echo "DATABASE_USER: $DATABASE_USER"
|
||||||
|
echo "DATABASE_NAME: $DATABASE_NAME"
|
||||||
|
echo "DATABASE_PASSWORD: $DATABASE_PASSWORD"
|
||||||
|
echo "DOCKER_POSTGRES_IMAGE: $DOCKER_POSTGRES_IMAGE"
|
||||||
|
echo "DOCKER_POSTGRES_CONTAINER: $DOCKER_POSTGRES_CONTAINER"
|
||||||
|
echo "DOCKER_POSTGRES_VOLUME: $DOCKER_POSTGRES_VOLUME"
|
||||||
|
echo "DOCKER_POSTGRES_PORT: $DOCKER_POSTGRES_PORT"
|
||||||
|
echo "DOCKER_MAYAN_IMAGE: $DOCKER_MAYAN_IMAGE"
|
||||||
|
echo "DOCKER_MAYAN_CONTAINER: $DOCKER_MAYAN_CONTAINER"
|
||||||
|
echo "DOCKER_MAYAN_VOLUME: $DOCKER_MAYAN_VOLUME"
|
||||||
|
echo "\nStarting in 10 seconds."
|
||||||
|
sleep 10
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$INSTALL_DOCKER" = true ]; then
|
||||||
|
echo -n "* Installing Docker..."
|
||||||
|
curl -fsSL get.docker.com -o get-docker.sh >/dev/null
|
||||||
|
sh get-docker.sh >/dev/null 2>&1
|
||||||
|
rm get-docker.sh
|
||||||
|
echo "Done"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -z `which docker` ]; then
|
||||||
|
echo "Docker is not installed. Rerun this script with the variable INSTALL_DOCKER set to true."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "* Removing existing Mayan EDMS and PostgreSQL containers (no data will be lost)..."
|
||||||
|
true || docker stop $DOCKER_MAYAN_CONTAINER >/dev/null 2>&1
|
||||||
|
true || docker rm $DOCKER_MAYAN_CONTAINER >/dev/null 2>&1
|
||||||
|
true || docker stop $DOCKER_POSTGRES_CONTAINER >/dev/null 2>&1
|
||||||
|
true || docker rm $DOCKER_POSTGRES_CONTAINER >/dev/null 2>&1
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
if [ "$DELETE_VOLUMES" = true ]; then
|
||||||
|
echo -n "* Deleting Docker volumes in 5 seconds (warning: this delete all document data)..."
|
||||||
|
sleep 5
|
||||||
|
true || rm DOCKER_MAYAN_VOLUME -Rf
|
||||||
|
true || rm DOCKER_POSTGRES_VOLUME -Rf
|
||||||
|
echo "Done"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "* Pulling (downloading) the Mayan EDMS Docker image..."
|
||||||
|
docker pull $DOCKER_MAYAN_IMAGE >/dev/null
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo -n "* Pulling (downloading) the PostgreSQL Docker image..."
|
||||||
|
docker pull $DOCKER_POSTGRES_IMAGE > /dev/null
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo -n "* Deploying the PostgreSQL container..."
|
||||||
|
docker run -d \
|
||||||
|
--name $DOCKER_POSTGRES_CONTAINER \
|
||||||
|
--restart=always \
|
||||||
|
-p $DOCKER_POSTGRES_PORT:5432 \
|
||||||
|
-e POSTGRES_USER=$DATABASE_USER \
|
||||||
|
-e POSTGRES_DB=$DATABASE_NAME \
|
||||||
|
-e POSTGRES_PASSWORD=$DATABASE_PASSWORD \
|
||||||
|
-v $DOCKER_POSTGRES_VOLUME:/var/lib/postgresql/data \
|
||||||
|
$DOCKER_POSTGRES_IMAGE >/dev/null
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo -n "* Waiting for the PostgreSQL container to be ready (10 seconds)..."
|
||||||
|
sleep 10
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo -n "* Deploying Mayan EDMS container..."
|
||||||
|
docker run -d \
|
||||||
|
--name $DOCKER_MAYAN_CONTAINER \
|
||||||
|
--restart=always \
|
||||||
|
-p 80:8000 \
|
||||||
|
-e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \
|
||||||
|
-e MAYAN_DATABASE_HOST=172.17.0.1 \
|
||||||
|
-e MAYAN_DATABASE_NAME=$DATABASE_NAME \
|
||||||
|
-e MAYAN_DATABASE_PASSWORD=$DATABASE_PASSWORD \
|
||||||
|
-e MAYAN_DATABASE_USER=$DATABASE_USER \
|
||||||
|
-e MAYAN_DATABASE_PORT=$DOCKER_POSTGRES_PORT \
|
||||||
|
-e MAYAN_DATABASE_CONN_MAX_AGE=0 \
|
||||||
|
-v $DOCKER_MAYAN_VOLUME:/var/lib/mayan \
|
||||||
|
$DOCKER_MAYAN_IMAGE >/dev/null
|
||||||
|
echo "Done"
|
||||||
|
|
||||||
|
echo -n "* Waiting for the Mayan EDMS container to be ready (might take a few minutes)..."
|
||||||
|
while ! curl --output /dev/null --silent --head --fail http://localhost:80; do sleep 1 && echo -n .; done;
|
||||||
|
echo "Done"
|
||||||
@@ -161,7 +161,7 @@ priority = 998
|
|||||||
EOF
|
EOF
|
||||||
|
|
||||||
echo -e "\n -> Collecting the static files \n"
|
echo -e "\n -> Collecting the static files \n"
|
||||||
mayan-edms.py collectstatic --noinput
|
mayan-edms.py preparestatic --noinput
|
||||||
|
|
||||||
echo -e "\n -> Making the installation directory readable and writable by the webserver user \n"
|
echo -e "\n -> Making the installation directory readable and writable by the webserver user \n"
|
||||||
chown www-data:www-data ${INSTALLATION_DIRECTORY} -R
|
chown www-data:www-data ${INSTALLATION_DIRECTORY} -R
|
||||||
|
|||||||
@@ -1,4 +1,7 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
import os
|
import os
|
||||||
import optparse
|
import optparse
|
||||||
|
|
||||||
@@ -6,19 +9,21 @@ import sh
|
|||||||
|
|
||||||
|
|
||||||
APP_LIST = (
|
APP_LIST = (
|
||||||
'acls', 'appearance', 'authentication', 'cabinets', 'checkouts', 'common',
|
'acls', 'appearance', 'authentication', 'autoadmin', 'cabinets',
|
||||||
'converter', 'django_gpg', 'document_comments', 'document_indexing',
|
'checkouts', 'common', 'converter', 'dashboards', 'dependencies',
|
||||||
'document_parsing', 'document_signatures', 'document_states', 'documents',
|
'django_gpg', 'document_comments', 'document_indexing',
|
||||||
'dynamic_search', 'events', 'linking', 'lock_manager', 'mayan_statistics',
|
'document_parsing', 'document_signatures', 'document_states',
|
||||||
'mailer', 'metadata', 'mirroring', 'motd', 'navigation', 'ocr', 'permissions',
|
'documents', 'dynamic_search', 'events', 'file_metadata', 'linking',
|
||||||
'rest_api', 'smart_settings', 'sources', 'storage', 'tags', 'task_manager',
|
'lock_manager', 'mayan_statistics', 'mailer', 'metadata', 'mirroring',
|
||||||
|
'motd', 'navigation', 'ocr', 'permissions', 'platform', 'rest_api',
|
||||||
|
'smart_settings', 'sources', 'storage', 'tags', 'task_manager',
|
||||||
'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', 'cs', 'da_DK', 'de_DE', 'en', 'es', 'el', 'fa', 'fr',
|
||||||
'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'tr_TR',
|
'hu', 'id', 'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI',
|
||||||
'vi_VN', 'zh_CN',
|
'tr_TR', 'vi_VN', 'zh',
|
||||||
)
|
)
|
||||||
|
|
||||||
makemessages = sh.Command('django-admin.py')
|
makemessages = sh.Command('django-admin.py')
|
||||||
@@ -38,29 +43,29 @@ BASE_DIR = os.path.abspath(
|
|||||||
|
|
||||||
def process(command, app_list, language_list):
|
def process(command, app_list, language_list):
|
||||||
if command == makemessages:
|
if command == makemessages:
|
||||||
print 'Making messages'
|
print('Making messages')
|
||||||
elif command == compilemessages:
|
elif command == compilemessages:
|
||||||
print 'Compiling messages'
|
print('Compiling messages')
|
||||||
elif command == pull_translations:
|
elif command == pull_translations:
|
||||||
print 'Pulling translation files'
|
print('Pulling translation files')
|
||||||
elif command == push_translations:
|
elif command == push_translations:
|
||||||
print 'Pushing translation files'
|
print('Pushing translation files')
|
||||||
|
|
||||||
if command in [compilemessages, makemessages]:
|
if command in [compilemessages, makemessages]:
|
||||||
for app in app_list:
|
for app in app_list:
|
||||||
print 'Processing app: %s...' % app
|
print('Processing app: %s...' % app)
|
||||||
app_path = os.path.join(BASE_DIR, 'apps', app)
|
app_path = os.path.join(BASE_DIR, 'apps', app)
|
||||||
os.chdir(app_path)
|
os.chdir(app_path)
|
||||||
for lang in language_list:
|
for lang in language_list:
|
||||||
print 'Doing language: %s' % lang
|
print('Doing language: %s' % lang)
|
||||||
command(locale=lang)
|
command(locale=lang)
|
||||||
elif command == pull_translations:
|
elif command == pull_translations:
|
||||||
for lang in language_list:
|
for lang in language_list:
|
||||||
print 'Doing language: %s' % lang
|
print('Doing language: %s' % lang)
|
||||||
command('-f', '-l', lang)
|
command('-f', '-l', lang)
|
||||||
elif command == push_translations:
|
elif command == push_translations:
|
||||||
for lang in language_list:
|
for lang in language_list:
|
||||||
print 'Doing language: %s' % lang
|
print('Doing language: %s' % lang)
|
||||||
command('-s', '-l', lang)
|
command('-s', '-l', lang)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
105
contrib/scripts/statistics.py
Executable file
105
contrib/scripts/statistics.py
Executable file
@@ -0,0 +1,105 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
BASE_PATH = 'mayan/apps'
|
||||||
|
|
||||||
|
|
||||||
|
def print_views_summary(module_filename):
|
||||||
|
with open(module_filename) as file_object:
|
||||||
|
print(' module:', module_filename)
|
||||||
|
count_class_based_views = 0
|
||||||
|
count_function_based_views = 0
|
||||||
|
for line in file_object:
|
||||||
|
if line.startswith('class') and 'View' in line:
|
||||||
|
count_class_based_views += 1
|
||||||
|
|
||||||
|
if line.startswith('def') and 'request' in line:
|
||||||
|
count_function_based_views += 1
|
||||||
|
|
||||||
|
print(' class based views: {}'.format(count_class_based_views))
|
||||||
|
print(' function based views: {}'.format(count_function_based_views))
|
||||||
|
return count_class_based_views, count_function_based_views
|
||||||
|
|
||||||
|
|
||||||
|
def print_tests_summary(module_filename):
|
||||||
|
with open(module_filename) as file_object:
|
||||||
|
print(' module:', module_filename)
|
||||||
|
count_tests = 0
|
||||||
|
for line in file_object:
|
||||||
|
if line.startswith(' def test'):
|
||||||
|
count_tests += 1
|
||||||
|
|
||||||
|
print(' tests: {}'.format(count_tests))
|
||||||
|
return count_tests
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
count_totals = {
|
||||||
|
'Apps': 0,
|
||||||
|
'Class based views': 0,
|
||||||
|
'Function based views': 0,
|
||||||
|
'Class based API views': 0,
|
||||||
|
'Function based API views': 0,
|
||||||
|
'Tests': 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
for app_name in sorted(os.listdir(BASE_PATH)):
|
||||||
|
if app_name != '__init__.py':
|
||||||
|
count_totals['Apps'] += 1
|
||||||
|
print('\n\nApp name: {}'.format(app_name))
|
||||||
|
app_path = os.path.join(BASE_PATH, app_name)
|
||||||
|
|
||||||
|
print('\n Views')
|
||||||
|
try:
|
||||||
|
module_filename = os.path.join(app_path, 'views.py')
|
||||||
|
count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename)
|
||||||
|
count_totals['Class based views'] += count_class_based_views
|
||||||
|
count_totals['Function based views'] += count_function_based_views
|
||||||
|
|
||||||
|
except IOError:
|
||||||
|
# Check for multiple view files inside a view directory
|
||||||
|
try:
|
||||||
|
module_path = os.path.join(app_path, 'views')
|
||||||
|
for module_name in os.listdir(module_path):
|
||||||
|
if not module_name.startswith('__init__.py') and not module_name.endswith('.pyc'):
|
||||||
|
module_filename = os.path.join(module_path, module_name)
|
||||||
|
count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename)
|
||||||
|
count_totals['Class based views'] += count_class_based_views
|
||||||
|
count_totals['Function based views'] += count_function_based_views
|
||||||
|
except OSError:
|
||||||
|
# No views directory, skip app
|
||||||
|
print(' No views')
|
||||||
|
|
||||||
|
print('\n API Views')
|
||||||
|
try:
|
||||||
|
module_filename = os.path.join(app_path, 'api_views.py')
|
||||||
|
count_class_based_views, count_function_based_views = print_views_summary(module_filename=module_filename)
|
||||||
|
count_totals['Class based API views'] += count_class_based_views
|
||||||
|
count_totals['Function based API views'] += count_function_based_views
|
||||||
|
|
||||||
|
except IOError:
|
||||||
|
# No API views directory, skip app
|
||||||
|
print(' No API views')
|
||||||
|
|
||||||
|
print('\n Tests')
|
||||||
|
module_path = os.path.join(app_path, 'tests')
|
||||||
|
try:
|
||||||
|
for module_name in os.listdir(module_path):
|
||||||
|
if not module_name.startswith('__init__.py') and not module_name.endswith('.pyc'):
|
||||||
|
module_filename = os.path.join(module_path, module_name)
|
||||||
|
if module_name.startswith('test'):
|
||||||
|
count_tests = print_tests_summary(module_filename=module_filename)
|
||||||
|
count_totals['Tests'] += count_tests
|
||||||
|
|
||||||
|
except OSError:
|
||||||
|
# No tests directory, skip app
|
||||||
|
print(' No tests')
|
||||||
|
|
||||||
|
print('-' * 10)
|
||||||
|
|
||||||
|
print('Totals:')
|
||||||
|
for key, value in count_totals.items():
|
||||||
|
print(' {}: {}'.format(key, value))
|
||||||
@@ -3,8 +3,7 @@ from __future__ import absolute_import
|
|||||||
import ldap
|
import ldap
|
||||||
from django_auth_ldap.config import LDAPSearch
|
from django_auth_ldap.config import LDAPSearch
|
||||||
|
|
||||||
from .base import *
|
from .base import * # NOQA
|
||||||
from django.conf import settings
|
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
SECRET_KEY = '<your secret key>'
|
SECRET_KEY = '<your secret key>'
|
||||||
@@ -27,22 +26,24 @@ AUTH_LDAP_BIND_DN = LDAP_ADMIN_DN
|
|||||||
AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD
|
AUTH_LDAP_BIND_PASSWORD = LDAP_PASSWORD
|
||||||
|
|
||||||
|
|
||||||
AUTH_LDAP_USER_SEARCH = LDAPSearch('%s,%s'%(LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN), ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
|
AUTH_LDAP_USER_SEARCH = LDAPSearch(
|
||||||
AUTH_LDAP_USER_ATTR_MAP = {
|
'%s,%s' % (LDAP_ADDITIONAL_USER_DN, LDAP_BASE_DN),
|
||||||
"first_name": "cn",
|
ldap.SCOPE_SUBTREE, '(uid=%(user)s)'
|
||||||
"last_name": "sn",
|
|
||||||
"email": "mail"
|
|
||||||
}
|
|
||||||
|
|
||||||
AUTHENTICATION_BACKENDS = (
|
|
||||||
'django_auth_ldap.backend.LDAPBackend',
|
|
||||||
'mayan.settings.settings_local.EmailOrUsernameModelBackend',
|
|
||||||
)
|
)
|
||||||
|
AUTH_LDAP_USER_ATTR_MAP = {
|
||||||
|
'first_name': 'cn',
|
||||||
|
'last_name': 'sn',
|
||||||
|
'email': 'mail'
|
||||||
|
}
|
||||||
|
AUTHENTICATION_BACKENDS = (
|
||||||
|
'django_auth_ldap.backend.LDAPBackend',
|
||||||
|
'mayan.settings.settings_local.EmailOrUsernameModelBackend',
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class EmailOrUsernameModelBackend(object):
|
class EmailOrUsernameModelBackend(object):
|
||||||
"""
|
"""
|
||||||
This is a ModelBacked that allows authentication with either a username or an email address.
|
This is a ModelBacked that allows authentication with either a username or an email address.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
def authenticate(self, username=None, password=None):
|
def authenticate(self, username=None, password=None):
|
||||||
if '@' in username:
|
if '@' in username:
|
||||||
@@ -53,7 +54,7 @@ class EmailOrUsernameModelBackend(object):
|
|||||||
user = get_user_model().objects.get(**kwargs)
|
user = get_user_model().objects.get(**kwargs)
|
||||||
if user.check_password(password):
|
if user.check_password(password):
|
||||||
return user
|
return user
|
||||||
except User.DoesNotExist:
|
except get_user_model().DoesNotExist:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_user(self, username):
|
def get_user(self, username):
|
||||||
|
|||||||
157
docker/Dockerfile
Executable file
157
docker/Dockerfile
Executable file
@@ -0,0 +1,157 @@
|
|||||||
|
# vim:set ft=dockerfile:
|
||||||
|
|
||||||
|
####
|
||||||
|
# BASE_IMAGE - Bare bones image with the base packages needed to run Mayan EDMS
|
||||||
|
####
|
||||||
|
|
||||||
|
FROM debian:9.8-slim as BASE_IMAGE
|
||||||
|
|
||||||
|
LABEL maintainer="Roberto Rosario roberto.rosario@mayan-edms.com"
|
||||||
|
|
||||||
|
ENV PYTHONUNBUFFERED=1 \
|
||||||
|
LC_ALL=C.UTF-8 \
|
||||||
|
PROJECT_INSTALL_DIR=/opt/mayan-edms
|
||||||
|
|
||||||
|
# Debian package caching
|
||||||
|
ARG APT_PROXY
|
||||||
|
RUN set -x \
|
||||||
|
&& if [ "${APT_PROXY}" ]; \
|
||||||
|
then echo "Acquire::http { Proxy \"http://${APT_PROXY}\"; };" > /etc/apt/apt.conf.d/01proxy \
|
||||||
|
; fi \
|
||||||
|
# Install base OS packages to run Mayan EDMS
|
||||||
|
&& DEBIAN_FRONTEND=noninteractive \
|
||||||
|
apt-get update \
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
exiftool \
|
||||||
|
ghostscript \
|
||||||
|
gpgv \
|
||||||
|
gnupg1 \
|
||||||
|
graphviz \
|
||||||
|
libfuse2 \
|
||||||
|
libmagic1 \
|
||||||
|
libmariadbclient18 \
|
||||||
|
libreoffice \
|
||||||
|
libpq5 \
|
||||||
|
poppler-utils \
|
||||||
|
redis-server \
|
||||||
|
sane-utils \
|
||||||
|
sudo \
|
||||||
|
supervisor \
|
||||||
|
tesseract-ocr \
|
||||||
|
# Remove make and build dependencies
|
||||||
|
&& apt-get remove make libproxy-tools libreoffice-avmedia-backend-vlc libvlc-bin libvlc5 libvlccore9 adwaita-icon-theme gsettings-desktop-schemas libgstreamer-plugins-base1.0-0 -y \
|
||||||
|
&& apt-get autoremove -y --purge \
|
||||||
|
# Add mayan user
|
||||||
|
&& adduser mayan --disabled-password --disabled-login --no-create-home --gecos "" \
|
||||||
|
# Pillow can't find zlib or libjpeg on aarch64 (ODROID C2)
|
||||||
|
&& if [ "$(uname -m)" = "aarch64" ]; then \
|
||||||
|
ln -s /usr/lib/aarch64-linux-gnu/libz.so /usr/lib/ \
|
||||||
|
&& ln -s /usr/lib/aarch64-linux-gnu/libjpeg.so /usr/lib/ \
|
||||||
|
; fi \
|
||||||
|
# Pillow can't find zlib or libjpeg on armv7l (ODROID HC1)
|
||||||
|
&& if [ "$(uname -m)" = "armv7l" ]; then \
|
||||||
|
ln -s /usr/lib/arm-linux-gnueabihf/libz.so /usr/lib/ \
|
||||||
|
&& ln -s /usr/lib/arm-linux-gnueabihf/libjpeg.so /usr/lib/ \
|
||||||
|
; fi \
|
||||||
|
# Discard data when Redis runs out of memory
|
||||||
|
&& echo "maxmemory-policy allkeys-lru" >> /etc/redis/redis.conf \
|
||||||
|
# Disable saving the Redis database
|
||||||
|
echo "save \"\"" >> /etc/redis/redis.conf \
|
||||||
|
# Only provision 1 database
|
||||||
|
&& echo "databases 1" >> /etc/redis/redis.conf
|
||||||
|
|
||||||
|
|
||||||
|
####
|
||||||
|
# BUILDER_IMAGE - This image buildS the Python package and is discarded afterwards
|
||||||
|
####
|
||||||
|
|
||||||
|
# Reuse image
|
||||||
|
FROM BASE_IMAGE as BUILDER_IMAGE
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
|
||||||
|
# Copy the source files needed to build the Python package
|
||||||
|
COPY --chown=mayan:mayan requirements /src/requirements
|
||||||
|
COPY --chown=mayan:mayan \
|
||||||
|
HISTORY.rst \
|
||||||
|
LICENSE \
|
||||||
|
MANIFEST.in \
|
||||||
|
README.md \
|
||||||
|
README.rst \
|
||||||
|
setup.py \
|
||||||
|
/src/
|
||||||
|
|
||||||
|
COPY --chown=mayan:mayan mayan /src/mayan
|
||||||
|
|
||||||
|
# Install development packages needed to build the Python packages
|
||||||
|
RUN DEBIAN_FRONTEND=noninteractive \
|
||||||
|
apt-get install -y --no-install-recommends \
|
||||||
|
default-libmysqlclient-dev \
|
||||||
|
libffi-dev \
|
||||||
|
libjpeg-dev \
|
||||||
|
libpng-dev \
|
||||||
|
libpq-dev \
|
||||||
|
libtiff-dev \
|
||||||
|
zlib1g-dev \
|
||||||
|
libssl-dev \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
python-dev \
|
||||||
|
python-virtualenv \
|
||||||
|
&& mkdir -p "${PROJECT_INSTALL_DIR}" \
|
||||||
|
&& chown -R mayan:mayan "${PROJECT_INSTALL_DIR}" \
|
||||||
|
&& chown -R mayan:mayan /src
|
||||||
|
|
||||||
|
USER mayan
|
||||||
|
RUN python -m virtualenv "${PROJECT_INSTALL_DIR}" \
|
||||||
|
&& . "${PROJECT_INSTALL_DIR}/bin/activate" \
|
||||||
|
&& pip install --no-cache-dir --no-use-pep517 \
|
||||||
|
librabbitmq==1.6.1 \
|
||||||
|
mysql-python==1.2.5 \
|
||||||
|
psycopg2==2.7.3.2 \
|
||||||
|
redis==2.10.6 \
|
||||||
|
# psutil is needed by ARM builds otherwise gevent and gunicorn fail to start
|
||||||
|
&& UNAME=`uname -m` && if [ "${UNAME#*arm}" != $UNAME ]; then \
|
||||||
|
pip install --no-cache-dir --no-use-pep517 \
|
||||||
|
psutil==5.6.2 \
|
||||||
|
; fi \
|
||||||
|
# Install the Python packages needed to build Mayan EDMS
|
||||||
|
&& pip install --no-cache-dir --no-use-pep517 -r /src/requirements/build.txt \
|
||||||
|
# Build Mayan EDMS
|
||||||
|
&& python setup.py sdist \
|
||||||
|
# Install the built Mayan EDMS package
|
||||||
|
&& pip install --no-cache-dir --no-use-pep517 dist/mayan* \
|
||||||
|
# Install the static content
|
||||||
|
&& mayan-edms.py installjavascript \
|
||||||
|
&& MAYAN_STATIC_ROOT=${PROJECT_INSTALL_DIR}/static mayan-edms.py preparestatic --link --noinput
|
||||||
|
|
||||||
|
COPY --chown=mayan:mayan requirements/testing-base.txt "${PROJECT_INSTALL_DIR}"
|
||||||
|
|
||||||
|
####
|
||||||
|
# Final image - BASE_IMAGE + Mayan install directory from the builder image
|
||||||
|
####
|
||||||
|
|
||||||
|
FROM BASE_IMAGE
|
||||||
|
|
||||||
|
COPY --from=BUILDER_IMAGE --chown=mayan:mayan "${PROJECT_INSTALL_DIR}/" "${PROJECT_INSTALL_DIR}/"
|
||||||
|
|
||||||
|
USER root
|
||||||
|
|
||||||
|
COPY docker/rootfs /
|
||||||
|
|
||||||
|
VOLUME ["/var/lib/mayan"]
|
||||||
|
|
||||||
|
ENTRYPOINT ["entrypoint.sh"]
|
||||||
|
|
||||||
|
EXPOSE 8000
|
||||||
|
CMD ["mayan"]
|
||||||
|
|
||||||
|
RUN ${PROJECT_INSTALL_DIR}/bin/mayan-edms.py platformtemplate supervisord_docker > /etc/supervisor/conf.d/mayan.conf \
|
||||||
|
&& apt-get clean autoclean \
|
||||||
|
&& apt-get autoremove --purge -y \
|
||||||
|
&& rm -rf /var/lib/apt/lists/* \
|
||||||
|
&& rm -f /var/cache/apt/archives/*.deb \
|
||||||
|
# Remove temporary files owned by root from the platformtemplate step
|
||||||
|
&& rm /tmp/* \
|
||||||
|
# Keep displaying log messages to stdout
|
||||||
|
&& find /var/log -type f | while read f; do echo -ne '' > $f; done;
|
||||||
25
docker/Makefile
Executable file
25
docker/Makefile
Executable file
@@ -0,0 +1,25 @@
|
|||||||
|
APT_PROXY ?= `/sbin/ip route|awk '/docker0/ { print $$9 }'`:3142
|
||||||
|
IMAGE_VERSION ?= `cat docker/rootfs/version`
|
||||||
|
CONSOLE_COLUMNS ?= `echo $$(tput cols)`
|
||||||
|
CONSOLE_LINES ?= `echo $$(tput lines)`
|
||||||
|
|
||||||
|
docker-build: ## Build a new image locally.
|
||||||
|
docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile .
|
||||||
|
|
||||||
|
docker-build-with-proxy: ## Build a new image locally using an APT proxy as APT_PROXY.
|
||||||
|
docker build -t mayanedms/mayanedms:$(IMAGE_VERSION) -f docker/Dockerfile --build-arg APT_PROXY=$(APT_PROXY) .
|
||||||
|
|
||||||
|
docker-shell: ## Launch a bash instance inside a running container. Pass the container name via DOCKER_CONTAINER.
|
||||||
|
docker exec -e TERM=$(TERM) -e "COLUMNS=$(CONSOLE_COLUMNS)" -e "LINES=$(CONSOLE_LINES)" -it $(DOCKER_CONTAINER) /bin/bash
|
||||||
|
|
||||||
|
docker-test-container: ## Build and run a test container.
|
||||||
|
docker-test-container: docker-build-with-proxy docker-test-cleanup
|
||||||
|
docker run -d --name test-mayan-edms -p 80:8000 -v test-mayan_data:/var/lib/mayan mayanedms/mayanedms:$(DOCKER_VERSION)
|
||||||
|
|
||||||
|
docker-test-cleanup: ## Delete the test container and the test volume.
|
||||||
|
@docker rm -f test-mayan-edms || true
|
||||||
|
@docker volume rm test-mayan_data || true
|
||||||
|
|
||||||
|
docker-test-all: ## Build and executed the test suite in a test container.
|
||||||
|
docker-test-all: docker-build-with-proxy
|
||||||
|
docker run --rm run-tests
|
||||||
1
docker/README-short.txt
Executable file
1
docker/README-short.txt
Executable file
@@ -0,0 +1 @@
|
|||||||
|
Mayan EDMS is a free open source electronic document management system.
|
||||||
554
docker/README.md
Executable file
554
docker/README.md
Executable file
File diff suppressed because it is too large
Load Diff
549
docker/README.md.tmpl
Executable file
549
docker/README.md.tmpl
Executable file
File diff suppressed because it is too large
Load Diff
72
docker/docker-compose-development.yml
Executable file
72
docker/docker-compose-development.yml
Executable file
@@ -0,0 +1,72 @@
|
|||||||
|
version: '2.1'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
broker:
|
||||||
|
driver: local
|
||||||
|
app:
|
||||||
|
driver: local
|
||||||
|
db:
|
||||||
|
driver: local
|
||||||
|
results:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
services:
|
||||||
|
broker:
|
||||||
|
container_name: mayan-edms-broker
|
||||||
|
image: healthcheck/rabbitmq
|
||||||
|
environment:
|
||||||
|
RABBITMQ_DEFAULT_USER: mayan
|
||||||
|
RABBITMQ_DEFAULT_PASS: mayan
|
||||||
|
RABBITMQ_DEFAULT_VHOST: mayan
|
||||||
|
volumes:
|
||||||
|
- broker:/var/lib/rabbitmq
|
||||||
|
results:
|
||||||
|
container_name: mayan-edms-results
|
||||||
|
image: healthcheck/redis
|
||||||
|
volumes:
|
||||||
|
- results:/data
|
||||||
|
#db:
|
||||||
|
# container_name: mayan-edms-db
|
||||||
|
# image: healthcheck/mysql
|
||||||
|
# environment:
|
||||||
|
# MYSQL_DATABASE: mayan
|
||||||
|
# MYSQL_PASSWORD: mayan-password
|
||||||
|
# MYSQL_ROOT_PASSWORD: root-password
|
||||||
|
# MYSQL_USER: mayan
|
||||||
|
# volumes:
|
||||||
|
# - db:/var/lib/mysql
|
||||||
|
db:
|
||||||
|
container_name: mayan-edms-db
|
||||||
|
image: healthcheck/postgres
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: mayan
|
||||||
|
POSTGRES_PASSWORD: mayan-password
|
||||||
|
POSTGRES_USER: mayan
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
mayan-edms:
|
||||||
|
container_name: mayan-edms-app
|
||||||
|
image: mayan-edms/next
|
||||||
|
build:
|
||||||
|
context: ./
|
||||||
|
args:
|
||||||
|
- APT_PROXY=172.18.0.1:3142
|
||||||
|
depends_on:
|
||||||
|
broker:
|
||||||
|
condition: service_healthy
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
results:
|
||||||
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan
|
||||||
|
MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0
|
||||||
|
MAYAN_DATABASE_ENGINE: django.db.backends.postgresql
|
||||||
|
MAYAN_DATABASE_HOST: db
|
||||||
|
MAYAN_DATABASE_NAME: mayan
|
||||||
|
MAYAN_DATABASE_PASSWORD: mayan-password
|
||||||
|
MAYAN_DATABASE_USER: mayan
|
||||||
|
ports:
|
||||||
|
- "80:80"
|
||||||
|
volumes:
|
||||||
|
- app:/var/lib/mayan
|
||||||
58
docker/docker-compose.yml
Executable file
58
docker/docker-compose.yml
Executable file
@@ -0,0 +1,58 @@
|
|||||||
|
version: '2.1'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
broker:
|
||||||
|
driver: local
|
||||||
|
app:
|
||||||
|
driver: local
|
||||||
|
db:
|
||||||
|
driver: local
|
||||||
|
results:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
services:
|
||||||
|
broker:
|
||||||
|
container_name: mayan-edms-broker
|
||||||
|
image: healthcheck/rabbitmq
|
||||||
|
environment:
|
||||||
|
RABBITMQ_DEFAULT_USER: mayan
|
||||||
|
RABBITMQ_DEFAULT_PASS: mayan
|
||||||
|
RABBITMQ_DEFAULT_VHOST: mayan
|
||||||
|
volumes:
|
||||||
|
- broker:/var/lib/rabbitmq
|
||||||
|
results:
|
||||||
|
container_name: mayan-edms-results
|
||||||
|
image: healthcheck/redis
|
||||||
|
volumes:
|
||||||
|
- results:/data
|
||||||
|
db:
|
||||||
|
container_name: mayan-edms-db
|
||||||
|
image: healthcheck/postgres
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: mayan
|
||||||
|
POSTGRES_PASSWORD: mayan-password
|
||||||
|
POSTGRES_USER: mayan
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
mayan-edms:
|
||||||
|
container_name: mayan-edms-app
|
||||||
|
image: mayanedms/mayanedms:latest
|
||||||
|
depends_on:
|
||||||
|
broker:
|
||||||
|
condition: service_healthy
|
||||||
|
db:
|
||||||
|
condition: service_healthy
|
||||||
|
results:
|
||||||
|
condition: service_healthy
|
||||||
|
environment:
|
||||||
|
MAYAN_BROKER_URL: amqp://mayan:mayan@broker:5672/mayan
|
||||||
|
MAYAN_CELERY_RESULT_BACKEND: redis://results:6379/0
|
||||||
|
MAYAN_DATABASE_ENGINE: django.db.backends.postgresql
|
||||||
|
MAYAN_DATABASE_HOST: db
|
||||||
|
MAYAN_DATABASE_NAME: mayan
|
||||||
|
MAYAN_DATABASE_PASSWORD: mayan-password
|
||||||
|
MAYAN_DATABASE_USER: mayan
|
||||||
|
ports:
|
||||||
|
- "80:8000"
|
||||||
|
volumes:
|
||||||
|
- app:/var/lib/mayan
|
||||||
127
docker/rootfs/usr/local/bin/entrypoint.sh
Executable file
127
docker/rootfs/usr/local/bin/entrypoint.sh
Executable file
@@ -0,0 +1,127 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
echo "mayan: starting entrypoint.sh"
|
||||||
|
INSTALL_FLAG=/var/lib/mayan/system/SECRET_KEY
|
||||||
|
CONCURRENCY_ARGUMENT=--concurrency=
|
||||||
|
|
||||||
|
DEFAULT_USER_UID=1000
|
||||||
|
DEFAULT_USER_GUID=1000
|
||||||
|
|
||||||
|
export MAYAN_DEFAULT_BROKER_URL=redis://127.0.0.1:6379/0
|
||||||
|
export MAYAN_DEFAULT_CELERY_RESULT_BACKEND=redis://127.0.0.1:6379/0
|
||||||
|
|
||||||
|
export MAYAN_ALLOWED_HOSTS='["*"]'
|
||||||
|
export MAYAN_BIN=/opt/mayan-edms/bin/mayan-edms.py
|
||||||
|
export MAYAN_BROKER_URL=${MAYAN_BROKER_URL:-${MAYAN_DEFAULT_BROKER_URL}}
|
||||||
|
export MAYAN_CELERY_RESULT_BACKEND=${MAYAN_CELERY_RESULT_BACKEND:-${MAYAN_DEFAULT_CELERY_RESULT_BACKEND}}
|
||||||
|
export MAYAN_INSTALL_DIR=/opt/mayan-edms
|
||||||
|
export MAYAN_PYTHON_BIN_DIR=/opt/mayan-edms/bin/
|
||||||
|
export MAYAN_MEDIA_ROOT=/var/lib/mayan
|
||||||
|
export MAYAN_SETTINGS_MODULE=${MAYAN_SETTINGS_MODULE:-mayan.settings.production}
|
||||||
|
|
||||||
|
export MAYAN_GUNICORN_BIN=${MAYAN_PYTHON_BIN_DIR}gunicorn
|
||||||
|
export MAYAN_GUNICORN_WORKERS=${MAYAN_GUNICORN_WORKERS:-2}
|
||||||
|
export MAYAN_PIP_BIN=${MAYAN_PYTHON_BIN_DIR}pip
|
||||||
|
export MAYAN_STATIC_ROOT=${MAYAN_INSTALL_DIR}/static
|
||||||
|
|
||||||
|
MAYAN_WORKER_FAST_CONCURRENCY=${MAYAN_WORKER_FAST_CONCURRENCY:-1}
|
||||||
|
MAYAN_WORKER_MEDIUM_CONCURRENCY=${MAYAN_WORKER_MEDIUM_CONCURRENCY:-1}
|
||||||
|
MAYAN_WORKER_SLOW_CONCURRENCY=${MAYAN_WORKER_SLOW_CONCURRENCY:-1}
|
||||||
|
|
||||||
|
echo "mayan: changing uid/guid"
|
||||||
|
usermod mayan -u ${MAYAN_USER_UID:-${DEFAULT_USER_UID}}
|
||||||
|
groupmod mayan -g ${MAYAN_USER_GUID:-${DEFAULT_USER_GUID}}
|
||||||
|
|
||||||
|
if [ "$MAYAN_WORKER_FAST_CONCURRENCY" -eq 0 ]; then
|
||||||
|
MAYAN_WORKER_FAST_CONCURRENCY=
|
||||||
|
else
|
||||||
|
MAYAN_WORKER_FAST_CONCURRENCY="${CONCURRENCY_ARGUMENT}${MAYAN_WORKER_FAST_CONCURRENCY}"
|
||||||
|
fi
|
||||||
|
export MAYAN_WORKER_FAST_CONCURRENCY
|
||||||
|
|
||||||
|
if [ "$MAYAN_WORKER_MEDIUM_CONCURRENCY" -eq 0 ]; then
|
||||||
|
MAYAN_WORKER_MEDIUM_CONCURRENCY=
|
||||||
|
else
|
||||||
|
MAYAN_WORKER_MEDIUM_CONCURRENCY="${CONCURRENCY_ARGUMENT}${MAYAN_WORKER_MEDIUM_CONCURRENCY}"
|
||||||
|
fi
|
||||||
|
export MAYAN_WORKER_MEDIUM_CONCURRENCY
|
||||||
|
|
||||||
|
if [ "$MAYAN_WORKER_SLOW_CONCURRENCY" -eq 0 ]; then
|
||||||
|
MAYAN_WORKER_SLOW_CONCURRENCY=
|
||||||
|
else
|
||||||
|
MAYAN_WORKER_SLOW_CONCURRENCY="${CONCURRENCY_ARGUMENT}${MAYAN_WORKER_SLOW_CONCURRENCY}"
|
||||||
|
fi
|
||||||
|
export MAYAN_WORKER_SLOW_CONCURRENCY
|
||||||
|
|
||||||
|
export CELERY_ALWAYS_EAGER=False
|
||||||
|
export PYTHONPATH=$PYTHONPATH:$MAYAN_MEDIA_ROOT
|
||||||
|
|
||||||
|
chown mayan:mayan /var/lib/mayan -R
|
||||||
|
|
||||||
|
apt_get_install() {
|
||||||
|
apt-get -q update
|
||||||
|
apt-get install -y --force-yes --no-install-recommends --auto-remove "$@"
|
||||||
|
apt-get -q clean
|
||||||
|
rm -rf /var/lib/apt/lists/*
|
||||||
|
}
|
||||||
|
|
||||||
|
initialize() {
|
||||||
|
echo "mayan: initialize()"
|
||||||
|
su mayan -c "${MAYAN_BIN} initialsetup --force --no-javascript"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_package_installs() {
|
||||||
|
echo "mayan: os_package_installs()"
|
||||||
|
if [ "${MAYAN_APT_INSTALLS}" ]; then
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt_get_install $MAYAN_APT_INSTALLS
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
pip_installs() {
|
||||||
|
echo "mayan: pip_installs()"
|
||||||
|
if [ "${MAYAN_PIP_INSTALLS}" ]; then
|
||||||
|
su mayan -c "${MAYAN_PIP_BIN} install $MAYAN_PIP_INSTALLS"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
echo "mayan: start()"
|
||||||
|
rm -rf /var/run/supervisor.sock
|
||||||
|
exec /usr/bin/supervisord -nc /etc/supervisor/supervisord.conf
|
||||||
|
}
|
||||||
|
|
||||||
|
upgrade() {
|
||||||
|
echo "mayan: upgrade()"
|
||||||
|
su mayan -c "${MAYAN_BIN} performupgrade --no-javascript"
|
||||||
|
}
|
||||||
|
|
||||||
|
os_package_installs || true
|
||||||
|
pip_installs || true
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
|
||||||
|
mayan) # Check if this is a new install, otherwise try to upgrade the existing
|
||||||
|
# installation on subsequent starts
|
||||||
|
if [ ! -f $INSTALL_FLAG ]; then
|
||||||
|
initialize
|
||||||
|
else
|
||||||
|
upgrade
|
||||||
|
fi
|
||||||
|
start
|
||||||
|
;;
|
||||||
|
|
||||||
|
run-tests) # Check if this is a new install, otherwise try to upgrade the existing
|
||||||
|
# installation on subsequent starts
|
||||||
|
if [ ! -f $INSTALL_FLAG ]; then
|
||||||
|
initialize
|
||||||
|
else
|
||||||
|
upgrade
|
||||||
|
fi
|
||||||
|
run-tests.sh
|
||||||
|
;;
|
||||||
|
|
||||||
|
*) su mayan -c "$@";
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
10
docker/rootfs/usr/local/bin/run-tests.sh
Executable file
10
docker/rootfs/usr/local/bin/run-tests.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
apt-get update
|
||||||
|
apt-get install -y --no-install-recommends gcc python-dev tesseract-ocr-deu
|
||||||
|
|
||||||
|
su mayan -c "$MAYAN_PIP_BIN install -r ${MAYAN_INSTALL_DIR}/testing-base.txt"
|
||||||
|
|
||||||
|
su mayan -c "$MAYAN_BIN test --mayan-apps --settings=mayan.settings.testing"
|
||||||
1
docker/rootfs/version
Executable file
1
docker/rootfs/version
Executable file
@@ -0,0 +1 @@
|
|||||||
|
3.2b1
|
||||||
32
docker/stack.yml
Normal file
32
docker/stack.yml
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
version: '3.1'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
app:
|
||||||
|
driver: local
|
||||||
|
db:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
services:
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres
|
||||||
|
environment:
|
||||||
|
POSTGRES_DB: mayan
|
||||||
|
POSTGRES_PASSWORD: mayan-password
|
||||||
|
POSTGRES_USER: mayan
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
|
||||||
|
app:
|
||||||
|
image: mayanedms/mayanedms:latest
|
||||||
|
ports:
|
||||||
|
- 80:8000
|
||||||
|
environment:
|
||||||
|
MAYAN_DATABASE_ENGINE: django.db.backends.postgresql
|
||||||
|
MAYAN_DATABASE_HOST: db
|
||||||
|
MAYAN_DATABASE_NAME: mayan
|
||||||
|
MAYAN_DATABASE_PASSWORD: mayan-password
|
||||||
|
MAYAN_DATABASE_USER: mayan
|
||||||
|
MAYAN_DATABASE_CONN_MAX_AGE: 0
|
||||||
|
volumes:
|
||||||
|
- app:/var/lib/mayan
|
||||||
5
docs/_static/css/custom.css
vendored
Normal file
5
docs/_static/css/custom.css
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
.menuselection {
|
||||||
|
color: white;
|
||||||
|
background: #2c3e50;
|
||||||
|
padding: 3px;
|
||||||
|
}
|
||||||
BIN
docs/_static/overview.gif
vendored
BIN
docs/_static/overview.gif
vendored
Binary file not shown.
|
Before Width: | Height: | Size: 628 KiB After Width: | Height: | Size: 6.6 MiB |
@@ -1,21 +1,23 @@
|
|||||||
====================
|
********************
|
||||||
Access control lists
|
Access control lists
|
||||||
====================
|
********************
|
||||||
|
|
||||||
Besides the permissions system explained in :doc:`permissions`, Mayan EDMS
|
Besides the permissions system explained in :doc:`../chapters/permissions`,
|
||||||
provides per object permission granting. This feature is used to grant a
|
Mayan EDMS provides per object permission granting. This feature is used to
|
||||||
permission to a role, but this permission can only be executed for a limited
|
grant a permission to a role, but this permission can only be executed for a
|
||||||
number of objects (documents, folders, tags) instead of being effective
|
limited number of objects (documents, folders, tags) instead of being
|
||||||
system-wide.
|
effective system-wide.
|
||||||
|
|
||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
document [ label = 'Document' ];
|
document [ label = 'Document' ];
|
||||||
role [ label = 'Role' ];
|
role [ label = 'Role' ];
|
||||||
permission [ label = 'Permission' ];
|
permission [ label = 'Permission' ];
|
||||||
|
|
||||||
role -> document <- permission;
|
role -> permission -> document;
|
||||||
}
|
}
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@@ -23,11 +25,13 @@ Example:
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
document [ label = '2015 Payroll report.txt', width=200 ];
|
document [ label = '2015 Payroll report.txt', width=200 ];
|
||||||
role [ label = 'Accountants' ];
|
role [ label = 'Accountants' ];
|
||||||
permission [ label = 'View document' ];
|
permission [ label = 'View document' ];
|
||||||
|
|
||||||
role -> document <- permission;
|
role -> permission -> document;
|
||||||
}
|
}
|
||||||
|
|
||||||
In this scenario only users in groups belonging to the ``Accountants`` role
|
In this scenario only users in groups belonging to the ``Accountants`` role
|
||||||
@@ -36,18 +40,22 @@ would be able to view the ``2015 Payroll report.txt`` document.
|
|||||||
Inherited access control
|
Inherited access control
|
||||||
========================
|
========================
|
||||||
|
|
||||||
It is also possible to grant a permission to a role for a specific document type (:doc:`document_types`).
|
It is also possible to grant a permission to a role for a specific document
|
||||||
Under this scheme all users in groups belonging to that role will inherit that
|
type (:doc:`../chapters/document_types`). Under this scheme all users in
|
||||||
permission for all documents of that type.
|
groups belonging to that role will inherit that permission for all documents
|
||||||
|
of that type.
|
||||||
|
|
||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
document_type [ label = 'Document type' ];
|
document_type [ label = 'Document type' ];
|
||||||
role [ label = 'Role' ];
|
role [ label = 'Role' ];
|
||||||
permission [ label = 'Permission' ];
|
permission [ label = 'Permission' ];
|
||||||
|
documents [shape = "note", stacked];
|
||||||
|
|
||||||
role -> document_type <- permission;
|
role -> permission -> document_type ;
|
||||||
|
document_type -> documents [folded, label = "inherit" ];
|
||||||
}
|
}
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@@ -55,11 +63,14 @@ Example:
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
document_type [ label = 'Payroll reports', width=200 ];
|
document_type [ label = 'Payroll reports', width=200 ];
|
||||||
role [ label = 'Accountants' ];
|
role [ label = 'Accountants' ];
|
||||||
permission [ label = 'View document' ];
|
permission [ label = 'View document' ];
|
||||||
|
documents [shape = "note", stacked, label="payroll_report*.pdf" ];
|
||||||
|
|
||||||
role -> document_type <- permission;
|
role -> permission -> document_type ;
|
||||||
|
document_type -> documents [folded, label = "inherit" ];
|
||||||
}
|
}
|
||||||
|
|
||||||
The role ``Accountants`` is given the permission ``document view`` for the
|
The role ``Accountants`` is given the permission ``document view`` for the
|
||||||
102
docs/chapters/api.rst
Normal file
102
docs/chapters/api.rst
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
***
|
||||||
|
API
|
||||||
|
***
|
||||||
|
|
||||||
|
Mayan EDMS provides an HTTP REST Application Program Interface (or API). This
|
||||||
|
API allows integration with 3rd party software using simple HTTP requests.
|
||||||
|
|
||||||
|
Several API authentication methods are provides: **Session**, **Token**,
|
||||||
|
and **HTTP Basic**.
|
||||||
|
|
||||||
|
The URL for the API can be found via the :menuselection:`Tools --> REST API
|
||||||
|
menu. The API is also self-documenting. The live API documentation can be
|
||||||
|
found in the :menuselection:`Tools --> API Documentation (Swagger)` menu for
|
||||||
|
the Swagger version and in the
|
||||||
|
:menuselection:`Tools --> API Documentation (ReDoc)` menu for the ReDoc version.
|
||||||
|
|
||||||
|
The are a few ways to structure REST APIs. In the case of Mayan EDMS, API
|
||||||
|
endpoints are structured by resource type. Examples:
|
||||||
|
|
||||||
|
* /cabinets - To view or create new cabinets
|
||||||
|
* /cabinets/<id> - To view the details, edit, or delete an existing cabinet.
|
||||||
|
* /cabinets/<id>/documents - To view, add, or remove documents from an existing
|
||||||
|
cabinet.
|
||||||
|
* /cabinets/<id>/documents/<id> - To view, add, or remove one document from an
|
||||||
|
existing cabinet.
|
||||||
|
|
||||||
|
The API supports the HTTP verbs: **GET**, **POST**, **PUT**, **PATCH**,
|
||||||
|
and **DELETE**.
|
||||||
|
|
||||||
|
|
||||||
|
Example use
|
||||||
|
===========
|
||||||
|
|
||||||
|
Install Python Requests (http://docs.python-requests.org/en/master/)::
|
||||||
|
|
||||||
|
pip install requests
|
||||||
|
|
||||||
|
Get a list of document types::
|
||||||
|
|
||||||
|
import requests
|
||||||
|
|
||||||
|
requests.get('http://127.0.0.1:8000/api/document_types/', auth=('username', 'password')).json()
|
||||||
|
|
||||||
|
{u'count': 1,
|
||||||
|
u'next': None,
|
||||||
|
u'previous': None,
|
||||||
|
u'results': [{u'delete_time_period': 30,
|
||||||
|
u'delete_time_unit': u'days',
|
||||||
|
u'documents_count': 12,
|
||||||
|
u'documents_url': u'http://127.0.0.1:8000/api/document_types/1/documents/',
|
||||||
|
u'filenames': [],
|
||||||
|
u'id': 1,
|
||||||
|
u'label': u'Default',
|
||||||
|
u'trash_time_period': None,
|
||||||
|
u'trash_time_unit': None,
|
||||||
|
u'url': u'http://127.0.0.1:8000/api/document_types/1/'}]}
|
||||||
|
|
||||||
|
Upload a new document::
|
||||||
|
|
||||||
|
with open('test_document.pdf', mode='rb') as
|
||||||
|
requests.post('http://127.0.0.1:8000/api/documents/', auth=('username', 'password'), files={'file': file_object}, data={'document_type': 1}).json()
|
||||||
|
|
||||||
|
{u'description': u'',
|
||||||
|
u'document_type': 1,
|
||||||
|
u'id': 19,
|
||||||
|
u'label': u'test_document.pdf',
|
||||||
|
u'language': u'eng'}
|
||||||
|
|
||||||
|
Use API tokens to avoid sending the username and password on every request. Obtain a token by making a POST request to ``/api/auth/token/obtain/?format=json``::
|
||||||
|
|
||||||
|
requests.post('http://127.0.0.1:8000/api/auth/token/obtain/?format=json', data={'username': 'username', 'password': 'password'}).json()
|
||||||
|
|
||||||
|
{u'token': u'4ccbc35b5eb327aa82dc3b7c9747b578900f02bb'}
|
||||||
|
|
||||||
|
Add the API token to the request header::
|
||||||
|
|
||||||
|
headers = {'Authorization': 'Token 4ccbc35b5eb327aa82dc3b7c9747b578900f02bb'}
|
||||||
|
|
||||||
|
requests.get('http://127.0.0.1:8000/api/document_types/', headers=headers).json()
|
||||||
|
|
||||||
|
{u'description': u'',
|
||||||
|
u'document_type': 1,
|
||||||
|
u'id': 19,
|
||||||
|
u'label': u'test_document.pdf',
|
||||||
|
u'language': u'eng'}
|
||||||
|
|
||||||
|
|
||||||
|
Use sessions to avoid having to add the headers on each request::
|
||||||
|
|
||||||
|
session = requests.Session()
|
||||||
|
|
||||||
|
headers = {'Authorization': 'Token 4ccbc35b5eb327aa82dc3b7c9747b578900f02bb'}
|
||||||
|
|
||||||
|
session.headers.update(headers)
|
||||||
|
|
||||||
|
session.get('http://127.0.0.1:8000/api/document_types/')
|
||||||
|
|
||||||
|
{u'description': u'',
|
||||||
|
u'document_type': 1,
|
||||||
|
u'id': 19,
|
||||||
|
u'label': u'test_document.pdf',
|
||||||
|
u'language': u'eng'}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
============
|
************
|
||||||
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.
|
||||||
@@ -59,6 +59,17 @@ App modules
|
|||||||
corresponding signal in the ready() method of the MayanAppConfig subclass in
|
corresponding signal in the ready() method of the MayanAppConfig subclass in
|
||||||
apps.py
|
apps.py
|
||||||
|
|
||||||
|
- html_widgets.py
|
||||||
|
|
||||||
|
Classes to render an HTML widget. HTML widget are not the same as Django's
|
||||||
|
native form widgets. Form widgets only work as part of a form field.
|
||||||
|
HTML widgets are for use outside of forms, such as in a table cell.
|
||||||
|
|
||||||
|
- licenses.py
|
||||||
|
|
||||||
|
This module outlines the license text of the third party content used in
|
||||||
|
the app. It could be other Python libraries, JavaScript libraries, etc.
|
||||||
|
|
||||||
- links.py
|
- links.py
|
||||||
|
|
||||||
Defines the links to be used by the app. Import only from the navigation app
|
Defines the links to be used by the app. Import only from the navigation app
|
||||||
@@ -92,6 +103,11 @@ App modules
|
|||||||
This module acts as a shared memory space for the other modules of the app or
|
This module acts as a shared memory space for the other modules of the app or
|
||||||
other apps.
|
other apps.
|
||||||
|
|
||||||
|
- search.py
|
||||||
|
|
||||||
|
Search model definitions. Define which field of the app's models are
|
||||||
|
searchable.
|
||||||
|
|
||||||
- serializers.py
|
- serializers.py
|
||||||
|
|
||||||
Hold Django REST Framework serializers used by the api_views.py module.
|
Hold Django REST Framework serializers used by the api_views.py module.
|
||||||
@@ -127,7 +143,7 @@ App modules
|
|||||||
|
|
||||||
- widgets.py
|
- widgets.py
|
||||||
|
|
||||||
HTML widgets go here. This should be the only place with presentation
|
Custom form widgets go here. This should be the only place with presentation
|
||||||
directives in the app (aside the templates).
|
directives in the app (aside the templates).
|
||||||
|
|
||||||
|
|
||||||
70
docs/chapters/backups.rst
Normal file
70
docs/chapters/backups.rst
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
*******
|
||||||
|
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 the ``media`` folder of your installation.
|
||||||
|
|
||||||
|
To dump the content of your database manager refer to the documentation chapter
|
||||||
|
regarding database data "dumping".
|
||||||
|
|
||||||
|
Here is an example of how to perform a backup and a restore of a PostgreSQL
|
||||||
|
database.
|
||||||
|
|
||||||
|
To dump the database into an SQL text file::
|
||||||
|
|
||||||
|
pg_dump -h <host> -U <database user> -c <database name> -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
pg_dump -h 127.0.0.1 -U mayan -c mayan -W > `date +%Y-%m-%d"_"%H-%M-%S`.sql
|
||||||
|
|
||||||
|
To restore the database from the SQL text file::
|
||||||
|
|
||||||
|
psql -h <host> -U <database user> -d <database name> -W -f <sql dump file>
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
psql -h 127.0.0.1 -U mayan -d mayan -W -f 2018-06-07_18-10-56.sql
|
||||||
|
|
||||||
|
Here is an example of how to perform a backup and a restore of a PostgreSQL
|
||||||
|
Docker container using a compressed dump file. A dump file is not compatible or
|
||||||
|
can be used interchangeable with an SQL text file.
|
||||||
|
|
||||||
|
To backup a PostgreSQL Docker container::
|
||||||
|
|
||||||
|
docker exec <container name> pg_dump -U <database user> -Fc -c <database name> > `date +%Y-%m-%d"_"%H-%M-%S`.dump
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
docker exec mayan-edms-db pg_dump -U mayan -Fc -c mayan > `date +%Y-%m-%d"_"%H-%M-%S`.dump
|
||||||
|
|
||||||
|
This will produce a compressed dump file with the current date and time as the filename.
|
||||||
|
|
||||||
|
To restore a PostgreSQL Docker container::
|
||||||
|
|
||||||
|
docker exec -i <container name> pg_restore -U <database user> -d <database name> < <dump file>
|
||||||
|
|
||||||
|
Since it is not possible to drop a currently open PostgreSQL database, this
|
||||||
|
command must be used on a new and empty PostsgreSQL container.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name mayan-edms-pg-new \
|
||||||
|
--restart=always \
|
||||||
|
-p 5432:5432 \
|
||||||
|
-e POSTGRES_USER=mayan \
|
||||||
|
-e POSTGRES_DB=mayan \
|
||||||
|
-e POSTGRES_PASSWORD=mayanuserpass \
|
||||||
|
-v /docker-volumes/mayan-edms/postgres-new:/var/lib/postgresql/data \
|
||||||
|
-d postgres:9.6
|
||||||
|
|
||||||
|
docker exec -i mayan-edms-pg-new pg_restore -U mayan -d mayan < 2018-06-07_17-09-34.dump
|
||||||
|
|
||||||
|
More information at:
|
||||||
|
|
||||||
|
- PostgreSQL: https://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``
|
||||||
233
docs/chapters/caa_entity.rst
Normal file
233
docs/chapters/caa_entity.rst
Normal file
@@ -0,0 +1,233 @@
|
|||||||
|
**************************************************
|
||||||
|
Mayan EDMS Entity Contributor Assignment Agreement
|
||||||
|
**************************************************
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to Mayan EDMS ("We" or "Us").
|
||||||
|
|
||||||
|
This contributor agreement ("Agreement") documents the rights granted by
|
||||||
|
contributors to Us. To make this document effective, please print it, sign it
|
||||||
|
(by copyright holder or authorized party) and send it to Us by email to
|
||||||
|
caa@mayan-edms.com. This is a legally binding document, so please read it
|
||||||
|
carefully before agreeing to it. The Agreement may cover more than one
|
||||||
|
software project managed by Us.
|
||||||
|
|
||||||
|
|
||||||
|
1. Definitions
|
||||||
|
==============
|
||||||
|
"You" means any Legal Entity on behalf of whom a Contribution has been received
|
||||||
|
by Us. "Legal Entity" means an entity which is not a natural person.
|
||||||
|
"Affiliates" means other Legal Entities that control, are controlled by, or
|
||||||
|
under common control with that Legal Entity. For the purposes of this
|
||||||
|
definition, "control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such Legal Entity, whether by contract or otherwise,
|
||||||
|
(ii) ownership of fifty percent (50%) or more of the outstanding shares or
|
||||||
|
securities which vote to elect the management or other persons who direct such
|
||||||
|
Legal Entity or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"Contribution" means any work of authorship that is Submitted by You to Us in
|
||||||
|
which You own or assert ownership of the Copyright. We cannot accept
|
||||||
|
contributions for which you do not own the Copyright or for which you don't
|
||||||
|
have the necessary legal power to transfer.
|
||||||
|
|
||||||
|
"Copyright" means all rights protecting works of authorship owned or controlled
|
||||||
|
by You or Your Affiliates, including copyright, moral and neighboring rights,
|
||||||
|
as appropriate, for the full term of their existence including any extensions
|
||||||
|
by You.
|
||||||
|
|
||||||
|
"Material" means the work of authorship which is made available by Us to third
|
||||||
|
parties. When this Agreement covers more than one software project, the
|
||||||
|
Material means the work of authorship to which the Contribution was Submitted.
|
||||||
|
After You Submit the Contribution, it may be included in the Material.
|
||||||
|
|
||||||
|
"Submit" means any form of electronic, verbal, or written communication sent
|
||||||
|
to Us or our representatives, including but not limited to electronic mailing
|
||||||
|
lists, source code control systems, and issue tracking systems that are managed
|
||||||
|
by, or on behalf of, Us for the purpose of discussing and improving the
|
||||||
|
Material, but excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by You as "Not a Contribution."
|
||||||
|
|
||||||
|
"Submission Date" means the date on which You Submit a Contribution to Us.
|
||||||
|
|
||||||
|
"Effective Date" means the date You execute this Agreement or the date You
|
||||||
|
first Submit a Contribution to Us, whichever is earlier.
|
||||||
|
|
||||||
|
|
||||||
|
2. Grant of Rights
|
||||||
|
==================
|
||||||
|
|
||||||
|
2.1 Copyright Assignment
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
a. At the time the Contribution is Submitted, You assign to Us all right, title,
|
||||||
|
and interest worldwide in all Copyright covering the Contribution; provided
|
||||||
|
that this transfer is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
b. To the extent that any of the rights in Section 2.1(a) cannot be assigned by
|
||||||
|
You to Us, You grant to Us a perpetual, worldwide, exclusive, royalty-free,
|
||||||
|
transferable, irrevocable license under such non-assigned rights, with rights
|
||||||
|
to sublicense through multiple tiers of sublicensees, to practice such
|
||||||
|
non-assigned rights, including, but not limited to, the right to reproduce,
|
||||||
|
modify, display, perform and distribute the Contribution; provided that this
|
||||||
|
license is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
c. To the extent that any of the rights in Section 2.1(a) can neither be
|
||||||
|
assigned nor licensed by You to Us, You irrevocably waive and agree never to
|
||||||
|
assert such rights against Us, any of our successors in interest, or any of
|
||||||
|
our licensees, either direct or indirect; provided that this agreement not
|
||||||
|
to assert is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
d. Upon such transfer of rights to Us, the Contribution will be licenses under
|
||||||
|
the terms of the Material.
|
||||||
|
|
||||||
|
2.2 Patent License
|
||||||
|
------------------
|
||||||
|
|
||||||
|
For patent claims including, without limitation, method, process, and apparatus
|
||||||
|
claims which You or Your Affiliates own, control or have the right to grant,
|
||||||
|
now or in the future, You grant to Us a perpetual, worldwide, non-exclusive,
|
||||||
|
transferable, royalty-free, irrevocable patent license, with the right to
|
||||||
|
sublicense these rights to multiple tiers of sublicensees, to make, have made,
|
||||||
|
use, sell, offer for sale, import and otherwise transfer the Contribution and
|
||||||
|
the Contribution in combination with the Material (and portions of such
|
||||||
|
combination). This license is granted only to the extent that the exercise of
|
||||||
|
the licensed rights infringes such patent claims; and provided that this license
|
||||||
|
is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
2.3 Outbound License
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
As a condition on the grant of rights in Sections 2.1 and 2.2, We agree to
|
||||||
|
license the Contribution only under the terms of the license or licenses which
|
||||||
|
We are using on the Submission Date for the Material (including any rights to
|
||||||
|
adopt any future version of a license if permitted).
|
||||||
|
|
||||||
|
2.4 Moral Rights
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If moral rights apply to the Contribution, to the maximum extent permitted by
|
||||||
|
law, You waive and agree not to assert such moral rights against Us or our
|
||||||
|
successors in interest, or any of our licensees, either direct or indirect.
|
||||||
|
|
||||||
|
2.5 Our Rights
|
||||||
|
--------------
|
||||||
|
|
||||||
|
You acknowledge that We are not obligated to use Your Contribution as part of
|
||||||
|
the Material and may decide to include any Contribution We consider appropriate.
|
||||||
|
|
||||||
|
2.6 Reservation of Rights
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Any rights not expressly assigned or licensed under this section are expressly
|
||||||
|
reserved by You.
|
||||||
|
|
||||||
|
|
||||||
|
3. Agreement
|
||||||
|
============
|
||||||
|
|
||||||
|
You confirm that:
|
||||||
|
|
||||||
|
a. You have the legal authority to enter into this Agreement.
|
||||||
|
|
||||||
|
b. You or Your Affiliates own the Copyright and patent claims covering the
|
||||||
|
Contribution which are required to grant the rights under Section 2.
|
||||||
|
|
||||||
|
c. The grant of rights under Section 2 does not violate any grant of rights
|
||||||
|
which You or Your Affiliates have made to third parties.
|
||||||
|
|
||||||
|
|
||||||
|
4. Disclaimer
|
||||||
|
=============
|
||||||
|
|
||||||
|
EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, THE CONTRIBUTION IS PROVIDED
|
||||||
|
"AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING,
|
||||||
|
WITHOUT LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US
|
||||||
|
AND BY US TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED,
|
||||||
|
SUCH WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW.
|
||||||
|
|
||||||
|
|
||||||
|
5. Consequential Damage Waiver
|
||||||
|
==============================
|
||||||
|
|
||||||
|
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR US
|
||||||
|
BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA,
|
||||||
|
INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT
|
||||||
|
OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT
|
||||||
|
OR OTHERWISE) UPON WHICH THE CLAIM IS BASED.
|
||||||
|
|
||||||
|
|
||||||
|
6. Miscellaneous
|
||||||
|
================
|
||||||
|
|
||||||
|
6.1 Jurisdiction
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This Agreement will be governed by and construed in accordance with the laws of
|
||||||
|
Puerto Rico excluding its conflicts of law provisions. Under certain circumstances,
|
||||||
|
the governing law in this section might be superseded by the United Nations
|
||||||
|
Convention on Contracts for the International Sale of Goods ("UN Convention")
|
||||||
|
and the parties intend to avoid the application of the UN Convention to this
|
||||||
|
Agreement and, thus, exclude the application of the UN Convention in its
|
||||||
|
entirety to this Agreement.
|
||||||
|
|
||||||
|
6.2 Acceptance
|
||||||
|
--------------
|
||||||
|
This Agreement sets out the entire agreement between You and Us for Your
|
||||||
|
Contributions to Us and overrides all other agreements or understandings.
|
||||||
|
|
||||||
|
6.3 Third parties
|
||||||
|
-----------------
|
||||||
|
If You or We assign the rights or obligations received through this Agreement
|
||||||
|
to a third party, as a condition of the assignment, that third party must
|
||||||
|
agree in writing to abide by all the rights and obligations in the Agreement.
|
||||||
|
|
||||||
|
6.4 Unmet responsibilities
|
||||||
|
--------------------------
|
||||||
|
The failure of either party to require performance by the other party of any
|
||||||
|
provision of this Agreement in one situation shall not affect the right of a
|
||||||
|
party to require such performance at any time in the future. A waiver of
|
||||||
|
performance under a provision in one situation shall not be considered a
|
||||||
|
waiver of the performance of the provision in the future or a waiver of the
|
||||||
|
provision in its entirety.
|
||||||
|
|
||||||
|
6.5 Continuation
|
||||||
|
----------------
|
||||||
|
If any provision of this Agreement is found void and unenforceable, such
|
||||||
|
provision will be replaced to the extent possible with a provision that comes
|
||||||
|
closest to the meaning of the original provision and which is enforceable.
|
||||||
|
The terms and conditions set forth in this Agreement shall apply
|
||||||
|
notwithstanding any failure of essential purpose of this Agreement or any
|
||||||
|
limited remedy to the maximum extent possible under law.
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
|
||||||
|
Name: _________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Email: ________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Address: ______________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Address (cont): _______________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Country: ______________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Phone number: _________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Fax number: ___________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________________
|
||||||
|
Signature
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Mayan EDMS Entity CAA Version 1.0 April 8, 2018
|
||||||
234
docs/chapters/caa_individual.rst
Normal file
234
docs/chapters/caa_individual.rst
Normal file
@@ -0,0 +1,234 @@
|
|||||||
|
******************************************************
|
||||||
|
Mayan EDMS Individual Contributor Assignment Agreement
|
||||||
|
******************************************************
|
||||||
|
|
||||||
|
Thank you for your interest in contributing to Mayan EDMS ("We" or "Us").
|
||||||
|
|
||||||
|
This contributor agreement ("Agreement") documents the rights granted by
|
||||||
|
contributors to Us. To make this document effective, please print it, sign it
|
||||||
|
(by copyright holder or authorized party) and send it to Us by email to
|
||||||
|
caa@mayan-edms.com. This is a legally binding document, so please read it
|
||||||
|
carefully before agreeing to it. The Agreement may cover more than one
|
||||||
|
software project managed by Us.
|
||||||
|
|
||||||
|
1. Definitions
|
||||||
|
==============
|
||||||
|
|
||||||
|
"You" means the individual who Submits a Contribution to Us.
|
||||||
|
|
||||||
|
"Contribution" means any work of authorship that is Submitted by You to Us
|
||||||
|
in which You own or assert ownership of the Copyright. We cannot accept
|
||||||
|
contributions for which you do not own the Copyright or for which you don't
|
||||||
|
have the necessary legal power to transfer.
|
||||||
|
|
||||||
|
"Copyright" means all rights protecting works of authorship owned or
|
||||||
|
controlled by You, including copyright, moral and neighboring rights,
|
||||||
|
as appropriate, for the full term of their existence including any extensions
|
||||||
|
by You.
|
||||||
|
|
||||||
|
"Material" means the work of authorship which is made available by Us to third
|
||||||
|
parties. When this Agreement covers more than one software project, the Material
|
||||||
|
means the work of authorship to which the Contribution was Submitted. After
|
||||||
|
You Submit the Contribution, it may be included in the Material.
|
||||||
|
|
||||||
|
"Submit" means any form of electronic, verbal, or written communication
|
||||||
|
sent to Us or our representatives, including but not limited to
|
||||||
|
electronic mailing lists, source code control systems, and issue tracking systems
|
||||||
|
that are managed by, or on behalf of, Us for the purpose of discussing and
|
||||||
|
improving the Material, but excluding communication that is conspicuously marked
|
||||||
|
or otherwise designated in writing by You as "Not a Contribution."
|
||||||
|
|
||||||
|
"Submission Date" means the date on which You Submit a Contribution to Us.
|
||||||
|
|
||||||
|
"Effective Date" means the date You execute this Agreement or the date You first
|
||||||
|
Submit a Contribution to Us, whichever is earlier.
|
||||||
|
|
||||||
|
2. Grant of Rights
|
||||||
|
==================
|
||||||
|
|
||||||
|
2.1 Copyright Assignment
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
a. At the time the Contribution is Submitted, You assign to Us all right,
|
||||||
|
title, and interest worldwide in all Copyright covering the Contribution;
|
||||||
|
provided that this transfer is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
b. To the extent that any of the rights in Section 2.1(a) cannot be assigned
|
||||||
|
by You to Us, You grant to Us a perpetual, worldwide, exclusive, royalty-free,
|
||||||
|
transferable, irrevocable license under such non-assigned rights, with rights
|
||||||
|
to sublicense through multiple tiers of sublicensees, to practice such
|
||||||
|
non-assigned rights, including, but not limited to, the right to reproduce,
|
||||||
|
modify, display, perform and distribute the Contribution; provided that
|
||||||
|
this license is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
c. To the extent that any of the rights in Section 2.1(a) can neither be
|
||||||
|
assigned nor licensed by You to Us, You irrevocably waive and agree never to
|
||||||
|
assert such rights against Us, any of our successors in interest, or any of
|
||||||
|
our licensees, either direct or indirect; provided that this agreement not
|
||||||
|
to assert is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
d. Upon such transfer of rights to Us, the Contribution will be licenses under
|
||||||
|
the terms of the Material.
|
||||||
|
|
||||||
|
|
||||||
|
2.2 Patent License
|
||||||
|
------------------
|
||||||
|
|
||||||
|
For patent claims including, without limitation, method, process, and apparatus
|
||||||
|
claims which You own, control or have the right to grant, now or in the future,
|
||||||
|
You grant to Us a perpetual, worldwide, non-exclusive, transferable, royalty-free,
|
||||||
|
irrevocable patent license, with the right to sublicense these rights to multiple
|
||||||
|
tiers of sublicensees, to make, have made, use, sell, offer for sale, import and
|
||||||
|
otherwise transfer the Contribution and the Contribution in combination with
|
||||||
|
the Material (and portions of such combination). This license is granted only
|
||||||
|
to the extent that the exercise of the licensed rights infringes such patent claims;
|
||||||
|
and provided that this license is conditioned upon compliance with Section 2.3.
|
||||||
|
|
||||||
|
|
||||||
|
2.3 Outbound License
|
||||||
|
--------------------
|
||||||
|
As a condition on the grant of rights in Sections 2.1 and 2.2, We agree to
|
||||||
|
license the Contribution only under the terms of the license or licenses which
|
||||||
|
We are using on the Submission Date for the Material (including any rights to
|
||||||
|
adopt any future version of a license if permitted).
|
||||||
|
|
||||||
|
|
||||||
|
2.4 Moral Rights
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If moral rights apply to the Contribution, to the maximum extent permitted by law,
|
||||||
|
You waive and agree not to assert such moral rights against Us or our successors
|
||||||
|
in interest, or any of our licensees, either direct or indirect.
|
||||||
|
|
||||||
|
|
||||||
|
2.5 Our Rights
|
||||||
|
--------------
|
||||||
|
|
||||||
|
You acknowledge that We are not obligated to use Your Contribution as part of
|
||||||
|
the Material and may decide to include any Contribution We consider appropriate.
|
||||||
|
|
||||||
|
|
||||||
|
2.6 Reservation of Rights
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Any rights not expressly assigned or licensed under this section are expressly
|
||||||
|
reserved by You.
|
||||||
|
|
||||||
|
|
||||||
|
3. Agreement
|
||||||
|
============
|
||||||
|
|
||||||
|
You confirm that:
|
||||||
|
|
||||||
|
a. You have the legal authority to enter into this Agreement.
|
||||||
|
|
||||||
|
b. You own the Copyright and patent claims covering the Contribution which are
|
||||||
|
required to grant the rights under Section 2.
|
||||||
|
|
||||||
|
c. The grant of rights under Section 2 does not violate any grant of rights
|
||||||
|
which You have made to third parties, including Your employer. If You are an
|
||||||
|
employee, You have had Your employer approve this Agreement or sign the Entity
|
||||||
|
version of this document. If You are less than eighteen years old, please have
|
||||||
|
Your parents or guardian sign the Agreement.
|
||||||
|
|
||||||
|
|
||||||
|
4. Disclaimer
|
||||||
|
=============
|
||||||
|
|
||||||
|
EXCEPT FOR THE EXPRESS WARRANTIES IN SECTION 3, THE CONTRIBUTION IS PROVIDED
|
||||||
|
"AS IS". MORE PARTICULARLY, ALL EXPRESS OR IMPLIED WARRANTIES INCLUDING, WITHOUT
|
||||||
|
LIMITATION, ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
|
||||||
|
PURPOSE AND NON-INFRINGEMENT ARE EXPRESSLY DISCLAIMED BY YOU TO US AND BY US
|
||||||
|
TO YOU. TO THE EXTENT THAT ANY SUCH WARRANTIES CANNOT BE DISCLAIMED, SUCH
|
||||||
|
WARRANTY IS LIMITED IN DURATION TO THE MINIMUM PERIOD PERMITTED BY LAW.
|
||||||
|
|
||||||
|
|
||||||
|
5. Consequential Damage Waiver
|
||||||
|
==============================
|
||||||
|
|
||||||
|
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, IN NO EVENT WILL YOU OR US
|
||||||
|
BE LIABLE FOR ANY LOSS OF PROFITS, LOSS OF ANTICIPATED SAVINGS, LOSS OF DATA,
|
||||||
|
INDIRECT, SPECIAL, INCIDENTAL, CONSEQUENTIAL AND EXEMPLARY DAMAGES ARISING OUT
|
||||||
|
OF THIS AGREEMENT REGARDLESS OF THE LEGAL OR EQUITABLE THEORY (CONTRACT, TORT
|
||||||
|
OR OTHERWISE) UPON WHICH THE CLAIM IS BASED.
|
||||||
|
|
||||||
|
|
||||||
|
6. Miscellaneous
|
||||||
|
================
|
||||||
|
|
||||||
|
6.1 Jurisdiction
|
||||||
|
----------------
|
||||||
|
|
||||||
|
This Agreement will be governed by and construed in accordance with the laws of
|
||||||
|
Puerto Rico excluding its conflicts of law provisions. Under certain circumstances,
|
||||||
|
the governing law in this section might be superseded by the United Nations
|
||||||
|
Convention on Contracts for the International Sale of Goods ("UN Convention")
|
||||||
|
and the parties intend to avoid the application of the UN Convention to this
|
||||||
|
Agreement and, thus, exclude the application of the UN Convention in its
|
||||||
|
entirety to this Agreement.
|
||||||
|
|
||||||
|
6.2 Acceptance
|
||||||
|
--------------
|
||||||
|
|
||||||
|
This Agreement sets out the entire agreement between You and Us for Your
|
||||||
|
Contributions to Us and overrides all other agreements or understandings.
|
||||||
|
|
||||||
|
6.3 Third parties
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
If You or We assign the rights or obligations received through this Agreement
|
||||||
|
to a third party, as a condition of the assignment, that third party must
|
||||||
|
agree in writing to abide by all the rights and obligations in the Agreement.
|
||||||
|
|
||||||
|
6.4 Unmet responsibilities
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
The failure of either party to require performance by the other party of any
|
||||||
|
provision of this Agreement in one situation shall not affect the right of a
|
||||||
|
party to require such performance at any time in the future. A waiver of
|
||||||
|
performance under a provision in one situation shall not be considered a
|
||||||
|
waiver of the performance of the provision in the future or a waiver of the
|
||||||
|
provision in its entirety.
|
||||||
|
|
||||||
|
6.5 Continuation
|
||||||
|
----------------
|
||||||
|
|
||||||
|
If any provision of this Agreement is found void and unenforceable,
|
||||||
|
such provision will be replaced to the extent possible with a provision that
|
||||||
|
comes closest to the meaning of the original provision and which is enforceable.
|
||||||
|
The terms and conditions set forth in this Agreement shall apply notwithstanding
|
||||||
|
any failure of essential purpose of this Agreement or any limited remedy to
|
||||||
|
the maximum extent possible under law.
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
|
||||||
|
Name: _________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Email: ________________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Address: ______________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Address (cont): _______________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Country: ______________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Phone number: _________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
Fax number: ___________________________________________
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
_______________________________________________________
|
||||||
|
Signature
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Mayan EDMS Individual CAA Version 1.0 April 8, 2018
|
||||||
14
docs/chapters/cabinets.rst
Normal file
14
docs/chapters/cabinets.rst
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
Cabinets
|
||||||
|
========
|
||||||
|
|
||||||
|
Cabinets are a multi-level method to organize documents. Each cabinet can
|
||||||
|
contain documents as well as other sub level cabinets. Cabinets can
|
||||||
|
be added from the :menuselection:`Cabinets --> Add new` menu.
|
||||||
|
|
||||||
|
With a cabinet structure created, the next step is to add documents to them.
|
||||||
|
To add documents to a cabinet, select the cabinet tab of a document, and
|
||||||
|
select :menuselection:`Actions --> Add to cabinets` link.
|
||||||
|
|
||||||
|
Documents can also be added in bulk to one or more cabinets from any view
|
||||||
|
that lists documents.
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
=========
|
*********
|
||||||
Checkouts
|
Checkouts
|
||||||
=========
|
*********
|
||||||
|
|
||||||
Checkouts are a way to block certain accesses or actions of a document for a
|
Checkouts are a way to block certain accesses or actions of a document for a
|
||||||
period of time.
|
period of time.
|
||||||
103
docs/chapters/database_conversion.rst
Normal file
103
docs/chapters/database_conversion.rst
Normal file
@@ -0,0 +1,103 @@
|
|||||||
|
*******************
|
||||||
|
Database conversion
|
||||||
|
*******************
|
||||||
|
|
||||||
|
Version 3.1.x added a new management command to help convert data residing in
|
||||||
|
an SQLite database to other database managers like PostgreSQL. Here is the
|
||||||
|
conversion procedure.
|
||||||
|
|
||||||
|
Direct install
|
||||||
|
==============
|
||||||
|
|
||||||
|
* Make a backup of your existing SQLite database and documents by copying the
|
||||||
|
``/opt/mayan-edms/media`` folder.
|
||||||
|
* :doc:`Upgrade to at least version 3.1.3. <../releases/3.1.3>`
|
||||||
|
* Migrate the existing SQLite database with the command ``performupgrade``::
|
||||||
|
|
||||||
|
sudo -u mayan MAYAN_MEDIA_ROOT=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py performupgrade
|
||||||
|
|
||||||
|
* Install PostgreSQL::
|
||||||
|
|
||||||
|
sudo apt-get install postgresql libpq-dev
|
||||||
|
|
||||||
|
* Provision a PostgreSQL database::
|
||||||
|
|
||||||
|
sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';"
|
||||||
|
sudo -u postgres createdb -O mayan mayan
|
||||||
|
|
||||||
|
* Install the Python client for PostgreSQL::
|
||||||
|
|
||||||
|
sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psycopg2==2.7.3.2
|
||||||
|
|
||||||
|
* Copy the newly created fallback config file::
|
||||||
|
|
||||||
|
cp /opt/mayan-edms/media/config_backup.yml /opt/mayan-edms/media/config.yml
|
||||||
|
|
||||||
|
* Edit the configuration file to add the entry for the PostgreSQL database and
|
||||||
|
rename the SQLite database to 'old'::
|
||||||
|
|
||||||
|
# Before
|
||||||
|
DATABASES:
|
||||||
|
default:
|
||||||
|
ATOMIC_REQUESTS: false
|
||||||
|
AUTOCOMMIT: true
|
||||||
|
CONN_MAX_AGE: 0
|
||||||
|
ENGINE: django.db.backends.sqlite3
|
||||||
|
HOST: ''
|
||||||
|
NAME: /opt/mayan-edms/media/db.sqlite3
|
||||||
|
OPTIONS: {}
|
||||||
|
PASSWORD: ''
|
||||||
|
PORT: ''
|
||||||
|
TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null}
|
||||||
|
TIME_ZONE: null
|
||||||
|
USER: ''
|
||||||
|
|
||||||
|
# After
|
||||||
|
DATABASES:
|
||||||
|
old:
|
||||||
|
ATOMIC_REQUESTS: false
|
||||||
|
AUTOCOMMIT: true
|
||||||
|
CONN_MAX_AGE: 0
|
||||||
|
ENGINE: django.db.backends.sqlite3
|
||||||
|
HOST: ''
|
||||||
|
NAME: /opt/mayan-edms/media/db.sqlite3
|
||||||
|
OPTIONS: {}
|
||||||
|
PASSWORD: ''
|
||||||
|
PORT: ''
|
||||||
|
TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null}
|
||||||
|
TIME_ZONE: null
|
||||||
|
USER: ''
|
||||||
|
default:
|
||||||
|
ATOMIC_REQUESTS: false
|
||||||
|
AUTOCOMMIT: true
|
||||||
|
CONN_MAX_AGE: 0
|
||||||
|
ENGINE: django.db.backends.postgresql
|
||||||
|
HOST: '127.0.0.1'
|
||||||
|
NAME: /opt/mayan-edms/media/db.sqlite3
|
||||||
|
OPTIONS: {}
|
||||||
|
PASSWORD: 'mayanuserpass'
|
||||||
|
PORT: ''
|
||||||
|
TEST: {CHARSET: null, COLLATION: null, MIRROR: null, NAME: null}
|
||||||
|
TIME_ZONE: null
|
||||||
|
USER: 'mayan'
|
||||||
|
|
||||||
|
* Migrate the new database to create the empty tables::
|
||||||
|
|
||||||
|
sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py migrate
|
||||||
|
|
||||||
|
* Convert the data in the SQLite and store it in the PostgreSQL database::
|
||||||
|
|
||||||
|
sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=/opt/mayan-edms/media /opt/mayan-edms/bin/mayan-edms.py convertdb --from=old --to=default --force
|
||||||
|
|
||||||
|
* Update the supervisor config file to have Mayan EDMS run from the PostgreSQL database::
|
||||||
|
|
||||||
|
[supervisord]
|
||||||
|
environment=
|
||||||
|
<...>
|
||||||
|
MAYAN_DATABASE_ENGINE=django.db.backends.postgresql,
|
||||||
|
MAYAN_DATABASE_HOST=127.0.0.1,
|
||||||
|
MAYAN_DATABASE_NAME=mayan,
|
||||||
|
MAYAN_DATABASE_PASSWORD=mayanuserpass,
|
||||||
|
MAYAN_DATABASE_USER=mayan,
|
||||||
|
MAYAN_DATABASE_CONN_MAX_AGE=0,
|
||||||
|
<...>
|
||||||
256
docs/chapters/deploying.rst
Normal file
256
docs/chapters/deploying.rst
Normal file
@@ -0,0 +1,256 @@
|
|||||||
|
******************
|
||||||
|
Direct deployments
|
||||||
|
******************
|
||||||
|
|
||||||
|
Mayan EDMS should be deployed like any other Django_ project and
|
||||||
|
preferably using virtualenv_. Below are some ways to deploy and use Mayan EDMS.
|
||||||
|
Do not use more than one method.
|
||||||
|
|
||||||
|
Being a Django_ and a Python_ project, familiarity with these technologies is
|
||||||
|
recommended to better understand why Mayan EDMS does some of the things it
|
||||||
|
does.
|
||||||
|
|
||||||
|
Compilers and development libraries will be installed to compile runtime
|
||||||
|
libraries. LibreOffice and Poppler utils will also be installed as they are
|
||||||
|
used to convert document files. Supervisor (http://supervisord.org/), a
|
||||||
|
Process Control System, will be used to monitor and keep all Mayan processes
|
||||||
|
running.
|
||||||
|
|
||||||
|
|
||||||
|
Basic deployment
|
||||||
|
================
|
||||||
|
This setup uses less memory and CPU resources at the expense of some speed.
|
||||||
|
For another setup that offers more performance and scalability refer to the
|
||||||
|
`Advanced deployment`_ below.
|
||||||
|
|
||||||
|
1. Install binary dependencies:
|
||||||
|
-------------------------------
|
||||||
|
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
|
||||||
|
requirements using::
|
||||||
|
|
||||||
|
sudo apt-get install g++ gcc ghostscript gnupg1 graphviz libfuse2 \
|
||||||
|
libjpeg-dev libmagic1 libpq-dev libpng-dev libreoffice libtiff-dev \
|
||||||
|
poppler-utils postgresql python-dev python-virtualenv redis-server \
|
||||||
|
sane-utils supervisor tesseract-ocr zlib1g-dev -y
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Platforms with the ARM CPU might also need additional requirements.
|
||||||
|
::
|
||||||
|
|
||||||
|
apt-sudo get libffi-dev libssl-dev -y
|
||||||
|
|
||||||
|
|
||||||
|
2. Create the user account for the installation:
|
||||||
|
------------------------------------------------
|
||||||
|
This will create an unpriviledge user account that is also unable to login.
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo adduser mayan --disabled-password --disabled-login --no-create-home --gecos ""
|
||||||
|
|
||||||
|
|
||||||
|
3. Create the parent directory where the project will be deployed:
|
||||||
|
------------------------------------------------------------------
|
||||||
|
``/opt/`` is a good choice as it is meant is for "software and add-on packages
|
||||||
|
that are not part of the default installation". (https://www.tldp.org/LDP/Linux-Filesystem-Hierarchy/html/opt.html)
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo mkdir /opt
|
||||||
|
|
||||||
|
|
||||||
|
4. Create the Python virtual environment:
|
||||||
|
-----------------------------------------
|
||||||
|
This will keep all the Python packages installed here isolated from the rest
|
||||||
|
of the Pythoon packages in the system.
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo virtualenv /opt/mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
5. Make the mayan user the owner of the installation directory:
|
||||||
|
---------------------------------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo chown mayan:mayan /opt/mayan-edms -R
|
||||||
|
|
||||||
|
|
||||||
|
6. Install Mayan EDMS from PyPI:
|
||||||
|
--------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
7. Install the Python client for PostgreSQL and Redis:
|
||||||
|
------------------------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psycopg2==2.7.3.2 redis==2.10.6
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Platforms with the ARM CPU might also need additional requirements.
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 psutil==5.6.2
|
||||||
|
|
||||||
|
|
||||||
|
8. Create the database for the installation:
|
||||||
|
--------------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u postgres psql -c "CREATE USER mayan WITH password 'mayanuserpass';"
|
||||||
|
sudo -u postgres createdb -O mayan mayan
|
||||||
|
|
||||||
|
|
||||||
|
9. Initialize the project:
|
||||||
|
--------------------------
|
||||||
|
This step will create all the database structures, download static media files
|
||||||
|
like JavaScript libraries and HTML frameworks, and create and initial admin
|
||||||
|
account with a random password.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
For simplicity, the ``MAYAN_MEDIA_ROOT`` folder is set to be a subfolder
|
||||||
|
of the installation. If you want to keep your files separated from
|
||||||
|
the installation files, change the value of the ``MAYAN_MEDIR_ROOT``
|
||||||
|
variable in this and all subsequent steps. Be sure to first create the
|
||||||
|
folder and give owership of it to the ``mayan`` user with the ``chown``
|
||||||
|
command.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
If this step is interrupted, even if it is later resumed, will
|
||||||
|
cause the automatic admin user to no be created in some cases. Make sure all
|
||||||
|
environment variable and values are correct. If this happens, refer to the
|
||||||
|
troubleshooting chapters: :ref:`troubleshooting-autoadmin-account` and
|
||||||
|
:ref:`troubleshooting-admin-password`.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \
|
||||||
|
MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \
|
||||||
|
MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \
|
||||||
|
/opt/mayan-edms/bin/mayan-edms.py initialsetup
|
||||||
|
|
||||||
|
|
||||||
|
10. Collect the static files:
|
||||||
|
-----------------------------
|
||||||
|
This step merges and compressed static media files so they can be served more
|
||||||
|
effectively.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \
|
||||||
|
/opt/mayan-edms/bin/mayan-edms.py preparestatic --noinput
|
||||||
|
|
||||||
|
|
||||||
|
11. Create the supervisor file at ``/etc/supervisor/conf.d/mayan.conf``:
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
MAYAN_DATABASE_ENGINE=django.db.backends.postgresql MAYAN_DATABASE_NAME=mayan \
|
||||||
|
MAYAN_DATABASE_PASSWORD=mayanuserpass MAYAN_DATABASE_USER=mayan \
|
||||||
|
MAYAN_DATABASE_HOST=127.0.0.1 MAYAN_MEDIA_ROOT=/opt/mayan-edms/media \
|
||||||
|
/opt/mayan-edms/bin/mayan-edms.py platformtemplate supervisord > /etc/supervisor/conf.d/mayan.conf
|
||||||
|
|
||||||
|
|
||||||
|
12. Configure Redis:
|
||||||
|
--------------------
|
||||||
|
Configure Redit to discard data when it runs out of memory, not save its
|
||||||
|
database and only keep 1 database:
|
||||||
|
::
|
||||||
|
|
||||||
|
echo "maxmemory-policy allkeys-lru" >> /etc/redis/redis.conf
|
||||||
|
echo "save \"\"" >> /etc/redis/redis.conf
|
||||||
|
echo "databases 1" >> /etc/redis/redis.conf
|
||||||
|
systemctl restart redis
|
||||||
|
|
||||||
|
13. Enable and restart the services [1_]:
|
||||||
|
-----------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
systemctl enable supervisor
|
||||||
|
systemctl restart supervisor
|
||||||
|
|
||||||
|
|
||||||
|
14. Cleaning up:
|
||||||
|
----------------
|
||||||
|
The following operating system dependencies are only needed during
|
||||||
|
installation and can be removed.
|
||||||
|
::
|
||||||
|
|
||||||
|
apt-get remove --purge libjpeg-dev libpq-dev libpng-dev libtiff-dev zlib1g-dev
|
||||||
|
|
||||||
|
|
||||||
|
.. _deployment_advanced:
|
||||||
|
|
||||||
|
Advanced deployment
|
||||||
|
===================
|
||||||
|
|
||||||
|
This variation uses RabbitMQ as the message broker. RabbitMQ consumes more
|
||||||
|
memory but scales to thousands of messages per second. RabbitMQ messages are also
|
||||||
|
persistent by default, this means that pending tasks are not lost in the case
|
||||||
|
of a restart or power failure. The Gunicorn workers are increased to 3.
|
||||||
|
|
||||||
|
|
||||||
|
1. Install RabbitMQ:
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
If using a Debian_ or Ubuntu_ based Linux distribution, get the executable
|
||||||
|
requirements using::
|
||||||
|
|
||||||
|
sudo apt-get install rabbitmq-server -y
|
||||||
|
|
||||||
|
|
||||||
|
2. Install the Python client for RabbitMQ:
|
||||||
|
------------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo -u mayan /opt/mayan-edms/bin/pip install --no-cache-dir --no-use-pep517 librabbitmq==2.0.0
|
||||||
|
|
||||||
|
|
||||||
|
3. Create the RabbitMQ user and vhost:
|
||||||
|
--------------------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
sudo rabbitmqctl add_user mayan mayanrabbitmqpassword
|
||||||
|
sudo rabbitmqctl add_vhost mayan
|
||||||
|
sudo rabbitmqctl set_permissions -p mayan mayan ".*" ".*" ".*"
|
||||||
|
|
||||||
|
|
||||||
|
4. Edit the supervisor file at ``/etc/supervisor/conf.d/mayan.conf``:
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
Replace (paying attention to the comma at the end)::
|
||||||
|
|
||||||
|
MAYAN_BROKER_URL="redis://127.0.0.1:6379/0",
|
||||||
|
|
||||||
|
with::
|
||||||
|
|
||||||
|
MAYAN_BROKER_URL="amqp://mayan:mayanuserpass@localhost:5672/mayan",
|
||||||
|
|
||||||
|
increase the number of Gunicorn workers to 3 in the line (``-w 2`` section)::
|
||||||
|
|
||||||
|
command = /opt/mayan-edms/bin/gunicorn -w 2 mayan.wsgi --max-requests 1000 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120
|
||||||
|
|
||||||
|
remove the concurrency limit (or increase it) of the fast worker (remove ``--concurrency=1``).
|
||||||
|
|
||||||
|
|
||||||
|
5. Restart the services:
|
||||||
|
------------------------
|
||||||
|
::
|
||||||
|
|
||||||
|
supervisorctl restart all
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
[1]: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740
|
||||||
|
|
||||||
|
.. _Debian: https://www.debian.org/
|
||||||
|
.. _Django: https://www.djangoproject.com/
|
||||||
|
.. _Python: https://www.python.org/
|
||||||
|
.. _SQLite: https://www.sqlite.org/
|
||||||
|
.. _Ubuntu: http://www.ubuntu.com/
|
||||||
|
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html
|
||||||
|
.. _1: https://bugs.launchpad.net/ubuntu/+source/supervisor/+bug/1594740
|
||||||
549
docs/chapters/development.rst
Normal file
549
docs/chapters/development.rst
Normal file
File diff suppressed because it is too large
Load Diff
447
docs/chapters/docker.rst
Normal file
447
docs/chapters/docker.rst
Normal file
@@ -0,0 +1,447 @@
|
|||||||
|
============
|
||||||
|
Docker image
|
||||||
|
============
|
||||||
|
|
||||||
|
How to use this image
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. _docker_install:
|
||||||
|
|
||||||
|
Start a Mayan EDMS Docker image
|
||||||
|
-------------------------------
|
||||||
|
|
||||||
|
With Docker properly installed, proceed to download the Mayan EDMS image using
|
||||||
|
the command::
|
||||||
|
|
||||||
|
docker pull mayanedms/mayanedms:<version>
|
||||||
|
|
||||||
|
Instead of a specific version tag you may use then generic ``:latest`` tag
|
||||||
|
to the get latest version available automatically. If you use the ``:latest``
|
||||||
|
tag here, remember to do so in the next steps also.::
|
||||||
|
|
||||||
|
docker pull mayanedms/mayanedms:latest
|
||||||
|
|
||||||
|
Then download version 9.6 of the Docker PostgreSQL image::
|
||||||
|
|
||||||
|
docker pull postgres:9.6
|
||||||
|
|
||||||
|
Create and run a PostgreSQL container::
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name mayan-edms-postgres \
|
||||||
|
--restart=always \
|
||||||
|
-p 5432:5432 \
|
||||||
|
-e POSTGRES_USER=mayan \
|
||||||
|
-e POSTGRES_DB=mayan \
|
||||||
|
-e POSTGRES_PASSWORD=mayanuserpass \
|
||||||
|
-v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \
|
||||||
|
-d postgres:9.6
|
||||||
|
|
||||||
|
The PostgreSQL container will have one database named ``mayan``, with an user
|
||||||
|
named ``mayan`` too, with a password of ``mayanuserpass``. The container will
|
||||||
|
expose its internal 5432 port (PostgreSQL's default port) via the host's
|
||||||
|
5432 port. The data of this container will reside on the host's
|
||||||
|
``/docker-volumes/mayan-edms/postgres`` folder.
|
||||||
|
|
||||||
|
Finally create and run a Mayan EDMS container.
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name mayan-edms \
|
||||||
|
--restart=always \
|
||||||
|
-p 80:8000 \
|
||||||
|
-e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \
|
||||||
|
-e MAYAN_DATABASE_HOST=172.17.0.1 \
|
||||||
|
-e MAYAN_DATABASE_NAME=mayan \
|
||||||
|
-e MAYAN_DATABASE_PASSWORD=mayanuserpass \
|
||||||
|
-e MAYAN_DATABASE_USER=mayan \
|
||||||
|
-e MAYAN_DATABASE_CONN_MAX_AGE=0 \
|
||||||
|
-v /docker-volumes/mayan-edms/media:/var/lib/mayan \
|
||||||
|
mayanedms/mayanedms:<version>
|
||||||
|
|
||||||
|
The Mayan EDMS container will connect to the PostgreSQL container via the
|
||||||
|
``172.17.0.1`` IP address (the Docker host's default IP address). It will
|
||||||
|
connect using the ``django.db.backends.postgresql`` database driver and
|
||||||
|
connect to the ``mayan`` database using the ``mayan`` user with the password
|
||||||
|
``mayanuserpass``. The container will keep connections to the database
|
||||||
|
for up to 60 seconds in an attempt to reuse them increasing response time
|
||||||
|
and reducing memory usage. The files of the container will be store in the
|
||||||
|
host's ``/docker-volumes/mayan-edms/media`` folder. The container will
|
||||||
|
expose its web service running on port 8000 on the host's port 80.
|
||||||
|
|
||||||
|
The container will be available by browsing to ``http://localhost`` or to
|
||||||
|
the IP address of the computer running the container.
|
||||||
|
|
||||||
|
If another web server is running on port 80 use a different port in the
|
||||||
|
``-p`` option. For example: ``-p 81:8000``.
|
||||||
|
|
||||||
|
|
||||||
|
Using a dedicated Docker network
|
||||||
|
--------------------------------
|
||||||
|
|
||||||
|
Use this method to avoid having to expose PostreSQL port to the host's network
|
||||||
|
or if you have other PostgreSQL instances but still want to use the default
|
||||||
|
port of 5432 for this installation.
|
||||||
|
|
||||||
|
Create the network::
|
||||||
|
|
||||||
|
docker network create mayan
|
||||||
|
|
||||||
|
Launch the PostgreSQL container with the network option and remove the port
|
||||||
|
binding (``-p 5432:5432``)::
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name mayan-edms-postgres \
|
||||||
|
--network=mayan \
|
||||||
|
--restart=always \
|
||||||
|
-e POSTGRES_USER=mayan \
|
||||||
|
-e POSTGRES_DB=mayan \
|
||||||
|
-e POSTGRES_PASSWORD=mayanuserpass \
|
||||||
|
-v /docker-volumes/mayan-edms/postgres:/var/lib/postgresql/data \
|
||||||
|
-d postgres:9.6
|
||||||
|
|
||||||
|
Launch the Mayan EDMS container with the network option and change the
|
||||||
|
database hostname to the PostgreSQL container name (``mayan-edms-postgres``)
|
||||||
|
instead of the IP address of the Docker host (``172.17.0.1``)::
|
||||||
|
|
||||||
|
docker run -d \
|
||||||
|
--name mayan-edms \
|
||||||
|
--network=mayan \
|
||||||
|
--restart=always \
|
||||||
|
-p 80:8000 \
|
||||||
|
-e MAYAN_DATABASE_ENGINE=django.db.backends.postgresql \
|
||||||
|
-e MAYAN_DATABASE_HOST=mayan-edms-postgres \
|
||||||
|
-e MAYAN_DATABASE_NAME=mayan \
|
||||||
|
-e MAYAN_DATABASE_PASSWORD=mayanuserpass \
|
||||||
|
-e MAYAN_DATABASE_USER=mayan \
|
||||||
|
-e MAYAN_DATABASE_CONN_MAX_AGE=0 \
|
||||||
|
-v /docker-volumes/mayan-edms/media:/var/lib/mayan \
|
||||||
|
mayanedms/mayanedms:<version>
|
||||||
|
|
||||||
|
|
||||||
|
Stopping and starting the container
|
||||||
|
-----------------------------------
|
||||||
|
|
||||||
|
To stop the container use::
|
||||||
|
|
||||||
|
docker stop mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
To start the container again::
|
||||||
|
|
||||||
|
docker start mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
.. _docker_environment_variables:
|
||||||
|
|
||||||
|
|
||||||
|
Environment Variables
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
The Mayan EDMS image can be configure via environment variables.
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_ENGINE``
|
||||||
|
|
||||||
|
Defaults to ``None``. This environment variable configures the database
|
||||||
|
backend to use. If left unset, SQLite will be used. The database backends
|
||||||
|
supported by this Docker image are:
|
||||||
|
|
||||||
|
- ``'django.db.backends.postgresql'``
|
||||||
|
- ``'django.db.backends.mysql'``
|
||||||
|
- ``'django.db.backends.sqlite3'``
|
||||||
|
|
||||||
|
When using the SQLite backend, the database file will be saved in the Docker
|
||||||
|
volume. The SQLite database as used by Mayan EDMS is meant only for development
|
||||||
|
or testing, never use it in production.
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_NAME``
|
||||||
|
|
||||||
|
Defaults to 'mayan'. This optional environment variable can be used to define
|
||||||
|
the database name that Mayan EDMS will connect to. For more information read
|
||||||
|
the pertinent Django documentation page:
|
||||||
|
:django-docs:`Connecting to the database <ref/databases/#connecting-to-the-database>`
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_USER``
|
||||||
|
|
||||||
|
Defaults to 'mayan'. This optional environment variable is used to set the
|
||||||
|
username that will be used to connect to the database. For more information
|
||||||
|
read the pertinent Django documentation page:
|
||||||
|
:django-docs:`Settings, USER <ref/settings/#user>`
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_PASSWORD``
|
||||||
|
|
||||||
|
Defaults to ''. This optional environment variable is used to set the
|
||||||
|
password that will be used to connect to the database. For more information
|
||||||
|
read the pertinent Django documentation page:
|
||||||
|
:django-docs:`Settings, PASSWORD <ref/settings/#password>`
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_HOST``
|
||||||
|
|
||||||
|
Defaults to `None`. This optional environment variable is used to set the
|
||||||
|
hostname that will be used to connect to the database. This can be the
|
||||||
|
hostname of another container or an IP address. For more information read
|
||||||
|
the pertinent Django documentation page:
|
||||||
|
:django-docs:`Settings, HOST <ref/settings/#host>`
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_PORT``
|
||||||
|
|
||||||
|
Defaults to `None`. This optional environment variable is used to set the
|
||||||
|
port number to use when connecting to the database. An empty string means
|
||||||
|
the default port. Not used with SQLite. For more information read the
|
||||||
|
pertinent Django documentation page:
|
||||||
|
:django-docs:`Settings, PORT <ref/settings/#port>`
|
||||||
|
|
||||||
|
``MAYAN_BROKER_URL``
|
||||||
|
|
||||||
|
This optional environment variable determines the broker that Celery will use
|
||||||
|
to relay task messages between the frontend code and the background workers.
|
||||||
|
For more information read the pertinent Celery Kombu documentation page: `Broker URL`_
|
||||||
|
|
||||||
|
.. _Broker URL: http://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls
|
||||||
|
|
||||||
|
This Docker image supports using Redis and RabbitMQ as brokers.
|
||||||
|
|
||||||
|
Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment
|
||||||
|
variables are specified, the built-in Redis server inside the container will
|
||||||
|
be disabled.
|
||||||
|
|
||||||
|
``MAYAN_CELERY_RESULT_BACKEND``
|
||||||
|
|
||||||
|
This optional environment variable determines the results backend that Celery
|
||||||
|
will use to relay result messages from the background workers to the frontend
|
||||||
|
code. For more information read the pertinent Celery Kombu documentation page:
|
||||||
|
`Task result backend settings`_
|
||||||
|
|
||||||
|
.. _Task result backend settings: http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend
|
||||||
|
|
||||||
|
This Docker image supports using Redis and RabbitMQ as result backends.
|
||||||
|
|
||||||
|
Caveat: If the `MAYAN_BROKER_URL` and `MAYAN_CELERY_RESULT_BACKEND` environment
|
||||||
|
variables are specified, the built-in Redis server inside the container will
|
||||||
|
be disabled.
|
||||||
|
|
||||||
|
``MAYAN_SETTINGS_MODULE``
|
||||||
|
|
||||||
|
Optional. Allows loading an alternate settings file.
|
||||||
|
|
||||||
|
``MAYAN_DATABASE_CONN_MAX_AGE``
|
||||||
|
|
||||||
|
Amount in seconds to keep a database connection alive. Allow reuse of database
|
||||||
|
connections. For more information read the pertinent Django documentation
|
||||||
|
page: :django-docs:`Settings, CONN_MAX_AGE <ref/settings/#conn-max-age>`
|
||||||
|
According to new information Gunicorn's microthreads don't share connections
|
||||||
|
and will exhaust the available Postgres connections available if a number
|
||||||
|
other than 0 is used. Reference: https://serverfault.com/questions/635100/django-conn-max-age-persists-connections-but-doesnt-reuse-them-with-postgresq
|
||||||
|
and https://github.com/benoitc/gunicorn/issues/996
|
||||||
|
|
||||||
|
``MAYAN_GUNICORN_WORKERS``
|
||||||
|
|
||||||
|
Optional. This environment variable controls the number of frontend workers
|
||||||
|
that will be executed. If not specified the default is 2. For heavier loads,
|
||||||
|
user a higher number. A formula recommended for this setting is the number
|
||||||
|
of CPU cores + 1.
|
||||||
|
|
||||||
|
``MAYAN_WORKER_FAST_CONCURRENCY``
|
||||||
|
|
||||||
|
Optional. Changes the concurrency (number of child processes) of the Celery
|
||||||
|
worker consuming the queues in the fast (low latency, short tasks) category.
|
||||||
|
Default is 1. Use 0 to disable hardcoded concurrency and allow the Celery
|
||||||
|
worker to launch its default number of child processes (equal to the number
|
||||||
|
of CPUs detected).
|
||||||
|
|
||||||
|
``MAYAN_WORKER_MEDIUM_CONCURRENCY``
|
||||||
|
|
||||||
|
Optional. Changes the concurrency (number of child processes) of the Celery
|
||||||
|
worker consuming the queues in the medium (medium latency, long running tasks)
|
||||||
|
category. Default is 1. Use 0 to disable hardcoded concurrency and allow the
|
||||||
|
Celery worker to launch its default number of child processes (equal to the
|
||||||
|
number of CPUs detected).
|
||||||
|
|
||||||
|
``MAYAN_WORKER_SLOW_CONCURRENCY``
|
||||||
|
|
||||||
|
Optional. Changes the concurrency (number of child processes) of the Celery
|
||||||
|
worker consuming the queues in the slow (high latency, very long running tasks)
|
||||||
|
category. Default is 1. Use 0 to disable hardcoded concurrency and allow the
|
||||||
|
Celery worker to launch its default number of child processes (equal to the
|
||||||
|
number of CPUs detected).
|
||||||
|
|
||||||
|
``MAYAN_USER_UID``
|
||||||
|
|
||||||
|
Optional. Changes the UID of the ``mayan`` user internal to the Docker
|
||||||
|
container. Defaults to 1000.
|
||||||
|
|
||||||
|
``MAYAN_USER_GUID``
|
||||||
|
|
||||||
|
Optional. Changes the GUID of the ``mayan`` user internal to the Docker
|
||||||
|
container. Defaults to 1000.
|
||||||
|
|
||||||
|
|
||||||
|
.. _docker-accessing-outside-data:
|
||||||
|
|
||||||
|
Accessing outside data
|
||||||
|
======================
|
||||||
|
|
||||||
|
To use Mayan EDMS's staging folders or watch folders from Docker, the data
|
||||||
|
for these source must be made accessible to the container. This is done by
|
||||||
|
mounting the folders in the host computer to folders inside the container.
|
||||||
|
This is necessary because Docker containers do not have access to host data
|
||||||
|
on purpose. For example, to make a folder in the host accessible as a watch
|
||||||
|
folder, add the following to the Docker command line when starting the
|
||||||
|
container::
|
||||||
|
|
||||||
|
-v /opt/scanned_files:/srv/watch_folder
|
||||||
|
|
||||||
|
The command line would look like this::
|
||||||
|
|
||||||
|
docker run ... -v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:latest
|
||||||
|
|
||||||
|
Now create a watch folder in Mayan EDMS using the path ``/srv/watch_folder``
|
||||||
|
and the documents from the host folder ``/opt/scanned_files`` will be
|
||||||
|
automatically available. Use the same procedure to mount host folders to be
|
||||||
|
used as staging folderes. In this example ``/srv/watch_folder`` was as the
|
||||||
|
container directory, but any path can be used as long as it is not an
|
||||||
|
already existing path or a path used by any other program.
|
||||||
|
|
||||||
|
|
||||||
|
Performing backups
|
||||||
|
==================
|
||||||
|
|
||||||
|
To backup the existing data, stop the image and copy the content of the volume.
|
||||||
|
For the example::
|
||||||
|
|
||||||
|
docker run -d --name mayan-edms --restart=always -p 80:8000 \
|
||||||
|
-v /docker-volumes/mayan:/var/lib/mayan \
|
||||||
|
-v /opt/scanned_files:/srv/watch_folder mayanedms/mayanedms:latest
|
||||||
|
|
||||||
|
That would be the ``/docker-volumes/mayan folder``::
|
||||||
|
|
||||||
|
sudo tar -zcvf backup.tar.gz /docker-volumes/mayan
|
||||||
|
sudo chown `whoami` backup.tar.gz
|
||||||
|
|
||||||
|
If using an external PostgreSQL or MySQL database or database containers, these
|
||||||
|
too need to be backed up using their respective procedures. A simple solution
|
||||||
|
is to copy the entire database container volume after the container has
|
||||||
|
been stopped.
|
||||||
|
|
||||||
|
|
||||||
|
Restoring from a backup
|
||||||
|
=======================
|
||||||
|
|
||||||
|
Uncompress the backup archive in the original docker volume using::
|
||||||
|
|
||||||
|
sudo tar -xvzf backup.tar.gz -C /
|
||||||
|
|
||||||
|
|
||||||
|
Upgrading
|
||||||
|
=========
|
||||||
|
|
||||||
|
Upgrading a Mayan EDMS Docker container is actually a matter of stopping and
|
||||||
|
deleting the container, downloading the most recent version of the image and
|
||||||
|
starting a container again. The container will take care of updating the
|
||||||
|
database structure to the newest version if necessary.
|
||||||
|
|
||||||
|
**IMPORTANT!** Do not delete the volume storing the data, only the container.
|
||||||
|
|
||||||
|
Stop the container to be upgraded::
|
||||||
|
|
||||||
|
docker stop mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
Remove the container::
|
||||||
|
|
||||||
|
docker rm mayan-edms
|
||||||
|
|
||||||
|
|
||||||
|
Pull the new image version::
|
||||||
|
|
||||||
|
docker pull mayanedms/mayanedms:latest
|
||||||
|
|
||||||
|
|
||||||
|
Start the container again with the new image version::
|
||||||
|
|
||||||
|
docker run -d --name mayan-edms --restart=always -p 80:8000 -v /docker-volumes/mayan:/var/lib/mayan mayanedms/mayanedms:latest
|
||||||
|
|
||||||
|
|
||||||
|
Building the image
|
||||||
|
==================
|
||||||
|
|
||||||
|
Clone the repository with::
|
||||||
|
|
||||||
|
git clone https://gitlab.com/mayan-edms/mayan-edms.git
|
||||||
|
|
||||||
|
Change to the directory of the cloned repository::
|
||||||
|
|
||||||
|
cd mayan-edms
|
||||||
|
|
||||||
|
Execute Docker's build command using the provided makefile::
|
||||||
|
|
||||||
|
make docker-build
|
||||||
|
|
||||||
|
Or using an apt cacher to speed up the build::
|
||||||
|
|
||||||
|
make docker-build-with-proxy APT_PROXY=172.17.0.1:3142
|
||||||
|
|
||||||
|
Replace the IP address `172.17.0.1` with the IP address of the computer
|
||||||
|
running the APT proxy and caching service.
|
||||||
|
|
||||||
|
|
||||||
|
Customizing the image
|
||||||
|
=====================
|
||||||
|
|
||||||
|
Simple method
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If you just need to add a few Ubuntu or Python packages to your installation,
|
||||||
|
you can use the following environment variables:
|
||||||
|
|
||||||
|
``MAYAN_APT_INSTALLS``
|
||||||
|
|
||||||
|
Specifies a list of Ubuntu .deb packages to be installed via APT when the
|
||||||
|
container is first created. The installed packages are not lost when the image
|
||||||
|
is stopped. Example: To install the Tesseract OCR language packs for German
|
||||||
|
and Spanish add the following in your ``docker start`` command line::
|
||||||
|
|
||||||
|
-e MAYAN_APT_INSTALLS="tesseract-ocr-deu tesseract-ocr-spa"
|
||||||
|
|
||||||
|
``MAYAN_PIP_INSTALLS``
|
||||||
|
|
||||||
|
Specifies a list of Python packages to be installed via ``pip``. Packages will
|
||||||
|
be downloaded from the Python Package Index (https://pypi.python.org) by
|
||||||
|
default.
|
||||||
|
|
||||||
|
|
||||||
|
Using Docker compose
|
||||||
|
====================
|
||||||
|
|
||||||
|
To deploy a complete production stack using the included Docker compose file
|
||||||
|
execute::
|
||||||
|
|
||||||
|
docker-compose -f docker-compose.yml up -d
|
||||||
|
|
||||||
|
This Docker compose file will provision four containers:
|
||||||
|
|
||||||
|
- Postgres as the database
|
||||||
|
- Redis as the Celery result storage
|
||||||
|
- RabbitMQ as the Celery broker
|
||||||
|
- Mayan EDMS using the above service containers
|
||||||
|
|
||||||
|
To stop the stack use::
|
||||||
|
|
||||||
|
docker-compose -f docker-compose.yml stop
|
||||||
|
|
||||||
|
The stack will also create four volumes to store the data of each container.
|
||||||
|
These are:
|
||||||
|
|
||||||
|
- mayan_app - The Mayan EDMS data container, normally called `mayan_data` when not using Docker compose.
|
||||||
|
- mayan_broker - The broker volume, in this case RabbitMQ.
|
||||||
|
- mayan_db - The database volume, in this case Postgres.
|
||||||
|
- mayan_results - The celery result backend volume, in this case Redis.
|
||||||
|
|
||||||
|
|
||||||
|
Nightly images
|
||||||
|
==============
|
||||||
|
The continuous integration pipeline used for testing development builds also
|
||||||
|
produces a resulting Docker image. These are build automatically and their
|
||||||
|
stability is not guaranteed. They should never be used in production.
|
||||||
|
If you want to try out the Docker images the development uses or want a sneak
|
||||||
|
peek at the new features being worked on checkout the container registry at:
|
||||||
|
https://gitlab.com/mayan-edms/mayan-edms/container_registry
|
||||||
88
docs/chapters/document_types.rst
Normal file
88
docs/chapters/document_types.rst
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
Document types
|
||||||
|
==============
|
||||||
|
|
||||||
|
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
|
||||||
|
document template. Every other aspect of the system will rely or be tied to
|
||||||
|
one or more document type. Create one document type for each type or class of
|
||||||
|
document you intend to upload into Mayan EDMS.
|
||||||
|
|
||||||
|
Document types need to be created before documents can be
|
||||||
|
uploaded. It is not possible to upload documents without assigning them a
|
||||||
|
document type.
|
||||||
|
|
||||||
|
Document types usually mirror the type of physical, paper document they
|
||||||
|
represent.
|
||||||
|
|
||||||
|
Example document types:
|
||||||
|
|
||||||
|
* Letter
|
||||||
|
* Invoice
|
||||||
|
* Timesheet
|
||||||
|
* Blueprint
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
|
document_type [ label = 'each document type' ];
|
||||||
|
documents [ label = 'many documents' ];
|
||||||
|
|
||||||
|
document_type -> documents;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
|
document_type [ label = 'Invoice' ];
|
||||||
|
documents_1 [ label = 'invoice_001.pdf', width=200 ];
|
||||||
|
documents_2 [ label = 'invoice_032.pdf', width=200 ];
|
||||||
|
|
||||||
|
document_type -> documents_1, documents_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
|
document_type [ label = 'Receipts' ];
|
||||||
|
documents_1 [ label = 'groceries_18-01-11.pdf', width=200 ];
|
||||||
|
documents_2 [ label = 'car_payment-17-01-02.png', width=200 ];
|
||||||
|
|
||||||
|
document_type -> documents_1, documents_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Settings and attributes are applied to document types and documents will
|
||||||
|
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
|
||||||
|
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
|
||||||
|
attributes, and will inherit the settings and attributes of its new type.
|
||||||
|
|
||||||
|
|
||||||
|
Creating document types
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Create document types" permission is required for this action.
|
||||||
|
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Document types` menu.
|
||||||
|
#. From the :guilabel:`Actions` dropdown select :guilabel:`Create document type`.
|
||||||
|
#. Enter a label to be shown to users when using this document type.
|
||||||
|
#. Optional: Enter a period of time after which documents of this type will be moved to the trash.
|
||||||
|
#. Optional: Select the unit of time for the period after which the document will be moved to the trash.
|
||||||
|
#. Optional: Enter a period of time after which documents moved to the trash will be permanently deleted.
|
||||||
|
#. Optional: Select the unit of time for the period of time after which the documents moved to the trash will be permanently deleted
|
||||||
|
#. Press :guilabel:`Submit`.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
============
|
************
|
||||||
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),
|
||||||
@@ -9,6 +9,7 @@ without extension, and stored in a simple flat arrangement in a directory.
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
file [ label = 'mayan_1-1.pdf', width=120];
|
file [ label = 'mayan_1-1.pdf', width=120];
|
||||||
document [ label = 'mayan/media/document_storage/ab6c1cfe-8a8f-4a30-96c9-f54f606b9248', width=450];
|
document [ label = 'mayan/media/document_storage/ab6c1cfe-8a8f-4a30-96c9-f54f606b9248', width=450];
|
||||||
file -> document [label = "upload"];
|
file -> document [label = "upload"];
|
||||||
125
docs/chapters/index_examples.rst
Normal file
125
docs/chapters/index_examples.rst
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
|
||||||
|
Index examples
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Index of document types
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
- The "Create new document indexes" permission is required for this action.
|
||||||
|
- The "Edit document indexes" permission is required for this action, globally
|
||||||
|
of via an ACL for a document index.
|
||||||
|
- The "Edit document types" permission is required for this action, globally
|
||||||
|
of via an ACL for a document type.
|
||||||
|
|
||||||
|
|
||||||
|
This index will create one level for each document type in the system and place
|
||||||
|
links to the document of each respective type.
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Indexes` menu.
|
||||||
|
#. Create a new index using :guilabel:`Actions` > :guilabel:`Create new`.
|
||||||
|
#. Give it a label to describe it, and an internal name. The internal name is
|
||||||
|
used when referencing this index in other parts of the system.
|
||||||
|
#. Press the :guilabel:`Template` link of the newly created index.
|
||||||
|
#. Select :guilabel:`New child node` to create a new level in which the
|
||||||
|
following template code will be entered.
|
||||||
|
::
|
||||||
|
|
||||||
|
{{ document.document_type }}
|
||||||
|
|
||||||
|
#. Save the template.
|
||||||
|
#. Click on :guilabel:`Document types` and associate this index with
|
||||||
|
existing document types in the system.
|
||||||
|
#. Finally go to :menuselection:`Tools --> Rebuild indexes` to execute the
|
||||||
|
index template. The rebuild process is only necessary when changes are
|
||||||
|
made to the index templates. Otherwise they update automatically whenever
|
||||||
|
a new document is uploaded or existing documents properties are modified.
|
||||||
|
#. A new index should appear under :menuselection:`Indexes` menu.
|
||||||
|
|
||||||
|
You can also program different behavior based on the different document types,
|
||||||
|
by use a comparison and a conditional statement. As the document_type itself
|
||||||
|
is not a string you cannot directly use that for that comparison. You will have
|
||||||
|
to use the label of the document type.
|
||||||
|
|
||||||
|
For example::
|
||||||
|
|
||||||
|
{% if document.document_type.label == "Invoice" or document.document_type.label == "Letter" %}
|
||||||
|
Correspondence
|
||||||
|
{% else %}
|
||||||
|
{{ document.document_type }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
This will create and index level for each document type. Except for documents
|
||||||
|
of types "Invoice" and "Letter", these will now go into the level "Correspondence".
|
||||||
|
|
||||||
|
|
||||||
|
Index document by department, taken from the first character of the invoice number metadata
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Requires one index node with the template::
|
||||||
|
|
||||||
|
{% if document.metadata_value_of.invoice_number.0 == "A" %}Accounting
|
||||||
|
{% if document.metadata_value_of.invoice_number.0 == "H" %}Human Resources
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
Nested date index from a date contained in a metadata
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
Assuming the metadata type is named **date_issued** with a date format
|
||||||
|
of YYYY-MM-DD. The target is to have two levels: one for years and another
|
||||||
|
sub level for months.
|
||||||
|
|
||||||
|
**First level: Year**
|
||||||
|
::
|
||||||
|
|
||||||
|
{{ document.metadata_value_of.date_issued|slice:"0:4" }}
|
||||||
|
|
||||||
|
|
||||||
|
**Second level: Months**
|
||||||
|
::
|
||||||
|
|
||||||
|
{{ document.metadata_value_of.date_issued|slice:"5:7" }}
|
||||||
|
|
||||||
|
|
||||||
|
**Optional: Third level: Day**
|
||||||
|
::
|
||||||
|
|
||||||
|
{{ document.metadata_value_of.date_issued|slice:"8:10" }}
|
||||||
|
|
||||||
|
|
||||||
|
Index by OCR content
|
||||||
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
This example indexes documents in a "quarterly report" level if they have the
|
||||||
|
fragment “quarterly report” in the OCR text::
|
||||||
|
|
||||||
|
{% if "quarterly report" in document.latest_version.ocr_content|join:" "|lower %}Quarterly reports{% endif %}
|
||||||
|
|
||||||
|
The same applies to text content extracted for the document::
|
||||||
|
|
||||||
|
{% if "quarterly report" in document.latest_version.content|join:" "|lower %}Quarterly reports{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Index documents not found in any cabinet
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
::
|
||||||
|
|
||||||
|
{% if document.cabinets.count == 0 %}No Cabinets{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
Index untagged documents
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
::
|
||||||
|
|
||||||
|
{% if document.tags.count == 0 %}No Tags{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
Index documents specifically, by the year of a metadata field otherwise by their uploaded year
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
::
|
||||||
|
|
||||||
|
{% for tag in document.tags.all %}{% if tag.label == "Taxes" %}{% if document.metadata_value_of.tax_year|length_is:"4" %}{{ document.metadata_value_of.tax_year }}{% else %}{{ document.date_added|date:"Y" }}{% endif %}{% endif %}{% endfor %}
|
||||||
@@ -1,11 +1,10 @@
|
|||||||
=======
|
|
||||||
Indexes
|
Indexes
|
||||||
=======
|
=======
|
||||||
|
|
||||||
Indexes are an automatic method to hierarchically organize documents in
|
Indexes are an automatic method to hierarchically organize documents in
|
||||||
relation to their properties (:doc:`metadata`, label, MIME type, etc). To use
|
relation to their properties (:doc:`../chapters/metadata`, label, MIME type,
|
||||||
indexes you need to first create an index template. Once created, associate
|
etc). To use indexes you need to first create an index template. Once created,
|
||||||
the index to one or more :doc:`document_types`.
|
associate the index to one or more :doc:`../chapters/document_types`.
|
||||||
|
|
||||||
Index are hierarchical models so a tree template needs to be specified for them.
|
Index are hierarchical models so a tree template needs to be specified for them.
|
||||||
This tree template will contain references to document metadata or properties
|
This tree template will contain references to document metadata or properties
|
||||||
@@ -23,6 +22,9 @@ Example:
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
span_width = 30;
|
||||||
|
|
||||||
index [ label = 'Product sheets per year', width=180 ];
|
index [ label = 'Product sheets per year', width=180 ];
|
||||||
root [ label = 'Root (Has document links? No)', width=450];
|
root [ label = 'Root (Has document links? No)', width=450];
|
||||||
level_2 [ label = '{{ document.metadata_value_of.product_year }} (Has document links? Yes)', width=450];
|
level_2 [ label = '{{ document.metadata_value_of.product_year }} (Has document links? Yes)', width=450];
|
||||||
@@ -50,6 +52,8 @@ that will be generate based on the tree template would be as follows:
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
|
||||||
index [ label = 'Product sheets per year', width=180 ];
|
index [ label = 'Product sheets per year', width=180 ];
|
||||||
year_1 [ label = '2001', width = 60 ];
|
year_1 [ label = '2001', width = 60 ];
|
||||||
year_2 [ label = '2002', width = 60 ];
|
year_2 [ label = '2002', width = 60 ];
|
||||||
@@ -72,8 +76,11 @@ that will be generate based on the tree template would be as follows:
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.. include:: ../chapters/index_examples.rst
|
||||||
|
|
||||||
|
|
||||||
Mirroring
|
Mirroring
|
||||||
=========
|
---------
|
||||||
|
|
||||||
Indexes can be exported as `FUSE <https://en.wikipedia.org/wiki/Filesystem_in_Userspace>`_
|
Indexes can be exported as `FUSE <https://en.wikipedia.org/wiki/Filesystem_in_Userspace>`_
|
||||||
filesystems. Using the management command ``mountindex`` we could export the
|
filesystems. Using the management command ``mountindex`` we could export the
|
||||||
@@ -89,5 +96,20 @@ via the network with network file system software like
|
|||||||
`Samba <https://www.samba.org/>`_ or
|
`Samba <https://www.samba.org/>`_ or
|
||||||
`NFS <https://en.wikipedia.org/wiki/Network_File_System>`_.
|
`NFS <https://en.wikipedia.org/wiki/Network_File_System>`_.
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
orientation = portrait
|
||||||
|
span_width = 200;
|
||||||
|
|
||||||
|
index [ label = 'Product sheets per year', width=180 ];
|
||||||
|
block_device [ height = 100, label = "Block device\n(Hard drive)", shape = flowchart.database ];
|
||||||
|
network [ label = "Network", shape = cloud ];
|
||||||
|
user [ label = "Users", shape = actor ];
|
||||||
|
|
||||||
|
index -> block_device [ label = "mirroring", fontsize = 8 ];
|
||||||
|
block_device -> network -> user;
|
||||||
|
}
|
||||||
|
|
||||||
Indexes and mirrored indexes are Read Only as they are generated as a result of
|
Indexes and mirrored indexes are Read Only as they are generated as a result of
|
||||||
prior activities like document uploads, metadata changes.
|
prior activities like document uploads, metadata changes.
|
||||||
36
docs/chapters/languages.rst
Normal file
36
docs/chapters/languages.rst
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
*********
|
||||||
|
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 setting ``DOCUMENTS_LANGUAGE_CODES``,
|
||||||
|
and set it to a nested list of abbreviations. This setting can be found in the
|
||||||
|
:menuselection:`System --> Setup --> Settings --> Common` menu.
|
||||||
|
|
||||||
|
For example, to reduce the list to just English and Spanish use
|
||||||
|
::
|
||||||
|
|
||||||
|
DOCUMENTS_LANGUAGE_CODES = ('eng', 'spa')
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
If using the Docker image, these settings can also be passed to the container
|
||||||
|
as environment variables by prepending the ``MAYAN_`` suffix.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
-e MAYAN_DOCUMENTS_LANGUAGE_CODES='["eng", "spa"]'
|
||||||
|
|
||||||
|
For more information check out the
|
||||||
|
:ref:`environment variables <environment_variables>` chapter of the
|
||||||
|
:doc:`../topics/settings` topic.
|
||||||
|
|
||||||
|
|
||||||
22
docs/chapters/mailing.rst
Normal file
22
docs/chapters/mailing.rst
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
*****************
|
||||||
|
Mailing documents
|
||||||
|
*****************
|
||||||
|
|
||||||
|
Sending emails in Mayan EDMS is controlled by two different system depending on
|
||||||
|
the type of email being sent. These are administrative emails like password
|
||||||
|
reset emails and user emails sent from the application. To configure
|
||||||
|
administrative email for things like password reset check the topic:
|
||||||
|
:doc:`../topics/administration`
|
||||||
|
|
||||||
|
Application emails
|
||||||
|
==================
|
||||||
|
|
||||||
|
To allow users to send emails or documents from within the web interface,
|
||||||
|
Mayan EDMS provides its our own email system called Mailing Profiles.
|
||||||
|
Mailing Profiles support access control per user role and can use different
|
||||||
|
email backends. Mailing Profiles are created from the
|
||||||
|
:menuselection:`System --> Setup` menu.
|
||||||
|
|
||||||
|
Once created mailing profiles allow users to send email messages from
|
||||||
|
within the user interface containing either an URL link to the document or
|
||||||
|
the actual document as an attachment.
|
||||||
99
docs/chapters/metadata.rst
Normal file
99
docs/chapters/metadata.rst
Normal file
@@ -0,0 +1,99 @@
|
|||||||
|
********
|
||||||
|
Metadata
|
||||||
|
********
|
||||||
|
|
||||||
|
Metadata is the name of the attribute of a document. The concept of metadata is
|
||||||
|
divided in two: **metadata types** (size, color, distance) and **metadata values** for
|
||||||
|
those types. Metadata types are defined in the setup menu and associated with
|
||||||
|
document types. Then when a document is uploaded, a value for that metadata
|
||||||
|
can be entered. There are two kinds of metadata type to document type relations:
|
||||||
|
optional and required. When a metadata type is optional for a document type,
|
||||||
|
it can be left blank for a document being uploaded and the upload will still
|
||||||
|
be successful. On the other hand required metadata type must be given a value
|
||||||
|
or it will not be possible to upload the document at hand.
|
||||||
|
|
||||||
|
Examples of metadata type: Invoice number, color, employee id.
|
||||||
|
|
||||||
|
The data entry of metadata types can be set to allow any value to be provided
|
||||||
|
(the default) or a list of possible values can be entered in the ``Lookup``
|
||||||
|
configuration option and users will be presented with a drop down list of options
|
||||||
|
instead of the default text entry box.
|
||||||
|
|
||||||
|
If metadata types are setup to allow any value to be entered a ``validation``
|
||||||
|
option can be chosen to block the entry of invalid data. Metadata types also
|
||||||
|
provide ``parsers`` which will not block the entry of data but are able to
|
||||||
|
interpret and modify the value provided by the user to a conform to a specific
|
||||||
|
format. An example of a provided parser is the date parser which will interpret
|
||||||
|
and correct dates provided by users regardless of the format in which they are
|
||||||
|
entered.
|
||||||
|
|
||||||
|
|
||||||
|
Creating metadata types
|
||||||
|
=======================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Create new metadata types" permission is required for this action.
|
||||||
|
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Metadata types` menu.
|
||||||
|
#. From the :guilabel:`Actions` dropdown select :guilabel:`Create new`.
|
||||||
|
#. Provide a name to reference this metadata type in other parts of the system.
|
||||||
|
#. Enter a label to be shown to users when using this metadata type.
|
||||||
|
#. Optional: Enter a default value for the metadata type.
|
||||||
|
#. Optional: Provide a comma separated list of options to restrict the data entry
|
||||||
|
when using this metadata type.
|
||||||
|
#. Optional: Select a validator and a parser to validate and cleanup the data
|
||||||
|
entry when not using a predetermined list of values.
|
||||||
|
#. Press :guilabel:`Submit`.
|
||||||
|
|
||||||
|
|
||||||
|
Assigning a metadata type to a document type
|
||||||
|
============================================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
- The "Edit metadata types" permission is required for this action, globally or
|
||||||
|
via an ACL for a metadata type.
|
||||||
|
- Also the "Edit document type" permission
|
||||||
|
is required, globally or via an ACL for a document type.
|
||||||
|
|
||||||
|
|
||||||
|
This action can be performed in two ways.
|
||||||
|
|
||||||
|
Option 1: Via the metadata type view
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Metadata types` menu.
|
||||||
|
#. Click on the button :guilabel:`Document types` of the metadata type you which
|
||||||
|
to associate.
|
||||||
|
#. From the list of existing document types press either:
|
||||||
|
|
||||||
|
- :guilabel:`None` if this metadata type will not be available for documents
|
||||||
|
of the type.
|
||||||
|
- :guilabel:`Optional` if this metadata type will be available and is
|
||||||
|
optional to provide a value for documents of the type.
|
||||||
|
- :guilabel:`Required` if this metadata type will be available and is
|
||||||
|
required to provide a value for documents of the type.
|
||||||
|
|
||||||
|
#. Press :guilabel:`Save`.
|
||||||
|
|
||||||
|
|
||||||
|
Option 2: Via the document type view
|
||||||
|
------------------------------------
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Document types` menu.
|
||||||
|
#. Click on the button :guilabel:`Metadata types` of the metadata type you which
|
||||||
|
to associate.
|
||||||
|
#. From the list of existing metadata types press either:
|
||||||
|
|
||||||
|
- :guilabel:`None` if this metadata type will not be available for documents
|
||||||
|
of the type.
|
||||||
|
- :guilabel:`Optional` if this metadata type will be available and is
|
||||||
|
optional to provide a value for documents of the type.
|
||||||
|
- :guilabel:`Required` if this metadata type will be available and is
|
||||||
|
required to provide a value for documents of the type.
|
||||||
|
|
||||||
|
#. Press :guilabel:`Save`.
|
||||||
31
docs/chapters/object_storage.rst
Normal file
31
docs/chapters/object_storage.rst
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
**************
|
||||||
|
Object storage
|
||||||
|
**************
|
||||||
|
|
||||||
|
It is possible to use object storage instead of the default filesystem based
|
||||||
|
storage. One such object storage system is Amazon S3 (Simple Storage Service)
|
||||||
|
API compatible object storage. The following steps will configure Mayan EDMS
|
||||||
|
to use a S3 style storage for documents.
|
||||||
|
|
||||||
|
1. Install the django-storages and boto3 Python libraries.
|
||||||
|
|
||||||
|
* For the direct deployment method of installation use::
|
||||||
|
|
||||||
|
pip install django-storages boto3
|
||||||
|
|
||||||
|
|
||||||
|
* or if using the Docker image, add the following the command line that runs the container::
|
||||||
|
|
||||||
|
-e MAYAN_PIP_INSTALLS='django-storages boto3'
|
||||||
|
|
||||||
|
|
||||||
|
2. From the web interface navigate to the :menuselection:`System --> Setup --> Setting --> Documents` menu.
|
||||||
|
3. Locate the **DOCUMENTS_STORAGE_BACKEND** setting, press **Edit** and enter::
|
||||||
|
|
||||||
|
storages.backends.s3boto3.S3Boto3Storage
|
||||||
|
|
||||||
|
4. Save and locate the setting **DOCUMENTS_STORAGE_BACKEND_ARGUMENTS**, press **Edit** and enter::
|
||||||
|
|
||||||
|
'{access_key: <your S3 access key>, secret_key: <your S3 secret key>, bucket_name: <S3 bucket name>}'
|
||||||
|
|
||||||
|
5. Save and restart your Mayan EDMS installation for the setting to take effect.
|
||||||
@@ -1,10 +1,10 @@
|
|||||||
===========
|
***********
|
||||||
OCR backend
|
OCR backend
|
||||||
===========
|
***********
|
||||||
|
|
||||||
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract
|
Mayan EDMS ships an OCR backend that uses the FLOSS engine Tesseract
|
||||||
(https://github.com/tesseract-ocr/tesseract/), but it can
|
(https://github.com/tesseract-ocr/tesseract/), but it can
|
||||||
use other engines. To support other engines crate a wrapper that subclasess the
|
use other engines. To support other engines crate a wrapper that subclasses the
|
||||||
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
``OCRBackendBase`` class defined in mayan/apps/ocr/classes. This subclass should
|
||||||
expose the ``execute`` method. For an example of how the Tesseract backend
|
expose the ``execute`` method. For an example of how the Tesseract backend
|
||||||
is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py``
|
is implemented take a look at the file ``mayan/apps/ocr/backends/tesseract.py``
|
||||||
@@ -18,4 +18,9 @@ To add support to OCR more languages when using Tesseract, install the
|
|||||||
corresponding language file. If using a Debian based OS, this command will
|
corresponding language file. If using a Debian based OS, this command will
|
||||||
display the available language files:
|
display the available language files:
|
||||||
|
|
||||||
apt-cache search tesseract-ocr
|
apt-cache search tesseract-ocr
|
||||||
|
|
||||||
|
If using the Docker image, pass the environment variable MAYAN_APT_INSTALLS
|
||||||
|
with the corresponding Tesseract language option. Example::
|
||||||
|
|
||||||
|
-e MAYAN_APT_INSTALLS='tesseract-ocr-deu'
|
||||||
38
docs/chapters/password_reset.rst
Normal file
38
docs/chapters/password_reset.rst
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
**************
|
||||||
|
Password reset
|
||||||
|
**************
|
||||||
|
|
||||||
|
To use the password reset feature, administrative emails need to be configured.
|
||||||
|
These are sent by the system itself and not by the users. Their usage and
|
||||||
|
configuration is different than the
|
||||||
|
:doc:`email system used to share documents via email<../chapters/mailing>`.
|
||||||
|
|
||||||
|
Sending administrative emails
|
||||||
|
=============================
|
||||||
|
|
||||||
|
To be able to send password reset emails configure the Django email settings
|
||||||
|
via the :ref:`configuration file <configuration_file>`.
|
||||||
|
|
||||||
|
Example::
|
||||||
|
|
||||||
|
EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend
|
||||||
|
EMAIL_HOST: '<your smtp ip address or hostname>'
|
||||||
|
EMAIL_HOST_PASSWORD: '<your smtp password>'
|
||||||
|
EMAIL_HOST_USER: '<your smtp username>'
|
||||||
|
EMAIL_PORT: 25 # or 587 or your server's SMTP port
|
||||||
|
EMAIL_TIMEOUT:
|
||||||
|
EMAIL_USE_SSL: true
|
||||||
|
EMAIL_USE_TLS: false
|
||||||
|
|
||||||
|
To change the reference URL in the password reset emails on in the
|
||||||
|
default document mailing template modify the ``COMMON_PROJECT_URL`` setting.
|
||||||
|
For information on the different ways to change a setting check the
|
||||||
|
:doc:`../topics/settings` topic.
|
||||||
|
|
||||||
|
To test the email settings use the management command ``sendtestemail``.
|
||||||
|
Example::
|
||||||
|
|
||||||
|
mayan-edms.py sendtestemail myself@example.com
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
===========
|
***********
|
||||||
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
|
||||||
@@ -10,6 +10,11 @@ that permission can exercise it throughout the entire system.
|
|||||||
.. blockdiag::
|
.. blockdiag::
|
||||||
|
|
||||||
blockdiag {
|
blockdiag {
|
||||||
|
orientation = portrait
|
||||||
|
default_shape = roundedbox
|
||||||
|
span_width = 240;
|
||||||
|
span_height = 100;
|
||||||
|
|
||||||
user [ label = 'Users' ];
|
user [ label = 'Users' ];
|
||||||
group [ label = 'Groups' ];
|
group [ label = 'Groups' ];
|
||||||
role [ label = 'Roles' ];
|
role [ label = 'Roles' ];
|
||||||
70
docs/chapters/quick_labels.rst
Normal file
70
docs/chapters/quick_labels.rst
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
************
|
||||||
|
Quick labels
|
||||||
|
************
|
||||||
|
|
||||||
|
Quick labels are predetermined filenames that allow the quick renaming of
|
||||||
|
documents as they are uploaded or after they have been uploaded.
|
||||||
|
|
||||||
|
Quick labels are added and associated to a document type.
|
||||||
|
|
||||||
|
Example of quick label: Invoice, Receipt from X store, Purchase order.
|
||||||
|
|
||||||
|
It is possible to preserve the file extension when using quick labels.
|
||||||
|
Extensions are required for some operating system to be able to detect the
|
||||||
|
correct file type to access the content.
|
||||||
|
|
||||||
|
For example if a document file is named "file0001.pdf" and the quick label
|
||||||
|
"Receipt from X store" is applied, the resulting document label will be
|
||||||
|
"Receipt from X store.pdf".
|
||||||
|
|
||||||
|
|
||||||
|
Creating quick labels
|
||||||
|
=====================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Edit document types" permission is required for this action, either
|
||||||
|
globally or via an ACL for a document type.
|
||||||
|
|
||||||
|
|
||||||
|
Since quick labels are associated with document types, creating quick labels
|
||||||
|
must be done from the document type view.
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Document types` menu.
|
||||||
|
#. In the document type list, click on the :guilabel:`Quick labels` button of
|
||||||
|
the document type for which you wish to create a quick label.
|
||||||
|
#. In the view titled "Quick labels for document type: <your document type>",
|
||||||
|
from the :guilabel:`Actions` dropdown select :guilabel:`Add quick label to document type`.
|
||||||
|
#. At the quick label creation form enter the desired label and press :guilabel:`Save`.
|
||||||
|
|
||||||
|
|
||||||
|
Using quick labels during upload
|
||||||
|
================================
|
||||||
|
|
||||||
|
#. Use the new document upload wizard from :menuselection:`Documents --> New document`.
|
||||||
|
#. Select a document type and navigate to the penultimate step, where you have
|
||||||
|
the option to drag and drop files to upload.
|
||||||
|
#. Select a an option from the :guilabel:`Quick document rename` dropdown.
|
||||||
|
#. Optionally select the :guilabel:`Preserve extension` checkbox to keep the file
|
||||||
|
extension.
|
||||||
|
#. Upload your documents.
|
||||||
|
|
||||||
|
|
||||||
|
Using quick labels for existing documents
|
||||||
|
=========================================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Edit document properties" permission is required for this action, either
|
||||||
|
globally or via an ACL for a document or document type.
|
||||||
|
|
||||||
|
|
||||||
|
#. Navigate to the document preview view of the document to rename. Make sure
|
||||||
|
quick labels for the document type of the document select have been created.
|
||||||
|
#. From the :guilabel:`Actions` dropdown select :guilabel:`Edit Properties`.
|
||||||
|
#. Select a an option from the :guilabel:`Quick document rename` dropdown.
|
||||||
|
#. Optionally select the :guilabel:`Preserve extension` checkbox to keep the file
|
||||||
|
extension.
|
||||||
|
#. Press :guilabel:`Save` to rename the document.
|
||||||
155
docs/chapters/scaling_up.rst
Normal file
155
docs/chapters/scaling_up.rst
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
**********
|
||||||
|
Scaling up
|
||||||
|
**********
|
||||||
|
|
||||||
|
The default installation method fits most use cases. If you use case requires
|
||||||
|
more speed or capacity here are some suggestion that can help you improve the
|
||||||
|
performance of your installation.
|
||||||
|
|
||||||
|
|
||||||
|
Change the database manager
|
||||||
|
===========================
|
||||||
|
|
||||||
|
Use PostgreSQL or MySQL as the database manager.
|
||||||
|
Tweak the memory setting of the database manager to increase memory allocation.
|
||||||
|
More PostgreSQL specific examples are available in their wiki page:
|
||||||
|
https://wiki.postgresql.org/wiki/Performance_Optimization
|
||||||
|
|
||||||
|
|
||||||
|
Increase the number of Gunicorn workers
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
The Gunicorn workers process HTTP requests and affect the speed at which the
|
||||||
|
website responds.
|
||||||
|
|
||||||
|
If you are using the Docker image, change the value of the
|
||||||
|
``MAYAN_GUNICORN_WORKERS`` environment variable (check the Docker image chapter:
|
||||||
|
:ref:`docker_environment_variables`). Normally this variable defaults to 2.
|
||||||
|
Increase this number to match the number of CPU cores + 1.
|
||||||
|
|
||||||
|
If you are using the direct deployment methods, change the line that reads::
|
||||||
|
|
||||||
|
command = /opt/mayan-edms/bin/gunicorn -w 2 mayan.wsgi --max-requests 500 --max-requests-jitter 50 --worker-class gevent --bind 0.0.0.0:8000 --timeout 120
|
||||||
|
|
||||||
|
And increase the value of the ``-w 2`` argument. This line is found in the
|
||||||
|
``[program:mayan-gunicorn]`` section of the supervisor configuration file.
|
||||||
|
|
||||||
|
|
||||||
|
Background task processing
|
||||||
|
==========================
|
||||||
|
|
||||||
|
The Celery workers are system processes that take care of the background
|
||||||
|
tasks requested by the frontend interactions like document image rendering
|
||||||
|
and periodic tasks like OCR. There are several dozen tasks defined in the code.
|
||||||
|
These tasks are divided into queues based on the app of the relationship
|
||||||
|
between the tasks. The queues by default are divided into three groups
|
||||||
|
based on the speed at which they need to be processed. The document page
|
||||||
|
image rendering for example is categorized as a high volume, short duration
|
||||||
|
task. The OCR is a high volume, long duration task. Email checking is a
|
||||||
|
low volume, medium duration tasks. It is not advisable to have the same
|
||||||
|
worker processing OCR to process image rendering too. If the worker is
|
||||||
|
processing several OCR tasks it will not be able to provide fast images
|
||||||
|
when an user is browsing the user interface. This is why by default the
|
||||||
|
queues are split into 3 workers: fast, medium, and slow. Each worker will handle
|
||||||
|
queues based on the latency required by each queue group.
|
||||||
|
|
||||||
|
|
||||||
|
Optimizations
|
||||||
|
-------------
|
||||||
|
|
||||||
|
* Increase the number of workers and redistribute the queues among them
|
||||||
|
(only possible with direct deployments).
|
||||||
|
* Launch more workers to service a queue. For example for faster document
|
||||||
|
image generation launch 2 workers to process the converter queue only
|
||||||
|
possible with direct deployments).
|
||||||
|
* By default each worker process uses 1 thread. You can increase the thread
|
||||||
|
count of each worker process with the Docker environment options:
|
||||||
|
|
||||||
|
* ``MAYAN_WORKER_FAST_CONCURRENCY``
|
||||||
|
* ``MAYAN_WORKER_MEDIUM_CONCURRENCY``
|
||||||
|
* ``MAYAN_WORKER_SLOW_CONCURRENCY``
|
||||||
|
|
||||||
|
* If using direct deployment, increase the value of the ``--concurrency=1``
|
||||||
|
argument of each worker in the supervisor file. You can also remove this
|
||||||
|
argument and let the Celery algorithm choose the number of threads to
|
||||||
|
launch. Usually this defaults to the number of CPU cores + 1.
|
||||||
|
|
||||||
|
|
||||||
|
Change the message broker
|
||||||
|
=========================
|
||||||
|
Messages are the method of communication between front end interactive code
|
||||||
|
and background tasks. In this regard messages can be thought as homologous
|
||||||
|
to tasks requests. Improving how many messages can be sent, stored and
|
||||||
|
sorted will impact the number of tasks the system can handle. To save on
|
||||||
|
memory, the basic deployment method and the Docker image default to using
|
||||||
|
Redis as a message broker. To increase capacity and reduce volatility of
|
||||||
|
messages (pending tasks are not lost during shutdown) use RabbitMQ to
|
||||||
|
shuffle messages.
|
||||||
|
|
||||||
|
For direct installs refer to the :ref:`deployment_advanced` documentation
|
||||||
|
section for the required changes.
|
||||||
|
|
||||||
|
For the Docker image, launch a separate RabbitMQ container
|
||||||
|
(https://hub.docker.com/_/rabbitmq/)::
|
||||||
|
|
||||||
|
docker run -d --name mayan-edms-rabbitmq -e RABBITMQ_DEFAULT_USER=mayan -e RABBITMQ_DEFAULT_PASS=mayanrabbitmqpassword -e RABBITMQ_DEFAULT_VHOST=mayan rabbitmq:3
|
||||||
|
|
||||||
|
Pass the MAYAN_BROKER_URL environment variable (https://kombu.readthedocs.io/en/latest/userguide/connections.html#connection-urls)
|
||||||
|
to the Mayan EDMS container so that it uses the RabbitMQ container the
|
||||||
|
message broker::
|
||||||
|
|
||||||
|
-e MAYAN_BROKER_URL="amqp://mayan:mayanrabbitmqpassword@localhost:5672/mayan",
|
||||||
|
|
||||||
|
When tasks finish, they leave behind a return status or the result of a
|
||||||
|
calculation, these are stored for a while so that whoever requested the
|
||||||
|
background task, is able retrieve the result. These results are stored in the
|
||||||
|
result storage. By default a Redis server is launched inside the Mayan EDMS
|
||||||
|
container. You can launch a separate Docker Redis container and tell the Mayan
|
||||||
|
EDMS container to use this via the ``MAYAN_CELERY_RESULT_BACKEND`` environment
|
||||||
|
variable. The format of this variable is explained here: http://docs.celeryproject.org/en/3.1/configuration.html#celery-result-backend
|
||||||
|
|
||||||
|
|
||||||
|
Deployment type
|
||||||
|
===============
|
||||||
|
|
||||||
|
Docker provides a faster deployment and the overhead is not high on modern
|
||||||
|
systems. It is however memory and CPU limited by default and you need to
|
||||||
|
increase this limits. The settings to change the container resource limits
|
||||||
|
are here: https://docs.docker.com/config/containers/resource_constraints/#limit-a-containers-access-to-memory
|
||||||
|
|
||||||
|
For the best performance possible use the advanced deployment method on a
|
||||||
|
host dedicated to serving only Mayan EDMS.
|
||||||
|
|
||||||
|
|
||||||
|
Storage
|
||||||
|
=======
|
||||||
|
|
||||||
|
For best input and output speed use a block based local filesystem on an
|
||||||
|
SSD drive for the ``/media`` sub folder. The location of the ``/media`` folder
|
||||||
|
will be specified by the ``MEDIA_ROOT`` setting.
|
||||||
|
|
||||||
|
If capacity is your bottom line, switch to an
|
||||||
|
:doc:`object storage <../chapters/object_storage>` system.
|
||||||
|
|
||||||
|
|
||||||
|
Use additional hosts
|
||||||
|
====================
|
||||||
|
|
||||||
|
When one host is not enough you can use multiple hosts and share the load.
|
||||||
|
Make sure that all hosts share the ``/media`` folder as specified by the
|
||||||
|
``MEDIA_ROOT`` setting, also the database, the broker, and the result storage.
|
||||||
|
One setting that needs to be changed in this configuration is the lock
|
||||||
|
manager backend.
|
||||||
|
|
||||||
|
Resource locking is a technique to avoid two processes or tasks to modify
|
||||||
|
the same resource at the same time causing a race condition. Mayan EDMS uses
|
||||||
|
its own lock manager. By default the lock manager with use a simple file
|
||||||
|
based lock backend ideal for single host installations. For multiple hosts
|
||||||
|
installation the database backend must be used in other to coordinate the
|
||||||
|
resource locks between the different hosts over a share data medium. This is
|
||||||
|
accomplished by modifying the environment variable ``LOCK_MANAGER_BACKEND`` in
|
||||||
|
both the direct deployment or the Docker image. Use the value
|
||||||
|
``lock_manager.backends.model_lock.ModelLock`` to switch to the database
|
||||||
|
resource lock backend. If you can also write your own lock manager backend
|
||||||
|
for other data sharing mediums with better performance than a relational
|
||||||
|
database like Redis, Memcached, Zoo Keeper.
|
||||||
113
docs/chapters/settings.rst
Normal file
113
docs/chapters/settings.rst
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
********
|
||||||
|
Settings
|
||||||
|
********
|
||||||
|
|
||||||
|
Mayan EDMS can be configure via environment variables or by setting files.
|
||||||
|
|
||||||
|
|
||||||
|
.. _environment_variables:
|
||||||
|
|
||||||
|
Via environment variables
|
||||||
|
=========================
|
||||||
|
|
||||||
|
To use environment variables, lookup the name of the setting you want to
|
||||||
|
override in the "Settings" menu. The "Settings" menu is located inside the
|
||||||
|
"Setup" main menu. To pass a value via an environment variable append
|
||||||
|
``"MAYAN_"`` to the name of the settings option. For example, to change
|
||||||
|
the number of documents displayed per page (COMMON_PAGINATE_BY, by default 40),
|
||||||
|
use::
|
||||||
|
|
||||||
|
export MAYAN_COMMON_PAGINATE_BY=10
|
||||||
|
|
||||||
|
Restart Mayan EDMS and the new value will take effect. The "Settings" menu
|
||||||
|
can be used to verify if the overridden setting value is being interpreted
|
||||||
|
correctly.
|
||||||
|
|
||||||
|
|
||||||
|
.. _configuration_file:
|
||||||
|
|
||||||
|
Via YAML configuration file
|
||||||
|
===========================
|
||||||
|
|
||||||
|
.. versionadded:: 3.1
|
||||||
|
|
||||||
|
It is possible to modify the different settings by creating or editing the
|
||||||
|
``media/config.yml`` file. This file is formatted in the YAML markup language (
|
||||||
|
http://yaml.org/). Here is an example of what the looks like::
|
||||||
|
|
||||||
|
DOCUMENT_PARSING_AUTO_PARSING: true
|
||||||
|
DOCUMENT_PARSING_PDFTOTEXT_PATH: /usr/bin/pdftotext
|
||||||
|
EMAIL_BACKEND: django.core.mail.backends.smtp.EmailBackend
|
||||||
|
EMAIL_HOST: localhost
|
||||||
|
EMAIL_HOST_PASSWORD: ''
|
||||||
|
EMAIL_HOST_USER: ''
|
||||||
|
EMAIL_PORT: 25
|
||||||
|
EMAIL_TIMEOUT: null
|
||||||
|
EMAIL_USE_SSL: false
|
||||||
|
EMAIL_USE_TLS: false
|
||||||
|
FILE_UPLOAD_MAX_MEMORY_SIZE: 2621440
|
||||||
|
HOME_VIEW: common:home
|
||||||
|
|
||||||
|
Every time Mayan EDMS is able to start correctly it will copy the ``config.yml``
|
||||||
|
and create a backup copy in the same directory named ``config_backup.yml``.
|
||||||
|
This file is used to revert to the last know configuration file known
|
||||||
|
to be valid. You can revert manually by copy the file or by using the
|
||||||
|
``revertsettings`` management command from the command line.
|
||||||
|
|
||||||
|
|
||||||
|
Via Python settings files
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Another way to configure Mayan EDMS is via Python-style, settings files.
|
||||||
|
If Mayan EDMS was installed using the Python package a ``mayan_settings``
|
||||||
|
folder will created for this purpose. If you installed Mayan EDMS
|
||||||
|
according to the :doc:`../chapters/deploying` instructions provided in this
|
||||||
|
documentation your ``mayan_settings`` folder should be located in the directory:
|
||||||
|
``/usr/share/mayan-edms/mayan/media/mayan_settings``.
|
||||||
|
|
||||||
|
If Mayan EDMS was installed using Docker, the ``mayan_settings`` folder
|
||||||
|
will be found inside the install Docker volume. If you installed Mayan EDMS
|
||||||
|
according to the :doc:`../chapters/docker` instructions provided in this
|
||||||
|
documentation your ``mayan_settings`` folder should be located in the directory:
|
||||||
|
``/docker-volumes/mayan/mayan_settings``.
|
||||||
|
|
||||||
|
Create a file with any valid name and a ``.py`` extension in the
|
||||||
|
``mayan_settings`` folder. The file must starts with a global import of
|
||||||
|
``mayan.settings.production``. In the form::
|
||||||
|
|
||||||
|
from mayan.settings.production import *
|
||||||
|
|
||||||
|
Now add the corresponding lines to override the default settings.
|
||||||
|
In the settings file, it is not necessary to prepend the string ``MAYAN_`` to
|
||||||
|
the setting option. For example, to change the number of documents displayed
|
||||||
|
per page (COMMON_PAGINATE_BY, by default 40),
|
||||||
|
use::
|
||||||
|
|
||||||
|
COMMON_PAGINATE_BY=10
|
||||||
|
|
||||||
|
versus::
|
||||||
|
|
||||||
|
export MAYAN_COMMON_PAGINATE_BY=10
|
||||||
|
|
||||||
|
when using the environment variable method.
|
||||||
|
|
||||||
|
For this example let's assume the file was saved with the name ``mysettings.py``.
|
||||||
|
|
||||||
|
The way used to tell Mayan EDMS to import this file will vary based on the
|
||||||
|
installation method.
|
||||||
|
|
||||||
|
For the :doc:`../chapters/deploying` method, the full import path will be
|
||||||
|
``mayan.media.mayan_settings.mysettings`` and can be passed via the
|
||||||
|
``--settings`` command line argument like this::
|
||||||
|
|
||||||
|
python manage.py runserver --settings=mayan.media.mayan_settings.mysettings
|
||||||
|
|
||||||
|
or via the ``DJANGO_SETTINGS_MODULE`` environment variable like this::
|
||||||
|
|
||||||
|
export DJANGO_SETTINGS_MODULE=mayan.media.mayan_settings.mysettings
|
||||||
|
|
||||||
|
For the :doc:`../chapters/docker` installation method, the full import path will be
|
||||||
|
``mayan_settings.mysettings`` and can only be passed via the
|
||||||
|
``MAYAN_SETTINGS_MODULE`` environment variable like this::
|
||||||
|
|
||||||
|
docker run <...> -e MAYAN_SETTINGS_MODULE=mayan_settings.mysettings
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
===================
|
*******************
|
||||||
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
|
||||||
@@ -8,6 +8,26 @@ 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
|
||||||
signatures sections of a document.
|
signatures sections of a document.
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
|
||||||
|
orientation = portrait
|
||||||
|
span_width = 240;
|
||||||
|
|
||||||
|
user [ shape = "actor" ];
|
||||||
|
key [ shape = flowchart.database, label = "Key" ];
|
||||||
|
document [ shape = "note", label = "Document" ];
|
||||||
|
document_signed [ label = "Signed\nDocument" ];
|
||||||
|
|
||||||
|
|
||||||
|
key -> user -> document -> document_signed;
|
||||||
|
}
|
||||||
|
|
||||||
|
Signed documents are tamper-proof. That means that if any part of the document's
|
||||||
|
file is edited (even just one character or one pixel), the document's
|
||||||
|
signature becomes invalid alerting that an unauthorized change has occurred.
|
||||||
|
|
||||||
Existing non signed documents can be signed in one of two ways:
|
Existing non signed documents can be signed in one of two ways:
|
||||||
by downloading the document, signing it, and uploading the signed document
|
by downloading the document, signing it, and uploading the signed document
|
||||||
as a new version of the existing one or by creating a detached signature for
|
as a new version of the existing one or by creating a detached signature for
|
||||||
@@ -21,6 +41,6 @@ keys no longer needed can also be deleted from this menu.
|
|||||||
|
|
||||||
Only `GNU Privacy Guard`_ signatures are support at the moment.
|
Only `GNU Privacy Guard`_ signatures are support at the moment.
|
||||||
|
|
||||||
Only version 1 of `GNU Privacy Guard`_ is supported for now.
|
Only version 1 of `GNU Privacy Guard`_ is supported at the moment.
|
||||||
|
|
||||||
.. _`GNU Privacy Guard`: www.gnupg.org/
|
.. _`GNU Privacy Guard`: www.gnupg.org/
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
===========
|
|
||||||
Smart links
|
Smart links
|
||||||
===========
|
===========
|
||||||
|
|
||||||
@@ -7,7 +6,7 @@ in their respective indexes. Smart links are useful when two documents are
|
|||||||
related somehow but are of different type or different hierarchical units.
|
related somehow but are of different type or different hierarchical units.
|
||||||
|
|
||||||
Example: A patient record can be related to a prescription drug information
|
Example: A patient record can be related to a prescription drug information
|
||||||
document, but they each belong to their own :doc:`indexes`.
|
document, but they each belong to their own :doc:`../chapters/indexes`.
|
||||||
|
|
||||||
Smart links are rule based, but don't create any organizational structure.
|
Smart links are rule based, but don't create any organizational structure.
|
||||||
Smart links just show the documents that match the rules as evaluated against
|
Smart links just show the documents that match the rules as evaluated against
|
||||||
@@ -1,4 +1,3 @@
|
|||||||
=======
|
|
||||||
Sources
|
Sources
|
||||||
=======
|
=======
|
||||||
|
|
||||||
@@ -31,7 +30,50 @@ The current document sources supported are:
|
|||||||
when the quality of the scans is irrelevant or when they will be known
|
when the quality of the scans is irrelevant or when they will be known
|
||||||
to be of good quality, such as when receiving e-faxes as PDFs.
|
to be of good quality, such as when receiving e-faxes as PDFs.
|
||||||
|
|
||||||
Document source can be configure to allow document bundles to uploaded as
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
mayan [shape = "roundedbox", label = "Mayan EDMS" ];
|
||||||
|
email_pop3 [shape = "mail", label = "e-mail (POP3)"];
|
||||||
|
email_imap [shape = "mail", label = "e-mail (IMAP)"];
|
||||||
|
staging [shape = "flowchart.database", label = "Staging folder" ];
|
||||||
|
watch [shape = "flowchart.database", label = "Watch folder" ];
|
||||||
|
automatic [shape = "box", label = "Automatic\n(via schedule)" ];
|
||||||
|
manual [shape = "actor", height=60, label = "Manual\n(user interaction)" ];
|
||||||
|
web [shape = "note", label = "Webform upload" ];
|
||||||
|
|
||||||
|
automatic -> mayan;
|
||||||
|
email_pop3 -> automatic;
|
||||||
|
email_imap -> automatic;
|
||||||
|
watch -> automatic;
|
||||||
|
manual -> mayan;
|
||||||
|
staging -> manual;
|
||||||
|
web -> manual;
|
||||||
|
}
|
||||||
|
|
||||||
|
Document sources can be configure to allow document bundles to uploaded as
|
||||||
compressed files which are decompressed and their content uploaded as separate
|
compressed files which are decompressed and their content uploaded as separate
|
||||||
documents. This feature is useful when migrating from another document
|
documents. This feature is useful when migrating from another document
|
||||||
manager system.
|
manager system.
|
||||||
|
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
If you deployed a Mayan EDMS Docker container and want to use watched folders
|
||||||
|
or staging folder, refer to the Docker chapter :ref:`docker-accessing-outside-data`.
|
||||||
|
|
||||||
|
|
||||||
|
Creating new sources
|
||||||
|
====================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Create new document sources" permission is required for this action.
|
||||||
|
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`System --> Setup --> Sources` menu.
|
||||||
|
#. From the :guilabel:`Actions` dropdown select the new type of source to create.
|
||||||
|
#. Each source type will have different fields to customize its behaviour. Enter
|
||||||
|
the required information in each field based on the help text provided.
|
||||||
|
#. Press :guilabel:`Save`.
|
||||||
46
docs/chapters/tags.rst
Normal file
46
docs/chapters/tags.rst
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
Tags
|
||||||
|
====
|
||||||
|
|
||||||
|
Tags are color coded properties that can be attached or removed from documents.
|
||||||
|
Tags allow giving documents a binary property. Documents can also be tagged
|
||||||
|
with more than one tag.
|
||||||
|
|
||||||
|
Once tagged, documents can be searched by their tags. It is also possible to
|
||||||
|
show all the documents tagged with a particular
|
||||||
|
tag via the **Documents** link of each tag.
|
||||||
|
|
||||||
|
To view, add, or remove tags from a specific document, go to the document view
|
||||||
|
and click on the **Tags** tab. This view will show the current tags of a
|
||||||
|
document. The **Actions** menu will now show two new options: one to attach
|
||||||
|
more tags to the document and another to remove tags from the document.
|
||||||
|
|
||||||
|
It is also possible to tag documents in bulk by selecting several documents
|
||||||
|
from any view that displays a list documents and selecting the **Attach tag**
|
||||||
|
or **Remove tags** from the dropdown menu.
|
||||||
|
|
||||||
|
|
||||||
|
Creating tags
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Create new tags" permission is required for this action.
|
||||||
|
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`Tags --> Create` menu.
|
||||||
|
#. Enter a label to identify the tag.
|
||||||
|
#. Select a color for the tag.
|
||||||
|
#. Press :guilabel:`Submit`.
|
||||||
|
|
||||||
|
|
||||||
|
View all tags
|
||||||
|
=============
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "View tags" permission is required for this action, globally or via an
|
||||||
|
ACL for a tag.
|
||||||
|
|
||||||
|
#. Go to the :menuselection:`Tags --> All` menu.
|
||||||
@@ -1,21 +1,21 @@
|
|||||||
===============
|
***************
|
||||||
Transformations
|
Transformations
|
||||||
===============
|
***************
|
||||||
|
|
||||||
Transformations are persistent manipulations to the previews of the stored
|
Transformations are persistent manipulations to the previews of the stored
|
||||||
documents. For example: a scanning equipment may only produce landscape PDFs.
|
documents. For example: a scanning equipment may only produce landscape PDFs.
|
||||||
In this case a useful transformation for that document source would be to rotate
|
In this case a useful transformation for that document source would be to rotate
|
||||||
all scanned documents by 270 degrees after being uploaded. By adding this
|
all scanned documents by 270 degrees after being uploaded. By adding this
|
||||||
transformation to the Mayan EDMS source that is connected to the scanner, all
|
transformation to the Mayan EDMS source that is connected to the scanner, all
|
||||||
pages scanned via that source will inherit the transformation as they are
|
pages scanned via that source will inherit the transformation as they are
|
||||||
created. The result is that whenever a document is uploaded from that scanner,
|
created. The result is that whenever a document is uploaded from that scanner,
|
||||||
it will appear in portrait orientation, instead of landscape orientation.
|
it will appear in portrait orientation, instead of landscape orientation.
|
||||||
|
|
||||||
Transformations can also be added to existing documents by clicking on a
|
Transformations can also be added to existing documents by clicking on a
|
||||||
document's page and then clicking on "transformations". In this view the Actions
|
document's page and then clicking on "transformations". In this view the Actions
|
||||||
menu will have a new option that reads "Create new transformation". Currently,
|
menu will have a new option that reads "Create new transformation". Currently,
|
||||||
the available transformations are: rotation, zoom, crop, and resize. Once the
|
the available transformations are: rotation, zoom, crop, and resize. Once the
|
||||||
document image has been corrected, resubmit it for OCR for improved results.
|
document image has been corrected, resubmit it for OCR for improved results.
|
||||||
|
|
||||||
Transformations are not destructive and do not physically modify the document
|
Transformations are not destructive and do not physically modify the document
|
||||||
file, they just modify the document's graphical representation.
|
file, they just modify the document's graphical representation.
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
============
|
************
|
||||||
Translations
|
Translations
|
||||||
============
|
************
|
||||||
|
|
||||||
Translations are handled online via the **Transifex** website:
|
Translations are handled online via the **Transifex** website:
|
||||||
https://www.transifex.com/projects/p/mayan-edms/. To create a translation team
|
https://www.transifex.com/projects/p/mayan-edms/. To create a translation team
|
||||||
84
docs/chapters/upload_wizard.rst
Normal file
84
docs/chapters/upload_wizard.rst
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
*************
|
||||||
|
Upload wizard
|
||||||
|
*************
|
||||||
|
|
||||||
|
The steps needed to upgrade a document using form-tools' ``SessionWizard``
|
||||||
|
were hardcoded in the ``source`` app. This made it very difficult to add or remove
|
||||||
|
wizard steps.
|
||||||
|
|
||||||
|
The steps of the wizard are now defined by a new class called
|
||||||
|
``sources.wizard.WizardStep``. The existing steps to select a document type,
|
||||||
|
enter metadata and tag the document, have been converted to function as
|
||||||
|
``WizardSteps`` subclasses. The converted steps now live in
|
||||||
|
|
||||||
|
``sources.wizards.WizardStepDocumentType``, ``tag.wizard_steps.WizardStepTags``,
|
||||||
|
and ``metadata.wizard_steps.WizardStepMetadata``.
|
||||||
|
|
||||||
|
The steps need to define the following methods:
|
||||||
|
|
||||||
|
- ``done``: This method is execute when the wizard finished the last step
|
||||||
|
an enter the step where the actual file are uploaded. This steps is used
|
||||||
|
to encode form data into the URL query string that will be passed to the
|
||||||
|
document upload view for each file uploaded.
|
||||||
|
|
||||||
|
- ``condition``: This method is used to display the step conditionally.
|
||||||
|
If this method return True it will be displayed during the upload wizard
|
||||||
|
execution. To skip the step, return False or None.
|
||||||
|
|
||||||
|
- ``get_form_initial``: This method is used to return the initial data
|
||||||
|
for the step form. Use this method to set up initial values for the step's
|
||||||
|
form fields.
|
||||||
|
|
||||||
|
- ``step_post_upload_process``: This method will be executed once the
|
||||||
|
document finishes uploading. Use this method to process the information
|
||||||
|
encoded in the URL querystring by the step's `done`` method.
|
||||||
|
|
||||||
|
Once the ``WizardStep`` subclass is defined, it needs to be registered. This
|
||||||
|
is done by calling the ``.register`` method of the ``WizardStep`` class with
|
||||||
|
the subclass as the argument. Example::
|
||||||
|
|
||||||
|
WizardStep.register(WizardStepMetadata)
|
||||||
|
|
||||||
|
This statement must be located after the subclass definition. Finally,
|
||||||
|
the module defining the wizard step must be imported so that it is loaded
|
||||||
|
with the rest of the code and enabled. The best place to do this is in the
|
||||||
|
``.ready`` method of the apps' ``apps.py`` module. Example::
|
||||||
|
|
||||||
|
class TagsApp(MayanAppConfig):
|
||||||
|
has_rest_api = True
|
||||||
|
has_tests = True
|
||||||
|
name = 'tags'
|
||||||
|
verbose_name = _('Tags')
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
super(TagsApp, self).ready()
|
||||||
|
from actstream import registry
|
||||||
|
|
||||||
|
from .wizard_steps import WizardStepTags # NOQA
|
||||||
|
|
||||||
|
The ``WizardStep`` class also allows for unregistering existing steps. This
|
||||||
|
is accomplished by calling the ``.deregister`` method of the ``WizardStep``
|
||||||
|
class and passing the subclass as the argument. This method should
|
||||||
|
also be called inside the ``.ready`` method of an apps' ``apps.py``
|
||||||
|
module. Example::
|
||||||
|
|
||||||
|
|
||||||
|
class TagsApp(MayanAppConfig):
|
||||||
|
has_rest_api = True
|
||||||
|
has_tests = True
|
||||||
|
name = 'tags'
|
||||||
|
verbose_name = _('Tags')
|
||||||
|
|
||||||
|
def ready(self):
|
||||||
|
super(TagsApp, self).ready()
|
||||||
|
from actstream import registry
|
||||||
|
|
||||||
|
from metadata.wizard_steps import WizardStepMetadata # NOQA
|
||||||
|
from sources.wizards import WizardStep # NOQA
|
||||||
|
from .wizard_steps import WizardStepTags # NOQA
|
||||||
|
|
||||||
|
WizardStep.deregister(WizardStepTags)
|
||||||
|
|
||||||
|
|
||||||
|
This will cause the tags assignment step to not be assigned to the upload
|
||||||
|
wizard anymore.
|
||||||
80
docs/chapters/versioning.rst
Normal file
80
docs/chapters/versioning.rst
Normal file
@@ -0,0 +1,80 @@
|
|||||||
|
*******************
|
||||||
|
Document versioning
|
||||||
|
*******************
|
||||||
|
|
||||||
|
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
|
||||||
|
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
|
||||||
|
revert to a previous version of the document is provided.
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
orientation = portrait
|
||||||
|
node_width = 200;
|
||||||
|
version_1 [ label = "Version 1" ];
|
||||||
|
version_2 [ label = "Version 2" ];
|
||||||
|
document_1 [ label = "payroll_report.pdf" ];
|
||||||
|
document_2 [ label = "payroll_report_fixed.pdf" ];
|
||||||
|
upload_1 [ label = "payroll_report.pdf" ];
|
||||||
|
upload_2 [ label = "payroll_report_fixed.pdf" ];
|
||||||
|
|
||||||
|
upload_1 -> version_1 -> document_1;
|
||||||
|
upload_2 -> version_2 -> document_2;
|
||||||
|
document_1 -> document_2;
|
||||||
|
}
|
||||||
|
|
||||||
|
Only the interactive document sources (:doc:`../chapters/sources`)
|
||||||
|
(``Web`` and ``Staging folders``) are available to upload new document versions.
|
||||||
|
|
||||||
|
There is no limit to the number of versions a document can have.
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
|
||||||
|
blockdiag {
|
||||||
|
default_shape = roundedbox
|
||||||
|
orientation = portrait
|
||||||
|
node_width = 200;
|
||||||
|
|
||||||
|
document [ label = "payroll_report.pdf" ];
|
||||||
|
versions [ label = "Versions", stacked ];
|
||||||
|
|
||||||
|
document -> versions;
|
||||||
|
}
|
||||||
|
|
||||||
|
By default, the last version will be showed when working with the document
|
||||||
|
but any of the versions can be inspected and viewed.
|
||||||
|
|
||||||
|
|
||||||
|
View a document version list
|
||||||
|
============================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "View documents' versions list" permission is required for this action,
|
||||||
|
either globally or via an ACL for a document or document type.
|
||||||
|
|
||||||
|
|
||||||
|
#. Navigate to the select document's preview view.
|
||||||
|
#. Click on the sibebar's :guilabel:`Versions` button.
|
||||||
|
|
||||||
|
|
||||||
|
Uploading a new document version
|
||||||
|
================================
|
||||||
|
|
||||||
|
.. admonition:: Permissions required
|
||||||
|
:class: warning
|
||||||
|
|
||||||
|
The "Create new document versions" permission is required for this action,
|
||||||
|
either globally or via an ACL for a document or document type.
|
||||||
|
|
||||||
|
|
||||||
|
#. Navigate to the select document's versions list view.
|
||||||
|
#. From the :guilabel:`Actions` dropdown select :guilabel:`Upload new version`.
|
||||||
|
#. Optionally type a comment explaining the changes in the new version.
|
||||||
|
#. Press the :guilabel:`Browse` button and select a new file.
|
||||||
|
#. Press :guilabel:`Save` upload the new verision.
|
||||||
|
|
||||||
113
docs/chapters/workflows.rst
Normal file
113
docs/chapters/workflows.rst
Normal file
@@ -0,0 +1,113 @@
|
|||||||
|
*********
|
||||||
|
Workflows
|
||||||
|
*********
|
||||||
|
|
||||||
|
Introduction
|
||||||
|
============
|
||||||
|
|
||||||
|
Workflows provide a structured method for storing a sequence of states over
|
||||||
|
which the a document will progress. Workflows keep track how a document has
|
||||||
|
been processed so far.
|
||||||
|
|
||||||
|
Workflows work by storing a series of states to help you know the "status"
|
||||||
|
of a document. To move a workflow from one state to another, transitions are
|
||||||
|
used.
|
||||||
|
|
||||||
|
Transitions connect two different states and help provide context to know
|
||||||
|
which state is possible to transition to, from a previous state. Transitions
|
||||||
|
provide and order for the sequence of possible states changes.
|
||||||
|
|
||||||
|
Transitions can be executed manually by users if they have the required access
|
||||||
|
level as configure by the system administrator.
|
||||||
|
|
||||||
|
.. blockdiag::
|
||||||
|
:caption: Example workflow. Circles represent states, rectangles represent transitions.
|
||||||
|
|
||||||
|
span_width = 30;
|
||||||
|
|
||||||
|
submitted [shape = circle, width = 60, height = 60];
|
||||||
|
approved [shape = circle, width = 60, height = 60];
|
||||||
|
rejected [shape = circle, width = 60, height = 60];
|
||||||
|
archived [shape = circle, width = 60, height = 60];
|
||||||
|
|
||||||
|
approve [label = approve];
|
||||||
|
reject [label = reject];
|
||||||
|
reopen [label = "re-open"];
|
||||||
|
|
||||||
|
|
||||||
|
submitted -> approve -> approved;
|
||||||
|
approved -> archived;
|
||||||
|
submitted -> reject -> rejected;
|
||||||
|
rejected -> archived;
|
||||||
|
archived -> reopen -> submitted;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Workflows in Mayan EDMS are implemented as finite state machines
|
||||||
|
(https://en.wikipedia.org/wiki/Finite-state_machine).
|
||||||
|
|
||||||
|
Workflows are mainly used to represent business processes. But they can also be
|
||||||
|
used an automation system to customized Mayan EDMS and have it perform some
|
||||||
|
tasks automatically.
|
||||||
|
|
||||||
|
|
||||||
|
Automation
|
||||||
|
==========
|
||||||
|
|
||||||
|
Besides being able to be executed manually by users, transitions can also be
|
||||||
|
programmed execute automatically based on system events. This is called in
|
||||||
|
Mayan EDMS transition triggering and is one of the tools available to
|
||||||
|
automate business processes.
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
* Move a document from a "scanned" state to a "billed" state
|
||||||
|
when a tag is attached to the document.
|
||||||
|
* Move a document from a "uploaded" state to a "OCR ready" state
|
||||||
|
when the OCR engine finishes processing the document.
|
||||||
|
|
||||||
|
The other tool provided for process automation is being able to execute an
|
||||||
|
action when a workflow state is reached or leaved. These are called state
|
||||||
|
events.
|
||||||
|
|
||||||
|
Some examples of state actions currently provided are:
|
||||||
|
|
||||||
|
* Attach a tag to a document
|
||||||
|
* Remove a tag from a document
|
||||||
|
* Do an HTTP POST request to an external IP address
|
||||||
|
* Edit the label or the description of a document.
|
||||||
|
|
||||||
|
Other time more state actions are being added. Some state actions like the one
|
||||||
|
that creates an HTTP POST request allow Mayan EDMS to trigger processes in
|
||||||
|
external systems based on the state of a document. One example of this is
|
||||||
|
triggering the billing process of an accounting system when an invoice is
|
||||||
|
scanned in Mayan EDMS.
|
||||||
|
|
||||||
|
Workflow state actions and transitions triggers are new features and are still
|
||||||
|
evolving.
|
||||||
|
|
||||||
|
Workflows allow translating business logic into a series of states. With the
|
||||||
|
addition of state actions and transition triggers, the workflows in Mayan EDMS
|
||||||
|
are no longer just informative but can be part of your actual business
|
||||||
|
automation process.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
==============
|
||||||
|
|
||||||
|
Internally, workflows are implemented as a finite state machines
|
||||||
|
(https://en.wikipedia.org/wiki/Finite-state_machine). To make them simpler to
|
||||||
|
use, workflow have been designed so that only one state can be the current
|
||||||
|
active state for a workflow being executed. Another design decision is that
|
||||||
|
every workflow needs at least one state marked as the initial state.
|
||||||
|
|
||||||
|
|
||||||
|
Visualizations
|
||||||
|
==============
|
||||||
|
|
||||||
|
The graphical representation of a workflow is similar to a flowchart. The
|
||||||
|
states are represented with circles. The transitions are represented with
|
||||||
|
arrows. Circle with a double border represent the initial state of the workflow.
|
||||||
|
|
||||||
|
To view the graphical representations of workflow use **Preview** button of
|
||||||
|
the workflow in the setup view.
|
||||||
45
docs/conf.py
45
docs/conf.py
@@ -33,7 +33,9 @@ sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "_ext"))
|
|||||||
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
|
||||||
#extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
|
#extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode']
|
||||||
#extensions = ["djangodocs", "sphinx.ext.intersphinx"]
|
#extensions = ["djangodocs", "sphinx.ext.intersphinx"]
|
||||||
extensions = ['djangodocs', 'sphinxcontrib.blockdiag']
|
extensions = [
|
||||||
|
'sphinx.ext.extlinks', 'sphinxcontrib.blockdiag', 'sphinxcontrib.spelling'
|
||||||
|
]
|
||||||
|
|
||||||
blockdiag_antialias = True
|
blockdiag_antialias = True
|
||||||
blockdiag_html_image_format = "SVG"
|
blockdiag_html_image_format = "SVG"
|
||||||
@@ -53,7 +55,7 @@ master_doc = 'index'
|
|||||||
|
|
||||||
# General information about the project.
|
# General information about the project.
|
||||||
project = mayan.__title__
|
project = mayan.__title__
|
||||||
copyright = mayan.__copyright__
|
copyright = mayan.__copyright_short__
|
||||||
|
|
||||||
# The version info for the project you're documenting, acts as replacement for
|
# The version info for the project you're documenting, acts as replacement for
|
||||||
# |version| and |release|, also used in various other places throughout the
|
# |version| and |release|, also used in various other places throughout the
|
||||||
@@ -179,6 +181,9 @@ html_static_path = ['_static']
|
|||||||
# Output file base name for HTML help builder.
|
# Output file base name for HTML help builder.
|
||||||
htmlhelp_basename = 'MayanEDMSdoc'
|
htmlhelp_basename = 'MayanEDMSdoc'
|
||||||
|
|
||||||
|
html_show_sourcelink = False
|
||||||
|
|
||||||
|
html_show_sphinx = False
|
||||||
|
|
||||||
# -- Options for LaTeX output --------------------------------------------------
|
# -- Options for LaTeX output --------------------------------------------------
|
||||||
|
|
||||||
@@ -224,28 +229,26 @@ latex_documents = [
|
|||||||
# One entry per manual page. List of tuples
|
# One entry per manual page. List of tuples
|
||||||
# (source start file, name, description, authors, manual section).
|
# (source start file, name, description, authors, manual section).
|
||||||
man_pages = [
|
man_pages = [
|
||||||
('index', 'mayanedms', 'Mayan EDMS Documentation',
|
('index', 'mayanedms', '{} Documentation'.format(mayan.__title__),
|
||||||
[mayan.__author__], 1)
|
[mayan.__author__], 1)
|
||||||
]
|
]
|
||||||
|
|
||||||
|
html_theme = 'sphinx_rtd_theme'
|
||||||
|
|
||||||
# -- Custom options
|
# -- External links --
|
||||||
import alabaster
|
extlinks = {
|
||||||
|
'django-docs': (
|
||||||
html_theme_path = [alabaster.get_path()]
|
'https://docs.djangoproject.com/en/{}/%s'.format(
|
||||||
extensions.append('alabaster')
|
mayan.__django_version__
|
||||||
html_theme = 'alabaster'
|
), 'Django documentation section: '
|
||||||
html_sidebars = {
|
),
|
||||||
'**': [
|
'github-issue': (
|
||||||
'about.html', 'donate.html', 'navigation.html', 'searchbox.html',
|
'https://github.com/mayan-edms/mayan-edms/issues/%s', 'GitHub issue #'
|
||||||
]
|
),
|
||||||
}
|
'gitlab-issue': (
|
||||||
html_theme_options = {
|
'https://gitlab.com/mayan-edms/mayan-edms/issues/%s', 'GitLab issue #'
|
||||||
'description': mayan.__description__,
|
)
|
||||||
'github_button': False,
|
|
||||||
'travis_button': False,
|
|
||||||
'gratipay_user': 'rosarior',
|
|
||||||
'github_banner': False,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
html_logo = '_static/logo_pyramid_only.png'
|
def setup(app):
|
||||||
|
app.add_stylesheet('css/custom.css')
|
||||||
|
|||||||
@@ -1,6 +1,11 @@
|
|||||||
Welcome to Mayan EDMS!
|
Welcome to Mayan EDMS!
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
.. image:: /_static/mayan_logo.png
|
||||||
|
:alt: Logo is a trademark of Roberto Rosario
|
||||||
|
:align: center
|
||||||
|
|
||||||
|
|
||||||
Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_,
|
Mayan EDMS is a `Free Open Source`_ `Electronic Document Management System`_,
|
||||||
coded in the Python language using the Django_ web application framework and
|
coded in the Python language using the Django_ web application framework and
|
||||||
released under the `Apache 2.0 License`_. It provides an electronic vault or
|
released under the `Apache 2.0 License`_. It provides an electronic vault or
|
||||||
@@ -12,19 +17,25 @@ repository for electronic documents.
|
|||||||
.. toctree::
|
.. toctree::
|
||||||
:hidden:
|
:hidden:
|
||||||
|
|
||||||
Installation <topics/installation>
|
topics/features
|
||||||
Features <topics/features>
|
topics/installation
|
||||||
Advanced deployment <topics/deploying>
|
releases/index
|
||||||
Release notes and upgrading <releases/index>
|
topics/getting_started
|
||||||
Concepts <topics/index>
|
topics/adding_documents
|
||||||
Development <topics/development>
|
topics/access_control
|
||||||
App creation <topics/app_creation>
|
topics/categorization
|
||||||
Roadmap <topics/roadmap>
|
topics/collaboration
|
||||||
Translations <topics/translations>
|
topics/settings
|
||||||
Contributors <topics/contributors>
|
topics/storage
|
||||||
Licensing <topics/license>
|
topics/integration
|
||||||
FAQ <topics/faq>
|
topics/docker
|
||||||
Contact <topics/contact>
|
topics/advanced
|
||||||
|
topics/administration
|
||||||
|
topics/troubleshooting
|
||||||
|
topics/development
|
||||||
|
topics/faq
|
||||||
|
topics/license
|
||||||
|
topics/contact
|
||||||
|
|
||||||
.. _Docker: https://www.docker.com/
|
.. _Docker: https://www.docker.com/
|
||||||
.. _Django: http://www.djangoproject.com/
|
.. _Django: http://www.djangoproject.com/
|
||||||
|
|||||||
210
docs/mercs/0001-merc-process.rst
Normal file
210
docs/mercs/0001-merc-process.rst
Normal file
@@ -0,0 +1,210 @@
|
|||||||
|
MERC 1: Purpose and Guidelines
|
||||||
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
|
:MERC: 1
|
||||||
|
:Author: Michael Price
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Process
|
||||||
|
:Created: 2018-02-17
|
||||||
|
:Last-Modified: 2018-02-17
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
What is a MERC?
|
||||||
|
===============
|
||||||
|
|
||||||
|
A Mayan EDMS Request For Comment document or MERC document is a design
|
||||||
|
document providing information to the Mayan EDMS community, or
|
||||||
|
describing a new feature or process for Mayan EDMS. MERCs provide
|
||||||
|
concise technical specifications of features, along with rationales.
|
||||||
|
|
||||||
|
MERC Types
|
||||||
|
==========
|
||||||
|
|
||||||
|
There are three kinds of MERCs:
|
||||||
|
|
||||||
|
1. A **Feature** MERC describes a new feature or implementation
|
||||||
|
for Mayan EDMS. Most MERCs will be Feature MERCs.
|
||||||
|
|
||||||
|
2. An **Informational** MERC describes a Mayan EDMS design issue, or
|
||||||
|
provides general guidelines or information to the Mayan EDMS community,
|
||||||
|
but does not propose a new feature. Informational MERCs do not
|
||||||
|
necessarily represent a community consensus or recommendation, so users
|
||||||
|
and implementers are free to ignore Informational MERCs or follow their
|
||||||
|
advice.
|
||||||
|
|
||||||
|
3. A **Process** MERC describes a process surrounding Mayan EDMS, or
|
||||||
|
proposes a change to (or an event in) a process. Process MERCs are
|
||||||
|
like Feature MERCs but apply to areas other than the Mayan EDMS
|
||||||
|
framework itself. They may propose an implementation, but not to
|
||||||
|
Mayan EDMS's codebase; they often require community consensus; unlike
|
||||||
|
Informational MERCs, they are more than recommendations, and users
|
||||||
|
are typically not free to ignore them. Examples include
|
||||||
|
procedures, guidelines, changes to the decision-making process, and
|
||||||
|
changes to the tools or environment used in Mayan EDMS development.
|
||||||
|
Any meta-MERC is also considered a Process MERC. (So this document
|
||||||
|
is a Process MERC).
|
||||||
|
|
||||||
|
MERC submission workflow
|
||||||
|
========================
|
||||||
|
|
||||||
|
Pre-proposal
|
||||||
|
------------
|
||||||
|
|
||||||
|
The MERC process begins with a new idea for Mayan EDMS. It is highly recommended
|
||||||
|
that a single MERC contain a single key proposal or new idea. Small enhancements
|
||||||
|
or patches usually don't need a MERC and follow Mayan EDMS's normal contribution
|
||||||
|
process.
|
||||||
|
|
||||||
|
MERCs should be focused on a single topic. If in doubt, split your MERC
|
||||||
|
into several well-focused ones.
|
||||||
|
|
||||||
|
Once the idea's been vetted, a draft MERC should be presented to the
|
||||||
|
Mayan EDMS mailing list. This gives the author a chance to flesh out the
|
||||||
|
draft MERC to make sure it's properly formatted, of high quality, and to address
|
||||||
|
initial concerns about the proposal.
|
||||||
|
|
||||||
|
The Core Developers will be responsible for accepting or rejecting the MERC proposal.
|
||||||
|
|
||||||
|
|
||||||
|
Submitting the draft
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Following the discussion on Mayan EDMS mailing list, the proposal
|
||||||
|
should be sent as a merge request to the Mayan EDMS repository. The draft must
|
||||||
|
be written in MERC style; if it isn't the merge request may be rejected until proper
|
||||||
|
formatting rules are followed.
|
||||||
|
|
||||||
|
|
||||||
|
Implementation
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Finally, once a MERC has been accepted, the implementation must be completed. In
|
||||||
|
many cases some (or all) implementation will actually happen during the MERC
|
||||||
|
process: Feature MERCs will often have fairly complete implementations before
|
||||||
|
being reviewed. When the implementation is complete and incorporated
|
||||||
|
into the main source code repository, the status will be changed to
|
||||||
|
"Final".
|
||||||
|
|
||||||
|
MERC format
|
||||||
|
===========
|
||||||
|
|
||||||
|
MERCs need to follow a common format and outline; this section describes
|
||||||
|
that format.
|
||||||
|
|
||||||
|
MERCs must be written in `reStructuredText <http://docutils.sourceforge.net/rst.html>`_
|
||||||
|
(the same format as Mayan EDMS's documentation).
|
||||||
|
|
||||||
|
Each MERC should have the following parts:
|
||||||
|
|
||||||
|
#. A short descriptive title (e.g. "User document filters"), which is also reflected
|
||||||
|
in the MERC's filename (e.g. ``0002-user-document-filters.rst``).
|
||||||
|
|
||||||
|
#. A preamble -- a rST `field list <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#field-lists>`_
|
||||||
|
containing metadata about the MERC, including the MERC number and so forth. See
|
||||||
|
`MERC Metadata`_ below for specific details.
|
||||||
|
|
||||||
|
#. Abstract -- a short (~200 word) description of the technical issue
|
||||||
|
being addressed.
|
||||||
|
|
||||||
|
#. Specification -- The technical specification should describe the syntax and
|
||||||
|
semantics of any new feature. The specification should be detailed enough to
|
||||||
|
allow implementation -- that is, developers other than the author should
|
||||||
|
(given the right experience) be able to independently implement the feature,
|
||||||
|
given only the MERC.
|
||||||
|
|
||||||
|
#. Motivation -- The motivation is critical for MERCs that want to add
|
||||||
|
substantial new features or materially refactor existing ones. It should
|
||||||
|
clearly explain why the existing solutions are inadequate to address the
|
||||||
|
problem that the MERC solves. MERC submissions without sufficient motivation
|
||||||
|
may be rejected outright.
|
||||||
|
|
||||||
|
#. Rationale -- The rationale fleshes out the specification by describing what
|
||||||
|
motivated the design and why particular design decisions were made. It
|
||||||
|
should describe alternate designs that were considered and related work.
|
||||||
|
|
||||||
|
The rationale should provide evidence of consensus within the community and
|
||||||
|
discuss important objections or concerns raised during discussion.
|
||||||
|
|
||||||
|
#. Backwards Compatibility -- All MERCs that introduce backwards
|
||||||
|
incompatibilities must include a section describing these incompatibilities
|
||||||
|
and their severity. The MERC must explain how the author proposes to deal
|
||||||
|
with these incompatibilities. MERC submissions without a sufficient backwards
|
||||||
|
compatibility treatise may be rejected outright.
|
||||||
|
|
||||||
|
#. Reference Implementation -- The reference implementation must be completed
|
||||||
|
before any MERC is given status "Final", but it need not be completed before
|
||||||
|
the MERC is accepted. While there is merit to the approach of reaching
|
||||||
|
consensus on the specification and rationale before writing code, the
|
||||||
|
principle of "rough consensus and running code" is still useful when it comes
|
||||||
|
to resolving many discussions of API details.
|
||||||
|
|
||||||
|
The final implementation must include tests and documentation, per Mayan EDMS
|
||||||
|
development guide.
|
||||||
|
|
||||||
|
|
||||||
|
MERC Metadata
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Each MERC must begin with some metadata given as an rST
|
||||||
|
`field list <http://docutils.sourceforge.net/docs/ref/rst/restructuredtext.html#field-lists>`_.
|
||||||
|
The headers must contain the following fields:
|
||||||
|
|
||||||
|
``MERC``
|
||||||
|
The MERC number. In an initial merge request, this can be left out or given
|
||||||
|
as ``XXXX``; the reviewer who merges the pull request will assign the MERC
|
||||||
|
number.
|
||||||
|
``Type``
|
||||||
|
``Feature``, ``Informational``, or ``Process``
|
||||||
|
``Status``
|
||||||
|
``Draft``, ``Accepted``, ``Rejected``, ``Withdrawn``, ``Final``, or ``Superseded``
|
||||||
|
``Created``
|
||||||
|
Original creation date of the MERC (in ``yyyy-mm-dd`` format)
|
||||||
|
``Last-Modified``
|
||||||
|
Date the MERC was last modified (in ``yyyy-mm-dd`` format)
|
||||||
|
``Author``
|
||||||
|
The MERC's author(s).
|
||||||
|
``Implementation-Team``
|
||||||
|
The person/people who have committed to implementing this MERC
|
||||||
|
``Requires``
|
||||||
|
If this MERC depends on another MERC being implemented first,
|
||||||
|
this should be a link to the required MERC.
|
||||||
|
``Mayan EDMS-Version`` (optional)
|
||||||
|
For Feature MERCs, the version of Mayan EDMS (e.g. ``2.7.3``) that this
|
||||||
|
feature will be released in.
|
||||||
|
``Replaces`` and ``Superseded-By`` (optional)
|
||||||
|
These fields indicate that a MERC has been rendered obsolete. The newer MERC
|
||||||
|
must have a ``Replaces`` header containing the number of the MERC that it
|
||||||
|
rendered obsolete; the older MERC has a ``Superseded-By`` header pointing to
|
||||||
|
the newer MERC.
|
||||||
|
``Resolution`` (optional)
|
||||||
|
For MERCs that have been decided upon, this can be a link to the final
|
||||||
|
rationale for acceptance/rejection. It's also reasonable to simply update
|
||||||
|
the MERC with a "Resolution" section, in which case this header can be left
|
||||||
|
out.
|
||||||
|
|
||||||
|
Auxiliary Files
|
||||||
|
---------------
|
||||||
|
|
||||||
|
MERCs may include auxiliary files such as diagrams. Such files must be named
|
||||||
|
``XXXX-descriptive-title.ext``, where "XXXX" is the MERC number,
|
||||||
|
"descriptive-title" is a short slug indicating what the file contains, and
|
||||||
|
"ext" is replaced by the actual file extension (e.g. "png").
|
||||||
|
|
||||||
|
Reporting MERC Bugs, or Submitting MERC Updates
|
||||||
|
===============================================
|
||||||
|
|
||||||
|
How you report a bug, or submit a MERC update depends on several factors, such as
|
||||||
|
the maturity of the MERC, the preferences of the MERC author, and the nature of
|
||||||
|
your comments. For the early draft stages of the MERC, it's probably best to
|
||||||
|
send your comments and changes directly to the MERC author. For more mature, or
|
||||||
|
finished MERCs you can submit corrections as repository issues or merge requests
|
||||||
|
against the git repository.
|
||||||
|
|
||||||
|
When in doubt about where to send your changes, please check first with the MERC
|
||||||
|
author and/or a core developer.
|
||||||
|
|
||||||
|
MERC authors with git push privileges for the MERC repository can update the MERCs
|
||||||
|
themselves.
|
||||||
82
docs/mercs/0002-test-writing.rst
Normal file
82
docs/mercs/0002-test-writing.rst
Normal file
@@ -0,0 +1,82 @@
|
|||||||
|
====================
|
||||||
|
MERC 2: Test writing
|
||||||
|
====================
|
||||||
|
|
||||||
|
:MERC: 2
|
||||||
|
:Author: Michael Price
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Feature
|
||||||
|
:Created: 2018-02-22
|
||||||
|
:Last-Modified: 2018-04-01
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes a standard methodology for writing tests for Mayan EDMS.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
Having a standard methodology for writing tests has the following advantages:
|
||||||
|
|
||||||
|
1. Scaffolding can be reduced by providing the most frequently used
|
||||||
|
paradigms as methods or helper functions.
|
||||||
|
2. Reduce the probabilities of errors slipping through poorly written tests.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
1. Tests must test each view in at least two ways:
|
||||||
|
|
||||||
|
A. Object creations views must be tested with and without permissions.
|
||||||
|
B. Object detail, list and delete views must be tested with and without
|
||||||
|
object access.
|
||||||
|
|
||||||
|
2. Tests must assert the status code of the response even
|
||||||
|
when the expected status is HTTP 200.
|
||||||
|
3. The actual request performed must be enclosed in a private methods
|
||||||
|
so that the fail and pass tests use the same HTTP request.
|
||||||
|
4. Test must verify that changes happened and didn't happened in the
|
||||||
|
database regardless of the return code. Even is an edit view returns
|
||||||
|
and error 4XX (404-Not found, 403-Forbidden, etc), the test must
|
||||||
|
ensure that the data was not indeed modified.
|
||||||
|
5. All tests must use the test user created by the BaseAPITestCase and not
|
||||||
|
an super user unless absolutely required by the test.
|
||||||
|
6. Each test must test just one thing.
|
||||||
|
7. If a test object needs to be created before the execution of a request
|
||||||
|
this object must be created by a private method.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def _request_tag_create(self):
|
||||||
|
return self.post(
|
||||||
|
viewname='rest_api:tag-list', data={
|
||||||
|
'label': TEST_TAG_LABEL, 'color': TEST_TAG_COLOR
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_tag_create_view_no_permission(self):
|
||||||
|
response = self._request_tag_create()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
|
||||||
|
self.assertEqual(Tag.objects.count(), 0)
|
||||||
|
|
||||||
|
def test_tag_create_view_with_permission(self):
|
||||||
|
self.grant_permission(permission=permission_tag_create)
|
||||||
|
response = self._request_tag_create()
|
||||||
|
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
|
||||||
|
|
||||||
|
tag = Tag.objects.first()
|
||||||
|
self.assertEqual(response.data['id'], tag.pk)
|
||||||
|
self.assertEqual(response.data['label'], TEST_TAG_LABEL)
|
||||||
|
self.assertEqual(response.data['color'], TEST_TAG_COLOR)
|
||||||
|
|
||||||
|
self.assertEqual(Tag.objects.count(), 1)
|
||||||
|
self.assertEqual(tag.label, TEST_TAG_LABEL)
|
||||||
|
self.assertEqual(tag.color, TEST_TAG_COLOR)
|
||||||
74
docs/mercs/0003-using-javascript-libraries.rst
Normal file
74
docs/mercs/0003-using-javascript-libraries.rst
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
==================================
|
||||||
|
MERC 3: Using JavaScript libraries
|
||||||
|
==================================
|
||||||
|
|
||||||
|
:MERC: 3
|
||||||
|
:Author: Eric Riggs
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Feature
|
||||||
|
:Created: 2018-03-08
|
||||||
|
:Last-Modified: 2018-06-04
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes a standard way to use JavaScript libraries.
|
||||||
|
|
||||||
|
Rationale
|
||||||
|
=========
|
||||||
|
|
||||||
|
Mayan EDMS uses several JavaScript libraries for user interface features.
|
||||||
|
Currently, the libraries are not installed using any JavaScript package
|
||||||
|
manager but copied uncompressed. Installing the libraries in this manner
|
||||||
|
carries some disadvantages.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
The inclusion of the libraries in source form is required by many licenses
|
||||||
|
if the library is not installed by a package manager in distributable form.
|
||||||
|
There are several disadvantages with the current approach:
|
||||||
|
|
||||||
|
1. Having the library in source form means that the entire weight of the
|
||||||
|
library's size carries over the overall size of the Mayan EDMS distribution files.
|
||||||
|
The justification for not doing this is the same as with the Python libraries
|
||||||
|
which are not copied with the code but downloaded upon installation.
|
||||||
|
2. Upgrading the libraries means manually examining the version of the
|
||||||
|
installed in the project and manually searching, downloading, compressing
|
||||||
|
and adding the files to the repository.
|
||||||
|
3. The source form of the libraries includes normal and minified versions
|
||||||
|
of the code and the accompanying CSS files. There is no define preference
|
||||||
|
and through the project both versions of the libraries are loaded
|
||||||
|
interchangeably. Using a packager manager the minified version would be
|
||||||
|
used of a pipeline to minify the installed libraries should be added.
|
||||||
|
|
||||||
|
Backwards Compatibility
|
||||||
|
=======================
|
||||||
|
|
||||||
|
There are no backwards compatibility issues with this proposal.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
Changes needed:
|
||||||
|
|
||||||
|
1. Python based JavaScript package manager. Alternatively a Python wrapper
|
||||||
|
for a JavaScript package manager could be used.
|
||||||
|
2. Package manifest for the JavaScript libraries used.
|
||||||
|
3. Installation pipeline to install the JavaScript libraries during the
|
||||||
|
installation and setup of the project.
|
||||||
|
|
||||||
|
References:
|
||||||
|
|
||||||
|
- https://github.com/JDeuce/powser
|
||||||
|
- https://github.com/javrasya/version-manager
|
||||||
|
- https://github.com/inveniosoftware-attic/setuptools-bower
|
||||||
|
- https://pypi.python.org/pypi/django-bower-cache/0.5.0
|
||||||
|
- http://django-pipeline.readthedocs.io/en/latest/index.html
|
||||||
|
- https://github.com/nvbn/django-bower
|
||||||
46
docs/mercs/0004-support-forum.rst
Normal file
46
docs/mercs/0004-support-forum.rst
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
=====================
|
||||||
|
MERC 4: Support forum
|
||||||
|
=====================
|
||||||
|
|
||||||
|
:MERC: 4
|
||||||
|
:Author: Michael Price
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Process
|
||||||
|
:Created: 2018-02-27
|
||||||
|
:Last-Modified: 2018-09-04
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes the move of the official community meeting place
|
||||||
|
from Google Group to a self hosted forum platform.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
Google Groups is not a proper forum platform and as such is lacking many
|
||||||
|
features that would increase participation. Google Groups has not had any
|
||||||
|
significant update in years and the age of the platform is visible. There
|
||||||
|
are no official mobile apps for Google Groups, no responsible template
|
||||||
|
is not provided. There are not integration options. These factors
|
||||||
|
contribute to the problems of knowledge dilution and one time
|
||||||
|
participation being experienced in the Mayan EDMS community.
|
||||||
|
|
||||||
|
Other concerns for moving the community to a self hosted forum solution
|
||||||
|
are that Google Groups presents a single point of failure by relying on
|
||||||
|
a free product hosted by a commercial company with no continuation plan
|
||||||
|
for the product. Google Groups doesn't provide archiving features and
|
||||||
|
the current archive solution relies on other third party services, one
|
||||||
|
of which (GMANE) has stopped working. Recent user privacy and censorship
|
||||||
|
issues regarding Google, reinforce the need for a self hosted solution.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
Platform chosen was phpBB. Factors were: written in PHP, ease of installation,
|
||||||
|
compatible with several database managers, mature, extensive development history.
|
||||||
149
docs/mercs/0005-explicit-arguments.rst
Normal file
149
docs/mercs/0005-explicit-arguments.rst
Normal file
@@ -0,0 +1,149 @@
|
|||||||
|
==========================
|
||||||
|
MERC 5: Explicit arguments
|
||||||
|
==========================
|
||||||
|
|
||||||
|
:MERC: 5
|
||||||
|
:Author: Roberto Rosario
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Feature
|
||||||
|
:Created: 2018-12-30
|
||||||
|
:Last-Modified: 2018-12-31
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes the adoption of a new methodology when performing calls.
|
||||||
|
It seeks to reduce the use of positional arguments in favor of keyword
|
||||||
|
arguments in as many places as possible.
|
||||||
|
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
As the project grows, legibility of code becomes more important. Keyword
|
||||||
|
argument help document the use of services, clases and functions. Refactors
|
||||||
|
that affect the interface of services are also easier to find and update and
|
||||||
|
fix. Positional argument can cause a call to continue working as long as the
|
||||||
|
datatype of the argument remains the same. Usage of keyword arguments will
|
||||||
|
automatically raise and error that will prevent such situations. Keyword
|
||||||
|
argument further eliminate the relevance of position or the arguments, and
|
||||||
|
the arguments can be sorted alphabetically for easier visual scanning or by
|
||||||
|
semantic significance improving code readability.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
Adoption of this MERC will require an audit of existing calls and the use
|
||||||
|
of the method proposed for new calls. Every call regardless of the type or
|
||||||
|
origin of the source callable will name each argument used. By type it is
|
||||||
|
meant: classes, functions, methods. Origin means: local from the project,
|
||||||
|
from the framework, third party libraries or the standard library.
|
||||||
|
|
||||||
|
|
||||||
|
Backwards Compatibility
|
||||||
|
=======================
|
||||||
|
|
||||||
|
No backwards compatibility issues are expected. New errors arising from the use
|
||||||
|
if keyword arguments could be interpreted as existing latent issues that
|
||||||
|
have not been uncovered.
|
||||||
|
|
||||||
|
|
||||||
|
Reference Implementation
|
||||||
|
========================
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
Before:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from mayan.apps.common.classes import Template
|
||||||
|
|
||||||
|
Template(
|
||||||
|
'menu_main', 'appearance/menu_main.html'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
After:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from mayan.apps.common.classes import Template
|
||||||
|
|
||||||
|
Template(
|
||||||
|
name='menu_main', template_name='appearance/menu_main.html'
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
When calls use a mixture or positional and keyword arguments, the keywords
|
||||||
|
arguments can only be found after the positional arguments. Complete use
|
||||||
|
of keyword arguments allow the reposition of arguments for semantic
|
||||||
|
purposes.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
Before:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
from .views import AboutView, HomeView, RootView
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(r'^$', RootView.as_view(), name='root'),
|
||||||
|
url(r'^home/$', HomeView.as_view(), name='home'),
|
||||||
|
url(r'^about/$', AboutView.as_view(), name='about_view'),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
After:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
from django.conf.urls import url
|
||||||
|
|
||||||
|
from .views import AboutView, HomeView, RootView
|
||||||
|
|
||||||
|
urlpatterns = [
|
||||||
|
url(regex=r'^$', name='root', view=RootView.as_view()),
|
||||||
|
url(regex=r'^home/$', name='home', view=HomeView.as_view()),
|
||||||
|
url(regex=r'^about/$', name='about_view', view=AboutView.as_view()),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
Keyword arguments should also be used for callables that pass those to others
|
||||||
|
down the line like Django's ``reverse`` function. Any change to the name of
|
||||||
|
the ``pk`` URL parameter will raise an exception in this code alerting to
|
||||||
|
any posible incompatible use.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def get_absolute_url(self):
|
||||||
|
return reverse(
|
||||||
|
viewname='documents:document_preview', kwargs={'pk': self.pk}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
This becomes even more important when multiple URL parameters are used. Since
|
||||||
|
the API documentation is auto generated from the code itself, it would make
|
||||||
|
sense to rename the first URL parameter from ``pk`` to ``document_pk``. Such
|
||||||
|
change will cause all address to view resolutions to break forcing their
|
||||||
|
update and allowing all consumers' interface usage to remain synchonized to the
|
||||||
|
callable's interface.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
url(
|
||||||
|
regex=r'^documents/(?P<pk>[0-9]+)/versions/(?P<document_version_pk>[0-9]+)/pages/(?P<document_page_pk>[0-9]+)/image/$',
|
||||||
|
name='documentpage-image', view=APIDocumentPageImageView.as_view()
|
||||||
|
),
|
||||||
81
docs/mercs/0006-lower-information-disclose.rst
Normal file
81
docs/mercs/0006-lower-information-disclose.rst
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
==================================
|
||||||
|
MERC 6: Lower information disclose
|
||||||
|
==================================
|
||||||
|
|
||||||
|
:MERC: 6
|
||||||
|
:Author: Michael Price
|
||||||
|
:Status: Accepted
|
||||||
|
:Type: Feature
|
||||||
|
:Created: 2018-12-30
|
||||||
|
:Last-Modified: 2018-12-31
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes the use of errors that don't disclose the existance of a
|
||||||
|
resource in the event that the requester doesn't have the required credentials.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
When an user tries to perform an action like opening a view to a document for
|
||||||
|
which the required permission is missing, a permission required or access
|
||||||
|
denied error is presented. This is semantically correct, but from the stand
|
||||||
|
point of security it is still failing because it is letting the user know
|
||||||
|
that such document exists in the first place. This MERC proposes changing the
|
||||||
|
error message for existing resource to one that doesn't divulge any information
|
||||||
|
to unauthorized parties, like "Not Found".
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
Out of the 4 basic CRUD operations, Read, Update and Delete should return an
|
||||||
|
HTTP 404 error instead of an HTTP 403 error. Only the Create operation will
|
||||||
|
continue returning the current HTTP 403 error, unless it is creating a
|
||||||
|
new resource that is related to an existing resource.
|
||||||
|
|
||||||
|
Since most view use the internal custom CRUD classes making a change to the
|
||||||
|
``ObjectPermissionCheckMixin`` class to raise an HTTP 404 on object access
|
||||||
|
failure will fulfill the proposal of this MERC.
|
||||||
|
|
||||||
|
Adding the ``object_permission_raise_404`` class attribute and setting it
|
||||||
|
to default to False will allow fulfullin the goal of this MERC while
|
||||||
|
keeping the existing functionality intact.
|
||||||
|
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
class ObjectPermissionCheckMixin(object):
|
||||||
|
"""
|
||||||
|
If object_permission_raise_404 is True an HTTP 404 error will be raised
|
||||||
|
instead of the normal 403.
|
||||||
|
"""
|
||||||
|
object_permission = None
|
||||||
|
object_permission_raise_404 = False
|
||||||
|
|
||||||
|
def get_permission_object(self):
|
||||||
|
return self.get_object()
|
||||||
|
|
||||||
|
def dispatch(self, request, *args, **kwargs):
|
||||||
|
if self.object_permission:
|
||||||
|
try:
|
||||||
|
AccessControlList.objects.check_access(
|
||||||
|
permissions=self.object_permission, user=request.user,
|
||||||
|
obj=self.get_permission_object(),
|
||||||
|
related=getattr(self, 'object_permission_related', None)
|
||||||
|
)
|
||||||
|
except PermissionDenied:
|
||||||
|
if self.object_permission_raise_404:
|
||||||
|
raise Http404
|
||||||
|
else:
|
||||||
|
raise
|
||||||
|
|
||||||
|
return super(
|
||||||
|
ObjectPermissionCheckMixin, self
|
||||||
|
).dispatch(request, *args, **kwargs)
|
||||||
55
docs/mercs/index.rst
Normal file
55
docs/mercs/index.rst
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
*****
|
||||||
|
MECRs
|
||||||
|
*****
|
||||||
|
|
||||||
|
Mayan EDMS Request For Comment documents index.
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 2
|
||||||
|
:local:
|
||||||
|
|
||||||
|
Status
|
||||||
|
======
|
||||||
|
|
||||||
|
Accepted
|
||||||
|
--------
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
../mercs/0001-merc-process
|
||||||
|
../mercs/0002-test-writing
|
||||||
|
../mercs/0003-using-javascript-libraries
|
||||||
|
../mercs/0005-explicit-arguments
|
||||||
|
../mercs/0006-lower-information-disclose
|
||||||
|
|
||||||
|
Draft
|
||||||
|
-----
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
../mercs/merging-roles-and-groups
|
||||||
|
|
||||||
|
|
||||||
|
Type
|
||||||
|
====
|
||||||
|
|
||||||
|
Process
|
||||||
|
-------
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
../mercs/0001-merc-process
|
||||||
|
../mercs/0004-support-forum
|
||||||
|
|
||||||
|
|
||||||
|
Feature
|
||||||
|
-------
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 1
|
||||||
|
|
||||||
|
../mercs/0002-test-writing
|
||||||
|
../mercs/0003-using-javascript-libraries
|
||||||
|
../mercs/0005-explicit-arguments
|
||||||
|
../mercs/0006-lower-information-disclose
|
||||||
67
docs/mercs/merging-roles-and-groups.rst
Normal file
67
docs/mercs/merging-roles-and-groups.rst
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
===============================
|
||||||
|
MERC XX: Unify Roles and Groups
|
||||||
|
===============================
|
||||||
|
|
||||||
|
:MERC: XX
|
||||||
|
:Author: Michael Price
|
||||||
|
:Status: Draft
|
||||||
|
:Type: Feature
|
||||||
|
:Created: 2018-02-27
|
||||||
|
:Last-Modified: 2018-02-27
|
||||||
|
|
||||||
|
.. contents:: Table of Contents
|
||||||
|
:depth: 3
|
||||||
|
:local:
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
========
|
||||||
|
|
||||||
|
This MERC proposes the merging of the Roles and Group models.
|
||||||
|
|
||||||
|
Rationale
|
||||||
|
=========
|
||||||
|
|
||||||
|
Mayan EDMS uses Groups as units of users that are meant to mirror an
|
||||||
|
organization's actual user hierarchy. Roles are used as permission units.
|
||||||
|
|
||||||
|
Separation of concerns is a concept Mayan EDMS executes very successfully
|
||||||
|
but when it comes to the Roles/Groups relationship that execution causes
|
||||||
|
overheads without providing advantages in the day to day operations.
|
||||||
|
|
||||||
|
In reality there is almost a 1 to 1 correlation between Roles and Groups.
|
||||||
|
Other permissions systems already use Groups as permission units without
|
||||||
|
disadvantages. An example of this is LDAP and its commercial counterpart
|
||||||
|
Active Directory.
|
||||||
|
|
||||||
|
Motivation
|
||||||
|
==========
|
||||||
|
|
||||||
|
Merging the Role and Group model will reduce some complexity when initially
|
||||||
|
setting up Mayan EDMS. The merge allows removing a Mayan EDMS model in
|
||||||
|
favor of using a native Django model for the same task.
|
||||||
|
|
||||||
|
Merging the Role and Group models will also provide a speed boost in every
|
||||||
|
permission check and queryset filtering. These checks are nested in nature.
|
||||||
|
Since the access checks are performed for every view and for every link
|
||||||
|
in the view the performance gain should be substantial.
|
||||||
|
|
||||||
|
Backwards Compatibility
|
||||||
|
=======================
|
||||||
|
|
||||||
|
To avoid loss of role configuration a data migration will be needed to
|
||||||
|
convert existing roles to groups.
|
||||||
|
|
||||||
|
|
||||||
|
Specification
|
||||||
|
=============
|
||||||
|
|
||||||
|
Changes needed:
|
||||||
|
|
||||||
|
1. Data migration to convert existing roles to groups.
|
||||||
|
2. Prepend or append an identifier to the migrated roles.
|
||||||
|
3. Intermediate model to map permissions to a group. This will substitute
|
||||||
|
the Role model's permissions many to many field.
|
||||||
|
4. Update the ``AccessControlList`` models roles field to point to the group
|
||||||
|
models.
|
||||||
|
5. Update the role checks in the ``check_access`` and ``restrict_queryset``
|
||||||
|
``AccessControlList`` model manager methods.
|
||||||
@@ -16,36 +16,36 @@ Version 0.10
|
|||||||
* LibreOffice (https://www.libreoffice.org/)
|
* LibreOffice (https://www.libreoffice.org/)
|
||||||
* unoconv [version 0.5] (https://github.com/dagwieers/unoconv)
|
* unoconv [version 0.5] (https://github.com/dagwieers/unoconv)
|
||||||
|
|
||||||
* The new office documents converter won't convert files with the extension
|
* The new office documents converter won't convert files with the extension
|
||||||
.docx because these files are recognized as zip files instead. This
|
.docx because these files are recognized as zip files instead. This
|
||||||
is an issue of the libmagic library.
|
is an issue of the libmagic library.
|
||||||
|
|
||||||
* New configuration option added ``CONVERTER_UNOCONV_USE_PIPE`` that controls
|
* New configuration option added ``CONVERTER_UNOCONV_USE_PIPE`` that controls
|
||||||
how unoconv handles the communication with LibreOffice. The default of
|
how unoconv handles the communication with LibreOffice. The default of
|
||||||
``True`` causes unoconv to use **pipes**, this approach is slower than using
|
``True`` causes unoconv to use **pipes**, this approach is slower than using
|
||||||
**TCP/IP** ports but it is more stable.
|
**TCP/IP** ports but it is more stable.
|
||||||
|
|
||||||
* Initial `REST` `API` that exposes documents properties and one method, this
|
* Initial `REST` `API` that exposes documents properties and one method, this
|
||||||
new `API` is used by the new smart document widget and requires the
|
new `API` is used by the new smart document widget and requires the
|
||||||
package ``djangorestframework``, users must issue a::
|
package ``djangorestframework``, users must issue a::
|
||||||
|
|
||||||
$ pip install -r requirements/production.txt
|
$ pip install -r requirements/production.txt
|
||||||
|
|
||||||
to install this new requirement.
|
to install this new requirement.
|
||||||
|
|
||||||
* MIME type detection and caching performance updates.
|
* MIME type detection and caching performance updates.
|
||||||
* Updated the included version of ``jQuery`` to 1.7
|
* Updated the included version of ``jQuery`` to 1.7
|
||||||
* Updated the included version of ``JqueryAsynchImageLoader`` to 0.9.7
|
* Updated the included version of ``JqueryAsynchImageLoader`` to 0.9.7
|
||||||
* Document image serving response now specifies a MIME type for increased
|
* Document image serving response now specifies a MIME type for increased
|
||||||
browser compatibility.
|
browser compatibility.
|
||||||
* Small change in the scheduler that increases stability.
|
* Small change in the scheduler that increases stability.
|
||||||
* Russian translation updates Sergey Glita
|
* Russian translation updates Sergey Glita
|
||||||
* Improved and generalized the OCR queue locking mechanism, this should
|
* Improved and generalized the OCR queue locking mechanism, this should
|
||||||
eliminate any posibility of race conditions between Mayan EDMS OCR nodes.
|
eliminate any possibility of race conditions between Mayan EDMS OCR nodes.
|
||||||
* Added support for signals to the OCR queue, this results in instant OCR
|
* Added support for signals to the OCR queue, this results in instant OCR
|
||||||
processing upon submittal of a document to the OCR queue, this works in
|
processing upon submittal of a document to the OCR queue, this works in
|
||||||
addition to the current polling processing which eliminates the
|
addition to the current polling processing which eliminates the
|
||||||
posibility of stale documents in the OCR queue.
|
possibility of stale documents in the OCR queue.
|
||||||
* Added multiple document OCR submit link
|
* Added multiple document OCR submit link
|
||||||
* Re enabled tesseract language specific OCR processing and added a one
|
* Re enabled Tesseract language specific OCR processing and added a one
|
||||||
(1) time language neutral retry for failed language specific OCR
|
(1) time language neutral retry for failed language specific OCR
|
||||||
|
|||||||
@@ -1,13 +1,12 @@
|
|||||||
================================
|
Version 0.12.1
|
||||||
Mayan EDMS v0.12.1 release notes
|
==============
|
||||||
================================
|
|
||||||
|
|
||||||
*May 2012*
|
*May 2012*
|
||||||
|
|
||||||
This is the first maintenance release of the 0.12 series.
|
This is the first maintenance release of the 0.12 series.
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
--------
|
||||||
|
|
||||||
While bug fixes and minor feature were the focus for this release, some
|
While bug fixes and minor feature were the focus for this release, some
|
||||||
bigger changes were included because of their importance. The parsing of
|
bigger changes were included because of their importance. The parsing of
|
||||||
@@ -19,11 +18,12 @@ environments where users don't have the ability to install OS level
|
|||||||
binaries.
|
binaries.
|
||||||
|
|
||||||
|
|
||||||
What's new in Mayan EDMS v0.12.1
|
Changes
|
||||||
================================
|
-------
|
||||||
|
|
||||||
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.
|
||||||
@@ -33,54 +33,66 @@ Feel free to submit your configuration settings and files for different database
|
|||||||
webserver or Linux distribution. More configurations will be added to
|
webserver or Linux distribution. More configurations will be added to
|
||||||
the fabfile as more are tested.
|
the fabfile as more are tested.
|
||||||
|
|
||||||
|
|
||||||
Documentation update
|
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
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
The Italian translation has been synchronized with the source files at
|
The Italian translation has been synchronized with the source files at
|
||||||
Transifex and finished to %100 completion.
|
Transifex and finished to %100 completion.
|
||||||
|
|
||||||
|
|
||||||
Usability improvements
|
Usability improvements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The index instance view now feature the same multi document action
|
The index instance view now feature the same multi document action
|
||||||
buttons (Submit to OCR, delete, download, etc) as the mail and recent
|
buttons (Submit to OCR, delete, download, etc) as the mail and recent
|
||||||
document views.
|
document views.
|
||||||
|
|
||||||
|
|
||||||
Better office document conversion
|
Better office document conversion
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
A new method of converting office documents has been implemented, this
|
A new method of converting office documents has been implemented, this
|
||||||
new method doesn't require the use of the command line utility ``UNOCONV``.
|
new method doesn't require the use of the command line utility ``UNOCONV``.
|
||||||
If this new method proves to work better than previous solutions the use
|
If this new method proves to work better than previous solutions the use
|
||||||
of ``UNOCONV`` may be deprecated in the future. The conversion method
|
of ``UNOCONV`` may be deprecated in the future. The conversion method
|
||||||
adds just one new configuration option: `CONVERTER_LIBREOFFICE_PATH`
|
adds just one new configuration option: ``CONVERTER_LIBREOFFICE_PATH``
|
||||||
which defaults to '/usr/bin/libreoffice'.
|
which defaults to ``/usr/bin/libreoffice``.
|
||||||
|
|
||||||
|
|
||||||
Better PDF text parsing
|
Better PDF text parsing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Brian E. submitted a patch to use the Poppler package pdftotext utility to
|
Brian E. submitted a patch to use the Poppler package pdftotext utility to
|
||||||
extract text from PDF files. This is now the default method Mayan EDMS
|
extract text from PDF files. This is now the default method Mayan EDMS
|
||||||
will execute to try to extract text from a PDF and failing that will
|
will execute to try to extract text from a PDF and failing that will
|
||||||
fallback to the previous method. This change add a new configuration
|
fallback to the previous method. This change add a new configuration
|
||||||
option: `OCR_PDFTOTEXT_PATH` to specify the location of the ``pdftotext``
|
option: ``OCR_PDFTOTEXT_PATH`` to specify the location of the ``pdftotext``
|
||||||
executable, it defaults to '/usr/bin/pdftotext'. Be sure to install the
|
executable, it defaults to ``/usr/bin/pdftotext``. Be sure to install the
|
||||||
``poppler-utils`` os package to take advantage of this new parser.
|
``poppler-utils`` os package to take advantage of this new parser.
|
||||||
|
|
||||||
|
|
||||||
Changed defaults
|
Changed defaults
|
||||||
~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The OCR queue is now active by default when first created during the
|
The OCR queue is now active by default when first created during the
|
||||||
``syncdb`` phase and the `OCR_AUTOMATIC_OCR` option now defaults
|
``syncdb`` phase and the ``OCR_AUTOMATIC_OCR`` option now defaults
|
||||||
to ``True``. These two changes are made to reduce the steps required for
|
to ``True``. These two changes are made to reduce the steps required for
|
||||||
new users to start enjoying the benefits of automatic text extraction from
|
new users to start enjoying the benefits of automatic text extraction from
|
||||||
uploaded documents without having to read the documentation and have a more
|
uploaded documents without having to read the documentation and have a more
|
||||||
functional default install.
|
functional default install.
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
---------------------------------
|
||||||
|
|
||||||
Start off by adding the new requirements::
|
Start off by adding the new requirements::
|
||||||
|
|
||||||
@@ -104,13 +116,17 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed
|
Bugs fixed
|
||||||
==========
|
----------
|
||||||
* Issue #25 "Office document conversion error"
|
:github-issue:`25` "Office document conversion error"
|
||||||
|
|
||||||
|
|
||||||
|
Removals
|
||||||
|
--------
|
||||||
|
|
||||||
Stuff removed
|
|
||||||
=============
|
|
||||||
* None
|
* None
|
||||||
|
|||||||
@@ -1,14 +1,12 @@
|
|||||||
================================
|
Version 0.12.2
|
||||||
Mayan EDMS v0.12.2 release notes
|
==============
|
||||||
================================
|
|
||||||
|
|
||||||
*June 2012*
|
*June 2012*
|
||||||
|
|
||||||
This is the second maintenance release of the 0.12 series.
|
This is the second maintenance release of the 0.12 series.
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
--------
|
||||||
|
|
||||||
|
|
||||||
As with the previous release bug fixes and minor feature were the focus
|
As with the previous release bug fixes and minor feature were the focus
|
||||||
for this release too. `issue #24`_ has been fixed and document
|
for this release too. `issue #24`_ has been fixed and document
|
||||||
@@ -19,24 +17,28 @@ the diagnosis of installation of runtime error a simple view showing the
|
|||||||
number of internal interval jobs being used by Mayan EDMS as well as a
|
number of internal interval jobs being used by Mayan EDMS as well as a
|
||||||
new app which shows a detail of the current installation enviroment were added.
|
new app which shows a detail of the current installation enviroment were added.
|
||||||
|
|
||||||
What's new in Mayan EDMS v0.12.2
|
|
||||||
================================
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
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
|
||||||
specified with the configuration option `COMMON_AUTO_ADMIN_USERNAME`
|
specified with the configuration option ``COMMON_AUTO_ADMIN_USERNAME``
|
||||||
and the password of this account by the option `COMMON_AUTO_ADMIN_PASSWORD`.
|
and the password of this account by the option ``COMMON_AUTO_ADMIN_PASSWORD``.
|
||||||
Previously the `COMMON_AUTO_ADMIN_PASSWORD` defaulted to 'admin' which
|
Previously the ``COMMON_AUTO_ADMIN_PASSWORD`` defaulted to 'admin' which
|
||||||
created an administrator account of username 'admin' with a password of
|
created an administrator account of username 'admin' with a password of
|
||||||
'admin'. The new default is to randomize an initial password and show this password
|
'admin'. The new default is to randomize an initial password and show this password
|
||||||
at the login screen until the administrator password is changed.
|
at the login screen until the administrator password is changed.
|
||||||
|
|
||||||
|
|
||||||
Document check outs
|
Document check outs
|
||||||
~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
As per the feature request filed under `issue #26`_, a new document
|
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
|
||||||
@@ -47,8 +49,10 @@ 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
|
||||||
``Forcefully check in documents`` permission respectively.
|
``Forcefully check in documents`` permission respectively.
|
||||||
|
|
||||||
|
|
||||||
Installation environment app
|
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
|
||||||
@@ -56,19 +60,25 @@ 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
|
||||||
~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A German language translation has been added thanks to Tetja Rediske
|
A German language translation has been added thanks to Tetja Rediske
|
||||||
and Tilmann Sittig.
|
and Tilmann Sittig.
|
||||||
|
|
||||||
|
|
||||||
Statistics gathering
|
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
|
||||||
@@ -76,7 +86,7 @@ anonymous statistics gathering functionality.
|
|||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
---------------------------------
|
||||||
|
|
||||||
Start off by adding the new requirements::
|
Start off by adding the new requirements::
|
||||||
|
|
||||||
@@ -97,19 +107,22 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed
|
Bugs fixed
|
||||||
==========
|
----------
|
||||||
* `issue #24`_ "Duplicated filename extension when uploading a new version of a document"
|
|
||||||
* `issue #26`_ "checkout feature request"
|
:github-issue:`24 "Duplicated filename extension when uploading a new version of a document"
|
||||||
|
:github-issue:`26` "checkout feature request"
|
||||||
|
|
||||||
|
Removals
|
||||||
|
--------
|
||||||
|
|
||||||
Stuff removed
|
|
||||||
=============
|
|
||||||
* Feedback app
|
* Feedback app
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.. _issue #24: https://github.com/rosarior/mayan/issues/24
|
.. _issue #24: https://github.com/rosarior/mayan/issues/24
|
||||||
.. _issue #26: https://github.com/rosarior/mayan/issues/26
|
.. _issue #26: https://github.com/rosarior/mayan/issues/26
|
||||||
|
|||||||
@@ -1,15 +1,12 @@
|
|||||||
==============================
|
Version 0.12
|
||||||
Mayan EDMS v0.12 release notes
|
============
|
||||||
==============================
|
|
||||||
|
|
||||||
*February 2012*
|
*February 2012*
|
||||||
|
|
||||||
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
|
||||||
@@ -26,7 +23,7 @@ releases:
|
|||||||
* All app permissions have been move to a separate permissions.py file
|
* All app permissions have been move to a separate permissions.py file
|
||||||
per app
|
per app
|
||||||
* Complete permission system refactor.
|
* Complete permission system refactor.
|
||||||
* Document signining code move to it's own app
|
* Document signing code moved to it's own app
|
||||||
* Initial unit tests
|
* Initial unit tests
|
||||||
* A lot of logging used throught the entire project.
|
* A lot of logging used throught the entire project.
|
||||||
* Much functionality moved to model managers.
|
* Much functionality moved to model managers.
|
||||||
@@ -38,16 +35,17 @@ releases:
|
|||||||
* Removal of remarked code.
|
* Removal of remarked code.
|
||||||
|
|
||||||
|
|
||||||
What's new in Mayan EDMS v0.12
|
Changes
|
||||||
==============================
|
-------
|
||||||
|
|
||||||
ACL support
|
ACL support
|
||||||
~~~~~~~~~~~
|
^^^^^^^^^^^
|
||||||
|
|
||||||
* Object level access control is now in place for documents, folders,
|
* Object level access control is now in place for documents, folders,
|
||||||
tags and smart links. What this means is that administrators can now
|
tags and smart links. What this means is that administrators can now
|
||||||
grant permissions to users, groups or roles on for specific objects.
|
grant permissions to users, groups or roles on for specific objects.
|
||||||
A more in-depth explanation of how this new ACL system can be found in
|
A more in-depth explanation of how this new ACL system can be found in
|
||||||
the :doc:`3 tier access control <../topics/permissions>` section of the
|
the :doc:`3 tier access control <../chapters/permissions>` section of the
|
||||||
permissions chapter.
|
permissions chapter.
|
||||||
|
|
||||||
* Default class ACL support. Administrators can setup the access control
|
* Default class ACL support. Administrators can setup the access control
|
||||||
@@ -57,57 +55,72 @@ ACL support
|
|||||||
allow the access control list that the actual creator of an object will
|
allow the access control list that the actual creator of an object will
|
||||||
inherit.
|
inherit.
|
||||||
|
|
||||||
|
|
||||||
Anonymous user support
|
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
|
||||||
The second part of this support is the ability to assign permissions
|
installation. The second part of this support is the ability to assign
|
||||||
or individual access to objects to anonymous users.
|
permissions or individual access to objects to anonymous users.
|
||||||
|
|
||||||
|
|
||||||
Translations
|
Translations
|
||||||
~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
A new Italian translation is available, provided by SeeOpen.IT
|
A new Italian translation is available, provided by SeeOpen.IT
|
||||||
(www.seeopen.it, info@seeopen.it) as well as complete Russian translation
|
(www.seeopen.it, info@seeopen.it) as well as complete Russian translation
|
||||||
update by Sergei Glita. Included in this release also the initial translation
|
update by Sergei Glita. Included in this release also the initial translation
|
||||||
to Polish by mic.
|
to Polish by mic.
|
||||||
|
|
||||||
|
|
||||||
Usability improvements
|
Usability improvements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
* Detached signature behavior improved, uploading a new detached signature
|
* Detached signature behavior improved, uploading a new detached signature
|
||||||
erases the previous one.
|
erases the previous one.
|
||||||
* Usability improvement in the role member's add/removal form, by using
|
* Usability improvement in the role member's add/removal form, by using
|
||||||
HTML's option groups tag property
|
HTML's option groups tag property
|
||||||
|
|
||||||
|
|
||||||
2 Step download process
|
2 Step download process
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The code for downloading single and multiple document and document versions
|
The code for downloading single and multiple document and document versions
|
||||||
has been merged with compression support also added. This allows for the
|
has been merged with compression support also added. This allows for the
|
||||||
download of documents in their original format or compressed and well as
|
download of documents in their original format or compressed and well as
|
||||||
the download of several documents in a single compressed file.
|
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
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A management command has been added to help upload a large number of documents
|
A management command has been added to help upload a large number of documents
|
||||||
from a compressed file. For information about this new feature check the Initial data loading chapter.
|
from a compressed file. For information about this new feature check the
|
||||||
|
Initial data loading chapter.
|
||||||
|
|
||||||
|
|
||||||
Out of process user import
|
Out of process user import
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A management command has been added to import a large number users
|
A management command has been added to import a large number users
|
||||||
from a CSV file. More information about this new feature can also be found
|
from a CSV file. More information about this new feature can also be found
|
||||||
in the Initial data loading chapter.
|
in the Initial data loading chapter.
|
||||||
|
|
||||||
|
|
||||||
Refactored document indexing
|
Refactored document indexing
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
:doc:`The document indexing <../topics/indexes>` functionality has been
|
|
||||||
|
:doc:`The document indexing <../chapters/indexes>` functionality has been
|
||||||
improved and moved from experimental
|
improved and moved from experimental
|
||||||
stage to beta stage. Index configuration menus are now available on the
|
stage to beta stage. Index configuration menus are now available on the
|
||||||
``Setup`` menu and allows administrators to create skeleton trees that will
|
``Setup`` menu and allows administrators to create skeleton trees that will
|
||||||
@@ -116,12 +129,14 @@ 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
|
||||||
mirrored on disk.
|
mirrored on disk.
|
||||||
|
|
||||||
|
|
||||||
Help shape Mayan EDMS's future
|
Help shape Mayan EDMS's future
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Included in this version is a small feedback application, found under the
|
Included in this version is a small feedback application, found under the
|
||||||
``About`` main menu, where users by just answering some questions can
|
``About`` main menu, where users by just answering some questions can
|
||||||
help determine the priority of the next planned features on the pipeline,
|
help determine the priority of the next planned features on the pipeline,
|
||||||
@@ -129,8 +144,10 @@ 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
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The staging file previews now show the filename for easier
|
The staging file previews now show the filename for easier
|
||||||
identification and speedier upload selection. The staging files previews
|
identification and speedier upload selection. The staging files previews
|
||||||
are now treated as a gallery which means that users can preview an entire
|
are now treated as a gallery which means that users can preview an entire
|
||||||
@@ -138,8 +155,23 @@ page of staging files without having to click and close each one
|
|||||||
individually.
|
individually.
|
||||||
|
|
||||||
|
|
||||||
|
Removals
|
||||||
|
--------
|
||||||
|
|
||||||
|
* Support for Celery and Sentry has been drop
|
||||||
|
for now.
|
||||||
|
* Removed the 'db_index' argument from Text fields definition and
|
||||||
|
migrations as it was causing error messages for MySQL users, thanks to
|
||||||
|
Sergei Glita for reporting this one.
|
||||||
|
* Configuration options removed:
|
||||||
|
|
||||||
|
* OCR_CACHE_URI
|
||||||
|
* DOCUMENT_INDEXING_FILESYSTEM_FILESERVING_PATH - Use the newest `DOCUMENT_INDEXING_FILESYSTEM_SERVING`
|
||||||
|
* DOCUMENT_INDEXING_FILESYSTEM_FILESERVING_ENABLE - Use the newest `DOCUMENT_INDEXING_FILESYSTEM_SERVING`
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
---------------------------------
|
||||||
|
|
||||||
Start off by adding the new requirements::
|
Start off by adding the new requirements::
|
||||||
|
|
||||||
@@ -201,31 +233,20 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
The permission system has been completely reworked so sadly this is a
|
The permission system has been completely reworked so sadly this is a
|
||||||
place where even data migration can't help and the permissions assigned
|
place where even data migration can't help and the permissions assigned
|
||||||
to roles will be lost during the upgrade to version 0.12. Users, groups
|
to roles will be lost during the upgrade to version 0.12. Users, groups
|
||||||
and roles will be preserved only permissions need to be assigned again,
|
and roles will be preserved only permissions need to be assigned again,
|
||||||
so write down your role permission setup before upgrading.
|
so write down your role permission setup before upgrading.
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed
|
Bugs fixed
|
||||||
==========
|
----------
|
||||||
* Issue #17, special thanks to Dave Herring for all the help including
|
|
||||||
access to a machine suffering with the issue, and to Sergei Glita for
|
* :github-issue:`17` special thanks to Dave Herring for all the help including
|
||||||
his research and eventual find of the core cause.
|
access to a machine suffering with the issue, and to Sergei Glita for
|
||||||
|
his research and eventual find of the core cause.
|
||||||
* Statistics fixes.
|
* Statistics fixes.
|
||||||
* Fixed get_image_cache_name regression in the OCR app.
|
* Fixed get_image_cache_name regression in the OCR app.
|
||||||
|
|
||||||
Stuff removed
|
|
||||||
=============
|
|
||||||
* Support for Celery and Sentry has been drop
|
|
||||||
for now.
|
|
||||||
* Removed the 'db_index' argument from Text fields definition and
|
|
||||||
migrations as it was causing error messages for MySQL users, thanks to
|
|
||||||
Sergei Glita for reporting this one.
|
|
||||||
* Configuration options removed:
|
|
||||||
|
|
||||||
* OCR_CACHE_URI
|
|
||||||
* DOCUMENT_INDEXING_FILESYSTEM_FILESERVING_PATH - Use the newest `DOCUMENT_INDEXING_FILESYSTEM_SERVING`
|
|
||||||
* DOCUMENT_INDEXING_FILESYSTEM_FILESERVING_ENABLE - Use the newest `DOCUMENT_INDEXING_FILESYSTEM_SERVING`
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,110 +1,132 @@
|
|||||||
================================
|
Version 0.13
|
||||||
Mayan EDMS v0.13 release notes
|
============
|
||||||
================================
|
|
||||||
|
|
||||||
*December 2012*
|
*December 2012*
|
||||||
|
|
||||||
Welcome to Mayan EDMS v0.13!
|
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
--------
|
||||||
|
|
||||||
Initially this version was meant as a the third maintenance release of
|
Initially this version was meant as a the third maintenance release of
|
||||||
the 0.12 series, but with the amount of changes and updates that were included
|
the 0.12 series, but with the amount of changes and updates that were included
|
||||||
it was obvious this was not just a bug fix version anymore hence the version
|
it was obvious this was not just a bug fix version anymore hence the version
|
||||||
jump to 0.13 instead of 0.12.3
|
jump to 0.13 instead of 0.12.3
|
||||||
|
|
||||||
|
Changes
|
||||||
What's new in Mayan EDMS v0.13
|
-------
|
||||||
================================
|
|
||||||
|
|
||||||
Django 1.3.5
|
Django 1.3.5
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
This release updates the required version of Django to 1.3.5 to take advantage
|
This release updates the required version of Django to 1.3.5 to take advantage
|
||||||
of the security fixes added to that version of the framework.
|
of the security fixes added to that version of the framework.
|
||||||
|
|
||||||
|
|
||||||
Bulk document tagging and untagging
|
Bulk document tagging and untagging
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
As requested by issue `issue #31`_ this feature has been implemented and enabled in this version.
|
|
||||||
Attaching or removing tags from a large number of documents is now much easier.
|
As requested by issue `issue #31`_ this feature has been implemented and
|
||||||
|
enabled in this version. 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
|
|
||||||
Mayan EDMS, a new feature has been added that allows users to register their
|
Based on requests made by the community for greater commercial support and
|
||||||
copies of Mayan EDMS and better help users with commercial support packages.
|
services for Mayan EDMS, a new feature has been added that allows users
|
||||||
Registration for non commercial users is voluntary and optional, and in no way
|
register their copies of Mayan EDMS and better help users with commercial
|
||||||
affects the functionality of Mayan EDMS. However even for non commercial users
|
support packages. Registration for non commercial users is voluntary and
|
||||||
registration offers the advantage of automatically branding the user's copy
|
optional, and in no way affects the functionality of Mayan EDMS. However
|
||||||
of Mayan EDMS with their name or the company name in the title area.
|
even for non commercial users 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.
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The translation for all the current languages were synchronized to the
|
The translation for all the current languages were synchronized to the
|
||||||
latest transifex project sources.
|
latest transifex project sources.
|
||||||
|
|
||||||
|
|
||||||
Model updates
|
Model updates
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
Several small fixes to the behavior of some model were added, namely that
|
Several small fixes to the behavior of some model were added, namely that
|
||||||
the names of some models should be unique. The document type name as well
|
the names of some models should be unique. The document type name as well
|
||||||
as the metadata set name were two models that were updated to behave this way.
|
as the metadata set name were two models that were updated to behave this way.
|
||||||
|
|
||||||
|
|
||||||
Navigation updates
|
Navigation updates
|
||||||
~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
There were some additions and changes to the navigation to make it more intuitive
|
There were some additions and changes to the navigation to make it more intuitive
|
||||||
or to add an alternate way to access the same information better. The bulk
|
or to add an alternate way to access the same information better. The bulk
|
||||||
attachment of tags was one of these. Previously users were added or removed from groups,
|
attachment of tags was one of these. Previously users were added or removed
|
||||||
now users can be assigned to groups without leaving the user view. The name of an
|
from groups, now users can be assigned to groups without leaving the user view.
|
||||||
existing metadata set can now be edited and what was previously called metadata set edit
|
The name of an existing metadata set can now be edited and what was previously
|
||||||
is now more aptly named metadata members which adds or removes metadata types into a
|
called metadata set edit is now more aptly named metadata members which adds
|
||||||
single organizational unit. An error that caused a duplicate menu link in the
|
or removes metadata types into a single organizational unit. An error that
|
||||||
document type filename view was also fixed.
|
caused a duplicate menu link in the document type filename view was also fixed.
|
||||||
|
|
||||||
|
|
||||||
Support for UNOCONV dropped
|
Support for UNOCONV dropped
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Support for converting office documents by calling LibreOffice via UNOCONV
|
|
||||||
|
Support for converting office documents by calling LibreOffice via ``UNOCONV``
|
||||||
has been disabled for a while ever since LibreOffice start including
|
has been disabled for a while ever since LibreOffice start including
|
||||||
document conversion support from the command line. This version completly
|
document conversion support from the command line. This version completly
|
||||||
removes any traces of code and configuration options related to UNOCONV.
|
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
|
|
||||||
the Raspberry Pi, several rounds or profiling and optimization were done.
|
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.
|
||||||
|
|
||||||
Some caching optimization were introduced to the permission model, resulting in
|
Some caching optimization were introduced to the permission model, resulting in
|
||||||
a speed increase of 33% in rendering time on views with heavy permission checking
|
a speed increase of 33% in rendering time on views with heavy permission checking
|
||||||
and a 18% query reduction on cache hits.
|
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
|
||||||
@@ -133,21 +155,24 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
* `issue #28`_ "Document indexing based on filesystem problem"
|
|
||||||
* `issue #29`_ Default ACL documentation
|
* :github-issue:`28` "Document indexing based on filesystem problem"
|
||||||
* `issue #30`_ "Ubuntu 12.0.4 LTS complaining about mising 'fabfile/templates/settings_local.py' (master branch)"
|
* :github-issue:`29` Default ACL documentation
|
||||||
* `issue #31`_ "Bulk add tags Feature request"
|
* :github-issue:`30` "Ubuntu 12.0.4 LTS complaining about mising 'fabfile/templates/settings_local.py' (master branch)"
|
||||||
* `issue #32`_ "Error run $python manage.py syncdb"
|
* :github-issue:`31` "Bulk add tags Feature request"
|
||||||
* `issue #33`_ "Fetches translations from Transifex. "
|
* :github-issue:`32` "Error run $python manage.py syncdb"
|
||||||
* `issue #34`_ "Initial syncdb fails because of import time database access"
|
* :github-issue:`33` "Fetches translations from Transifex. "
|
||||||
* `issue #35`_ "Fix first install syncdb on Postgres"
|
* :github-issue:`34` "Initial syncdb fails because of import time database access"
|
||||||
* `issue #37`_ "When 19 >= &document_type_id >= 10 in url, error page not found"
|
* :github-issue:`35` "Fix first install syncdb on Postgres"
|
||||||
* `issue #39`_ Feature request "Bulk move folders"
|
* :github-issue:`37` "When 19 >= &document_type_id >= 10 in url, error page not found"
|
||||||
|
* :github-issue:`39` * `issue #39`_ Feature request "Bulk move folders"
|
||||||
|
|
||||||
|
|
||||||
.. _issue #28: https://github.com/rosarior/mayan/issues/28
|
.. _issue #28: https://github.com/rosarior/mayan/issues/28
|
||||||
|
|||||||
@@ -1,13 +1,10 @@
|
|||||||
=============================
|
Version 1.0
|
||||||
Mayan EDMS v1.0 release notes
|
===========
|
||||||
=============================
|
|
||||||
|
|
||||||
*August 26, 2014*
|
*August 26, 2014*
|
||||||
|
|
||||||
Welcome to Mayan EDMS v1.0!
|
|
||||||
|
|
||||||
Overview
|
Overview
|
||||||
========
|
--------
|
||||||
After a year of low activity the focus of this release was to get the code
|
After a year of low activity the focus of this release was to get the code
|
||||||
updated to work with the most recent version of Django and the most recent
|
updated to work with the most recent version of Django and the most recent
|
||||||
version of the dependencies Mayan EDMS uses. The goal was to have a strong
|
version of the dependencies Mayan EDMS uses. The goal was to have a strong
|
||||||
@@ -16,25 +13,30 @@ fixes were the primary focus of this cycle. Because of this not much
|
|||||||
emphasis was placed on adding new features, or at least new features
|
emphasis was placed on adding new features, or at least new features
|
||||||
that could have the potential to break things.
|
that could have the potential to break things.
|
||||||
|
|
||||||
What's new in Mayan EDMS v1.0
|
Changes
|
||||||
=============================
|
-------
|
||||||
|
|
||||||
New home
|
New home
|
||||||
~~~~~~~~
|
^^^^^^^^
|
||||||
|
|
||||||
The growth and reach of the project has necessitaded for a while the move
|
The growth and reach of the project has necessitaded for a while the move
|
||||||
of the project to its own organization in Github. This move has finally been
|
of the project to its own organization in Github. This move has finally been
|
||||||
done, the new URL of the project is: https://github.com/mayan-edms/mayan-edms
|
done, the new URL of the project is: https://github.com/mayan-edms/mayan-edms
|
||||||
|
|
||||||
|
|
||||||
Django 1.6
|
Django 1.6
|
||||||
~~~~~~~~~~
|
^^^^^^^^^^
|
||||||
|
|
||||||
This release updates the required version of Django to 1.6, bringing with it
|
This release updates the required version of Django to 1.6, bringing with it
|
||||||
not only new features, but also a lot of security updates, a new project
|
not only new features, but also a lot of security updates, a new project
|
||||||
directory structure and new deployment methods.
|
directory structure and new deployment methods.
|
||||||
|
|
||||||
|
|
||||||
Translation updates
|
Translation updates
|
||||||
~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^
|
||||||
The translation for all languages were synchronized to the latest transifex project sources.
|
|
||||||
Translation completion as reported by Transifex:
|
The translation for all languages were synchronized to the latest transifex
|
||||||
|
project sources. Translation completion as reported by Transifex:
|
||||||
|
|
||||||
* English - 100%
|
* English - 100%
|
||||||
* Spanish - 100%
|
* Spanish - 100%
|
||||||
@@ -59,96 +61,127 @@ Translation completion as reported by Transifex:
|
|||||||
* Croatian - 3%
|
* Croatian - 3%
|
||||||
* Turkish - 3%
|
* Turkish - 3%
|
||||||
|
|
||||||
|
|
||||||
Model updates
|
Model updates
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
There were some convenience properties created to allow quick access to
|
There were some convenience properties created to allow quick access to
|
||||||
a document's version and pages. These custom properties were removed and
|
a document's version and pages. These custom properties were removed and
|
||||||
an official method to access these properties as provided by Django is now
|
an official method to access these properties as provided by Django is now
|
||||||
used.
|
used.
|
||||||
|
|
||||||
|
|
||||||
Source code improvements
|
Source code improvements
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A circular import of metadata and document_index apps code from the documents app
|
A circular import of metadata and document_index apps code from the documents app
|
||||||
was removed. Document index updates are now handled via signals, not called
|
was removed. Document index updates are now handled via signals, not called
|
||||||
directly as before. Hundreds of PEP8 style fixes, unused import removals,
|
directly as before. Hundreds of PEP8 style fixes, unused import removals,
|
||||||
unused variables removals and removal of remarked or unused code. Removal of the
|
unused variables removals and removal of remarked or unused code. Removal of the
|
||||||
DEVELOPMENT flag (was used to trigger static media serving during development),
|
``DEVELOPMENT`` flag (was used to trigger static media serving during development),
|
||||||
this is now handled by the DEBUG flag. The DEBUG flag is now set to `True` by
|
this is now handled by the ``DEBUG`` flag. The ``DEBUG`` flag is now set to ``True`` by
|
||||||
default as per Django 1.6 defaults. Removed usage of Django's JSON libraries
|
default as per Django 1.6 defaults. Removed usage of Django's JSON libraries
|
||||||
using Python's JSON library instead. Update of time and date use to use Django's
|
using Python's JSON library instead. Update of time and date use to use Django's
|
||||||
new timezone aware data and time handling. Removal of custom code in favor of using
|
new timezone aware data and time handling. Removal of custom code in favor of using
|
||||||
modules provided by Django or by existing 3rd party libraries. Unification of code
|
modules provided by Django or by existing 3rd party libraries. Unification of code
|
||||||
used for equal or similar purpose in various modules.
|
used for equal or similar purpose in various modules.
|
||||||
|
|
||||||
|
|
||||||
Removal of included 3rd party modules
|
Removal of included 3rd party modules
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
One last 3rd party module was included with the source code of Mayan EDMS.
|
One last 3rd party module was included with the source code of Mayan EDMS.
|
||||||
This module is now available on PyPI and fetched during the installation instead
|
This module is now available on PyPI and fetched during the installation instead
|
||||||
of being included.
|
of being included.
|
||||||
|
|
||||||
|
|
||||||
Automatic testing and code coverage check
|
Automatic testing and code coverage check
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Some initial tests were added, which will help with the detection of
|
Some initial tests were added, which will help with the detection of
|
||||||
regressions or bugs when adding new features. More tests are needed, but
|
regressions or bugs when adding new features. More tests are needed, but
|
||||||
the initial work has being started.
|
the initial work has being started.
|
||||||
|
|
||||||
|
|
||||||
Update of required modules and libraries versions
|
Update of required modules and libraries versions
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Many of the required modules and libraries have been updated to a more
|
Many of the required modules and libraries have been updated to a more
|
||||||
recent version if not to their most recent released version.
|
recent version if not to their most recent released version.
|
||||||
|
|
||||||
|
|
||||||
Database connection leaks
|
Database connection leaks
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Stale database connection being left open by scheduler tasks are now explictly
|
Stale database connection being left open by scheduler tasks are now explictly
|
||||||
closed. This avoids consumption of the pool of database connections, increases
|
closed. This avoids consumption of the pool of database connections, increases
|
||||||
stability and reduces memory usage.
|
stability and reduces memory usage.
|
||||||
|
|
||||||
|
|
||||||
Deletion of detached signatures
|
Deletion of detached signatures
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
Detached signatures can now be deleted, if accidentally added to the wrong document.
|
|
||||||
|
Detached signatures can now be deleted, if accidentally added to the wrong
|
||||||
|
document.
|
||||||
|
|
||||||
|
|
||||||
Removal of fabric based installations
|
Removal of fabric based installations
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
These files are now part of their own project and located at https://github.com/mayan-edms/mayan-fabric
|
These files are now part of their own project and located at https://github.com/mayan-edms/mayan-fabric
|
||||||
|
|
||||||
|
|
||||||
Pluggable OCR backends
|
Pluggable OCR backends
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A commonly requested feature, it is now possible to write backends drivers
|
A commonly requested feature, it is now possible to write backends drivers
|
||||||
to do document OCR using software or services other than Tesseract.
|
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.
|
||||||
|
|
||||||
|
|
||||||
License change
|
License change
|
||||||
~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Mayan EDMS is now licensed under the Apache 2.0 license. This means many
|
Mayan EDMS is now licensed under the Apache 2.0 license. This means many
|
||||||
things but the main change is that inclusion of Mayan EDMS into
|
things but the main change is that inclusion of Mayan EDMS into
|
||||||
commercial products is now explicitly allowed.
|
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
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
This release feature a completely new REST API and automatic API documentation.
|
This release feature a completely new REST API and automatic API documentation.
|
||||||
This new API is also used internally by *Mayan EDMS* itself.
|
This new API is also used internally by Mayan EDMS itself.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
More office document types are now recognized and supported. More file types are now
|
More office document types are now recognized and supported. More file types are now
|
||||||
supported as text files and properly previewed and parsed. Removal of the legacy
|
supported as text files and properly previewed and parsed. Removal of the legacy
|
||||||
runserver.sh and runserver_plus.sh scripts. New document preview generation and
|
runserver.sh and runserver_plus.sh scripts. New document preview generation and
|
||||||
display pipeline, faster, simpler. Inclusion of a proof of concept compressed storage
|
display pipeline, faster, simpler. Inclusion of a proof of concept compressed storage
|
||||||
backend.
|
backend.
|
||||||
|
|
||||||
|
|
||||||
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
|
||||||
@@ -175,7 +208,8 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* If using the SQLite3 database option, rename the file named `mayan.sqlite` file to `db.sqlite3` and
|
* If using the SQLite3 database option, rename the file named `mayan.sqlite` file to `db.sqlite3` and
|
||||||
move it to the new `media` provided folder.
|
move it to the new `media` provided folder.
|
||||||
* Also move to the `media` folder any `gpg_home`, `document_storage` and `image_cache` folders
|
* Also move to the `media` folder any `gpg_home`, `document_storage` and `image_cache` folders
|
||||||
@@ -183,7 +217,8 @@ Backward incompatible changes
|
|||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,18 +1,19 @@
|
|||||||
===============================
|
Version 1.1.1
|
||||||
Mayan EDMS v1.1.1 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: May 21, 2015
|
Released: May 21, 2015
|
||||||
|
|
||||||
What's new
|
Changes
|
||||||
==========
|
-------
|
||||||
|
|
||||||
Update to Django 1.6.11
|
Update to Django 1.6.11
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The required version of Django has been updated to version 1.6.11_.
|
The required version of Django has been updated to version 1.6.11_.
|
||||||
|
|
||||||
Minor changes
|
Minor changes
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Fix make_dist.sh script
|
- Fix make_dist.sh script
|
||||||
- Add test for issue #163
|
- Add test for issue #163
|
||||||
- Activate tests for the sources app
|
- Activate tests for the sources app
|
||||||
@@ -25,11 +26,12 @@ Minor changes
|
|||||||
- Increase size of the lock name field
|
- Increase size of the lock name field
|
||||||
- New style documentation
|
- New style documentation
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -37,8 +39,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated.
|
the requirements will also be updated.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -51,8 +54,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Add new static media::
|
Add new static media::
|
||||||
|
|
||||||
@@ -62,11 +66,14 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
None
|
|
||||||
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
None
|
|
||||||
|
* None
|
||||||
|
|
||||||
.. _1.6.11: https://docs.djangoproject.com/en/1.8/releases/1.6.11/
|
.. _1.6.11: https://docs.djangoproject.com/en/1.8/releases/1.6.11/
|
||||||
|
|||||||
@@ -1,17 +1,14 @@
|
|||||||
=============================
|
Version 1.1
|
||||||
Mayan EDMS v1.1 release notes
|
===========
|
||||||
=============================
|
|
||||||
|
|
||||||
Released: February 10, 2015
|
Released: February 10, 2015
|
||||||
|
|
||||||
Welcome to Mayan EDMS v1.1
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
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
|
||||||
@@ -19,72 +16,83 @@ 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.
|
||||||
|
|
||||||
|
|
||||||
Removal of the splash screen
|
Removal of the splash screen
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The static image home screen has been replaced with a quick links view, showing
|
The static image home screen has been replaced with a quick links view, showing
|
||||||
the most used actions: Uploading documents, viewing recent documents, viewing
|
the most used actions: Uploading documents, viewing recent documents, viewing
|
||||||
all documents and searching documents.
|
all documents and searching documents.
|
||||||
|
|
||||||
|
|
||||||
Sending and receiving documents via email
|
Sending and receiving documents via email
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A link or entire documents can be sent as attachments via email. Documents can
|
A link or entire documents can be sent as attachments via email. Documents can
|
||||||
also be received via email with the addition of two document sources named IMAP and POP3
|
also be received via email with the addition of two document sources named IMAP
|
||||||
which correspond to the mail protocol used to fetch the documents. Read Django's
|
and POP3 which correspond to the mail protocol used to fetch the documents.
|
||||||
`email configuration settings documentation`_ for more details on how to set up
|
Read Django's `email configuration settings documentation`_ for more details
|
||||||
mail serving.
|
on how to set up 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
|
||||||
~~~~~~~~~~
|
^^^^^^^^^^
|
||||||
|
|
||||||
The built-in history app has been removed in favor of a new events wrapper app
|
The built-in history app has been removed in favor of a new events wrapper app
|
||||||
for `Django activity stream`_
|
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)
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Interface language and locale setting can now be setup for each user and are not
|
Interface language and locale setting can now be setup for each user and are not
|
||||||
installation wide as before. Date and times offsets are automatically ajusted to
|
installation wide as before. Date and times offsets are automatically ajusted to
|
||||||
each user's timezone settings.
|
each user's timezone settings.
|
||||||
|
|
||||||
|
|
||||||
Document states
|
Document states
|
||||||
~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
A new simple workflow app that can represent document states has been included.
|
A new simple workflow app that can represent document states has been included.
|
||||||
|
|
||||||
|
|
||||||
Explicit document types needed per index
|
Explicit document types needed per index
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Indexes can now be tied to document types, eliminating the need to update
|
Indexes can now be tied to document types, eliminating the need to update
|
||||||
indexes for every document update. Indexes will only update when a document of
|
indexes for every document update. Indexes will only update when a document of
|
||||||
the type to which they are associated is updated.
|
the type to which they are associated is updated.
|
||||||
|
|
||||||
|
|
||||||
Optional and required metadata types
|
Optional and required metadata types
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Metadata types can now be assigned in two ways to documents types, as optional or
|
Metadata types can now be assigned in two ways to documents types, as optional or
|
||||||
required. Values for required metadata types as the name implies, must be entered
|
required. Values for required metadata types as the name implies, must be entered
|
||||||
for documents to be able to be uploaded. Optional metadata types on the other hand
|
for documents to be able to be uploaded. Optional metadata types on the other hand
|
||||||
@@ -92,14 +100,16 @@ can be left blank by the user.
|
|||||||
|
|
||||||
|
|
||||||
Bulk document type change
|
Bulk document type change
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
It is now possible to change the document type of previously uploaded documents.
|
It is now possible to change the document type of previously uploaded documents.
|
||||||
When the document type of a document is changed the metadata values are reset and
|
When the document type of a document is changed the metadata values are reset and
|
||||||
the metadata types of the new document type are automatically assigned.
|
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
|
||||||
@@ -110,29 +120,36 @@ 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
|
|
||||||
difficulty of translating Mayan EDMS and maintaing the contextual meaning of the
|
Many updates and simplifications were made to the source text messages to
|
||||||
text messages.
|
reduce the difficulty of translating Mayan EDMS and maintaing the contextual
|
||||||
|
meaning of the text messages.
|
||||||
|
|
||||||
|
|
||||||
Improved method for custom settings
|
Improved method for custom settings
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Custom settings now use a string based value, it is longer needed to import
|
Custom settings now use a string based value, it is longer needed to import
|
||||||
classes when customizing a setting::
|
classes when customizing a setting::
|
||||||
|
|
||||||
@@ -145,64 +162,71 @@ Instead the fully qualified name of the class must be passed as the setting valu
|
|||||||
|
|
||||||
|
|
||||||
Removal of the OCR config setting
|
Removal of the OCR config setting
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
OCR behavior is now a document type property meaning that it can be turned
|
OCR behavior is now a document type property meaning that it can be turned
|
||||||
on or off for specific document types.
|
on or off for specific document types.
|
||||||
|
|
||||||
|
|
||||||
Per document language setting
|
Per document language setting
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Previously the document language used for OCR was specified for the entire
|
Previously the document language used for OCR was specified for the entire
|
||||||
installation. If documents in multiple languages were uploaded some suffered
|
installation. If documents in multiple languages were uploaded some suffered
|
||||||
lower success rates. Now the language of each document can be specified.
|
lower success rates. Now the language of each document can be specified.
|
||||||
|
|
||||||
|
|
||||||
Metadata validation and parsing support
|
Metadata validation and parsing support
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
It is now possible to create functions to validate metadata value input or
|
It is now possible to create functions to validate metadata value input or
|
||||||
parse and store corrected values. Three sample metadata validations functions
|
parse and store corrected values. Three sample metadata validations functions
|
||||||
are included: ``Parse date and time``, ``Parse date`` and ``Parse time``.
|
are included: ``Parse date and time``, ``Parse date`` and ``Parse time``.
|
||||||
|
|
||||||
|
|
||||||
Removal of 960 grid system in favor Pure CSS's grid system
|
Removal of 960 grid system in favor Pure CSS's grid system
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
By using Pure CSS's columns based grid system, the move towards a
|
By using Pure CSS's columns based grid system, the move towards a
|
||||||
Bootstrap UI migration has advanced greatly.
|
Bootstrap UI migration has advanced greatly.
|
||||||
|
|
||||||
|
|
||||||
Simplified UI
|
Simplified UI
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
All user actions as well as the logout button are now under the user functions
|
All user actions as well as the logout button are now under the user functions
|
||||||
section.
|
section.
|
||||||
|
|
||||||
|
|
||||||
Stable PDF previews generation
|
Stable PDF previews generation
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The way PDF were being generated has been improved greatly eliminating
|
The way PDF were being generated has been improved greatly eliminating
|
||||||
spurious segmentation faults at the expense of a small speed penalty.
|
spurious segmentation faults at the expense of a small speed penalty.
|
||||||
|
|
||||||
|
|
||||||
More technical documentation
|
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
|
||||||
~~~~~~~~~~~~~
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
* Removal of the MAIN_SIDE_BAR_SEARCH setting
|
* Removal of the ``MAIN_SIDE_BAR_SEARCH`` setting
|
||||||
* Removal of THEMES and themes support
|
* Removal of ``THEMES`` setting and themes support
|
||||||
* Removal of VERBOSE_LOGIN setting
|
* Removal of ``VERBOSE_LOGIN`` setting
|
||||||
* Removal of graphics backend supported file format list view
|
* Removal of graphics backend supported file format list view
|
||||||
* Removal of the MAIN_DISABLE_ICONS setting
|
* Removal of the ``MAIN_DISABLE_ICONS`` setting
|
||||||
* Removal of specialized Sentry support
|
* Removal of specialized Sentry support
|
||||||
* Removal of the MAIN_ENABLE_SCROLL_JS setting
|
* Removal of the ``MAIN_ENABLE_SCROLL_JS`` setting
|
||||||
* Remove hardcoded root (/) redirections
|
* Remove hardcoded root (/) redirections
|
||||||
* Removal of APSCheduler as a requirement
|
* Removal of ``APSCheduler`` as a requirement
|
||||||
* Removal of the scheduled jobs view
|
* Removal of the scheduled jobs view
|
||||||
* Removal of the web_theme app
|
* Removal of the ``web_theme`` app
|
||||||
* Removal of the sources icon selection support
|
* Removal of the sources icon selection support
|
||||||
* Removal of the in-app help panels
|
* Removal of the in-app help panels
|
||||||
* Removal of the duplicate document search feature
|
* Removal of the duplicate document search feature
|
||||||
@@ -212,7 +236,8 @@ Other changes
|
|||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
=================================
|
---------------------------------
|
||||||
|
|
||||||
IMPORTANT! Before running the upgrade make sure none of your documents have
|
IMPORTANT! Before running the upgrade make sure none of your documents have
|
||||||
duplicated metadata types, meaning that the same metadata type must not appear
|
duplicated metadata types, meaning that the same metadata type must not appear
|
||||||
twice for any given document.
|
twice for any given document.
|
||||||
@@ -240,7 +265,7 @@ Migrate existing database schema with::
|
|||||||
|
|
||||||
During the migration several messages of stale content types can occur:
|
During the migration several messages of stale content types can occur:
|
||||||
|
|
||||||
.. code-block:: bash
|
::
|
||||||
|
|
||||||
The following content types are stale and need to be deleted:
|
The following content types are stale and need to be deleted:
|
||||||
|
|
||||||
@@ -278,7 +303,7 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* You will have to redefine your document sources due to the new extended models
|
* You will have to redefine your document sources due to the new extended models
|
||||||
for this app.
|
for this app.
|
||||||
@@ -287,80 +312,80 @@ Backward incompatible changes
|
|||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* `issue #30 <https://github.com/mayan-edms/mayan-edms/issues/30>`_ Document workflows
|
* :github-issue:`30` Document workflows
|
||||||
* `issue #32 <https://github.com/mayan-edms/mayan-edms/issues/32>`_ Watched folders
|
* :github-issue:`32` Watched folders
|
||||||
* `issue #34 <https://github.com/mayan-edms/mayan-edms/issues/34>`_ Postprocessing document queue
|
* :github-issue:`34` Postprocessing document queue
|
||||||
* `issue #35 <https://github.com/mayan-edms/mayan-edms/issues/35>`_ Metadata validation
|
* :github-issue:`35` Metadata validation
|
||||||
* `issue #37 <https://github.com/mayan-edms/mayan-edms/issues/37>`_ Add from __future__ import unicode_literals
|
* :github-issue:`37` Add from __future__ import unicode_literals
|
||||||
* `issue #39 <https://github.com/mayan-edms/mayan-edms/issues/39>`_ Capitalization of messages
|
* :github-issue:`39` Capitalization of messages
|
||||||
* `issue #40 <https://github.com/mayan-edms/mayan-edms/issues/40>`_ Update references to root ('/') path
|
* :github-issue:`40` Update references to root ('/') path
|
||||||
* `issue #46 <https://github.com/mayan-edms/mayan-edms/issues/46>`_ Advanced search past 1st page
|
* :github-issue:`46` Advanced search past 1st page
|
||||||
* `issue #49 <https://github.com/mayan-edms/mayan-edms/issues/49>`_ Problems with large pdf files
|
* :github-issue:`49` Problems with large pdf files
|
||||||
* `issue #50 <https://github.com/mayan-edms/mayan-edms/issues/50>`_ raise CommandNotFound(path)
|
* :github-issue:`50` raise CommandNotFound(path)
|
||||||
* `issue #51 <https://github.com/mayan-edms/mayan-edms/issues/51>`_ Search with ANONYMOUS error
|
* :github-issue:`51` Search with ANONYMOUS error
|
||||||
* `issue #55 <https://github.com/mayan-edms/mayan-edms/issues/55>`_ Document approval cicle?
|
* :github-issue:`55` Document approval cicle?
|
||||||
* `issue #56 <https://github.com/mayan-edms/mayan-edms/issues/56>`_ Removal of non essential features, views, models
|
* :github-issue:`56` Removal of non essential features, views, models
|
||||||
* `issue #57 <https://github.com/mayan-edms/mayan-edms/issues/57>`_ Migrate to Celery for task query and periodic tasks
|
* :github-issue:`57` Migrate to Celery for task query and periodic tasks
|
||||||
* `issue #64 <https://github.com/mayan-edms/mayan-edms/issues/64>`_ Pluralize messages properly
|
* :github-issue:`64` Pluralize messages properly
|
||||||
* `issue #65 <https://github.com/mayan-edms/mayan-edms/issues/65>`_ Backport the ability to receive documents via email
|
* :github-issue:`65` Backport the ability to receive documents via email
|
||||||
* `issue #66 <https://github.com/mayan-edms/mayan-edms/issues/66>`_ Python 3 compatibility: Add from __future__ import unicode_literals and remove all u''
|
* :github-issue:`66` Python 3 compatibility: Add from __future__ import unicode_literals and remove all u''
|
||||||
* `issue #68 <https://github.com/mayan-edms/mayan-edms/issues/68>`_ Revise and update the use gettext vs. gettext_lazy
|
* :github-issue:`68` Revise and update the use gettext vs. gettext_lazy
|
||||||
* `issue #69 <https://github.com/mayan-edms/mayan-edms/issues/69>`_ Feature removal: remove "Unregistered" message from the title bar
|
* :github-issue:`69` Feature removal: remove "Unregistered" message from the title bar
|
||||||
* `issue #71 <https://github.com/mayan-edms/mayan-edms/issues/71>`_ Add retry support to the converter task
|
* :github-issue:`71` Add retry support to the converter task
|
||||||
* `issue #72 <https://github.com/mayan-edms/mayan-edms/issues/72>`_ Delete unused static icons
|
* :github-issue:`72` Delete unused static icons
|
||||||
* `issue #74 <https://github.com/mayan-edms/mayan-edms/issues/74>`_ Cache a document's first document version
|
* :github-issue:`74` Cache a document's first document version
|
||||||
* `issue #75 <https://github.com/mayan-edms/mayan-edms/issues/75>`_ Move automatic OCR queueing from a configuration settings to a property of Document Type model
|
* :github-issue:`75` Move automatic OCR queueing from a configuration settings to a property of Document Type model
|
||||||
* `issue #77 <https://github.com/mayan-edms/mayan-edms/issues/77>`_ Add document view permission support to the search app
|
* :github-issue:`77` Add document view permission support to the search app
|
||||||
* `issue #78 <https://github.com/mayan-edms/mayan-edms/issues/78>`_ COMMON_TEMPORARY_DIRECTORY seems not to be used everywhere
|
* :github-issue:`78` COMMON_TEMPORARY_DIRECTORY seems not to be used everywhere
|
||||||
* `issue #79 <https://github.com/mayan-edms/mayan-edms/issues/79>`_ Error installing
|
* :github-issue:`79` Error installing
|
||||||
* `issue #82 <https://github.com/mayan-edms/mayan-edms/issues/82>`_ Make document type a required field
|
* :github-issue:`82` Make document type a required field
|
||||||
* `issue #83 <https://github.com/mayan-edms/mayan-edms/issues/83>`_ Simplify source app views and navigation
|
* :github-issue:`83` Simplify source app views and navigation
|
||||||
* `issue #84 <https://github.com/mayan-edms/mayan-edms/issues/84>`_ Remove template context variable 'object_name' to improve translations
|
* :github-issue:`84` Remove template context variable 'object_name' to improve translations
|
||||||
* `issue #85 <https://github.com/mayan-edms/mayan-edms/issues/85>`_ Reset page count for a single document
|
* :github-issue:`85` Reset page count for a single document
|
||||||
* `issue #86 <https://github.com/mayan-edms/mayan-edms/issues/86>`_ Move migrations to new 'south_migrations' folders
|
* :github-issue:`86` Move migrations to new 'south_migrations' folders
|
||||||
* `issue #87 <https://github.com/mayan-edms/mayan-edms/issues/87>`_ Per document language selection
|
* :github-issue:`87` Per document language selection
|
||||||
* `issue #88 <https://github.com/mayan-edms/mayan-edms/issues/88>`_ Remove metadata type selection from the upload wizard
|
* :github-issue:`88` Remove metadata type selection from the upload wizard
|
||||||
* `issue #89 <https://github.com/mayan-edms/mayan-edms/issues/89>`_ Allow metadata types to be required for specific document types
|
* :github-issue:`89` Allow metadata types to be required for specific document types
|
||||||
* `issue #90 <https://github.com/mayan-edms/mayan-edms/issues/90>`_ Remove the app_registry app
|
* :github-issue:`90` Remove the app_registry app
|
||||||
* `issue #91 <https://github.com/mayan-edms/mayan-edms/issues/91>`_ Don't preserve the ?page= URL query string value when switching sources during document upload
|
* :github-issue:`91` Don't preserve the ?page= URL query string value when switching sources during document upload
|
||||||
* `issue #92 <https://github.com/mayan-edms/mayan-edms/issues/92>`_ Make register_multi_item_links class aware
|
* :github-issue:`92` Make register_multi_item_links class aware
|
||||||
* `issue #95 <https://github.com/mayan-edms/mayan-edms/issues/95>`_ Installation error on Mac OSX; OSError: [Errno 2] No such file or directory
|
* :github-issue:`95` Installation error on Mac OSX; OSError: [Errno 2] No such file or directory
|
||||||
* `issue #96 <https://github.com/mayan-edms/mayan-edms/issues/96>`_ Remove hard code User model references
|
* :github-issue:`96` Remove hard code User model references
|
||||||
* `issue #97 <https://github.com/mayan-edms/mayan-edms/issues/97>`_ Make multi item links a drop down list
|
* :github-issue:`97` Make multi item links a drop down list
|
||||||
* `issue #104 <https://github.com/mayan-edms/mayan-edms/issues/104>`_ Finish polishing metadata validation patch
|
* :github-issue:`104` Finish polishing metadata validation patch
|
||||||
* `issue #105 <https://github.com/mayan-edms/mayan-edms/issues/105>`_ Tie smart links setups to document types
|
* :github-issue:`105` Tie smart links setups to document types
|
||||||
* `issue #106 <https://github.com/mayan-edms/mayan-edms/issues/106>`_ Convert document indexing app actions to Celery
|
* :github-issue:`106` Convert document indexing app actions to Celery
|
||||||
* `issue #107 <https://github.com/mayan-edms/mayan-edms/issues/107>`_ Restrict document metadata addition and removal
|
* :github-issue:`107` Restrict document metadata addition and removal
|
||||||
* `issue #108 <https://github.com/mayan-edms/mayan-edms/issues/108>`_ New home screen
|
* :github-issue:`108` New home screen
|
||||||
* `issue #109 <https://github.com/mayan-edms/mayan-edms/issues/109>`_ Add Roles API endpoints
|
* :github-issue:`109` Add Roles API endpoints
|
||||||
* `issue #111 <https://github.com/mayan-edms/mayan-edms/issues/111>`_ Add Checkouts API endpoints
|
* :github-issue:`111` Add Checkouts API endpoints
|
||||||
* `issue #112 <https://github.com/mayan-edms/mayan-edms/issues/112>`_ Add OCR API endpoints
|
* :github-issue:`112` Add OCR API endpoints
|
||||||
* `issue #114 <https://github.com/mayan-edms/mayan-edms/issues/114>`_ Implement UI language as user preference
|
* :github-issue:`114` Implement UI language as user preference
|
||||||
* `issue #116 <https://github.com/mayan-edms/mayan-edms/issues/116>`_ Add documentation topic explicitly noting the binary requirements
|
* :github-issue:`116` Add documentation topic explicitly noting the binary requirements
|
||||||
* `issue #118 <https://github.com/mayan-edms/mayan-edms/issues/118>`_ When a metadata type is removed from a document type, remove it from all the documents of that type
|
* :github-issue:`118` When a metadata type is removed from a document type, remove it from all the documents of that type
|
||||||
* `issue #119 <https://github.com/mayan-edms/mayan-edms/issues/119>`_ When a required metadata type is added to a document type, add it to all documents of that type
|
* :github-issue:`119` When a required metadata type is added to a document type, add it to all documents of that type
|
||||||
* `issue #126 <https://github.com/mayan-edms/mayan-edms/issues/126>`_ Failing migration with SQLite
|
* :github-issue:`126` Failing migration with SQLite
|
||||||
* `issue #127 <https://github.com/mayan-edms/mayan-edms/issues/127>`_ Failing migration with Postgres
|
* :github-issue:`127` Failing migration with Postgres
|
||||||
* `issue #128 <https://github.com/mayan-edms/mayan-edms/issues/128>`_ Add Indexes API endpoints
|
* :github-issue:`128` Add Indexes API endpoints
|
||||||
* `issue #129 <https://github.com/mayan-edms/mayan-edms/issues/129>`_ Search api shouldn't memorize requested page as part of the query
|
* :github-issue:`129` Search api shouldn't memorize requested page as part of the query
|
||||||
* `issue #130 <https://github.com/mayan-edms/mayan-edms/issues/130>`_ Users API is not working correctly
|
* :github-issue:`130` Users API is not working correctly
|
||||||
* `issue #131 <https://github.com/mayan-edms/mayan-edms/issues/131>`_ Is there an API to update a user's password?
|
* :github-issue:`131` Is there an API to update a user's password?
|
||||||
* `issue #137 <https://github.com/mayan-edms/mayan-edms/issues/137>`_ Enhancement of language selection
|
* :github-issue:`137` Enhancement of language selection
|
||||||
* `issue #138 <https://github.com/mayan-edms/mayan-edms/issues/138>`_ Possibility to keep zoom factor
|
* :github-issue:`138` Possibility to keep zoom factor
|
||||||
* `issue #139 <https://github.com/mayan-edms/mayan-edms/issues/139>`_ Translatability of language selection
|
* :github-issue:`139` Translatability of language selection
|
||||||
* `issue #140 <https://github.com/mayan-edms/mayan-edms/issues/140>`_ Thumbnail creation for ods crashing
|
* :github-issue:`140` Thumbnail creation for ods crashing
|
||||||
* `issue #143 <https://github.com/mayan-edms/mayan-edms/issues/143>`_ Exception Value: 'exceptions.ValueError' object has no attribute 'messages'
|
* :github-issue:`143` Exception Value: 'exceptions.ValueError' object has no attribute 'messages'
|
||||||
* `issue #144 <https://github.com/mayan-edms/mayan-edms/issues/144>`_ Behavior of 'Edit metadata' (Recent Documents)
|
* :github-issue:`144` Behavior of 'Edit metadata' (Recent Documents)
|
||||||
* `issue #146 <https://github.com/mayan-edms/mayan-edms/issues/146>`_ Periodic task not initiated for mail boxes and watch folders
|
* :github-issue:`146` Periodic task not initiated for mail boxes and watch folders
|
||||||
* `issue #149 <https://github.com/mayan-edms/mayan-edms/issues/149>`_ Attribute error in document download
|
* :github-issue:`149` Attribute error in document download
|
||||||
* `issue #150 <https://github.com/mayan-edms/mayan-edms/issues/150>`_ Double second menu entry
|
* :github-issue:`150` Double second menu entry
|
||||||
* `issue #152 <https://github.com/mayan-edms/mayan-edms/issues/152>`_ Document content empty
|
* :github-issue:`152` Document content empty
|
||||||
* `issue #153 <https://github.com/mayan-edms/mayan-edms/issues/153>`_ south migration with postgres: documents: 031_remove_orphan_documents
|
* :github-issue:`153` south migration with postgres: documents: 031_remove_orphan_documents
|
||||||
* `issue #154 <https://github.com/mayan-edms/mayan-edms/issues/154>`_ south migration with postgres: tags: 0002_auto__add_tag__chg_field_tagproperties_tag
|
* :github-issue:`154` south migration with postgres: tags: 0002_auto__add_tag__chg_field_tagproperties_tag
|
||||||
* `issue #157 <https://github.com/mayan-edms/mayan-edms/issues/157>`_ upload new version of a document not working
|
* :github-issue:`157` upload new version of a document not working
|
||||||
* `issue #158 <https://github.com/mayan-edms/mayan-edms/issues/158>`_ Plural form not matching singular form in ocr app bug i18n
|
* :github-issue:`158` Plural form not matching singular form in ocr app bug i18n
|
||||||
|
|
||||||
|
|
||||||
.. _Celery: http://www.celeryproject.org/
|
.. _Celery: http://www.celeryproject.org/
|
||||||
|
|||||||
@@ -1,31 +1,34 @@
|
|||||||
===============================
|
Version 2.0.1
|
||||||
Mayan EDMS v2.0.1 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: January 22, 2016
|
Released: January 22, 2016
|
||||||
|
|
||||||
Welcome to Mayan EDMS v2.0.1
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
What's new in Mayan EDMS v2.0.1
|
|
||||||
===============================
|
|
||||||
|
|
||||||
Required metadata was not enforce correctly
|
Required metadata was not enforce correctly
|
||||||
-------------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Fixed a situation where documents having required metadata could still be
|
Fixed a situation where documents having required metadata could still be
|
||||||
uploaded without entering a value for the required metadata.
|
uploaded without entering a value for the required metadata.
|
||||||
|
|
||||||
|
|
||||||
Fix multiple document metadata adding
|
Fix multiple document metadata adding
|
||||||
-------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Fixed a bug when adding metadata to multiple documents.
|
Fixed a bug when adding metadata to multiple documents.
|
||||||
|
|
||||||
|
|
||||||
Fix multiple document metadata editing
|
Fix multiple document metadata editing
|
||||||
--------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Fixed a bug that made it impossible to edit multiple documents' metadata values
|
Fixed a bug that made it impossible to edit multiple documents' metadata values
|
||||||
if one of the documents had no previous value for it's metadata.
|
if one of the documents had no previous value for it's metadata.
|
||||||
|
|
||||||
|
|
||||||
Updated Vagrant file
|
Updated Vagrant file
|
||||||
--------------------
|
^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The included Vagrant file now provide 2 boxes: development and production.
|
The included Vagrant file now provide 2 boxes: development and production.
|
||||||
Selection which kind of box to provision is as easy as executing::
|
Selection which kind of box to provision is as easy as executing::
|
||||||
|
|
||||||
@@ -37,18 +40,22 @@ or
|
|||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
-------------
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -56,8 +63,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -71,8 +79,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -86,14 +95,15 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
|
||||||
===========================
|
|
||||||
|
|
||||||
* `GitLab issue #243 <https://gitlab.com/mayan-edms/mayan-edms/issues/243>`_ System allows a user to skip entering values for a required metadata field while uploading a new document
|
Bugs fixed or issues closed
|
||||||
* `GitLab issue #245 <https://gitlab.com/mayan-edms/mayan-edms/issues/245>`_ Add multiple metadata not possible
|
---------------------------
|
||||||
|
|
||||||
|
* :gitlab-issue:`243` System allows a user to skip entering values for a required metadata field while uploading a new document
|
||||||
|
* :gitlab-issue:`245` Add multiple metadata not possible
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,34 +1,39 @@
|
|||||||
===============================
|
Version 2.0.2
|
||||||
Mayan EDMS v2.0.2 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: February 15, 2016
|
Released: February 15, 2016
|
||||||
|
|
||||||
Welcome to Mayan EDMS v2.0.2
|
Changes
|
||||||
|
-------
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
Fine tune "Update" checkbox from the metadata entry form
|
Fine tune "Update" checkbox from the metadata entry form
|
||||||
--------------------------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Previously the update checkbox was ignored during the metadata step of the
|
Previously the update checkbox was ignored during the metadata step of the
|
||||||
document upload wizard with the wizard always creating a metadata entry for the
|
document upload wizard with the wizard always creating a metadata entry for the
|
||||||
new document even if the entry was left blank. The checkbox now controls whether
|
new document even if the entry was left blank. The checkbox now controls whether
|
||||||
or not the wizard will store try to create the metadata entry.
|
or not the wizard will store try to create the metadata entry.
|
||||||
|
|
||||||
|
|
||||||
Fix empty optional lookup metadata fields behavior
|
Fix empty optional lookup metadata fields behavior
|
||||||
--------------------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
An edge case was fixed that caused validation to be executed for empty metadata
|
An edge case was fixed that caused validation to be executed for empty metadata
|
||||||
fields that had a value lookup list.
|
fields that had a value lookup list.
|
||||||
|
|
||||||
|
|
||||||
Remove Docker files
|
Remove Docker files
|
||||||
-------------------
|
^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Included Docker and Docker Compose files were removed since the Mayan EDMS Docker
|
Included Docker and Docker Compose files were removed since the Mayan EDMS Docker
|
||||||
(https://gitlab.com/mayan-edms/mayan-edms-docker) repository is stable.
|
(https://gitlab.com/mayan-edms/mayan-edms-docker) repository is stable.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
-------------
|
^^^^^^^^^^^^^
|
||||||
- Only extract validation error messages from ValidationError exception instances.
|
|
||||||
|
- Only extract validation error messages from ``ValidationError`` exception
|
||||||
|
instances.
|
||||||
- Add 2 second delay to document version tests to workaround MySQL not storing
|
- Add 2 second delay to document version tests to workaround MySQL not storing
|
||||||
the millisecond part of the document version's timestamp.
|
the millisecond part of the document version's timestamp.
|
||||||
- Install testing dependencies when installing development dependencies.
|
- Install testing dependencies when installing development dependencies.
|
||||||
@@ -36,15 +41,18 @@ Other changes
|
|||||||
- Move metadata form value validation to .clean() method.
|
- Move metadata form value validation to .clean() method.
|
||||||
- Add HTML tags stripping to the browser title generation template.
|
- Add HTML tags stripping to the browser title generation template.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -52,8 +60,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -67,8 +76,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -82,13 +92,14 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
|
||||||
===========================
|
|
||||||
|
|
||||||
* `GitLab issue #250 <https://gitlab.com/mayan-edms/mayan-edms/issues/250>`_ Empty optional lookup metadata trigger validation error.
|
Bugs fixed or issues closed
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
* :gitlab-issue:`250` Empty optional lookup metadata trigger validation error.
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,41 +1,46 @@
|
|||||||
===============================
|
Version 2.1.1
|
||||||
Mayan EDMS v2.1.1 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: May 17, 2016
|
Released: May 17, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bugfix release and all users are encouraged to upgrade.
|
This is a bugfix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
Fix object column resolution issue in navigation app
|
Fix object column resolution issue in navigation app
|
||||||
----------------------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
Version 2.1 includes a navigation feature that allows model instances from a
|
Version 2.1 includes a navigation feature that allows model instances from a
|
||||||
queryset generated using the .defer() or .only() Django filter optimization
|
queryset generated using the .defer() or .only() Django filter optimization
|
||||||
features to resolve to their parent class transparently. This optimization
|
features to resolve to their parent class transparently. This optimization
|
||||||
caused problems with the sources app which uses a
|
caused problems with the sources app which uses a
|
||||||
|
|
||||||
|
|
||||||
Missing Tesseract language files
|
Missing Tesseract language files
|
||||||
--------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The Tesseract OCR backend now reports if the tesseract language file is missing
|
The Tesseract OCR backend now reports if the tesseract language file is missing
|
||||||
for the requested document's language.
|
for the requested document's language.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
-------------
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Ensure the automatic default index is created after the default document type.
|
- Ensure the automatic default index is created after the default document type.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -43,8 +48,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -58,8 +64,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -73,15 +80,16 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* 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.
|
Bugs fixed or issues closed
|
||||||
* `GitLab issue #289 <https://gitlab.com/mayan-edms/mayan-edms/issues/289>`_ OCR fails with Exception.
|
---------------------------
|
||||||
|
|
||||||
|
* :gitlab-issue:`288` Can't add sources in mayan-edms 2.1.
|
||||||
|
* :gitlab-issue:`289` OCR fails with Exception.
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,31 +1,30 @@
|
|||||||
================================
|
Version 2.1.10
|
||||||
Mayan EDMS v2.1.10 release notes
|
==============
|
||||||
================================
|
|
||||||
|
|
||||||
Released: February 13, 2017
|
Released: February 13, 2017
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a micro release equal to the previews version from the user's point of view.
|
This is a micro release equal to the previews version from the user's point of view.
|
||||||
The version number was increase to workaround some issues with the Python
|
The version number was increase to workaround some issues with the Python
|
||||||
Package Index not allowing re-uploads.
|
Package Index not allowing re-uploads.
|
||||||
|
|
||||||
Changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Update Makefile to use twine for releases.
|
- Update Makefile to use twine for releases.
|
||||||
- Add Makefile target to make test releases.
|
- Add Makefile target to make test releases.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -33,8 +32,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -48,8 +48,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -63,12 +64,13 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,13 @@
|
|||||||
================================
|
Version 2.1.11
|
||||||
Mayan EDMS v2.1.11 release notes
|
==============
|
||||||
================================
|
|
||||||
|
|
||||||
Released: March 14, 2017
|
Released: March 14, 2017
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade. The focus
|
This is a bug-fix release and all users are encouraged to upgrade. The focus
|
||||||
of this micro release was REST API improvement.
|
of this micro release was REST API improvement.
|
||||||
|
|
||||||
Changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Added a quick rename serializer to the document type API serializer.
|
- Added a quick rename serializer to the document type API serializer.
|
||||||
- Added per document type, workflow list API view. The URL for this endpoint is
|
- Added per document type, workflow list API view. The URL for this endpoint is
|
||||||
@@ -24,7 +20,7 @@ Changes
|
|||||||
- Implemented document workflows transition ACLs. GitLab issue #321.
|
- Implemented document workflows transition ACLs. GitLab issue #321.
|
||||||
- Add document comments API endpoints. GitHub issue #249.
|
- Add document comments API endpoints. GitHub issue #249.
|
||||||
- Add support for overriding the Celery class. The setting is named
|
- Add support for overriding the Celery class. The setting is named
|
||||||
MAYAN_CELERY_CLASS and expects a dotted python path to the class to use.
|
``MAYAN_CELERY_CLASS`` and expects a dotted python path to the class to use.
|
||||||
- Changed the document upload view in source app to not use the HTTP referer
|
- Changed the document upload view in source app to not use the HTTP referer
|
||||||
URL blindly, but instead recompose the URL using known view name. Needed
|
URL blindly, but instead recompose the URL using known view name. Needed
|
||||||
when integrating Mayan EDMS into other app via using iframes.
|
when integrating Mayan EDMS into other app via using iframes.
|
||||||
@@ -34,15 +30,18 @@ Changes
|
|||||||
- Added support for adding or editing document types to smart links via the
|
- Added support for adding or editing document types to smart links via the
|
||||||
API.
|
API.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -50,8 +49,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -65,8 +65,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -80,15 +81,16 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
|
||||||
===========================
|
|
||||||
|
|
||||||
* `Github issue #249 <https://github.com/mayan-edms/mayan-edms/issues/249>`_ Add document comments API [$50 US]
|
Bugs fixed or issues closed
|
||||||
* `GitLab issue #321 <https://gitlab.com/mayan-edms/mayan-edms/issues/321>`_ Transition ACLS
|
---------------------------
|
||||||
* `GitLab issue #357 <https://gitlab.com/mayan-edms/mayan-edms/issues/357>`_ It should be possible to retrieve all workflows for a given DocumentType from the API
|
|
||||||
|
* :github-issue:`355` Add document comments API [$50 US]
|
||||||
|
* :gitlab-issue:`321` Transition ACLS
|
||||||
|
* :gitlab-issue:`357` It should be possible to retrieve all workflows for a given DocumentType from the API
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,40 +1,45 @@
|
|||||||
===============================
|
Version 2.1.2
|
||||||
Mayan EDMS v2.1.2 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: May 20, 2016
|
Released: May 20, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bugfix release and all users are encouraged to upgrade.
|
This is a bugfix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
Language list sorting
|
Language list sorting
|
||||||
---------------------
|
^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
The document language list and the user locale profile language list are now
|
The document language list and the user locale profile language list are now
|
||||||
sorted to make it easier to find the desired language.
|
sorted to make it easier to find the desired language.
|
||||||
|
|
||||||
|
|
||||||
Fixed the metadata lookup options: {{ users }} and {{ groups }}
|
Fixed the metadata lookup options: {{ users }} and {{ groups }}
|
||||||
---------------------------------------------------------------
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
When configuring metadata type lookup options the {{ 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.
|
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.
|
These options where producing a list in the wrong format and were updated.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
-------------
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Add Makefile for common development tasks
|
- Add Makefile for common development tasks
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -42,8 +47,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -57,8 +63,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -72,15 +79,15 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
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
|
|
||||||
|
|
||||||
|
* :gitlab-issue:`290` Unicode characters not supported as metadata values
|
||||||
|
* :gitlab-issue:`292` Sort languages by name not by abbreviation
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,24 +1,26 @@
|
|||||||
===============================
|
Version 2.1.3
|
||||||
Mayan EDMS v2.1.3 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: June 29, 2016
|
Released: June 29, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
This is a bug-fix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
Temporary files cleanup
|
Temporary files cleanup
|
||||||
-----------------------
|
^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
||||||
When uploading PDF files that had been OCRed by previous software, the text
|
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
|
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
|
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
|
system check has been devised that will identify places in the codebase with
|
||||||
similar behaviors, reducing the recurrence of similar issues in the future.
|
similar behaviors, reducing the recurrence of similar issues in the future.
|
||||||
|
|
||||||
|
|
||||||
Other changes
|
Other changes
|
||||||
-------------
|
^^^^^^^^^^^^^
|
||||||
|
|
||||||
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296
|
- Add help message when initialsetup migration phase fails. Relates to GitLab issue #296
|
||||||
- Start using self.setdout instead of print as per documentation.
|
- 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".
|
- Fix GitLab issue #295, "When editing a user the top bar jumps to the name of the user".
|
||||||
@@ -27,15 +29,18 @@ Other changes
|
|||||||
- Add missing temporary file cleanup for office documents.
|
- Add missing temporary file cleanup for office documents.
|
||||||
- Fix file descriptor leak in the document signature download test.
|
- Fix file descriptor leak in the document signature download test.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -43,8 +48,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -58,8 +64,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -73,15 +80,16 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* 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
|
Bugs fixed or issues closed
|
||||||
* `GitLab issue #309 <https://gitlab.com/mayan-edms/mayan-edms/issues/309>`_ Temp files quickly filling-up my /tmp (1GB tmpfs)
|
---------------------------
|
||||||
|
|
||||||
|
* :gitlab-issue:`295` When editing a user the top bar jumps to the name of the user
|
||||||
|
* :gitlab-issue:`309` Temp files quickly filling-up my /tmp (1GB tmpfs)
|
||||||
|
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,16 +1,13 @@
|
|||||||
===============================
|
Version 2.1.4
|
||||||
Mayan EDMS v2.1.4 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: October 28, 2016
|
Released: October 28, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
This is a bug-fix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
Other changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Fix statistics namespace list display view
|
- Fix statistics namespace list display view
|
||||||
- Fix events list display view
|
- Fix events list display view
|
||||||
- Update required Django version to 1.8.15
|
- Update required Django version to 1.8.15
|
||||||
@@ -21,15 +18,18 @@ Other changes
|
|||||||
- New GPG backend system
|
- New GPG backend system
|
||||||
- Minor documentation updates
|
- Minor documentation updates
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -37,8 +37,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -52,8 +53,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -67,15 +69,16 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
|
||||||
===========================
|
|
||||||
|
|
||||||
* `GitLab issue #311 <https://gitlab.com/mayan-edms/mayan-edms/issues/311>`_ acl page return ContentType:Document
|
Bugs fixed or issues closed
|
||||||
* `GitLab issue #316 <https://gitlab.com/mayan-edms/mayan-edms/issues/316>`_ Error when trying to access the statistics
|
---------------------------
|
||||||
* `GitLab issue #324 <https://gitlab.com/mayan-edms/mayan-edms/issues/324>`_ Document signature tests fail in Ubuntu 16.10
|
|
||||||
|
* :gitlab-issue:`311` acl page return ContentType:Document
|
||||||
|
* :gitlab-issue:`316` Error when trying to access the statistics
|
||||||
|
* :gitlab-issue:`324` Document signature tests fail in Ubuntu 16.10
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,16 +1,12 @@
|
|||||||
===============================
|
Version 2.1.5
|
||||||
Mayan EDMS v2.1.5 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: November 8, 2016
|
Released: November 8, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
This is a bug-fix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
Other changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Backport resize transformation math operation fix (GitLab #319).
|
- Backport resize transformation math operation fix (GitLab #319).
|
||||||
- Update Pillow to 3.1.2
|
- Update Pillow to 3.1.2
|
||||||
@@ -24,15 +20,18 @@ Other changes
|
|||||||
- Fix ACL create view HTML response type. (GitLab #335).
|
- Fix ACL create view HTML response type. (GitLab #335).
|
||||||
- Expland staging folder and watch folder explanation.
|
- Expland staging folder and watch folder explanation.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -40,8 +39,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -55,8 +55,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -70,18 +71,18 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* `GitLab issue #319 <https://gitlab.com/mayan-edms/mayan-edms/issues/319>`_ TransformationResize issue with very "long" image
|
|
||||||
* `GitLab issue #331 <https://gitlab.com/mayan-edms/mayan-edms/issues/331>`_ Trash List View: Items actions should be limited
|
|
||||||
* `GitLab issue #333 <https://gitlab.com/mayan-edms/mayan-edms/issues/333>`_ "Unable to run gpg - it may not be available."
|
|
||||||
* `GitLab issue #334 <https://gitlab.com/mayan-edms/mayan-edms/issues/334>`_ Perfomance improvment: prevent unnecessary image.resize in TransformationZoom
|
|
||||||
* `GitLab issue #335 <https://gitlab.com/mayan-edms/mayan-edms/issues/335>`_ Wrong HTML Content-Type in ACL->NEW
|
|
||||||
|
|
||||||
|
* :gitlab-issue:`319` TransformationResize issue with very "long" image
|
||||||
|
* :gitlab-issue:`331` Trash List View: Items actions should be limited
|
||||||
|
* :gitlab-issue:`333` "Unable to run gpg - it may not be available."
|
||||||
|
* :gitlab-issue:`334` Perfomance improvment: prevent unnecessary image.resize in TransformationZoom
|
||||||
|
* :gitlab-issue:`335` Wrong HTML Content-Type in ACL->NEW
|
||||||
|
|
||||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||||
|
|||||||
@@ -1,29 +1,28 @@
|
|||||||
===============================
|
Version 2.1.6
|
||||||
Mayan EDMS v2.1.6 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: November 23, 2016
|
Released: November 23, 2016
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade.
|
This is a bug-fix release and all users are encouraged to upgrade.
|
||||||
|
|
||||||
Changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Fix variable name typo in the rotation transformation class.
|
- Fix variable name typo in the rotation transformation class.
|
||||||
- Update translations
|
- Update translations
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -31,8 +30,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -46,8 +46,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -61,12 +62,13 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,13 @@
|
|||||||
===============================
|
Version 2.1.7
|
||||||
Mayan EDMS v2.1.7 release notes
|
=============
|
||||||
===============================
|
|
||||||
|
|
||||||
Released: February 2, 2017
|
Released: February 2, 2017
|
||||||
|
|
||||||
What's new
|
|
||||||
==========
|
|
||||||
|
|
||||||
This is a bug-fix release and all users are encouraged to upgrade. The focus
|
This is a bug-fix release and all users are encouraged to upgrade. The focus
|
||||||
of this micro release was REST API improvement.
|
of this micro release was REST API improvement.
|
||||||
|
|
||||||
Changes
|
Changes
|
||||||
-------------
|
-------
|
||||||
|
|
||||||
- Improved user management API endpoints (initial work by @lokeshmanmode):
|
- Improved user management API endpoints (initial work by @lokeshmanmode):
|
||||||
|
|
||||||
@@ -44,15 +40,18 @@ Changes
|
|||||||
- The parser and validation fields of the metadata type model have been enable
|
- The parser and validation fields of the metadata type model have been enable
|
||||||
in the metadata type API serializer.
|
in the metadata type API serializer.
|
||||||
|
|
||||||
|
|
||||||
Removals
|
Removals
|
||||||
--------
|
--------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Upgrading from a previous version
|
Upgrading from a previous version
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Using PIP
|
Using PIP
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
Type in the console::
|
Type in the console::
|
||||||
|
|
||||||
@@ -60,8 +59,9 @@ Type in the console::
|
|||||||
|
|
||||||
the requirements will also be updated automatically.
|
the requirements will also be updated automatically.
|
||||||
|
|
||||||
|
|
||||||
Using Git
|
Using Git
|
||||||
~~~~~~~~~
|
^^^^^^^^^
|
||||||
|
|
||||||
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::
|
||||||
|
|
||||||
@@ -75,8 +75,9 @@ Next upgrade/add the new requirements::
|
|||||||
|
|
||||||
$ pip install --upgrade -r requirements.txt
|
$ pip install --upgrade -r requirements.txt
|
||||||
|
|
||||||
|
|
||||||
Common steps
|
Common steps
|
||||||
~~~~~~~~~~~~
|
^^^^^^^^^^^^
|
||||||
|
|
||||||
Migrate existing database schema with::
|
Migrate existing database schema with::
|
||||||
|
|
||||||
@@ -90,12 +91,13 @@ The upgrade procedure is now complete.
|
|||||||
|
|
||||||
|
|
||||||
Backward incompatible changes
|
Backward incompatible changes
|
||||||
=============================
|
-----------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|
||||||
Bugs fixed or issues closed
|
Bugs fixed or issues closed
|
||||||
===========================
|
---------------------------
|
||||||
|
|
||||||
* None
|
* None
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user