Merge branch 'development'
Conflicts: docs/credits/contributors.rst docs/index.rst docs/intro/installation.rst mayan/apps/converter/templates/converter_file_formats_help.html mayan/apps/document_indexing/templates/indexing_help.html mayan/apps/documents/templates/document_types_help.html mayan/apps/documents/templates/recent_document_list_help.html mayan/apps/dynamic_search/templates/search_help.html mayan/apps/folders/templates/folders_help.html mayan/apps/linking/templates/smart_links_help.html mayan/apps/metadata/templates/metadata_set_help.html mayan/apps/metadata/templates/metadata_type_help.html
3
.gitignore
vendored
@@ -20,4 +20,5 @@ gpg_home/
|
||||
.idea/
|
||||
static_collected/
|
||||
*egg-info*
|
||||
mayan/settings/local.py
|
||||
mayan/settings/local.py
|
||||
.vagrant
|
||||
|
||||
19
.travis.yml
@@ -1,19 +1,34 @@
|
||||
language: python
|
||||
python:
|
||||
- 2.7
|
||||
- 2.6
|
||||
- 2.7
|
||||
env:
|
||||
global:
|
||||
- TEST_APPS="document_indexing documents dynamic_search lock_manager document_signatures folders ocr tags"
|
||||
matrix:
|
||||
- DB=mysql
|
||||
- DB=postgres
|
||||
- DB=sqlite
|
||||
before_install:
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq python-dev gcc tesseract-ocr unpaper ghostscript libjpeg-dev libpng-dev poppler-utils
|
||||
install:
|
||||
- "pip install -r requirements/testing.txt"
|
||||
- if [[ $DB == mysql ]]; then pip install -q mysql-python; fi
|
||||
- if [[ $DB == postgres ]]; then pip install -q psycopg2; fi
|
||||
before_script:
|
||||
- mysql -e 'create database mayan_edms;'
|
||||
- psql -c 'create database mayan_edms;' -U postgres
|
||||
script:
|
||||
- coverage run --source=documents,document_signatures,lock_manager,folders,ocr,tags manage.py test documents lock_manager document_signatures folders ocr tags
|
||||
- if [[ $DB == mysql ]]; then coverage run manage.py test $TEST_APPS --settings=mayan.settings.travis.db_mysql; fi
|
||||
- if [[ $DB == postgres ]]; then coverage run manage.py test $TEST_APPS --settings=mayan.settings.travis.db_postgres; fi
|
||||
- if [[ $DB == sqlite ]]; then coverage run manage.py test $TEST_APPS --settings=mayan.settings.travis.base; fi
|
||||
after_success:
|
||||
- coveralls
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
- development
|
||||
notifications:
|
||||
email:
|
||||
recipients:
|
||||
|
||||
42
.tx/config
@@ -7,12 +7,6 @@ source_lang = en
|
||||
source_file = mayan/apps/acls/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-bootstrap]
|
||||
file_filter = mayan/apps/bootstrap/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/bootstrap/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-checkouts]
|
||||
file_filter = mayan/apps/checkouts/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
@@ -61,24 +55,30 @@ source_lang = en
|
||||
source_file = mayan/apps/document_signatures/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-document_states]
|
||||
file_filter = mayan/apps/document_states/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/document_states/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-dynamic_search]
|
||||
file_filter = mayan/apps/dynamic_search/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/dynamic_search/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-events]
|
||||
file_filter = mayan/apps/events/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/events/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-folders]
|
||||
file_filter = mayan/apps/folders/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/folders/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-history]
|
||||
file_filter = mayan/apps/history/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/history/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-installation]
|
||||
file_filter = mayan/apps/installation/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
@@ -91,6 +91,12 @@ source_lang = en
|
||||
source_file = mayan/apps/linking/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-mailer]
|
||||
file_filter = mayan/apps/mailer/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/mailer/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-main]
|
||||
file_filter = mayan/apps/main/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
@@ -139,10 +145,10 @@ source_lang = en
|
||||
source_file = mayan/apps/registration/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-scheduler]
|
||||
file_filter = mayan/apps/scheduler/locale/<lang>/LC_MESSAGES/django.po
|
||||
[mayan-edms.apps-rest_api]
|
||||
file_filter = mayan/apps/rest_api/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/scheduler/locale/en/LC_MESSAGES/django.po
|
||||
source_file = mayan/apps/rest_api/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-smart_settings]
|
||||
@@ -175,8 +181,4 @@ source_lang = en
|
||||
source_file = mayan/apps/user_management/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
[mayan-edms.apps-web_theme]
|
||||
file_filter = mayan/apps/web_theme/locale/<lang>/LC_MESSAGES/django.po
|
||||
source_lang = en
|
||||
source_file = mayan/apps/web_theme/locale/en/LC_MESSAGES/django.po
|
||||
type = PO
|
||||
|
||||
|
||||
29
HISTORY.rst
@@ -1,3 +1,32 @@
|
||||
1.1 (2015-02-10)
|
||||
================
|
||||
|
||||
- Uses Celery for backgroung 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. Tested againsta SQLite, MySQL, PostgreSQL
|
||||
- Many new REST API endpoints added
|
||||
- Simplfied 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
|
||||
|
||||
|
||||
For a full changelog and release notes go to: http://mayan.readthedocs.org/en/latest/releases/1.1.html
|
||||
|
||||
|
||||
1.0 (2014-08-27)
|
||||
================
|
||||
|
||||
|
||||
@@ -50,9 +50,9 @@ Contribute
|
||||
----------
|
||||
|
||||
- Check for open issues or open a fresh issue to start a discussion around a feature idea or a bug.
|
||||
- Fork `the repository`_ on GitHub to start making your changes to the **master** branch (or branch off of it).
|
||||
- Fork `the repository`_ on GitHub to start making your changes to the **development** branch (or branch off of it).
|
||||
- Write a test which shows that the bug was fixed or that the feature works as expected.
|
||||
- Make sure to add yourself to the `contributors file`_.
|
||||
- Add yourself to the `contributors file`_.
|
||||
- Send a pull request
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ Contribute
|
||||
.. _Mailing list (via Google Groups): http://groups.google.com/group/mayan-edms
|
||||
.. _Apache 2.0 License: https://www.apache.org/licenses/LICENSE-2.0.txt
|
||||
.. _`the repository`: http://github.com/mayan-edms/mayan-edms
|
||||
.. _`contributors file`: https://github.com/mayan-edms/mayan-edms/blob/master/docs/credits/contributors.rst
|
||||
.. _`contributors file`: https://github.com/mayan-edms/mayan-edms/blob/master/docs/topics/contributors.rst
|
||||
|
||||
.. |Build Status| image:: http://img.shields.io/travis/mayan-edms/mayan-edms/master.svg?style=flat
|
||||
:target: https://travis-ci.org/mayan-edms/mayan-edms
|
||||
|
||||
12
Vagrantfile
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
# -*- mode: ruby -*-
|
||||
# vi: set ft=ruby :
|
||||
|
||||
Vagrant.configure(2) do |config|
|
||||
config.vm.box = "ubuntu/trusty32"
|
||||
config.vm.network "forwarded_port", guest: 8000, host: 8000
|
||||
config.vm.synced_folder ".", "/mayan-edms-repository"
|
||||
config.vm.provision :shell, :path => "contrib/scripts/install/development.sh", privileged: false
|
||||
|
||||
config.vm.provision "file", destination: "/home/vagrant/mayan-edms/mayan/settings/celery_redis.py", source: "contrib/configs/celery_redis.py"
|
||||
config.vm.provision "file", destination: "/home/vagrant/mayan-edms/mayan_edms_worker.sh", source: "contrib/misc/mayan_edms_worker.sh"
|
||||
end
|
||||
@@ -1,20 +1,19 @@
|
||||
<VirtualHost *:80>
|
||||
# Uncomment if libapache2-mod-xsendfile is installed
|
||||
# XSendFile On
|
||||
# XSendFileAllowAbove On
|
||||
# Uncomment if libapache2-mod-xsendfile is installed
|
||||
# XSendFile On
|
||||
# XSendFileAllowAbove On
|
||||
ServerName mayan.yoursite.com
|
||||
ServerAdmin admin@yoursite.com
|
||||
DocumentRoot /var/www/mayan-edms
|
||||
WSGIScriptAlias / /var/www/mayan-edms/mayan/mayan-edms.wsgi
|
||||
|
||||
WSGIScriptAlias / /usr/share/mayan/mayan/wsgi/dispatch.wsgi
|
||||
|
||||
<Directory /usr/share/mayan/mayan>
|
||||
Order deny,allow
|
||||
Allow from all
|
||||
</Directory>
|
||||
ErrorLog /var/log/apache2/mayan_error.log
|
||||
LogLevel warn
|
||||
CustomLog /var/log/apache2/mayan_access.log combined
|
||||
|
||||
Alias /mayan-static "/usr/share/mayan/mayan/static/"
|
||||
<Location "/static">
|
||||
SetHandler None
|
||||
</Location>
|
||||
<Directory /var/www/mayan-edms>
|
||||
Order allow,deny
|
||||
Allow from all
|
||||
</Directory>
|
||||
|
||||
Alias /static /var/www/mayan-edms/media/static
|
||||
<Location "/static">
|
||||
SetHandler None
|
||||
</Location>
|
||||
</VirtualHost>
|
||||
|
||||
14
contrib/apache/mayan-edms.wsgi
Normal file
@@ -0,0 +1,14 @@
|
||||
# sample wsgi file for usage with apache webserver
|
||||
# mayan installation in a virtualenv /opt/mayan/venv
|
||||
# apache deployment in /var/www/mayan-edms
|
||||
import os
|
||||
import sys
|
||||
import site
|
||||
# set up python path to virtual environment
|
||||
site.addsitedir(‘/opt/mayan/venv/lib/python2.7/site-packages’)
|
||||
sys.path.append(‘/var/www/mayan-edms’)
|
||||
os.environ[‘PYTHON_EGG_CACHE’]=’/var/www/django/cache’
|
||||
#django WSGI specifics
|
||||
From django.core.handlers.wsgi import WSGIHandler
|
||||
os.environ[‘DJANGO_SETTING_MODULE’] = ‘mayan.settings.production’
|
||||
application = WSGIHandler()
|
||||
5
contrib/configs/celery_redis.py
Normal file
@@ -0,0 +1,5 @@
|
||||
from .local import *
|
||||
|
||||
CELERY_ALWAYS_EAGER = False
|
||||
BROKER_URL = 'redis://127.0.0.1:6379/0'
|
||||
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379/0'
|
||||
3
contrib/misc/mayan_edms_worker.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!/bin/sh
|
||||
|
||||
DJANGO_SETTINGS_MODULE='mayan.settings.celery_redis' celery -A mayan worker -l DEBUG -Q checkouts,mailing,uploads,converter,ocr,tools,indexing,metadata -Ofair -B
|
||||
19
contrib/nginx/mayan_uwsgi.conf
Normal file
@@ -0,0 +1,19 @@
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80 ipv6only=on;
|
||||
server_name mayan;
|
||||
access_log /var/log/nginx/access_mayan.log;
|
||||
error_log /var/log/nginx/error_mayan.log;
|
||||
|
||||
location / {
|
||||
uwsgi_pass unix:///run/uwsgi/app/mayan/socket;
|
||||
include uwsgi_params;
|
||||
uwsgi_param UWSGI_SCHEME $scheme;
|
||||
uwsgi_param SERVER_SOFTWARE nginx/$nginx_version;
|
||||
}
|
||||
|
||||
location /static/ {
|
||||
root /srv/mayan/projects/mayan/mayan-edms/mayan/media/;
|
||||
}
|
||||
|
||||
}
|
||||
1
contrib/scripts/PEP8_check.sh
Executable file
@@ -0,0 +1 @@
|
||||
flake8 --ignore=E501 mayan/apps | grep -v "F401 'models' imported but unused" | grep -v "F811 redefinition of unused 'models'"| grep -v "F401 'db' imported but unused" | grep -v "F812 list comprehension redefines 'user_id'" | grep -v "F812 list comprehension redefines 'document_id'" |less
|
||||
72
contrib/scripts/install/development.sh
Normal file
@@ -0,0 +1,72 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
INSTALLATION_DIRECTORY=/home/vagrant/mayan-edms/
|
||||
DB_NAME=mayan_edms
|
||||
DB_PASSWORD=test123
|
||||
|
||||
cat << EOF | sudo tee -a /etc/motd.tail
|
||||
**********************************sudo apt
|
||||
|
||||
Mayan EDMS Vagrant Development Box
|
||||
|
||||
**********************************
|
||||
EOF
|
||||
|
||||
# Update sources
|
||||
echo -e "\n -> Running apt-get update & upgrade \n"
|
||||
sudo apt-get -qq update
|
||||
sudo apt-get -y upgrade
|
||||
|
||||
echo -e "\n -> Installing core binaries \n"
|
||||
sudo apt-get -y install git-core python-virtualenv gcc python-dev libjpeg-dev libpng-dev libtiff-dev tesseract-ocr poppler-utils unpaper libreoffice
|
||||
|
||||
echo -e "\n -> Cloning development branch of repository \n"
|
||||
git clone /mayan-edms-repository/ $INSTALLATION_DIRECTORY
|
||||
cd $INSTALLATION_DIRECTORY
|
||||
git checkout development
|
||||
git reset HEAD --hard
|
||||
|
||||
echo -e "\n -> Setting up virtual env \n"
|
||||
virtualenv venv
|
||||
source venv/bin/activate
|
||||
|
||||
echo -e "\n -> Installing python dependencies \n"
|
||||
pip install -r requirements.txt
|
||||
|
||||
echo -e "\n -> Running Mayan EDMS initial setup \n"
|
||||
./manage.py initialsetup
|
||||
|
||||
echo -e "\n -> Installing Redis server \n"
|
||||
sudo apt-get install -y redis-server
|
||||
pip install redis
|
||||
|
||||
echo -e "\n -> Installing testing software \n"
|
||||
pip install coverage
|
||||
|
||||
echo -e "\n -> Installing MySQL \n"
|
||||
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password '$DB_PASSWORD
|
||||
sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password '$DB_PASSWORD
|
||||
sudo apt-get install -y mysql-server libmysqlclient-dev
|
||||
# Create a passwordless root and travis users
|
||||
mysql -u root -p$DB_PASSWORD -e "SET PASSWORD = PASSWORD('');"
|
||||
mysql -u root -e "CREATE USER 'travis'@'localhost' IDENTIFIED BY '';GRANT ALL PRIVILEGES ON * . * TO 'travis'@'localhost';FLUSH PRIVILEGES;"
|
||||
mysql -u travis -e "CREATE DATABASE $DB_NAME;"
|
||||
pip install mysql-python
|
||||
|
||||
echo -e "\n -> Installing PostgreSQL \n"
|
||||
sudo apt-get install -y postgresql postgresql-server-dev-all
|
||||
sudo -u postgres psql -c 'create database mayan_edms;' -U postgres
|
||||
sudo cat > /etc/postgresql/9.3/main/pg_hba.conf << EOF
|
||||
local all postgres trust
|
||||
|
||||
# TYPE DATABASE USER ADDRESS METHOD
|
||||
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all all peer
|
||||
# IPv4 local connections:
|
||||
host all all 127.0.0.1/32 md5
|
||||
# IPv6 local connections:
|
||||
host all all ::1/128 md5
|
||||
EOF
|
||||
|
||||
pip install -q psycopg2
|
||||
@@ -6,12 +6,11 @@ import optparse
|
||||
import sh
|
||||
|
||||
APP_LIST = ('acls', 'checkouts', 'common', 'converter', 'django_gpg', 'documents',
|
||||
'document_comments', 'document_indexing', 'document_signatures', 'dynamic_search',
|
||||
'folders', 'history', 'installation', 'linking', 'main', 'metadata', 'navigation',
|
||||
'ocr', 'permissions', 'project_setup', 'project_tools', 'scheduler', 'smart_settings',
|
||||
'sources', 'tags', 'user_management', 'web_theme', 'bootstrap',
|
||||
'registration', 'statistics')
|
||||
LANGUAGE_LIST = ('ar', 'bg', 'bs_BA', 'da', 'de_DE', 'en', 'es', 'fa', 'fr', 'hu', 'hr_HR', 'id', 'it', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'tr_TR', 'vi_VN', 'zh-cn')
|
||||
'document_comments', 'document_indexing', 'document_signatures', 'document_states', 'dynamic_search',
|
||||
'events', 'folders', 'installation', 'linking', 'mailer', 'main', 'metadata', 'navigation',
|
||||
'ocr', 'permissions', 'project_setup', 'project_tools', 'registration', 'rest_api',
|
||||
'smart_settings', 'sources', 'statistics', 'tags', 'user_management')
|
||||
LANGUAGE_LIST = ('ar', 'bg', 'bs_BA', 'da', 'de_CH', 'de_DE', 'en', 'es', 'fa', 'fr', 'hu', 'hr_HR', 'id', 'it', 'lv', 'nb', 'nl_NL', 'pl', 'pt', 'pt_BR', 'ro_RO', 'ru', 'sl_SI', 'sq', 'tr_TR', 'vi_VN', 'zh_CN', 'zh_TW')
|
||||
|
||||
makemessages = sh.Command('django-admin.py')
|
||||
makemessages = makemessages.bake('makemessages')
|
||||
|
||||
14
contrib/uwsgi/mayan.ini
Normal file
@@ -0,0 +1,14 @@
|
||||
# Sample file for uswgi with mayan installed in a virtualenv mayan
|
||||
# with project directory mayan e.g. for use with nginx connecting via
|
||||
# local unix socket
|
||||
[uwsgi]
|
||||
#socket = 127.0.0.1:3031
|
||||
plugin = python
|
||||
chdir = /srv/mayan/projects/mayan/mayan-edms
|
||||
virtualenv = /srv/mayan/.virtualenvs/mayan
|
||||
env = DJANGO_SETTINGS_MODULE=mayan.settings.production
|
||||
module = django.core.handlers.wsgi:WSGIHandler()
|
||||
processes = 4
|
||||
threads = 2
|
||||
stats = :9191
|
||||
buffer-size=32768
|
||||
BIN
docs/_static/ACL.png
vendored
|
Before Width: | Height: | Size: 37 KiB |
BIN
docs/_static/arrow_right.png
vendored
|
Before Width: | Height: | Size: 577 B |
BIN
docs/_static/bootstrap_button.png
vendored
|
Before Width: | Height: | Size: 2.8 KiB |
BIN
docs/_static/document_types_button.png
vendored
|
Before Width: | Height: | Size: 2.8 KiB |
BIN
docs/_static/documents_tab.png
vendored
|
Before Width: | Height: | Size: 2.1 KiB |
BIN
docs/_static/index_instance.png
vendored
|
Before Width: | Height: | Size: 72 KiB |
BIN
docs/_static/index_tab.png
vendored
|
Before Width: | Height: | Size: 1.4 KiB |
BIN
docs/_static/index_template.png
vendored
|
Before Width: | Height: | Size: 17 KiB |
BIN
docs/_static/indexes.png
vendored
|
Before Width: | Height: | Size: 71 KiB |
BIN
docs/_static/indexes_button.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
docs/_static/mayan-login.png
vendored
|
Before Width: | Height: | Size: 79 KiB |
BIN
docs/_static/mayan_architecture.png
vendored
|
Before Width: | Height: | Size: 74 KiB |
BIN
docs/_static/metadata_types_button.png
vendored
|
Before Width: | Height: | Size: 2.8 KiB |
BIN
docs/_static/no-icons.png
vendored
|
Before Width: | Height: | Size: 119 KiB |
BIN
docs/_static/ocr_button.png
vendored
|
Before Width: | Height: | Size: 2.6 KiB |
BIN
docs/_static/permissions.png
vendored
|
Before Width: | Height: | Size: 20 KiB |
BIN
docs/_static/screenshots/smart_links_screenshot.png
vendored
|
Before Width: | Height: | Size: 90 KiB |
BIN
docs/_static/screenshots/tags_screenshot.png
vendored
|
Before Width: | Height: | Size: 69 KiB |
BIN
docs/_static/setup_tab.png
vendored
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
docs/_static/smart_links_button.png
vendored
|
Before Width: | Height: | Size: 2.7 KiB |
BIN
docs/_static/smart_links_link.png
vendored
|
Before Width: | Height: | Size: 1.8 KiB |
BIN
docs/_static/sources_button.png
vendored
|
Before Width: | Height: | Size: 2.4 KiB |
BIN
docs/_static/tags_link.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
docs/_static/tags_tab.png
vendored
|
Before Width: | Height: | Size: 1.6 KiB |
BIN
docs/_static/themes.png
vendored
|
Before Width: | Height: | Size: 149 KiB |
BIN
docs/_static/tools_tab.png
vendored
|
Before Width: | Height: | Size: 1.3 KiB |
BIN
docs/_static/tree_template_link.png
vendored
|
Before Width: | Height: | Size: 1.1 KiB |
BIN
docs/_static/versioning.png
vendored
|
Before Width: | Height: | Size: 14 KiB |
BIN
docs/_static/web_form_source_tab.png
vendored
|
Before Width: | Height: | Size: 2.3 KiB |
@@ -1,8 +1,8 @@
|
||||
.. _contents:
|
||||
|
||||
=================================
|
||||
Mayan EDMS documentation contents
|
||||
=================================
|
||||
========
|
||||
Contents
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:hidden:
|
||||
@@ -12,8 +12,5 @@ Mayan EDMS documentation contents
|
||||
.. toctree::
|
||||
:maxdepth: 3
|
||||
|
||||
intro/index
|
||||
topics/index
|
||||
credits/index
|
||||
releases/index
|
||||
faq/index
|
||||
|
||||
@@ -1,92 +0,0 @@
|
||||
.. _contributors:
|
||||
|
||||
============
|
||||
Contributors
|
||||
============
|
||||
|
||||
|
||||
How to contribute?
|
||||
------------------
|
||||
|
||||
You can help further the development of **Mayan EDMS** by reporting bugs, submitting documentation, patches, with monetary or hardware donations.
|
||||
|
||||
Lead developer
|
||||
--------------
|
||||
* Roberto Rosario (roberto.rosario@mayan-edms.com) <https://twitter.com/siloraptor>
|
||||
|
||||
Contributors (in alphabetical order)
|
||||
------------------------------------
|
||||
* Aziz M. Bookwala (https://github.com/azizmb)
|
||||
* Bertrand Bordage (https://github.com/BertrandBordage)
|
||||
* Brian E (brian@realize.org)
|
||||
* David Herring (https://github.com/abadger1406)
|
||||
* Emlyn Clay (https://github.com/EmlynC)
|
||||
* Jens Kadenbach (https://github.com/audax)
|
||||
* Kolmar Kafran
|
||||
* IHLeanne (https://github.com/IHLeanne)
|
||||
* Iliya Georgiev (ikgeorgiev@gmail.com)
|
||||
* Lars Kruse (devel@sumpfralle.de)
|
||||
* Mathias Behrle <mbehrle@m9s.biz>
|
||||
* Meurig Freeman (https://github.com/meurig)
|
||||
* Nate Aune (nate@appsembler.com)
|
||||
* Paul Whipp [https://github.com/pwhipp] [http://paulwhippconsulting.com]
|
||||
* Rafael Esparra <rafael.esparra1@upr.edu>
|
||||
* Sergey Glita (s.v.glita@gmail.com)
|
||||
* Simone Federici [https://twitter.com/aldaranalton] [https://github.com/simone]
|
||||
* Webfaction (https://www.webfaction.com)
|
||||
|
||||
Translations
|
||||
------------
|
||||
* Bulgarian
|
||||
|
||||
- Iliya Georgiev (ikgeorgiev@gmail.com)
|
||||
- Pavlin Koldamov (pkoldamov@gmail.com)
|
||||
|
||||
* Dutch (Netherlands)
|
||||
|
||||
- Lucas Weel
|
||||
|
||||
* French
|
||||
|
||||
- Pierre Lhoste (peter.cathbad.host@gmail.com)
|
||||
- PatrickHetu (patrick.hetu@gmail.com)
|
||||
|
||||
* German (Germany)
|
||||
|
||||
- Tetja Rediske (tetja.rediske@googlemail.com)
|
||||
- Tilmann Sittig (tilmann.sittig@web.de)
|
||||
- Manticor (sl@suchreflex.de)
|
||||
- Mathias Behrle <mbehrle@m9s.biz>
|
||||
- Tobias Paepke <https://twitter.com/paepke_net>
|
||||
|
||||
* Italian
|
||||
|
||||
- Pierpaolo Baldan (pierpaolo.baldan@gmail.com)
|
||||
- SeeOpen.IT (Numero Verde: 800.910.125, E-mail: sales@seeopen.it)
|
||||
- Carlo Zanatto
|
||||
|
||||
* Polish
|
||||
|
||||
- mic (diveaway12@gmail.com, winterfall24@gmail.com)
|
||||
|
||||
* Portuguese
|
||||
|
||||
- Vítor Figueiró (vfigueiro@gmail.com)
|
||||
|
||||
* Portuguese (Brazil)
|
||||
|
||||
- Emerson Soares (dev.emerson@gmail.com)
|
||||
- Renata Oliveira (renatabels@gmail.com)
|
||||
- Fábio (bnafta@gmail.com)
|
||||
|
||||
* Russian
|
||||
|
||||
- Sergey Glita (s.v.glita@gmail.com)
|
||||
|
||||
* Slovenian (Slovenia)
|
||||
|
||||
- kontrabant (kontrabant@gmail.com)
|
||||
|
||||
* Spanish
|
||||
|
||||
- Roberto Rosario
|
||||
@@ -1,11 +0,0 @@
|
||||
Credits
|
||||
=======
|
||||
|
||||
Here we list everything and everybody that has made his/her/its part in improving
|
||||
**Mayan EDMS**
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
contributors
|
||||
license
|
||||
|
Before Width: | Height: | Size: 36 KiB |
|
Before Width: | Height: | Size: 53 KiB |
@@ -1,204 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="279.54614"
|
||||
height="399.96887"
|
||||
id="svg4808"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.2 r9819"
|
||||
sodipodi:docname="index_template.svg"
|
||||
inkscape:export-filename="/home/rosarior/development/mayan/mayan/docs/topics/index_template.png"
|
||||
inkscape:export-xdpi="100"
|
||||
inkscape:export-ydpi="100">
|
||||
<defs
|
||||
id="defs4810" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.98994949"
|
||||
inkscape:cx="-9.6370916"
|
||||
inkscape:cy="270.24135"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-right="5"
|
||||
fit-margin-bottom="5"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata4813">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-211.6555,-315.23489)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.09787233;fill-rule:nonzero;stroke:none"
|
||||
id="rect3396"
|
||||
width="269.54614"
|
||||
height="368.70569"
|
||||
x="216.6555"
|
||||
y="341.49808"
|
||||
rx="6.2500043"
|
||||
ry="2.6675141" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 279.8408,414.17828 0,19.15838"
|
||||
id="path3933"
|
||||
inkscape:connector-curvature="0" />
|
||||
<image
|
||||
y="384.87115"
|
||||
x="263.04108"
|
||||
id="image3004"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAdpJREFU WIXt179rE2Ecx/H3c/fcXS6Xpg0aWx1a3NxFsDHi0lGjSOMiuHXwH1BwFgdHERycu4RYLIhUx7Yu xcHRTeig9Qe2NL2eprnn6xAb8qOL5EgH7wPHcdwDn9fzPDwHp0SE44x1rO0pIAWkgBQAqL5n68qD 2lW8XN3TtnOmOM6wX0qF4udexE4jOqC5N7/66NYrwBwFsC7fW7zuT5xcunvjEtNTAVu7Q3V3MpWH za2QZy/fEe38uLn2+PbyIUJ3jfPs7ERtoVLic9OnvtZAqcEl+tcIIAKlmYCFayWevlitAXkg6gf4 RtCnJ3O8fd8g79EGDCkQaV8fvoTcOT+Gq7UG/KMAGuD7PgQO2AmUdyNiga+hMFkc7+nV/YONCFmX RJa/AwCMgIhBjOl51wsQwRhDxk3+fBogNkL/meoAZsrVgrZtWmLwneRmfxgBDIY4FqbL84XN9fo3 aPe4cw/f/D5VzFO+cI5sLkP4q5XY/ncAAkFGEzYi1jc+sr27z8r9OU8DgRGhWrlIs9kijg1uzk22 vSv+iTGqlVmWXm8ABBpwbEvx5PkKJhYGdynZKBSWpbBsC8BRQAE4+/c+ymwDnxTgAgHgjBhwAIQj 7hyMSv8LUkAK+O8BfwBPb5uGE8zc7AAAAABJRU5ErkJggg== "
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="456.70581"
|
||||
x="264.49216"
|
||||
id="image3015"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA8RJREFU WIXtl81rnFUUxn/n3HdmUhOoU7UtpeQLVASh0kTBlRRUlIjUvSiCC6Vx5T/gyk0WIlTalQtFoX5A lXZp46J+YD80atPWGDszTtLGTJLJTJJmZu57r4t3MplJJomRKdn0Wb+c5znPee659xXvPTsJ3VH2 uwIAAYJLx4+cNtgB7xzQLBOCqBISnOkbHH4JsK0SEAC7DHbg0BsfgrXgZQOZhpETr70A7AKKrRTQ 5p0DaylffRePqTLWIyTR9Qq2tMzl958siDQRuQlEDSHB2b7B4aOscS+osTmL1zhIDOoJPOBDXClH 37FP12vbkt1DEGPkxKsDNHEvWCWyoAHIqqaoAIBSyX0L0+eaEGxC7j1CSPyht4nyRdvGAigjoiDa pKqCmJWqDcyisokGHzXmF6p1138a1Iq5CqjZQMB6iEYnY2mmwOaRCDHZK4gI77z8SO+z/fs644Em +gfPfQ/4Ogcsohp1u4UAUUGNkro8xmzmJs2P7kprHuE3xCgvPpH8QaggKBePHznbPzh8tC4DYeQA CiI0NVZAEMQo6UvXoVKif/AjcHZTEY3wEIsxcvL1AWDX6gh8BcQgYhBjIluFdW6ICKmfruFtSOeh bsrXh9h4ga2Fw7R3wZ7nyRfLF4B43QhCVA1qYqQujpK7MYE0Lars6dxH12M9OOdBTTVfWwjwgLdo Ry+58QtcyS5+DYSNGQgM85M57PIij7/5HrhwjQMCKHbyFM5H00X/63XiwIPec5DC36c49sHvnwHL QU27D1ETMDc5TbL7UXxlCTt1moZQroxETDUn24Egif2E5ZDZ7Ng00T4orzqg0SLKZ6Y4cPhpWJ4A jVfP/1qq7a7DKkXbXnLjPzOanvsYKAEuqGoD8dyeXyDRESex+wB24Q/ExGnNjR3lQxMPUMyeZ+iL 8U+AZajfhBqS+ytLsvthEIe4QrSa/2e3jXBILImzFQqTN0qjmeI/RA5UBYiAQPFWjt6n+qE8E21E adV7xaGJJLPpq2SmF88QdR/WBIgIfimPLZVpu38/fmkKaVn3RHViHeQz5/nuWv5Lqt3XBCDCws1J dh/sAu/x3K7a3wp4JGgHF1KcSDH0+diPVOdfEyCqzKTS3NfzILCIBq3sHoi1M5/5k1v50jfAInWP ktoI8qkM3c8NQKkAQXvryAFiHcxn0vyaWviKqPva2hRg7y8nnxlXfIezFhc9HFoKEcGhhb63hg8D WeoyIMC9QA+QpKW+N8ADeSANzAG1LgWIAe1A/A6Rr6BMNP/KHebZHuTuz+lOC/gX/29g6TEI7HMA AAAASUVORK5CYII= "
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="530.59052"
|
||||
x="369.8649"
|
||||
id="image3048"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABLtJREFU WIXFl02MFEUYhp+vqnp2dpEfgSgYwi7qihgTRPQAeJDIAV1CIHDxojESIwEuevPiTRM5GKIGTNSD JiYkYBAhJGpEY/AggmxiZAkSh7/FZQd2dti/memu8lA9vzuzM6yb+CZ96O6q+t7v/b5+q1qcc/yf EMCc+XD9EU3Y46wF6hESRCkizLHVu09uBcKZImCAdk3Ys/L1zyAMwUkDmpre/a9sAtqBOzNJIOms hTAkf/4dHDqOWImIts6XCHMTnN23JitSh+QUEKWJMMdX7z65hRr1TCmaDXEqARJAZQAHuAibS7N6 15eTuTWN7sAE9O5/uYc66plyoBCUASlz8gsAKArpH2Hwh7uM7hAiEt1v4vuLZGMC5BFRIIrJaSoQ XVq0glkTQRwQgs0WR04abkqL2QIo3YDAZIgSRARRU411CBrsWHVZJxMACBGlgOYERAlKK1JnL3L7 8g3ANorvScgplNGc3bd2wJNWpaas6IHIK4ACEaQeCQFBEK24fOYCFHI8tedzsCFMZWhVSzkIAnoP 7OgB2sslcAUQjYhGtPaK1SmbiJD6tQ8XRixd2UX+wl4aG1gtLHpWJ8x/nsyd/GkgUVGCCKU0Sgek fvuT9N/XkbqLKuYvvZ/OJ5ZhrQOlfdvgmnaOsyH6ngcZvHSaP66Ofg1E1T1gNMP9acKJUZ7e+T7Y qEYBARRh/0GsEx9SKQTQyqHENVbCgXMa6VhC9upBPv326jFgwlCc4iKUNgz1D3Jv1+O4whjhwBGq mrJYEtFxnxRd2pIPVdMqqORiTJgnc/3izd//Gk4D+bICKgSlyQ6keeDJDTBxHVQi/v5rxS3fizgI LCu/Wk9fuiNWrYaJCDhYvkj4ac0v9KXSXwDjgDV+OQFxjA+PEgSatrmLCUcuIjoRKzBFVsqBjui7 2YHbu37KsYfPZ9hx6Bzm52tHgAmo9AEVkbk2wLyu5SAOsVlvzU09wYFScebwzYV/SjMssHn5ImTP YW6/t5ltK+bB9lfZPvTwG5ze8iKl9ERAYOhKP/OXdUP+lndEFXgSzS4dlHyg3Wg6gvgysXpGkc2F DIzk2LZiHid2PrN1zltHDwHGl0AEN5YhzBVILlyEGxtAWsjeK+diA/NoCxQqtl1bNCcRxgohYMiM F9jYvQCr9SZKRiTCyI1+5i7pBOdwjMfytwDl4rE+WFIriucFa/2zFx69j8fe/d7XJLK4D7YRv0p6 BZTiVuoyC5Z1A6Mo02L2EO/35a5PGq+GAJH458dfWztpWnwWlVIJMqkrdG3sgVwWzKzWghcJBLl4 Fy0TAK9JX3qkauMWgUcWzCp9qAYgcnJHB8Hs3o8PYG2Dna0BNI45agzMKgASWuEo61flCK5iV3Zl AvlVO797dtfmh9ZN5KO7PqPbyNpbmdEcz6lPAJKBmnpjrKmsAUaB1EdHLw3SzHXqwwFz2OB9oE3r cvfXgaphYIACMAQM/wcCBZEC4BWIbGMCOj5BVfVAfB/F13QQJcRPTWoFuslooHiSm07GddGm7+68 HmgfukW3aQqXzGVOzX37xLpCZJmiAijxwZO5zKls/f+waWE2sBRYSGtJhUAauDJTBAz+rydJaxbq 8Nvx+AzFnz7+BfrWszSatlERAAAAAElFTkSuQmCC "
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="598.23926"
|
||||
x="264.2951"
|
||||
id="image3015-0-6"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAA8RJREFU WIXtl81rnFUUxn/n3HdmUhOoU7UtpeQLVASh0kTBlRRUlIjUvSiCC6Vx5T/gyk0WIlTalQtFoX5A lXZp46J+YD80atPWGDszTtLGTJLJTJJmZu57r4t3MplJJomRKdn0Wb+c5znPee659xXvPTsJ3VH2 uwIAAYJLx4+cNtgB7xzQLBOCqBISnOkbHH4JsK0SEAC7DHbg0BsfgrXgZQOZhpETr70A7AKKrRTQ 5p0DaylffRePqTLWIyTR9Qq2tMzl958siDQRuQlEDSHB2b7B4aOscS+osTmL1zhIDOoJPOBDXClH 37FP12vbkt1DEGPkxKsDNHEvWCWyoAHIqqaoAIBSyX0L0+eaEGxC7j1CSPyht4nyRdvGAigjoiDa pKqCmJWqDcyisokGHzXmF6p1138a1Iq5CqjZQMB6iEYnY2mmwOaRCDHZK4gI77z8SO+z/fs644Em +gfPfQ/4Ogcsohp1u4UAUUGNkro8xmzmJs2P7kprHuE3xCgvPpH8QaggKBePHznbPzh8tC4DYeQA CiI0NVZAEMQo6UvXoVKif/AjcHZTEY3wEIsxcvL1AWDX6gh8BcQgYhBjIluFdW6ICKmfruFtSOeh bsrXh9h4ga2Fw7R3wZ7nyRfLF4B43QhCVA1qYqQujpK7MYE0Lars6dxH12M9OOdBTTVfWwjwgLdo Ry+58QtcyS5+DYSNGQgM85M57PIij7/5HrhwjQMCKHbyFM5H00X/63XiwIPec5DC36c49sHvnwHL QU27D1ETMDc5TbL7UXxlCTt1moZQroxETDUn24Egif2E5ZDZ7Ng00T4orzqg0SLKZ6Y4cPhpWJ4A jVfP/1qq7a7DKkXbXnLjPzOanvsYKAEuqGoD8dyeXyDRESex+wB24Q/ExGnNjR3lQxMPUMyeZ+iL 8U+AZajfhBqS+ytLsvthEIe4QrSa/2e3jXBILImzFQqTN0qjmeI/RA5UBYiAQPFWjt6n+qE8E21E adV7xaGJJLPpq2SmF88QdR/WBIgIfimPLZVpu38/fmkKaVn3RHViHeQz5/nuWv5Lqt3XBCDCws1J dh/sAu/x3K7a3wp4JGgHF1KcSDH0+diPVOdfEyCqzKTS3NfzILCIBq3sHoi1M5/5k1v50jfAInWP ktoI8qkM3c8NQKkAQXvryAFiHcxn0vyaWviKqPva2hRg7y8nnxlXfIezFhc9HFoKEcGhhb63hg8D WeoyIMC9QA+QpKW+N8ADeSANzAG1LgWIAe1A/A6Rr6BMNP/KHebZHuTuz+lOC/gX/29g6TEI7HMA AAAASUVORK5CYII= "
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="662.88904"
|
||||
x="371.37128"
|
||||
id="image3048-0"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABLtJREFU WIXFl02MFEUYhp+vqnp2dpEfgSgYwi7qihgTRPQAeJDIAV1CIHDxojESIwEuevPiTRM5GKIGTNSD JiYkYBAhJGpEY/AggmxiZAkSh7/FZQd2dti/memu8lA9vzuzM6yb+CZ96O6q+t7v/b5+q1qcc/yf EMCc+XD9EU3Y46wF6hESRCkizLHVu09uBcKZImCAdk3Ys/L1zyAMwUkDmpre/a9sAtqBOzNJIOms hTAkf/4dHDqOWImIts6XCHMTnN23JitSh+QUEKWJMMdX7z65hRr1TCmaDXEqARJAZQAHuAibS7N6 15eTuTWN7sAE9O5/uYc66plyoBCUASlz8gsAKArpH2Hwh7uM7hAiEt1v4vuLZGMC5BFRIIrJaSoQ XVq0glkTQRwQgs0WR04abkqL2QIo3YDAZIgSRARRU411CBrsWHVZJxMACBGlgOYERAlKK1JnL3L7 8g3ANorvScgplNGc3bd2wJNWpaas6IHIK4ACEaQeCQFBEK24fOYCFHI8tedzsCFMZWhVSzkIAnoP 7OgB2sslcAUQjYhGtPaK1SmbiJD6tQ8XRixd2UX+wl4aG1gtLHpWJ8x/nsyd/GkgUVGCCKU0Sgek fvuT9N/XkbqLKuYvvZ/OJ5ZhrQOlfdvgmnaOsyH6ngcZvHSaP66Ofg1E1T1gNMP9acKJUZ7e+T7Y qEYBARRh/0GsEx9SKQTQyqHENVbCgXMa6VhC9upBPv326jFgwlCc4iKUNgz1D3Jv1+O4whjhwBGq mrJYEtFxnxRd2pIPVdMqqORiTJgnc/3izd//Gk4D+bICKgSlyQ6keeDJDTBxHVQi/v5rxS3fizgI LCu/Wk9fuiNWrYaJCDhYvkj4ac0v9KXSXwDjgDV+OQFxjA+PEgSatrmLCUcuIjoRKzBFVsqBjui7 2YHbu37KsYfPZ9hx6Bzm52tHgAmo9AEVkbk2wLyu5SAOsVlvzU09wYFScebwzYV/SjMssHn5ImTP YW6/t5ltK+bB9lfZPvTwG5ze8iKl9ERAYOhKP/OXdUP+lndEFXgSzS4dlHyg3Wg6gvgysXpGkc2F DIzk2LZiHid2PrN1zltHDwHGl0AEN5YhzBVILlyEGxtAWsjeK+diA/NoCxQqtl1bNCcRxgohYMiM F9jYvQCr9SZKRiTCyI1+5i7pBOdwjMfytwDl4rE+WFIriucFa/2zFx69j8fe/d7XJLK4D7YRv0p6 BZTiVuoyC5Z1A6Mo02L2EO/35a5PGq+GAJH458dfWztpWnwWlVIJMqkrdG3sgVwWzKzWghcJBLl4 Fy0TAK9JX3qkauMWgUcWzCp9qAYgcnJHB8Hs3o8PYG2Dna0BNI45agzMKgASWuEo61flCK5iV3Zl AvlVO797dtfmh9ZN5KO7PqPbyNpbmdEcz6lPAJKBmnpjrKmsAUaB1EdHLw3SzHXqwwFz2OB9oE3r cvfXgaphYIACMAQM/wcCBZEC4BWIbGMCOj5BVfVAfB/F13QQJcRPTWoFuslooHiSm07GddGm7+68 HmgfukW3aQqXzGVOzX37xLpCZJmiAijxwZO5zKls/f+waWE2sBRYSGtJhUAauDJTBAz+rydJaxbq 8Nvx+AzFnz7+BfrWszSatlERAAAAAElFTkSuQmCC "
|
||||
height="32"
|
||||
width="32" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="232.81795"
|
||||
y="379.88388"
|
||||
id="text3308"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310"
|
||||
x="232.81795"
|
||||
y="379.88388"
|
||||
style="font-size:13px">Sample index</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="240.23936"
|
||||
y="449.4061"
|
||||
id="text3308-9"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310-9"
|
||||
x="240.23936"
|
||||
y="449.4061"
|
||||
style="font-size:13px">'Due dates'</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="316.27951"
|
||||
y="517.43311"
|
||||
id="text3308-9-4"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310-9-8"
|
||||
x="316.27951"
|
||||
y="517.43311"
|
||||
style="font-size:13px">metadata.due_date</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="241.52823"
|
||||
y="592.18439"
|
||||
id="text3308-9-40"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310-9-1"
|
||||
x="241.52823"
|
||||
y="592.18439"
|
||||
style="font-size:13px">'Suppliers'</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="319.08157"
|
||||
y="651.24176"
|
||||
id="text3308-9-4-3"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310-9-8-7"
|
||||
x="319.08157"
|
||||
y="651.24176"
|
||||
style="font-size:13px">metadata.supplier</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="289.94205"
|
||||
y="330.87161"
|
||||
id="text3308-5"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3310-5"
|
||||
x="289.94205"
|
||||
y="330.87161">Index template</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 279.33572,488.44173 0,89.10029"
|
||||
id="path3933-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 279.23229,542.97272 84.83096,0"
|
||||
id="path3933-5-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 279.51264,631.87053 0,43.55572"
|
||||
id="path3933-5-9"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
|
||||
d="m 279.82037,674.9921 84.83098,0"
|
||||
id="path3933-5-3-8"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 51 KiB |
@@ -1,392 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="569.1853"
|
||||
height="186.2328"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.2 r9819"
|
||||
sodipodi:docname="permissions.svg"
|
||||
inkscape:export-filename="/home/rosarior/development/mayan/mayan/docs/topics/permissions.png"
|
||||
inkscape:export-xdpi="100"
|
||||
inkscape:export-ydpi="100">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3823"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend-0"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3823-6"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend-2"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3823-9"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend-8"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3823-67"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="1.4"
|
||||
inkscape:cx="182.27263"
|
||||
inkscape:cy="10.247058"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1920"
|
||||
inkscape:window-height="1025"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-right="5"
|
||||
fit-margin-bottom="5" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(47.756703,-107.30406)">
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.09787233;fill-rule:nonzero;stroke:none"
|
||||
id="rect4397-8"
|
||||
width="174.59149"
|
||||
height="150.71428"
|
||||
x="341.8371"
|
||||
y="137.82259"
|
||||
rx="5.903059"
|
||||
ry="2.9308865" />
|
||||
<rect
|
||||
style="fill:#000000;fill-opacity:0.09787233;fill-rule:nonzero;stroke:none"
|
||||
id="rect4397"
|
||||
width="174.59149"
|
||||
height="150.71428"
|
||||
x="109.13284"
|
||||
y="135.93362"
|
||||
rx="5.903059"
|
||||
ry="2.9308865" />
|
||||
<image
|
||||
y="203.38187"
|
||||
x="178.25146"
|
||||
id="image2993"
|
||||
xlink:href="data:image/png;base64,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
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="128.38187"
|
||||
x="-39.605644"
|
||||
id="image3004"
|
||||
xlink:href="data:image/png;base64,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
|
||||
XSYAAAAASUVORK5CYII=
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="156.95328"
|
||||
x="33.965771"
|
||||
id="image3015"
|
||||
xlink:href="data:image/png;base64,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
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="203.38185"
|
||||
x="408.96579"
|
||||
id="image3026"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABgVJREFU
|
||||
WIXFl31sVWcdxz/Pc86599xzentfylhxQiEKZd2YhiCLyeiIcSYDQxaVhRiTpiMxrB0hmmWLif7j
|
||||
3IIwM2FTppJmmlDGMjOmEg0apw4oWxmFZhsrKC2l68u9t/fe9ra9t/e8PP5xbmednVtbEn5/neS8
|
||||
fD+/7/P7PuccoZTiZpa8qeqADiCEWOxzxMuP3323ZfCoLvm6Uj5mRKdUdEHKoq/kHy/0FZq/95u3
|
||||
x//nRqXUYgH0E9/feMyOWl9bu3kHt9ZvgEgNKAUonPE0w+++yT9P/ZZSufyrLT/seBjwbhSA8acf
|
||||
fKF/+bp7a2/fshPh5nBTnXhT76OUj1A+IlJLaMlGlJGk+/eHGOjpOv7VH53dDriLBdBeeXzDL9Zs
|
||||
+NLOhgd24Q2cxEl1oBQIoUAppPDwPQffKaPXrCe06htcfOVn9F/qatv2ZMe3AW+hQyh+2fL5exKJ
|
||||
6M6G+5vxrr6Am+1C6CbSiCCNCLmsy/mzaS525smNCbyxbqbfOchdWx+iyjIfevCe5TWw8BQYNbZ8
|
||||
9DON34SxM3ilHEI3QYbQdJ1sapKOv/UNPn/88mOHXr3yWOfp9GB2VOGVM3ipv/PZTdv51r2fPgzo
|
||||
+gIBzIguvly7uh4/8zuEFkIgUNJDSMW1nhQnLw4/9evXrv0VwAzJqWWfsp9bcsstlFOnWVrXTFgX
|
||||
9wGRhToQEkqZupFDSR0pJdf/1YPUDKTUcaY9knYoDwwAA8GxQmg6SAPD6weFCYQX6oBESChnEAjE
|
||||
bTuoE8e4duUyq+rXsnr9Sr6YLTzxwu71KRAko8YTK1YvwRcaQhiocgo9pAPIhQIEMS/0AkHeEYK6
|
||||
NQ30Xb7Eyvq1bLxv3aret6+fFEBd/a0sqbVxHRc0A3f8Ko7jA5WdcEElBJ7rIhEBQsDAitUN9PW8
|
||||
y8o19Sy9rQblOfiuh+e5gIbUBEopBKJi5QINKDne9YHL/fhCoAZfQix7EEXQ1Yr6Bnp73kP5Ak8J
|
||||
fAUIidAkQtPIj04BlBcKIA/vWveAHZLLo4lqShMTIDXU0DFk7XaUcsH3qFtTz7UrlxBSA6khpY7U
|
||||
DRzX5fqVHH2pyRcBb747oTy653NNNbZo29T6E8ziX5gcL6B8gVllI5VCLNsOQiHQ8IZeIjDFR/k+
|
||||
5dIEg30pLnUNjW57smMz0DsfAHl0z11NSUu0Nbb8GDNRTeatn5NcVkdxahKnVMQIhwmHwmiGEQwE
|
||||
Es9xcMpFfHeanvN9vH81P7pt79mtwFUg+0mHUB7ds64padHW2LIXM2aT7jyAWZVAANOTBaamprA8
|
||||
G1Co6SIgEBKmJ8uMpcfpe2eAVKbUveOZzl1AP5D/pEsg23ff2VRjy7bGln2YcYv0W89h2nHseA25
|
||||
dIriRAHN0MgNFei7OIyQAgTBpEvBUH761J+7My8efX2gAxgERgEHPj6Gsn33nU1JS7RtatmLGZsR
|
||||
j1EVT5JNj1CaLKAbBrnhAmdf7//Hzue7n6Lyqq2UCxSAbKXridnn/x+AbH/kjsD21r1EYhapc88S
|
||||
qY4RTdYwlsnglCYxQgbZoXHeCMS/C6SA6VnP8QkiV6p0/V8foR8FINtb7/hgzSPVFqlzBzGr4kQT
|
||||
SV49eALDMBCaQAhBquCcaT7U/R2Ctc0x64vn42ouAHmktaEpYam2xtb9lc4PYtpxovE4Y5k0ekhn
|
||||
6/7z91c6ciuig/MVnwtAHmm5vSlp+W2NrU8TiVmMnDuAacewEwnyo6M4ThFNCoDeiqAisLc4X/EP
|
||||
A8gjD/9H3IpFGOk8gGlHqYrFGcumOX3sAnpYJ1/yTxEMVXq+gh8FINtb1zbHTf9w4yP7sWIWI+d+
|
||||
imnFiMYT5POjONMltJDOln1dXyGwu7RY8dkA4USVcXjz7n2Y1WFSbz5D2I5hRatJDw/xxvH30EMa
|
||||
2aJ7msD6EQLLbxiAlVgawyyfINc9gp1MYldVkx4aBuGjhyRbn74w0/kIQa5vSM0AaKNDY/zh2df4
|
||||
4FdRBBHTpCA35Z/hBnc+UzNbcQJYBSTmuMYFMgQZv2GdfxggBNiAMcc1s2PmznF+cXWzf8//DfNE
|
||||
jX8iy71RAAAAAElFTkSuQmCC
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<image
|
||||
y="224.93361"
|
||||
x="29.714293"
|
||||
id="image3004-6"
|
||||
xlink:href="data:image/png;base64,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 XSYAAAAASUVORK5CYII= "
|
||||
height="32"
|
||||
width="32" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
|
||||
d="M -5.3480176,156.29988 C 27.003852,171.28162 27.003852,171.28162 27.003852,171.28162"
|
||||
id="path3047"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
|
||||
d="m 67.395493,184.15702 c 32.351869,14.98174 32.351869,14.98174 32.351869,14.98174"
|
||||
id="path3047-0"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
|
||||
d="M 68.824063,231.99591 C 101.17593,217.01417 101.17593,217.01417 101.17593,217.01417"
|
||||
id="path3047-0-5"
|
||||
inkscape:connector-curvature="0" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.00385952px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="-43.85862"
|
||||
y="122.66718"
|
||||
id="text4309"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4311"
|
||||
x="-43.85862"
|
||||
y="122.66718">Users</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.00385952px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="25.675428"
|
||||
y="268.7955"
|
||||
id="text4309-7"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4311-4"
|
||||
x="25.675428"
|
||||
y="268.7955">Users</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.00385952px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="25.675428"
|
||||
y="149.50977"
|
||||
id="text4309-7-2"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4311-4-9"
|
||||
x="25.675428"
|
||||
y="149.50977">Groups</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.00385952px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="172.24503"
|
||||
y="193.42545"
|
||||
id="text4309-7-2-2"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4311-4-9-7"
|
||||
x="172.24503"
|
||||
y="193.42545">Roles</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:12.00385952px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="386.28497"
|
||||
y="196.12297"
|
||||
id="text4309-7-2-2-6"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4311-4-9-7-9"
|
||||
x="386.28497"
|
||||
y="196.12297">Permissions</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:14px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="139.414"
|
||||
y="122.7342"
|
||||
id="text4417"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4419"
|
||||
x="139.414"
|
||||
y="122.7342">Tier 1: Actor</tspan></text>
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13.01001644px;font-style:normal;font-weight:bold;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans Bold"
|
||||
x="373.75424"
|
||||
y="123.1968"
|
||||
id="text4417-7"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan4419-5"
|
||||
x="373.75424"
|
||||
y="123.1968"
|
||||
style="line-height:125%;font-size:14px">Tier 2: Access</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
|
||||
d="m 336.75275,211.81807 c -49.51065,0.33665 -49.51065,0.33665 -49.51065,0.33665"
|
||||
id="path3047-0-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 21 KiB |
@@ -1,214 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="565.61804"
|
||||
height="183.21297"
|
||||
id="svg2"
|
||||
version="1.1"
|
||||
inkscape:version="0.48.2 r9819"
|
||||
sodipodi:docname="versioning.svg"
|
||||
inkscape:export-filename="/home/rosarior/development/mayan/mayan/docs/topics/versioning.png"
|
||||
inkscape:export-xdpi="90"
|
||||
inkscape:export-ydpi="90">
|
||||
<defs
|
||||
id="defs4">
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lstart"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lstart"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3860"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(0.8,0,0,0.8,10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
<marker
|
||||
inkscape:stockid="Arrow1Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow1Lend"
|
||||
style="overflow:visible">
|
||||
<path
|
||||
id="path3863"
|
||||
d="M 0,0 5,-5 -12.5,0 5,5 0,0 z"
|
||||
style="fill-rule:evenodd;stroke:#000000;stroke-width:1pt;marker-start:none"
|
||||
transform="matrix(-0.8,0,0,-0.8,-10,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="266.59717"
|
||||
inkscape:cy="67.029044"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="5"
|
||||
fit-margin-left="5"
|
||||
fit-margin-right="5"
|
||||
fit-margin-bottom="5"
|
||||
inkscape:window-width="1366"
|
||||
inkscape:window-height="713"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="26"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata7">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-19.509401,-14.183039)">
|
||||
<image
|
||||
y="19.183039"
|
||||
x="289.25891"
|
||||
id="image2993"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAAAoBJREFU
|
||||
WIXFl0FPE0EUx39vZrfSVJEeMGjkoBfQEzcP4F2DRgtyF+PZeJKDicZ488gX4AM01GKiXvgMejUh
|
||||
xsQLRIOiFAjW7vOwuwW23d02u6b/Zg6bnX3zm/+8mTcVVWWQco4/iIgz9uJtfb8ls82WAv3DWSMU
|
||||
8NZ+vLx9D/gb1689cVVtN+DM8LN3mlXrG9+1tFSrATYJQFVPOgAM+TOHN5+2EN+V1FmrKh5wZ3IM
|
||||
ebSKLs9TXZypzGutevBqbgFoxX1rIs8S2m4NuEZwemh+vzCiYWO7wc2JUaqL05Xik1o1yYkoQFuu
|
||||
MTiOwbWS2hzH4BrTnsLIUIGPm7+YnTyXChELYEX6bqHKRYdyscCHAKL2YKZSWuoO0QEQ5r21gjX9
|
||||
NT+A4hjDxeFTjA8X2dje48bEKGsPr1fKT+t1IjsvmoRHL0QQEdJT0IcODbg/fRl5/Jr2hwp4Hro8
|
||||
T9O4t4AisJsKYE3vAACewNedfVYWplhZmOrap+UpwFBvAH04AGBE2Gocsrl7CHLMgGBNr42Xw+U9
|
||||
ETLBAYMIPQOEsaNnZ9pRH58DVoKQ2aQpERKXIB+AZMU7YHw78wBIipHowGAAAs9s7BmZkSYVIJDt
|
||||
oQrmodQcyEOZcmBgAI41/iGSQxYmXWpiAQrWDGgXBL3XP3/D5JSInipzVy90JekACPtYI+2ClEWq
|
||||
SqtbFYoDOAIJf1mVHCMWQNGglGZ3QBP2UxcACT6EVmot6xXgZOxEADcow3evnM84dKdcKxykAZQc
|
||||
Gmefvz/d9PToOpNV4v93KDk0fkdfHb+xiMgIcAkok/0IiEqBn8AXYCccNwrgAiWgkPPgof4Ae0Az
|
||||
DuA/jdupcNx/sUsQuWjMJzEAAAAASUVORK5CYII=
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="233.34525"
|
||||
y="69.483757"
|
||||
id="text2996"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan2998"
|
||||
x="233.34525"
|
||||
y="69.483757">Original version: 1.0.0</tspan></text>
|
||||
<image
|
||||
y="138.33658"
|
||||
x="86.025414"
|
||||
id="image3008"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABNlJREFU
|
||||
WIWtl2tsVEUUgL953Lu7bVkoDwvEJkrCKwZDgtgm1RifQEgpUJFfEIgm4B9D9IcWFGIMmICJyA8w
|
||||
RoNG/GEIRSjUkJIYoIpAgYSEAmlQ6AMo0AK27Jbt7h1/3LuPsu3uLXA2k3szO3PON2fOPWdGGGMQ
|
||||
Qujxnx/8LZIQ8/sTBjAMV5QU2Dj7ur+ofBuI+55ojAEYEV5fbx5XDrfcMoUf19YCyq997T2D7sph
|
||||
/8UbCEAI4QveAaqmjUd8sAezrZrdK19aVG1qf41uXrwUSOTTIb2nSLpdSbCkQPto7rikJklLVy/z
|
||||
po5j98qK6tDaA22A5RcgJZaUaC2xlMjbtJZYUqaWMCpoc/b6PeZPe4rdy2ZPCK2tu5IPIgtACTHs
|
||||
lpTikKY4ZHPGg6hdXjaxcF1uiBRAMu6VEig5vOYqMGgpeTocoDQcoqXrPnOnjmPfivKJozfUdwwF
|
||||
obM6hEAIQf4QdKGTDlhRMQmxZi+piQZwHMy2amKOGQcUAnfzAijpHwDAEdB6N8LOJTPZuWTmoGMS
|
||||
jgGwB/svG2AYHgCQQnCj9wHXex6AyHCAt6dlpcU509ogHpCIDEX+RGQZMcZfNs2OASU8lY8nxqeG
|
||||
QbfgyQD4k2wPSNedTwIgrWNobYN64FEBBNKrIWKAXUPAB4DnM5WVG/0YFgip0NJCSenWh8xAFmN8
|
||||
AHiifFTBh40raWFrzfn2I+w9VcNfl46TTJCWgudCsxDLmHL6Z27xUHgMGQO+jSuLkKXY3rCSI80/
|
||||
Ujl7MUsqviYUKATgQSzChfaTNIw8f2zs9L7vD61lNRllesgY8CNKaoKWYnPdAi5cq2P90m/o6DlJ
|
||||
w+V13OyNAFBSVMiM8Yv4cOFWttd/+t6cjbfFoXWsSkJk7bhW0q33KnezlCJgaZrbG2n6p441C77k
|
||||
z9YtnGz7hTvRCDuqDDuqDN3R+/zdtoujVzayam4No0YWvfvKR1TghUgWgK0ktlYEVJ6mNQUW7DlR
|
||||
w6Lydzh34ye6o+1omS5Q4L5rCV2RNs5e+4F5s5YSGM0mvOqY3gJv0uHLN5E+AlEKTdAupvFSI6+9
|
||||
8D5Hr14kbiDhQMxJj4s5oBz362rraebVZ99AaCqAEBBLASRNKilSBSk3gMCSGi3hZl8TDrDlrezo
|
||||
2VGZ7vvksKAzeippyx7ogRRI8pdbhPehS6A31po+G+YQJd2xmWkqC8BgvFKaG8HBpE7Fd6OdBG34
|
||||
7A9BvwN9cdg6x135mkOCoAZLQsiGe30dA2Ikg9vtNQYSxvhoDv2JGNNKX+bWbQhYUBCAogAUZBw9
|
||||
CmyvL+CO6eqG/ghn8BJSygOWV4YXTp+Q35cZUl6ynWXfzaB0IigL4gkGZP6ABZYGrUAYuPwvdJxm
|
||||
KxAbAFCoTM/IDb+P6HdM+jiTUwRCKLQKMzlYRdPpfZTNBmWDlLDpuEh5wNKAA8eb4E47+5vrOAZE
|
||||
AYR3NxwFTAq/vrzCxGPDuxgaaRJxaV4s2zV3zDNUTpkMJSWgvaXF49DZCZdaoKuNg0e+oga4CvQA
|
||||
JglgASNwT66PUA/RQHjKm5SXlrHaDvN8Kp8LiP3HudYTfNvSQCPQAdzDS8VJAG8o8hEAjDcnBBQD
|
||||
Y4Ei0hfUBNAL3Aa6gftkFKNMgMcVgZteQ7hJJvOGEMPd834eKsf/A5D84oCyPZs+AAAAAElFTkSu
|
||||
QmCC
|
||||
"
|
||||
height="32"
|
||||
width="32" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="23.233522"
|
||||
y="189.69191"
|
||||
id="text3011"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3013"
|
||||
x="23.233522"
|
||||
y="189.69191">New major version: 2.0.0</tspan></text>
|
||||
<image
|
||||
y="138.41853"
|
||||
x="291.98331"
|
||||
id="image3008-2"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABNlJREFU WIWtl2tsVEUUgL953Lu7bVkoDwvEJkrCKwZDgtgm1RifQEgpUJFfEIgm4B9D9IcWFGIMmICJyA8w RoNG/GEIRSjUkJIYoIpAgYSEAmlQ6AMo0AK27Jbt7h1/3LuPsu3uLXA2k3szO3PON2fOPWdGGGMQ Qujxnx/8LZIQ8/sTBjAMV5QU2Dj7ur+ofBuI+55ojAEYEV5fbx5XDrfcMoUf19YCyq997T2D7sph /8UbCEAI4QveAaqmjUd8sAezrZrdK19aVG1qf41uXrwUSOTTIb2nSLpdSbCkQPto7rikJklLVy/z po5j98qK6tDaA22A5RcgJZaUaC2xlMjbtJZYUqaWMCpoc/b6PeZPe4rdy2ZPCK2tu5IPIgtACTHs lpTikKY4ZHPGg6hdXjaxcF1uiBRAMu6VEig5vOYqMGgpeTocoDQcoqXrPnOnjmPfivKJozfUdwwF obM6hEAIQf4QdKGTDlhRMQmxZi+piQZwHMy2amKOGQcUAnfzAijpHwDAEdB6N8LOJTPZuWTmoGMS jgGwB/svG2AYHgCQQnCj9wHXex6AyHCAt6dlpcU509ogHpCIDEX+RGQZMcZfNs2OASU8lY8nxqeG QbfgyQD4k2wPSNedTwIgrWNobYN64FEBBNKrIWKAXUPAB4DnM5WVG/0YFgip0NJCSenWh8xAFmN8 AHiifFTBh40raWFrzfn2I+w9VcNfl46TTJCWgudCsxDLmHL6Z27xUHgMGQO+jSuLkKXY3rCSI80/ Ujl7MUsqviYUKATgQSzChfaTNIw8f2zs9L7vD61lNRllesgY8CNKaoKWYnPdAi5cq2P90m/o6DlJ w+V13OyNAFBSVMiM8Yv4cOFWttd/+t6cjbfFoXWsSkJk7bhW0q33KnezlCJgaZrbG2n6p441C77k z9YtnGz7hTvRCDuqDDuqDN3R+/zdtoujVzayam4No0YWvfvKR1TghUgWgK0ktlYEVJ6mNQUW7DlR w6Lydzh34ye6o+1omS5Q4L5rCV2RNs5e+4F5s5YSGM0mvOqY3gJv0uHLN5E+AlEKTdAupvFSI6+9 8D5Hr14kbiDhQMxJj4s5oBz362rraebVZ99AaCqAEBBLASRNKilSBSk3gMCSGi3hZl8TDrDlrezo 2VGZ7vvksKAzeippyx7ogRRI8pdbhPehS6A31po+G+YQJd2xmWkqC8BgvFKaG8HBpE7Fd6OdBG34 7A9BvwN9cdg6x135mkOCoAZLQsiGe30dA2Ikg9vtNQYSxvhoDv2JGNNKX+bWbQhYUBCAogAUZBw9 CmyvL+CO6eqG/ghn8BJSygOWV4YXTp+Q35cZUl6ynWXfzaB0IigL4gkGZP6ABZYGrUAYuPwvdJxm KxAbAFCoTM/IDb+P6HdM+jiTUwRCKLQKMzlYRdPpfZTNBmWDlLDpuEh5wNKAA8eb4E47+5vrOAZE AYR3NxwFTAq/vrzCxGPDuxgaaRJxaV4s2zV3zDNUTpkMJSWgvaXF49DZCZdaoKuNg0e+oga4CvQA JglgASNwT66PUA/RQHjKm5SXlrHaDvN8Kp8LiP3HudYTfNvSQCPQAdzDS8VJAG8o8hEAjDcnBBQD Y4Ei0hfUBNAL3Aa6gftkFKNMgMcVgZteQ7hJJvOGEMPd834eKsf/A5D84oCyPZs+AAAAAElFTkSu QmCC "
|
||||
height="32"
|
||||
width="32" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="216.05945"
|
||||
y="189.77386"
|
||||
id="text3011-9"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3013-6"
|
||||
x="216.05945"
|
||||
y="189.77386">New minor version: 1.1.0</tspan></text>
|
||||
<image
|
||||
y="137.65823"
|
||||
x="494.88431"
|
||||
id="image3008-2-2"
|
||||
xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABHNCSVQICAgIfAhkiAAABNlJREFU WIWtl2tsVEUUgL953Lu7bVkoDwvEJkrCKwZDgtgm1RifQEgpUJFfEIgm4B9D9IcWFGIMmICJyA8w RoNG/GEIRSjUkJIYoIpAgYSEAmlQ6AMo0AK27Jbt7h1/3LuPsu3uLXA2k3szO3PON2fOPWdGGGMQ Qujxnx/8LZIQ8/sTBjAMV5QU2Dj7ur+ofBuI+55ojAEYEV5fbx5XDrfcMoUf19YCyq997T2D7sph /8UbCEAI4QveAaqmjUd8sAezrZrdK19aVG1qf41uXrwUSOTTIb2nSLpdSbCkQPto7rikJklLVy/z po5j98qK6tDaA22A5RcgJZaUaC2xlMjbtJZYUqaWMCpoc/b6PeZPe4rdy2ZPCK2tu5IPIgtACTHs lpTikKY4ZHPGg6hdXjaxcF1uiBRAMu6VEig5vOYqMGgpeTocoDQcoqXrPnOnjmPfivKJozfUdwwF obM6hEAIQf4QdKGTDlhRMQmxZi+piQZwHMy2amKOGQcUAnfzAijpHwDAEdB6N8LOJTPZuWTmoGMS jgGwB/svG2AYHgCQQnCj9wHXex6AyHCAt6dlpcU509ogHpCIDEX+RGQZMcZfNs2OASU8lY8nxqeG QbfgyQD4k2wPSNedTwIgrWNobYN64FEBBNKrIWKAXUPAB4DnM5WVG/0YFgip0NJCSenWh8xAFmN8 AHiifFTBh40raWFrzfn2I+w9VcNfl46TTJCWgudCsxDLmHL6Z27xUHgMGQO+jSuLkKXY3rCSI80/ Ujl7MUsqviYUKATgQSzChfaTNIw8f2zs9L7vD61lNRllesgY8CNKaoKWYnPdAi5cq2P90m/o6DlJ w+V13OyNAFBSVMiM8Yv4cOFWttd/+t6cjbfFoXWsSkJk7bhW0q33KnezlCJgaZrbG2n6p441C77k z9YtnGz7hTvRCDuqDDuqDN3R+/zdtoujVzayam4No0YWvfvKR1TghUgWgK0ktlYEVJ6mNQUW7DlR w6Lydzh34ye6o+1omS5Q4L5rCV2RNs5e+4F5s5YSGM0mvOqY3gJv0uHLN5E+AlEKTdAupvFSI6+9 8D5Hr14kbiDhQMxJj4s5oBz362rraebVZ99AaCqAEBBLASRNKilSBSk3gMCSGi3hZl8TDrDlrezo 2VGZ7vvksKAzeippyx7ogRRI8pdbhPehS6A31po+G+YQJd2xmWkqC8BgvFKaG8HBpE7Fd6OdBG34 7A9BvwN9cdg6x135mkOCoAZLQsiGe30dA2Ikg9vtNQYSxvhoDv2JGNNKX+bWbQhYUBCAogAUZBw9 CmyvL+CO6eqG/ghn8BJSygOWV4YXTp+Q35cZUl6ynWXfzaB0IigL4gkGZP6ABZYGrUAYuPwvdJxm KxAbAFCoTM/IDb+P6HdM+jiTUwRCKLQKMzlYRdPpfZTNBmWDlLDpuEh5wNKAA8eb4E47+5vrOAZE AYR3NxwFTAq/vrzCxGPDuxgaaRJxaV4s2zV3zDNUTpkMJSWgvaXF49DZCZdaoKuNg0e+oga4CvQA JglgASNwT66PUA/RQHjKm5SXlrHaDvN8Kp8LiP3HudYTfNvSQCPQAdzDS8VJAG8o8hEAjDcnBBQD Y4Ei0hfUBNAL3Aa6gftkFKNMgMcVgZteQ7hJJvOGEMPd834eKsf/A5D84oCyPZs+AAAAAElFTkSu QmCC "
|
||||
height="32"
|
||||
width="32" />
|
||||
<text
|
||||
xml:space="preserve"
|
||||
style="font-size:13px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
|
||||
x="418.96045"
|
||||
y="189.01357"
|
||||
id="text3011-9-6"
|
||||
sodipodi:linespacing="125%"><tspan
|
||||
sodipodi:role="line"
|
||||
id="tspan3013-6-4"
|
||||
x="418.96045"
|
||||
y="189.01357">New micro version: 1.0.1</tspan></text>
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-start:url(#Arrow1Lstart);marker-end:url(#Arrow1Lend)"
|
||||
d="m 110.10663,126.0523 c 0,-109.138839 196.30631,6.06092 197.09645,-42.415649 0.79014,48.498089 197.09644,-64.75136 197.09644,42.437169"
|
||||
id="path3067"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="ccc" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1Lend)"
|
||||
d="m 307.21636,84.18173 0,46.12327"
|
||||
id="path3087"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 12 KiB |
@@ -4,77 +4,57 @@
|
||||
Mayan EDMS documentation
|
||||
========================
|
||||
|
||||
.. rubric:: `Open source`_, Django_ based document manager with custom
|
||||
metadata_ indexing_, file serving integration, `checking out and in`_, OCR_ capabilities,
|
||||
document versioning_ and `digital signature verification`_.
|
||||
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _OCR: https://secure.wikimedia.org/wikipedia/en/wiki/Optical_character_recognition
|
||||
.. _digital signature verification: http://en.wikipedia.org/wiki/Digital_signature
|
||||
.. _versioning: http://en.wikipedia.org/wiki/Versioning
|
||||
.. _metadata: http://en.wikipedia.org/wiki/Metadata
|
||||
.. _indexing: http://en.wikipedia.org/wiki/Index_card
|
||||
.. _Open source: http://en.wikipedia.org/wiki/Open_source
|
||||
.. _checking out and in: http://en.wikipedia.org/wiki/Revision_control
|
||||
.. rubric:: `Open source`_ `document management system`_.
|
||||
|
||||
Getting help
|
||||
============
|
||||
|
||||
* Try the :doc:`FAQ <faq/index>` -- it's got answers to many common questions.
|
||||
|
||||
* Search for information in the `archives of the mayan-edms mailing list`_, or
|
||||
`post a question`_. If you prefer news servers, use the gateway provided by Gname_.
|
||||
|
||||
`post a question`_. If you prefer news servers, use the gateway provided by Gmane_.
|
||||
* Report bugs with **Mayan EDMS** using Github's `ticket tracker`_.
|
||||
* Try the :doc:`FAQ <topics/faq>` -- it's got answers to many common questions.
|
||||
|
||||
.. _archives of the mayan-edms mailing list: http://groups.google.com/group/mayan-edms/
|
||||
.. _Gname: http://news.gmane.org/gmane.comp.python.django.mayan-edms
|
||||
.. _post a question: http://groups.google.com/group/mayan-edms
|
||||
.. _ticket tracker: https://github.com/mayan-edms/mayan-edms/issues
|
||||
|
||||
First steps
|
||||
===========
|
||||
|
||||
:doc:`Overview <intro/overview>` |
|
||||
:doc:`Features <intro/features>` |
|
||||
:doc:`Requirements <intro/requirements>` |
|
||||
:doc:`Installation <intro/installation>` |
|
||||
:doc:`Getting started <intro/getting_started>`
|
||||
:doc:`Features <topics/features>` |
|
||||
:doc:`Installation <topics/installation>` |
|
||||
:doc:`Getting started <topics/getting_started>`
|
||||
|
||||
Understanding Mayan EDMS
|
||||
========================
|
||||
|
||||
:doc:`File storage <topics/file_storage>` |
|
||||
:doc:`Initial data loading <topics/initial_import>` |
|
||||
:doc:`Permission system <topics/permissions>` |
|
||||
:doc:`Transformations <topics/transformations>` |
|
||||
:doc:`Document visualization <topics/document_visualization>` |
|
||||
:doc:`Document versioning <topics/versioning>` |
|
||||
:doc:`Document signatures <topics/signatures>` |
|
||||
:doc:`Indexes <topics/indexes>` |
|
||||
:doc:`Smart links <topics/smart_links>` |
|
||||
:doc:`Tags <topics/tags>` |
|
||||
:doc:`OCR <topics/ocr>`
|
||||
|
||||
Release notes
|
||||
=============
|
||||
|
||||
:doc:`Release notes and upgrading instructions <releases/index>`
|
||||
|
||||
Customization and fine-tuning
|
||||
==============================
|
||||
|
||||
:doc:`Settings <topics/settings>` | :doc:`Customization <topics/customization>`
|
||||
|
||||
For developers
|
||||
==============
|
||||
|
||||
:doc:`Development <topics/development>` | :doc:`Documentation <topics/documentation>` | :doc:`Translations <topics/translations>`
|
||||
:doc:`Development <topics/development>`
|
||||
|
||||
Credits
|
||||
=======
|
||||
|
||||
:doc:`Contributors <credits/contributors>` |
|
||||
:doc:`Licensing <credits/license>`
|
||||
|
||||
:doc:`Contributors <topics/contributors>` |
|
||||
:doc:`Licensing <topics/license>`
|
||||
|
||||
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _Gmane: http://news.gmane.org/gmane.comp.python.django.mayan-edms
|
||||
.. _Open source: http://en.wikipedia.org/wiki/Open_source
|
||||
.. _archives of the mayan-edms mailing list: http://groups.google.com/group/mayan-edms/
|
||||
.. _document management system: https://en.wikipedia.org/wiki/Document_management_system
|
||||
.. _post a question: http://groups.google.com/group/mayan-edms
|
||||
.. _ticket tracker: https://github.com/mayan-edms/mayan-edms/issues
|
||||
|
||||
@@ -1,132 +0,0 @@
|
||||
===============
|
||||
Getting started
|
||||
===============
|
||||
|
||||
This chapter will guide you through the initial steps needed to get **Mayan EDMS**
|
||||
up and running after installation.
|
||||
|
||||
The easy 2 step setup
|
||||
=====================
|
||||
|
||||
Document sources
|
||||
----------------
|
||||
|Setup tab| |Right arrow| |Sources button| |Right arrow| |Web form tab|
|
||||
|
||||
Before anything else you must define from where you will feed **Mayan EDMS**
|
||||
documents for it to process and store. To do this first go to the ``Setup`` tab
|
||||
then to the ``Sources`` button. To obtain the fastest working setup, create a
|
||||
new source of type ``Web forms``. This source will open a browser file upload
|
||||
dialog, hence the name ``Web forms``. Name it something simple like ``Local documents``,
|
||||
choose an icon to visually identify this document if you so wish and select whether or not
|
||||
compressed files uploaded from this source will be automatically decompressed and
|
||||
their content treated as individual documents.
|
||||
|
||||
|
||||
Quickly bootstraping your Mayan EDMS install
|
||||
--------------------------------------------
|
||||
|Setup tab| |Right arrow| |Bootstrap button|
|
||||
|
||||
**Mayan EDMS** includes an app called ``Bootstrap``. This app stores
|
||||
scripted configurations, that when executed will setup your installation of **Mayan EDMS**.
|
||||
From there you can then fine tune this setup to your needs. To use this
|
||||
app go to the ``Setup`` area and launch the app using the ``Bootstrap`` button.
|
||||
|
||||
.. hint:: Predefined sample setups can be downloaded from the
|
||||
`Official bootstrap setup repository for Mayan EDMS`_. If you want to use
|
||||
one of the available setups for testing or as a starting point, choose one
|
||||
and import it with ``Import from URL``. Finally execute it on an empty database.
|
||||
|
||||
The longer custom setup
|
||||
=======================
|
||||
|
||||
Setting your document types
|
||||
---------------------------
|
||||
|Setup tab| |Right arrow| |Document types button|
|
||||
|
||||
If none of the available bootstrap setups fit your needs and your wish to
|
||||
setup **Mayan EDMS** from scratch, the first thing to consider is what your document
|
||||
types will be. Examples of document types are: ``Legal documents``,
|
||||
``Internal documents``, ``Medical records``, ``Designing specifications``, ``Permits``.
|
||||
A document type represents a group, a type, a class of documents which share some
|
||||
common properties. A good indicator that can help you determine you document types
|
||||
is what kind of information or ``metadata`` is attached to the documents.
|
||||
|
||||
|
||||
Defining metadata
|
||||
-----------------
|
||||
|Setup tab| |Right arrow| |Metadata types button|
|
||||
|
||||
With your document types defined it should be much easier now to define the required
|
||||
``metadata`` for each of these document types. When creating ``metadata`` types,
|
||||
the first thing that will be needed is the internal name with which this metadata
|
||||
type will be referenced in other areas of **Mayan EDMS**. Internal name is like a
|
||||
variable so it should not contain spaces or uppercase characters. After the internal name,
|
||||
enter the name that will be visible to you and your users, this is usually the same as the
|
||||
internal name but with proper capitalization and spacing. ``metadata`` types
|
||||
can have default values to speed up data entry, default static values are enclosed in
|
||||
quotes, ie::
|
||||
|
||||
"Building A"
|
||||
|
||||
or::
|
||||
|
||||
"Storage room 1"
|
||||
|
||||
Default values can also be defined as ``Python`` statements or functions such as::
|
||||
|
||||
current_date()
|
||||
|
||||
If you want to restrict or standardize the values for a metadata type, use the ``Lookup`` field to
|
||||
define the list of options that are allowed. Define the lookup list using a ``Python``
|
||||
list of quoted values, for example::
|
||||
|
||||
["2000", "2001", "2002", "2003", "2004"].
|
||||
|
||||
Instead of a free entry text field, your users will get a dropdown list of years.
|
||||
You can also use a ``Python`` expression to generate the lookup list.
|
||||
|
||||
When you are uploading a new document, a choice of metadata types will be presented
|
||||
and you choose which of those you wish to enter for the document you are about
|
||||
to upload. To speed data entry you can also match which metadata types will
|
||||
be preselected when uploading a document of a certain type. To match metadata types
|
||||
to document types, go to the ``setup`` tab, ``document types`` button, and
|
||||
lastly ``Default metadata``. Choose the desired metadata for the document type
|
||||
currently selected and press ``Add``. From now on whenever you upload a document of
|
||||
this type, the related metadata types for this document type will be preselected.
|
||||
|
||||
After defining all your metadata types you can also define your indexes to
|
||||
let **Mayan EDMS** automatically categorize your documents based on their metadata.
|
||||
Refer to the chapter named :doc:`Indexes </topics/indexes>` for examples on how to
|
||||
use the document indexes.
|
||||
|
||||
|
||||
.. |Setup tab| image:: /_static/setup_tab.png
|
||||
:alt: Setup tab
|
||||
:align: middle
|
||||
|
||||
.. |Sources button| image:: /_static/sources_button.png
|
||||
:alt: Sources button
|
||||
:align: middle
|
||||
|
||||
.. |Web form tab| image:: /_static/web_form_source_tab.png
|
||||
:alt: Web form tab
|
||||
:align: middle
|
||||
|
||||
.. |Bootstrap button| image:: /_static/bootstrap_button.png
|
||||
:alt: Bootstrap button
|
||||
:align: middle
|
||||
|
||||
.. |Right arrow| image:: /_static/arrow_right.png
|
||||
:alt: Right arrow
|
||||
:align: middle
|
||||
|
||||
.. |Document types button| image:: /_static/document_types_button.png
|
||||
:alt: Document types button
|
||||
:align: middle
|
||||
|
||||
.. |Metadata types button| image:: /_static/metadata_types_button.png
|
||||
:alt: Metadata types button
|
||||
:align: middle
|
||||
|
||||
.. _DjangoZoom: http://djangozoom.com/
|
||||
.. _`Official bootstrap setup repository for Mayan EDMS`: http://bootstrap.mayan-edms.com/
|
||||
@@ -1,13 +0,0 @@
|
||||
Getting started
|
||||
===============
|
||||
|
||||
New to **Mayan EDMS**? Read this material to quickly get up and running.
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
overview
|
||||
features
|
||||
requirements
|
||||
installation
|
||||
getting_started
|
||||
@@ -1,18 +0,0 @@
|
||||
====================
|
||||
History and overview
|
||||
====================
|
||||
|
||||
**Mayan EDMS** started as a simple project whose only requirement was the storage of PDF files, from there it has grown into a complete electronic document management solution.
|
||||
**Mayan EDMS** can optimize an organization's bulk upload, storage and retrieval of documents.
|
||||
Documents are organized using document classes, user defined metadata fields as well as automatic document grouping and indexing. Documents can be retrieved from the document index or by means of full
|
||||
text searching. Users can search for terms in the document's metadata, properties or contents extracted from PDFs or transcribed by OCR_.
|
||||
|
||||
**Mayan EDMS** is written in Python_ using the Django_ framework, which makes it very agile and fast, specially when compared with existing Java based solutions.
|
||||
Being based on patent free, `Open source`_ technologies, **Mayan EDMS** provides legal safety to users and organizations, as well as peace of mind as documents and all related information is stored in open source and transparent formats allowing portability and avoiding `vendor lock-in`_.
|
||||
Being written using Python_, **Mayan EDMS** runs on many POSIX compliant operating systems. Featuring many configuration parameters, **Mayan EDMS** allows to be deployed on many hardware and software configurations such as single server based, clusters, virtualized and cloud based hosting giving adopters the choice of using the infrastructure of their choice.
|
||||
|
||||
.. _`vendor lock-in`: https://secure.wikimedia.org/wikipedia/en/wiki/Vendor_lock-in
|
||||
.. _Python: http://www.python.org/
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _OCR: https://secure.wikimedia.org/wikipedia/en/wiki/Optical_character_recognition
|
||||
.. _`Open source`: https://secure.wikimedia.org/wikipedia/en/wiki/Open_source
|
||||
@@ -1,50 +0,0 @@
|
||||
============
|
||||
Requirements
|
||||
============
|
||||
**Mayan EDMS** supports various levels of functionality, because of this
|
||||
requirements can vary for each individual deployment.
|
||||
|
||||
Basic requirements
|
||||
==================
|
||||
|
||||
Python:
|
||||
|
||||
* ``Django`` - A high-level Python Web framework that encourages rapid development and clean, pragmatic design.
|
||||
|
||||
Execute pip install -r requirements/production.txt to install the python/django dependencies automatically.
|
||||
|
||||
Executables:
|
||||
|
||||
* ``gpg`` - The GNU Privacy Guard
|
||||
|
||||
Optional requirements
|
||||
=====================
|
||||
|
||||
Improved OCR
|
||||
------------
|
||||
|
||||
* ``unpaper`` - post-processing scanned and photocopied book pages
|
||||
|
||||
Enhanced MIME detection
|
||||
------------------------
|
||||
|
||||
* ``libmagic`` - MIME detection library, if not installed **Mayan EDMS** will fall back to using python's simpler mimetype built in library
|
||||
* ``python-magic`` - A python wrapper for libmagic
|
||||
|
||||
|
||||
OCR backends
|
||||
------------
|
||||
** Mayan EDMS** can make use of different OCR engines via OCR backends. By default it will use the ``Tesseract OCR backend``.
|
||||
|
||||
* ``tesseract-ocr`` - An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google. Version 3.x or greater required.
|
||||
|
||||
|
||||
Image conversion backends
|
||||
-------------------------
|
||||
**Mayan EDMS** has the ability to switch between different image conversion backends, at the moment these three are supported:
|
||||
|
||||
* ``ImageMagick`` - Convert, Edit, Or Compose Bitmap Images.
|
||||
* ``GraphicMagick`` - Robust collection of tools and libraries to read, write, and manipulate an image.
|
||||
* Python only - Relies on ``Pillow`` to support a limited set of the most common graphics formats.
|
||||
|
||||
By default the python backend is used.
|
||||
@@ -16,7 +16,7 @@ check outs have been added too as per the feature request posted as `issue #26`_
|
||||
The way the history events for a document are presented has been improved and
|
||||
it is now more useful as it provides filtering by event type. To improve
|
||||
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.
|
||||
|
||||
What's new in Mayan EDMS v0.12.2
|
||||
@@ -35,9 +35,6 @@ 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
|
||||
at the login screen until the administrator password is changed.
|
||||
|
||||
.. image:: mayan_first_login.png
|
||||
:alt: First login dialog
|
||||
|
||||
Document check outs
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
As per the feature request filed under `issue #26`_, a new document
|
||||
@@ -47,7 +44,7 @@ editing conflicts. Document check outs have an expiration period after which
|
||||
**Mayan EDMS** will automatically check them back in to avoid a permanent
|
||||
document lockout. Only the user who has checked out a document can upload
|
||||
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.
|
||||
|
||||
Installation environment app
|
||||
@@ -109,7 +106,7 @@ Bugs fixed
|
||||
* `issue #26`_ "checkout feature request"
|
||||
|
||||
Stuff removed
|
||||
=============
|
||||
=============
|
||||
* Feedback app
|
||||
|
||||
|
||||
|
||||
@@ -162,14 +162,14 @@ Next upgrade/add the new requirements::
|
||||
|
||||
Migrate existing database schema with::
|
||||
|
||||
$ ./manage.py migrate acls 0001 --fake
|
||||
$ ./manage.py migrate taggit 0001 --fake
|
||||
$ ./manage.py migrate ocr 0001 --fake
|
||||
$ ./manage.py migrate
|
||||
$ mayan-edms.py migrate acls 0001 --fake
|
||||
$ mayan-edms.py migrate taggit 0001 --fake
|
||||
$ mayan-edms.py migrate ocr 0001 --fake
|
||||
$ mayan-edms.py migrate
|
||||
|
||||
Add new static media::
|
||||
|
||||
$ ./manage.py collectstatic --noinput
|
||||
$ mayan-edms.py collectstatic --noinput
|
||||
|
||||
The upgrade procedure is now complete.
|
||||
|
||||
|
||||
368
docs/releases/1.1.rst
Normal file
@@ -0,0 +1,368 @@
|
||||
=============================
|
||||
Mayan EDMS v1.1 release notes
|
||||
=============================
|
||||
|
||||
Released: February 10, 2015
|
||||
|
||||
Welcome to Mayan EDMS v1.1
|
||||
|
||||
|
||||
What's new in Mayan EDMS v1.1
|
||||
=============================
|
||||
|
||||
Celery
|
||||
~~~~~~
|
||||
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
|
||||
as per `Celery's documentation`_. This change made the built-in scheduler and
|
||||
job_processing apps obsolete, both were removed.
|
||||
|
||||
|
||||
Views namespaces
|
||||
~~~~~~~~~~~~~~~~
|
||||
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
|
||||
by prepending the app name to the view name.
|
||||
|
||||
|
||||
Removal of the splash screen
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The static image home screen has been replaced with a quick links view, showing
|
||||
the most used actions: Uploading documents, viewing recent documents, viewing
|
||||
all documents and searching documents.
|
||||
|
||||
|
||||
Sending and receiving documents via email
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
which correspond to the mail protocol used to fetch the documents. Read Django's
|
||||
`email configuration settings documentation`_ for more details on how to set up
|
||||
mail serving.
|
||||
|
||||
|
||||
Update to Django 1.6.8
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
**Mayan EDMS** has been updated to use Django 1.6.8.
|
||||
|
||||
|
||||
Events app
|
||||
~~~~~~~~~~
|
||||
The built-in history app has been removed in favor of a new events wrapper app
|
||||
for `Django activity stream`_
|
||||
|
||||
|
||||
Watch folders
|
||||
~~~~~~~~~~~~~
|
||||
Filesystem folders can be monitored for change and their files automatically
|
||||
uploaded as documents in **Mayan EDMS**.
|
||||
|
||||
|
||||
Vagrant file included
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
A vagrant file is now included to allow developers to provision a virtual machine
|
||||
with the latest development version of **Mayan EDMS**.
|
||||
|
||||
|
||||
User locale profile (language and timezone)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
each user's timezone settings.
|
||||
|
||||
|
||||
Document states
|
||||
~~~~~~~~~~~~~~~
|
||||
A new simple workflow app that can represent document states has been included.
|
||||
|
||||
|
||||
Explicit document types needed per index
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
the type to which they are associated is updated.
|
||||
|
||||
|
||||
Optional and required metadata types
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
for documents to be able to be uploaded. Optional metadata types on the other hand
|
||||
can be left blank by the user.
|
||||
|
||||
|
||||
Bulk document type change
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
the metadata types of the new document type are automatically assigned.
|
||||
|
||||
|
||||
New release cycle
|
||||
~~~~~~~~~~~~~~~~~
|
||||
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
|
||||
active at a given time: A new major version with new functionality and a minor version
|
||||
providing upgrades and fixes. This release (1.1) will be active and supported
|
||||
during releases of versions 2.x, but will go into end-of-life as soon as
|
||||
version 3.0 is released, at which time version series 2.x will go into
|
||||
maintenance mode.
|
||||
|
||||
|
||||
Deprecation of Python 2.6
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
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.
|
||||
|
||||
|
||||
Improved testings
|
||||
~~~~~~~~~~~~~~~~~
|
||||
**Mayan EDMS** is now automatically tested against SQLite, MySQL and PostgreSQL.
|
||||
|
||||
|
||||
API updates
|
||||
~~~~~~~~~~~
|
||||
Many new API endpoints have been added exposing the majority of **Mayan EDMS** functionality.
|
||||
|
||||
|
||||
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
|
||||
text messages.
|
||||
|
||||
Improved method for custom settings
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Custom settings now use a string based value, it is longer needed to import
|
||||
classes when customizing a setting::
|
||||
|
||||
from custom_app.backends import CustomStorageBackend
|
||||
DOCUMENTS_STORAGE_BACKEND = CustomStorageBackend
|
||||
|
||||
Instead the fully qualified name of the class must be passed as the setting value::
|
||||
|
||||
DOCUMENTS_STORAGE_BACKEND = 'custom_app.backends.CustomStorageBackend'
|
||||
|
||||
|
||||
Removal of the OCR config setting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
OCR behavior is now a document type property meaning that is can be turned
|
||||
on or off for specific document types.
|
||||
|
||||
|
||||
Per document language setting
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Previously the document language used for OCR was specified for the entire
|
||||
installation. If documents in multiple languages were uploaded some suffered
|
||||
lower successes rates. Now the language of each document can be specified.
|
||||
|
||||
|
||||
Metadata validation and parsing support
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
It is now possible to create function to validate metadata value input or
|
||||
parse and store corrected values. Three sample metadata validations functions
|
||||
are included: ``Parse date and time``, ``Parse date`` and ``Parse time``.
|
||||
|
||||
|
||||
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
|
||||
Bootstrap UI migration has advanced greatly.
|
||||
|
||||
|
||||
Simplified UI
|
||||
~~~~~~~~~~~~~
|
||||
All user actions as well as the logout button as now under the user functions
|
||||
section.
|
||||
|
||||
|
||||
Stable PDF previews generation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
The way PDF were being generated has been improved greatly eliminating
|
||||
spurious segmentation faults at the expense of a small speed penalty.
|
||||
|
||||
|
||||
More technical documentation
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
Many new sub topics were added to the development section of the document
|
||||
to allow developers to better understand the inner workings and philosophies
|
||||
of **Mayan EDMS**.
|
||||
|
||||
|
||||
Other changes
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
* Removal of the MAIN_SIDE_BAR_SEARCH setting
|
||||
* Removal of THEMES and themes support
|
||||
* Removal of VERBOSE_LOGIN setting
|
||||
* Removal of graphics backend supported file format list view
|
||||
* Removal of the MAIN_DISABLE_ICONS setting
|
||||
* Removal of specialized Sentry support
|
||||
* Removal of the MAIN_ENABLE_SCROLL_JS setting
|
||||
* Remove hardcoded root (/) redirections
|
||||
* Removal of APSCheduler as a requirement
|
||||
* Removal of the scheduled jobs view
|
||||
* Removal of the web_theme app
|
||||
* Removal of the sources icon selection support
|
||||
* Removal of the in-app help panels
|
||||
* Removal of the duplicate document search feature
|
||||
* Removal of filesystem document indexes mirroring feature
|
||||
* Improve sources app model sub classes and inheritance handling
|
||||
* Addition of CORS support to the API
|
||||
|
||||
|
||||
Upgrading from a previous version
|
||||
=================================
|
||||
IMPORTANT! Before running the upgrade make sure none of your documents have
|
||||
duplicated metadata types, meaning that the same metadata type must not appear
|
||||
twice for any given document.
|
||||
|
||||
If you installed Mayan EDMS by cloning the Git repository issue the commands::
|
||||
|
||||
$ git reset --hard HEAD
|
||||
$ git pull
|
||||
|
||||
otherwise download the compressed archived and uncompress it overriding the existing installation.
|
||||
|
||||
Next upgrade/add the new requirements::
|
||||
|
||||
$ pip install --upgrade -r requirements.txt
|
||||
|
||||
Migrate existing database schema with::
|
||||
|
||||
$ mayan-edms.py migrate dynamic_search 0001 --fake
|
||||
$ mayan-edms.py migrate history 0001 --fake
|
||||
$ mayan-edms.py migrate linking 0001 --fake
|
||||
$ mayan-edms.py migrate lock_manager 0001 --fake
|
||||
$ mayan-edms.py migrate tags 0001 --fake
|
||||
$ mayan-edms.py migrate
|
||||
|
||||
|
||||
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:
|
||||
|
||||
metadata | documenttypedefaults
|
||||
metadata | metadataset
|
||||
metadata | metadatasetitem
|
||||
ocr | documentqueue
|
||||
ocr | queuedocument
|
||||
sources | watchfolder
|
||||
sources | outofprocess
|
||||
sources | webform
|
||||
sources | stagingfolder
|
||||
tags | tagproperties
|
||||
|
||||
Any objects related to these content types by a foreign key will also
|
||||
be deleted. Are you sure you want to delete these content types?
|
||||
If you're unsure, answer 'no'.
|
||||
|
||||
Type 'yes' to continue, or 'no' to cancel:
|
||||
|
||||
|
||||
You can safely answer "yes".
|
||||
|
||||
Add new static media::
|
||||
|
||||
$ mayan-edms.py collectstatic --noinput
|
||||
|
||||
Remove unused dependencies::
|
||||
|
||||
$ pip uninstall APScheduler
|
||||
$ pip uninstall django-taggit
|
||||
|
||||
|
||||
The upgrade procedure is now complete.
|
||||
|
||||
|
||||
Backward incompatible changes
|
||||
=============================
|
||||
|
||||
* None
|
||||
|
||||
|
||||
Bugs fixed or issues closed
|
||||
===========================
|
||||
|
||||
* `issue #30 <https://github.com/mayan-edms/mayan-edms/issues/30>`_ Document workflows
|
||||
* `issue #32 <https://github.com/mayan-edms/mayan-edms/issues/32>`_ Watched folders
|
||||
* `issue #34 <https://github.com/mayan-edms/mayan-edms/issues/34>`_ Postprocessing document queue
|
||||
* `issue #35 <https://github.com/mayan-edms/mayan-edms/issues/35>`_ Metadata validation
|
||||
* `issue #37 <https://github.com/mayan-edms/mayan-edms/issues/37>`_ Add from __future__ import unicode_literals
|
||||
* `issue #39 <https://github.com/mayan-edms/mayan-edms/issues/39>`_ Capitalization of messages
|
||||
* `issue #40 <https://github.com/mayan-edms/mayan-edms/issues/40>`_ Update references to root ('/') path
|
||||
* `issue #46 <https://github.com/mayan-edms/mayan-edms/issues/46>`_ Advanced search past 1st page
|
||||
* `issue #49 <https://github.com/mayan-edms/mayan-edms/issues/49>`_ Problems with large pdf files
|
||||
* `issue #50 <https://github.com/mayan-edms/mayan-edms/issues/50>`_ raise CommandNotFound(path)
|
||||
* `issue #51 <https://github.com/mayan-edms/mayan-edms/issues/51>`_ Search with ANONYMOUS error
|
||||
* `issue #55 <https://github.com/mayan-edms/mayan-edms/issues/55>`_ Document approval cicle?
|
||||
* `issue #56 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #64 <https://github.com/mayan-edms/mayan-edms/issues/64>`_ Pluralize messages properly
|
||||
* `issue #65 <https://github.com/mayan-edms/mayan-edms/issues/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''
|
||||
* `issue #68 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #71 <https://github.com/mayan-edms/mayan-edms/issues/71>`_ Add retry support to the converter task
|
||||
* `issue #72 <https://github.com/mayan-edms/mayan-edms/issues/72>`_ Delete unused static icons
|
||||
* `issue #74 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #77 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #79 <https://github.com/mayan-edms/mayan-edms/issues/79>`_ Error installing
|
||||
* `issue #82 <https://github.com/mayan-edms/mayan-edms/issues/82>`_ Make document type a required field
|
||||
* `issue #83 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #85 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #87 <https://github.com/mayan-edms/mayan-edms/issues/87>`_ Per document language selection
|
||||
* `issue #88 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #90 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #92 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #96 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #104 <https://github.com/mayan-edms/mayan-edms/issues/104>`_ Finish polishing metadata validation patch
|
||||
* `issue #105 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #107 <https://github.com/mayan-edms/mayan-edms/issues/107>`_ Restrict document metadata addition and removal
|
||||
* `issue #108 <https://github.com/mayan-edms/mayan-edms/issues/108>`_ New home screen
|
||||
* `issue #109 <https://github.com/mayan-edms/mayan-edms/issues/109>`_ Add Roles API endpoints
|
||||
* `issue #111 <https://github.com/mayan-edms/mayan-edms/issues/111>`_ Add Checkouts API endpoints
|
||||
* `issue #112 <https://github.com/mayan-edms/mayan-edms/issues/112>`_ Add OCR API endpoints
|
||||
* `issue #114 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `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
|
||||
* `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
|
||||
* `issue #126 <https://github.com/mayan-edms/mayan-edms/issues/126>`_ Failing migration with SQLite
|
||||
* `issue #127 <https://github.com/mayan-edms/mayan-edms/issues/127>`_ Failing migration with Postgres
|
||||
* `issue #128 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #130 <https://github.com/mayan-edms/mayan-edms/issues/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?
|
||||
* `issue #137 <https://github.com/mayan-edms/mayan-edms/issues/137>`_ Enhancement of language selection
|
||||
* `issue #138 <https://github.com/mayan-edms/mayan-edms/issues/138>`_ Possibility to keep zoom factor
|
||||
* `issue #139 <https://github.com/mayan-edms/mayan-edms/issues/139>`_ Translatability of language selection
|
||||
* `issue #140 <https://github.com/mayan-edms/mayan-edms/issues/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'
|
||||
* `issue #144 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
* `issue #149 <https://github.com/mayan-edms/mayan-edms/issues/149>`_ Attribute error in document download
|
||||
* `issue #150 <https://github.com/mayan-edms/mayan-edms/issues/150>`_ Double second menu entry
|
||||
* `issue #152 <https://github.com/mayan-edms/mayan-edms/issues/152>`_ Document content empty
|
||||
* `issue #153 <https://github.com/mayan-edms/mayan-edms/issues/153>`_ south migration with postgres: documents: 031_remove_orphan_documents
|
||||
* `issue #157 <https://github.com/mayan-edms/mayan-edms/issues/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
|
||||
|
||||
|
||||
.. _Celery: http://www.celeryproject.org/
|
||||
.. _PyPI: https://pypi.python.org/pypi/mayan-edms/
|
||||
.. _Celery's documentation: http://celery.readthedocs.org/en/latest/configuration.html
|
||||
.. _namespaced: https://docs.djangoproject.com/en/1.6/topics/http/urls/#url-namespaces
|
||||
.. _email configuration settings documentation: https://docs.djangoproject.com/en/1.6/ref/settings/#email-host
|
||||
.. _Django activity stream: https://github.com/justquick/django-activity-stream
|
||||
|
||||
@@ -17,6 +17,14 @@ Final releases
|
||||
Below are release notes through **Mayan EDMS** |version| and its minor releases. Newer
|
||||
versions of the documentation contain the release notes for any later releases.
|
||||
|
||||
1.1 release
|
||||
-----------
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
1.1
|
||||
|
||||
|
||||
1.0 release
|
||||
-----------
|
||||
.. toctree::
|
||||
|
||||
|
Before Width: | Height: | Size: 14 KiB |
35
docs/topics/contributors.rst
Normal file
@@ -0,0 +1,35 @@
|
||||
.. _contributors:
|
||||
|
||||
============
|
||||
Contributors
|
||||
============
|
||||
|
||||
|
||||
How to contribute?
|
||||
------------------
|
||||
|
||||
You can help further the development of **Mayan EDMS** by testing, reporting bugs, submitting documentation or code patches.
|
||||
|
||||
Lead developer
|
||||
--------------
|
||||
* Roberto Rosario (roberto.rosario@mayan-edms.com) <https://twitter.com/siloraptor>
|
||||
|
||||
Contributors (in alphabetical order)
|
||||
------------------------------------
|
||||
* Aziz M. Bookwala (https://github.com/azizmb)
|
||||
* Bertrand Bordage (https://github.com/BertrandBordage)
|
||||
* Brian E (brian@realize.org)
|
||||
* David Herring (https://github.com/abadger1406)
|
||||
* Jens Kadenbach (https://github.com/audax)
|
||||
* Kolmar Kafran
|
||||
* IHLeanne (https://github.com/IHLeanne)
|
||||
* Iliya Georgiev (ikgeorgiev@gmail.com)
|
||||
* Lars Kruse (devel@sumpfralle.de)
|
||||
* Mathias Behrle <mbehrle@m9s.biz>
|
||||
* Meurig Freeman (https://github.com/meurig)
|
||||
* Nate Aune (nate@appsembler.com)
|
||||
* Paul Whipp [https://github.com/pwhipp] [http://paulwhippconsulting.com]
|
||||
* Rafael Esparra <rafael.esparra1@upr.edu>
|
||||
* Sergey Glita (s.v.glita@gmail.com)
|
||||
* Simone Federici [https://twitter.com/aldaranalton] [https://github.com/simone]
|
||||
* Webfaction (https://www.webfaction.com)
|
||||
@@ -1,49 +0,0 @@
|
||||
=============
|
||||
Customization
|
||||
=============
|
||||
|
||||
The general appearance of **Mayan EDMS** can be customized entirely just
|
||||
by changing a few settings.
|
||||
|
||||
------
|
||||
Themes
|
||||
------
|
||||
**Mayan EDMS** uses `Andrea Franz's excellent web app template`_, which includes
|
||||
several themes that could be used to adapt **Mayan EDMS**'s appearance to match
|
||||
an organtization existing applications' look and feel.
|
||||
|
||||
The theme can be changed very easily by setting the :setting:`WEB_THEME_THEME`
|
||||
configuration option to one of its valid values.
|
||||
|
||||
.. image:: ../_static/themes.png
|
||||
:alt: themes
|
||||
|
||||
------------
|
||||
Login screen
|
||||
------------
|
||||
The amount of information presented at the login screen can also be restricted
|
||||
for security or design reasons using :setting:`WEB_THEME_VERBOSE_LOGIN`
|
||||
configuration option.
|
||||
|
||||
.. image:: ../_static/mayan-login.png
|
||||
:alt: mayan login screen
|
||||
|
||||
-----------
|
||||
Home screen
|
||||
-----------
|
||||
Sometimes users just want to go directly to work and not just be greeted with
|
||||
a home screen. For these kind of situations **Mayan EDMS** has the
|
||||
:setting:`MAIN_DISABLE_HOME_VIEW` configuration option, which will cause
|
||||
users to land on their ``recent document list`` as soon as they log in.
|
||||
|
||||
-----
|
||||
Icons
|
||||
-----
|
||||
Some themes such as ``default`` might be more visually appealing to some
|
||||
people without the menu icons, for this **Mayan EDMS** provides the
|
||||
:setting:`MAIN_DISABLE_ICONS` configuration option.
|
||||
|
||||
.. image:: ../_static/no-icons.png
|
||||
:alt: mayan screens with out icons
|
||||
|
||||
.. _`Andrea Franz's excellent web app template`: https://github.com/pilu/web-app-theme
|
||||
@@ -5,20 +5,263 @@ Development
|
||||
|
||||
**Mayan EDMS** is under active development, and contributions are welcome.
|
||||
|
||||
If you have a feature request, suggestion, or bug reports, please open a new
|
||||
If you have a feature request, suggestion or bug report, please open a new
|
||||
issue on the `GitHub issue tracker`_. To submit patches, please send a pull
|
||||
request on GitHub_. Contributors are credited accordingly on the :ref:`contributors` section.
|
||||
|
||||
Follow the coding conventions document available at: https://github.com/mayan-edms/mayan-edms/wiki/Coding-conventions
|
||||
request on GitHub_. Make sure to add yourself to the :ref:`contributors` file.
|
||||
|
||||
.. _GitHub: https://github.com/mayan-edms/mayan-edms/
|
||||
.. _`GitHub issue tracker`: https://github.com/mayan-edms/mayan-edms/issues
|
||||
|
||||
|
||||
Project philosophies
|
||||
--------------------
|
||||
|
||||
How to think about **Mayan EDMS** when doing changes or adding new features, why things are the way they are in **Mayan EDMS**.
|
||||
|
||||
- Functionality must be as market/sector independent as possible, code for the 95% of use cases.
|
||||
- Each user must be able to configure and customize it to their needs after install.
|
||||
- Abstract as much as possible, each app must be an expert in just one thing, for other things they should use the API/classes/functions of other apps.
|
||||
- Assume as little as possible about anything outside the project (hardware, OS, storage).
|
||||
- Provide Python based abstraction so that a default install runs with a single step.
|
||||
- No hard dependencies on binaries unless there is no other choice.
|
||||
- Provide “drivers” or switchable backends to allow users to fine tune the installation.
|
||||
- Call to binaries only when there is no other choice or the Python choices are not viable/mature/efficient.
|
||||
- Each app is as independent and self contained as possible. Exceptions, the basic requirements: navigation, permissions, common, main.
|
||||
- If an app is meant to be used by more than one other app it should be as generic as possible in regard to the project and another app will bridge the functionality.
|
||||
|
||||
- Example: the acls app is app agnostic, document_acls connects the acls app with the documents app.
|
||||
- Example: since indexing (document_indexing) only applies to documents, the app is specialized and dependant on the documents app.
|
||||
|
||||
|
||||
Coding conventions
|
||||
------------------
|
||||
|
||||
Follow PEP8
|
||||
~~~~~~~~~~~
|
||||
Whenever possible, but don't obsess over things like line length.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ flake8 --ignore=E501,E128,E122 |less
|
||||
|
||||
Imports
|
||||
~~~~~~~
|
||||
|
||||
Import order should be:
|
||||
|
||||
- Standard Python modules
|
||||
- Installed Python modules
|
||||
- Core Django modules
|
||||
- Installed Django modules
|
||||
- Mayan EDMS modules
|
||||
- Local imports
|
||||
|
||||
Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
from __future__ import absolute_import
|
||||
|
||||
# Standard Python library
|
||||
import base64
|
||||
|
||||
# 3rd party installed Python libraries
|
||||
import requests
|
||||
|
||||
# Django core modules
|
||||
from django.db.models import Q
|
||||
from django.template.defaultfilters import slugify
|
||||
from django.utils.translation import ugettext
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
# 3rd party installed Django libraries
|
||||
from rest_framework import APIView
|
||||
|
||||
# Mayan apps
|
||||
from metadata.classes import MetadataClass
|
||||
|
||||
# Local app imports (relative)
|
||||
from .conf.settings import (
|
||||
AVAILABLE_INDEXING_FUNCTIONS,
|
||||
MAX_SUFFIX_COUNT, SLUGIFY_PATHS
|
||||
)
|
||||
from .exceptions import MaxSuffixCountReached
|
||||
from .filesystem import (
|
||||
fs_create_index_directory, fs_create_document_link,
|
||||
fs_delete_document_link, fs_delete_index_directory,
|
||||
assemble_suffixed_filename
|
||||
)
|
||||
from .models import Index, IndexInstanceNode, DocumentRenameCount
|
||||
|
||||
All local app module imports are in relative form, local app module name is to be referenced as little as possible, unless required by a specific feature, trick, restriction, ie: Runtime modification of the module's attributes.
|
||||
|
||||
Incorrect:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
|
||||
# documents app views.py model
|
||||
from documents.models import Document
|
||||
|
||||
Correct:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# documents app views.py model
|
||||
from .models import Document
|
||||
|
||||
|
||||
Dependencies
|
||||
~~~~~~~~~~~~
|
||||
**Mayan EDMS** apps follow a hierarchical model of dependency. Apps import from their parents or siblings, never from their children. Think plugins. A parent app must never assume anything about a possible existing child app. The documents app and the Document model are the basic entities they must never import anything else. The common and main apps are the base apps.
|
||||
|
||||
|
||||
Variables
|
||||
~~~~~~~~~
|
||||
Naming of variables should follow a Major to Minor convention, usually including the purpose of the variable as the first piece of the name, using underscores as spaces. camelCase is not used in **Mayan EDMS**.
|
||||
|
||||
Examples:
|
||||
|
||||
Links:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
link_document_page_transformation_list = ...
|
||||
link_document_page_transformation_create = ...
|
||||
link_document_page_transformation_edit = ...
|
||||
link_document_page_transformation_delete = ...
|
||||
|
||||
Constants:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
PERMISSION_SMART_LINK_VIEW = ...
|
||||
PERMISSION_SMART_LINK_CREATE = ...
|
||||
PERMISSION_SMART_LINK_DELETE = ...
|
||||
PERMISSION_SMART_LINK_EDIT = ...
|
||||
|
||||
Classes:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
class Document(models.Model):
|
||||
class DocumentPage(models.Model):
|
||||
class DocumentPageTransformation(models.Model):
|
||||
class DocumentType(models.Model):
|
||||
class DocumentTypeFilename(models.Model):
|
||||
|
||||
|
||||
Strings
|
||||
~~~~~~~
|
||||
Quotation character used in **Mayan EDMS** for strings is the single quote. Double quote is used for multiline comments or HTML markup.
|
||||
|
||||
|
||||
General
|
||||
~~~~~~~
|
||||
|
||||
Code should appear in their modules in alphabetic order or in their order of importance if it makes more sense for the specific application.
|
||||
This makes visual scanning easier on modules with a large number of imports, views or classes.
|
||||
Class methods that return a value should be prepended with a ``get_`` to differentiate from an object’s properties.
|
||||
When a variable refers to a file it should be named as follows:
|
||||
|
||||
- filename: The file’s name and extension only.
|
||||
- filepath: The entire path to the file including the filename.
|
||||
- path: A path to a directory.
|
||||
|
||||
Flash messages should end with a period as applicable for the language.
|
||||
Only exception is when the tail of the message contains an exceptions message as passed directly from the exception object.
|
||||
|
||||
App anatomy
|
||||
~~~~~~~~~~~
|
||||
|
||||
- __init__.py
|
||||
|
||||
- Generic initialization code (should be empty if possible)
|
||||
|
||||
- api.py
|
||||
|
||||
- File to hold functions that are meant to be used by external apps.
|
||||
- Interfaces meant to be used by other apps that are not models or classes.
|
||||
|
||||
- classes.py
|
||||
|
||||
- Hold python classes to be used internally or externally.
|
||||
- Any class defined by the app that is not a model.
|
||||
|
||||
- diagnostics.py
|
||||
|
||||
- Define functions that will return the state of the data of an app.
|
||||
- Does not fixes the problems only finds them.
|
||||
|
||||
- events.py
|
||||
|
||||
- Define history type events
|
||||
|
||||
- exceptions.py
|
||||
|
||||
- Exceptions defined by the app
|
||||
|
||||
- icons.py
|
||||
|
||||
- Defines the icons to be used by the links and views of the app.
|
||||
- Imports from the icons app only.
|
||||
|
||||
- links.py
|
||||
|
||||
- Defines the links to be used by the app.
|
||||
- Import only from the navigation app and the local icons.py file.
|
||||
|
||||
- literals.py
|
||||
|
||||
- Stores magic numbers, module choices (if static), settings defaults, and constants.
|
||||
- Should contain all capital case variables.
|
||||
- Must not import from any other module.
|
||||
|
||||
- maintenance.py
|
||||
|
||||
- Hold functions that the user may run periodically to fix errors in the app’s data.
|
||||
|
||||
- permissions.py
|
||||
|
||||
- Defines the permissions to be used by links and views to validate access.
|
||||
- Imports only from permissions app.
|
||||
- Link or view conditions such as testing for staff or super admin status are defined in the same file.
|
||||
|
||||
- statistics.py
|
||||
|
||||
- Provides functions that will computer any sort of statistical information on the app’s data.
|
||||
|
||||
- tasks.py
|
||||
|
||||
- Code to be execute as in the background or a as an process-of-process action.
|
||||
|
||||
- utils.py
|
||||
|
||||
- Hold utilitarian code that doesn't fit on any other app file or that is used by several files in the app.
|
||||
- Anything used internally by the app that is not a class or a literal (should be as little as possible)
|
||||
|
||||
Views behavior
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
- Delete views:
|
||||
|
||||
- Redirect to object list view if one object is deleted.
|
||||
- Redirect to previous view if many are deleted.
|
||||
- Previous view equals:
|
||||
|
||||
- previous variable in POST or
|
||||
- previous variable in GET or
|
||||
- request.META.HTTP_REFERER or
|
||||
- object list view or
|
||||
- 'home' view
|
||||
- fallback to ‘/’
|
||||
- if previous equal same view then previous should equal object list view or ‘/’
|
||||
|
||||
|
||||
Source Control
|
||||
--------------
|
||||
|
||||
**Mayan EDMS** source is controlled with Git_
|
||||
**Mayan EDMS** source is controlled with Git_.
|
||||
|
||||
The project is publicly accessible, hosted and can be cloned from **GitHub** using::
|
||||
|
||||
@@ -36,11 +279,13 @@ Git branch structure
|
||||
Current production release (|version|).
|
||||
``feature/``
|
||||
Unfinished/unmerged feature.
|
||||
``series/``
|
||||
Released versions.
|
||||
|
||||
|
||||
Each release is tagged and available for download on the Downloads_ section of the **Mayan EDMS** repository on GitHub_
|
||||
Each release is tagged and available for download on the Downloads_ section of the **Mayan EDMS** repository on GitHub_.
|
||||
|
||||
When submitting patches, please place your feature/change in its own branch prior to opening a pull request on GitHub_.
|
||||
When submitting patches, please place your code in its own ``feature/`` branch prior to opening a pull request on GitHub_.
|
||||
|
||||
.. _Git: http://git-scm.org
|
||||
.. _`Successful Git Branching Model`: http://nvie.com/posts/a-successful-git-branching-model/
|
||||
@@ -48,10 +293,64 @@ When submitting patches, please place your feature/change in its own branch prio
|
||||
.. _Downloads: https://github.com/mayan-edms/mayan-edms/archives/master
|
||||
|
||||
|
||||
Steps to deploy a development version
|
||||
-------------------------------------
|
||||
.. code-block:: bash
|
||||
|
||||
$ git clone https://github.com/mayan-edms/mayan-edms.git
|
||||
$ cd mayan-edms
|
||||
$ git checkout development
|
||||
$ virtualenv venv
|
||||
$ source venv/bin/activate
|
||||
$ pip install -r requirements.txt
|
||||
$ ./manage.py initialsetup
|
||||
$ ./manage.py runserver
|
||||
|
||||
|
||||
Setting up a development version using Vagrant
|
||||
----------------------------------------------
|
||||
Make sure you have Vagrant and a provider properly installed as per https://docs.vagrantup.com/v2/installation/index.html
|
||||
|
||||
Start and provision a machine using:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ vagrant up
|
||||
|
||||
To launch a standalone development server
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ vagrant ssh
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000
|
||||
|
||||
To launch a development server with a celery worker and Redis as broker
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ vagrant ssh
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ ./manage.py runserver 0.0.0.0:8000 --settings=mayan.settings.celery_redis
|
||||
|
||||
Then on a separate console launch a celery worker from the same provisioned Vagrant machine:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ vagrant ssh
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ cd ~/mayan-edms/
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ source venv/bin/activate
|
||||
vagrant@vagrant-ubuntu-trusty-32:~$ DJANGO_SETTINGS_MODULE='mayan.settings.celery_redis' celery -A mayan worker -l DEBUG -Q checkouts,mailing,uploads,converter,ocr,tools,indexing,metadata -Ofair -B
|
||||
|
||||
|
||||
Contributing changes
|
||||
--------------------
|
||||
Once your have create and committed some new code or feature, submit a Pull Request.
|
||||
Be sure to merge with mayan-edms/master before doing a pull request so that patches
|
||||
Once your have created and committed some new code or feature, submit a Pull Request.
|
||||
Be sure to merge with mayan-edms/development before doing a pull request so that patches
|
||||
apply as cleanly as possible. If there are no conflicts, Pull Requests can be merged
|
||||
directly from Github otherwise a manual command line merge has to be done and
|
||||
your patches might take longer to get merged.
|
||||
@@ -94,6 +393,11 @@ lines to your ``settings_local.py`` file::
|
||||
'propagate': True,
|
||||
'level':'DEBUG',
|
||||
},
|
||||
'common': {
|
||||
'handlers':['console'],
|
||||
'propagate': True,
|
||||
'level':'DEBUG',
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -109,3 +413,81 @@ Likewise, to see the debug output of the ``tags`` app, just add the following in
|
||||
|
||||
|
||||
.. _`logging capabilities`: https://docs.djangoproject.com/en/dev/topics/logging
|
||||
|
||||
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
**Mayan EDMS**'s documentation is written in `reStructured Text`_ format.
|
||||
|
||||
The documentation lives in the ``docs`` directory. In order to build it, you will first need to install Sphinx_. ::
|
||||
|
||||
$ pip install sphinx
|
||||
|
||||
|
||||
Then, to build an HTML version of the documentation, simply run the following from the **docs** directory::
|
||||
|
||||
$ make html
|
||||
|
||||
Your ``docs/_build/html`` directory will then contain an HTML version of the documentation, ready for publication on most web servers.
|
||||
|
||||
You can also generate the documentation in formats other than HTML.
|
||||
|
||||
.. _`reStructured Text`: http://docutils.sourceforge.net/rst.html
|
||||
.. _Sphinx: http://sphinx.pocoo.org
|
||||
|
||||
|
||||
Translations
|
||||
------------
|
||||
|
||||
Translations are handled online via the **Transifex** website: https://www.transifex.com/projects/p/mayan-edms/.
|
||||
To create a translation team for a new language or contribute to an already
|
||||
existing language translation, create a **Transifex** account and contact
|
||||
the team coordinator of the respective language in which you are interested.
|
||||
|
||||
|
||||
Installable package
|
||||
-------------------
|
||||
|
||||
Source file package
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This is the sequence of step I use to produce an installable package:
|
||||
|
||||
1. Make sure there are no lingering packages from previous attempts::
|
||||
|
||||
$ rm dist -R
|
||||
|
||||
2. Generate the packaged version (will produce dist/mayan-edms-1.1.0.tar.gz)::
|
||||
|
||||
$ python setup.py sdist
|
||||
|
||||
3. Do a test install::
|
||||
|
||||
$ cd /tmp
|
||||
$ virtualenv venv
|
||||
$ source venv/bin/activate
|
||||
$ pip install <path of the Git repository>/dist/mayan-edms-1.1.0.tar.gz
|
||||
$ mayan-edms.py initialsetup
|
||||
$ mayan-edms.py runserver
|
||||
|
||||
|
||||
Wheel package
|
||||
~~~~~~~~~~~~~
|
||||
|
||||
1. Install wheel::
|
||||
|
||||
$ pip install wheel
|
||||
|
||||
2. Create wheel package using the source file package (Until issue #99 of wheel is fixed: https://bitbucket.org/pypa/wheel/issue/99/cannot-exclude-directory)::
|
||||
|
||||
$ pip wheel --no-index --no-deps --wheel-dir dist dist/mayan-edms-1.1.0.tar.gz
|
||||
|
||||
3. Do a test install::
|
||||
|
||||
$ cd /tmp
|
||||
$ virtualenv venv
|
||||
$ source venv/bin/activate
|
||||
$ pip install <path of the Git repository>/dist/mayan_edms-1.1.0-py2-none-any.whl
|
||||
$ mayan-edms.py initialsetup
|
||||
$ mayan-edms.py runserver
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
======================
|
||||
Document visualization
|
||||
======================
|
||||
|
||||
|
||||
The philosophy in place is to try to avoid having users download a documents and leave
|
||||
**Mayan EDMS** to be able to see them, so in essence making **Mayan EDMS** a
|
||||
visualization tool too. The conversion backend is a stack of functions,
|
||||
first the mimetype is evaluated, if it is an office document it is passed
|
||||
to LibreOffice_ working in headless mode (and managed by supervisor_)
|
||||
for conversion to PDF_. The PDF_ is stored in a temporary
|
||||
cache along side all the other files that were not office documents,
|
||||
from here they are inspected to determine the page count and the
|
||||
corresponding blank database entires are created. After the database
|
||||
update they all go to the conversion driver specified by the configuration
|
||||
option :setting:`CONVERTER_GRAPHICS_BACKEND` and a high resolution
|
||||
master preview of each file is generated and stored in the persistent
|
||||
cache. From the master previews in the persistent cache, volatile
|
||||
previews are then created on demand for the different sizes requested
|
||||
(thumbnail, page preview, full preview) and rotated interactively
|
||||
in the details view.
|
||||
|
||||
Office document conversion however won't always work as expected because
|
||||
LibreOffice_ do not provide proper API's, so subprocess calling,
|
||||
temporary files and other black magic needs to be invoked to get it
|
||||
properly integrated. **Mayan EDMS** treats documents as collections of pages
|
||||
or frames, and text extraction and OCR is done per page not per document,
|
||||
thats why even text documents need to be rendered by LibreOffice_
|
||||
before they can be previewed and text can be extracted.
|
||||
|
||||
Version 0.12.1 introduced a new method of converting office documents, this
|
||||
new method doesn't require the use of the command line utility ``UNOCONV``.
|
||||
This new method proved to continue working better than previous solution
|
||||
and the use of ``UNOCONV`` have been removed. Existing conversion method
|
||||
uses just one configuration option: :setting:`CONVERTER_LIBREOFFICE_PATH`
|
||||
which defaults to '/usr/bin/libreoffice'.
|
||||
|
||||
|
||||
.. _PDF: http://en.wikipedia.org/wiki/Portable_Document_Format
|
||||
.. _LibreOffice: http://www.libreoffice.org/
|
||||
.. _supervisor: http://supervisord.org/introduction.html
|
||||
@@ -1,21 +0,0 @@
|
||||
=============
|
||||
Documentation
|
||||
=============
|
||||
|
||||
**Mayan EDMS**'s documentation is written in `reStructured Text`_ format.
|
||||
|
||||
The documentation lives in the ``docs`` directory. In order to build it, you will first need to install Sphinx_. ::
|
||||
|
||||
$ pip install sphinx
|
||||
|
||||
|
||||
Then, to build an HTML version of the documentation, simply run the following from the **docs** directory::
|
||||
|
||||
$ make html
|
||||
|
||||
Your ``docs/_build/html`` directory will then contain an HTML version of the documentation, ready for publication on most web servers.
|
||||
|
||||
You can also generate the documentation in formats other than HTML.
|
||||
|
||||
.. _`reStructured Text`: http://docutils.sourceforge.net/rst.html
|
||||
.. _Sphinx: http://sphinx.pocoo.org
|
||||
@@ -4,15 +4,12 @@ FAQ
|
||||
|
||||
Frequently asked questions and solutions
|
||||
|
||||
Database related
|
||||
----------------
|
||||
|
||||
**Q: PostgreSQL vs. MySQL**
|
||||
|
||||
Since Django abstracts database operations from a functional point of view
|
||||
**Mayan EDMS** will behave exactly the same either way. The only concern
|
||||
would be that MySQL doesn't support transactions for schema modifying
|
||||
commands. The only moment this could cause problems is when running
|
||||
commands. The only moment this could cause problems is when running
|
||||
South migrations during upgrades, if a migration fails the database
|
||||
structure is left in a transitory state and has to be reverted manually
|
||||
before trying again.
|
||||
@@ -22,7 +19,7 @@ before trying again.
|
||||
|
||||
* Solution::
|
||||
|
||||
$ manage.py shell
|
||||
$ mayan-edms.py shell
|
||||
|
||||
>>> from django.db import connection
|
||||
>>> cursor = connection.cursor()
|
||||
@@ -49,8 +46,12 @@ When using ``MySQL`` and doing OCR on languages other than English
|
||||
- Ref: 2- http://markmail.org/message/bqajx2utvmtriixi
|
||||
|
||||
|
||||
Document sharing
|
||||
----------------
|
||||
**Q: Error "django.db.utils.IntegrityError IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`...`.`...`, CONSTRAINT `..._refs_id_b0252274` FOREIGN KEY (`...`) REFERENCES `...` (`...`))')**
|
||||
|
||||
* Solution:
|
||||
|
||||
- Convert all MySQL tables to the same type, either all MyISAM or InnoDB
|
||||
|
||||
|
||||
**Q: File system links not showing when serving content with ``Samba``**
|
||||
|
||||
@@ -75,9 +76,6 @@ Document sharing
|
||||
- Ref: 1- http://www.samba.org/samba/docs/man/manpages-3/smb.conf.5.html
|
||||
|
||||
|
||||
Document handling
|
||||
-----------------
|
||||
|
||||
**Q: How do you upload a new version of an existing file?**
|
||||
|
||||
* Solution:
|
||||
@@ -90,9 +88,6 @@ Document handling
|
||||
|
||||
|
||||
|
||||
Deployments
|
||||
-----------
|
||||
|
||||
**Q: Is virtualenv required as specified in the documentation?**
|
||||
|
||||
* It is not necessary, it's just a strong recommendation mainly to reduce
|
||||
@@ -110,7 +105,7 @@ Django's development server doesn't serve static files unless the ``DEBUG``
|
||||
option is set to ``True``, this mode of operation should only be used for
|
||||
development or testing. For production deployments the management command::
|
||||
|
||||
$ ./manage.py collectstatic
|
||||
$ mayan-edms.py collectstatic
|
||||
|
||||
should be used and the resulting ``static`` folder served from a webserver.
|
||||
For more information, read https://docs.djangoproject.com/en/dev/howto/static-files/
|
||||
@@ -118,9 +113,6 @@ and https://docs.djangoproject.com/en/1.2/howto/static-files/ or
|
||||
http://mayan-edms-ru.blogspot.com/2011/11/blog-post_09.html
|
||||
|
||||
|
||||
Other
|
||||
-----
|
||||
|
||||
**Q: Can you change the display order of documents...i.e can they be in alphabetical order?**
|
||||
|
||||
A the moment no, but it is something being considered.
|
||||
@@ -14,37 +14,29 @@ Features
|
||||
|
||||
* Collaboration tools.
|
||||
|
||||
* Discuss documents, comment on new version of a document.
|
||||
* Discuss documents, or comment on new versions of a document.
|
||||
|
||||
* Office document format support.
|
||||
|
||||
* Word processing files, spreadsheets, presentations are common supported formats.
|
||||
* **Mayan EDMS** can detect the presence of Libre Office and use it to support word processing files, spreadsheets and presentations.
|
||||
|
||||
* User defined metadata fields and meta data sets.
|
||||
* User defined metadata fields.
|
||||
|
||||
* Several metadata fields can be matched to a document type as per technical, legal or structural requirements such as the `Dublin core`_.
|
||||
|
||||
* Metadata fields can be grouped into sets per technical, legal or structural requirements such as the `Dublin core`_.
|
||||
|
||||
* Dynamic default values for metadata.
|
||||
|
||||
* Metadata fields can have an initial value, which can be static or determined by an user provided Python code snippet.
|
||||
|
||||
* Filesystem integration.
|
||||
|
||||
* If enabled, the document database index can be mirrored in the filesystem of the host and shared via Samba_ or any other sharing method to client computers on a network.
|
||||
|
||||
* User defined document unique identifier and checksum algorithms.
|
||||
|
||||
* Users can alter the default method used to uniquely indentify documents.
|
||||
* Metadata fields can have an initial value, which can be static or determined by an user provided Python code snippet.
|
||||
|
||||
* Documents can be uploaded from different sources.
|
||||
|
||||
* Local file or server side file uploads.
|
||||
* Local file or server side file uploads, multifunctional copier, or even via email.
|
||||
|
||||
* Batch upload many documents with the same metadata.
|
||||
|
||||
* Clone a document's metadata for speedier uploads and eliminate repetitive data entry.
|
||||
|
||||
* Previews for a great deal of image formats, including PDF.
|
||||
* Previews for a great deal of image formats.
|
||||
|
||||
* **Mayan EDMS** provides different file conversion backends with different levels of functionality and requirements to adapt to different deployment environments.
|
||||
|
||||
@@ -53,7 +45,7 @@ Features
|
||||
* Documents can be searched by their text content, their metadata or any other file attribute such as name, extension, etc.
|
||||
|
||||
* Configurable document grouping.
|
||||
|
||||
|
||||
* Automatic linking of documents based on metadata values or document properties.
|
||||
|
||||
* :doc:`Roles support <../topics/permissions>`.
|
||||
@@ -68,37 +60,32 @@ Features
|
||||
|
||||
* Multiple page PDFs and TIFFs files are supported.
|
||||
|
||||
* :doc:`Distributed OCR processing <../topics/ocr>`.
|
||||
* Automatic OCR processing.
|
||||
|
||||
* The task of transcribing text from documents via OCR can be distributed among several physical or virtual computers to decrease load and increase availability.
|
||||
|
||||
* Multilingual user interface (English, Spanish, Portuguese, Russian, Polish).
|
||||
* Multilingual user interface.
|
||||
|
||||
* **Mayan EDMS** is written using the Django_ framework, which natively supports Unicode. Together with the use of text templates **Mayan EDMS** can be translated to practically any language spoken in the world.
|
||||
* **Mayan EDMS** being written using the Django_ framework, can be translated to practically any language spoken in the world.
|
||||
For a list of translated languages have a look at Transifex_.
|
||||
|
||||
* :doc:`Multilingual OCR support <../topics/ocr>`.
|
||||
* Multilingual OCR support.
|
||||
|
||||
* Multilingual OCR is provided as supported by the available language backends of the OCR engine tesseract.
|
||||
* Current language of the document is passed to the corresponding OCR engine to increase the rate of data vs. recognition errors.
|
||||
|
||||
* Search of duplicates.
|
||||
* :doc:`Plugable storage backends <../topics/file_storage>`.
|
||||
|
||||
* Duplicate documents can easily be searched.
|
||||
|
||||
* :doc:`Plugable storage backends <../topics/file_storage>` (File based and GridFS included).
|
||||
|
||||
* Very easy to use 3rd party plugins such as the ones available for Amazon EC2.
|
||||
|
||||
* Color coded tagging.
|
||||
|
||||
* Labeled and color coded tags can be assigned for intuitive recognition.
|
||||
|
||||
* Staging folders to receive scanned documents directly from network attached scanners.
|
||||
* Workflows.
|
||||
|
||||
* Preview scanned files even before uploading them.
|
||||
* Keep track of the state a document, along with the log of the previous state changes.
|
||||
|
||||
|
||||
.. _`Dublin core`: http://dublincore.org/metadata-basics/
|
||||
.. _Samba: http://www.samba.org/
|
||||
.. _Django: https://www.djangoproject.com/
|
||||
.. _Transifex: https://www.transifex.com/projects/p/mayan-edms/
|
||||
@@ -3,24 +3,15 @@ File storage
|
||||
============
|
||||
|
||||
The files are stored and placed under **Mayan EDMS** "control" to avoid
|
||||
filename clashes (each file gets renamed to its UUID and with an extension)
|
||||
and stored in a simple flat arrangement in a directory. This doesn't
|
||||
filename clashes (each file gets renamed to its UUID and without extension)
|
||||
and stored in a simple flat arrangement in a directory. This doesn't
|
||||
stop access to the files but it is not recommended because moving,
|
||||
renaming or updating the files directly would throw the database out
|
||||
of sync. For direct access to the files the recommended way is to create an
|
||||
:doc:`index <indexes>`, use the indexing mirroring feature and share the result via
|
||||
file serving software [#f1]_.
|
||||
of sync.
|
||||
|
||||
**Mayan EDMS** components are as decoupled from each other as possible,
|
||||
storage in this case is very decoupled and its behavior is controlled
|
||||
not by the project but by the Storage progamming class. Why this design?
|
||||
not by the project but by the Storage progamming class. Why this design?
|
||||
All the other parts don't make any assumptions about the actual file
|
||||
storage, so that **Mayan EDMS** can work saving files locally, over the
|
||||
network or even across the internet and still operate exactly the same.
|
||||
|
||||
The file storage behavior is controlled by the :setting:`DOCUMENTS_STORAGE_BACKEND`
|
||||
and should be set to a class or subclass of Django's ``django.core.files.storage.Storage`` class.
|
||||
|
||||
.. rubric:: Footnotes
|
||||
|
||||
.. [#f1] http://en.wikipedia.org/wiki/File_server
|
||||
storage, files can be saved locally, over the network or even across the
|
||||
internet and everything will still operate exactly the same.
|
||||
|
||||
85
docs/topics/getting_started.rst
Normal file
@@ -0,0 +1,85 @@
|
||||
===============
|
||||
Getting started
|
||||
===============
|
||||
|
||||
Before starting to use **Mayan EDMS**, two things need to be configured:
|
||||
|
||||
- At least one document source
|
||||
- At least one document type
|
||||
|
||||
Document sources
|
||||
----------------
|
||||
|
||||
Document sources define from where documents will be uploaded or gathered.
|
||||
To add a document source go to the ``Setup`` section, then to the ``Sources`` section.
|
||||
To obtain the fastest working setup, create a new source of type ``Web form``.
|
||||
``Web forms`` are just HTML forms with a ``Browse`` button that will open the file upload
|
||||
dialog when clicked. Name it something simple like ``Local documents`` and select whether or not
|
||||
compressed files uploaded from this source will be automatically decompressed and
|
||||
their content treated as individual documents.
|
||||
|
||||
Document types
|
||||
--------------
|
||||
|
||||
Examples of document types are: ``Legal documents``, ``Internal documents``, ``Medical records``, ``Designing specifications``, ``Permits``.
|
||||
A document type represent a class of documents which share some common property.
|
||||
A good indicator that can help you determine your document types is what kind of
|
||||
information or ``metadata`` is attached to those documents.
|
||||
|
||||
Once a document source and a document type have been created you have all the minimal
|
||||
elements required to start uploading documents.
|
||||
|
||||
Defining metadata
|
||||
-----------------
|
||||
|
||||
With your document types defined it should be much easier now to define the required
|
||||
``metadata`` for each of these document types. When creating ``metadata`` types,
|
||||
the first thing that will be needed is the internal name with which this metadata
|
||||
type will be referenced in other areas of **Mayan EDMS**. The internal name must not
|
||||
contain spaces or uppercase characters. After the internal name, enter the name that
|
||||
will be visible to you and your users, which usually will be similar or the same as the
|
||||
internal name, but with proper capitalization and spacing. The ``metadata types``
|
||||
can have default values to speed up data entry. They can be single number or a
|
||||
words enclosed in quotes, ie::
|
||||
|
||||
"Building A"
|
||||
|
||||
or::
|
||||
|
||||
"Storage room 1"
|
||||
|
||||
Default values can also be defined as ``Python`` statements or functions such as::
|
||||
|
||||
current_date()
|
||||
|
||||
If you want to restrict or standardize the values for a metadata type, use the ``Lookup`` field to
|
||||
define the list of options that are allowed. Define the lookup list using a ``Python``
|
||||
list of quoted values, for example::
|
||||
|
||||
["2000", "2001", "2002", "2003", "2004"].
|
||||
|
||||
Instead of a free entry text field, your users will get a dropdown list of years,
|
||||
this will ensure an unified data entry formatting. You can also use a
|
||||
``Python`` expression to generate the lookup list.
|
||||
|
||||
Metadata types can be assigned in two ways to a document type, by making it an
|
||||
optional or a required metadata type for a specific document. This method
|
||||
allows metadata very important for some types of documents (like Invoice
|
||||
numbers to Invoices) to be required for an Invoice to be able to be uploaded.
|
||||
Accordingly optional metadata types will be presented, but users are not required to
|
||||
enter a value to be able to upload a document.
|
||||
|
||||
Indexes
|
||||
-------
|
||||
|
||||
After defining all your metadata types you can also define indexes to
|
||||
let **Mayan EDMS** automatically categorize your documents based on their metadata values.
|
||||
To create an index to organize invoices by a year metadata field do the following:
|
||||
|
||||
- Create a year metadata type with the name ``year`` and the label ``Year``.
|
||||
- Create an invoice document type and assign it the ``year`` metadata type as a required metadata type.
|
||||
- Create a new index, give it the name ``invoices_per_year`` and the label ``Invoices per year``.
|
||||
- Edit the index's ``Tree template``, add a ``New child node``, and enter ``document.metadata_value_of.year`` as the ``Indexing expression``, check the ``Link documents`` checkbox and save.
|
||||
- Link this new index to the invoice document type using the ``Document types`` button of the index.
|
||||
|
||||
Now every time a new invoice upload or an existing invoice's ``year`` metadata value is changed, a new folder will be created in the ``Invoices`` index with the corresponding invoices for that year.
|
||||
@@ -6,19 +6,18 @@ Introductions to all the key parts of Mayan EDMS you'll need to know:
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
contributors
|
||||
development
|
||||
faq
|
||||
features
|
||||
file_storage
|
||||
initial_import
|
||||
permissions
|
||||
transformations
|
||||
document_visualization
|
||||
versioning
|
||||
signatures
|
||||
getting_started
|
||||
indexes
|
||||
installation
|
||||
license
|
||||
permissions
|
||||
signatures
|
||||
smart_links
|
||||
tags
|
||||
ocr
|
||||
settings
|
||||
customization
|
||||
development
|
||||
documentation
|
||||
translations
|
||||
transformations
|
||||
versioning
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
=======
|
||||
Indexes
|
||||
=======
|
||||
To configure: |Setup tab| |Right arrow| |Indexes button| |Right arrow| |Tree template link|
|
||||
|
||||
To use: |Index tab|
|
||||
|
||||
Indexes are an automatic method to hierarchically organize documents in relation to their metadata and to each other.
|
||||
Indexes are an automatic method to hierarchically organize documents in relation to their properties.
|
||||
|
||||
Index templates
|
||||
===============
|
||||
@@ -14,10 +11,7 @@ Since multiple indexes can be defined, the first step is to create an empty inde
|
||||
Administrators then define the tree template showing how the index will be structured.
|
||||
Each branch can be a pseudo folder, which can hold other child 'folders' or
|
||||
a document container which will have all the links to the documents that
|
||||
matched the path to reach the document container.
|
||||
|
||||
.. image:: ../_static/index_template.png
|
||||
:alt: index template
|
||||
matched the criteria of the document container.
|
||||
|
||||
Index instances
|
||||
===============
|
||||
@@ -26,57 +20,3 @@ The template is the skeleton from which an instance of the index is then
|
||||
auto-populated with links to the documents depending on the rules of each
|
||||
branch of the index evaluated against the metadata and properties of the documents.
|
||||
|
||||
.. image:: ../_static/index_instance.png
|
||||
:alt: index instance
|
||||
|
||||
Index serving
|
||||
=============
|
||||
|
||||
Indexes can be mirrored to the operating system filesystem
|
||||
using the configuration option
|
||||
:setting:`DOCUMENT_INDEXING_FILESYSTEM_SERVING`.
|
||||
|
||||
``settings_local.py``::
|
||||
|
||||
# Supposing the 'Sample index' internal name is 'sample_index'
|
||||
DOCUMENT_INDEXING_FILESYSTEM_SERVING = {
|
||||
'sample_index': '/var/local/document/sharing/invoices/',
|
||||
}
|
||||
|
||||
This creates an actual directory tree and links to the actual stored files but using
|
||||
the filename of the documents as stored in the database.
|
||||
|
||||
.. image:: ../_static/indexes.png
|
||||
:alt: indexes diagram
|
||||
|
||||
This filesystem mirror of the index can them be served with Samba_ across the
|
||||
network. This access would be read-only, with new versions of the files
|
||||
being uploaded from the web GUI using the document versioning support.
|
||||
|
||||
The index cannot be edited manually to protect it's integrity, only changing
|
||||
the rules or the metadata of the documents would cause the index to be
|
||||
regenerated. For manual organization of documents there are the folders,
|
||||
their structure is however flat, and they have to be manually updated and
|
||||
curated.
|
||||
|
||||
.. _Samba: http://www.samba.org/
|
||||
|
||||
.. |Setup tab| image:: /_static/setup_tab.png
|
||||
:alt: Setup tab
|
||||
:align: middle
|
||||
|
||||
.. |Right arrow| image:: /_static/arrow_right.png
|
||||
:alt: Right arrow
|
||||
:align: middle
|
||||
|
||||
.. |Indexes button| image:: /_static/indexes_button.png
|
||||
:alt: Indexes button
|
||||
:align: middle
|
||||
|
||||
.. |Tree template link| image:: /_static/tree_template_link.png
|
||||
:alt: Tree template link
|
||||
:align: middle
|
||||
|
||||
.. |Index tab| image:: /_static/index_tab.png
|
||||
:alt: Index tab
|
||||
:align: middle
|
||||
|
||||
@@ -1,48 +0,0 @@
|
||||
====================
|
||||
Initial data loading
|
||||
====================
|
||||
|
||||
Bulk document import
|
||||
--------------------
|
||||
|
||||
**Mayan EDMS** has the ability to individually upload the contents of compressed
|
||||
files, however by nature of being a web based application it is bounded by the
|
||||
limitations of the HTTP protocol. This imposes a limit on the file size and
|
||||
the amount of time **Mayan EDMS** may keep a connection open while it processes
|
||||
compressed files. When the desired amount of documents is bigger than what
|
||||
these limitations allow, **Mayan EDMS** provides a command line tool for out of
|
||||
process document importation.
|
||||
|
||||
The command line options for this feature are as follows::
|
||||
|
||||
$ ./manage.py bulk_upload --noinput --metadata '{"project": "bulk"}' --document_type "Accounting documents" compressed.zip
|
||||
|
||||
**Optional arguments**
|
||||
|
||||
* The ``--noinput`` argument skips confirmation and starts the upload immediately.
|
||||
* The ``--metadata`` argument allows specifing what metadata will be assigned
|
||||
to the documents when uploaded.
|
||||
* And the ``--document_type`` applies a previously defined
|
||||
document type to the uploaded documents.
|
||||
|
||||
|
||||
Bulk user import
|
||||
----------------
|
||||
|
||||
As well as providing bulk document import functionality **Mayan EDMS** also
|
||||
includes a management command to import a large number of users
|
||||
from a CSV file. The command line options for this feature are as
|
||||
follow::
|
||||
|
||||
$ ./manage.py import_users --noinput --password=welcome123 --skip-repeated user_list.csv
|
||||
|
||||
The CSV field order must be: username, first name, last name and email, any columns after
|
||||
those are ignored.
|
||||
|
||||
**Optional arguments**
|
||||
|
||||
* The ``--noinput`` argument skips confirmation and starts the import immediately.
|
||||
* The ``--password`` argument allows specifing what default password will be assigned
|
||||
to all the new users that are imported.
|
||||
* The ``--skip-repeated`` tells the importer to not stop when finding
|
||||
that a user already exists in the database.
|
||||
@@ -2,18 +2,20 @@
|
||||
Installation
|
||||
============
|
||||
|
||||
Ubuntu, Debian or Fedora server
|
||||
-------------------------------
|
||||
|
||||
**Mayan EDMS** should be deployed like any other Django_ project and preferably using virtualenv_.
|
||||
|
||||
Being a Django_ and a Python_ project familiarity with these technologies is
|
||||
required to understand why **Mayan EDMS** does some of the things it does the way
|
||||
it does them.
|
||||
|
||||
Before installing **Mayan EDMS**, the binary requirements must be installed first.
|
||||
|
||||
Ubuntu
|
||||
------
|
||||
|
||||
If using a Debian_ or Ubuntu_ based Linux distribution getting the executable requirements is as easy as::
|
||||
|
||||
$ sudo apt-get install python-dev gcc tesseract-ocr unpaper python-virtualenv ghostscript libjpeg-dev libpng-dev poppler-utils -y
|
||||
|
||||
If using a Fedora_ based Linux distribution get the executable requirements using Yum::
|
||||
|
||||
$ sudo yum install -y git gcc tesseract unpaper python-virtualenv ghostscript libjpeg-turbo-devel libpng-devel poppler-util python-devel
|
||||
$ sudo apt-get install libjpeg-dev libmagic1 libpng-dev libreoffice libtiff-dev gcc ghostscript gpgv python-dev python-virtualenv tesseract-ocr unpaper poppler-utils -y
|
||||
|
||||
Initialize a ``virtualenv`` to deploy the project:
|
||||
|
||||
@@ -69,7 +71,7 @@ to /usr/bin/ with ...
|
||||
sudo ln -s /opt/local/bin/tesseract /usr/bin/tesseract && \
|
||||
sudo ln -s /opt/local/bin/identify /usr/bin/identify && \
|
||||
sudo ln -s /opt/local/bin/gs /usr/bin/gs
|
||||
|
||||
|
||||
... alternatively set the paths in the ``settings/locals.py``
|
||||
|
||||
.. code-block:: python
|
||||
@@ -104,7 +106,7 @@ to /usr/bin/ with ...
|
||||
sudo ln -s /usr/local/bin/unpaper /usr/bin/unpaper && \
|
||||
sudo ln -s /usr/local/bin/pdftotext /usr/bin/pdftotext && \
|
||||
sudo ln -s /usr/local/bin/gs /usr/bin/gs && \
|
||||
|
||||
|
||||
... alternatively set the paths in the ``settings/locals.py``
|
||||
|
||||
.. code-block:: python
|
||||
@@ -122,25 +124,24 @@ Production use
|
||||
To create a custom settings file for **Mayan EDMS**, create a Python (.py) file
|
||||
in the directory: venv/lib/python2.7/site-packages/mayan/settings/ with the following basic content::
|
||||
|
||||
# my_settings.py
|
||||
# venv/lib/python2.7/site-packages/mayan/settings/my_settings.py
|
||||
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from .local import *
|
||||
from . import *
|
||||
|
||||
<Your customized settings>
|
||||
|
||||
To test your settings launch **Mayan EDMS** using::
|
||||
|
||||
$ mayan-edms runserver --settings=mayan.settings.my_settings
|
||||
$ mayan-edms.py runserver --settings=mayan.settings.my_settings
|
||||
|
||||
After making sure everything is running correctly, stop the runserver command.
|
||||
Deploy **Mayan EDMS** using the webserver of your preference. For more information
|
||||
on deployment instructions and examples checkout Django's official documentation
|
||||
on deployment instructions and examples, checkout Django's official documentation
|
||||
on the topic https://docs.djangoproject.com/en/1.6/howto/deployment/
|
||||
|
||||
|
||||
|
||||
Other database managers
|
||||
-----------------------
|
||||
|
||||
@@ -149,16 +150,10 @@ corresponding python database drivers and add the corresponding database setting
|
||||
to your settings file (see above) as shown here: https://docs.djangoproject.com/en/1.6/ref/settings/#std:setting-DATABASES
|
||||
|
||||
|
||||
.. _`vendor lock-in`: https://secure.wikimedia.org/wikipedia/en/wiki/Vendor_lock-in
|
||||
.. _Python: http://www.python.org/
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _OCR: https://secure.wikimedia.org/wikipedia/en/wiki/Optical_character_recognition
|
||||
.. _`Open source`: https://secure.wikimedia.org/wikipedia/en/wiki/Open_source
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _Apache: https://www.apache.org/
|
||||
.. _Debian: http://www.debian.org/
|
||||
.. _Ubuntu: http://www.ubuntu.com/
|
||||
.. _Django: http://www.djangoproject.com/
|
||||
.. _Download: https://github.com/mayan-edms/mayan-edms/archives/master
|
||||
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html
|
||||
.. _Fedora: http://fedoraproject.org/
|
||||
.. _Python: http://www.python.org/
|
||||
.. _SQLite: https://www.sqlite.org/
|
||||
.. _Ubuntu: http://www.ubuntu.com/
|
||||
.. _virtualenv: http://www.virtualenv.org/en/latest/index.html
|
||||
@@ -1,34 +0,0 @@
|
||||
===
|
||||
OCR
|
||||
===
|
||||
To use: |Tools tab| |Right arrow| |OCR button|
|
||||
|
||||
Because OCR is an intensive operation, documents are queued for OCR for
|
||||
later handling, the amount of documents processed in parallel is
|
||||
controlled by the :setting:`OCR_NODE_CONCURRENT_EXECUTION` configuration
|
||||
option. Ideally the machine serving **Mayan EDMS** should disable OCR
|
||||
processing by settings this options to 0, with other machines or cloud
|
||||
instances then connected to the same database doing the OCR processing.
|
||||
The document is checked to see if there are text parsers available, is
|
||||
no parser is available for that file type then the document is passed
|
||||
to Tesseract_ page by page and the results stored per page, this is to
|
||||
keep the page image in sync with the transcribed text. However when
|
||||
viewing the document in the details tab all the pages text are
|
||||
concatenated and shown to the user. All newly uploaded documents will be
|
||||
queued automatically for OCR, if this is not desired setting the :setting:`OCR_AUTOMATIC_OCR`
|
||||
option to ``False`` would stop this behavior.
|
||||
|
||||
|
||||
.. _Tesseract: http://code.google.com/p/tesseract-ocr/
|
||||
|
||||
.. |Tools tab| image:: /_static/tools_tab.png
|
||||
:alt: Tags tab
|
||||
:align: middle
|
||||
|
||||
.. |Right arrow| image:: /_static/arrow_right.png
|
||||
:alt: Right arrow
|
||||
:align: middle
|
||||
|
||||
.. |OCR button| image:: /_static/ocr_button.png
|
||||
:alt: OCR button
|
||||
:align: middle
|
||||
@@ -2,64 +2,46 @@
|
||||
Permissions
|
||||
===========
|
||||
|
||||
**Mayan EDMS** provides very exact control over what activies users can
|
||||
perform. This control is divided into two levels of operation:
|
||||
**Mayan EDMS** provides finegrained control over which activities users can
|
||||
perform. This control is divided into two levels of operation:
|
||||
|
||||
2 tier permissions assignement
|
||||
==============================
|
||||
|
||||
This level of activity control works
|
||||
by allowing roles that are composed of users and group, to be granted
|
||||
a permission such that the holder of that permission can exercise it
|
||||
throught the entire collection of objects (document, folders, tags, etc),
|
||||
this method could be thought out as a global permission granting level.
|
||||
Example: Roles being granted the ``Document view`` permission will be able to view
|
||||
**all** documents in existance.
|
||||
|
||||
.. image:: ../_static/permissions.png
|
||||
:alt: 2-tier permission diagram
|
||||
|
||||
This level of activity control works by allowing roles that are composed
|
||||
of users or groups, to be granted a permission such that the holder of that
|
||||
permission can exercise it throughout the entire collection of objects
|
||||
(document, folders, tags, etc). This method could be thought out as a global
|
||||
permission.
|
||||
|
||||
3 tier access control
|
||||
=====================
|
||||
|
||||
When more control is desired over which objects
|
||||
actors(user, groups and roles) can exercise an action this method should be
|
||||
used. Under this level, actors are granted a
|
||||
permission but only in relation to a selected object. Example: Granting user
|
||||
``Joe`` the ``Document view`` access control for document ``Payroll``,
|
||||
would allow him to view this document only.
|
||||
When more control is desired over which objects actors
|
||||
(user, groups and roles) can exercise an action, this method should be
|
||||
used. Under this method, actors are granted a permission but only in relation
|
||||
to a selected object. Example: Granting user
|
||||
``Joe`` the ``Document view`` access control for document ``Payroll``, would
|
||||
allow him to view this document only.
|
||||
|
||||
.. image:: ../_static/ACL.png
|
||||
:alt: 3-tier access control diagram
|
||||
|
||||
The permission system enforces inheritance by first checking if the user
|
||||
The permission system enforces inheritance by first checking, if the user
|
||||
has a global permission, is a member of a group or a role that has a global
|
||||
permission and if not then checks to see if that user, a group or role to
|
||||
permission and if not, then checks to see if that user, a group or role to
|
||||
which he belongs, has been granted access to the specific object to which
|
||||
he is desiring to perform a given action that requires a permission.
|
||||
Only when these checks fails the user
|
||||
is forbidden to perform the action and a generic message indicating this is
|
||||
displayed to avoid providing any information that could be used to sidetrack
|
||||
the permission system or obtain any kind of information about the object
|
||||
from which the user was not allowed access.
|
||||
he is desiring to perform a given action.
|
||||
|
||||
Only when these checks fail the user is forbidden to perform the action and
|
||||
a generic message is displayed to avoid providing any information
|
||||
that could be used to sidetrack the permission system or obtain any kind of
|
||||
information about the object to which the user was not allowed access.
|
||||
|
||||
Default Access Control Lists (Default ACLs)
|
||||
-------------------------------------------
|
||||
|
||||
One of the specifics of the 3 tier access control in contrast with the 2 tier access control are so called Default Access Control Lists.They allow assigment to Users an access to a particular object - the class or instance of the class. The document ``Payroll`` is example of instance of class ``Documents``. A user can be granted with access to only one instance of the class ``Documents`` or to the whole class ``Documents``. And not only that but Default ACLs give the possibility to grant access to class before it is instantiated. It will be explained with the following example.
|
||||
Default Access Control Lists allow assigment of an access control list to a
|
||||
type of object (Document, Tags, Folders) before it is created. It is the default
|
||||
permissions an object will have when it is created. With Default Access Control Lists
|
||||
specific permissions can be granted to the creator of a document for example.
|
||||
|
||||
**Example 1.** Each user have to access only the documents that he uploads
|
||||
|
||||
The example will show how to restrict a user in order not to view documents uploaded by other users, but only by himself. For that purpose we have to restrict the access to something that does not exist yet. The system must know that before the actual upload in order to act accordingly. This is where Default ACLs come in place.
|
||||
|
||||
Follow the steps:
|
||||
1. Enter **Mayan EDMS** with user that has administrative rights.
|
||||
2. Go to Setup menu. Enter Default ACLs submenu.
|
||||
3. Click ``New holder`` next to the class Documents. From the list of users choose the special user Creator. Give the permission ``View Documents`` to the Creator.
|
||||
4. Go back to Setup menu. Go to Users and create the users ``Pedro`` and ``Sancho``.
|
||||
5. Go back to Setup menu. Go to Groups and create the group ``Employees``. Click to members of the groups and add ``Pedro`` and ``Sancho`` to that group.
|
||||
6. Go back to Setup menu. Go to Roles submenu. Create the role ``Uploaders``. Give the permission ``Create documents`` to the role. Add the group ``Employees`` as a member to that role.
|
||||
7. Now enter **Mayan EDMS** with ``Pedro`` and ``Sancho`` one after another and upload documents. Pedro should not see the documents that ``Sancho`` uploaded and vice versa. He should see only documents uploaded by himself.
|
||||
|
||||
The above example will work only for documents that are uploaded after the activation of the restriction. It will not work for documents prior to the activation of the restriction.
|
||||
Changes to the Default Access Control Lists (Default ACLs) only affect objects
|
||||
created after the change, they will not affect documents previously uploaded.
|
||||
|
||||
@@ -2,31 +2,23 @@
|
||||
Document signatures
|
||||
===================
|
||||
|
||||
**Mayan EDMS** supports two types of document signatures, these are embedded and
|
||||
detached signatures. When a document with an embedded signature is
|
||||
uploaded, this signature is readily detected as part of the document
|
||||
inspection step. If the public key corresponding to the signee of the
|
||||
document is not found, **Mayan EDMS** will try to obtain it from the list of
|
||||
keyserver specified in the config option :setting:`SIGNATURES_KEYSERVERS`.
|
||||
Failing that, **Mayan EDMS** will indicate that the document is signed
|
||||
but that it has no way to verify such signature.
|
||||
Existing non signed documents can be signed in one of two way:
|
||||
by downloading the document, signing it, and uploading the signed document
|
||||
as a new version of the existing one using **Mayan EDMS** :doc:`versioning support <versioning>`
|
||||
or by creating a detached signature for the non signed document and uploading
|
||||
such detached signature file using the option likewise named menu option.
|
||||
**Mayan EDMS** supports two types of document signatures: embedded and
|
||||
detached signatures. When a document with an embedded signature is
|
||||
uploaded, this signature is readily detected as part of the document
|
||||
inspection step. The status of the signature can be verified by accessing the
|
||||
signatures sections of a document.
|
||||
|
||||
Maintenance of the public keyring can be done using the ``Key management``
|
||||
functionality in the ``Setup menu``
|
||||
Existing non signed documents can be signed in one of two ways:
|
||||
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
|
||||
the non signed document and uploading such detached signature file.
|
||||
|
||||
From this menu, key servers can be queried
|
||||
and the results imported. Public keys no longer needed can also be deleted
|
||||
from this menu.
|
||||
Maintenance of the public keyring can be done using the ``Key management``
|
||||
functionality in the ``Setup menu``.
|
||||
|
||||
Only `GNU Privacy Guard`_ signatures are support at the moment. In case
|
||||
your installation of GnuPG is non-standard, you can use the :setting:`SIGNATURES_GPG_HOME`
|
||||
configuration option to let **Mayan EDMS** find your GPG instance's home directory, used to
|
||||
store keyrings and other GPG configuration files.
|
||||
From this menu, key servers can be queried and the results imported. Public
|
||||
keys no longer needed can also be deleted from this menu.
|
||||
|
||||
Only `GNU Privacy Guard`_ signatures are support at the moment.
|
||||
|
||||
.. _`GNU Privacy Guard`: www.gnupg.org/
|
||||
|
||||
@@ -2,41 +2,13 @@
|
||||
Smart links
|
||||
===========
|
||||
|
||||
To configure: |Setup tab| |Right arrow| |Smart links button|
|
||||
|
||||
To use: |Document icon| |Right arrow| |Smart links link|
|
||||
|
||||
Smart links are usefull for navigation between documents. They are rule
|
||||
based but don't created any organizational structure just show the documents
|
||||
Smart links are usefull for navigation between documents. They are rule
|
||||
based, but don't create any organizational structure. They just show the documents
|
||||
that match the rules as evaluated against the metadata of the currently
|
||||
displayed document. They are global, the smart links are dependant
|
||||
on the current document the user is viewing.
|
||||
|
||||
.. figure:: /_static/screenshots/smart_links_screenshot.png
|
||||
:alt: Smart links screenshot
|
||||
:scale: 75%
|
||||
|
||||
Screenshot of smart links in action. The documents being shown are from the same
|
||||
permit file number as the current document being viewed by the user.
|
||||
Notice how the current document is also highlighted with a black border.
|
||||
|
||||
.. |Setup tab| image:: /_static/setup_tab.png
|
||||
:alt: Setup tab
|
||||
:align: middle
|
||||
|
||||
.. |Right arrow| image:: /_static/arrow_right.png
|
||||
:alt: Right arrow
|
||||
:align: middle
|
||||
|
||||
.. |Smart links button| image:: /_static/smart_links_button.png
|
||||
:alt: Smart links button
|
||||
:align: middle
|
||||
|
||||
.. |Document icon| image:: /_static/page.png
|
||||
:alt: Document icon
|
||||
:align: middle
|
||||
|
||||
.. |Smart links link| image:: /_static/smart_links_link.png
|
||||
:alt: Smart links link
|
||||
:align: middle
|
||||
displayed document.
|
||||
|
||||
Smart links are usefull when a patient file in a patients index needs to be linked
|
||||
to the medical documentation of a prescription the patient is using, but that medical
|
||||
documentation is in it's own prescription index. Smart links can provide a reference
|
||||
between documents of different indexes without any change in the indexes' structures.
|
||||
|
||||
@@ -2,35 +2,8 @@
|
||||
Tags
|
||||
====
|
||||
|
||||
To configure and use: |Tags tab|
|
||||
|
||||
To use: |Document icon| |Right arrow| |tags link|
|
||||
|
||||
Tags allow giving documents a toggable property. Documents can also be tagged
|
||||
with more than one tag. Once tagged, documents can be search also by their tags
|
||||
Tags allow giving documents a toggable property. Documents can also be tagged
|
||||
with more than one tag. Once tagged, documents can be searched also by their tags
|
||||
and from the tags main menu a list of all the documents with a particular tag
|
||||
can be obtained easily. Aside from their texts, tags can be assigned a particular
|
||||
can be obtained easily. Aside from their texts, tags can be assigned a particular
|
||||
color.
|
||||
|
||||
.. figure:: /_static/screenshots/tags_screenshot.png
|
||||
:alt: Tags links screenshot
|
||||
:scale: 35%
|
||||
|
||||
Screenshot of showing how tags can also be used to represent the state of a
|
||||
document, in this case the review state of a permit.
|
||||
|
||||
.. |Tags tab| image:: /_static/tags_tab.png
|
||||
:alt: Tags tab
|
||||
:align: middle
|
||||
|
||||
.. |Right arrow| image:: /_static/arrow_right.png
|
||||
:alt: Right arrow
|
||||
:align: middle
|
||||
|
||||
.. |Tags link| image:: /_static/tags_link.png
|
||||
:alt: Tags link
|
||||
:align: middle
|
||||
|
||||
.. |Document icon| image:: /_static/page.png
|
||||
:alt: Document icon
|
||||
:align: middle
|
||||
|
||||
@@ -5,8 +5,8 @@ What are transformations?
|
||||
Transformation are useful to manipulate the preview of the stored documents
|
||||
in a persistent manner, for example some scanning equipment only produce
|
||||
landscape PDFs, in this case a default transformation for that document
|
||||
source would be "rotation: 270 degress", this way whenever a document is
|
||||
source would be "rotation: 270 degress". This way whenever a document is
|
||||
uploaded from that scanner it appears in portrait orientation.
|
||||
The transformation remains attached to the document, this way the file
|
||||
is preserved in it's original state (a requirement in legal environments)
|
||||
but only the representation is transformed to make it look right to the user.
|
||||
The transformation remains attached to the document, the file being
|
||||
preserved in it's original state (a requirement in legal environments) and
|
||||
only the representation being transformed.
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
============
|
||||
Translations
|
||||
============
|
||||
|
||||
Translations are now being handled online via the **Transifex** website: https://www.transifex.com/projects/p/mayan-edms/.
|
||||
To create a translation team for a new language or contribute to an already
|
||||
existing language translation, create a **Transifex** account and contact
|
||||
the team coordinator of the respective language in which you are interested.
|
||||
@@ -3,23 +3,12 @@ Document versioning
|
||||
===================
|
||||
|
||||
**Mayan EDMS** has the ability to store different versions of the same
|
||||
document. Users are provided with a very comprehensive but easy to use
|
||||
version numbering system that allows specifying a major, minor or micro
|
||||
version number increase.
|
||||
|
||||
.. image:: ../_static/versioning.png
|
||||
:alt: versioning diagram
|
||||
|
||||
A comment field is also provided to allow users
|
||||
to summarize the new verdion changes in comparison with the previous
|
||||
one. If a new version was uploded by mistake or such new version is no
|
||||
longer necessary **Mayan EDMS** provides the option to revert to a previous
|
||||
version of the document.
|
||||
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
|
||||
uploded by mistake or such new version is no longer necessary the option to
|
||||
revert to a previous version of the document is provided.
|
||||
|
||||
To upload a new document version, select an existing document, click on the
|
||||
version tab of the document, and click on the 'upload new version' on the
|
||||
side bar. A new view very similar to the new document upload view will
|
||||
appear show the same interactive document sources that have been defined,
|
||||
but with new options to specify the new version number and an optional
|
||||
comment.
|
||||
|
||||
side bar. A new view very similar to the new document upload view will
|
||||
appear, showing the same interactive document sources that have been defined.
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
__title__ = 'Mayan EDMS'
|
||||
__version__ = '1.0.0'
|
||||
__build__ = 0x010000
|
||||
__version__ = '1.1.0'
|
||||
__build__ = 0x010100
|
||||
__author__ = 'Roberto Rosario'
|
||||
__license__ = 'Apache 2.0'
|
||||
__copyright__ = 'Copyright 2011 Roberto Rosario'
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.dispatch import receiver
|
||||
|
||||
from navigation.api import register_links, register_multi_item_links
|
||||
from project_setup.api import register_setup
|
||||
|
||||
from south.signals import post_migrate
|
||||
|
||||
from .classes import (AccessHolder, AccessObjectClass, ClassAccessHolder,
|
||||
AccessObject)
|
||||
from .links import (acl_detail, acl_grant, acl_revoke, acl_holder_new,
|
||||
acl_setup_valid_classes, acl_class_list, acl_class_acl_list,
|
||||
acl_class_acl_detail, acl_class_new_holder_for, acl_class_grant,
|
||||
acl_class_revoke)
|
||||
from navigation.api import register_links
|
||||
from project_setup.api import register_setup
|
||||
|
||||
from .classes import (
|
||||
AccessHolder, AccessObject, AccessObjectClass, ClassAccessHolder
|
||||
)
|
||||
from .links import (
|
||||
acl_class_acl_detail, acl_class_acl_list, acl_class_grant, acl_class_list,
|
||||
acl_class_new_holder_for, acl_class_revoke, acl_detail, acl_grant,
|
||||
acl_holder_new, acl_revoke, acl_setup_valid_classes
|
||||
)
|
||||
from .models import CreatorSingleton
|
||||
|
||||
register_links(AccessHolder, [acl_detail])
|
||||
register_multi_item_links(['acl_detail'], [acl_grant, acl_revoke])
|
||||
|
||||
register_links([AccessObject], [acl_holder_new], menu_name='sidebar')
|
||||
|
||||
register_setup(acl_setup_valid_classes)
|
||||
register_links(['acl_setup_valid_classes', 'acl_class_acl_list', 'acl_class_new_holder_for', 'acl_class_acl_detail', 'acl_class_multiple_grant', 'acl_class_multiple_revoke'], [acl_class_list], menu_name='secondary_menu')
|
||||
|
||||
register_links(ClassAccessHolder, [acl_class_acl_detail])
|
||||
|
||||
register_links(AccessObjectClass, [acl_class_acl_list, acl_class_new_holder_for])
|
||||
register_multi_item_links(['acl_class_acl_detail'], [acl_class_grant, acl_class_revoke])
|
||||
register_links(AccessHolder, [acl_detail])
|
||||
register_links(['acls:acl_setup_valid_classes', 'acls:acl_class_acl_list', 'acls:acl_class_new_holder_for', 'acls:acl_class_acl_detail', 'acls:acl_class_multiple_grant', 'acls:acl_class_multiple_revoke'], [acl_class_list], menu_name='secondary_menu')
|
||||
register_links(ClassAccessHolder, [acl_class_acl_detail])
|
||||
register_links(['acls:acl_detail'], [acl_grant, acl_revoke], menu_name='multi_item_links')
|
||||
register_links(['acls:acl_class_acl_detail'], [acl_class_grant, acl_class_revoke], menu_name='multi_item_links')
|
||||
register_setup(acl_setup_valid_classes)
|
||||
|
||||
|
||||
@receiver(post_migrate, dispatch_uid='create_creator_user')
|
||||
|
||||
@@ -1,25 +1,16 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib import admin
|
||||
|
||||
from .models import AccessEntry
|
||||
|
||||
|
||||
# class PermissionHolderInline(admin.StackedInline):
|
||||
# model = PermissionHolder
|
||||
# extra = 1
|
||||
# classes = ('collapse-open',)
|
||||
# allow_add = True#
|
||||
#
|
||||
|
||||
|
||||
class AccessEntryAdmin(admin.ModelAdmin):
|
||||
model = AccessEntry
|
||||
list_display = ('pk', 'holder_object', 'permission', 'content_object')
|
||||
list_display_links = ('pk',)
|
||||
related_lookup_fields = {
|
||||
'generic': [['holder_type', 'holder_id'], ['content_type', 'object_id']],
|
||||
}
|
||||
# inlines = [PermissionHolderInline]
|
||||
list_display = ('pk', 'holder_object', 'permission', 'content_object')
|
||||
list_display_links = ('pk',)
|
||||
model = AccessEntry
|
||||
|
||||
admin.site.register(AccessEntry, AccessEntryAdmin)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import logging
|
||||
import sys
|
||||
@@ -7,7 +7,6 @@ import types
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db.models.base import ModelBase
|
||||
from django.template.defaultfilters import capfirst
|
||||
|
||||
from common.models import AnonymousUserSingleton
|
||||
|
||||
@@ -24,7 +23,7 @@ def get_source_object(obj):
|
||||
|
||||
|
||||
class EncapsulatedObject(object):
|
||||
source_object_name = u'source_object'
|
||||
source_object_name = 'source_object'
|
||||
|
||||
@classmethod
|
||||
def object_key(cls, app_label=None, model=None, pk=None):
|
||||
@@ -83,18 +82,14 @@ class EncapsulatedObject(object):
|
||||
try:
|
||||
content_type = ContentType.objects.get(app_label=app_label, model=model)
|
||||
except ContentType.DoesNotExist:
|
||||
# cls.add_to_class('DoesNotExist', subclass_exception('DoesNotExist', (ObjectDoesNotExist,), cls.__name__))
|
||||
# raise cls.DoesNotExist("%s matching query does not exist." % ContentType._meta.object_name)
|
||||
raise ObjectDoesNotExist("%s matching query does not exist." % ContentType._meta.object_name)
|
||||
raise ObjectDoesNotExist('%s matching query does not exist.' % ContentType._meta.object_name)
|
||||
else:
|
||||
source_object_model_class = content_type.model_class()
|
||||
if pk:
|
||||
try:
|
||||
source_object = content_type.get_object_for_this_type(pk=pk)
|
||||
except source_object_model_class.DoesNotExist:
|
||||
# cls.add_to_class('DoesNotExist', subclass_exception('DoesNotExist', (ObjectDoesNotExist,), cls.__name__))
|
||||
# raise cls.DoesNotExist("%s matching query does not exist." % source_object_model_class._meta.object_name)
|
||||
raise ObjectDoesNotExist("%s matching query does not exist." % source_object_model_class._meta.object_name)
|
||||
raise ObjectDoesNotExist('%s matching query does not exist.' % source_object_model_class._meta.object_name)
|
||||
else:
|
||||
source_object = source_object_model_class
|
||||
|
||||
@@ -115,15 +110,15 @@ class EncapsulatedObject(object):
|
||||
|
||||
def __unicode__(self):
|
||||
if isinstance(self.source_object, ModelBase):
|
||||
return capfirst(unicode(self.source_object._meta.verbose_name_plural))
|
||||
return unicode(self.source_object._meta.verbose_name_plural)
|
||||
elif self.ct_fullname == 'auth.user':
|
||||
return u'%s %s' % (self.source_object._meta.verbose_name, self.source_object.get_full_name())
|
||||
return '%s %s' % (self.source_object._meta.verbose_name, self.source_object.get_full_name())
|
||||
elif self.ct_fullname == 'common.anonymoususersingleton':
|
||||
return unicode(self.source_object)
|
||||
elif self.ct_fullname == 'acls.creatorsingleton':
|
||||
return unicode(self.source_object)
|
||||
else:
|
||||
return u'%s %s' % (self.source_object._meta.verbose_name, self.source_object)
|
||||
return '%s %s' % (self.source_object._meta.verbose_name, self.source_object)
|
||||
|
||||
def __repr__(self):
|
||||
return self.__unicode__()
|
||||
@@ -134,19 +129,19 @@ class EncapsulatedObject(object):
|
||||
|
||||
|
||||
class AccessHolder(EncapsulatedObject):
|
||||
source_object_name = u'holder_object'
|
||||
source_object_name = 'holder_object'
|
||||
|
||||
|
||||
class AccessObject(EncapsulatedObject):
|
||||
source_object_name = u'obj'
|
||||
source_object_name = 'obj'
|
||||
|
||||
|
||||
class AccessObjectClass(EncapsulatedObject):
|
||||
source_object_name = u'cls'
|
||||
source_object_name = 'cls'
|
||||
|
||||
|
||||
class ClassAccessHolder(EncapsulatedObject):
|
||||
source_object_name = u'class_holder'
|
||||
source_object_name = 'class_holder'
|
||||
|
||||
|
||||
if sys.version_info < (2, 5):
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
from __future__ import absolute_import
|
||||
|
||||
from .models import AccessEntry, DefaultAccessEntry
|
||||
|
||||
|
||||
def cleanup():
|
||||
AccessEntry.objects.all().delete()
|
||||
DefaultAccessEntry.objects.all().delete()
|
||||
@@ -1,4 +1,4 @@
|
||||
from __future__ import absolute_import
|
||||
from __future__ import absolute_import, unicode_literals
|
||||
|
||||
from django import forms
|
||||
from django.contrib.auth.models import User, Group
|
||||
@@ -22,7 +22,7 @@ def _as_choice_list(holders):
|
||||
|
||||
class BaseHolderSelectionForm(forms.Form):
|
||||
holder_gid = forms.ChoiceField(
|
||||
label=_(u'New holder')
|
||||
label=_('New holder')
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
@@ -39,16 +39,16 @@ class BaseHolderSelectionForm(forms.Form):
|
||||
|
||||
non_holder_list = []
|
||||
if users:
|
||||
non_holder_list.append((_(u'Users'), _as_choice_list(list(users))))
|
||||
non_holder_list.append((_('Users'), _as_choice_list(list(users))))
|
||||
|
||||
if groups:
|
||||
non_holder_list.append((_(u'Groups'), _as_choice_list(list(groups))))
|
||||
non_holder_list.append((_('Groups'), _as_choice_list(list(groups))))
|
||||
|
||||
if roles:
|
||||
non_holder_list.append((_(u'Roles'), _as_choice_list(list(roles))))
|
||||
non_holder_list.append((_('Roles'), _as_choice_list(list(roles))))
|
||||
|
||||
if special:
|
||||
non_holder_list.append((_(u'Special'), _as_choice_list(list(special))))
|
||||
non_holder_list.append((_('Special'), _as_choice_list(list(special))))
|
||||
|
||||
super(BaseHolderSelectionForm, self).__init__(*args, **kwargs)
|
||||
self.fields['holder_gid'].choices = non_holder_list
|
||||
|
||||
@@ -1,18 +1,21 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from .permissions import (ACLS_EDIT_ACL, ACLS_VIEW_ACL,
|
||||
ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL)
|
||||
from .permissions import (
|
||||
ACLS_CLASS_EDIT_ACL, ACLS_CLASS_VIEW_ACL, ACLS_EDIT_ACL, ACLS_VIEW_ACL
|
||||
)
|
||||
|
||||
acl_list = {'text': _(u'ACLs'), 'view': 'acl_list', 'famfam': 'lock', 'permissions': [ACLS_VIEW_ACL]}
|
||||
acl_detail = {'text': _(u'details'), 'view': 'acl_detail', 'args': ['access_object.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_VIEW_ACL]}
|
||||
acl_grant = {'text': _(u'grant'), 'view': 'acl_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_EDIT_ACL]}
|
||||
acl_revoke = {'text': _(u'revoke'), 'view': 'acl_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_EDIT_ACL]}
|
||||
acl_holder_new = {'text': _(u'New holder'), 'view': 'acl_holder_new', 'args': 'access_object.gid', 'famfam': 'user', 'permissions': [ACLS_EDIT_ACL]}
|
||||
acl_list = {'text': _('ACLs'), 'view': 'acls:acl_list', 'famfam': 'lock', 'permissions': [ACLS_VIEW_ACL]}
|
||||
acl_detail = {'text': _('Details'), 'view': 'acls:acl_detail', 'args': ['access_object.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_VIEW_ACL]}
|
||||
acl_grant = {'text': _('Grant'), 'view': 'acls:acl_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_EDIT_ACL]}
|
||||
acl_revoke = {'text': _('Revoke'), 'view': 'acls:acl_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_EDIT_ACL]}
|
||||
acl_holder_new = {'text': _('New holder'), 'view': 'acls:acl_holder_new', 'args': 'access_object.gid', 'famfam': 'user', 'permissions': [ACLS_EDIT_ACL]}
|
||||
|
||||
acl_setup_valid_classes = {'text': _(u'Default ACLs'), 'view': 'acl_setup_valid_classes', 'icon': 'lock.png', 'permissions': [ACLS_CLASS_VIEW_ACL], 'children_view_regex': [r'^acl_class', r'^acl_setup']}
|
||||
acl_class_list = {'text': _(u'List of classes'), 'view': 'acl_setup_valid_classes', 'famfam': 'package', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_acl_list = {'text': _(u'ACLs for class'), 'view': 'acl_class_acl_list', 'args': 'object.gid', 'famfam': 'lock_go', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_acl_detail = {'text': _(u'details'), 'view': 'acl_class_acl_detail', 'args': ['access_object_class.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_new_holder_for = {'text': _(u'New holder'), 'view': 'acl_class_new_holder_for', 'args': 'object.gid', 'famfam': 'user', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
acl_class_grant = {'text': _(u'grant'), 'view': 'acl_class_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
acl_class_revoke = {'text': _(u'revoke'), 'view': 'acl_class_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
acl_setup_valid_classes = {'text': _('Default ACLs'), 'view': 'acls:acl_setup_valid_classes', 'icon': 'main/icons/lock.png', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_list = {'text': _('Classes'), 'view': 'acls:acl_setup_valid_classes', 'famfam': 'package', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_acl_list = {'text': _('ACLs for class'), 'view': 'acls:acl_class_acl_list', 'args': 'object.gid', 'famfam': 'lock_go', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_acl_detail = {'text': _('Details'), 'view': 'acls:acl_class_acl_detail', 'args': ['access_object_class.gid', 'object.gid'], 'famfam': 'key_go', 'permissions': [ACLS_CLASS_VIEW_ACL]}
|
||||
acl_class_new_holder_for = {'text': _('New holder'), 'view': 'acls:acl_class_new_holder_for', 'args': 'object.gid', 'famfam': 'user', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
acl_class_grant = {'text': _('Grant'), 'view': 'acls:acl_class_multiple_grant', 'famfam': 'key_add', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
acl_class_revoke = {'text': _('Revoke'), 'view': 'acls:acl_class_multiple_revoke', 'famfam': 'key_delete', 'permissions': [ACLS_CLASS_EDIT_ACL]}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
from __future__ import unicode_literals
|
||||
|
||||
# Content type <-> fam fam icon mapping
|
||||
CONTENT_TYPE_ICON_MAP = {
|
||||
@@ -6,7 +7,7 @@ CONTENT_TYPE_ICON_MAP = {
|
||||
'documents.document': 'page',
|
||||
'permissions.role': 'medal_gold_1',
|
||||
'folders.folder': 'folder',
|
||||
'taggit.tag': 'tag_blue',
|
||||
'tags.tag': 'tag_blue',
|
||||
'linking.smartlink': 'page_link',
|
||||
'common.anonymoususersingleton': 'user',
|
||||
'acls.creatorsingleton': 'user',
|
||||
|
||||
@@ -3,14 +3,15 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Mohammed ALDOUB <voulnet@gmail.com>, 2013
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-07-31 19:51-0400\n"
|
||||
"PO-Revision-Date: 2013-01-26 08:48+0000\n"
|
||||
"Last-Translator: Mohammed ALDOUB <voulnet@gmail.com>\n"
|
||||
"POT-Creation-Date: 2015-02-06 20:44-0400\n"
|
||||
"PO-Revision-Date: 2014-10-25 06:47+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: Arabic (http://www.transifex.com/projects/p/mayan-edms/"
|
||||
"language/ar/)\n"
|
||||
"Language: ar\n"
|
||||
@@ -20,7 +21,7 @@ msgstr ""
|
||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
|
||||
"&& n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n"
|
||||
|
||||
#: forms.py:25 links.py:10 links.py:16
|
||||
#: forms.py:25 links.py:13 links.py:19
|
||||
msgid "New holder"
|
||||
msgstr "New holder"
|
||||
|
||||
@@ -40,31 +41,31 @@ msgstr "Roles"
|
||||
msgid "Special"
|
||||
msgstr "Special"
|
||||
|
||||
#: links.py:6
|
||||
#: links.py:9
|
||||
msgid "ACLs"
|
||||
msgstr "ACLs"
|
||||
|
||||
#: links.py:7 links.py:15
|
||||
msgid "details"
|
||||
msgstr "details"
|
||||
#: links.py:10 links.py:18
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:8 links.py:17
|
||||
msgid "grant"
|
||||
msgstr "grant"
|
||||
#: links.py:11 links.py:20
|
||||
msgid "Grant"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:9 links.py:18
|
||||
msgid "revoke"
|
||||
msgstr "revoke"
|
||||
#: links.py:12 links.py:21
|
||||
msgid "Revoke"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:12
|
||||
#: links.py:15
|
||||
msgid "Default ACLs"
|
||||
msgstr "Default ACLs"
|
||||
|
||||
#: links.py:13
|
||||
msgid "List of classes"
|
||||
msgstr "List of classes"
|
||||
#: links.py:16 views.py:379
|
||||
msgid "Classes"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:14
|
||||
#: links.py:17
|
||||
msgid "ACLs for class"
|
||||
msgstr "ACLs for class"
|
||||
|
||||
@@ -72,34 +73,30 @@ msgstr "ACLs for class"
|
||||
msgid "Insufficient access."
|
||||
msgstr "Insufficient access."
|
||||
|
||||
#: models.py:26 models.py:68
|
||||
msgid "permission"
|
||||
msgstr "permission"
|
||||
#: models.py:25 models.py:67
|
||||
msgid "Permission"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:51
|
||||
msgid "Access entry"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:52
|
||||
msgid "access entry"
|
||||
msgstr "access entry"
|
||||
msgid "Access entries"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:53
|
||||
msgid "access entries"
|
||||
msgstr "access entries"
|
||||
#: models.py:88
|
||||
msgid "Default access entry"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:89
|
||||
msgid "default access entry"
|
||||
msgstr "default access entry"
|
||||
msgid "Default access entries"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:90
|
||||
msgid "default access entries"
|
||||
msgstr "default access entries"
|
||||
|
||||
#: models.py:109
|
||||
#: models.py:108 models.py:111 models.py:112
|
||||
msgid "Creator"
|
||||
msgstr "Creator"
|
||||
|
||||
#: models.py:112 models.py:113
|
||||
msgid "creator"
|
||||
msgstr "creator"
|
||||
|
||||
#: permissions.py:7 permissions.py:8
|
||||
msgid "Access control lists"
|
||||
msgstr "Access control lists"
|
||||
@@ -120,66 +117,66 @@ msgstr "Edit class default ACLs"
|
||||
msgid "View class default ACLs"
|
||||
msgstr "View class default ACLs"
|
||||
|
||||
#: views.py:46
|
||||
#: views.py:48
|
||||
#, python-format
|
||||
msgid "access control lists for: %s"
|
||||
msgstr "access control lists for: %s"
|
||||
msgid "Access control lists for: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:48 views.py:408
|
||||
msgid "holder"
|
||||
msgstr "holder"
|
||||
#: views.py:50 views.py:402
|
||||
msgid "Holder"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:49 views.py:409
|
||||
msgid "permissions"
|
||||
msgstr "permissions"
|
||||
#: views.py:51 views.py:403
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:96
|
||||
#: views.py:98
|
||||
#, python-format
|
||||
msgid "permissions available to: %(actor)s for %(obj)s"
|
||||
msgstr "permissions available to: %(actor)s for %(obj)s"
|
||||
msgid "Permissions available to: %(actor)s for %(obj)s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:103 views.py:441
|
||||
msgid "namespace"
|
||||
msgstr "namespace"
|
||||
#: views.py:105 views.py:434
|
||||
msgid "Namespace"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:104 views.py:442
|
||||
msgid "label"
|
||||
msgstr "label"
|
||||
#: views.py:106 views.py:435
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:106 views.py:444
|
||||
msgid "has permission"
|
||||
msgstr "has permission"
|
||||
#: views.py:108 views.py:437
|
||||
msgid "Has permission"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:183 views.py:276 views.py:524 views.py:603
|
||||
#: views.py:181 views.py:272 views.py:516 views.py:593
|
||||
msgid ", "
|
||||
msgstr ", "
|
||||
|
||||
#: views.py:184 views.py:277 views.py:525 views.py:604
|
||||
#: views.py:182 views.py:273 views.py:517 views.py:594
|
||||
#, python-format
|
||||
msgid " for %s"
|
||||
msgstr " for %s"
|
||||
|
||||
#: views.py:185 views.py:526
|
||||
#: views.py:183 views.py:518
|
||||
#, python-format
|
||||
msgid " to %s"
|
||||
msgstr " to %s"
|
||||
|
||||
#: views.py:188 views.py:529
|
||||
#: views.py:186 views.py:521
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
|
||||
msgstr "Are you sure you wish to grant the permission %(title_suffix)s?"
|
||||
|
||||
#: views.py:190 views.py:531
|
||||
#: views.py:188 views.py:523
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||
msgstr "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||
|
||||
#: views.py:197 views.py:538
|
||||
#: views.py:195 views.py:530
|
||||
#, python-format
|
||||
msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
msgstr "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
|
||||
#: views.py:203 views.py:544
|
||||
#: views.py:201 views.py:536
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
@@ -188,60 +185,65 @@ msgstr ""
|
||||
"%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
"%(object)s."
|
||||
|
||||
#: views.py:278 views.py:605
|
||||
#: views.py:274 views.py:595
|
||||
#, python-format
|
||||
msgid " from %s"
|
||||
msgstr " from %s"
|
||||
|
||||
#: views.py:281 views.py:608
|
||||
#: views.py:277 views.py:598
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
|
||||
msgstr "Are you sure you wish to revoke the permission %(title_suffix)s?"
|
||||
|
||||
#: views.py:283 views.py:610
|
||||
#: views.py:279 views.py:600
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
|
||||
msgstr "Are you sure you wish to revoke the permissions %(title_suffix)s?"
|
||||
|
||||
#: views.py:290 views.py:617
|
||||
#: views.py:286 views.py:607
|
||||
#, python-format
|
||||
msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
msgstr "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
|
||||
#: views.py:296 views.py:623
|
||||
#: views.py:292 views.py:613
|
||||
#, python-format
|
||||
msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
msgstr ""
|
||||
"%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
|
||||
#: views.py:352
|
||||
#: views.py:346
|
||||
#, python-format
|
||||
msgid "add new holder for: %s"
|
||||
msgstr "add new holder for: %s"
|
||||
msgid "Add new holder for: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:353 views.py:485
|
||||
#: views.py:347 views.py:477
|
||||
msgid "Select"
|
||||
msgstr "Select"
|
||||
|
||||
#: views.py:385
|
||||
msgid "classes"
|
||||
msgstr "classes"
|
||||
#: views.py:381
|
||||
msgid "Class"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:387
|
||||
msgid "class"
|
||||
msgstr "class"
|
||||
|
||||
#: views.py:406
|
||||
#: views.py:400
|
||||
#, python-format
|
||||
msgid "default access control lists for class: %s"
|
||||
msgstr "default access control lists for class: %s"
|
||||
msgid "Default access control lists for class: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:434
|
||||
#: views.py:428
|
||||
#, python-format
|
||||
msgid "permissions available to: %(actor)s for class %(class)s"
|
||||
msgstr "permissions available to: %(actor)s for class %(class)s"
|
||||
msgid "Permissions available to: %(actor)s for class %(class)s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:483
|
||||
#: views.py:475
|
||||
#, python-format
|
||||
msgid "add new holder for class: %s"
|
||||
msgstr "add new holder for class: %s"
|
||||
msgid "Add new holder for class: %s"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "List of classes"
|
||||
#~ msgstr "List of classes"
|
||||
|
||||
#~ msgid "permission"
|
||||
#~ msgstr "permission"
|
||||
|
||||
#~ msgid "creator"
|
||||
#~ msgstr "creator"
|
||||
|
||||
@@ -3,15 +3,17 @@
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
#
|
||||
# Translators:
|
||||
# Translators:
|
||||
# Iliya Georgiev <ikgeorgiev@gmail.com>, 2012
|
||||
# Pavlin Koldamov <pkoldamov@gmail.com>, 2012
|
||||
# Pavlin Koldamov <pkoldamov@gmail.com>, 2012
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Mayan EDMS\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2014-07-31 19:51-0400\n"
|
||||
"PO-Revision-Date: 2012-10-15 10:27+0000\n"
|
||||
"Last-Translator: Pavlin Koldamov <pkoldamov@gmail.com>\n"
|
||||
"POT-Creation-Date: 2015-02-06 20:44-0400\n"
|
||||
"PO-Revision-Date: 2014-10-25 06:47+0000\n"
|
||||
"Last-Translator: Roberto Rosario\n"
|
||||
"Language-Team: Bulgarian (http://www.transifex.com/projects/p/mayan-edms/"
|
||||
"language/bg/)\n"
|
||||
"Language: bg\n"
|
||||
@@ -20,7 +22,7 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: forms.py:25 links.py:10 links.py:16
|
||||
#: forms.py:25 links.py:13 links.py:19
|
||||
msgid "New holder"
|
||||
msgstr "Нов притежател"
|
||||
|
||||
@@ -40,31 +42,31 @@ msgstr "Роли"
|
||||
msgid "Special"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:6
|
||||
#: links.py:9
|
||||
msgid "ACLs"
|
||||
msgstr "Контролни списъци за достъп"
|
||||
|
||||
#: links.py:7 links.py:15
|
||||
msgid "details"
|
||||
msgstr "детайли"
|
||||
#: links.py:10 links.py:18
|
||||
msgid "Details"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:8 links.py:17
|
||||
msgid "grant"
|
||||
msgstr "предоставяне"
|
||||
#: links.py:11 links.py:20
|
||||
msgid "Grant"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:9 links.py:18
|
||||
msgid "revoke"
|
||||
msgstr "отменя"
|
||||
#: links.py:12 links.py:21
|
||||
msgid "Revoke"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:12
|
||||
#: links.py:15
|
||||
msgid "Default ACLs"
|
||||
msgstr "Контролни списъци за достъп по подразбиране"
|
||||
|
||||
#: links.py:13
|
||||
msgid "List of classes"
|
||||
msgstr "Списък на класовете"
|
||||
#: links.py:16 views.py:379
|
||||
msgid "Classes"
|
||||
msgstr ""
|
||||
|
||||
#: links.py:14
|
||||
#: links.py:17
|
||||
msgid "ACLs for class"
|
||||
msgstr "Контролни списъци за клас"
|
||||
|
||||
@@ -72,34 +74,30 @@ msgstr "Контролни списъци за клас"
|
||||
msgid "Insufficient access."
|
||||
msgstr "Недостатъчен достъп."
|
||||
|
||||
#: models.py:26 models.py:68
|
||||
msgid "permission"
|
||||
msgstr "разрешение"
|
||||
#: models.py:25 models.py:67
|
||||
msgid "Permission"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:51
|
||||
msgid "Access entry"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:52
|
||||
msgid "access entry"
|
||||
msgstr "достъп за влизане"
|
||||
msgid "Access entries"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:53
|
||||
msgid "access entries"
|
||||
msgstr "достъп вписвания"
|
||||
#: models.py:88
|
||||
msgid "Default access entry"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:89
|
||||
msgid "default access entry"
|
||||
msgid "Default access entries"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:90
|
||||
msgid "default access entries"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:109
|
||||
#: models.py:108 models.py:111 models.py:112
|
||||
msgid "Creator"
|
||||
msgstr ""
|
||||
|
||||
#: models.py:112 models.py:113
|
||||
msgid "creator"
|
||||
msgstr ""
|
||||
|
||||
#: permissions.py:7 permissions.py:8
|
||||
msgid "Access control lists"
|
||||
msgstr "Контролни списъци за достъп"
|
||||
@@ -120,127 +118,132 @@ msgstr ""
|
||||
msgid "View class default ACLs"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:46
|
||||
#: views.py:48
|
||||
#, python-format
|
||||
msgid "access control lists for: %s"
|
||||
msgid "Access control lists for: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:48 views.py:408
|
||||
msgid "holder"
|
||||
#: views.py:50 views.py:402
|
||||
msgid "Holder"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:49 views.py:409
|
||||
msgid "permissions"
|
||||
msgstr "разрешения"
|
||||
#: views.py:51 views.py:403
|
||||
msgid "Permissions"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:96
|
||||
#: views.py:98
|
||||
#, python-format
|
||||
msgid "permissions available to: %(actor)s for %(obj)s"
|
||||
msgid "Permissions available to: %(actor)s for %(obj)s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:103 views.py:441
|
||||
msgid "namespace"
|
||||
#: views.py:105 views.py:434
|
||||
msgid "Namespace"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:104 views.py:442
|
||||
msgid "label"
|
||||
#: views.py:106 views.py:435
|
||||
msgid "Label"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:106 views.py:444
|
||||
msgid "has permission"
|
||||
#: views.py:108 views.py:437
|
||||
msgid "Has permission"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:183 views.py:276 views.py:524 views.py:603
|
||||
#: views.py:181 views.py:272 views.py:516 views.py:593
|
||||
msgid ", "
|
||||
msgstr ""
|
||||
|
||||
#: views.py:184 views.py:277 views.py:525 views.py:604
|
||||
#: views.py:182 views.py:273 views.py:517 views.py:594
|
||||
#, python-format
|
||||
msgid " for %s"
|
||||
msgstr " за %s"
|
||||
|
||||
#: views.py:185 views.py:526
|
||||
#: views.py:183 views.py:518
|
||||
#, python-format
|
||||
msgid " to %s"
|
||||
msgstr " към %s"
|
||||
|
||||
#: views.py:188 views.py:529
|
||||
#: views.py:186 views.py:521
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to grant the permission %(title_suffix)s?"
|
||||
msgstr "Сигурни ли сте, че искате да дадете разрешение за %(title_suffix)s?"
|
||||
|
||||
#: views.py:190 views.py:531
|
||||
#: views.py:188 views.py:523
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to grant the permissions %(title_suffix)s?"
|
||||
msgstr "Сигурни ли сте, че искате да дадете разрешения за %(title_suffix)s?"
|
||||
|
||||
#: views.py:197 views.py:538
|
||||
#: views.py:195 views.py:530
|
||||
#, python-format
|
||||
msgid "Permission \"%(permission)s\" granted to %(actor)s for %(object)s."
|
||||
msgstr ""
|
||||
|
||||
#: views.py:203 views.py:544
|
||||
#: views.py:201 views.py:536
|
||||
#, python-format
|
||||
msgid ""
|
||||
"%(actor)s, already had the permission \"%(permission)s\" granted for "
|
||||
"%(object)s."
|
||||
msgstr ""
|
||||
|
||||
#: views.py:278 views.py:605
|
||||
#: views.py:274 views.py:595
|
||||
#, python-format
|
||||
msgid " from %s"
|
||||
msgstr " от %s"
|
||||
|
||||
#: views.py:281 views.py:608
|
||||
#: views.py:277 views.py:598
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to revoke the permission %(title_suffix)s?"
|
||||
msgstr ""
|
||||
"Сигурни ли сте, че искате да отнемете разрешението за %(title_suffix)s?"
|
||||
|
||||
#: views.py:283 views.py:610
|
||||
#: views.py:279 views.py:600
|
||||
#, python-format
|
||||
msgid "Are you sure you wish to revoke the permissions %(title_suffix)s?"
|
||||
msgstr ""
|
||||
"Сигурни ли сте, че искате да отнемете разрешенията за %(title_suffix)s?"
|
||||
|
||||
#: views.py:290 views.py:617
|
||||
#: views.py:286 views.py:607
|
||||
#, python-format
|
||||
msgid "Permission \"%(permission)s\" revoked of %(actor)s for %(object)s."
|
||||
msgstr ""
|
||||
|
||||
#: views.py:296 views.py:623
|
||||
#: views.py:292 views.py:613
|
||||
#, python-format
|
||||
msgid "%(actor)s, didn't had the permission \"%(permission)s\" for %(object)s."
|
||||
msgstr ""
|
||||
|
||||
#: views.py:352
|
||||
#: views.py:346
|
||||
#, python-format
|
||||
msgid "add new holder for: %s"
|
||||
msgid "Add new holder for: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:353 views.py:485
|
||||
#: views.py:347 views.py:477
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:385
|
||||
msgid "classes"
|
||||
msgstr "класове"
|
||||
|
||||
#: views.py:387
|
||||
msgid "class"
|
||||
msgstr "клас"
|
||||
|
||||
#: views.py:406
|
||||
#, python-format
|
||||
msgid "default access control lists for class: %s"
|
||||
msgstr "правила за достъп по подразбиране за клас: %s"
|
||||
|
||||
#: views.py:434
|
||||
#, python-format
|
||||
msgid "permissions available to: %(actor)s for class %(class)s"
|
||||
#: views.py:381
|
||||
msgid "Class"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:483
|
||||
#: views.py:400
|
||||
#, python-format
|
||||
msgid "add new holder for class: %s"
|
||||
msgid "Default access control lists for class: %s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:428
|
||||
#, python-format
|
||||
msgid "Permissions available to: %(actor)s for class %(class)s"
|
||||
msgstr ""
|
||||
|
||||
#: views.py:475
|
||||
#, python-format
|
||||
msgid "Add new holder for class: %s"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "List of classes"
|
||||
#~ msgstr "List of classes"
|
||||
|
||||
#~ msgid "permission"
|
||||
#~ msgstr "permission"
|
||||
|
||||
#~ msgid "creator"
|
||||
#~ msgstr "creator"
|
||||
|
||||