diff --git a/addons/document_ftp/__openerp__.py b/addons/document_ftp/__openerp__.py deleted file mode 100644 index 23ff8f1e37d..00000000000 --- a/addons/document_ftp/__openerp__.py +++ /dev/null @@ -1,55 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - - -{ - 'name': 'Shared Repositories (FTP)', - 'version': '1.99', - 'category': 'Knowledge Management', - 'description': """ -This is a support FTP Interface with document management system. -================================================================ - -With this module you would not only be able to access documents through OpenERP -but you would also be able to connect with them through the file system using the -FTP client. -""", - 'author': 'OpenERP SA', - 'website': 'http://www.openerp.com', - 'depends': ['base', 'document'], - 'data': [ - 'wizard/ftp_configuration_view.xml', - 'wizard/ftp_browse_view.xml', - 'security/ir.model.access.csv', - 'res_config_view.xml', - ], - 'demo': [], - 'test': [ - 'test/document_ftp_test2.yml', - 'test/document_ftp_test4.yml', - ], - 'installable': True, - 'auto_install': False, - 'images': ['images/1_configure_ftp.jpeg','images/2_document_browse.jpeg','images/3_document_ftp.jpeg'], - 'post_load': 'post_load', -} - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/ftpserver/__init__.py b/addons/document_ftp/ftpserver/__init__.py deleted file mode 100644 index 6474def3e99..00000000000 --- a/addons/document_ftp/ftpserver/__init__.py +++ /dev/null @@ -1,74 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import threading -import logging - -import authorizer -import abstracted_fs -import ftpserver - -import openerp -from openerp.tools import config -_logger = logging.getLogger(__name__) - -def start_server(): - if openerp.multi_process: - _logger.info("FTP disabled in multiprocess mode") - return - if openerp.evented: - _logger.info("FTP disabled in evented mode") - return - HOST = config.get('ftp_server_host', '127.0.0.1') - PORT = int(config.get('ftp_server_port', '8021')) - PASSIVE_PORTS = None - pps = config.get('ftp_server_passive_ports', '').split(':') - if len(pps) == 2: - PASSIVE_PORTS = int(pps[0]), int(pps[1]) - - class ftp_server(threading.Thread): - - def run(self): - autho = authorizer.authorizer() - ftpserver.FTPHandler.authorizer = autho - ftpserver.max_cons = 300 - ftpserver.max_cons_per_ip = 50 - ftpserver.FTPHandler.abstracted_fs = abstracted_fs.abstracted_fs - if PASSIVE_PORTS: - ftpserver.FTPHandler.passive_ports = PASSIVE_PORTS - - ftpserver.log = lambda msg: _logger.info(msg) - ftpserver.logline = lambda msg: None - ftpserver.logerror = lambda msg: _logger.error(msg) - - ftpd = ftpserver.FTPServer((HOST, PORT), ftpserver.FTPHandler) - ftpd.serve_forever() - - if HOST.lower() == 'none': - _logger.info("\n Server FTP Not Started\n") - else: - _logger.info("\n Serving FTP on %s:%s\n" % (HOST, PORT)) - ds = ftp_server() - ds.daemon = True - ds.start() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/document_ftp/ftpserver/abstracted_fs.py b/addons/document_ftp/ftpserver/abstracted_fs.py deleted file mode 100644 index 514ba10f2f6..00000000000 --- a/addons/document_ftp/ftpserver/abstracted_fs.py +++ /dev/null @@ -1,665 +0,0 @@ -# -*- encoding: utf-8 -*- - -import os -import time -from tarfile import filemode -import logging -import errno - -import glob -import fnmatch - -import openerp -from openerp import sql_db -import openerp.service -from openerp.service import security -from openerp.osv import osv - -from openerp.addons.document.document import get_node_context - -def _get_month_name(month): - month=int(month) - if month==1:return 'Jan' - elif month==2:return 'Feb' - elif month==3:return 'Mar' - elif month==4:return 'Apr' - elif month==5:return 'May' - elif month==6:return 'Jun' - elif month==7:return 'Jul' - elif month==8:return 'Aug' - elif month==9:return 'Sep' - elif month==10:return 'Oct' - elif month==11:return 'Nov' - elif month==12:return 'Dec' - -from ftpserver import _to_decode, _to_unicode - - -class abstracted_fs(object): - """A class used to interact with the file system, providing a high - level, cross-platform interface compatible with both Windows and - UNIX style filesystems. - - It provides some utility methods and some wraps around operations - involved in file creation and file system operations like moving - files or removing directories. - - Instance attributes: - - (str) root: the user home directory. - - (str) cwd: the current working directory. - - (str) rnfr: source file to be renamed. - - """ - - def __init__(self): - self.root = None - self.cwd = '/' - self.cwd_node = None - self.rnfr = None - self._log = logging.getLogger(__name__) - - # Ok - def db_list(self): - """Get the list of available databases, with FTPd support - """ - s = openerp.service.db - result = s.exp_list(document=True) - self.db_name_list = [] - for db_name in result: - db, cr = None, None - try: - try: - db = sql_db.db_connect(db_name) - cr = db.cursor() - cr.execute("SELECT 1 FROM pg_class WHERE relkind = 'r' AND relname = 'ir_module_module'") - if not cr.fetchone(): - continue - - cr.execute("SELECT id FROM ir_module_module WHERE name = 'document_ftp' AND state IN ('installed', 'to install', 'to upgrade') ") - res = cr.fetchone() - if res and len(res): - self.db_name_list.append(db_name) - cr.commit() - except Exception: - self._log.warning('Cannot use db "%s".', db_name) - finally: - if cr is not None: - cr.close() - return self.db_name_list - - def ftpnorm(self, ftppath): - """Normalize a "virtual" ftp pathname (tipically the raw string - coming from client). - - Pathname returned is relative!. - """ - p = os.path.normpath(ftppath) - # normalize string in a standard web-path notation having '/' - # as separator. xrg: is that really in the spec? - p = p.replace("\\", "/") - # os.path.normpath supports UNC paths (e.g. "//a/b/c") but we - # don't need them. In case we get an UNC path we collapse - # redundant separators appearing at the beginning of the string - while p[:2] == '//': - p = p[1:] - if p == '.': - return '' - return p - - def get_cwd(self): - """ return the cwd, decoded in utf""" - return _to_decode(self.cwd) - - def ftp2fs(self, path_orig, data): - raise DeprecationWarning() - - def fs2ftp(self, node): - """ Return the string path of a node, in ftp form - """ - res='/' - if node: - paths = node.full_path() - res = '/' + node.context.dbname + '/' + \ - _to_decode(os.path.join(*paths)) - - return res - - def validpath(self, path): - """Check whether the path belongs to user's home directory. - Expected argument is a datacr tuple - """ - # TODO: are we called for "/" ? - return isinstance(path, tuple) and path[1] and True or False - - # --- Wrapper methods around open() and tempfile.mkstemp - - def create(self, datacr, objname, mode): - """ Create a children file-node under node, open it - @return open node_descriptor of the created node - """ - objname = _to_unicode(objname) - cr , node, rem = datacr - try: - child = node.child(cr, objname) - if child: - if child.type not in ('file','content'): - raise OSError(1, 'Operation is not permitted.') - - ret = child.open_data(cr, mode) - cr.commit() - assert ret, "Cannot create descriptor for %r: %r." % (child, ret) - return ret - except EnvironmentError: - raise - except Exception: - self._log.exception('Cannot locate item %s at node %s.', objname, repr(node)) - pass - - try: - child = node.create_child(cr, objname, data=None) - ret = child.open_data(cr, mode) - assert ret, "Cannot create descriptor for %r." % child - cr.commit() - return ret - except EnvironmentError: - raise - except Exception: - self._log.exception('Cannot create item %s at node %s.', objname, repr(node)) - raise OSError(1, 'Operation is not permitted.') - - def open(self, datacr, mode): - if not (datacr and datacr[1]): - raise OSError(1, 'Operation is not permitted.') - # Reading operation - cr, node, rem = datacr - try: - res = node.open_data(cr, mode) - cr.commit() - except TypeError: - raise IOError(errno.EINVAL, "No data.") - return res - - # ok, but need test more - - def mkstemp(self, suffix='', prefix='', dir=None, mode='wb'): - """A wrap around tempfile.mkstemp creating a file with a unique - name. Unlike mkstemp it returns an object with a file-like - interface. - """ - raise NotImplementedError # TODO - - text = not 'b' in mode - # for unique file , maintain version if duplicate file - if dir: - cr = dir.cr - uid = dir.uid - pool = openerp.registry(node.context.dbname) - object=dir and dir.object or False - object2=dir and dir.object2 or False - res=pool.get('ir.attachment').search(cr,uid,[('name','like',prefix),('parent_id','=',object and object.type in ('directory','ressource') and object.id or False),('res_id','=',object2 and object2.id or False),('res_model','=',object2 and object2._name or False)]) - if len(res): - pre = prefix.split('.') - prefix=pre[0] + '.v'+str(len(res))+'.'+pre[1] - return self.create(dir,suffix+prefix,text) - - - - # Ok - def chdir(self, datacr): - if (not datacr) or datacr == (None, None, None): - self.cwd = '/' - self.cwd_node = None - return None - if not datacr[1]: - raise OSError(1, 'Operation is not permitted.') - if datacr[1].type not in ('collection','database'): - raise OSError(2, 'Path is not a directory.') - self.cwd = '/'+datacr[1].context.dbname + '/' - self.cwd += '/'.join(datacr[1].full_path()) - self.cwd_node = datacr[1] - - # Ok - def mkdir(self, datacr, basename): - """Create the specified directory.""" - cr, node, rem = datacr or (None, None, None) - if not node: - raise OSError(1, 'Operation is not permitted.') - - try: - basename =_to_unicode(basename) - cdir = node.create_child_collection(cr, basename) - self._log.debug("Created child dir: %r", cdir) - cr.commit() - except Exception: - self._log.exception('Cannot create dir "%s" at node %s.', basename, repr(node)) - raise OSError(1, 'Operation is not permitted.') - - def close_cr(self, data): - if data and data[0]: - data[0].close() - return True - - def get_cr(self, pathname): - raise DeprecationWarning() - - def get_crdata(self, line, mode='file'): - """ Get database cursor, node and remainder data, for commands - - This is the helper function that will prepare the arguments for - any of the subsequent commands. - It returns a tuple in the form of: - @code ( cr, node, rem_path=None ) - - @param line An absolute or relative ftp path, as passed to the cmd. - @param mode A word describing the mode of operation, so that this - function behaves properly in the different commands. - """ - path = self.ftpnorm(line) - if self.cwd_node is None: - if not os.path.isabs(path): - path = os.path.join(self.root, path) - - if path == '/' and mode in ('list', 'cwd'): - return (None, None, None ) - - if path == '..': path = self.cwd + '/..' - path = _to_unicode(os.path.normpath(path)) # again, for '/db/../ss' - if path == '.': path = '' - - if os.path.isabs(path) and self.cwd_node is not None \ - and path.startswith(self.cwd): - # make relative, so that cwd_node is used again - path = path[len(self.cwd):] - if path.startswith('/'): - path = path[1:] - - p_parts = path.split(os.sep) - - assert '..' not in p_parts - - rem_path = None - if mode in ('create',): - rem_path = p_parts[-1] - p_parts = p_parts[:-1] - - if os.path.isabs(path): - # we have to start from root, again - while p_parts and p_parts[0] == '': - p_parts = p_parts[1:] - # self._log.debug("Path parts: %r ", p_parts) - if not p_parts: - raise IOError(errno.EPERM, 'Cannot perform operation at root directory.') - dbname = p_parts[0] - if dbname not in self.db_list(): - raise IOError(errno.ENOENT,'Invalid database path: %s.' % dbname) - try: - db = openerp.registry(dbname).db - except Exception: - raise OSError(1, 'Database cannot be used.') - cr = db.cursor() - try: - uid = security.login(dbname, self.username, self.password) - except Exception: - cr.close() - raise - if not uid: - cr.close() - raise OSError(2, 'Authentification required.') - n = get_node_context(cr, uid, {}) - node = n.get_uri(cr, p_parts[1:]) - return (cr, node, rem_path) - else: - # we never reach here if cwd_node is not set - if p_parts and p_parts[-1] == '': - p_parts = p_parts[:-1] - cr, uid = self.get_node_cr_uid(self.cwd_node) - if p_parts: - node = self.cwd_node.get_uri(cr, p_parts) - else: - node = self.cwd_node - if node is False and mode not in ('???'): - cr.close() - raise IOError(errno.ENOENT, 'Path does not exist.') - return (cr, node, rem_path) - - def get_node_cr_uid(self, node): - """ Get cr, uid, pool from a node - """ - assert node - db = openerp.registry(node.context.dbname).db - return db.cursor(), node.context.uid - - def get_node_cr(self, node): - """ Get the cursor for the database of a node - - The cursor is the only thing that a node will not store - persistenly, so we have to obtain a new one for each call. - """ - return self.get_node_cr_uid(node)[0] - - def listdir(self, datacr): - """List the content of a directory.""" - class false_node(object): - write_date = 0.0 - create_date = 0.0 - unixperms = 040550 - content_length = 0L - uuser = 'root' - ugroup = 'root' - type = 'database' - - def __init__(self, db): - self.path = db - - if datacr[1] is None: - result = [] - for db in self.db_list(): - try: - result.append(false_node(db)) - except osv.except_osv: - pass - return result - cr, node, rem = datacr - res = node.children(cr) - return res - - def rmdir(self, datacr): - """Remove the specified directory.""" - cr, node, rem = datacr - assert node - node.rmcol(cr) - cr.commit() - - def remove(self, datacr): - assert datacr[1] - if datacr[1].type == 'collection': - return self.rmdir(datacr) - elif datacr[1].type == 'file': - return self.rmfile(datacr) - raise OSError(1, 'Operation is not permitted.') - - def rmfile(self, datacr): - """Remove the specified file.""" - assert datacr[1] - cr = datacr[0] - datacr[1].rm(cr) - cr.commit() - - def rename(self, src, datacr): - """ Renaming operation, the effect depends on the src: - * A file: read, create and remove - * A directory: change the parent and reassign children to ressource - """ - cr = datacr[0] - try: - nname = _to_unicode(datacr[2]) - ret = src.move_to(cr, datacr[1], new_name=nname) - # API shouldn't wait for us to write the object - assert (ret is True) or (ret is False) - cr.commit() - except EnvironmentError: - raise - except Exception: - self._log.exception('Cannot rename "%s" to "%s" at "%s".', src, datacr[2], datacr[1]) - raise OSError(1,'Operation is not permitted.') - - def stat(self, node): - raise NotImplementedError() - - # --- Wrapper methods around os.path.* - - # Ok - def isfile(self, node): - if node and (node.type in ('file','content')): - return True - return False - - # Ok - def islink(self, path): - """Return True if path is a symbolic link.""" - return False - - def isdir(self, node): - """Return True if path is a directory.""" - if node is None: - return True - if node and (node.type in ('collection','database')): - return True - return False - - def getsize(self, datacr): - """Return the size of the specified file in bytes.""" - if not (datacr and datacr[1]): - raise IOError(errno.ENOENT, "No such file or directory.") - if datacr[1].type in ('file', 'content'): - return datacr[1].get_data_len(datacr[0]) or 0L - return 0L - - # Ok - def getmtime(self, datacr): - """Return the last modified time as a number of seconds since - the epoch.""" - - node = datacr[1] - if node.write_date or node.create_date: - dt = (node.write_date or node.create_date)[:19] - result = time.mktime(time.strptime(dt, '%Y-%m-%d %H:%M:%S')) - else: - result = time.mktime(time.localtime()) - return result - - # Ok - def realpath(self, path): - """Return the canonical version of path eliminating any - symbolic links encountered in the path (if they are - supported by the operating system). - """ - return path - - # Ok - def lexists(self, path): - """Return True if path refers to an existing path, including - a broken or circular symbolic link. - """ - raise DeprecationWarning() - return path and True or False - - exists = lexists - - # Ok, can be improved - def glob1(self, dirname, pattern): - """Return a list of files matching a dirname pattern - non-recursively. - - Unlike glob.glob1 raises exception if os.listdir() fails. - """ - names = self.listdir(dirname) - if pattern[0] != '.': - names = filter(lambda x: x.path[0] != '.', names) - return fnmatch.filter(names, pattern) - - # --- Listing utilities - - # note: the following operations are no more blocking - - def get_list_dir(self, datacr): - """"Return an iterator object that yields a directory listing - in a form suitable for LIST command. - """ - if not datacr: - return None - elif self.isdir(datacr[1]): - listing = self.listdir(datacr) - return self.format_list(datacr[0], datacr[1], listing) - # if path is a file or a symlink we return information about it - elif self.isfile(datacr[1]): - par = datacr[1].parent - return self.format_list(datacr[0], par, [datacr[1]]) - - def get_stat_dir(self, rawline, datacr): - """Return an iterator object that yields a list of files - matching a dirname pattern non-recursively in a form - suitable for STAT command. - - - (str) rawline: the raw string passed by client as command - argument. - """ - ftppath = self.ftpnorm(rawline) - if not glob.has_magic(ftppath): - return self.get_list_dir(self.ftp2fs(rawline, datacr)) - else: - basedir, basename = os.path.split(ftppath) - if glob.has_magic(basedir): - return iter(['Directory recursion not supported.\r\n']) - else: - basedir = self.ftp2fs(basedir, datacr) - listing = self.glob1(basedir, basename) - if listing: - listing.sort() - return self.format_list(basedir, listing) - - def format_list(self, cr, parent_node, listing, ignore_err=True): - """Return an iterator object that yields the entries of given - directory emulating the "/bin/ls -lA" UNIX command output. - - - (str) basedir: the parent directory node. Can be None - - (list) listing: a list of nodes - - (bool) ignore_err: when False raise exception if os.lstat() - call fails. - - On platforms which do not support the pwd and grp modules (such - as Windows), ownership is printed as "owner" and "group" as a - default, and number of hard links is always "1". On UNIX - systems, the actual owner, group, and number of links are - printed. - - This is how output appears to client: - - -rw-rw-rw- 1 owner group 7045120 Sep 02 3:47 music.mp3 - drwxrwxrwx 1 owner group 0 Aug 31 18:50 e-books - -rw-rw-rw- 1 owner group 380 Sep 02 3:40 module.py - """ - for node in listing: - perms = filemode(node.unixperms) # permissions - nlinks = 1 - size = node.content_length or 0L - uname = _to_decode(node.uuser) - gname = _to_decode(node.ugroup) - # stat.st_mtime could fail (-1) if last mtime is too old - # in which case we return the local time as last mtime - try: - st_mtime = node.write_date or 0.0 - if isinstance(st_mtime, basestring): - st_mtime = time.strptime(st_mtime, '%Y-%m-%d %H:%M:%S') - elif isinstance(st_mtime, float): - st_mtime = time.localtime(st_mtime) - mname=_get_month_name(time.strftime("%m", st_mtime )) - mtime = mname+' '+time.strftime("%d %H:%M", st_mtime) - except ValueError: - mname=_get_month_name(time.strftime("%m")) - mtime = mname+' '+time.strftime("%d %H:%M") - fpath = node.path - if isinstance(fpath, (list, tuple)): - fpath = fpath[-1] - # formatting is matched with proftpd ls output - path=_to_decode(fpath) - yield "%s %3s %-8s %-8s %8s %s %s\r\n" %(perms, nlinks, uname, gname, - size, mtime, path) - - # Ok - def format_mlsx(self, cr, basedir, listing, perms, facts, ignore_err=True): - """Return an iterator object that yields the entries of a given - directory or of a single file in a form suitable with MLSD and - MLST commands. - - Every entry includes a list of "facts" referring the listed - element. See RFC-3659, chapter 7, to see what every single - fact stands for. - - - (str) basedir: the absolute dirname. - - (list) listing: the names of the entries in basedir - - (str) perms: the string referencing the user permissions. - - (str) facts: the list of "facts" to be returned. - - (bool) ignore_err: when False raise exception if os.stat() - call fails. - - Note that "facts" returned may change depending on the platform - and on what user specified by using the OPTS command. - - This is how output could appear to the client issuing - a MLSD request: - - type=file;size=156;perm=r;modify=20071029155301;unique=801cd2; music.mp3 - type=dir;size=0;perm=el;modify=20071127230206;unique=801e33; ebooks - type=file;size=211;perm=r;modify=20071103093626;unique=801e32; module.py - """ - permdir = ''.join([x for x in perms if x not in 'arw']) - permfile = ''.join([x for x in perms if x not in 'celmp']) - if ('w' in perms) or ('a' in perms) or ('f' in perms): - permdir += 'c' - if 'd' in perms: - permdir += 'p' - type = size = perm = modify = create = unique = mode = uid = gid = "" - for node in listing: - # type + perm - if self.isdir(node): - if 'type' in facts: - type = 'type=dir;' - if 'perm' in facts: - perm = 'perm=%s;' %permdir - else: - if 'type' in facts: - type = 'type=file;' - if 'perm' in facts: - perm = 'perm=%s;' %permfile - if 'size' in facts: - size = 'size=%s;' % (node.content_length or 0L) - # last modification time - if 'modify' in facts: - try: - st_mtime = node.write_date or 0.0 - if isinstance(st_mtime, basestring): - st_mtime = time.strptime(st_mtime, '%Y-%m-%d %H:%M:%S') - elif isinstance(st_mtime, float): - st_mtime = time.localtime(st_mtime) - modify = 'modify=%s;' %time.strftime("%Y%m%d%H%M%S", st_mtime) - except ValueError: - # stat.st_mtime could fail (-1) if last mtime is too old - modify = "" - if 'create' in facts: - # on Windows we can provide also the creation time - try: - st_ctime = node.create_date or 0.0 - if isinstance(st_ctime, basestring): - st_ctime = time.strptime(st_ctime, '%Y-%m-%d %H:%M:%S') - elif isinstance(st_mtime, float): - st_ctime = time.localtime(st_ctime) - create = 'create=%s;' %time.strftime("%Y%m%d%H%M%S",st_ctime) - except ValueError: - create = "" - # UNIX only - if 'unix.mode' in facts: - mode = 'unix.mode=%s;' %oct(node.unixperms & 0777) - if 'unix.uid' in facts: - uid = 'unix.uid=%s;' % _to_decode(node.uuser) - if 'unix.gid' in facts: - gid = 'unix.gid=%s;' % _to_decode(node.ugroup) - # We provide unique fact (see RFC-3659, chapter 7.5.2) on - # posix platforms only; we get it by mixing st_dev and - # st_ino values which should be enough for granting an - # uniqueness for the file listed. - # The same approach is used by pure-ftpd. - # Implementors who want to provide unique fact on other - # platforms should use some platform-specific method (e.g. - # on Windows NTFS filesystems MTF records could be used). - # if 'unique' in facts: todo - # unique = "unique=%x%x;" %(st.st_dev, st.st_ino) - path = node.path - if isinstance (path, (list, tuple)): - path = path[-1] - path=_to_decode(path) - yield "%s%s%s%s%s%s%s%s%s %s\r\n" %(type, size, perm, modify, create, - mode, uid, gid, unique, path) - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: - diff --git a/addons/document_ftp/ftpserver/authorizer.py b/addons/document_ftp/ftpserver/authorizer.py deleted file mode 100644 index e863eeb39ec..00000000000 --- a/addons/document_ftp/ftpserver/authorizer.py +++ /dev/null @@ -1,70 +0,0 @@ -# -*- encoding: utf-8 -*- - -class authorizer: - read_perms = "elr" - write_perms = "adfmw" - - def __init__(self): - self.password = '' - - def validate_authentication(self, username, password): - """Return True if the supplied username and password match the - stored credentials.""" - self.password = password - return True - - def impersonate_user(self, username, password): - """Impersonate another user (noop). - - It is always called before accessing the filesystem. - By default it does nothing. The subclass overriding this - method is expected to provide a mechanism to change the - current user. - """ - - def terminate_impersonation(self): - """Terminate impersonation (noop). - - It is always called after having accessed the filesystem. - By default it does nothing. The subclass overriding this - method is expected to provide a mechanism to switch back - to the original user. - """ - - def has_user(self, username): - """Whether the username exists in the virtual users table.""" - if username=='anonymous': - return False - return True - - def has_perm(self, username, perm, path=None): - """Whether the user has permission over path (an absolute - pathname of a file or a directory). - - Expected perm argument is one of the following letters: - "elradfmw". - """ - paths = path.split('/') - if not len(paths)>2: - return True - db_name = paths[1] - res = security.login(db_name, username, self.password) - return bool(res) - - def get_perms(self, username): - """Return current user permissions.""" - return 'elr' - - def get_home_dir(self, username): - """Return the user's home directory.""" - return '/' - - def get_msg_login(self, username): - """Return the user's login message.""" - return 'Welcome on OpenERP document management system.' - - def get_msg_quit(self, username): - """Return the user's quitting message.""" - return 'Bye.' - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/ftpserver/ftpserver.py b/addons/document_ftp/ftpserver/ftpserver.py deleted file mode 100755 index 1e8b8d88468..00000000000 --- a/addons/document_ftp/ftpserver/ftpserver.py +++ /dev/null @@ -1,3047 +0,0 @@ -#!/usr/bin/env python -# -*- encoding: utf-8 -*- -# ftpserver.py -# -# pyftpdlib is released under the MIT license, reproduced below: -# ====================================================================== -# Copyright (C) 2007 Giampaolo Rodola' -# Hacked by Fabien Pinckaers (C) 2008 -# -# All Rights Reserved -# -# Permission to use, copy, modify, and distribute this software and -# its documentation for any purpose and without fee is hereby -# granted, provided that the above copyright notice appear in all -# copies and that both that copyright notice and this permission -# notice appear in supporting documentation, and that the name of -# Giampaolo Rodola' not be used in advertising or publicity pertaining to -# distribution of the software without specific, written prior -# permission. -# -# Giampaolo Rodola' DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN -# NO EVENT Giampaolo Rodola' BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS -# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, -# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN -# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# ====================================================================== - - -"""pyftpdlib: RFC-959 asynchronous FTP server. - -pyftpdlib implements a fully functioning asynchronous FTP server as -defined in RFC-959. A hierarchy of classes outlined below implement -the backend functionality for the FTPd: - - [FTPServer] - the base class for the backend. - - [FTPHandler] - a class representing the server-protocol-interpreter - (server-PI, see RFC-959). Each time a new connection occurs - FTPServer will create a new FTPHandler instance to handle the - current PI session. - - [ActiveDTP], [PassiveDTP] - base classes for active/passive-DTP - backends. - - [DTPHandler] - this class handles processing of data transfer - operations (server-DTP, see RFC-959). - - [DummyAuthorizer] - an "authorizer" is a class handling FTPd - authentications and permissions. It is used inside FTPHandler class - to verify user passwords, to get user's home directory and to get - permissions when a filesystem read/write occurs. "DummyAuthorizer" - is the base authorizer class providing a platform independent - interface for managing virtual users. - - [AbstractedFS] - class used to interact with the file system, - providing a high level, cross-platform interface compatible - with both Windows and UNIX style filesystems. - - [AuthorizerError] - base class for authorizers exceptions. - - -pyftpdlib also provides 3 different logging streams through 3 functions -which can be overridden to allow for custom logging. - - [log] - the main logger that logs the most important messages for - the end user regarding the FTPd. - - [logline] - this function is used to log commands and responses - passing through the control FTP channel. - - [logerror] - log traceback outputs occurring in case of errors. - - -Usage example: - ->>> from pyftpdlib import ftpserver ->>> authorizer = ftpserver.DummyAuthorizer() ->>> authorizer.add_user('user', 'password', '/home/user', perm='elradfmw') ->>> authorizer.add_anonymous('/home/nobody') ->>> ftp_handler = ftpserver.FTPHandler ->>> ftp_handler.authorizer = authorizer ->>> address = ("127.0.0.1", 21) ->>> ftpd = ftpserver.FTPServer(address, ftp_handler) ->>> ftpd.serve_forever() -Serving FTP on 127.0.0.1:21 -[]127.0.0.1:2503 connected. -127.0.0.1:2503 ==> 220 Ready. -127.0.0.1:2503 <== USER anonymous -127.0.0.1:2503 ==> 331 Username ok, send password. -127.0.0.1:2503 <== PASS ****** -127.0.0.1:2503 ==> 230 Login successful. -[anonymous]@127.0.0.1:2503 User anonymous logged in. -127.0.0.1:2503 <== TYPE A -127.0.0.1:2503 ==> 200 Type set to: ASCII. -127.0.0.1:2503 <== PASV -127.0.0.1:2503 ==> 227 Entering passive mode (127,0,0,1,9,201). -127.0.0.1:2503 <== LIST -127.0.0.1:2503 ==> 150 File status okay. About to open data connection. -[anonymous]@127.0.0.1:2503 OK LIST "/". Transfer starting. -127.0.0.1:2503 ==> 226 Transfer complete. -[anonymous]@127.0.0.1:2503 Transfer complete. 706 bytes transmitted. -127.0.0.1:2503 <== QUIT -127.0.0.1:2503 ==> 221 Goodbye. -[anonymous]@127.0.0.1:2503 Disconnected. -""" - - -import asyncore -import asynchat -import socket -import os -import sys -import traceback -import errno -import time -import glob -import fnmatch -import tempfile -import warnings -import random -import stat -from collections import deque -from tarfile import filemode - -LOG_ACTIVE = True - -__all__ = ['proto_cmds', 'Error', 'log', 'logline', 'logerror', 'DummyAuthorizer', - 'FTPHandler', 'FTPServer', 'PassiveDTP', 'ActiveDTP', 'DTPHandler', - 'FileProducer', 'IteratorProducer', 'BufferedIteratorProducer', - 'AbstractedFS',] - - -__pname__ = 'Python FTP server library (pyftpdlib)' -__ver__ = '0.4.0' -__date__ = '2008-05-16' -__author__ = "Giampaolo Rodola' " -__web__ = 'http://code.google.com/p/pyftpdlib/' - - -proto_cmds = { - 'ABOR': 'Syntax: ABOR (abort transfer).', - 'ALLO': 'Syntax: ALLO bytes (obsolete; allocate storage).', - 'APPE': 'Syntax: APPE file-name (append data to an existent file).', - 'CDUP': 'Syntax: CDUP (go to parent directory).', - 'CWD' : 'Syntax: CWD dir-name (change current working directory).', - 'DELE': 'Syntax: DELE file-name (delete file).', - 'EPRT': 'Syntax: EPRT |proto|ip|port| (set server in extended active mode).', - 'EPSV': 'Syntax: EPSV [ proto/"ALL"] (set server in extended passive mode).', - 'FEAT': 'Syntax: FEAT (list all new features supported).', - 'HELP': 'Syntax: HELP [ cmd] (show help).', - 'LIST': 'Syntax: LIST [ path-name] (list files).', - 'MDTM': 'Syntax: MDTM file-name (get last modification time).', - 'MLSD': 'Syntax: MLSD [ dir-name] (list files in a machine-processable form)', - 'MLST': 'Syntax: MLST [ path-name] (show a path in a machine-processable form)', - 'MODE': 'Syntax: MODE mode (obsolete; set data transfer mode).', - 'MKD' : 'Syntax: MDK dir-name (create directory).', - 'NLST': 'Syntax: NLST [ path-name] (list files in a compact form).', - 'NOOP': 'Syntax: NOOP (just do nothing).', - 'OPTS': 'Syntax: OPTS ftp-command [ option] (specify options for FTP commands)', - 'PASS': 'Syntax: PASS user-name (set user password).', - 'PASV': 'Syntax: PASV (set server in passive mode).', - 'PORT': 'Syntax: PORT h1,h2,h3,h4,p1,p2 (set server in active mode).', - 'PWD' : 'Syntax: PWD (get current working directory).', - 'QUIT': 'Syntax: QUIT (quit current session).', - 'REIN': 'Syntax: REIN (reinitialize / flush account).', - 'REST': 'Syntax: REST marker (restart file position).', - 'RETR': 'Syntax: RETR file-name (retrieve a file).', - 'RMD' : 'Syntax: RMD dir-name (remove directory).', - 'RNFR': 'Syntax: RNFR file-name (file renaming (source name)).', - 'RNTO': 'Syntax: RNTO file-name (file renaming (destination name)).', - 'SIZE': 'Syntax: HELP file-name (get file size).', - 'STAT': 'Syntax: STAT [ path name] (status information [list files]).', - 'STOR': 'Syntax: STOR file-name (store a file).', - 'STOU': 'Syntax: STOU [ file-name] (store a file with a unique name).', - 'STRU': 'Syntax: STRU type (obsolete; set file structure).', - 'SYST': 'Syntax: SYST (get operating system type).', - 'TYPE': 'Syntax: TYPE [A | I] (set transfer type).', - 'USER': 'Syntax: USER user-name (set username).', - 'XCUP': 'Syntax: XCUP (obsolete; go to parent directory).', - 'XCWD': 'Syntax: XCWD dir-name (obsolete; change current directory).', - 'XMKD': 'Syntax: XMDK dir-name (obsolete; create directory).', - 'XPWD': 'Syntax: XPWD (obsolete; get current dir).', - 'XRMD': 'Syntax: XRMD dir-name (obsolete; remove directory).', - } - - -def _strerror(err): - """A wrap around os.strerror() which may be not available on all - platforms (e.g. pythonCE). - - - (instance) err: an EnvironmentError or derived class instance. - """ - if hasattr(os, 'strerror'): - return os.strerror(err.errno) - else: - return err.strerror - -def _to_unicode(s): - try: - return s.decode('utf-8') - except UnicodeError: - pass - try: - return s.decode('latin') - except UnicodeError: - pass - try: - return s.encode('ascii') - except UnicodeError: - return s - -def _to_decode(s): - try: - return s.encode('utf-8') - except UnicodeError: - pass - try: - return s.encode('latin') - except UnicodeError: - pass - try: - return s.decode('ascii') - except UnicodeError: - return s - -# --- library defined exceptions - -class Error(Exception): - """Base class for module exceptions.""" - -class AuthorizerError(Error): - """Base class for authorizer exceptions.""" - - -# --- loggers - -def log(msg): - """Log messages intended for the end user.""" - if LOG_ACTIVE: - print msg - -def logline(msg): - """Log commands and responses passing through the command channel.""" - if LOG_ACTIVE: - print msg - -def logerror(msg): - """Log traceback outputs occurring in case of errors.""" - sys.stderr.write(str(msg) + '\n') - sys.stderr.flush() - - -# --- authorizers - -class DummyAuthorizer: - """Basic "dummy" authorizer class, suitable for subclassing to - create your own custom authorizers. - - An "authorizer" is a class handling authentications and permissions - of the FTP server. It is used inside FTPHandler class for verifying - user's password, getting users home directory, checking user - permissions when a file read/write event occurs and changing user - before accessing the filesystem. - - DummyAuthorizer is the base authorizer, providing a platform - independent interface for managing "virtual" FTP users. System - dependent authorizers can by written by subclassing this base - class and overriding appropriate methods as necessary. - """ - - read_perms = "elr" - write_perms = "adfmw" - - def __init__(self): - self.user_table = {} - - def add_user(self, username, password, homedir, perm='elr', - msg_login="Login successful.", msg_quit="Goodbye."): - """Add a user to the virtual users table. - - AuthorizerError exceptions raised on error conditions such as - invalid permissions, missing home directory or duplicate usernames. - - Optional perm argument is a string referencing the user's - permissions explained below: - - Read permissions: - - "e" = change directory (CWD command) - - "l" = list files (LIST, NLST, MLSD commands) - - "r" = retrieve file from the server (RETR command) - - Write permissions: - - "a" = append data to an existing file (APPE command) - - "d" = delete file or directory (DELE, RMD commands) - - "f" = rename file or directory (RNFR, RNTO commands) - - "m" = create directory (MKD command) - - "w" = store a file to the server (STOR, STOU commands) - - Optional msg_login and msg_quit arguments can be specified to - provide customized response strings when user log-in and quit. - """ - if self.has_user(username): - raise AuthorizerError('User "%s" already exists.' %username) - homedir = os.path.realpath(homedir) - if not os.path.isdir(homedir): - raise AuthorizerError('No such directory: "%s".' %homedir) - for p in perm: - if p not in 'elradfmw': - raise AuthorizerError('No such permission: "%s".' %p) - for p in perm: - if (p in self.write_perms) and (username == 'anonymous'): - warnings.warn("Write permissions are assigned to anonymous user.", - RuntimeWarning) - break - dic = {'pwd': str(password), - 'home': homedir, - 'perm': perm, - 'msg_login': str(msg_login), - 'msg_quit': str(msg_quit) - } - self.user_table[username] = dic - - def add_anonymous(self, homedir, **kwargs): - """Add an anonymous user to the virtual users table. - - AuthorizerError exception raised on error conditions such as - invalid permissions, missing home directory, or duplicate - anonymous users. - - The keyword arguments in kwargs are the same expected by - add_user method: "perm", "msg_login" and "msg_quit". - - The optional "perm" keyword argument is a string defaulting to - "elr" referencing "read-only" anonymous user's permissions. - - Using write permission values ("adfmw") results in a - RuntimeWarning. - """ - DummyAuthorizer.add_user(self, 'anonymous', '', homedir, **kwargs) - - def remove_user(self, username): - """Remove a user from the virtual users table.""" - del self.user_table[username] - - def validate_authentication(self, username, password): - """Return True if the supplied username and password match the - stored credentials.""" - return self.user_table[username]['pwd'] == password - - def impersonate_user(self, username, password): - """Impersonate another user (noop). - - It is always called before accessing the filesystem. - By default it does nothing. The subclass overriding this - method is expected to provide a mechanism to change the - current user. - """ - - def terminate_impersonation(self): - """Terminate impersonation (noop). - - It is always called after having accessed the filesystem. - By default it does nothing. The subclass overriding this - method is expected to provide a mechanism to switch back - to the original user. - """ - - def has_user(self, username): - """Whether the username exists in the virtual users table.""" - return username in self.user_table - - def has_perm(self, username, perm, path=None): - """Whether the user has permission over path (an absolute - pathname of a file or a directory). - - Expected perm argument is one of the following letters: - "elradfmw". - """ - return perm in self.user_table[username]['perm'] - - def get_perms(self, username): - """Return current user permissions.""" - return self.user_table[username]['perm'] - - def get_home_dir(self, username): - """Return the user's home directory.""" - return self.user_table[username]['home'] - - def get_msg_login(self, username): - """Return the user's login message.""" - return self.user_table[username]['msg_login'] - - def get_msg_quit(self, username): - """Return the user's quitting message.""" - return self.user_table[username]['msg_quit'] - - -# --- DTP classes - -class PassiveDTP(asyncore.dispatcher): - """This class is an asyncore.disptacher subclass. It creates a - socket listening on a local port, dispatching the resultant - connection to DTPHandler. - """ - - def __init__(self, cmd_channel, extmode=False): - """Initialize the passive data server. - - - (instance) cmd_channel: the command channel class instance. - - (bool) extmode: wheter use extended passive mode response type. - """ - asyncore.dispatcher.__init__(self) - self.cmd_channel = cmd_channel - - ip = self.cmd_channel.getsockname()[0] - self.create_socket(self.cmd_channel.af, socket.SOCK_STREAM) - - if not self.cmd_channel.passive_ports: - # By using 0 as port number value we let kernel choose a free - # unprivileged random port. - self.bind((ip, 0)) - else: - ports = list(self.cmd_channel.passive_ports) - while ports: - port = ports.pop(random.randint(0, len(ports) -1)) - try: - self.bind((ip, port)) - except socket.error, why: - if why[0] == errno.EADDRINUSE: # port already in use - if ports: - continue - # If cannot use one of the ports in the configured - # range we'll use a kernel-assigned port, and log - # a message reporting the issue. - # By using 0 as port number value we let kernel - # choose a free unprivileged random port. - else: - self.bind((ip, 0)) - self.cmd_channel.log( - "Can't find a valid passive port in the " - "configured range. A random kernel-assigned " - "port will be used." - ) - else: - raise - else: - break - self.listen(5) - port = self.socket.getsockname()[1] - if not extmode: - if self.cmd_channel.masquerade_address: - ip = self.cmd_channel.masquerade_address - # The format of 227 response in not standardized. - # This is the most expected: - self.cmd_channel.respond('227 Entering passive mode (%s,%d,%d).' %( - ip.replace('.', ','), port / 256, port % 256)) - else: - self.cmd_channel.respond('229 Entering extended passive mode ' - '(|||%d|).' %port) - - # --- connection / overridden - - def handle_accept(self): - """Called when remote client initiates a connection.""" - sock, addr = self.accept() - - # Check the origin of data connection. If not expressively - # configured we drop the incoming data connection if remote - # IP address does not match the client's IP address. - if (self.cmd_channel.remote_ip != addr[0]): - if not self.cmd_channel.permit_foreign_addresses: - try: - sock.close() - except socket.error: - pass - msg = 'Rejected data connection from foreign address %s:%s.' \ - %(addr[0], addr[1]) - self.cmd_channel.respond("425 %s" %msg) - self.cmd_channel.log(msg) - # do not close listening socket: it couldn't be client's blame - return - else: - # site-to-site FTP allowed - msg = 'Established data connection with foreign address %s:%s.'\ - %(addr[0], addr[1]) - self.cmd_channel.log(msg) - # Immediately close the current channel (we accept only one - # connection at time) and avoid running out of max connections - # limit. - self.close() - # delegate such connection to DTP handler - handler = self.cmd_channel.dtp_handler(sock, self.cmd_channel) - self.cmd_channel.data_channel = handler - self.cmd_channel.on_dtp_connection() - - def writable(self): - return 0 - - def handle_error(self): - """Called to handle any uncaught exceptions.""" - try: - raise - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - raise - logerror(traceback.format_exc()) - self.close() - - def handle_close(self): - """Called on closing the data connection.""" - self.close() - - -class ActiveDTP(asyncore.dispatcher): - """This class is an asyncore.disptacher subclass. It creates a - socket resulting from the connection to a remote user-port, - dispatching it to DTPHandler. - """ - - def __init__(self, ip, port, cmd_channel): - """Initialize the active data channel attemping to connect - to remote data socket. - - - (str) ip: the remote IP address. - - (int) port: the remote port. - - (instance) cmd_channel: the command channel class instance. - """ - asyncore.dispatcher.__init__(self) - self.cmd_channel = cmd_channel - self.create_socket(self.cmd_channel.af, socket.SOCK_STREAM) - try: - self.connect((ip, port)) - except socket.gaierror: - self.cmd_channel.respond("425 Cannot connect to specified address.") - self.close() - - # --- connection / overridden - - def handle_write(self): - """NOOP, must be overridden to prevent unhandled write event.""" - - def handle_connect(self): - """Called when connection is established.""" - self.cmd_channel.respond('200 Active data connection has been established.') - # delegate such connection to DTP handler - handler = self.cmd_channel.dtp_handler(self.socket, self.cmd_channel) - self.cmd_channel.data_channel = handler - self.cmd_channel.on_dtp_connection() - - def handle_expt(self): - self.cmd_channel.respond("425 Cannot connect to specified address.") - self.close() - - def handle_error(self): - """Called to handle any uncaught exceptions.""" - try: - raise - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - raise - except socket.error: - pass - except: - logerror(traceback.format_exc()) - self.cmd_channel.respond("425 Cannot connect to specified address.") - self.close() - -class DTPHandler(asyncore.dispatcher): - """Class handling server-data-transfer-process (server-DTP, see - RFC-959) managing data-transfer operations involving sending - and receiving data. - - Instance attributes defined in this class, initialized when - channel is opened: - - - (instance) cmd_channel: the command channel class instance. - - (file) file_obj: the file transferred (if any). - - (bool) receive: True if channel is used for receiving data. - - (bool) transfer_finished: True if transfer completed successfully. - - (int) tot_bytes_sent: the total bytes sent. - - (int) tot_bytes_received: the total bytes received. - - DTPHandler implementation note: - - When a producer is consumed and close_when_done() has been called - previously, refill_buffer() erroneously calls close() instead of - handle_close() - (see: http://bugs.python.org/issue1740572) - - To avoid this problem DTPHandler is implemented as a subclass of - asyncore.dispatcher instead of asynchat.async_chat. - This implementation follows the same approach that asynchat module - should use in Python 2.6. - - The most important change in the implementation is related to - producer_fifo, which is a pure deque object instead of a - producer_fifo instance. - - Since we don't want to break backward compatibily with older python - versions (deque has been introduced in Python 2.4), if deque is not - available we use a list instead. - """ - - ac_in_buffer_size = 8192 - ac_out_buffer_size = 8192 - - def __init__(self, sock_obj, cmd_channel): - """Initialize the command channel. - - - (instance) sock_obj: the socket object instance of the newly - established connection. - - (instance) cmd_channel: the command channel class instance. - """ - asyncore.dispatcher.__init__(self, sock_obj) - # we toss the use of the asynchat's "simple producer" and - # replace it with a pure deque, which the original fifo - # was a wrapping of - self.producer_fifo = deque() - - self.cmd_channel = cmd_channel - self.file_obj = None - self.receive = False - self.transfer_finished = False - self.tot_bytes_sent = 0 - self.tot_bytes_received = 0 - self.data_wrapper = lambda x: x - - # --- utility methods - - def enable_receiving(self, type): - """Enable receiving of data over the channel. Depending on the - TYPE currently in use it creates an appropriate wrapper for the - incoming data. - - - (str) type: current transfer type, 'a' (ASCII) or 'i' (binary). - """ - if type == 'a': - self.data_wrapper = lambda x: x.replace('\r\n', os.linesep) - elif type == 'i': - self.data_wrapper = lambda x: x - else: - raise TypeError, "Unsupported type." - self.receive = True - - def get_transmitted_bytes(self): - "Return the number of transmitted bytes." - return self.tot_bytes_sent + self.tot_bytes_received - - def transfer_in_progress(self): - "Return True if a transfer is in progress, else False." - return self.get_transmitted_bytes() != 0 - - # --- connection - - def handle_read(self): - """Called when there is data waiting to be read.""" - try: - chunk = self.recv(self.ac_in_buffer_size) - except socket.error: - self.handle_error() - else: - self.tot_bytes_received += len(chunk) - if not chunk: - self.transfer_finished = True - #self.close() # <-- asyncore.recv() already do that... - return - # while we're writing on the file an exception could occur - # in case that filesystem gets full; if this happens we - # let handle_error() method handle this exception, providing - # a detailed error message. - self.file_obj.write(self.data_wrapper(chunk)) - - def handle_write(self): - """Called when data is ready to be written, initiates send.""" - self.initiate_send() - - def push(self, data): - """Push data onto the deque and initiate send.""" - sabs = self.ac_out_buffer_size - if len(data) > sabs: - for i in xrange(0, len(data), sabs): - self.producer_fifo.append(data[i:i+sabs]) - else: - self.producer_fifo.append(data) - self.initiate_send() - - def push_with_producer(self, producer): - """Push data using a producer and initiate send.""" - self.producer_fifo.append(producer) - self.initiate_send() - - def readable(self): - """Predicate for inclusion in the readable for select().""" - return self.receive - - def writable(self): - """Predicate for inclusion in the writable for select().""" - return self.producer_fifo or (not self.connected) - - def close_when_done(self): - """Automatically close this channel once the outgoing queue is empty.""" - self.producer_fifo.append(None) - - def initiate_send(self): - """Attempt to send data in fifo order.""" - while self.producer_fifo and self.connected: - first = self.producer_fifo[0] - # handle empty string/buffer or None entry - if not first: - del self.producer_fifo[0] - if first is None: - self.transfer_finished = True - self.handle_close() - return - - # handle classic producer behavior - obs = self.ac_out_buffer_size - try: - data = buffer(first, 0, obs) - except TypeError: - data = first.more() - if data: - self.producer_fifo.appendleft(data) - else: - del self.producer_fifo[0] - continue - - # send the data - try: - num_sent = self.send(data) - except socket.error: - self.handle_error() - return - - if num_sent: - self.tot_bytes_sent += num_sent - if num_sent < len(data) or obs < len(first): - self.producer_fifo[0] = first[num_sent:] - else: - del self.producer_fifo[0] - # we tried to send some actual data - return - - def handle_expt(self): - """Called on "exceptional" data events.""" - self.cmd_channel.respond("426 Connection error; transfer aborted.") - self.close() - - def handle_error(self): - """Called when an exception is raised and not otherwise handled.""" - try: - raise - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - raise - except socket.error, err: - # fix around asyncore bug (http://bugs.python.org/issue1736101) - if err[0] in (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN, \ - errno.ECONNABORTED): - self.handle_close() - return - else: - error = str(err[1]) - # an error could occur in case we fail reading / writing - # from / to file (e.g. file system gets full) - except EnvironmentError, err: - error = _strerror(err) - except: - # some other exception occurred; we don't want to provide - # confidential error messages - logerror(traceback.format_exc()) - error = "Internal error." - self.cmd_channel.respond("426 %s; transfer aborted." %error) - self.close() - - def handle_close(self): - """Called when the socket is closed.""" - # If we used channel for receiving we assume that transfer is - # finished when client close connection , if we used channel - # for sending we have to check that all data has been sent - # (responding with 226) or not (responding with 426). - if self.receive: - self.transfer_finished = True - action = 'received' - else: - action = 'sent' - if self.transfer_finished: - self.cmd_channel.respond("226 Transfer complete.") - if self.file_obj: - fname = self.file_obj.name - self.cmd_channel.log('"%s" %s.' %(fname, action)) - else: - tot_bytes = self.get_transmitted_bytes() - msg = "Transfer aborted; %d bytes transmitted." %tot_bytes - self.cmd_channel.respond("426 " + msg) - self.cmd_channel.log(msg) - self.close() - - def close(self): - """Close the data channel, first attempting to close any remaining - file handles.""" - if self.file_obj and not self.file_obj.closed: - self.file_obj.close() - asyncore.dispatcher.close(self) - self.cmd_channel.on_dtp_close() - - -# --- producers - -class FileProducer: - """Producer wrapper for file[-like] objects.""" - - buffer_size = 65536 - - def __init__(self, file, type): - """Initialize the producer with a data_wrapper appropriate to TYPE. - - - (file) file: the file[-like] object. - - (str) type: the current TYPE, 'a' (ASCII) or 'i' (binary). - """ - self.done = False - self.file = file - if type == 'a': - self.data_wrapper = lambda x: x.replace(os.linesep, '\r\n') - elif type == 'i': - self.data_wrapper = lambda x: x - else: - raise TypeError, "Unsupported type." - - def more(self): - """Attempt a chunk of data of size self.buffer_size.""" - if self.done: - return '' - data = self.data_wrapper(self.file.read(self.buffer_size)) - if not data: - self.done = True - if not self.file.closed: - self.file.close() - return data - - -class IteratorProducer: - """Producer for iterator objects.""" - - def __init__(self, iterator): - self.iterator = iterator - - def more(self): - """Attempt a chunk of data from iterator by calling its next() - method. - """ - try: - return self.iterator.next() - except StopIteration: - return '' - - -class BufferedIteratorProducer: - """Producer for iterator objects with buffer capabilities.""" - # how many times iterator.next() will be called before - # returning some data - loops = 20 - - def __init__(self, iterator): - self.iterator = iterator - - def more(self): - """Attempt a chunk of data from iterator by calling - its next() method different times. - """ - buffer = [] - for x in xrange(self.loops): - try: - buffer.append(self.iterator.next()) - except StopIteration: - break - return ''.join(buffer) - - -# --- filesystem - -class AbstractedFS: - """A class used to interact with the file system, providing a high - level, cross-platform interface compatible with both Windows and - UNIX style filesystems. - - It provides some utility methods and some wraps around operations - involved in file creation and file system operations like moving - files or removing directories. - - Instance attributes: - - (str) root: the user home directory. - - (str) cwd: the current working directory. - - (str) rnfr: source file to be renamed. - """ - - def __init__(self): - self.root = None - self.cwd = '/' - self.rnfr = None - - # --- Pathname / conversion utilities - - def ftpnorm(self, ftppath): - """Normalize a "virtual" ftp pathname (tipically the raw string - coming from client) depending on the current working directory. - - Example (having "/foo" as current working directory): - 'x' -> '/foo/x' - - Note: directory separators are system independent ("/"). - Pathname returned is always absolutized. - """ - if os.path.isabs(ftppath): - p = os.path.normpath(ftppath) - else: - p = os.path.normpath(os.path.join(self.cwd, ftppath)) - # normalize string in a standard web-path notation having '/' - # as separator. - p = p.replace("\\", "/") - # os.path.normpath supports UNC paths (e.g. "//a/b/c") but we - # don't need them. In case we get an UNC path we collapse - # redundant separators appearing at the beginning of the string - while p[:2] == '//': - p = p[1:] - # Anti path traversal: don't trust user input, in the event - # that self.cwd is not absolute, return "/" as a safety measure. - # This is for extra protection, maybe not really necessary. - if not os.path.isabs(p): - p = "/" - return p - - def ftp2fs(self, ftppath): - """Translate a "virtual" ftp pathname (tipically the raw string - coming from client) into equivalent absolute "real" filesystem - pathname. - - Example (having "/home/user" as root directory): - 'x' -> '/home/user/x' - - Note: directory separators are system dependent. - """ - # as far as I know, it should always be path traversal safe... - if os.path.normpath(self.root) == os.sep: - return os.path.normpath(self.ftpnorm(ftppath)) - else: - p = self.ftpnorm(ftppath)[1:] - return os.path.normpath(os.path.join(self.root, p)) - - def fs2ftp(self, fspath): - """Translate a "real" filesystem pathname into equivalent - absolute "virtual" ftp pathname depending on the user's - root directory. - - Example (having "/home/user" as root directory): - '/home/user/x' -> '/x' - - As for ftpnorm, directory separators are system independent - ("/") and pathname returned is always absolutized. - - On invalid pathnames escaping from user's root directory - (e.g. "/home" when root is "/home/user") always return "/". - """ - if os.path.isabs(fspath): - p = os.path.normpath(fspath) - else: - p = os.path.normpath(os.path.join(self.root, fspath)) - if not self.validpath(p): - return '/' - p = p.replace(os.sep, "/") - p = p[len(self.root):] - if not p.startswith('/'): - p = '/' + p - return p - - # alias for backward compatibility with 0.2.0 - normalize = ftpnorm - translate = ftp2fs - - def validpath(self, path): - """Check whether the path belongs to user's home directory. - Expected argument is a "real" filesystem pathname. - - If path is a symbolic link it is resolved to check its real - destination. - - Pathnames escaping from user's root directory are considered - not valid. - """ - root = self.realpath(self.root) - path = self.realpath(path) - if not self.root.endswith(os.sep): - root = self.root + os.sep - if not path.endswith(os.sep): - path = path + os.sep - if path[0:len(root)] == root: - return True - return False - - # --- Wrapper methods around open() and tempfile.mkstemp - - def open(self, filename, mode): - """Open a file returning its handler.""" - return open(filename, mode) - - def mkstemp(self, suffix='', prefix='', dir=None, mode='wb'): - """A wrap around tempfile.mkstemp creating a file with a unique - name. Unlike mkstemp it returns an object with a file-like - interface. - """ - class FileWrapper: - def __init__(self, fd, name): - self.file = fd - self.name = name - def __getattr__(self, attr): - return getattr(self.file, attr) - - text = not 'b' in mode - # max number of tries to find out a unique file name - tempfile.TMP_MAX = 50 - fd, name = tempfile.mkstemp(suffix, prefix, dir, text=text) - file = os.fdopen(fd, mode) - return FileWrapper(file, name) - - # --- Wrapper methods around os.* - - def chdir(self, path): - """Change the current directory.""" - # temporarily join the specified directory to see if we have - # permissions to do so - basedir = os.getcwd() - try: - os.chdir(path) - except os.error: - raise - else: - os.chdir(basedir) - self.cwd = self.fs2ftp(path) - - def mkdir(self, path, basename): - """Create the specified directory.""" - os.mkdir(os.path.join(path, basename)) - - def listdir(self, path): - """List the content of a directory.""" - return os.listdir(path) - - def rmdir(self, path): - """Remove the specified directory.""" - os.rmdir(path) - - def remove(self, path): - """Remove the specified file.""" - os.remove(path) - - def rename(self, src, dst): - """Rename the specified src file to the dst filename.""" - os.rename(src, dst) - - def stat(self, path): - """Perform a stat() system call on the given path.""" - return os.stat(path) - - def lstat(self, path): - """Like stat but does not follow symbolic links.""" - return os.lstat(path) - - if not hasattr(os, 'lstat'): - lstat = stat - - # --- Wrapper methods around os.path.* - - def isfile(self, path): - """Return True if path is a file.""" - return os.path.isfile(path) - - def islink(self, path): - """Return True if path is a symbolic link.""" - return os.path.islink(path) - - def isdir(self, path): - """Return True if path is a directory.""" - return os.path.isdir(path) - - def getsize(self, path): - """Return the size of the specified file in bytes.""" - return os.path.getsize(path) - - def getmtime(self, path): - """Return the last modified time as a number of seconds since - the epoch.""" - return os.path.getmtime(path) - - def realpath(self, path): - """Return the canonical version of path eliminating any - symbolic links encountered in the path (if they are - supported by the operating system). - """ - return os.path.realpath(path) - - def lexists(self, path): - """Return True if path refers to an existing path, including - a broken or circular symbolic link. - """ - if hasattr(os.path, 'lexists'): - return os.path.lexists(path) - # grant backward compatibility with python 2.3 - elif hasattr(os, 'lstat'): - try: - os.lstat(path) - except os.error: - return False - return True - # fallback - else: - return os.path.exists(path) - - exists = lexists # alias for backward compatibility with 0.2.0 - - def glob1(self, dirname, pattern): - """Return a list of files matching a dirname pattern - non-recursively. - - Unlike glob.glob1 raises exception if os.listdir() fails. - """ - names = self.listdir(dirname) - if pattern[0] != '.': - names = filter(lambda x: x[0] != '.', names) - return fnmatch.filter(names, pattern) - - # --- Listing utilities - - # note: the following operations are no more blocking - - def get_list_dir(self, datacr): - """"Return an iterator object that yields a directory listing - in a form suitable for LIST command. - """ - raise DeprecationWarning() - - def get_stat_dir(self, rawline): - """Return an iterator object that yields a list of files - matching a dirname pattern non-recursively in a form - suitable for STAT command. - - - (str) rawline: the raw string passed by client as command - argument. - """ - ftppath = self.ftpnorm(rawline) - if not glob.has_magic(ftppath): - return self.get_list_dir(self.ftp2fs(rawline)) - else: - basedir, basename = os.path.split(ftppath) - if glob.has_magic(basedir): - return iter(['Directory recursion not supported.\r\n']) - else: - basedir = self.ftp2fs(basedir) - listing = self.glob1(basedir, basename) - if listing: - listing.sort() - return self.format_list(basedir, listing) - - def format_list(self, basedir, listing, ignore_err=True): - """Return an iterator object that yields the entries of given - directory emulating the "/bin/ls -lA" UNIX command output. - - - (str) basedir: the absolute dirname. - - (list) listing: the names of the entries in basedir - - (bool) ignore_err: when False raise exception if os.lstat() - call fails. - - On platforms which do not support the pwd and grp modules (such - as Windows), ownership is printed as "owner" and "group" as a - default, and number of hard links is always "1". On UNIX - systems, the actual owner, group, and number of links are - printed. - - This is how output appears to client: - - -rw-rw-rw- 1 owner group 7045120 Sep 02 3:47 music.mp3 - drwxrwxrwx 1 owner group 0 Aug 31 18:50 e-books - -rw-rw-rw- 1 owner group 380 Sep 02 3:40 module.py - """ - for basename in listing: - file = os.path.join(basedir, basename) - try: - st = self.lstat(file) - except os.error: - if ignore_err: - continue - raise - perms = filemode(st.st_mode) # permissions - nlinks = st.st_nlink # number of links to inode - if not nlinks: # non-posix system, let's use a bogus value - nlinks = 1 - size = st.st_size # file size - uname = st.st_uid or "owner" - gname = st.st_gid or "group" - - # stat.st_mtime could fail (-1) if last mtime is too old - # in which case we return the local time as last mtime - try: - mtime = time.strftime("%b %d %H:%M", time.localtime(st.st_mtime)) - except ValueError: - mtime = time.strftime("%b %d %H:%M") - # if the file is a symlink, resolve it, e.g. "symlink -> realfile" - if stat.S_ISLNK(st.st_mode): - basename = basename + " -> " + os.readlink(file) - - # formatting is matched with proftpd ls output - yield "%s %3s %-8s %-8s %8s %s %s\r\n" %(perms, nlinks, uname, gname, - size, mtime, basename) - - def format_mlsx(self, basedir, listing, perms, facts, ignore_err=True): - """Return an iterator object that yields the entries of a given - directory or of a single file in a form suitable with MLSD and - MLST commands. - - Every entry includes a list of "facts" referring the listed - element. See RFC-3659, chapter 7, to see what every single - fact stands for. - - - (str) basedir: the absolute dirname. - - (list) listing: the names of the entries in basedir - - (str) perms: the string referencing the user permissions. - - (str) facts: the list of "facts" to be returned. - - (bool) ignore_err: when False raise exception if os.stat() - call fails. - - Note that "facts" returned may change depending on the platform - and on what user specified by using the OPTS command. - - This is how output could appear to the client issuing - a MLSD request: - - type=file;size=156;perm=r;modify=20071029155301;unique=801cd2; music.mp3 - type=dir;size=0;perm=el;modify=20071127230206;unique=801e33; ebooks - type=file;size=211;perm=r;modify=20071103093626;unique=801e32; module.py - """ - permdir = ''.join([x for x in perms if x not in 'arw']) - permfile = ''.join([x for x in perms if x not in 'celmp']) - if ('w' in perms) or ('a' in perms) or ('f' in perms): - permdir += 'c' - if 'd' in perms: - permdir += 'p' - type = size = perm = modify = create = unique = mode = uid = gid = "" - for basename in listing: - file = os.path.join(basedir, basename) - try: - st = self.stat(file) - except OSError: - if ignore_err: - continue - raise - # type + perm - if stat.S_ISDIR(st.st_mode): - if 'type' in facts: - if basename == '.': - type = 'type=cdir;' - elif basename == '..': - type = 'type=pdir;' - else: - type = 'type=dir;' - if 'perm' in facts: - perm = 'perm=%s;' %permdir - else: - if 'type' in facts: - type = 'type=file;' - if 'perm' in facts: - perm = 'perm=%s;' %permfile - if 'size' in facts: - size = 'size=%s;' %st.st_size # file size - # last modification time - if 'modify' in facts: - try: - modify = 'modify=%s;' %time.strftime("%Y%m%d%H%M%S", - time.localtime(st.st_mtime)) - except ValueError: - # stat.st_mtime could fail (-1) if last mtime is too old - modify = "" - if 'create' in facts: - # on Windows we can provide also the creation time - try: - create = 'create=%s;' %time.strftime("%Y%m%d%H%M%S", - time.localtime(st.st_ctime)) - except ValueError: - create = "" - # UNIX only - if 'unix.mode' in facts: - mode = 'unix.mode=%s;' %oct(st.st_mode & 0777) - if 'unix.uid' in facts: - uid = 'unix.uid=%s;' %st.st_uid - if 'unix.gid' in facts: - gid = 'unix.gid=%s;' %st.st_gid - # We provide unique fact (see RFC-3659, chapter 7.5.2) on - # posix platforms only; we get it by mixing st_dev and - # st_ino values which should be enough for granting an - # uniqueness for the file listed. - # The same approach is used by pure-ftpd. - # Implementors who want to provide unique fact on other - # platforms should use some platform-specific method (e.g. - # on Windows NTFS filesystems MTF records could be used). - if 'unique' in facts: - unique = "unique=%x%x;" %(st.st_dev, st.st_ino) - - yield "%s%s%s%s%s%s%s%s%s %s\r\n" %(type, size, perm, modify, create, - mode, uid, gid, unique, basename) - - -# --- FTP - -class FTPExceptionSent(Exception): - """An FTP exception that FTPHandler has processed - """ - pass - -class FTPHandler(asynchat.async_chat): - """Implements the FTP server Protocol Interpreter (see RFC-959), - handling commands received from the client on the control channel. - - All relevant session information is stored in class attributes - reproduced below and can be modified before instantiating this - class. - - - (str) banner: the string sent when client connects. - - - (int) max_login_attempts: - the maximum number of wrong authentications before disconnecting - the client (default 3). - - - (bool)permit_foreign_addresses: - FTP site-to-site transfer feature: also referenced as "FXP" it - permits for transferring a file between two remote FTP servers - without the transfer going through the client's host (not - recommended for security reasons as described in RFC-2577). - Having this attribute set to False means that all data - connections from/to remote IP addresses which do not match the - client's IP address will be dropped (defualt False). - - - (bool) permit_privileged_ports: - set to True if you want to permit active data connections (PORT) - over privileged ports (not recommended, defaulting to False). - - - (str) masquerade_address: - the "masqueraded" IP address to provide along PASV reply when - pyftpdlib is running behind a NAT or other types of gateways. - When configured pyftpdlib will hide its local address and - instead use the public address of your NAT (default None). - - - (list) passive_ports: - what ports ftpd will use for its passive data transfers. - Value expected is a list of integers (e.g. range(60000, 65535)). - When configured pyftpdlib will no longer use kernel-assigned - random ports (default None). - - - All relevant instance attributes initialized when client connects - are reproduced below. You may be interested in them in case you - want to subclass the original FTPHandler. - - - (bool) authenticated: True if client authenticated himself. - - (str) username: the name of the connected user (if any). - - (int) attempted_logins: number of currently attempted logins. - - (str) current_type: the current transfer type (default "a") - - (int) af: the address family (IPv4/IPv6) - - (instance) server: the FTPServer class instance. - - (instance) data_server: the data server instance (if any). - - (instance) data_channel: the data channel instance (if any). - """ - # these are overridable defaults - - # default classes - authorizer = DummyAuthorizer() - active_dtp = ActiveDTP - passive_dtp = PassiveDTP - dtp_handler = DTPHandler - abstracted_fs = AbstractedFS - - # session attributes (explained in the docstring) - banner = "pyftpdlib %s ready." %__ver__ - max_login_attempts = 3 - permit_foreign_addresses = False - permit_privileged_ports = False - masquerade_address = None - passive_ports = None - - def __init__(self, conn, server): - """Initialize the command channel. - - - (instance) conn: the socket object instance of the newly - established connection. - - (instance) server: the ftp server class instance. - """ - try: - asynchat.async_chat.__init__(self, conn=conn) # python2.5 - except TypeError: - asynchat.async_chat.__init__(self, sock=conn) # python2.6 - self.server = server - self.remote_ip, self.remote_port = self.socket.getpeername()[:2] - self.in_buffer = [] - self.in_buffer_len = 0 - self.set_terminator("\r\n") - - # session attributes - self.fs = self.abstracted_fs() - self.authenticated = False - self.username = "" - self.password = "" - self.attempted_logins = 0 - self.current_type = 'a' - self.restart_position = 0 - self.quit_pending = False - self._epsvall = False - self.__in_dtp_queue = None - self.__out_dtp_queue = None - - self.__errno_responses = { - errno.EPERM: 553, - errno.EINVAL: 504, - errno.ENOENT: 550, - errno.EREMOTE: 450, - errno.EEXIST: 521, - } - - # mlsx facts attributes - self.current_facts = ['type', 'perm', 'size', 'modify'] - self.current_facts.append('unique') - self.available_facts = self.current_facts[:] - self.available_facts += ['unix.mode', 'unix.uid', 'unix.gid'] - self.available_facts.append('create') - - # dtp attributes - self.data_server = None - self.data_channel = None - - if hasattr(self.socket, 'family'): - self.af = self.socket.family - else: # python < 2.5 - ip, port = self.socket.getsockname()[:2] - self.af = socket.getaddrinfo(ip, port, socket.AF_UNSPEC, - socket.SOCK_STREAM)[0][0] - - def handle(self): - """Return a 220 'Ready' response to the client over the command - channel. - """ - if len(self.banner) <= 75: - self.respond("220 %s" %str(self.banner)) - else: - self.push('220-%s\r\n' %str(self.banner)) - self.respond('220 ') - - def handle_max_cons(self): - """Called when limit for maximum number of connections is reached.""" - msg = "Too many connections. Service temporary unavailable." - self.respond("421 %s" %msg) - self.log(msg) - # If self.push is used, data could not be sent immediately in - # which case a new "loop" will occur exposing us to the risk of - # accepting new connections. Since this could cause asyncore to - # run out of fds (...and exposes the server to DoS attacks), we - # immediately close the channel by using close() instead of - # close_when_done(). If data has not been sent yet client will - # be silently disconnected. - self.close() - - def handle_max_cons_per_ip(self): - """Called when too many clients are connected from the same IP.""" - msg = "Too many connections from the same IP address." - self.respond("421 %s" %msg) - self.log(msg) - self.close_when_done() - - # --- asyncore / asynchat overridden methods - - def readable(self): - # if there's a quit pending we stop reading data from socket - return not self.quit_pending - - def collect_incoming_data(self, data): - """Read incoming data and append to the input buffer.""" - self.in_buffer.append(data) - self.in_buffer_len += len(data) - # Flush buffer if it gets too long (possible DoS attacks). - # RFC-959 specifies that a 500 response could be given in - # such cases - buflimit = 2048 - if self.in_buffer_len > buflimit: - self.respond('500 Command too long.') - self.log('Command has been received exceeds buffer limit of %s.' %(buflimit)) - self.in_buffer = [] - self.in_buffer_len = 0 - - # commands accepted before authentication - unauth_cmds = ('FEAT','HELP','NOOP','PASS','QUIT','STAT','SYST','USER') - - # commands needing an argument - arg_cmds = ('ALLO','APPE','DELE','EPRT','MDTM','MODE','MKD','OPTS','PORT', - 'REST','RETR','RMD','RNFR','RNTO','SIZE', 'STOR','STRU', - 'TYPE','USER','XMKD','XRMD') - - # commands needing no argument - unarg_cmds = ('ABOR','CDUP','FEAT','NOOP','PASV','PWD','QUIT','REIN', - 'SYST','XCUP','XPWD') - - def found_terminator(self): - r"""Called when the incoming data stream matches the \r\n - terminator. - - Depending on the command received it calls the command's - corresponding method (e.g. for received command "MKD pathname", - ftp_MKD() method is called with "pathname" as the argument). - """ - line = ''.join(self.in_buffer) - self.in_buffer = [] - self.in_buffer_len = 0 - - cmd = line.split(' ')[0].upper() - space = line.find(' ') - if space != -1: - arg = line[space + 1:] - else: - arg = "" - - if cmd != 'PASS': - self.logline("<== %s" %line) - else: - self.logline("<== %s %s" %(line.split(' ')[0], '*' * 6)) - - # let's check if user provided an argument for those commands - # needing one - if not arg and cmd in self.arg_cmds: - self.respond("501 Syntax error! Command needs an argument.") - return - - # let's do the same for those commands requiring no argument. - elif arg and cmd in self.unarg_cmds: - self.respond("501 Syntax error! Command does not accept arguments.") - return - - # provide a limited set of commands if user isn't - # authenticated yet - if (not self.authenticated): - if cmd in self.unauth_cmds: - # we permit STAT during this phase but we don't want - # STAT to return a directory LISTing if the user is - # not authenticated yet (this could happen if STAT - # is used with an argument) - if (cmd == 'STAT') and arg: - self.respond("530 Log in with USER and PASS first.") - else: - method = getattr(self, 'ftp_' + cmd) - method(arg) # call the proper ftp_* method - elif cmd in proto_cmds: - self.respond("530 Log in with USER and PASS first.") - else: - self.respond('500 Command "%s" not understood.' %line) - - # provide full command set - elif (self.authenticated) and (cmd in proto_cmds): - if not (self.__check_path(arg, arg)): # and self.__check_perm(cmd, arg)): - return - method = getattr(self, 'ftp_' + cmd) - method(arg) # call the proper ftp_* method - - else: - # recognize those commands having "special semantics" - if 'ABOR' in cmd: - self.ftp_ABOR("") - elif 'STAT' in cmd: - self.ftp_STAT("") - # unknown command - else: - self.respond('500 Command "%s" not understood.' %line) - - def __check_path(self, cmd, line): - """Check whether a path is valid.""" - - # Always true, we will only check later, once we have a cursor - return True - - def __check_perm(self, cmd, line, datacr): - """Check permissions depending on issued command.""" - map = {'CWD':'e', 'XCWD':'e', 'CDUP':'e', 'XCUP':'e', - 'LIST':'l', 'NLST':'l', 'MLSD':'l', 'STAT':'l', - 'RETR':'r', - 'APPE':'a', - 'DELE':'d', 'RMD':'d', 'XRMD':'d', - 'RNFR':'f', - 'MKD':'m', 'XMKD':'m', - 'STOR':'w'} - raise NotImplementedError - if cmd in map: - if cmd == 'STAT' and not line: - return True - perm = map[cmd] - if not line and (cmd in ('LIST','NLST','MLSD')): - path = self.fs.ftp2fs(self.fs.cwd, datacr) - else: - path = self.fs.ftp2fs(line, datacr) - if not self.authorizer.has_perm(self.username, perm, path): - self.log('FAIL %s "%s". Not enough privileges.' \ - %(cmd, self.fs.ftpnorm(line))) - self.respond("550 Can't %s. Not enough privileges." %cmd) - return False - return True - - def handle_expt(self): - """Called when there is out of band (OOB) data for the socket - connection. This could happen in case of such commands needing - "special action" (typically STAT and ABOR) in which case we - append OOB data to incoming buffer. - """ - if hasattr(socket, 'MSG_OOB'): - try: - data = self.socket.recv(1024, socket.MSG_OOB) - except socket.error: - pass - else: - self.in_buffer.append(data) - return - self.log("Cannot handle OOB data.") - self.close() - - def handle_error(self): - try: - raise - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - raise - except socket.error, err: - # fix around asyncore bug (http://bugs.python.org/issue1736101) - if err[0] in (errno.ECONNRESET, errno.ENOTCONN, errno.ESHUTDOWN, \ - errno.ECONNABORTED): - self.handle_close() - return - else: - logerror(traceback.format_exc()) - except: - logerror(traceback.format_exc()) - self.close() - - def handle_close(self): - self.close() - - _closed = False - def close(self): - """Close the current channel disconnecting the client.""" - if not self._closed: - self._closed = True - if self.data_server: - self.data_server.close() - del self.data_server - - if self.data_channel: - self.data_channel.close() - del self.data_channel - - del self.__out_dtp_queue - del self.__in_dtp_queue - - # remove client IP address from ip map - self.server.ip_map.remove(self.remote_ip) - asynchat.async_chat.close(self) - self.log("Disconnected.") - - # --- callbacks - - def on_dtp_connection(self): - """Called every time data channel connects (either active or - passive). - - Incoming and outgoing queues are checked for pending data. - If outbound data is pending, it is pushed into the data channel. - If awaiting inbound data, the data channel is enabled for - receiving. - """ - if self.data_server: - self.data_server.close() - self.data_server = None - - # check for data to send - if self.__out_dtp_queue: - data, isproducer, file = self.__out_dtp_queue - if file: - self.data_channel.file_obj = file - if not isproducer: - self.data_channel.push(data) - else: - self.data_channel.push_with_producer(data) - if self.data_channel: - self.data_channel.close_when_done() - self.__out_dtp_queue = None - - # check for data to receive - elif self.__in_dtp_queue: - self.data_channel.file_obj = self.__in_dtp_queue - self.data_channel.enable_receiving(self.current_type) - self.__in_dtp_queue = None - - def on_dtp_close(self): - """Called every time the data channel is closed.""" - self.data_channel = None - if self.quit_pending: - self.close_when_done() - - # --- utility - - def respond(self, resp): - """Send a response to the client using the command channel.""" - self.push(resp + '\r\n') - self.logline('==> %s' % resp) - - def push_dtp_data(self, data, isproducer=False, file=None): - """Pushes data into the data channel. - - It is usually called for those commands requiring some data to - be sent over the data channel (e.g. RETR). - If data channel does not exist yet, it queues the data to send - later; data will then be pushed into data channel when - on_dtp_connection() will be called. - - - (str/classobj) data: the data to send which may be a string - or a producer object). - - (bool) isproducer: whether treat data as a producer. - - (file) file: the file[-like] object to send (if any). - """ - if self.data_channel: - self.respond("125 Data connection already open. Transfer starting.") - if file: - self.data_channel.file_obj = file - if not isproducer: - self.data_channel.push(data) - else: - self.data_channel.push_with_producer(data) - if self.data_channel: - self.data_channel.close_when_done() - else: - self.respond("150 File status okay. About to open data connection.") - self.__out_dtp_queue = (data, isproducer, file) - - def log(self, msg): - """Log a message, including additional identifying session data.""" - log("[%s]@%s:%s %s" %(self.username, self.remote_ip, - self.remote_port, msg)) - - def logline(self, msg): - """Log a line including additional indentifying session data.""" - logline("%s:%s %s" %(self.remote_ip, self.remote_port, msg)) - - def flush_account(self): - """Flush account information by clearing attributes that need - to be reset on a REIN or new USER command. - """ - if self.data_channel: - if not self.data_channel.transfer_in_progress(): - self.data_channel.close() - self.data_channel = None - if self.data_server: - self.data_server.close() - self.data_server = None - - self.fs.rnfr = None - self.authenticated = False - self.username = "" - self.password = "" - self.attempted_logins = 0 - self.current_type = 'a' - self.restart_position = 0 - self.quit_pending = False - self.__in_dtp_queue = None - self.__out_dtp_queue = None - - def run_as_current_user(self, function, *args, **kwargs): - """Execute a function impersonating the current logged-in user.""" - self.authorizer.impersonate_user(self.username, self.password) - try: - return function(*args, **kwargs) - finally: - self.authorizer.terminate_impersonation() - - # --- connection - - def try_as_current_user(self, function, args=None, kwargs=None, line=None, errno_resp=None): - """run function as current user, auto-respond in exceptions - @param args,kwargs the arguments, in list and dict respectively - @param errno_resp a dictionary of responses to IOError, OSError - """ - if errno_resp: - eresp = self.__errno_responses.copy() - eresp.update(errno_resp) - else: - eresp = self.__errno_responses - - uline = '' - if line: - uline = ' "%s"' % _to_unicode(line) - try: - if args is None: - args = () - if kwargs is None: - kwargs = {} - return self.run_as_current_user(function, *args, **kwargs) - except NotImplementedError, err: - cmdname = function.__name__ - why = err.args[0] or 'Not implemented' - self.log('FAIL %s() is not implemented: %s.' %(cmdname, why)) - self.respond('502 %s.' %why) - raise FTPExceptionSent(why) - except EnvironmentError, err: - cmdname = function.__name__ - try: - logline(traceback.format_exc()) - except Exception: - pass - ret_code = eresp.get(err.errno, '451') - why = (err.strerror) or 'Error in command.' - self.log('FAIL %s() %s errno=%s: %s.' %(cmdname, uline, err.errno, why)) - self.respond('%s %s.' % (str(ret_code), why)) - - raise FTPExceptionSent(why) - except Exception, err: - cmdname = function.__name__ - try: - logerror(traceback.format_exc()) - except Exception: - pass - why = (err.args and err.args[0]) or 'Exception' - self.log('FAIL %s() %s Exception: %s.' %(cmdname, uline, why)) - self.respond('451 %s.' % why) - raise FTPExceptionSent(why) - - def get_crdata2(self, *args, **kwargs): - return self.try_as_current_user(self.fs.get_crdata, args, kwargs, line=args[0]) - - def _make_eport(self, ip, port): - """Establish an active data channel with remote client which - issued a PORT or EPRT command. - """ - # FTP bounce attacks protection: according to RFC-2577 it's - # recommended to reject PORT if IP address specified in it - # does not match client IP address. - if not self.permit_foreign_addresses: - if ip != self.remote_ip: - self.log("Rejected data connection to foreign address %s:%s." - %(ip, port)) - self.respond("501 Cannot connect to a foreign address.") - return - - # ...another RFC-2577 recommendation is rejecting connections - # to privileged ports (< 1024) for security reasons. - if not self.permit_privileged_ports: - if port < 1024: - self.log('PORT against the privileged port "%s" has been refused.' %port) - self.respond("501 Cannot connect over a privileged port.") - return - - # close existent DTP-server instance, if any. - if self.data_server: - self.data_server.close() - self.data_server = None - if self.data_channel: - self.data_channel.close() - self.data_channel = None - - # make sure we are not hitting the max connections limit - if self.server.max_cons: - if len(self._map) >= self.server.max_cons: - msg = "Too many connections. Can't open data channel." - self.respond("425 %s" %msg) - self.log(msg) - return - - # open data channel - self.active_dtp(ip, port, self) - - def _make_epasv(self, extmode=False): - """Initialize a passive data channel with remote client which - issued a PASV or EPSV command. - If extmode argument is False we assume that client issued EPSV in - which case extended passive mode will be used (see RFC-2428). - """ - # close existing DTP-server instance, if any - if self.data_server: - self.data_server.close() - self.data_server = None - - if self.data_channel: - self.data_channel.close() - self.data_channel = None - - # make sure we are not hitting the max connections limit - if self.server.max_cons: - if len(self._map) >= self.server.max_cons: - msg = "Too many connections. Cannot open data channel." - self.respond("425 %s" %msg) - self.log(msg) - return - - # open data channel - self.data_server = self.passive_dtp(self, extmode) - - def ftp_PORT(self, line): - """Start an active data channel by using IPv4.""" - if self._epsvall: - self.respond("501 PORT not allowed after EPSV ALL.") - return - if self.af != socket.AF_INET: - self.respond("425 You cannot use PORT on IPv6 connections. " - "Use EPRT instead.") - return - # Parse PORT request for getting IP and PORT. - # Request comes in as: - # > h1,h2,h3,h4,p1,p2 - # ...where the client's IP address is h1.h2.h3.h4 and the TCP - # port number is (p1 * 256) + p2. - try: - addr = map(int, line.split(',')) - assert len(addr) == 6 - for x in addr[:4]: - assert 0 <= x <= 255 - ip = '%d.%d.%d.%d' %tuple(addr[:4]) - port = (addr[4] * 256) + addr[5] - assert 0 <= port <= 65535 - except (AssertionError, ValueError, OverflowError): - self.respond("501 Invalid PORT format.") - return - self._make_eport(ip, port) - - def ftp_EPRT(self, line): - """Start an active data channel by choosing the network protocol - to use (IPv4/IPv6) as defined in RFC-2428. - """ - if self._epsvall: - self.respond("501 EPRT not allowed after EPSV ALL.") - return - # Parse EPRT request for getting protocol, IP and PORT. - # Request comes in as: - # # protoipport - # ...where is an arbitrary delimiter character (usually "|") and - # is the network protocol to use (1 for IPv4, 2 for IPv6). - try: - af, ip, port = line.split(line[0])[1:-1] - port = int(port) - assert 0 <= port <= 65535 - except (AssertionError, ValueError, IndexError, OverflowError): - self.respond("501 Invalid EPRT format.") - return - - if af == "1": - if self.af != socket.AF_INET: - self.respond('522 Network protocol not supported (use 2).') - else: - try: - octs = map(int, ip.split('.')) - assert len(octs) == 4 - for x in octs: - assert 0 <= x <= 255 - except (AssertionError, ValueError, OverflowError): - self.respond("501 Invalid EPRT format.") - else: - self._make_eport(ip, port) - elif af == "2": - if self.af == socket.AF_INET: - self.respond('522 Network protocol not supported (use 1).') - else: - self._make_eport(ip, port) - else: - if self.af == socket.AF_INET: - self.respond('501 Unknown network protocol (use 1).') - else: - self.respond('501 Unknown network protocol (use 2).') - - def ftp_PASV(self, line): - """Start a passive data channel by using IPv4.""" - if self._epsvall: - self.respond("501 PASV not allowed after EPSV ALL.") - return - if self.af != socket.AF_INET: - self.respond("425 You cannot use PASV on IPv6 connections. " - "Use EPSV instead.") - else: - self._make_epasv(extmode=False) - - def ftp_EPSV(self, line): - """Start a passive data channel by using IPv4 or IPv6 as defined - in RFC-2428. - """ - # RFC-2428 specifies that if an optional parameter is given, - # we have to determine the address family from that otherwise - # use the same address family used on the control connection. - # In such a scenario a client may use IPv4 on the control channel - # and choose to use IPv6 for the data channel. - # But how could we use IPv6 on the data channel without knowing - # which IPv6 address to use for binding the socket? - # Unfortunately RFC-2428 does not provide satisfing information - # on how to do that. The assumption is that we don't have any way - # to know which address to use, hence we just use the same address - # family used on the control connection. - if not line: - self._make_epasv(extmode=True) - elif line == "1": - if self.af != socket.AF_INET: - self.respond('522 Network protocol not supported (use 2).') - else: - self._make_epasv(extmode=True) - elif line == "2": - if self.af == socket.AF_INET: - self.respond('522 Network protocol not supported (use 1).') - else: - self._make_epasv(extmode=True) - elif line.lower() == 'all': - self._epsvall = True - self.respond('220 Other commands other than EPSV are now disabled.') - else: - if self.af == socket.AF_INET: - self.respond('501 Unknown network protocol (use 1).') - else: - self.respond('501 Unknown network protocol (use 2).') - - def ftp_QUIT(self, line): - """Quit the current session.""" - # From RFC-959: - # This command terminates a USER and if file transfer is not - # in progress, the server closes the control connection. - # If file transfer is in progress, the connection will remain - # open for result response and the server will then close it. - if self.authenticated: - msg_quit = self.authorizer.get_msg_quit(self.username) - else: - msg_quit = "Goodbye." - if len(msg_quit) <= 75: - self.respond("221 %s" %msg_quit) - else: - self.push("221-%s\r\n" %msg_quit) - self.respond("221 ") - - if not self.data_channel: - self.close_when_done() - else: - # tell the cmd channel to stop responding to commands. - self.quit_pending = True - - - # --- data transferring - - def ftp_LIST(self, line): - """Return a list of files in the specified directory to the - client. - """ - # - If no argument, fall back on cwd as default. - # - Some older FTP clients erroneously issue /bin/ls-like LIST - # formats in which case we fall back on cwd as default. - if not line or line.lower() in ('-a', '-l', '-al', '-la'): - line = '' - datacr = None - try: - datacr = self.get_crdata2(line, mode='list') - iterator = self.try_as_current_user(self.fs.get_list_dir, (datacr,)) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - - try: - self.log('OK LIST "%s". Transfer starting.' % line) - producer = BufferedIteratorProducer(iterator) - self.push_dtp_data(producer, isproducer=True) - finally: - self.fs.close_cr(datacr) - - - def ftp_NLST(self, line): - """Return a list of files in the specified directory in a - compact form to the client. - """ - if not line: - line = '' - - datacr = None - try: - datacr = self.get_crdata2(line, mode='list') - if not datacr: - datacr = ( None, None, None ) - if self.fs.isdir(datacr[1]): - nodelist = self.try_as_current_user(self.fs.listdir, (datacr,)) - else: - # if path is a file we just list its name - nodelist = [datacr[1],] - - listing = [] - for nl in nodelist: - if isinstance(nl.path, (list, tuple)): - listing.append(nl.path[-1]) - else: - listing.append(nl.path) # assume string - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - - self.fs.close_cr(datacr) - data = '' - if listing: - listing.sort() - data = ''.join([ _to_decode(x) + '\r\n' for x in listing ]) - self.log('OK NLST "%s". Transfer starting.' %line) - self.push_dtp_data(data) - - # --- MLST and MLSD commands - - # The MLST and MLSD commands are intended to standardize the file and - # directory information returned by the server-FTP process. These - # commands differ from the LIST command in that the format of the - # replies is strictly defined although extensible. - - def ftp_MLST(self, line): - """Return information about a pathname in a machine-processable - form as defined in RFC-3659. - """ - # if no argument, fall back on cwd as default - if not line: - line = '' - datacr = None - try: - datacr = self.get_crdata2(line, mode='list') - perms = self.authorizer.get_perms(self.username) - iterator = self.try_as_current_user(self.fs.format_mlsx, (datacr[0], datacr[1].parent, - [datacr[1],], perms, self.current_facts), {'ignore_err':False}) - data = ''.join(iterator) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - else: - self.fs.close_cr(datacr) - # since TVFS is supported (see RFC-3659 chapter 6), a fully - # qualified pathname should be returned - data = data.split(' ')[0] + ' %s\r\n' %line - # response is expected on the command channel - self.push('250-Listing "%s":\r\n' %line) - # the fact set must be preceded by a space - self.push(' ' + data) - self.respond('250 End MLST.') - - def ftp_MLSD(self, line): - """Return contents of a directory in a machine-processable form - as defined in RFC-3659. - """ - # if no argument, fall back on cwd as default - if not line: - line = '' - - datacr = None - try: - datacr = self.get_crdata2(line, mode='list') - # RFC-3659 requires 501 response code if path is not a directory - if not self.fs.isdir(datacr[1]): - err = 'No such directory.' - self.log('FAIL MLSD "%s". %s.' %(line, err)) - self.respond("501 %s." %err) - return - listing = self.try_as_current_user(self.fs.listdir, (datacr,)) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - else: - self.fs.close_cr(datacr) - perms = self.authorizer.get_perms(self.username) - iterator = self.fs.format_mlsx(datacr[0], datacr[1], listing, perms, - self.current_facts) - producer = BufferedIteratorProducer(iterator) - self.log('OK MLSD "%s". Transfer starting.' %line) - self.push_dtp_data(producer, isproducer=True) - - def ftp_RETR(self, line): - """Retrieve the specified file (transfer from the server to the - client) - """ - datacr = None - try: - datacr = self.get_crdata2(line, mode='file') - fd = self.try_as_current_user(self.fs.open, (datacr, 'rb')) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - - if self.restart_position: - # Make sure that the requested offset is valid (within the - # size of the file being resumed). - # According to RFC-1123 a 554 reply may result in case that - # the existing file cannot be repositioned as specified in - # the REST. - ok = 0 - try: - assert not self.restart_position > self.fs.getsize(datacr) - fd.seek(self.restart_position) - ok = 1 - except AssertionError: - why = "Invalid REST parameter." - except IOError, err: - why = _strerror(err) - self.restart_position = 0 - if not ok: - self.respond('554 %s' %why) - self.log('FAIL RETR "%s". %s.' %(line, why)) - self.fs.close_cr(datacr) - return - self.log('OK RETR "%s". Download starting.' %line) - producer = FileProducer(fd, self.current_type) - self.push_dtp_data(producer, isproducer=True, file=fd) - self.fs.close_cr(datacr) - - def ftp_STOR(self, line, mode='w'): - """Store a file (transfer from the client to the server).""" - # A resume could occur in case of APPE or REST commands. - # In that case we have to open file object in different ways: - # STOR: mode = 'w' - # APPE: mode = 'a' - # REST: mode = 'r+' (to permit seeking on file object) - if 'a' in mode: - cmd = 'APPE' - else: - cmd = 'STOR' - - datacr = None - try: - datacr = self.get_crdata2(line,mode='create') - if self.restart_position: - mode = 'r+' - fd = self.try_as_current_user(self.fs.create, (datacr, datacr[2], mode + 'b')) - assert fd - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - - if self.restart_position: - # Make sure that the requested offset is valid (within the - # size of the file being resumed). - # According to RFC-1123 a 554 reply may result in case - # that the existing file cannot be repositioned as - # specified in the REST. - ok = 0 - try: - assert not self.restart_position > self.fs.getsize(datacr) - fd.seek(self.restart_position) - ok = 1 - except AssertionError: - why = "Invalid REST parameter." - except IOError, err: - why = _strerror(err) - self.restart_position = 0 - if not ok: - self.fs.close_cr(datacr) - self.respond('554 %s' %why) - self.log('FAIL %s "%s". %s.' %(cmd, line, why)) - return - - self.log('OK %s "%s". Upload starting.' %(cmd, line)) - if self.data_channel: - self.respond("125 Data connection already open. Transfer starting.") - self.data_channel.file_obj = fd - self.data_channel.enable_receiving(self.current_type) - else: - self.respond("150 File status okay. About to open data connection.") - self.__in_dtp_queue = fd - self.fs.close_cr(datacr) - - - def ftp_STOU(self, line): - """Store a file on the server with a unique name.""" - # Note 1: RFC-959 prohibited STOU parameters, but this - # prohibition is obsolete. - # Note 2: 250 response wanted by RFC-959 has been declared - # incorrect in RFC-1123 that wants 125/150 instead. - # Note 3: RFC-1123 also provided an exact output format - # defined to be as follow: - # > 125 FILE: pppp - # ...where pppp represents the unique path name of the - # file that will be written. - - # watch for STOU preceded by REST, which makes no sense. - if self.restart_position: - self.respond("450 Cannot STOU while REST request is pending.") - return - - - if line: - datacr = self.get_crdata2(line, mode='create') - # TODO - else: - # TODO - basedir = self.fs.ftp2fs(self.fs.cwd, datacr) - prefix = 'ftpd.' - try: - fd = self.try_as_current_user(self.fs.mkstemp, kwargs={'prefix':prefix, - 'dir': basedir}, line=line ) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - except IOError, err: # TODO - # hitted the max number of tries to find out file with - # unique name - if err.errno == errno.EEXIST: - why = 'No usable unique file name found.' - # something else happened - else: - why = _strerror(err) - self.respond("450 %s." %why) - self.log('FAIL STOU "%s". %s.' %(self.fs.ftpnorm(line), why)) - self.fs.close_cr(datacr) - return - - filename = line - if not self.authorizer.has_perm(self.username, 'w', filename): - self.log('FAIL STOU "%s". Not enough privileges.' - %self.fs.ftpnorm(line)) - self.respond("550 Cannot STOU: not enough privileges.") - self.fs.close_cr(datacr) - return - - # now just acts like STOR except that restarting isn't allowed - self.log('OK STOU "%s". Upload starting.' %filename) - if self.data_channel: - self.respond("125 FILE: %s" %filename) - self.data_channel.file_obj = fd - self.data_channel.enable_receiving(self.current_type) - else: - self.respond("150 FILE: %s" %filename) - self.__in_dtp_queue = fd - self.fs.close_cr(datacr) - - - def ftp_APPE(self, line): - """Append data to an existing file on the server.""" - # watch for APPE preceded by REST, which makes no sense. - if self.restart_position: - self.respond("550 Cannot APPE while REST request is pending.") - else: - self.ftp_STOR(line, mode='a') - - def ftp_REST(self, line): - """Restart a file transfer from a previous mark.""" - try: - marker = int(line) - if marker < 0: - raise ValueError - except (ValueError, OverflowError): - self.respond("501 Invalid parameter.") - else: - self.respond("350 Restarting at position %s. " \ - "Now use RETR/STOR for resuming." %marker) - self.log("OK REST %s." %marker) - self.restart_position = marker - - def ftp_ABOR(self, line): - """Abort the current data transfer.""" - - # ABOR received while no data channel exists - if (self.data_server is None) and (self.data_channel is None): - resp = "225 No transfer to abort." - else: - # a PASV was received but connection wasn't made yet - if self.data_server: - self.data_server.close() - self.data_server = None - resp = "225 ABOR command successful; data channel closed." - - # If a data transfer is in progress the server must first - # close the data connection, returning a 426 reply to - # indicate that the transfer terminated abnormally, then it - # must send a 226 reply, indicating that the abort command - # was successfully processed. - # If no data has been transmitted we just respond with 225 - # indicating that no transfer was in progress. - if self.data_channel: - if self.data_channel.transfer_in_progress(): - self.data_channel.close() - self.data_channel = None - self.respond("426 Connection closed; transfer aborted.") - self.log("OK ABOR. Transfer aborted, data channel closed.") - resp = "226 ABOR command successful." - else: - self.data_channel.close() - self.data_channel = None - self.log("OK ABOR. Data channel closed.") - resp = "225 ABOR command successful; data channel closed." - self.respond(resp) - - - # --- authentication - - def ftp_USER(self, line): - """Set the username for the current session.""" - # we always treat anonymous user as lower-case string. - if line.lower() == "anonymous": - line = "anonymous" - - # RFC-959 specifies a 530 response to the USER command if the - # username is not valid. If the username is valid is required - # ftpd returns a 331 response instead. In order to prevent a - # malicious client from determining valid usernames on a server, - # it is suggested by RFC-2577 that a server always return 331 to - # the USER command and then reject the combination of username - # and password for an invalid username when PASS is provided later. - if not self.authenticated: - self.respond('331 Username ok, send password.') - else: - # a new USER command could be entered at any point in order - # to change the access control flushing any user, password, - # and account information already supplied and beginning the - # login sequence again. - self.flush_account() - msg = 'Previous account information is flushed.' - self.log('OK USER "%s". %s.' %(line, msg)) - self.respond('331 %s, send password.' %msg) - self.username = line - - def ftp_PASS(self, line): - """Check username's password against the authorizer.""" - - if self.authenticated: - self.respond("503 User already authenticated.") - return - if not self.username: - self.respond("503 Login with USER first.") - return - - # username ok - if self.authorizer.has_user(self.username): - if self.username == 'anonymous' \ - or self.authorizer.validate_authentication(self.username, line): - msg_login = self.authorizer.get_msg_login(self.username) - if len(msg_login) <= 75: - self.respond('230 %s' %msg_login) - else: - self.push("230-%s\r\n" %msg_login) - self.respond("230 ") - - self.authenticated = True - self.password = line - self.attempted_logins = 0 - self.fs.root = self.authorizer.get_home_dir(self.username) - self.fs.username=self.username - self.fs.password=line - self.log("User %s logged in." %self.username) - else: - self.attempted_logins += 1 - if self.attempted_logins >= self.max_login_attempts: - self.respond("530 Maximum login attempts. Disconnecting.") - self.close() - else: - self.respond("530 Authentication failed.") - self.log('Authentication failed (user: "%s").' %self.username) - self.username = "" - - # wrong username - else: - self.attempted_logins += 1 - if self.attempted_logins >= self.max_login_attempts: - self.log('Authentication failed: unknown username "%s".' - %self.username) - self.respond("530 Maximum login attempts. Disconnecting.") - self.close() - elif self.username.lower() == 'anonymous': - self.respond("530 Anonymous access not allowed.") - self.log('Authentication failed: anonymous access not allowed.') - else: - self.respond("530 Authentication failed.") - self.log('Authentication failed: unknown username "%s".' - %self.username) - self.username = "" - - def ftp_REIN(self, line): - """Reinitialize user's current session.""" - # From RFC-959: - # REIN command terminates a USER, flushing all I/O and account - # information, except to allow any transfer in progress to be - # completed. All parameters are reset to the default settings - # and the control connection is left open. This is identical - # to the state in which a user finds himself immediately after - # the control connection is opened. - self.log("OK REIN. Flushing account information.") - self.flush_account() - # Note: RFC-959 erroneously mention "220" as the correct response - # code to be given in this case, but this is wrong... - self.respond("230 Ready for new user.") - - - # --- filesystem operations - - def ftp_PWD(self, line): - """Return the name of the current working directory to the client.""" - cwd = self.fs.get_cwd() - self.respond('257 "%s" is the current directory.' % cwd) - - def ftp_CWD(self, line): - """Change the current working directory.""" - # check: a lot of FTP servers go back to root directory if no - # arg is provided but this is not specified in RFC-959. - # Search for official references about this behaviour. - datacr = None - try: - datacr = self.get_crdata2(line,'cwd') - self.try_as_current_user(self.fs.chdir, (datacr,), line=line, errno_resp={2: 530}) - cwd = self.fs.get_cwd() - self.log('OK CWD "%s".' % cwd) - self.respond('250 "%s" is the current directory.' % cwd) - except FTPExceptionSent: - return - finally: - self.fs.close_cr(datacr) - - def ftp_CDUP(self, line): - """Change into the parent directory.""" - # Note: RFC-959 says that code 200 is required but it also says - # that CDUP uses the same codes as CWD. - self.ftp_CWD('..') - - def ftp_SIZE(self, line): - """Return size of file in a format suitable for using with - RESTart as defined in RFC-3659. - - Implementation note: - properly handling the SIZE command when TYPE ASCII is used would - require to scan the entire file to perform the ASCII translation - logic (file.read().replace(os.linesep, '\r\n')) and then - calculating the len of such data which may be different than - the actual size of the file on the server. Considering that - calculating such result could be very resource-intensive it - could be easy for a malicious client to try a DoS attack, thus - we do not perform the ASCII translation. - - However, clients in general should not be resuming downloads in - ASCII mode. Resuming downloads in binary mode is the recommended - way as specified in RFC-3659. - """ - datacr = None - try: - datacr = self.get_crdata2(line, mode='file') - size = self.try_as_current_user(self.fs.getsize,(datacr,), line=line) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - else: - self.respond("213 %s" %size) - self.log('OK SIZE "%s".' %line) - self.fs.close_cr(datacr) - - def ftp_MDTM(self, line): - """Return last modification time of file to the client as an ISO - 3307 style timestamp (YYYYMMDDHHMMSS) as defined in RFC-3659. - """ - datacr = None - - try: - if line.find('/', 1) < 0: - # root or db, just return local - lmt = None - else: - datacr = self.get_crdata2(line) - if not datacr: - raise IOError(errno.ENOENT, "%s is not retrievable." %line) - - lmt = self.try_as_current_user(self.fs.getmtime, (datacr,), line=line) - lmt = time.strftime("%Y%m%d%H%M%S", time.localtime(lmt)) - self.respond("213 %s" %lmt) - self.log('OK MDTM "%s".' %line) - except FTPExceptionSent: - return - finally: - self.fs.close_cr(datacr) - - def ftp_MKD(self, line): - """Create the specified directory.""" - try: - datacr = self.get_crdata2(line, mode='create') - self.try_as_current_user(self.fs.mkdir, (datacr, datacr[2]), line=line) - except FTPExceptionSent: - self.fs.close_cr(datacr) - return - else: - self.log('OK MKD "%s".' %line) - self.respond("257 Directory created.") - self.fs.close_cr(datacr) - - def ftp_RMD(self, line): - """Remove the specified directory.""" - datacr = None - try: - datacr = self.get_crdata2(line, mode='delete') - if not datacr[1]: - msg = "Cannot remove root directory." - self.respond("553 %s" %msg) - self.log('FAIL MKD "/". %s' %msg) - self.fs.close_cr(datacr) - return - self.try_as_current_user(self.fs.rmdir, (datacr,), line=line) - self.log('OK RMD "%s".' %line) - self.respond("250 Directory removed.") - except FTPExceptionSent: - pass - self.fs.close_cr(datacr) - - def ftp_DELE(self, line): - """Delete the specified file.""" - datacr = None - try: - datacr = self.get_crdata2(line, mode='delete') - self.try_as_current_user(self.fs.remove, (datacr,), line=line) - self.log('OK DELE "%s".' %line) - self.respond("250 File removed.") - except FTPExceptionSent: - pass - self.fs.close_cr(datacr) - - def ftp_RNFR(self, line): - """Rename the specified (only the source name is specified - here, see RNTO command)""" - datacr = None - try: - datacr = self.get_crdata2(line, mode='rfnr') - if not datacr[1]: - self.respond("550 No such file or directory.") - elif not datacr[1]: - self.respond("553 Cannot rename the home directory.") - else: - self.fs.rnfr = datacr[1] - self.respond("350 Ready for destination name.") - except FTPExceptionSent: - pass - self.fs.close_cr(datacr) - - def ftp_RNTO(self, line): - """Rename file (destination name only, source is specified with - RNFR). - """ - if not self.fs.rnfr: - self.respond("503 Bad sequence of commands: use RNFR first.") - return - datacr = None - try: - datacr = self.get_crdata2(line,'create') - oldname = self.fs.rnfr.path - if isinstance(oldname, (list, tuple)): - oldname = '/'.join(oldname) - self.try_as_current_user(self.fs.rename, (self.fs.rnfr, datacr), line=line) - self.fs.rnfr = None - self.log('OK RNFR/RNTO "%s ==> %s".' % \ - (_to_unicode(oldname), _to_unicode(line))) - self.respond("250 Renaming ok.") - except FTPExceptionSent: - pass - finally: - self.fs.rnfr = None - self.fs.close_cr(datacr) - - - # --- others - - def ftp_TYPE(self, line): - """Set current type data type to binary/ascii""" - line = line.upper() - if line in ("A", "AN", "A N"): - self.respond("200 Type set to: ASCII.") - self.current_type = 'a' - elif line in ("I", "L8", "L 8"): - self.respond("200 Type set to: Binary.") - self.current_type = 'i' - else: - self.respond('504 Unsupported type "%s".' %line) - - def ftp_STRU(self, line): - """Set file structure (obsolete).""" - # obsolete (backward compatibility with older ftp clients) - if line in ('f','F'): - self.respond('200 File transfer structure set to: F.') - else: - self.respond('504 Unimplemented STRU type.') - - def ftp_MODE(self, line): - """Set data transfer mode (obsolete)""" - # obsolete (backward compatibility with older ftp clients) - if line in ('s', 'S'): - self.respond('200 Transfer mode set to: S') - else: - self.respond('504 Unimplemented MODE type.') - - def ftp_STAT(self, line): - """Return statistics about current ftp session. If an argument - is provided return directory listing over command channel. - - Implementation note: - - RFC-959 do not explicitly mention globbing; this means that FTP - servers are not required to support globbing in order to be - compliant. However, many FTP servers do support globbing as a - measure of convenience for FTP clients and users. - - In order to search for and match the given globbing expression, - the code has to search (possibly) many directories, examine - each contained filename, and build a list of matching files in - memory. Since this operation can be quite intensive, both CPU- - and memory-wise, we limit the search to only one directory - non-recursively, as LIST does. - """ - # return STATus information about ftpd - if not line: - s = [] - s.append('Connected to: %s:%s' %self.socket.getsockname()[:2]) - if self.authenticated: - s.append('Logged in as: %s' %self.username) - else: - if not self.username: - s.append("Waiting for username.") - else: - s.append("Waiting for password.") - if self.current_type == 'a': - type = 'ASCII' - else: - type = 'Binary' - s.append("TYPE: %s; STRUcture: File; MODE: Stream" %type) - if self.data_server: - s.append('Passive data channel waiting for connection.') - elif self.data_channel: - bytes_sent = self.data_channel.tot_bytes_sent - bytes_recv = self.data_channel.tot_bytes_received - s.append('Data connection open:') - s.append('Total bytes sent: %s' %bytes_sent) - s.append('Total bytes received: %s' %bytes_recv) - else: - s.append('Data connection closed.') - - self.push('211-FTP server status:\r\n') - self.push(''.join([' %s\r\n' %item for item in s])) - self.respond('211 End of status.') - # return directory LISTing over the command channel - else: - datacr = None - try: - datacr = self.fs.get_cr(line) - iterator = self.try_as_current_user(self.fs.get_stat_dir, (line, datacr), line=line) - except FTPExceptionSent: - pass - else: - self.push('213-Status of "%s":\r\n' %self.fs.ftpnorm(line)) - self.push_with_producer(BufferedIteratorProducer(iterator)) - self.respond('213 End of status.') - self.fs.close_cr(datacr) - - def ftp_FEAT(self, line): - """List all new features supported as defined in RFC-2398.""" - features = ['EPRT','EPSV','MDTM','MLSD','REST STREAM','SIZE','TVFS'] - s = '' - for fact in self.available_facts: - if fact in self.current_facts: - s += fact + '*;' - else: - s += fact + ';' - features.append('MLST ' + s) - features.sort() - self.push("211-Features supported:\r\n") - self.push("".join([" %s\r\n" %x for x in features])) - self.respond('211 End FEAT.') - - def ftp_OPTS(self, line): - """Specify options for FTP commands as specified in RFC-2389.""" - try: - assert (not line.count(' ') > 1), 'Invalid number of arguments.' - if ' ' in line: - cmd, arg = line.split(' ') - assert (';' in arg), 'Invalid argument!' - else: - cmd, arg = line, '' - # actually the only command able to accept options is MLST - assert (cmd.upper() == 'MLST'), 'Unsupported command "%s".' %cmd - except AssertionError, err: - self.respond('501 %s.' %err) - else: - facts = [x.lower() for x in arg.split(';')] - self.current_facts = [x for x in facts if x in self.available_facts] - f = ''.join([x + ';' for x in self.current_facts]) - self.respond('200 MLST OPTS ' + f) - - def ftp_NOOP(self, line): - """Do nothing.""" - self.respond("200 I successfully done nothin'.") - - def ftp_SYST(self, line): - """Return system type (always returns UNIX type: L8).""" - # This command is used to find out the type of operating system - # at the server. The reply shall have as its first word one of - # the system names listed in RFC-943. - # Since that we always return a "/bin/ls -lA"-like output on - # LIST we prefer to respond as if we would on Unix in any case. - self.respond("215 UNIX Type: L8") - - def ftp_ALLO(self, line): - """Allocate bytes for storage (obsolete).""" - # obsolete (always respond with 202) - self.respond("202 No storage allocation necessary.") - - def ftp_HELP(self, line): - """Return help text to the client.""" - if line: - if line.upper() in proto_cmds: - self.respond("214 %s" %proto_cmds[line.upper()]) - else: - self.respond("501 Unrecognized command.") - else: - # provide a compact list of recognized commands - def formatted_help(): - cmds = [] - keys = proto_cmds.keys() - keys.sort() - while keys: - elems = tuple((keys[0:8])) - cmds.append(' %-6s' * len(elems) %elems + '\r\n') - del keys[0:8] - return ''.join(cmds) - - self.push("214-The following commands are recognized:\r\n") - self.push(formatted_help()) - self.respond("214 Help command successful.") - - - # --- support for deprecated cmds - - # RFC-1123 requires that the server treat XCUP, XCWD, XMKD, XPWD - # and XRMD commands as synonyms for CDUP, CWD, MKD, LIST and RMD. - # Such commands are obsoleted but some ftp clients (e.g. Windows - # ftp.exe) still use them. - - def ftp_XCUP(self, line): - """Change to the parent directory. Synonym for CDUP. Deprecated.""" - self.ftp_CDUP(line) - - def ftp_XCWD(self, line): - """Change the current working directory. Synonym for CWD. Deprecated.""" - self.ftp_CWD(line) - - def ftp_XMKD(self, line): - """Create the specified directory. Synonym for MKD. Deprecated.""" - self.ftp_MKD(line) - - def ftp_XPWD(self, line): - """Return the current working directory. Synonym for PWD. Deprecated.""" - self.ftp_PWD(line) - - def ftp_XRMD(self, line): - """Remove the specified directory. Synonym for RMD. Deprecated.""" - self.ftp_RMD(line) - - -class FTPServer(asyncore.dispatcher): - """This class is an asyncore.disptacher subclass. It creates a FTP - socket listening on
, dispatching the requests to a - (typically FTPHandler class). - - Depending on the type of address specified IPv4 or IPv6 connections - (or both, depending from the underlying system) will be accepted. - - All relevant session information is stored in class attributes - described below. - Overriding them is strongly recommended to avoid running out of - file descriptors (DoS)! - - - (int) max_cons: - number of maximum simultaneous connections accepted (defaults - to 0 == unlimited). - - - (int) max_cons_per_ip: - number of maximum connections accepted for the same IP address - (defaults to 0 == unlimited). - """ - - max_cons = 0 - max_cons_per_ip = 0 - - def __init__(self, address, handler): - """Initiate the FTP server opening listening on address. - - - (tuple) address: the host:port pair on which the command - channel will listen. - - - (classobj) handler: the handler class to use. - """ - asyncore.dispatcher.__init__(self) - self.handler = handler - self.ip_map = [] - host, port = address - - # AF_INET or AF_INET6 socket - # Get the correct address family for our host (allows IPv6 addresses) - try: - info = socket.getaddrinfo(host, port, socket.AF_UNSPEC, - socket.SOCK_STREAM, 0, socket.AI_PASSIVE) - except socket.gaierror: - # Probably a DNS issue. Assume IPv4. - self.create_socket(socket.AF_INET, socket.SOCK_STREAM) - self.set_reuse_addr() - self.bind((host, port)) - else: - for res in info: - af, socktype, proto, canonname, sa = res - try: - self.create_socket(af, socktype) - self.set_reuse_addr() - self.bind(sa) - except socket.error, msg: - if self.socket: - self.socket.close() - self.socket = None - continue - break - if not self.socket: - raise socket.error, msg - self.listen(5) - - def set_reuse_addr(self): - # Overridden for convenience. Avoid to reuse address on Windows. - if (os.name in ('nt', 'ce')) or (sys.platform == 'cygwin'): - return - asyncore.dispatcher.set_reuse_addr(self) - - def serve_forever(self, **kwargs): - """A wrap around asyncore.loop(); starts the asyncore polling - loop. - - The keyword arguments in kwargs are the same expected by - asyncore.loop() function: timeout, use_poll, map and count. - """ - if not 'count' in kwargs: - log("Serving FTP on %s:%s" %self.socket.getsockname()[:2]) - - # backward compatibility for python < 2.4 - if not hasattr(self, '_map'): - if not 'map' in kwargs: - map = asyncore.socket_map - else: - map = kwargs['map'] - self._map = self.handler._map = map - - try: - # FIX #16, #26 - # use_poll specifies whether to use select module's poll() - # with asyncore or whether to use asyncore's own poll() - # method Python versions < 2.4 need use_poll set to False - # This breaks on OS X systems if use_poll is set to True. - # All systems seem to work fine with it set to False - # (tested on Linux, Windows, and OS X platforms) - if kwargs: - asyncore.loop(**kwargs) - else: - asyncore.loop(timeout=1.0, use_poll=False) - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - log("Shutting down FTPd.") - self.close_all() - - def handle_accept(self): - """Called when remote client initiates a connection.""" - sock_obj, addr = self.accept() - log("[]%s:%s Connected." %addr[:2]) - - handler = self.handler(sock_obj, self) - ip = addr[0] - self.ip_map.append(ip) - - # For performance and security reasons we should always set a - # limit for the number of file descriptors that socket_map - # should contain. When we're running out of such limit we'll - # use the last available channel for sending a 421 response - # to the client before disconnecting it. - if self.max_cons: - if len(self._map) > self.max_cons: - handler.handle_max_cons() - return - - # accept only a limited number of connections from the same - # source address. - if self.max_cons_per_ip: - if self.ip_map.count(ip) > self.max_cons_per_ip: - handler.handle_max_cons_per_ip() - return - - handler.handle() - - def writable(self): - return 0 - - def handle_error(self): - """Called to handle any uncaught exceptions.""" - try: - raise - except (KeyboardInterrupt, SystemExit, asyncore.ExitNow): - raise - logerror(traceback.format_exc()) - self.close() - - def close_all(self, map=None, ignore_all=False): - """Stop serving; close all existent connections disconnecting - clients. - - - (dict) map: - A dictionary whose items are the channels to close. - If map is omitted, the default asyncore.socket_map is used. - - - (bool) ignore_all: - having it set to False results in raising exception in case - of unexpected errors. - - Implementation note: - - Instead of using the current asyncore.close_all() function - which only close sockets, we iterate over all existent channels - calling close() method for each one of them, avoiding memory - leaks. - - This is how asyncore.close_all() function should work in - Python 2.6. - """ - if map is None: - map = self._map - for x in map.values(): - try: - x.close() - except OSError, x: - if x[0] == errno.EBADF: - pass - elif not ignore_all: - raise - except (asyncore.ExitNow, KeyboardInterrupt, SystemExit): - raise - except: - if not ignore_all: - raise - map.clear() - - -def test(): - # cmd line usage (provide a read-only anonymous ftp server): - # python -m pyftpdlib.FTPServer - authorizer = DummyAuthorizer() - authorizer.add_anonymous(os.getcwd(), perm='elradfmw') - FTPHandler.authorizer = authorizer - address = ('', 8021) - ftpd = FTPServer(address, FTPHandler) - ftpd.serve_forever() - -if __name__ == '__main__': - test() - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/i18n/ar.po b/addons/document_ftp/i18n/ar.po deleted file mode 100644 index f6e1a3ab95d..00000000000 --- a/addons/document_ftp/i18n/ar.po +++ /dev/null @@ -1,158 +0,0 @@ -# Arabic translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-01 18:32+0000\n" -"Last-Translator: gehad shaat \n" -"Language-Team: Arabic \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "قم بضبط الخادم FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "التهيئة التلقائية للمسار" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"يشير عنوان الشبكة التي لديك على الخادم OpenERP ينبغي أن تكون قابلة للوصول " -"للمستخدمين النهائيين. هذا يعتمد على هيكل الشبكة الخاصة بك والتكوين، وسو٠" -"تؤثر Ùقط على الروابط المعروضة للمستخدمين. والشكل هو مضيÙ: منÙØ° والمضي٠" -"الاÙتراضي (المضي٠المحلي) وهي مناسبة Ùقط للوصول من جهاز الخادم Ù†Ùسه .." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "استعراض الملÙات" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "اضغط على الرابط لتصÙØ­ المستندات" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "خادم FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "ضبط خدمة FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "تصÙØ­ المستندات" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_تصÙØ­" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"عنوان الخادم أو الملكية الÙكرية والمنÙØ° الذي يجب على المستخدمين الاتصال به " -"للحصول DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "مستودع مشترك (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "العنوان" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "إلغاء" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "تصÙØ­ وثيقة FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "الاعدادات لنظام أدارة الوثائق" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "متصÙØ­ الوثيقة" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "أو" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "تصÙØ­ الوثيقة" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "الصورة" - -#~ msgid "Configuration Progress" -#~ msgstr "سير الإعدادات" - -#~ msgid "title" -#~ msgstr "الاسم" - -#~ msgid "_Cancel" -#~ msgstr "ال_غاء" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "ربط خدمة FTP مع نظام ادارة الوثائق" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "هذا هو واجهة دعم بروتوكول نقل الملÙات مع نظام إدارة الوثائق.\n" -#~ "مع هذه الوحدة Ùإنك لن تكون قادرا على الوصول إلى المستندات من خلال OpenERP\n" -#~ "ولكن هل ستكون أيضا قادرا على الاتصال معهم من خلال نظام الملÙات باستخدام\n" -#~ "بروتوكول نقل الملÙات العملاء.\n" diff --git a/addons/document_ftp/i18n/bg.po b/addons/document_ftp/i18n/bg.po deleted file mode 100644 index 1bf7cf4c7b2..00000000000 --- a/addons/document_ftp/i18n/bg.po +++ /dev/null @@ -1,146 +0,0 @@ -# Bulgarian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-02 09:48+0000\n" -"Last-Translator: Dimitar Markov \n" -"Language-Team: Bulgarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "ÐаÑтройване на FTP Ñървър" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Ðвтоматично наÑтройване на категориÑ" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Показва Ð¼Ñ€ÐµÐ¶Ð¾Ð²Ð¸Ñ Ð°Ð´Ñ€ÐµÑ, на който вашиÑÑ‚ OpenErp Ñървър Ñледва да бъде " -"доÑтъпен за крайни потребители. ЗавиÑи от топологиÑта на вашата мрежа и " -"наÑтройки, и ще влиÑе Ñамо на връзките показвани на потребителите. Форматът " -"е HOST:PORT и по подразбиране (localhost) единÑтвено е подходÑщ за доÑтъп " -"от ÑÐ°Ð¼Ð¸Ñ Ñървър." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Преглед на файловете" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Ñървър" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "ÐаÑтройки на FTP Ñървър" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Разглеждане" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"ÐÐ´Ñ€ÐµÑ Ð½Ð° Ñървъра или IP и порта, към който потребителите Ñ‚Ñ€Ñбва да Ñе Ñвърже " -"за DMS за доÑтъп" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Споделено храниилище (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ÐдреÑ" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Преглед на FTP документи" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "ÐаÑтройки на приложение ЗÐÐÐИЯ" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Преглед на документ" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Преглед на Документ" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Изображение" - -#~ msgid "Configuration Progress" -#~ msgstr "ÐŸÑ€Ð¾Ð³Ñ€ÐµÑ Ð½Ð° наÑтройките" - -#~ msgid "title" -#~ msgstr "заглавие" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Интегриран FTP Ñървър ÑÑŠÑ ÑиÑтема за управление на Ñъдържанието" - -#~ msgid "_Cancel" -#~ msgstr "_Отказ" diff --git a/addons/document_ftp/i18n/ca.po b/addons/document_ftp/i18n/ca.po deleted file mode 100644 index f20d3846aa5..00000000000 --- a/addons/document_ftp/i18n/ca.po +++ /dev/null @@ -1,160 +0,0 @@ -# Catalan translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-15 16:46+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Catalan \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configura servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuració automàtica de directoris" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indiqueu l'adreça de xarxa en la que el vostre servidor d'OpenERP hauria " -"d'estar accessible per als usuaris finals. Això depèn de la vostra topologia " -"de xarxa i configuració, i només afectara als enllaços mostrats als usuaris. " -"El formato és SERVIDOR:PORT i el servidor per defecte (localhost) només és " -"adequat per a l'accés des de la pròpia màquina del servidor." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navega pels fitxers" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuració del servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navega" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adreça del servidor o IP i el port per accedir al sistema de gestió de " -"documents." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adreça" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navega pels documents per FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuració aplicació del coneixement" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navega pels documents" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navega pels documents" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_continguts" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Proporciona una interfície FTP per al sistema de gestió de documents.\n" -#~ " A més de l'accés als documents a través d'OpenERP, aquest mòdul\n" -#~ " permet accedir als mateixos a través del sistema de fitxers " -#~ "utilitzant un\n" -#~ " client FTP.\n" - -#~ msgid "Image" -#~ msgstr "Imatge" - -#~ msgid "Configuration Progress" -#~ msgstr "Progrés de la configuració" - -#~ msgid "title" -#~ msgstr "títol" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancel·la" diff --git a/addons/document_ftp/i18n/cs.po b/addons/document_ftp/i18n/cs.po deleted file mode 100644 index bef912784de..00000000000 --- a/addons/document_ftp/i18n/cs.po +++ /dev/null @@ -1,142 +0,0 @@ -# Czech translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-04-06 06:13+0000\n" -"Last-Translator: Jiří Hajda \n" -"Language-Team: Czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfigurovat FTP server" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automatická konfigurace adresářů" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"ZnaÄí adresu sítÄ›, na které by mÄ›l být pro koncové uživatel dostupný váš " -"OpenERP server. To závisí na vaší síťové topologii a nastavení a ovlivní to " -"pouze odkazy zobrazené uživatelům. Formát je POĆÃTAÄŒ:PORT a výchozí poÄítaÄ " -"(localhost) je vhodný pouze pro přístup ze samotného serveru." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Procházet soubory" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Konfigurace FTP serveru" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Procházet" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adresa serveru nebo IP a port, ke kterému by se mÄ›li uživatelé pÅ™ipojit pro " -"přístup DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Sdílené úložiÅ¡tÄ› (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresa" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Procházení FTP dokumentů" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Nastavení aplikace znalostí" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Procházení dokumentů" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Procházet dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Obrázek" - -#~ msgid "title" -#~ msgstr "název" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "FTP server integrovaný s Document Management Systémem" - -#~ msgid "_Cancel" -#~ msgstr "_Storno" diff --git a/addons/document_ftp/i18n/da.po b/addons/document_ftp/i18n/da.po deleted file mode 100644 index 380ae5501a5..00000000000 --- a/addons/document_ftp/i18n/da.po +++ /dev/null @@ -1,124 +0,0 @@ -# Danish translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-27 08:46+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Danish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" diff --git a/addons/document_ftp/i18n/de.po b/addons/document_ftp/i18n/de.po deleted file mode 100644 index 6f2b721af9c..00000000000 --- a/addons/document_ftp/i18n/de.po +++ /dev/null @@ -1,160 +0,0 @@ -# German translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-18 06:50+0000\n" -"Last-Translator: Ferdinand \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTP Server konfigurieren" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Auto Konfigurator Verzeichnisse" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Zeigt die Netzwerk IP Adresse über die der OpenERP Server für Endbenutzer " -"erreicht werden kann. Diese Adresse hängt ab von der Architektur des " -"Netzwerks und wird lediglich einen Einfluss auf die Anzeige der Adresse beim " -"Benutzer haben. Das Format der Adresse ist HOST:PORT, wobei der Standard " -"Host (localhost) lediglich gültig ist für einen direkten Zugriff vom Server " -"selbst." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "Wissensdatenbank.Konfiguration.Einstellungen" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Dateien durchsuchen" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "URL klicken, um die Dokumente anzuzeigen" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP-Server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Konfiguration FTP-Server" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Dokumente anzeigen" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "Suchen" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Servername oder IP und Port über den Benutzer per FTP auf Dokumente zugreifen" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresse" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Abbrechen" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Suche per FTP-Dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Knowledge-Anwendung konfigurieren" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Dokument suchen" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "oder" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Dokument suchen" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "_Cancel" -#~ msgstr "Abbrechen" - -#~ msgid "Configuration Progress" -#~ msgstr "Abfolge Konfiguration" - -#~ msgid "Image" -#~ msgstr "Bild" - -#~ msgid "title" -#~ msgstr "Bezeichnung" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Diese Anwendung unterstützt einen Zugriff per FTP auf das " -#~ "Dokumentenmanagement.\n" -#~ "Hierdurch können Sie nicht nur durch OpenERP auf Dokumente zugreifen. \n" -#~ "Sie können auch über den FTP Client Ihres Betriebssystems oder durch FTP " -#~ "Anwendungen auf diese Dokumente zugreifen.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Integration FTP Server in Dokumentenmanagement" diff --git a/addons/document_ftp/i18n/document_ftp.pot b/addons/document_ftp/i18n/document_ftp.pot deleted file mode 100644 index 969bf4254b0..00000000000 --- a/addons/document_ftp/i18n/document_ftp.pot +++ /dev/null @@ -1,117 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * document_ftp -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0alpha\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 17:05+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Indicate the network address on which your OpenERP server should be reachable for end-users. This depends on your network topology and configuration, and will only affect the links displayed to the users. The format is HOST:PORT and the default host (localhost) is only suitable for access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - diff --git a/addons/document_ftp/i18n/el.po b/addons/document_ftp/i18n/el.po deleted file mode 100644 index a8eef082d25..00000000000 --- a/addons/document_ftp/i18n/el.po +++ /dev/null @@ -1,136 +0,0 @@ -# Greek translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-12 17:13+0000\n" -"Last-Translator: Dimitris Andavoglou \n" -"Language-Team: Greek \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "ΠεÏιήγηση στα ΑÏχεία" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "ΕξυπηÏετητής FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "ΠαÏαμετÏοποίηση Διακομιστή FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_ΠεÏιήγηση" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ΔιεÏθυνση" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - -#~ msgid "Image" -#~ msgstr "Εικόνα" - -#~ msgid "Configuration Progress" -#~ msgstr "ΠÏόοδος ΠαÏαμετÏοποίησης" - -#~ msgid "title" -#~ msgstr "τίτλος" - -#~ msgid "_Cancel" -#~ msgstr "_ΆκυÏο" diff --git a/addons/document_ftp/i18n/en_GB.po b/addons/document_ftp/i18n/en_GB.po deleted file mode 100644 index 7cbc0e9457b..00000000000 --- a/addons/document_ftp/i18n/en_GB.po +++ /dev/null @@ -1,160 +0,0 @@ -# English (United Kingdom) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-08-25 17:39+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: English (United Kingdom) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configure FTP Server" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Auto Directory Configuration" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Browse Files" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Click the url to browse the documents" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP Server Configuration" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Browse Documents" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Browse" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Server address or IP and port to which users should connect to for DMS access" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Shared Repository (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Address" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Cancel" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Document FTP Browse" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Knowledge Application Configuration" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Document Browse" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "or" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Browse Document" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" - -#~ msgid "Image" -#~ msgstr "Image" - -#~ msgid "Configuration Progress" -#~ msgstr "Configuration Progress" - -#~ msgid "title" -#~ msgstr "title" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Integrated FTP Server with Document Management System" - -#~ msgid "_Cancel" -#~ msgstr "_Cancel" diff --git a/addons/document_ftp/i18n/es.po b/addons/document_ftp/i18n/es.po deleted file mode 100644 index cffa3dcf7fa..00000000000 --- a/addons/document_ftp/i18n/es.po +++ /dev/null @@ -1,160 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-11 22:05+0000\n" -"Last-Translator: lambdasoftware \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique la dirección de red en la cual su servidor de OpenERP debería estar " -"accesible para los usuarios finales. Esto depende de su topología de red y " -"configuración, y sólo afectará a los enlaces mostrados a los usuarios. El " -"formato es SERVIDOR:PUERTO y el servidor por defecto (localhost) sólo es " -"adecuado para el acceso desde la propia máquina del servidor." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "Parámetros de configuración de la base de conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar por los archivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Pulse sobre el enlace para acceder a los documentos" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración del servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Navegue por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección del servidor o IP y el puerto para acceder al sistema de gestión " -"de documentos." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Cancelar" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegar por los documentos por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración aplicación del conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "o" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contenidos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#~ msgid "title" -#~ msgstr "título" - -#~ msgid "Image" -#~ msgstr "Imagen" - -#~ msgid "Configuration Progress" -#~ msgstr "Progreso de la configuración" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Proporciona un interfaz FTP para el sistema de gestión de documentos.\n" -#~ " Además del acceso a los documentos a través de OpenERP, este módulo\n" -#~ " permite acceder a los mismos a través del sistema de archivos " -#~ "utilizando un\n" -#~ " cliente FTP.\n" diff --git a/addons/document_ftp/i18n/es_CR.po b/addons/document_ftp/i18n/es_CR.po deleted file mode 100644 index 07f73dcde1e..00000000000 --- a/addons/document_ftp/i18n/es_CR.po +++ /dev/null @@ -1,162 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-02-13 19:19+0000\n" -"Last-Translator: Carlos Vásquez (CLEARCORP) " -"\n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" -"Language: es\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique la dirección de red en la cual su servidor de OpenERP debería estar " -"accesible para los usuarios finales. Esto depende de su topología de red y " -"configuración, y sólo afectará a los enlaces mostrados a los usuarios. El " -"formato es SERVIDOR:PUERTO y el servidor por defecto (localhost) sólo es " -"adecuado para el acceso desde la propia máquina del servidor." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar por los archivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración del servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección del servidor o IP y el puerto para acceder al sistema de gestión " -"de documentos." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegar por los documentos por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración aplicación del conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contenidos" - -#~ msgid "Image" -#~ msgstr "Imagen" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" - -#~ msgid "title" -#~ msgstr "título" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#~ msgid "Configuration Progress" -#~ msgstr "Progreso de la configuración" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Proporciona un interfaz FTP para el sistema de gestión de documentos.\n" -#~ " Además del acceso a los documentos a través de OpenERP, este módulo\n" -#~ " permite acceder a los mismos a través del sistema de archivos " -#~ "utilizando un\n" -#~ " cliente FTP.\n" diff --git a/addons/document_ftp/i18n/es_EC.po b/addons/document_ftp/i18n/es_EC.po deleted file mode 100644 index bd175516183..00000000000 --- a/addons/document_ftp/i18n/es_EC.po +++ /dev/null @@ -1,158 +0,0 @@ -# Spanish (Ecuador) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-13 04:17+0000\n" -"Last-Translator: Cristian Salamea (Gnuthink) \n" -"Language-Team: Spanish (Ecuador) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique la dirección de red en la cual su servidor de OpenERP debería estar " -"disponible para los usuarios finales. Esto depende de su topología de red y " -"configuración, y sólo afectará a los enlaces mostrados a los usuarios. El " -"formato es ANFITRIÓN:PUERTO y el anfitrión por defecto (localhost) sólo es " -"adecuado para acceso desde la propia máquina del servidor." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Examinar archivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración de Servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Examinar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "Dirección del servidor o IP y el puerto para acceder al DMS." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Biblioteca compartida de módulos (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Examinar documento por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración aplicación del conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Examinar documento" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Examinar documento" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "Configurar Contenidos" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Un Interfaz FTP para el sistema de gestión de documentos.\n" -#~ " Además del acceso a documentos a través de OpenERP\n" -#~ " éste módulo permite acceder a los mismos a través del sistema de " -#~ "archivos utilizando el\n" -#~ " Cliente FTP.\n" - -#~ msgid "Image" -#~ msgstr "Imagen" - -#~ msgid "Configuration Progress" -#~ msgstr "Progreso de Configuración" - -#~ msgid "title" -#~ msgstr "Título" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" diff --git a/addons/document_ftp/i18n/es_MX.po b/addons/document_ftp/i18n/es_MX.po deleted file mode 100644 index 4c568d4513e..00000000000 --- a/addons/document_ftp/i18n/es_MX.po +++ /dev/null @@ -1,148 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-13 22:59+0000\n" -"Last-Translator: Jordi Esteve (www.zikzakmedia.com) " -"\n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:55+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique la dirección de red en la cual su servidor de OpenERP debería estar " -"accesible para los usuarios finales. Esto depende de su topología de red y " -"configuración, y sólo afectará a los enlaces mostrados a los usuarios. El " -"formato es SERVIDOR:PUERTO y el servidor por defecto (localhost) sólo es " -"adecuado para el acceso desde la propia máquina del servidor." - -#. module: document_ftp -#: field:document.ftp.configuration,progress:0 -msgid "Configuration Progress" -msgstr "Progreso de la configuración" - -#. module: document_ftp -#: model:ir.actions.url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar por los archivos" - -#. module: document_ftp -#: field:document.ftp.configuration,config_logo:0 -msgid "Image" -msgstr "Imagen" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración del servidor FTP" - -#. module: document_ftp -#: model:ir.module.module,description:document_ftp.module_meta_information -msgid "" -"This is a support FTP Interface with document management system.\n" -" With this module you would not only be able to access documents through " -"OpenERP\n" -" but you would also be able to connect with them through the file system " -"using the\n" -" FTP client.\n" -msgstr "" -"Proporciona un interfaz FTP para el sistema de gestión de documentos.\n" -" Además del acceso a los documentos a través de OpenERP, este módulo\n" -" permite acceder a los mismos a través del sistema de archivos " -"utilizando un\n" -" cliente FTP.\n" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección del servidor o IP y el puerto para acceder al sistema de gestión " -"de documentos." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Cancel" -msgstr "_Cancelar" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.module.module,shortdesc:document_ftp.module_meta_information -msgid "Integrated FTP Server with Document Management System" -msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "title" -msgstr "título" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegar por los documentos por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración aplicación del conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contenidos" diff --git a/addons/document_ftp/i18n/es_PY.po b/addons/document_ftp/i18n/es_PY.po deleted file mode 100644 index fe4663cb7da..00000000000 --- a/addons/document_ftp/i18n/es_PY.po +++ /dev/null @@ -1,155 +0,0 @@ -# Spanish (Paraguay) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-21 14:41+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Spanish (Paraguay) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de carpetas" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar por los archivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración del servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección del servidor o IP y el puerto para acceder al sistema de gestión " -"de documentos." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegar por los documentos por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración de la aplicación de conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contenidos" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Proporciona un interfaz FTP para el sistema de gestión de documentos.\n" -#~ " Además del acceso a los documentos a través de OpenERP, este módulo\n" -#~ " permite acceder a los mismos a través del sistema de archivos " -#~ "utilizando un\n" -#~ " cliente FTP.\n" - -#~ msgid "Image" -#~ msgstr "Imagen" - -#~ msgid "Configuration Progress" -#~ msgstr "Progreso de la configuración" - -#~ msgid "title" -#~ msgstr "título" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" diff --git a/addons/document_ftp/i18n/es_VE.po b/addons/document_ftp/i18n/es_VE.po deleted file mode 100644 index 4c568d4513e..00000000000 --- a/addons/document_ftp/i18n/es_VE.po +++ /dev/null @@ -1,148 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-13 22:59+0000\n" -"Last-Translator: Jordi Esteve (www.zikzakmedia.com) " -"\n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:55+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique la dirección de red en la cual su servidor de OpenERP debería estar " -"accesible para los usuarios finales. Esto depende de su topología de red y " -"configuración, y sólo afectará a los enlaces mostrados a los usuarios. El " -"formato es SERVIDOR:PUERTO y el servidor por defecto (localhost) sólo es " -"adecuado para el acceso desde la propia máquina del servidor." - -#. module: document_ftp -#: field:document.ftp.configuration,progress:0 -msgid "Configuration Progress" -msgstr "Progreso de la configuración" - -#. module: document_ftp -#: model:ir.actions.url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar por los archivos" - -#. module: document_ftp -#: field:document.ftp.configuration,config_logo:0 -msgid "Image" -msgstr "Imagen" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Dirección" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración del servidor FTP" - -#. module: document_ftp -#: model:ir.module.module,description:document_ftp.module_meta_information -msgid "" -"This is a support FTP Interface with document management system.\n" -" With this module you would not only be able to access documents through " -"OpenERP\n" -" but you would also be able to connect with them through the file system " -"using the\n" -" FTP client.\n" -msgstr "" -"Proporciona un interfaz FTP para el sistema de gestión de documentos.\n" -" Además del acceso a los documentos a través de OpenERP, este módulo\n" -" permite acceder a los mismos a través del sistema de archivos " -"utilizando un\n" -" cliente FTP.\n" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección del servidor o IP y el puerto para acceder al sistema de gestión " -"de documentos." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Directorio compartido de documentos (FTP)" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Cancel" -msgstr "_Cancelar" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.module.module,shortdesc:document_ftp.module_meta_information -msgid "Integrated FTP Server with Document Management System" -msgstr "Servidor FTP integrado al sistema de gestión de documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "title" -msgstr "título" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegar por los documentos por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración aplicación del conocimiento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por los documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contenidos" diff --git a/addons/document_ftp/i18n/et.po b/addons/document_ftp/i18n/et.po deleted file mode 100644 index 71ce3cdb6c9..00000000000 --- a/addons/document_ftp/i18n/et.po +++ /dev/null @@ -1,133 +0,0 @@ -# Estonian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-10-11 18:05+0000\n" -"Last-Translator: Aare Vesi \n" -"Language-Team: Estonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Failide sirvimine" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP serveri konfiguratsioon" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Sirvi" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Aadress" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - -#~ msgid "Image" -#~ msgstr "Pilt" - -#~ msgid "title" -#~ msgstr "pealkiri" - -#~ msgid "_Cancel" -#~ msgstr "_Tühista" diff --git a/addons/document_ftp/i18n/fi.po b/addons/document_ftp/i18n/fi.po deleted file mode 100644 index 21154021e30..00000000000 --- a/addons/document_ftp/i18n/fi.po +++ /dev/null @@ -1,142 +0,0 @@ -# Finnish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-06-27 06:20+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Finnish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfiguroi FTP palvelin" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automaattinen hakemistojen konfigurointi" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Selaa tiedostoja" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP-palvelin" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP palvelimen konfiguraatio" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "Selaa" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Palvelimen osoite tai IP ja portti mihin käyttäjien tulisi ottaa yhteyttä " -"DMS:n käyttöä varten" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Jaettu tietolähde (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Osoite" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Dokumenttien FTP selailu" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Tiedonhallintaohjelmiston konfiguraatio" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Dokumenttien selailu" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Selaa dokumenttia" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - -#~ msgid "Image" -#~ msgstr "Kuva" - -#~ msgid "Configuration Progress" -#~ msgstr "Konfiguraation eteneminen" - -#~ msgid "title" -#~ msgstr "otsikko" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "" -#~ "Integroitu FTP palvelin dokumenttienhallintajärjestelmällä varustettuna" - -#~ msgid "_Cancel" -#~ msgstr "_Peruuta" diff --git a/addons/document_ftp/i18n/fr.po b/addons/document_ftp/i18n/fr.po deleted file mode 100644 index 67cd72ff873..00000000000 --- a/addons/document_ftp/i18n/fr.po +++ /dev/null @@ -1,163 +0,0 @@ -# French translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-29 10:19+0000\n" -"Last-Translator: Olivier Lenoir \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurer le serveur FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuration automatique des répertoires" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indiquez l'adresse réseau sur laquelle votre serveur OpenERP doit être " -"accessible pour les utilisateurs finaux. Ceci dépend de la topologie de " -"votre réseau et de votre configuration, et il affectera seulement les liens " -"affiché aux utilisateurs. Le format est HÔTE:PORT et l'hôte par défaut " -"(localhost) est seulement approprié pour des accès depuis la machine du " -"serveur." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Parcourir les fichiers" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Cliquer sur l'url pour parcourir les documents" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Serveur FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuration du serveur FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Parcourir les documents" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Parcourir" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adresse du serveur ou adresse IP et port auquel les utilisateurs devraient " -"se connecter pour l'accès au GED." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Répertoire partagé (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresse" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Annuler" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Parcourir les documents FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuration de l'application de gestion des connaissances" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Parcourez le document" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ou" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Parcourir le document" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "Titre :" - -#~ msgid "Image" -#~ msgstr "Image" - -#~ msgid "Configuration Progress" -#~ msgstr "Avancement de la configuration" - -#~ msgid "_Cancel" -#~ msgstr "_Annuler" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Ce module est une interface compatible FTP ainsi qu'un système de gestion " -#~ "documentaire.\n" -#~ " Avec ce module, vous pourrez non seulement accéder à des documents " -#~ "partout dans OpenERP\n" -#~ " mais aussi vous connecter à ces documents à travers le système de " -#~ "fichier en utilisant le \n" -#~ " client FTP.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Serveur FTP intégré au système de gestion documentaire" diff --git a/addons/document_ftp/i18n/gl.po b/addons/document_ftp/i18n/gl.po deleted file mode 100644 index 907aae1db12..00000000000 --- a/addons/document_ftp/i18n/gl.po +++ /dev/null @@ -1,160 +0,0 @@ -# Galician translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-02-24 01:08+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Galician \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuración automática de directorios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique a dirección de rede na que o seu servidor de OpenERP debería estar " -"dispoñible para os usuarios finais. Isto depende da topoloxía de rede e da " -"configuración, e só afectará aos enlaces mostrados aos usuarios. O formato é " -"ANFITRIÓN:PORTO e o anfitrión por defecto (localhost) só é adecuado para " -"acceso desde a propia máquina do servidor." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Procurar arquivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuración de servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Explorar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Dirección do servidor ou IP e porto para que os usuarios podan conectar ao " -"acceso DMS." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Repositorio compartido (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Enderezo" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Examinar documento por FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuración da aplicación do coñecemento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Examinar documento" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Examinar documento" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Esta é unha Interfaz FTP para o sistema de xestión de documentos.\n" -#~ " Con este módulo non podrías acceder aos documentos a través de " -#~ "OpenERP\n" -#~ " sen embargo pódese conectar con el a través do sistema de arquivos " -#~ "usando o cliente FTP\n" - -#~ msgid "Image" -#~ msgstr "Imaxe" - -#~ msgid "Configuration Progress" -#~ msgstr "Progreso da Configuración" - -#~ msgid "title" -#~ msgstr "título" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado con sistema de xestión de documentos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" diff --git a/addons/document_ftp/i18n/hr.po b/addons/document_ftp/i18n/hr.po deleted file mode 100644 index f72569a43d4..00000000000 --- a/addons/document_ftp/i18n/hr.po +++ /dev/null @@ -1,140 +0,0 @@ -# Croatian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-28 20:42+0000\n" -"Last-Translator: Goran Kliska \n" -"Language-Team: Croatian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Postavke FTP poslužitelja" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automatska postava mapa" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Predstavlja adresu na mreži, na kojoj bi OpenERP trebao biti dostupan " -"krajnjim korisnicima. Ona ovisi o VaÅ¡oj topologiji mreže kao i postavkama, i " -"utjeÄe jedino na linkove prikazane krajnjim korisnicima. Format zapisa je " -"HOST:PORT a zadani host (localhost) korisi se jedino za pristup sa samog " -"poslužitelja." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Pretraži datoteke" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Kliknite na poveznicu za pregled dokumenata" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP poslužitelj" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Postave FTP poslužitelja" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Pregled dokumenata" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Pregledaj" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"IP adresa i port na koji se korisnici spajaju na DMS (sustav upravljana " -"dokumentima)" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Dijeljeni repozitorij (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "IP adresa" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Odustani" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Pregled dokumenata na FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Pregled dokumenta" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ili" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Pregled dokumenta" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - -#~ msgid "Image" -#~ msgstr "Slika" - -#~ msgid "title" -#~ msgstr "naslov" - -#~ msgid "_Cancel" -#~ msgstr "_Odustani" diff --git a/addons/document_ftp/i18n/hu.po b/addons/document_ftp/i18n/hu.po deleted file mode 100644 index dce7675359f..00000000000 --- a/addons/document_ftp/i18n/hu.po +++ /dev/null @@ -1,136 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * document_ftp -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-02-03 12:46+0000\n" -"Last-Translator: Krisztian Eyssen \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTP szerver beállítása" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automatikus könyvtárbeállítás" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Hálózati címek megjelenítése melyen az OpenERP szervere elérhetÅ‘ a vég-" -"felhasználók részére. Ez a hálózati beállítások topológiájától függ, és csak " -"a felhasználóknak megjelenített elérési utakkat befolyásolja. A HOST:PORT " -"forma és az alapértelmezett host (localhost) csak akkor megfelelÅ‘, ha a " -"szerver maga az alapgép." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Fájlok böngészése" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Kattintson az URL elérési útra a dokumentum böngészéséhez" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP szerver" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP szerver konfiguráció" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Dokumantumok böngészése" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Böngészés" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Szerver cím vagy IP és port amelyen a felhasználónak kapcsolódnia kell a DMS " -"eléréshez" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Megosztott (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Cím" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Mégsem" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Documentum FTP böngészése" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "TudáskezelÅ‘ programok beállítása" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Dokumentum böngészése" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "vagy" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Dokumentum böngészése" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Kép" - -#~ msgid "Configuration Progress" -#~ msgstr "Beállítás elÅ‘rehaladása" diff --git a/addons/document_ftp/i18n/it.po b/addons/document_ftp/i18n/it.po deleted file mode 100644 index 1c38e9ab6b9..00000000000 --- a/addons/document_ftp/i18n/it.po +++ /dev/null @@ -1,161 +0,0 @@ -# Italian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-15 23:09+0000\n" -"Last-Translator: Sergio Corato \n" -"Language-Team: Italian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configura FTP server" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configurazione automatica Directory" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indica l'indirizzo di rete su cui i vostri server OpenERP possono essere " -"disponibili all'utente finale. Questo dipende dalla topologia di rete e " -"dalla configurazione, e interessa solamente i link visualizzati dagli " -"utenti. Il formato è HOST:PORTA e il default host (localhost) è adatto " -"solamente per l'accesso dal server su se stesso.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Sfoglia files" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Cliccare l'url per sfogliare i documenti" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Server FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configurazione server FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Sfoglia Documenti" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Sfoglia" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Indirizzo Server o IP e porta a cui gli utenti dovrebbero connettersi per " -"l'accesso al DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Deposito condiviso (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Indirizzo" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Annulla" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Browse FTP documenti" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configurazione applicazione know how" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Sfoglia documento" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "o" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Sfoglia documento" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "titolo" - -#~ msgid "Image" -#~ msgstr "Immagine" - -#~ msgid "_Cancel" -#~ msgstr "_Annulla" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Questo è un supporto all'interfaccia FTP con il Sistema di Gestione " -#~ "Documentale.\n" -#~ " Con questo modulo non solo è possibile accedere ai documenti da OpenERP\n" -#~ " ma è altresì possibile connettersi ad esso tramite l'accesso ai files " -#~ "direttamente\n" -#~ " via client FTP.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "FTP server integrato con il Sistema di Gestione Documentale" - -#~ msgid "Configuration Progress" -#~ msgstr "Avanzamento Configurazione" diff --git a/addons/document_ftp/i18n/ja.po b/addons/document_ftp/i18n/ja.po deleted file mode 100644 index c1cc07d3a1d..00000000000 --- a/addons/document_ftp/i18n/ja.po +++ /dev/null @@ -1,136 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-04-21 16:39+0000\n" -"Last-Translator: Masaki Yamaya \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTPサーãƒã‚’設定ã™ã‚‹" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "自動ディレクトã®è¨­å®š" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"ユーザãŒã‚¢ã‚¯ã‚»ã‚¹ã™ã‚‹OpenERPサーãƒã®ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ã‚¢ãƒ‰ãƒ¬ã‚¹ã‚’指定ã—ã¦ä¸‹ã•ã„。ãã‚Œã¯ãƒãƒƒãƒˆãƒ¯ãƒ¼ã‚¯ãƒˆãƒãƒ­ã‚¸ã¨ãã®è¨­å®šã«ã‚ˆã£ã¦æ±ºã¾ã‚Šã€ãƒ¦ãƒ¼ã‚¶ã«è¡¨ç¤ºã•ã‚Œã‚‹ãƒªãƒ³" -"クã«ãªã‚Šã¾ã™ã€‚\r\n" -"指定ã®å½¢å¼ã¯ HOST:PORT ã§ã‚ã‚Šã€ãƒ‡ãƒ•ã‚©ãƒ«ãƒˆã®ãƒ›ã‚¹ãƒˆï¼ˆãƒ­ãƒ¼ã‚«ãƒ«ãƒ›ã‚¹ãƒˆï¼‰ãŒã‚µãƒ¼ãƒã‹ã‚‰ã®ã‚¢ã‚¯ã‚»ã‚¹ã«æœ€ã‚‚é©ã—ã¦ã„ã¾ã™ã€‚" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "ファイルをブラウズã™ã‚‹" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTPサーãƒ" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTPサーãƒã®è¨­å®š" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_ブラウズ(_B)" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "サーãƒã‚¢ãƒ‰ãƒ¬ã‚¹ã‚ã‚‹ã„ã¯DMSアクセスã®ãŸã‚ã«æŽ¥ç¶šã™ã‚‹IPã¨ãƒãƒ¼ãƒˆ" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "共有リプジトリ(FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ä½æ‰€" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP文書をブラウズã™ã‚‹" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "知識アプリケーションã®è¨­å®š" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "文書をブラウズã™ã‚‹" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "文書をブラウズã™ã‚‹" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "ç”»åƒ" - -#~ msgid "title" -#~ msgstr "タイトル" - -#~ msgid "_Cancel" -#~ msgstr "キャンセル(_C)" diff --git a/addons/document_ftp/i18n/mk.po b/addons/document_ftp/i18n/mk.po deleted file mode 100644 index 49a929fbe89..00000000000 --- a/addons/document_ftp/i18n/mk.po +++ /dev/null @@ -1,130 +0,0 @@ -# Macedonian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-07 07:50+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Macedonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Конфигурирај FTP Ñервер" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "ÐвтоматÑка конфигурација на директориум" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Ја покажува адреÑата на која OpenERP ќе биде доÑтапен за крајните кориÑници. " -"Ова завиÑи од мрежната топологија и конфигурација и има влијание Ñамо врз " -"линковите прикажани на кориÑниците. Форматот е HOST:PORT и Ñтандардниот хоÑÑ‚ " -"(localhost) е за приÑтап Ñамо преку Ñамиот Ñервер.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "ПрелиÑтување фајлови" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Кликни на url-то за прелиÑтување на документите" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Ñервер" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Конфигурација на FTP Ñерверот" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "ПрелиÑтување документи" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Прегледај" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"ÐдреÑа на Ñерверот или IP и порт на кои кориÑниците Ñе поврзуваат за приÑтап " -"до DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Заеднички магацин (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ÐдреÑа" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Откажи" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "ПрелиÑтување на документи преку FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Конфигурација за апликација Знаење" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "ПрелиÑтување на документи" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "или" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "ПрелиÑтај документ" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" diff --git a/addons/document_ftp/i18n/mn.po b/addons/document_ftp/i18n/mn.po deleted file mode 100644 index d0c91660d1c..00000000000 --- a/addons/document_ftp/i18n/mn.po +++ /dev/null @@ -1,138 +0,0 @@ -# Mongolian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-08-22 03:45+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Mongolian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTP СервÑÑ€ тохируулах" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Ðвтомат Директорын Тохиргоо" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"ЭцÑийн Ñ…ÑÑ€ÑглÑгчидийн OpenERP-руу хандаж чадах ÑүлжÑÑний хаÑгийг илÑрхийлнÑ. " -"Ð­Ð½Ñ Ñ‚Ð°Ð½Ð°Ð¹ ÑүлжÑÑний бүтÑц, Ñ‚Ð¾Ñ…Ð¸Ñ€Ð³Ð¾Ð¾Ð½Ð¾Ð¾Ñ Ñ…Ð°Ð¼Ð°Ð°Ñ€Ð°Ñ… бөгөөд зөвхөн Ñ…ÑÑ€ÑглÑгчдÑд " -"харагдах холбооÑÑ‚ л нөлөөтÑй. Формат нь HOST:PORT гÑÑÑн загвартай бөгөөд " -"анхын host нь (localhost) гÑж байдаг нь зөвхөн Ñервер машин дÑÑÑ€ÑÑÑ Ñ…Ð°Ð½Ð´Ð°Ñ…Ð°Ð´ " -"л тохирно." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Файлуудыг тольдох" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Сервер" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP Серверийн тохиргоо" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Тольдох" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "DMS хандалтаар хандах Ñерверийн хаÑг ÑÑвÑл IP болон порт." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Ðгуулахыг хуваалцах (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ХаÑг" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP-ÑÑÑ€ баримт оруулах" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "ÐœÑдлÑгийн Програмын Тохиргоо" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Баримт оруулах" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Оруулах баримт" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "гарчиг" - -#~ msgid "Image" -#~ msgstr "Зураг" - -#~ msgid "_Cancel" -#~ msgstr "_Цуцлах" diff --git a/addons/document_ftp/i18n/nb.po b/addons/document_ftp/i18n/nb.po deleted file mode 100644 index ea35c028cb3..00000000000 --- a/addons/document_ftp/i18n/nb.po +++ /dev/null @@ -1,140 +0,0 @@ -# Norwegian Bokmal translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-09-06 14:45+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Norwegian Bokmal \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfigurer FTP serveren" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automatisk Katalog Konfigurasjon." - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indikere nettverksadressen som din OpenERP server bør være tilgjengelige for " -"sluttbrukerne. Dette avhenger av nettverkstopologi og konfigurasjon, og vil " -"bare pÃ¥virke lenker som vises til brukerne. Formatet er HOST: PORT og " -"standard verten (lokalhost) er bare egnet for tilgang fra serveren maskinen " -"selv .." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Bla i filer" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP-tjener" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP Serverkonfigurasjon" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Bla gjennom" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Server adresse eller IP og port til hvilke brukere som skal koble seg til " -"for DMS tilgang" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Wikimedia Commons (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresse" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Document FTP Bla i." - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Kunnskap Programkonfigurasjon" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Dokument Bla i." - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Bla igjennom dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_konfig_innhold" - -#~ msgid "Image" -#~ msgstr "Bilde" - -#~ msgid "title" -#~ msgstr "tittel" - -#~ msgid "_Cancel" -#~ msgstr "_Avbryt" diff --git a/addons/document_ftp/i18n/nl.po b/addons/document_ftp/i18n/nl.po deleted file mode 100644 index af4b2c87b4a..00000000000 --- a/addons/document_ftp/i18n/nl.po +++ /dev/null @@ -1,160 +0,0 @@ -# Dutch translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-24 21:49+0000\n" -"Last-Translator: Erwin van der Ploeg (BAS Solutions) \n" -"Language-Team: Dutch \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTP Server configureren" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Auto map configuratie" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Geeft het netwerkadres aan waarop uw OpenERP server te vinden zou moeten " -"zijn voor eindgebruikers. Dit hangt af van netwerk topologie en configuratie " -"en zal alleen de link beïnvloeden die wordt getoond aan de gebruikers. Het " -"formaat HOST:PORT en standaard host (localhost) zijn allen geschikt voor " -"toegang vanaf de server machine zelf." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Bestanden bladeren" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Klik op de url om door de documenten te bladeren" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP server configuratie" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Blader door documenten" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Bladeren" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Server adres of IP en poort waarmee gebruikers moeten verbinden voor DMS " -"toegang" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Gedeelde repository (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adres" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Annuleren" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Document FTP bladeren" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Kennis applicatie configuratie" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Document bladeren" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "of" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Document bladeren" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "titel" - -#~ msgid "Image" -#~ msgstr "Afbeelding" - -#~ msgid "Configuration Progress" -#~ msgstr "Configuratie voortgang" - -#~ msgid "_Cancel" -#~ msgstr "_Annuleren" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Dit is een support FTP interface met documentbeheer systeem.\n" -#~ " Met deze module kunt u niet alleen documenten vanuit OpenERP benaderen,\n" -#~ " maar u kunt ze ook via bestandsbeheer benaderen met gebruikmaking van " -#~ "een\n" -#~ " FTP client.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Geïntegreerde FTP server met documentbeheer systeem" diff --git a/addons/document_ftp/i18n/pl.po b/addons/document_ftp/i18n/pl.po deleted file mode 100644 index e1ffd17c130..00000000000 --- a/addons/document_ftp/i18n/pl.po +++ /dev/null @@ -1,142 +0,0 @@ -# Polish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-07 20:16+0000\n" -"Last-Translator: Andrzej Król \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfiguruj Serwer FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Autokonfiguracja katalogu" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Wskazuje adres sieciowy na którym twój serwer OpenERP powinien być dostÄ™pny " -"dla użytkowników koÅ„cowych. To zależy od topologii sieci i ustawieÅ„ i ma " -"efekt tylko w odniesieniu do linków wyÅ›wietlanych użytkownikom. Format to " -"HOST:PORT i domyÅ›lny (localhost) jest do użytku tylko z poziomu serwera." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "PrzeglÄ…daj pliki" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Kliknij adres url żeby przeglÄ…dać dokumenty" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Serwer FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Konfiguracja serwera FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "PrzeglÄ…daj Dokumenty" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_PrzeglÄ…daj" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adres serwera lub IP i port do którego użytkownik powinien siÄ™ podÅ‚Ä…czyć dla " -"dostÄ™pu do DMS (System ZarzÄ…dzania Dokumentami)." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Współdzielone repozytorium (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresy" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Anuluj" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP PrzeglÄ…daj dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Konfiguracja aplikacji wiedzy" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "PrzeglÄ…danie dokumentów" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "lub" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "PrzeglÄ…daj dokumenty" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "tytuÅ‚" - -#~ msgid "Configuration Progress" -#~ msgstr "PostÄ™p konfiguracji" - -#~ msgid "Image" -#~ msgstr "Obraz" - -#~ msgid "_Cancel" -#~ msgstr "_Anuluj" diff --git a/addons/document_ftp/i18n/pt.po b/addons/document_ftp/i18n/pt.po deleted file mode 100644 index 60d4a649ea4..00000000000 --- a/addons/document_ftp/i18n/pt.po +++ /dev/null @@ -1,159 +0,0 @@ -# Portuguese translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-11 17:33+0000\n" -"Last-Translator: Rui Franco (multibase.pt) \n" -"Language-Team: Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar servidor de FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuração automática de diretórios" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indicar o endereço de rede em que o servidor OpenERP deve ser acedido por " -"utilizadores finais. Isso depende da topologia da rede e configuração, e só " -"vai afectar os links exibidos aos utilizadores. O formato é HOST:PORT e o " -"host padrão (localhost) só é adequado para o acesso da máquina do servidor " -"em si.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Procurar Ficheiros" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Carregue no URL para percorrer os documentos" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuração do servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Percorrer os documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Procurar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Endereço do servidor ou IP e a porta à qual os utilizadores devem se conetar " -"para acesso DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Repositório Partilhado (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Endereço" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Cancelar" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Procurar Documento FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuração da Aplicação do conhecimento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Pesquisar Documento" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ou" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Procurar Documento" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Imagem" - -#~ msgid "Configuration Progress" -#~ msgstr "Processo de configuração" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP integrado com sistema de gestão documental" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Isto é um interface entre o FTP e a gestão documental\n" -#~ " Com este módulo, não só será possível aceder a dcoumentos através do " -#~ "openERP\n" -#~ " como também será possível ligar-se aos mesmos através de um cliente FTP\n" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" - -#~ msgid "title" -#~ msgstr "Título" diff --git a/addons/document_ftp/i18n/pt_BR.po b/addons/document_ftp/i18n/pt_BR.po deleted file mode 100644 index a1e1d7ee159..00000000000 --- a/addons/document_ftp/i18n/pt_BR.po +++ /dev/null @@ -1,160 +0,0 @@ -# Brazilian Portuguese translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# Renato Lima , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-10 15:06+0000\n" -"Last-Translator: Projetaty Soluções OpenSource \n" -"Language-Team: Brazilian Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configurar Servidor de FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configuração Automática de Diretório" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indique o endereço em que seu servidor OpenERP deve ser acessível para os " -"usuários finais. Isso depende da sua topologia de rede e configuração. O " -"formato é HOST:PORT e o host padrão (localhost) é adequado apenas para " -"acesso a partir da máquina própria maquina.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Navegar pelos Arquivos" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Clique na url para navegar pelos documentos" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Servidor FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configuração do Servidor FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Navegar pelos Documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "(_B) Navegar" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"O endereço do servidor ou IP e porta que o usuário deve conectar para acesso " -"DMS." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Repositório Compartilhado (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Endereço" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Cancelar" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Navegador FTP de Documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configuração da Aplicação de Conhecimento" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Navegador de Documentos" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ou" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Navegar por Documentos" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Esta é uma interface de suporte a FTP com Sistema de Gestão de Documentos.\n" -#~ " Com este módulo você não só seria capaz de acessar documentos através do " -#~ "OpenERP\n" -#~ " mas você também poderia acessar os documentos através do sistema de " -#~ "arquivos usando o\n" -#~ " cliente FTP.\n" - -#~ msgid "Image" -#~ msgstr "Imagem" - -#~ msgid "Configuration Progress" -#~ msgstr "Configuração em Progresso" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Servidor FTP Integrado com Sistema de Gestão de Documentos" - -#~ msgid "_Cancel" -#~ msgstr "_Cancelar" - -#~ msgid "title" -#~ msgstr "título" diff --git a/addons/document_ftp/i18n/ro.po b/addons/document_ftp/i18n/ro.po deleted file mode 100644 index 3925b0bf006..00000000000 --- a/addons/document_ftp/i18n/ro.po +++ /dev/null @@ -1,161 +0,0 @@ -# Romanian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-04 13:13+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Romanian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Configureaza Serverul FTP" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Configurare Director Automata" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Indica adresa retelei la care serverul OpenERP ar trebui sa fie accesibil " -"utilizatorilor finali. Aceasta depinde de topologia si configurarea retelei " -"dumneavoastra, si va afecta doar link-urile afisate utilizatorilor. Formatul " -"este HOST:PORT, iar gazda predenifinta (localhost) (gazda locala) este " -"potrivita doar pentru accesul de la server.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "cunostinte.config.setari" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Rasfoieste fisiere" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Faceti click pe url pentru a cauta documentele" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Server FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Configurare Server FTP" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Cautare Documente" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Rasfoieste" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adresa serverului sau IP-ul si portul la care utilizatorii ar trebui sa se " -"conecteze pentru acces DMS" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Depozit comun (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresa" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Anuleaza" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Rasfoieste Documentul FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Configurare Aplicare Cunostinte" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Rasfoire document" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "sau" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Rasfoieste Documentul" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_continuturi" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Aceasta este o Interfata FTP suport cu sistemul managementului " -#~ "documentelor.\n" -#~ " Cu acest modul veti putea nu doar sa accesati documente prin OpenERP, " -#~ "ci\n" -#~ " va veti putea si conecta la ele prin sistemul de fisiere folosind\n" -#~ " clientul FTP.\n" - -#~ msgid "Image" -#~ msgstr "Imagine" - -#~ msgid "Configuration Progress" -#~ msgstr "Progres configurare" - -#~ msgid "title" -#~ msgstr "titlu" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Server FTP integrat cu Sistemul Managementului Documentelor" - -#~ msgid "_Cancel" -#~ msgstr "_Anuleaza" diff --git a/addons/document_ftp/i18n/ru.po b/addons/document_ftp/i18n/ru.po deleted file mode 100644 index d800bc2ccc6..00000000000 --- a/addons/document_ftp/i18n/ru.po +++ /dev/null @@ -1,160 +0,0 @@ -# Russian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-28 12:44+0000\n" -"Last-Translator: Chertykov Denis \n" -"Language-Team: Russian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "ÐаÑтройка FTP Ñервера" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "ÐвтоматичеÑÐºÐ°Ñ Ð½Ð°Ñтройка каталога" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Указывает Ñетевой адреÑ, на котором Ñервер OpenERP должен быть доÑтупен Ð´Ð»Ñ " -"конечных пользователей. Это завиÑит от конфигурации и топологии Ñети и " -"влиÑет только на отображение ÑÑылок. Формат ÐДРЕС:ПОРТ и Ð°Ð´Ñ€ÐµÑ Ð¿Ð¾ умолчанию " -"(localhost) подходит только Ð´Ð»Ñ Ð´Ð¾Ñтупа Ñ Ñамого Ñервера." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "ПроÑмотр файлов" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Щелкните URL-Ð°Ð´Ñ€ÐµÑ Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра документов" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Сервер" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "ÐаÑтройка FTP Ñервера" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "ПроÑмотр документов" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Обзор" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"ÐÐ´Ñ€ÐµÑ Ñервера или IP и порт Ð´Ð»Ñ ÑÐ¾ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÑŒÐ·Ð¾Ð²Ð°Ñ‚ÐµÐ»Ñ Ð¸ доÑтупа к " -"документам" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Общее хранилище (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "ÐдреÑ" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Отмена" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "ПроÑмотр документа через FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "ÐаÑтройка Ð¿Ñ€Ð¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð—Ð½Ð°Ð½Ð¸Ñ" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "ПроÑмотр документа" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "или" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "ПроÑмотр документа" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Изображение" - -#~ msgid "Configuration Progress" -#~ msgstr "Выполнение наÑтройки" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Сервер FTP интегрированный Ñ ÑиÑтемой ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸" - -#~ msgid "title" -#~ msgstr "title" - -#~ msgid "_Cancel" -#~ msgstr "_Отмена" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Это поддержка интерфейÑа FTP к ÑиÑтеме ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸.\n" -#~ " С помощью Ñтого Ð¼Ð¾Ð´ÑƒÐ»Ñ Ð²Ñ‹ не только получите доÑтуп к документам через " -#~ "OpenERP,\n" -#~ " но вы также Ñможете ÑоединÑÑ‚ÑŒÑÑ Ñ Ð½ÐµÐ¹ через файловую ÑиÑтему, иÑÐ¿Ð¾Ð»ÑŒÐ·ÑƒÑ " -#~ "\n" -#~ " FTP-клиент.\n" diff --git a/addons/document_ftp/i18n/sk.po b/addons/document_ftp/i18n/sk.po deleted file mode 100644 index 658a361ecd1..00000000000 --- a/addons/document_ftp/i18n/sk.po +++ /dev/null @@ -1,127 +0,0 @@ -# Slovak translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-06-09 09:40+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Slovak \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "PrehľadávaÅ¥ súbory" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Nastavenia FTP Servera" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresa" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" - -#~ msgid "Image" -#~ msgstr "Obrázok" diff --git a/addons/document_ftp/i18n/sl.po b/addons/document_ftp/i18n/sl.po deleted file mode 100644 index 3b245ddc09f..00000000000 --- a/addons/document_ftp/i18n/sl.po +++ /dev/null @@ -1,139 +0,0 @@ -# Slovenian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-10-19 07:34+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Slovenian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfiguriraj FTP strežnik" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Avto konfiguracija map" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"DoloÄa omrežni naslov, na katerem bo dosegljiv vaÅ¡ OpenERP server za konÄne " -"uporabnike. To je odvisno od topologije in nastavitev vaÅ¡ega omrežja. Vpliva " -"samo na povezavo, ki se izpiÅ¡e uporabniku. Format je HOST:PORT in privzeti " -"strežnik (localhost) je primeren samo za dostop iz serverja samega." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Brskanje Datoteke" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Potrdite url za brskanje po dokumentih" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "Strežnik FTP" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "Konfiguracija FTP strežnika" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "brskanje po dokumentih" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Prebrskaj" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Naslov strežnika ali IP in vrata, na katerega se bodo uporabniki povezali za " -"DMS dostop" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Deljeni repozitorij (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Naslov" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Preklic" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP brskanje po dokumentih" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Nastavitev aplikacije znanja" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Brskanje po dokumentih" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ali" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Brskanje po dokumentu" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "Slika" - -#~ msgid "title" -#~ msgstr "naslov" - -#~ msgid "_Cancel" -#~ msgstr "_PrekliÄi" diff --git a/addons/document_ftp/i18n/sr.po b/addons/document_ftp/i18n/sr.po deleted file mode 100644 index 347d5aa9218..00000000000 --- a/addons/document_ftp/i18n/sr.po +++ /dev/null @@ -1,156 +0,0 @@ -# Serbian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-11-14 08:02+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Serbian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Auto Podesavanje dIrektorijuma" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Pretrazi fajlove" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "KOnfiguracija FTP Servera" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Browse" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adresa Servera ili IP i Port na koji bi korisnik trebalo da se konektuje za " -"DMS pristup" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Deljeno skladiste (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP pretrazi Dokumente" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Pretrazi Dokumente" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Pretrazi Dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "Naslov" - -#~ msgid "Configuration Progress" -#~ msgstr "Konfiguracioni Proces" - -#~ msgid "Image" -#~ msgstr "Slika" - -#~ msgid "_Cancel" -#~ msgstr "_Cancel" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Ovo podrzava FTP Interfejs sa dokument menadzment sistemom.\n" -#~ " Sa ovim modulom necete biti u mogucnosti da samo pristupite dokumentima " -#~ "kroz OpenERP\n" -#~ " nego ce te takodje moci da se konektujete uz pomoc modula kroz fajl " -#~ "sistem koristeci\n" -#~ " FTP klijenta.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Integrisani FTP Server sa Dokument Menadzment Sistemom" diff --git a/addons/document_ftp/i18n/sr@latin.po b/addons/document_ftp/i18n/sr@latin.po deleted file mode 100644 index aea6e2f32bc..00000000000 --- a/addons/document_ftp/i18n/sr@latin.po +++ /dev/null @@ -1,161 +0,0 @@ -# Serbian latin translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-04-05 15:29+0000\n" -"Last-Translator: Milan Milosevic \n" -"Language-Team: Serbian latin \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Podesi FTP server" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Auto-podeÅ¡avanje direktorijuma" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Odredite adresu mreže na koju bi VaÅ¡i OpenERP server trebalo da bude " -"dostupan za konaÄne korisnike. Ovo zavisi od VaÅ¡e mrežne toplogije i " -"podeÅ¡avanja, i neće imati uticaja na linkove prikazane korisnicima. Format " -"je HOST:PORT i domaćin po defaultu (localhost) je jedino prikladan za " -"pristup na server sa same maÅ¡ine." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Pretraži datoteke" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "PodeÅ¡avanje FTP servera" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Pretraži" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Adresa Servera ili IP i Port na koji bi korisnik trebalo da se konektuje za " -"DMS pristup" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Deljeno skladiÅ¡te" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adresa" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Pretraži FTP dokumente" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "PodeÅ¡avanje aplikacije znanja" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Pretrazi Dokumente" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Pretraži dokumenta" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Configuration Progress" -#~ msgstr "Konfiguracioni Proces" - -#~ msgid "Image" -#~ msgstr "Slika" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Ovo podrzava FTP Interfejs sa dokument menadzment sistemom.\n" -#~ " Sa ovim modulom necete biti u mogucnosti da samo pristupite dokumentima " -#~ "kroz OpenERP\n" -#~ " nego ce te takodje moci da se konektujete uz pomoc modula kroz fajl " -#~ "sistem koristeci\n" -#~ " FTP klijenta.\n" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Integrisani FTP Server sa Dokument Menadzment Sistemom" - -#~ msgid "title" -#~ msgstr "naslov" - -#~ msgid "_Cancel" -#~ msgstr "_Otkaži" diff --git a/addons/document_ftp/i18n/sv.po b/addons/document_ftp/i18n/sv.po deleted file mode 100644 index c3ccbceeb70..00000000000 --- a/addons/document_ftp/i18n/sv.po +++ /dev/null @@ -1,143 +0,0 @@ -# Swedish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-15 11:23+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Swedish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "Konfigurera FTP-servern" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Automatisk katalogkonfiguration" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"Ange nätverksadressen som din OpenERP servern ska vara nÃ¥bar pÃ¥ för " -"slutanvändare. Det beror pÃ¥ ditt nätverk topologi och konfiguration, och " -"kommer endast att pÃ¥verka hur länkarna visas för användarna. Formatet är " -"värd: PORT och förvald värd (localhost) är endast lämplig för Ã¥tkomst frÃ¥n " -"servern själva maskinen .." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Bläddra bland filer" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP-server" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP-serverkonfiguration" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Bläddra" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"Serveradress eller IP och den port som användarna ska ansluta till för DMS-" -"tillgÃ¥ng" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Delat arkiv (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adress" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "Bläddra bland dokumenten via FTP" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Konfiguration av kunskapshanteringsapplikationen" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Dokumentbläddring" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Bläddra bland dokument" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "title" -#~ msgstr "titel" - -#~ msgid "Image" -#~ msgstr "Bild" - -#~ msgid "Configuration Progress" -#~ msgstr "Konfigurationsförlopp" - -#~ msgid "_Cancel" -#~ msgstr "_Avbryt" diff --git a/addons/document_ftp/i18n/tr.po b/addons/document_ftp/i18n/tr.po deleted file mode 100644 index 8da0245b745..00000000000 --- a/addons/document_ftp/i18n/tr.po +++ /dev/null @@ -1,158 +0,0 @@ -# Turkish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-06-23 19:32+0000\n" -"Last-Translator: Ayhan KIZILTAN \n" -"Language-Team: Turkish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "FTP Sunucusunu Yapılandır" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "Otomatik Klasör Yapılandırması" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"OpenERP sunucusunda son kullanıcıların eriÅŸebileceÄŸi aÄŸ adresini belirtir. " -"Bu, aÄŸ yapınıza ve yapılandırmasına baÄŸlıdır ve yalnızca kullanıcılara " -"gösterilen aÄŸları etkiler. Formatı HOST:PORT ÅŸeklindedir ve varsayılan " -"sunucu (localhost) yalnızca sunucu cihazından eriÅŸim için uygundur." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "Dosyalara Gözat" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "Dökümanları incelemek için adrese tıklayın" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP Sunucusu" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP Sunucusu Yapılandırması" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "Dökümanları Ä°ncele" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "_Gözat" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" -"DMS eriÅŸimi için kullanıcıların baÄŸlanacağı sunucu adresi ya da IP ve " -"baÄŸlantı noktasıdır." - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "Paylaşılan Havuz (FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "Adres" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "Ä°ptal" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "FTP BelgeTaraması" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "Bilgi Birikimi Uygulama Ayarları" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "Belge Tarama" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "ya da" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "Belge Tara" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "" -#~ "Bu bir belge yönetim sistemli destek FTP Arayüzüdür.\n" -#~ " Bu modül ile yalnızca OpenERP nin içinden belgelere eriÅŸmekle kalmayıp \n" -#~ " FTP istemcisini kullanarak dosya sistemi içinden de \n" -#~ " baÄŸlanabileceksiniz.\n" - -#~ msgid "Image" -#~ msgstr "Resim" - -#~ msgid "Configuration Progress" -#~ msgstr "Yapılandırma GeliÅŸimi" - -#~ msgid "title" -#~ msgstr "unvan" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "Belge Yönetim Sistemi ile entegre FTP Sunucusu" - -#~ msgid "_Cancel" -#~ msgstr "_Vazgeç" diff --git a/addons/document_ftp/i18n/vi.po b/addons/document_ftp/i18n/vi.po deleted file mode 100644 index 143fb382ba5..00000000000 --- a/addons/document_ftp/i18n/vi.po +++ /dev/null @@ -1,124 +0,0 @@ -# Vietnamese translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-01-17 09:02+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Vietnamese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "" diff --git a/addons/document_ftp/i18n/zh_CN.po b/addons/document_ftp/i18n/zh_CN.po deleted file mode 100644 index 321cf5115e5..00000000000 --- a/addons/document_ftp/i18n/zh_CN.po +++ /dev/null @@ -1,150 +0,0 @@ -# Chinese (Simplified) translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-21 15:11+0000\n" -"Last-Translator: Wei \"oldrev\" Li \n" -"Language-Team: Chinese (Simplified) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "é…ç½® FTP æœåŠ¡å™¨" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "自动目录设置" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"输入你的最终用户用于连接你OpenERPæœåŠ¡å™¨çš„网å€ã€‚基于你的网络é…置,会影å“客户端显示的链接。格å¼æ˜¯ï¼šä¸»æœº:端å£ã€‚注æ„localhoståªæ˜¯åœ¨æœåŠ¡å™¨æœ¬æœº" -"æ‰æœ‰ç”¨çš„。" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "knowledge.config.settings" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "æµè§ˆæ–‡ä»¶" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "点击 urk æ¥æµè§ˆæ–‡æ¡£" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP æœåŠ¡å™¨" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP æœåŠ¡å™¨è®¾ç½®" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "æµè§ˆæ–‡æ¡£" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "æµè§ˆ(_B)" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "æœåŠ¡å™¨åœ°å€æˆ–IP地å€ï¼Œä»¥åŠç«¯å£ã€‚用于用户连接文档管ç†ç³»ç»Ÿã€‚" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "共享仓库(FTP)" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "地å€" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "å–消" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "文档 FTP æµè§ˆ" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "知识管ç†åº”用设置" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "文档æµè§ˆ" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "或" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "æµè§ˆæ–‡æ¡£" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "图åƒ" - -#~ msgid "title" -#~ msgstr "标题" - -#~ msgid "Integrated FTP Server with Document Management System" -#~ msgstr "æ•´åˆ FTP æœåŠ¡å™¨ä¸Žæ–‡æ¡£ç®¡ç†ç³»ç»Ÿ" - -#~ msgid "_Cancel" -#~ msgstr "å–消(_C)" - -#~ msgid "" -#~ "This is a support FTP Interface with document management system.\n" -#~ " With this module you would not only be able to access documents through " -#~ "OpenERP\n" -#~ " but you would also be able to connect with them through the file system " -#~ "using the\n" -#~ " FTP client.\n" -#~ msgstr "此模å—为文档管ç†å¢žåŠ äº†FTP支æŒã€‚安装了这个模å—ä½ ä¸ä»…å¯ä»¥åœ¨OpenERP里访问文档还能通过FTP客户端在文件系统上访问这些文件。\n" - -#~ msgid "Configuration Progress" -#~ msgstr "设置进度" diff --git a/addons/document_ftp/i18n/zh_TW.po b/addons/document_ftp/i18n/zh_TW.po deleted file mode 100644 index b78383f24a4..00000000000 --- a/addons/document_ftp/i18n/zh_TW.po +++ /dev/null @@ -1,135 +0,0 @@ -# Chinese (Traditional) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-08-29 09:46+0000\n" -"Last-Translator: Bonnie Duan \n" -"Language-Team: Chinese (Traditional) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:43+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Configure FTP Server" -msgstr "設置FTP 伺æœå™¨" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_configuration -msgid "Auto Directory Configuration" -msgstr "自動目錄é…ç½®" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "" -"Indicate the network address on which your OpenERP server should be " -"reachable for end-users. This depends on your network topology and " -"configuration, and will only affect the links displayed to the users. The " -"format is HOST:PORT and the default host (localhost) is only suitable for " -"access from the server machine itself.." -msgstr "" -"說明OpenERPçš„æœå‹™å™¨ä¸Šçš„網絡地å€æ‡‰è©²ç‚ºæœ€çµ‚用戶訪å•ã€‚這å–決於您的網絡拓撲和é…置,而且åªæœƒå½±éŸ¿é¡¯ç¤ºçµ¦ç”¨æˆ¶çš„éˆæŽ¥ã€‚çš„æ ¼å¼ç‚ºHOST:PORTå’Œé è¨­çš„主機" -"(localhost)的訪å•å¾žæœå‹™å™¨æœ¬èº«åªé©åˆ.." - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_knowledge_config_settings -msgid "knowledge.config.settings" -msgstr "" - -#. module: document_ftp -#: model:ir.actions.act_url,name:document_ftp.action_document_browse -msgid "Browse Files" -msgstr "ç€è¦½æª”案" - -#. module: document_ftp -#: help:knowledge.config.settings,document_ftp_url:0 -msgid "Click the url to browse the documents" -msgstr "" - -#. module: document_ftp -#: field:document.ftp.browse,url:0 -msgid "FTP Server" -msgstr "FTP 伺æœå™¨" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_config_auto_directory -msgid "FTP Server Configuration" -msgstr "FTP Server Configuration" - -#. module: document_ftp -#: field:knowledge.config.settings,document_ftp_url:0 -msgid "Browse Documents" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "_Browse" -msgstr "ç€è¦½(_B)" - -#. module: document_ftp -#: help:document.ftp.configuration,host:0 -msgid "" -"Server address or IP and port to which users should connect to for DMS access" -msgstr "æœå‹™å™¨åœ°å€æˆ–IP地å€å’Œç«¯å£ï¼Œç”¨æˆ¶æ‡‰è©²é€£æŽ¥åˆ°DMS訪å•" - -#. module: document_ftp -#: model:ir.ui.menu,name:document_ftp.menu_document_browse -msgid "Shared Repository (FTP)" -msgstr "供享的儲存庫" - -#. module: document_ftp -#: field:document.ftp.configuration,host:0 -msgid "Address" -msgstr "地å€" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Cancel" -msgstr "" - -#. module: document_ftp -#: model:ir.model,name:document_ftp.model_document_ftp_browse -msgid "Document FTP Browse" -msgstr "ç€è¦½FTP文件" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "Knowledge Application Configuration" -msgstr "知識應用é…ç½®" - -#. module: document_ftp -#: model:ir.actions.act_window,name:document_ftp.action_ftp_browse -msgid "Document Browse" -msgstr "文件ç€è¦½" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "or" -msgstr "" - -#. module: document_ftp -#: view:document.ftp.browse:0 -msgid "Browse Document" -msgstr "ç€è¦½æ–‡ä»¶" - -#. module: document_ftp -#: view:document.ftp.configuration:0 -msgid "res_config_contents" -msgstr "res_config_contents" - -#~ msgid "Image" -#~ msgstr "圖åƒ" - -#~ msgid "title" -#~ msgstr "標題" - -#~ msgid "_Cancel" -#~ msgstr "å–消(_C)" diff --git a/addons/document_ftp/res_config_view.xml b/addons/document_ftp/res_config_view.xml deleted file mode 100644 index b571a4bb004..00000000000 --- a/addons/document_ftp/res_config_view.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - Knowledge Application - knowledge.config.settings - - - - - - - - - diff --git a/addons/document_ftp/security/ir.model.access.csv b/addons/document_ftp/security/ir.model.access.csv deleted file mode 100644 index 4a08a4aa60d..00000000000 --- a/addons/document_ftp/security/ir.model.access.csv +++ /dev/null @@ -1 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink diff --git a/addons/document_ftp/test/document_ftp_test.yml b/addons/document_ftp/test/document_ftp_test.yml deleted file mode 100644 index fafd5026ebf..00000000000 --- a/addons/document_ftp/test/document_ftp_test.yml +++ /dev/null @@ -1,87 +0,0 @@ -- | - In order to test the document_ftp module in OpenERP, I will try different operations on the FTP interface and check their impacts on OpenERP's documents and vice-versa. -- - In order to test the behaviour of resource Directory, I will make one resource Directory "Labels" in OpenERP having type "Other Resources" and Directory mapped to object "Partner" -- - !record {model: 'document.directory', id: dir_label}: - name : "Labels" - storage_id : document.storage_default - type : ressource - content_ids: - - name: "Label" - report_id : base.res_partner_address_report -- - Assign "res.partner" object to ressource_type_id. -- - !python {model: document.directory}: | - ids = self.pool.get('ir.model').search(cr, uid, [('model','=','res.partner')]) - id = self.write(cr, uid, [ref("dir_label")], {'ressource_type_id' : ids[0]}, context) -- - In order to check static directory in OpenERP which is the real directory just like system's local folders, - First I create a directory in OpenERP named "Directory 1" with storage as "Default File storage" and type as "Static Directory" -- - !record {model: 'document.directory', id: directory_file}: - name : "File" - storage_id : document.storage_default - type : directory -- - I am create one Document name "Document" and select "File" as its Directory, -- - When I am creating the record, "Resource Title" is filled automatic with "Document". -- - !record {model: 'ir.attachment', id: document_1}: - name : "Document" - parent_id : directory_file -- - In order to connect FTP server and set "File" path, - I create one directory "New" in "File" directory from FTP and check its effect in OpenERP. -- - Also Rename the directory name "New" to "New Directory". -- - Remove directory "New Directory" and remove file "Document". -- - !python {model: ir.attachment}: | - from ftplib import FTP - from openerp.tools.misc import detect_ip_addr - from openerp.tools import config - ftp = FTP() - if detect_ip_addr: - host = config.get('ftp_server_host', detect_ip_addr()) - else: - host = config.get('ftp_server_host', '127.0.0.1') - port = config.get('ftp_server_port','8021') - ftp.connect(host,port) - user = self.pool.get('res.users').read(cr, uid, uid, context) - ftp.login(user.get('login',''),user.get('password','')) - ftp.cwd("/" + cr.dbname+"/Documents/File/") - ftp.mkd("New") - ftp.rename('New','New Directory') - ftp.cwd("/" + cr.dbname+"/Documents/File/") - ftp.rmd('New Directory') - ftp.delete('Document') - ftp.quit() -- - In order to check directory created from FTP is working perfectly -- - Now I will test the same for Resource directory which is mapped with OpenERP object. - When you open this directory from FTP clients, it displays each record of mapped resource object as directory. -- - Now I test FTP client and Open the "Labels" Directory to check Resource Directory in FTP. - I can see that all Labels of OpenERP are shown as children of "Labels" in FTP client as Directories. -- - !python {model: ir.attachment}: | - from ftplib import FTP - from openerp.tools.misc import detect_ip_addr - from openerp.tools import config - ftp = FTP() - if detect_ip_addr: - host = config.get('ftp_server_host', detect_ip_addr()) - else: - host = config.get('ftp_server_host', '127.0.0.1') - port = config.get('ftp_server_port','8021') - ftp.connect(host,port) - user = self.pool.get('res.users').read(cr, uid, uid, context) - ftp.login(user.get('login',''),user.get('password','')) - ftp.cwd("/" + cr.dbname+"/Documents/Labels/") -- - I make sure that I Open Labels Directory successfully. diff --git a/addons/document_ftp/test/document_ftp_test2.yml b/addons/document_ftp/test/document_ftp_test2.yml deleted file mode 100644 index ce8e25906d2..00000000000 --- a/addons/document_ftp/test/document_ftp_test2.yml +++ /dev/null @@ -1,289 +0,0 @@ -- - In order to test the document_ftp functionality -- - I open the 8021 port and see for ftp presence there -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_plain_ftp(timeout=2.0) - assert ftp.sock and (ftp.lastresp == '220'), ftp.lastresp - ftp.close() -- - I read the list of databases at port 8021 and confirm our db is - there -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_login(cr, uid, self) - assert cr.dbname in ftp.nlst("/") - ftp.close() -- - I try to locate the default "Documents" folder in the db. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_login(cr, uid, self) - ftp.cwd('Documents') - ftp.close() -- - I create a "test.txt" file at the server (directly). The file - should have the "abcd" content -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - fdata = StringIO('abcd') - ftp.storbinary('STOR test.txt', fdata) - ftp.close() -- - I look for the "test.txt" file at the server -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - assert ftp.nlst("test.txt") == ['test.txt'] - ftp.close() -- - I check that the content of "test.txt" is "abcd" -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - gotdata = te.get_ftp_fulldata(ftp, "test.txt") - ftp.close() - assert gotdata == 'abcd', 'Data: %r' % gotdata -- - I append the string 'defgh' to "test.txt" -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - fdata = StringIO('defgh') - ftp.storbinary('APPE test.txt', fdata) - ftp.close() -- - I check that the content of "text.txt" is 'abcddefgh' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - gotdata = te.get_ftp_fulldata(ftp, "test.txt") - ftp.close() - assert gotdata == 'abcddefgh', 'Data: %r' % gotdata -- - I try to cd into an non-existing folder 'Not-This' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - import ftplib - ftp = te.get_ftp_login(cr, uid, self) - try: - ftp.cwd('/Not-This') - assert False, "We should't be able to change here" - except ftplib.error_perm: - pass - except OSError, err: - ftp.close() - assert err.errno == 2, err.errno - ftp.close() -- - I create a "test2.txt" file through FTP. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - fdata = StringIO('abcd') - ftp.storbinary('STOR test2.txt', fdata) - ftp.close() -- - I look for the "test2.txt" file at the server -- - !python {model: ir.attachment }: | - cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor) - ids = self.search(cr, uid, [('name', '=', 'test2.txt')]) - assert ids, "No test2.txt file found." -- - I delete the "test2.txt" file using FTP. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.delete('test2.txt') - ftp.close() -- - I check at the server that test2.txt is deleted -- - !python {model: ir.attachment }: | - cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor) - ids = self.search(cr, uid, [('name', '=', 'test2.txt')]) - assert not ids, "test2.txt file can still be found." -- - I create a test2.txt file again. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - fdata = StringIO('abcd') - ftp.storbinary('STOR test2.txt', fdata) - ftp.close() - cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor) -- - I delete the test2.txt from the server (RPC). -- - !delete { model: ir.attachment, id:, search: "[('name','=','test2.txt')]" } -- - I also commit, because ftp would run in a different transaction. -- - !python {model: ir.attachment}: | - cr.commit() -- - I check through FTP that test2.txt does not appear. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - import ftplib - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - try: - nlst_result = ftp.nlst("test2.txt") - except ftplib.error_perm: # 550 error: 'path not exists' - nlst_result = [] - assert "test2.txt" not in nlst_result, "Files: %r" % nlst_result - ftp.close() -- - I create a "test-name.txt" file -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - fdata = StringIO('abcd') - ftp.storbinary('STOR test-name.txt', fdata) - ftp.close() -- - I rename the "test-name.txt" file through ftp. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.rename("test-name.txt", "test-renamed.txt") - ftp.close() -- - I check that test-name.txt has been renamed. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from ftplib import error_perm - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - try: - res = ftp.nlst("test-name.txt") - assert res == [], "File has not been renamed!" - except error_perm, e: - pass - assert ftp.nlst("test-renamed.txt") == ['test-renamed.txt'] - ftp.close() -- - I create a new folder 'Test-Folder2' through FTP -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.mkd("Test-Folder2") - ftp.close() -- - I create a file 'test3.txt' at the 'Test-Folder2' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - fdata = StringIO('abcd') - ftp.storbinary('STOR test3.txt', fdata) - ftp.close() -- - I try to retrieve test3.txt -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - assert ftp.nlst("test3.txt") == ['test3.txt'], "File test3.txt is not there!" - ftp.close() -- - I create a new folder, 'Test-Folder3', through FTP - I try to move test3.txt to 'Test-Folder3' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.mkd("Test-Folder3") - ftp.close() - # TODO move -- - I remove the 'Test-Folder3' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.rmd("Test-Folder3") - ftp.close() -- - I check that test3.txt is removed. -- - I create 5 files through FTP -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - fdata = StringIO('abcd') - for i in range(0, 5): - fdata.seek(0) - ftp.storbinary('STOR test-name%s.txt' %i, fdata) - ftp.close() -- - I list the 5 files, check speed -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - assert len(ftp.nlst()) >= 5, "We haven't managed to store 5 files!" -- - I read the 5 files, check speed -- - I move the 5 files to 'Test-Folder2' -- - I delete the 5 files -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Test-Folder2') - ftp.delete('test3.txt') - for i in range(0, 5): - ftp.delete('test-name%s.txt' %i) - ftp.close() - -- - I delete the "test.txt" and "test-renamed.txt" file -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.delete('test.txt') - ftp.delete('test-renamed.txt') - ftp.close() -- - I remove the 'Test-Folder2' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.rmd("Test-Folder2") - ftp.close() diff --git a/addons/document_ftp/test/document_ftp_test3.yml b/addons/document_ftp/test/document_ftp_test3.yml deleted file mode 100644 index a51f259f44e..00000000000 --- a/addons/document_ftp/test/document_ftp_test3.yml +++ /dev/null @@ -1,92 +0,0 @@ -- - In order to check international character functionality -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_plain_ftp(timeout=1.0) -- - I create in the server a folder called 'Äïêéìáóôéêüò ÖÜêåëëïò' -- - !record {model: document.directory, id: dir_itests }: - name: 'Äïêéìáóôéêüò ÖÜêåëëïò' - parent_id: document.dir_root -- - And then I create another folder, under it, through FTP -- - !python {model: ir.attachment}: | - cr.commit() - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò') - ftp.mkd("ÖÜêåëëïò áðü êÜôù") -- - I check that this folder exists at the server -- - !assert {model: document.directory, id: , search: "[('name','=','ÖÜêåëëïò áðü êÜôù')]" }: - - parent_id != False -- - I login with FTP and check that 'Äïêéìáóôéêüò ÖÜêåëëïò' is there -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù') -- - I create a file named 'ÄïêéìÞ' into that folder -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù') - fdata = StringIO('êåßìåíï ìå utf-8') - ftp.storbinary('STOR ÄïêéìÞ.txt', fdata) -- - I remove the 'ÄïêéìÞ.txt' file -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/ÖÜêåëëïò áðü êÜôù') - ftp.delete('ÄïêéìÞ.txt') -- - I rename 'ÖÜêåëëïò áðü êÜôù' into 'Üëëïò' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò') - ftp.rename("ÖÜêåëëïò áðü êÜôù", "Üëëïò") -- - I place a file 'file Ö3' in 'Üëëïò' -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò') - fdata = StringIO('êé Üëëï êåßìåíï') - ftp.storbinary('STOR file Ö3.txt', fdata) -- - I rename the file into file+range(1..200) (large filename) -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò') - vuvuzela = 'b'+''.join('z' * 200)+'!' - ftp.rename("file Ö3.txt", vuvuzela) -- - I delete the file with the large name -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò') - vuvuzela = 'b'+''.join('z' * 200)+'!' - ftp.delete(vuvuzela) - -- - I delete the testing folders -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents') - ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò/Üëëïò') - ftp.rmd('Äïêéìáóôéêüò ÖÜêåëëïò') diff --git a/addons/document_ftp/test/document_ftp_test4.yml b/addons/document_ftp/test/document_ftp_test4.yml deleted file mode 100644 index 9b311f64605..00000000000 --- a/addons/document_ftp/test/document_ftp_test4.yml +++ /dev/null @@ -1,187 +0,0 @@ -- - In order to check dynamic folder functionality of document + FTP -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_plain_ftp(timeout=1.0) -- | - I create two partners 'Partner1' and 'Partner2'. - I create three partner categories: 'none', 'pat1' and 'all' - I attach Partner1 to pat1, Partner1+Partner2 to 'all' -- - !record {model: res.partner.category, id: tpat_categ_none }: - name: 'No partners' -- - !record {model: res.partner.category, id: tpat_categ_pat1 }: - name: 'Pat 1' -- - !record {model: res.partner.category, id: tpat_categ_all }: - name: 'All Partner1+2' -- - !record {model: res.partner, id: tpartner1 }: - name: Partner 1 - category_id: - - tpat_categ_pat1 - - tpat_categ_all -- - !record {model: res.partner, id: tpartner_2 }: - name: 'Partner 2' - category_id: - - tpat_categ_all -- - I create a resource folder of partners, by the (none, pat1, all) - categories. -- - !record {model: document.directory, id: dir_tests2 }: - name: Partners Testing - parent_id: document.dir_root - type: ressource - ressource_type_id: base.model_res_partner_category - domain: [] # TODO -- - I commit (because FTP operations are on different transaction) -- - !python {model: document.directory, id: }: | - cr.commit() -- - I browse through ftp in the resource folder, checking that three - categories are there. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing') - dirs = ftp.nlst() - for dir in [ 'All Partner1+2', 'No partners', 'Pat 1' ]: - assert dir in dirs, "Dir %s not in folder" % dir -- - I create a 'partners' folder by the first resource one. -- - !record {model: document.directory, id: dir_respart1 }: - name: Partners of Test - parent_id: dir_tests2 - type: ressource - ressource_type_id: base.model_res_partner - domain: "[('category_id','in',[active_id])]" - ressource_parent_type_id : base.model_res_partner_category -- - I commit (because FTP operations are on different transaction) -- - !python {model: document.directory, id: }: | - cr.commit() -- - I check through FTP that the correct partners are listed at each - 'partners' folder. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing') - correct = { 'All Partner1+2': [ 'Partner 1', 'Partner 2' ], - 'No partners': [], - 'Pat 1': ['Partner 1',] } - for dir in correct: - res = ftp.nlst(dir+'/Partners of Test') - assert res == correct[dir], "Dir %s falsely contains %s" %(dir, res) -- - I create an ir.attachment, attached (not related) to Partner1 -- - !record {model: ir.attachment, id: file_test1}: - name: File of pat1 - res_model: res.partner - res_id: !eval ref("tpartner1") -- - I commit (because FTP operations are on different transaction) -- - !python {model: document.directory, id: }: | - cr.commit() -- - I check that pat1/Partner1 folder has the file. - I check that all/Partner1 folder has the file -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing') - dirs = [ 'All Partner1+2', 'Pat 1' ] - for dir in dirs: - res = ftp.nlst(dir+'/Partners of Test/Partner 1') - assert 'File of pat1' in res, "Dir %s contains only %s" %(dir, res) -- - I place a file at the 'pat1'/Partner1 folder, through FTP -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing/Pat 1/Partners of Test/Partner 1') - fdata = StringIO('abcd') - ftp.storbinary('STOR pat1-dynamic.txt', fdata) - cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor) -- - I check at the server that the file is attached to Partner1 -- - !assert {model: ir.attachment, id: , search: "[('name','=','pat1-dynamic.txt')]" }: - - parent_id.name == 'Documents' - - res_model == 'res.partner' - - res_id != False -- - I try to create a file directly under the Partners Testing folder -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - import ftplib - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing') - fdata = StringIO('abcd') - try: - ftp.storbinary('STOR stray.txt', fdata) - assert False, "We should't be able to create files here" - except ftplib.error_perm: - # That's what should happen - pass -- - I try to create a folder directly under the Partners Testing folder -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - import ftplib - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing') - try: - ftp.mkd('Weird folder') - assert False, "We should't be able to create folders here" - except ftplib.error_perm: - # That's what should happen - pass -- - I check that all/Partner1 also has the file -- | - Bonus Piste: - I create a 'Partner3' under 'all' - -- - I delete "pat1-dynamic.txt" File. -- - !python {model: ir.attachment}: | - from document_ftp import test_easyftp as te - from cStringIO import StringIO - ftp = te.get_ftp_folder(cr, uid, self, 'Documents/Partners Testing/Pat 1/Partners of Test/Partner 1') - ftp.delete('pat1-dynamic.txt') - ftp.close() - cr.rollback() # restart transaction to see changes (FTP-FS uses its own cursor) - -- - I delete the Partners Testing folder, "File of pat1" file, Partner and Partner category. -- - !python {model: document.directory}: | - attach_pool = self.pool.get('ir.attachment') - partner_categ_pool = self.pool.get('res.partner.category') - partner_pool = self.pool.get('res.partner') - - self.unlink(cr, uid, [ref('dir_tests2')]) - self.unlink(cr, uid, [ref('dir_respart1')]) - attach_pool.unlink(cr, uid, [ref('file_test1')]) - partner_categ_pool.unlink(cr, uid, [ref('tpat_categ_none')]) - partner_categ_pool.unlink(cr, uid, [ref('tpat_categ_pat1')]) - partner_categ_pool.unlink(cr, uid, [ref('tpat_categ_all')]) - partner_pool.unlink(cr, uid, [ref('tpartner1')]) - partner_pool.unlink(cr, uid, [ref('tpartner_2')]) - cr.commit() #required because all the operations via FTP were committed - diff --git a/addons/document_ftp/test/document_ftp_test5.yml b/addons/document_ftp/test/document_ftp_test5.yml deleted file mode 100644 index a66f409905b..00000000000 --- a/addons/document_ftp/test/document_ftp_test5.yml +++ /dev/null @@ -1,30 +0,0 @@ -- - In order to check the permissions setup and functionality of the - document module: -- - I create a testing user for the documents -- - I assign some ... group to the testing user -- - I create a "group testing" user, which also belongs to the same ... group -- - I create a "blocked" user. -- - I create (as root) a testing folder in the document hierarchy, and - assign ownership to the testing user, groups to the ... group. -- - I create a "private" folder inside the testing folder. -- - I try to read the testing folder as the testing user -- - I try to read the folder as the group user, it should fail. -- - I try to read the folder as the blocked user. -- - I create a "group" folder, with the ... group. -- - I try to read the "group" folder as the testing user -- - I try to read the "group" folder as the group user -- - I try to read the "group" folder as the blocked user diff --git a/addons/document_ftp/test_easyftp.py b/addons/document_ftp/test_easyftp.py deleted file mode 100644 index 1ab808c3acc..00000000000 --- a/addons/document_ftp/test_easyftp.py +++ /dev/null @@ -1,72 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -""" This is a testing module, which exports some functions for the YAML tests. - Instead of repeating the same FTP code all over, we prefer to have - it in this file -""" - -from ftplib import FTP -from openerp.tools import config - -def get_plain_ftp(timeout=10.0): - ftp = FTP() - host = config.get('ftp_server_host', '127.0.0.1') - port = config.get('ftp_server_port', '8021') - ftp.connect(host, port,timeout) - return ftp - -def get_ftp_login(cr, uid, ormobj): - ftp = get_plain_ftp() - user = ormobj.pool.get('res.users').browse(cr, uid, uid) - passwd = user.password or '' - if passwd.startswith("$1$"): - # md5 by base crypt. We cannot decode, wild guess - # that passwd = login - passwd = user.login - ftp.login(user.login, passwd) - ftp.cwd("/" + cr.dbname) - return ftp - -def get_ftp_anonymous(cr): - ftp = get_plain_ftp() - ftp.login('anonymous', 'the-test') - ftp.cwd("/") - return ftp - -def get_ftp_folder(cr, uid, ormobj, foldername): - ftp = get_ftp_login(cr, uid, ormobj) - ftp.cwd("/" + cr.dbname+"/"+foldername) - return ftp - -def get_ftp_fulldata(ftp, fname, limit=8192): - from functools import partial - data = [] - def ffp(data, ndata): - if len(data)+ len(ndata) > limit: - raise IndexError('Data over the limit.') - data.append(ndata) - ftp.retrbinary('RETR %s' % fname, partial(ffp,data)) - return ''.join(data) - -#eof - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_browse.py b/addons/document_ftp/wizard/ftp_browse.py deleted file mode 100644 index ee8f897ca20..00000000000 --- a/addons/document_ftp/wizard/ftp_browse.py +++ /dev/null @@ -1,64 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import fields, osv -# from openerp.tools.translate import _ -from .. import ftpserver - -class document_ftp_browse(osv.osv_memory): - _name = 'document.ftp.browse' - _description = 'Document FTP Browse' - - _columns = { - 'url' : fields.char('FTP Server', size=64, required=True), - } - - def default_get(self, cr, uid, fields, context=None): - res = {} - if 'url' in fields: - user_pool = self.pool.get('res.users') - current_user = user_pool.browse(cr, uid, uid, context=context) - data_pool = self.pool.get('ir.model.data') - aid = data_pool._get_id(cr, uid, 'document_ftp', 'action_document_browse') - aid = data_pool.browse(cr, uid, aid, context=context).res_id - ftp_url = self.pool.get('ir.actions.act_url').browse(cr, uid, aid, context=context) - url = ftp_url.url and ftp_url.url.split('ftp://') or [] - if url: - url = url[1] - if url[-1] == '/': - url = url[:-1] - else: - url = '%s:%s' %(ftpserver.HOST, ftpserver.PORT) - res['url'] = 'ftp://%s@%s'%(current_user.login, url) - return res - - def browse_ftp(self, cr, uid, ids, context=None): - data_id = ids and ids[0] or False - data = self.browse(cr, uid, data_id, context=context) - final_url = data.url - return { - 'type': 'ir.actions.act_url', - 'url':final_url, - 'target': 'new' - } - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_browse_view.xml b/addons/document_ftp/wizard/ftp_browse_view.xml deleted file mode 100644 index c1613b29a70..00000000000 --- a/addons/document_ftp/wizard/ftp_browse_view.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Document FTP Browse - document.ftp.browse - -
- - - -
-
-
-
-
- - - Document Browse - ir.actions.act_window - document.ftp.browse - - form - form - new - - - - -
-
diff --git a/addons/document_ftp/wizard/ftp_configuration.py b/addons/document_ftp/wizard/ftp_configuration.py deleted file mode 100644 index 1dee9495a95..00000000000 --- a/addons/document_ftp/wizard/ftp_configuration.py +++ /dev/null @@ -1,51 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see -# -############################################################################## - -from openerp.osv import fields, osv -from openerp.tools import config - -class document_ftp_configuration(osv.osv_memory): - - _name='document.ftp.configuration' - _description = 'Auto Directory Configuration' - _inherit = 'res.config' - _rec_name = 'host' - _columns = { - 'host': fields.char('Address', size=64, - help="Server address or IP and port to which users should connect to for DMS access", - required=True), - } - - _defaults = { - 'host': config.get('ftp_server_host', 'localhost') + ':' + config.get('ftp_server_port', '8021'), - } - - def execute(self, cr, uid, ids, context=None): - conf = self.browse(cr, uid, ids[0], context=context) - data_pool = self.pool.get('ir.model.data') - # Update the action for FTP browse. - aid = data_pool._get_id(cr, uid, 'document_ftp', 'action_document_browse') - aid = data_pool.browse(cr, uid, aid, context=context).res_id - self.pool.get('ir.actions.act_url').write(cr, uid, [aid], - {'url': 'ftp://'+(conf.host or 'localhost:8021')+'/' + cr.dbname+'/'}) - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_ftp/wizard/ftp_configuration_view.xml b/addons/document_ftp/wizard/ftp_configuration_view.xml deleted file mode 100644 index 9e05fba986e..00000000000 --- a/addons/document_ftp/wizard/ftp_configuration_view.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - Browse Files - ftp://localhost:8021/ - - - - - - FTP Server Configuration - document.ftp.configuration - - - -
- Knowledge Application Configuration -
- - - -
-
-
- - - FTP Server Configuration - ir.actions.act_window - document.ftp.configuration - - form - form - new - - - - - automatic - -
-
diff --git a/addons/document_webdav/__openerp__.py b/addons/document_webdav/__openerp__.py deleted file mode 100644 index befb87829ed..00000000000 --- a/addons/document_webdav/__openerp__.py +++ /dev/null @@ -1,76 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################## -# -# Copyright (c) 2004 TINY SPRL. (http://tiny.be), 2009 P. Christeas -# All Rights Reserved. -# Fabien Pinckaers -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -# -############################################################################## - -{ - 'name': 'Shared Repositories (WebDAV)', - 'version': '2.3', - 'author': 'OpenERP SA', - 'category': 'Knowledge Management', - 'website': 'http://www.openerp.com', - 'description': """ -With this module, the WebDAV server for documents is activated. -=============================================================== - -You can then use any compatible browser to remotely see the attachments of OpenObject. - -After installation, the WebDAV server can be controlled by a [webdav] section in -the server's config. - -Server Configuration Parameter: -------------------------------- -[webdav]: -+++++++++ - * enable = True ; Serve webdav over the http(s) servers - * vdir = webdav ; the directory that webdav will be served at - * this default val means that webdav will be - * on "http://localhost:8069/webdav/ - * verbose = True ; Turn on the verbose messages of webdav - * debug = True ; Turn on the debugging messages of webdav - * since the messages are routed to the python logging, with - * levels "debug" and "debug_rpc" respectively, you can leave - * these options on - -Also implements IETF RFC 5785 for services discovery on a http server, -which needs explicit configuration in openerp-server.conf too. -""", - 'depends': ['base', 'document'], - 'data': ['security/ir.model.access.csv', - 'webdav_view.xml', - 'webdav_setup.xml', - ], - 'demo': [], - 'test': [ #'test/webdav_test1.yml', - ], - 'auto_install': False, - 'installable': True, - 'images': ['images/dav_properties.jpeg','images/directories_structure_principals.jpeg'], -} - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/cache.py b/addons/document_webdav/cache.py deleted file mode 100644 index 95ff9d31f62..00000000000 --- a/addons/document_webdav/cache.py +++ /dev/null @@ -1,41 +0,0 @@ -import time -import heapq - -def memoize(maxsize): - """decorator to 'memoize' a function - caching its results""" - def decorating_function(f): - cache = {} # map from key to value - heap = [] # list of keys, in LRU heap - cursize = 0 # because len() is slow - def wrapper(*args): - key = repr(args) - # performance crap - _cache=cache - _heap=heap - _heappop = heapq.heappop - _heappush = heapq.heappush - _time = time.time - _cursize = cursize - _maxsize = maxsize - if not _cache.has_key(key): - if _cursize == _maxsize: - # pop oldest element - (_,oldkey) = _heappop(_heap) - _cache.pop(oldkey) - else: - _cursize += 1 - # insert this element - _cache[key] = f(*args) - _heappush(_heap,(_time(),key)) - wrapper.misses += 1 - else: - wrapper.hits += 1 - return cache[key] - wrapper.__doc__ = f.__doc__ - wrapper.__name__ = f.__name__ - wrapper.hits = wrapper.misses = 0 - return wrapper - return decorating_function - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/dav_fs.py b/addons/document_webdav/dav_fs.py deleted file mode 100644 index fef7d7b5940..00000000000 --- a/addons/document_webdav/dav_fs.py +++ /dev/null @@ -1,1052 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## -import os -import time -import errno -import re -import urlparse -import urllib - -try: - from pywebdav.lib.constants import COLLECTION # , OBJECT - from pywebdav.lib.errors import DAV_Error, DAV_Forbidden, DAV_NotFound - from pywebdav.lib.iface import dav_interface - from pywebdav.lib.davcmd import copyone, copytree, moveone, movetree, delone, deltree -except ImportError: - from DAV.constants import COLLECTION #, OBJECT - from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound - from DAV.iface import dav_interface - from DAV.davcmd import copyone, copytree, moveone, movetree, delone, deltree - -import openerp -from openerp import sql_db -import openerp.service -from openerp.tools import misc - -from cache import memoize -from webdav import mk_lock_response - -CACHE_SIZE=20000 - -#hack for urlparse: add webdav in the net protocols -urlparse.uses_netloc.append('webdav') -urlparse.uses_netloc.append('webdavs') - -day_names = { 0: 'Mon', 1: 'Tue' , 2: 'Wed', 3: 'Thu', 4: 'Fri', 5: 'Sat', 6: 'Sun' } -month_names = { 1: 'Jan', 2: 'Feb', 3: 'Mar', 4: 'Apr', 5: 'May', 6: 'Jun', - 7: 'Jul', 8: 'Aug', 9: 'Sep', 10: 'Oct', 11: 'Nov', 12: 'Dec' } - -def dict_merge2(*dicts): - """ Return a dict with all values of dicts. - If some key appears twice and contains iterable objects, the values - are merged (instead of overwritten). - """ - res = {} - for d in dicts: - for k in d.keys(): - if k in res and isinstance(res[k], (list, tuple)): - res[k] = res[k] + d[k] - elif k in res and isinstance(res[k], dict): - res[k].update(d[k]) - else: - res[k] = d[k] - return res - -class DAV_NotFound2(DAV_NotFound): - """404 exception, that accepts our list uris - """ - def __init__(self, *args): - if len(args) and isinstance(args[0], (tuple, list)): - path = ''.join([ '/' + x for x in args[0]]) - args = (path, ) - DAV_NotFound.__init__(self, *args) - - -def _str2time(cre): - """ Convert a string with time representation (from db) into time (float) - """ - if not cre: - return time.time() - frac = 0.0 - if isinstance(cre, basestring) and '.' in cre: - fdot = cre.find('.') - frac = float(cre[fdot:]) - cre = cre[:fdot] - return time.mktime(time.strptime(cre,'%Y-%m-%d %H:%M:%S')) + frac - -class BoundStream2(object): - """Wraps around a seekable buffer, reads a determined range of data - - Note that the supplied stream object MUST support a size() which - should return its data length (in bytes). - - A variation of the class in websrv_lib.py - """ - - def __init__(self, stream, offset=None, length=None, chunk_size=None): - self._stream = stream - self._offset = offset or 0 - self._length = length or self._stream.size() - self._rem_length = length - assert length and isinstance(length, (int, long)) - assert length and length >= 0, length - self._chunk_size = chunk_size - if offset is not None: - self._stream.seek(offset) - - def read(self, size=-1): - if not self._stream: - raise IOError(errno.EBADF, "read() without stream.") - - if self._rem_length == 0: - return '' - elif self._rem_length < 0: - raise EOFError() - - rsize = self._rem_length - if size > 0 and size < rsize: - rsize = size - if self._chunk_size and self._chunk_size < rsize: - rsize = self._chunk_size - - data = self._stream.read(rsize) - self._rem_length -= len(data) - - return data - - def __len__(self): - return self._length - - def tell(self): - res = self._stream.tell() - if self._offset: - res -= self._offset - return res - - def __iter__(self): - return self - - def next(self): - return self.read(65536) - - def seek(self, pos, whence=os.SEEK_SET): - """ Seek, computing our limited range - """ - if whence == os.SEEK_SET: - if pos < 0 or pos > self._length: - raise IOError(errno.EINVAL,"Cannot seek.") - self._stream.seek(pos - self._offset) - self._rem_length = self._length - pos - elif whence == os.SEEK_CUR: - if pos > 0: - if pos > self._rem_length: - raise IOError(errno.EINVAL,"Cannot seek past end.") - elif pos < 0: - oldpos = self.tell() - if oldpos + pos < 0: - raise IOError(errno.EINVAL,"Cannot seek before start.") - self._stream.seek(pos, os.SEEK_CUR) - self._rem_length -= pos - elif whence == os.SEEK_END: - if pos > 0: - raise IOError(errno.EINVAL,"Cannot seek past end.") - else: - if self._length + pos < 0: - raise IOError(errno.EINVAL,"Cannot seek before start.") - newpos = self._offset + self._length + pos - self._stream.seek(newpos, os.SEEK_SET) - self._rem_length = 0 - pos - -class openerp_dav_handler(dav_interface): - """ - This class models a OpenERP interface for the DAV server - """ - PROPS={'DAV:': dav_interface.PROPS['DAV:'],} - - M_NS={ "DAV:" : dav_interface.M_NS['DAV:'],} - - def __init__(self, parent, verbose=False): - self.db_name_list=[] - self.parent = parent - self.baseuri = parent.baseuri - self.verbose = verbose - - def get_propnames(self, uri): - props = self.PROPS - self.parent.log_message('get propnames: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - # TODO: maybe limit props for databases..? - return props - node = self.uri2object(cr, uid, pool, uri2) - if node: - props = dict_merge2(props, node.get_dav_props(cr)) - cr.close() - return props - - def _try_function(self, funct, args, opname='run function', cr=None, - default_exc=DAV_Forbidden): - """ Try to run a function, and properly convert exceptions to DAV ones. - - @objname the name of the operation being performed - @param cr if given, the cursor to close at exceptions - """ - - try: - return funct(*args) - except DAV_Error: - if cr: cr.close() - raise - except NotImplementedError, e: - if cr: cr.close() - import traceback - self.parent.log_error("Cannot %s: %s", opname, str(e)) - self.parent.log_message("Exc: %s",traceback.format_exc()) - # see par 9.3.1 of rfc - raise DAV_Error(403, str(e) or 'Not supported at this path.') - except EnvironmentError, err: - if cr: cr.close() - import traceback - self.parent.log_error("Cannot %s: %s", opname, err.strerror) - self.parent.log_message("Exc: %s",traceback.format_exc()) - raise default_exc(err.strerror) - except Exception, e: - import traceback - if cr: cr.close() - self.parent.log_error("Cannot %s: %s", opname, str(e)) - self.parent.log_message("Exc: %s",traceback.format_exc()) - raise default_exc("Operation failed.") - - def _get_dav_lockdiscovery(self, uri): - """ We raise that so that the node API is used """ - raise DAV_NotFound - - def _get_dav_supportedlock(self, uri): - """ We raise that so that the node API is used """ - raise DAV_NotFound - - def match_prop(self, uri, match, ns, propname): - if self.M_NS.has_key(ns): - return match == dav_interface.get_prop(self, uri, ns, propname) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_NotFound - node = self.uri2object(cr, uid, pool, uri2) - if not node: - cr.close() - raise DAV_NotFound - res = node.match_dav_eprop(cr, match, ns, propname) - cr.close() - return res - - def prep_http_options(self, uri, opts): - """see HttpOptions._prep_OPTIONS """ - self.parent.log_message('get options: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri, allow_last=True) - - if not dbname: - if cr: cr.close() - return opts - node = self.uri2object(cr, uid, pool, uri2[:]) - - if not node: - if cr: cr.close() - return opts - else: - if hasattr(node, 'http_options'): - ret = opts.copy() - for key, val in node.http_options.items(): - if isinstance(val, basestring): - val = [val, ] - if key in ret: - ret[key] = ret[key][:] # copy the orig. array - else: - ret[key] = [] - ret[key].extend(val) - - self.parent.log_message('options: %s' % ret) - else: - ret = opts - cr.close() - return ret - - def reduce_useragent(self): - ua = self.parent.headers.get('User-Agent', False) - ctx = {} - if ua: - if 'iPhone' in ua: - ctx['DAV-client'] = 'iPhone' - elif 'Konqueror' in ua: - ctx['DAV-client'] = 'GroupDAV' - return ctx - - def get_prop(self, uri, ns, propname): - """ return the value of a given property - - uri -- uri of the object to get the property of - ns -- namespace of the property - pname -- name of the property - """ - if self.M_NS.has_key(ns): - try: - # if it's not in the interface class, a "DAV:" property - # may be at the node class. So shouldn't give up early. - return dav_interface.get_prop(self, uri, ns, propname) - except DAV_NotFound: - pass - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_NotFound - try: - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound - res = node.get_dav_eprop(cr, ns, propname) - finally: - cr.close() - return res - - def get_db(self, uri, rest_ret=False, allow_last=False): - """Parse the uri and get the dbname and the rest. - Db name should be the first component in the unix-like - path supplied in uri. - - @param rest_ret Instead of the db_name, return (db_name, rest), - where rest is the remaining path - @param allow_last If the dbname is the last component in the - path, allow it to be resolved. The default False value means - we will not attempt to use the db, unless there is more - path. - - @return db_name or (dbname, rest) depending on rest_ret, - will return dbname=False when component is not found. - """ - - uri2 = self.uri2local(uri) - if uri2.startswith('/'): - uri2 = uri2[1:] - names=uri2.split('/',1) - db_name=False - rest = None - if allow_last: - ll = 0 - else: - ll = 1 - if len(names) > ll and names[0]: - db_name = names[0] - names = names[1:] - - if rest_ret: - if len(names): - rest = names[0] - return db_name, rest - return db_name - - - def urijoin(self,*ajoin): - """ Return the base URI of this request, or even join it with the - ajoin path elements - """ - return self.parent.get_baseuri(self) + '/'.join(ajoin) - - @memoize(4) - def _all_db_list(self): - """return all databases who have module document_webdav installed""" - s = openerp.service.db - result = s.exp_list() - self.db_name_list=[] - for db_name in result: - cr = None - try: - db = sql_db.db_connect(db_name) - cr = db.cursor() - cr.execute("SELECT id FROM ir_module_module WHERE name = 'document_webdav' AND state='installed' ") - res=cr.fetchone() - if res and len(res): - self.db_name_list.append(db_name) - except Exception, e: - self.parent.log_error("Exception in db list: %s" % e) - finally: - if cr: - cr.close() - return self.db_name_list - - def db_list(self, uri): - # import pudb;pudb.set_trace() - u = urlparse.urlsplit(uri) - h = u.hostname - d = h.split('.')[0] - r = openerp.tools.config['dbfilter'].replace('%h', h).replace('%d',d) - dbs = [i for i in self._all_db_list() if re.match(r, i)] - return dbs - - def get_childs(self,uri, filters=None): - """ return the child objects as self.baseuris for the given URI """ - self.parent.log_message('get children: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri, allow_last=True) - - if not dbname: - if cr: cr.close() - res = map(lambda x: self.urijoin(x), self.db_list(uri)) - return res - result = [] - node = self.uri2object(cr, uid, pool, uri2[:]) - - try: - if not node: - raise DAV_NotFound2(uri2) - else: - fp = node.full_path() - if fp and len(fp): - fp = '/'.join(fp) - self.parent.log_message('children for: %s' % fp) - else: - fp = None - domain = None - if filters: - domain = node.get_domain(cr, filters) - - if hasattr(filters, 'getElementsByTagNameNS'): - hrefs = filters.getElementsByTagNameNS('DAV:', 'href') - if hrefs: - ul = self.parent.davpath + self.uri2local(uri) - for hr in hrefs: - turi = '' - for tx in hr.childNodes: - if tx.nodeType == hr.TEXT_NODE: - turi += tx.data - if not turi.startswith('/'): - # it may be an absolute URL, decode to the - # relative part, because ul is relative, anyway - uparts=urlparse.urlparse(turi) - turi=uparts[2] - if uparts[3]: - turi += ';' + uparts[3] - if turi.startswith(ul): - result.append( turi[len(self.parent.davpath):]) - else: - self.parent.log_error("ignore href %s because it is not under request path %s", turi, ul) - return result - # We don't want to continue with the children found below - # Note the exceptions and that 'finally' will close the - # cursor - for d in node.children(cr, domain): - self.parent.log_message('child: %s' % d.path) - if fp: - result.append( self.urijoin(dbname,fp,d.path) ) - else: - result.append( self.urijoin(dbname,d.path) ) - except DAV_Error: - raise - except Exception, e: - self.parent.log_error("Cannot get_children: "+str(e)+".") - raise - finally: - if cr: cr.close() - return result - - def uri2local(self, uri): - uparts=urlparse.urlparse(uri) - reluri=uparts[2] - if uparts[3]: - reluri += ';'+uparts[3] - if reluri and reluri[-1]=="/": - reluri=reluri[:-1] - return reluri - - # - # pos: -1 to get the parent of the uri - # - def get_cr(self, uri, allow_last=False): - """ Split the uri, grab a cursor for that db - """ - pdb = self.parent.auth_provider.last_auth - dbname, uri2 = self.get_db(uri, rest_ret=True, allow_last=allow_last) - uri2 = (uri2 and uri2.split('/')) or [] - if not dbname: - return None, None, None, False, uri2 - # if dbname was in our uri, we should have authenticated - # against that. - assert pdb == dbname, " %s != %s" %(pdb, dbname) - res = self.parent.auth_provider.auth_creds.get(dbname, False) - if not res: - self.parent.auth_provider.checkRequest(self.parent, uri, dbname) - res = self.parent.auth_provider.auth_creds[dbname] - user, passwd, dbn2, uid = res - registry = openerp.registry(dbname) - cr = registery.db.cursor() - return cr, uid, registry, dbname, uri2 - - def uri2object(self, cr, uid, pool, uri): - if not uid: - return None - context = self.reduce_useragent() - return pool.get('document.directory').get_object(cr, uid, uri, context=context) - - def get_data(self,uri, rrange=None): - self.parent.log_message('GET: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - try: - if not dbname: - raise DAV_Error, 409 - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - # TODO: if node is a collection, for some specific set of - # clients ( web browsers; available in node context), - # we may return a pseydo-html page with the directory listing. - try: - res = node.open_data(cr,'r') - if rrange: - assert isinstance(rrange, (tuple,list)) - start, end = map(long, rrange) - if not start: - start = 0 - assert start >= 0 - if end and end < start: - self.parent.log_error("Invalid range for data: %s-%s" %(start, end)) - raise DAV_Error(416, "Invalid range for data.") - if end: - if end >= res.size(): - raise DAV_Error(416, "Requested data exceeds available size.") - length = (end + 1) - start - else: - length = res.size() - start - res = BoundStream2(res, offset=start, length=length) - - except TypeError,e: - # for the collections that return this error, the DAV standard - # says we'd better just return 200 OK with empty data - return '' - except IndexError,e : - self.parent.log_error("GET IndexError: %s", str(e)) - raise DAV_NotFound2(uri2) - except Exception,e: - import traceback - self.parent.log_error("GET exception: %s",str(e)) - self.parent.log_message("Exc: %s", traceback.format_exc()) - raise DAV_Error, 409 - return res - finally: - if cr: cr.close() - - @memoize(CACHE_SIZE) - def _get_dav_resourcetype(self, uri): - """ return type of object """ - self.parent.log_message('get RT: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - try: - if not dbname: - return COLLECTION - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - try: - return node.get_dav_resourcetype(cr) - except NotImplementedError: - if node.type in ('collection','database'): - return ('collection', 'DAV:') - return '' - finally: - if cr: cr.close() - - def _get_dav_displayname(self,uri): - self.parent.log_message('get DN: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - # at root, dbname, just return the last component - # of the path. - if uri2 and len(uri2) < 2: - return uri2[-1] - return '' - node = self.uri2object(cr, uid, pool, uri2) - if not node: - if cr: cr.close() - raise DAV_NotFound2(uri2) - cr.close() - return node.displayname - - @memoize(CACHE_SIZE) - def _get_dav_getcontentlength(self, uri): - """ return the content length of an object """ - self.parent.log_message('get length: %s' % uri) - result = 0 - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - return str(result) - node = self.uri2object(cr, uid, pool, uri2) - if not node: - if cr: cr.close() - raise DAV_NotFound2(uri2) - result = node.content_length or 0 - cr.close() - return str(result) - - @memoize(CACHE_SIZE) - def _get_dav_getetag(self,uri): - """ return the ETag of an object """ - self.parent.log_message('get etag: %s' % uri) - result = 0 - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - return '0' - node = self.uri2object(cr, uid, pool, uri2) - if not node: - cr.close() - raise DAV_NotFound2(uri2) - result = self._try_function(node.get_etag ,(cr,), "etag %s" %uri, cr=cr) - cr.close() - return str(result) - - @memoize(CACHE_SIZE) - def get_lastmodified(self, uri): - """ return the last modified date of the object """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - return time.time() - try: - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - return _str2time(node.write_date) - finally: - if cr: cr.close() - - def _get_dav_getlastmodified(self,uri): - """ return the last modified date of a resource - """ - d=self.get_lastmodified(uri) - # format it. Note that we explicitly set the day, month names from - # an array, so that strftime() doesn't use its own locale-aware - # strings. - gmt = time.gmtime(d) - return time.strftime("%%s, %d %%s %Y %H:%M:%S GMT", gmt ) % \ - (day_names[gmt.tm_wday], month_names[gmt.tm_mon]) - - @memoize(CACHE_SIZE) - def get_creationdate(self, uri): - """ return the last modified date of the object """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - raise DAV_Error, 409 - try: - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - - return _str2time(node.create_date) - finally: - if cr: cr.close() - - @memoize(CACHE_SIZE) - def _get_dav_getcontenttype(self,uri): - self.parent.log_message('get contenttype: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - return 'httpd/unix-directory' - try: - node = self.uri2object(cr, uid, pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - result = str(node.mimetype) - return result - #raise DAV_NotFound, 'Could not find %s' % path - finally: - if cr: cr.close() - - def mkcol(self,uri): - """ create a new collection - see par. 9.3 of rfc4918 - """ - self.parent.log_message('MKCOL: %s' % uri) - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not uri2[-1]: - if cr: cr.close() - raise DAV_Error(409, "Cannot create nameless collection.") - if not dbname: - if cr: cr.close() - raise DAV_Error, 409 - node = self.uri2object(cr,uid,pool, uri2[:-1]) - if not node: - cr.close() - raise DAV_Error(409, "Parent path %s does not exist" % uri2[:-1]) - nc = node.child(cr, uri2[-1]) - if nc: - cr.close() - raise DAV_Error(405, "Path already exists.") - self._try_function(node.create_child_collection, (cr, uri2[-1]), - "create col %s" % uri2[-1], cr=cr) - cr.commit() - cr.close() - return True - - def put(self, uri, data, content_type=None): - """ put the object into the filesystem """ - self.parent.log_message('Putting %s (%d), %s'%( misc.ustr(uri), data and len(data) or 0, content_type)) - cr, uid, pool,dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_Forbidden - try: - node = self.uri2object(cr, uid, pool, uri2[:]) - except Exception: - node = False - - objname = misc.ustr(uri2[-1]) - - ret = None - if not node: - dir_node = self.uri2object(cr, uid, pool, uri2[:-1]) - if not dir_node: - cr.close() - raise DAV_NotFound('Parent folder not found.') - newchild = self._try_function(dir_node.create_child, (cr, objname, data), - "create %s" % objname, cr=cr) - if not newchild: - cr.commit() - cr.close() - raise DAV_Error(400, "Failed to create resource.") - - uparts=urlparse.urlparse(uri) - fileloc = '/'.join(newchild.full_path()) - if isinstance(fileloc, unicode): - fileloc = fileloc.encode('utf-8') - # the uri we get is a mangled one, where the davpath has been removed - davpath = self.parent.get_davpath() - - surl = '%s://%s' % (uparts[0], uparts[1]) - uloc = urllib.quote(fileloc) - hurl = False - if uri != ('/'+uloc) and uri != (surl + '/' + uloc): - hurl = '%s%s/%s/%s' %(surl, davpath, dbname, uloc) - etag = False - try: - etag = str(newchild.get_etag(cr)) - except Exception, e: - self.parent.log_error("Cannot get etag for node: %s" % e) - ret = (str(hurl), etag) - else: - self._try_function(node.set_data, (cr, data), "save %s" % objname, cr=cr) - - cr.commit() - cr.close() - return ret - - def rmcol(self,uri): - """ delete a collection """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_Error, 409 - - node = self.uri2object(cr, uid, pool, uri2) - self._try_function(node.rmcol, (cr,), "rmcol %s" % uri, cr=cr) - - cr.commit() - cr.close() - return 204 - - def rm(self,uri): - cr, uid, pool,dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_Error, 409 - node = self.uri2object(cr, uid, pool, uri2) - res = self._try_function(node.rm, (cr,), "rm %s" % uri, cr=cr) - if not res: - if cr: cr.close() - raise OSError(1, 'Invalid Action!') - cr.commit() - cr.close() - return 204 - - ### DELETE handlers (examples) - ### (we use the predefined methods in davcmd instead of doing - ### a rm directly - ### - - def delone(self, uri): - """ delete a single resource - - You have to return a result dict of the form - uri:error_code - or None if everything's ok - - """ - if uri[-1]=='/':uri=uri[:-1] - res=delone(self,uri) - # parent='/'.join(uri.split('/')[:-1]) - return res - - def deltree(self, uri): - """ delete a collection - - You have to return a result dict of the form - uri:error_code - or None if everything's ok - """ - if uri[-1]=='/':uri=uri[:-1] - res=deltree(self, uri) - # parent='/'.join(uri.split('/')[:-1]) - return res - - - ### - ### MOVE handlers (examples) - ### - - def moveone(self, src, dst, overwrite): - """ move one resource with Depth=0 - - an alternative implementation would be - - result_code=201 - if overwrite: - result_code=204 - r=os.system("rm -f '%s'" %dst) - if r: return 412 - r=os.system("mv '%s' '%s'" %(src,dst)) - if r: return 412 - return result_code - - (untested!). This would not use the davcmd functions - and thus can only detect errors directly on the root node. - """ - res=moveone(self, src, dst, overwrite) - return res - - def movetree(self, src, dst, overwrite): - """ move a collection with Depth=infinity - - an alternative implementation would be - - result_code=201 - if overwrite: - result_code=204 - r=os.system("rm -rf '%s'" %dst) - if r: return 412 - r=os.system("mv '%s' '%s'" %(src,dst)) - if r: return 412 - return result_code - - (untested!). This would not use the davcmd functions - and thus can only detect errors directly on the root node""" - - res=movetree(self, src, dst, overwrite) - return res - - ### - ### COPY handlers - ### - - def copyone(self, src, dst, overwrite): - """ copy one resource with Depth=0 - - an alternative implementation would be - - result_code=201 - if overwrite: - result_code=204 - r=os.system("rm -f '%s'" %dst) - if r: return 412 - r=os.system("cp '%s' '%s'" %(src,dst)) - if r: return 412 - return result_code - - (untested!). This would not use the davcmd functions - and thus can only detect errors directly on the root node. - """ - res=copyone(self, src, dst, overwrite) - return res - - def copytree(self, src, dst, overwrite): - """ copy a collection with Depth=infinity - - an alternative implementation would be - - result_code=201 - if overwrite: - result_code=204 - r=os.system("rm -rf '%s'" %dst) - if r: return 412 - r=os.system("cp -r '%s' '%s'" %(src,dst)) - if r: return 412 - return result_code - - (untested!). This would not use the davcmd functions - and thus can only detect errors directly on the root node""" - res=copytree(self, src, dst, overwrite) - return res - - ### - ### copy methods. - ### This methods actually copy something. low-level - ### They are called by the davcmd utility functions - ### copytree and copyone (not the above!) - ### Look in davcmd.py for further details. - ### - - def copy(self, src, dst): - src=urllib.unquote(src) - dst=urllib.unquote(dst) - ct = self._get_dav_getcontenttype(src) - data = self.get_data(src) - self.put(dst, data, ct) - return 201 - - def copycol(self, src, dst): - """ copy a collection. - - As this is not recursive (the davserver recurses itself) - we will only create a new directory here. For some more - advanced systems we might also have to copy properties from - the source to the destination. - """ - return self.mkcol(dst) - - - def exists(self, uri): - """ test if a resource exists """ - result = False - cr, uid, pool,dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - return True - try: - node = self.uri2object(cr, uid, pool, uri2) - if node: - result = True - except Exception: - pass - cr.close() - return result - - def unlock(self, uri, token): - """ Unlock a resource from that token - - @return True if unlocked, False if no lock existed, Exceptions - """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - if not dbname: - if cr: cr.close() - raise DAV_Error, 409 - - node = self.uri2object(cr, uid, pool, uri2) - try: - node_fn = node.dav_unlock - except AttributeError: - # perhaps the node doesn't support locks - cr.close() - raise DAV_Error(400, 'No locks for this resource.') - - res = self._try_function(node_fn, (cr, token), "unlock %s" % uri, cr=cr) - cr.commit() - cr.close() - return res - - def lock(self, uri, lock_data): - """ Lock (may create) resource. - Data is a dict, may contain: - depth, token, refresh, lockscope, locktype, owner - """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - created = False - if not dbname: - if cr: cr.close() - raise DAV_Error, 409 - - try: - node = self.uri2object(cr, uid, pool, uri2[:]) - except Exception: - node = False - - objname = misc.ustr(uri2[-1]) - - if not node: - dir_node = self.uri2object(cr, uid, pool, uri2[:-1]) - if not dir_node: - cr.close() - raise DAV_NotFound('Parent folder not found.') - - # We create a new node (file) but with empty data=None, - # as in RFC4918 p. 9.10.4 - node = self._try_function(dir_node.create_child, (cr, objname, None), - "create %s" % objname, cr=cr) - if not node: - cr.commit() - cr.close() - raise DAV_Error(400, "Failed to create resource.") - - created = True - - try: - node_fn = node.dav_lock - except AttributeError: - # perhaps the node doesn't support locks - cr.close() - raise DAV_Error(400, 'No locks for this resource.') - - # Obtain the lock on the node - lres, pid, token = self._try_function(node_fn, (cr, lock_data), "lock %s" % objname, cr=cr) - - if not lres: - cr.commit() - cr.close() - raise DAV_Error(423, "Resource already locked.") - - assert isinstance(lres, list), 'lres: %s' % repr(lres) - - try: - data = mk_lock_response(self, uri, lres) - cr.commit() - except Exception: - cr.close() - raise - - cr.close() - return created, data, token - - @memoize(CACHE_SIZE) - def is_collection(self, uri): - """ test if the given uri is a collection """ - cr, uid, pool, dbname, uri2 = self.get_cr(uri) - try: - if not dbname: - return True - node = self.uri2object(cr,uid,pool, uri2) - if not node: - raise DAV_NotFound2(uri2) - if node.type in ('collection','database'): - return True - return False - finally: - if cr: cr.close() - -#eof - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/doc/well-known.rst b/addons/document_webdav/doc/well-known.rst deleted file mode 100644 index ce7dbd7c9cf..00000000000 --- a/addons/document_webdav/doc/well-known.rst +++ /dev/null @@ -1,29 +0,0 @@ -================= -Well-known URIs -================= - -In accordance to IETF RFC 5785 [1], we shall publish a few locations -on the root of our http server, so that clients can discover our -services (CalDAV, eg.). - -This module merely installs a special http request handler, that will -redirect the URIs from "http://our-server:port/.well-known/xxx' to -the correct path for each xxx service. - -Note that well-known URIs cannot have a database-specific behaviour, -they are server-wide. So, we have to explicitly chose one of our databases -to serve at them. By default, the database of the configuration file -is chosen - -Example config: - -[http-well-known] -num_services = 2 -db_name = openerp-main ; must define that for path_1 below -service_1 = caldav -path_1 = /webdav/%(db_name)s/Calendars/ -service_2 = foo -path_2 = /other_db/static/Foo.html - - -[1] http://www.rfc-editor.org/rfc/rfc5785.txt \ No newline at end of file diff --git a/addons/document_webdav/document_webdav.py b/addons/document_webdav/document_webdav.py deleted file mode 100644 index 7c93e735c69..00000000000 --- a/addons/document_webdav/document_webdav.py +++ /dev/null @@ -1,127 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -from openerp.osv import fields, osv -from openerp.tools import config - -import nodes - -class document_davdir(osv.osv): - _inherit = 'document.directory' - - _columns = { - # Placed here just for a reference - 'dav_prop_ids': fields.one2many('document.webdav.dir.property', 'dir_id', 'DAV properties'), - } - - def get_node_class(self, cr, uid, ids, dbro=None, dynamic=False, context=None): - # Note: in this function, nodes come from document_webdav/nodes.py ! - if dbro is None: - dbro = self.browse(cr, uid, ids, context=context) - - if dynamic: - return nodes.node_res_obj - elif dbro.type == 'directory': - return nodes.node_dir - elif dbro.type == 'ressource': - return nodes.node_res_dir - else: - raise ValueError("Directory node for %s type.", dbro.type) - - def _prepare_context(self, cr, uid, nctx, context=None): - nctx.node_file_class = nodes.node_file - # We can fill some more fields, but avoid any expensive function - # that might be not worth preparing. - nctx.extra_ctx['webdav_path'] = '/'+config.get_misc('webdav','vdir','webdav') - usr_obj = self.pool.get('res.users') - res = usr_obj.read(cr, uid, uid, ['login','lang']) - if res: - nctx.extra_ctx['username'] = res['login'] - nctx.extra_ctx['lang'] = res['lang'] - # TODO group - return - - def _locate_child(self, cr, uid, root_id, uri, nparent, ncontext): - """ try to locate the node in uri, - Return a tuple (node_dir, remaining_path) - """ - return (nodes.node_database(context=ncontext), uri) - -class dav_dir_property(osv.osv): - """ Arbitrary WebDAV properties, attached to document.directories. - - Some DAV properties have to be settable at directories, depending - on the database directory structure. - - Example would be the principal-URL. - - There _can_ be properties without a directory, which means that they - globally apply to all the directories (aka. collections) of the - present database. - """ - _name = 'document.webdav.dir.property' - - _columns = { - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), - 'write_date': fields.datetime('Date Modified', readonly=True), - 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), - 'dir_id': fields.many2one('document.directory', 'Directory', required=False, select=1), - 'namespace': fields.char('Namespace', size=127, required=True), - 'name': fields.char('Name', size=64, required=True), - 'value': fields.text('Value'), - 'do_subst': fields.boolean('Substitute', required=True), - } - - _defaults = { - 'do_subst': False, - } - -class dav_file_property(osv.osv): - """ Arbitrary WebDAV properties, attached to ir.attachments. - - A special case is the locks that can be applied on file nodes. - - There _can_ be properties without a file (RFC?), which means that they - globally apply to all the attachments of the present database. - - TODO access permissions, per property. - """ - _name = 'document.webdav.file.property' - - _columns = { - 'create_date': fields.datetime('Date Created', readonly=True), - 'create_uid': fields.many2one('res.users', 'Creator', readonly=True), - 'write_date': fields.datetime('Date Modified', readonly=True), - 'write_uid': fields.many2one('res.users', 'Last Modification User', readonly=True), - 'file_id': fields.many2one('ir.attachment', 'Document', required=False, select=1), - 'namespace': fields.char('Namespace', size=127, required=True), - 'name': fields.char('Name', size=64, required=True), - 'value': fields.text('Value'), - 'do_subst': fields.boolean('Substitute', required=True), - } - - _defaults = { - 'do_subst': False, - } - -#eof -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/i18n/ar.po b/addons/document_webdav/i18n/ar.po deleted file mode 100644 index 3c941c4280e..00000000000 --- a/addons/document_webdav/i18n/ar.po +++ /dev/null @@ -1,202 +0,0 @@ -# Arabic translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-01 18:19+0000\n" -"Last-Translator: gehad shaat \n" -"Language-Team: Arabic \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:25+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "تاريخ الإنشاء" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "مستندات" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "خصائص الوثيقة" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "ابحث عن خصائص الوثيقة" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "نطاق أسماء" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "خصائص DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "الوثيق.ويبDAV.الملÙ.الخاصية" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "تجميع حسب..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "ستضا٠هذه الخصائص إلى طلبات صÙحة الويب DAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "خصائص DAV للوثائق" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "مستند" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "مجلدات" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "خصائص الويبDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "خصائص DAV للمجلدات" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "خصائص" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "الاسم" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "الوثيقة.الويبDAV.مباشر.الخاصية" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "قيمة" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "مسار" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "اخر مستخدم قام بالتعديل" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "مسار" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "تاريخ التعديل" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "المÙنشÙئ" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "خصائص الوثيقة" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "خصائص DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "استبدال" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "خطأ ! لايمكنك إنشاء مسارات متداخلة." - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "لا يمكن أن يكون المسار رئيسي لنÙسه!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "اسم المسار يجب ان يكون Ùريدا !" - -#~ msgid "Dynamic context" -#~ msgstr "النص المتحرك" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "المسار يجب ان يكون له مسار رئيسي أو مخزن" - -#~ msgid "DAV properties for folders" -#~ msgstr "خصائص DAV للملÙات" - -#~ msgid "DAV properties for documents" -#~ msgstr "خصائصDAV للوثائق" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "خدمة الويبDAV لإدارة الوثائق" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "الرجاء تثبيت PyWebDAV من " -#~ "http://code.google.com/p/pywebdav/downloads/detailØŸname=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "خطأ استيراد PyWebDAV" diff --git a/addons/document_webdav/i18n/bg.po b/addons/document_webdav/i18n/bg.po deleted file mode 100644 index 997527b3f2e..00000000000 --- a/addons/document_webdav/i18n/bg.po +++ /dev/null @@ -1,173 +0,0 @@ -# Bulgarian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-01 20:38+0000\n" -"Last-Translator: Dimitar Markov \n" -"Language-Team: Bulgarian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Дата на Ñъздаване" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "ПроÑтранÑтво на имената" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Групирай по" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Документ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "СвойÑтва" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Име" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "СтойноÑÑ‚" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "ДиректориÑ" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "ПоÑледна промÑна потребител" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "ПоÑока" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Дата на промÑна" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Създател" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "ЗамеÑти" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Грешка! Ðе мжете да Ñъздавате директории реурÑивно." - -#~ msgid "The directory name must be unique !" -#~ msgstr "Името на директориÑта Ñ‚Ñ€Ñбва да бъде уникално" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "ДиректориÑта не може да наÑледÑва Ñама Ñебе Ñи!" diff --git a/addons/document_webdav/i18n/ca.po b/addons/document_webdav/i18n/ca.po deleted file mode 100644 index 310fa836ef0..00000000000 --- a/addons/document_webdav/i18n/ca.po +++ /dev/null @@ -1,202 +0,0 @@ -# Catalan translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-08-17 20:43+0000\n" -"Last-Translator: mgaja (GrupoIsep.com) \n" -"Language-Team: Catalan \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Data de creació" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Cerca propietats del document" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espai de noms" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propietats DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar per..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Aquestes propietats s'afegiran a les peticions WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propietats WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propietats" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nom" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.propietat" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directori" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuari de l'última modificació" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Adr" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Data de modificació" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Creador/a" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substitut" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Error d'importació PyWebDAV!" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Error! No podeu crear directoris recursius." - -#~ msgid "DAV properties for documents" -#~ msgstr "Propietats DAV per a documents" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propietats DAV per a carpetes" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "El directori no pot ser el seu propi pare!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "El nom de directori ha de ser únic!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Instal·leu PyWebDAV des de " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Dynamic context" -#~ msgstr "Context dinàmic" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Servidor WebDAV per a gestió de documents" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "El directori ha de tenir un pare o un emmagatzematge." diff --git a/addons/document_webdav/i18n/cs.po b/addons/document_webdav/i18n/cs.po deleted file mode 100644 index 6daf586ef42..00000000000 --- a/addons/document_webdav/i18n/cs.po +++ /dev/null @@ -1,164 +0,0 @@ -# Czech translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-08-03 03:52+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) \n" -"Language-Team: Czech \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/da.po b/addons/document_webdav/i18n/da.po deleted file mode 100644 index 9babfd37596..00000000000 --- a/addons/document_webdav/i18n/da.po +++ /dev/null @@ -1,164 +0,0 @@ -# Danish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-11-08 21:52+0000\n" -"Last-Translator: OpenERP Danmark / Henning Dinsen \n" -"Language-Team: Danish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Gruppér efter..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/de.po b/addons/document_webdav/i18n/de.po deleted file mode 100644 index 2c46ed76ccc..00000000000 --- a/addons/document_webdav/i18n/de.po +++ /dev/null @@ -1,204 +0,0 @@ -# German translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-18 06:49+0000\n" -"Last-Translator: Ferdinand \n" -"Language-Team: German \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Erstellungsdatum" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokumente" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Dokumenteigenschaft" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Dokumenteigenschaften suchen" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namensbereich" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV Eigenschaften" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Gruppierung..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Diese Eigenschaften werden bei WebDav-Anfragen angefügt" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV Eigenschaften für Dokumente" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokument" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Verzeichnisse" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDav Eigenschaften" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV Eigenschaften für Verzeichnisse" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Eigenschaften" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Bezeichnung" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Wert" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Verzeichnis" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Letzte Änderung Benutzer" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Verzeichnis" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Änderungsdatum" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Ersteller" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Dokumenteneigenschaft" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV Eigenschaften" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituiere" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Fehler ! Sie können keine rekursiven Verzeichnisse anlegen." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV Server für Dokumentenmanagement" - -#~ msgid "Dynamic context" -#~ msgstr "Dyn. Kontext" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV Eigenschaften für Verzeichnisse" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Das Verzeichnis muss eindeutig sein" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Das Verzeichnis kann nicht sich selbst übergeordnet werden" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "" -#~ "Das Verzeichnis muss ein Hauptverzeichnis oder einen Speicher zugewiesen " -#~ "haben" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Bitte installieren Sie PyWebDAV von hier: " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV Import Fehler!" - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV Eigenschaften für Dokumente" diff --git a/addons/document_webdav/i18n/document_webdav.pot b/addons/document_webdav/i18n/document_webdav.pot deleted file mode 100644 index 6df42c7fc8e..00000000000 --- a/addons/document_webdav/i18n/document_webdav.pot +++ /dev/null @@ -1,163 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * document_webdav -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 7.0alpha\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 17:05+0000\n" -"Last-Translator: <>\n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: \n" -"Plural-Forms: \n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" - diff --git a/addons/document_webdav/i18n/el.po b/addons/document_webdav/i18n/el.po deleted file mode 100644 index 5b9cc4758e0..00000000000 --- a/addons/document_webdav/i18n/el.po +++ /dev/null @@ -1,164 +0,0 @@ -# Greek translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-08-03 06:09+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) \n" -"Language-Team: Greek \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/en_GB.po b/addons/document_webdav/i18n/en_GB.po deleted file mode 100644 index 704d2bdeb48..00000000000 --- a/addons/document_webdav/i18n/en_GB.po +++ /dev/null @@ -1,202 +0,0 @@ -# English (United Kingdom) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-23 15:26+0000\n" -"Last-Translator: mrx5682 \n" -"Language-Team: English (United Kingdom) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Date Created" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documents" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Document property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Search Document properties" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namespace" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV properties" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Group By..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "These properties will be added to WebDAV requests" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV Properties for Documents" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Folders" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV properties" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV Properties for Folders" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Properties" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Name" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Value" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directory" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Last Modification User" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Date Modified" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Creator" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Document Property" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV Properties" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substitute" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Error! You can not create recursive Directories." - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Directory cannot be parent of itself!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "The directory name must be unique !" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV Import Error!" - -#~ msgid "Dynamic context" -#~ msgstr "Dynamic context" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Directory must have a parent or a storage" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV server for Document Management" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV properties for folders" - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV properties for documents" diff --git a/addons/document_webdav/i18n/es.po b/addons/document_webdav/i18n/es.po deleted file mode 100644 index 08953f7c55e..00000000000 --- a/addons/document_webdav/i18n/es.po +++ /dev/null @@ -1,202 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-12 10:42+0000\n" -"Last-Translator: Pedro Manuel Baeza \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Fecha de creación" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Propiedad del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Buscar propiedades del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espacio de nombres" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades se añadirán a las peticiones WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Propiedades DAV para los documentos" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Carpetas" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Propiedades DAV para las carpetas" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directorio" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Fecha de Modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Propiedad del documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" - -#~ msgid "The directory name must be unique !" -#~ msgstr "¡El nombre de directorio debe ser único!" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "¡Error de importación PyWebDAV!" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "¡Error! No puede crear directorios recursivos." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Servidor WebDAV para gestión de documentos" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propiedades DAV para carpetas" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "El directorio debe tener un padre o un almacenamiento." - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "¡El directorio no puede ser su propio padre!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Instale PyWebDAV desde " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Dynamic context" -#~ msgstr "Contexto dinámico" - -#~ msgid "DAV properties for documents" -#~ msgstr "Propiedades DAV para documentos" diff --git a/addons/document_webdav/i18n/es_CR.po b/addons/document_webdav/i18n/es_CR.po deleted file mode 100644 index aadb8755d6e..00000000000 --- a/addons/document_webdav/i18n/es_CR.po +++ /dev/null @@ -1,203 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-02-15 20:44+0000\n" -"Last-Translator: Freddy Gonzalez \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" -"Language: es\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Fecha de creación" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Buscar propiedades del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espacio de nombres" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades se añadirán a las peticiones WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV Propiedades para Documentos" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Directorios" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV Propiedades para carpetas" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directorio" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Fecha de Modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "¡Error! No puede crear directorios recursivos." - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "¡Error de importación PyWebDAV!" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "¡El directorio no puede ser su propio padre!" - -#~ msgid "Dynamic context" -#~ msgstr "Contexto dinámico" - -#~ msgid "The directory name must be unique !" -#~ msgstr "¡El nombre de directorio debe ser único!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Instale PyWebDAV desde " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "El directorio debe tener un padre o un almacenamiento." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Servidor WebDAV para gestión de documentos" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propiedades DAV para carpetas" - -#~ msgid "DAV properties for documents" -#~ msgstr "Propiedades DAV para documentos" diff --git a/addons/document_webdav/i18n/es_EC.po b/addons/document_webdav/i18n/es_EC.po deleted file mode 100644 index bc7602a94d5..00000000000 --- a/addons/document_webdav/i18n/es_EC.po +++ /dev/null @@ -1,164 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-09-17 19:10+0000\n" -"Last-Translator: Paco Molinero \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/es_MX.po b/addons/document_webdav/i18n/es_MX.po deleted file mode 100644 index 980373d3850..00000000000 --- a/addons/document_webdav/i18n/es_MX.po +++ /dev/null @@ -1,226 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-13 09:01+0000\n" -"Last-Translator: Alberto Luengo Cabanillas (Pexego) \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:43+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Fecha de creación" - -#. module: document_webdav -#: constraint:document.directory:0 -msgid "Error! You can not create recursive Directories." -msgstr "¡Error! No puede crear directorios recursivos." - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Buscar propiedades del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espacio de nombres" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades se añadirán a las peticiones WebDAV" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_file_props -msgid "DAV properties for documents" -msgstr "Propiedades DAV para documentos" - -#. module: document_webdav -#: code:addons/document_webdav/webdav.py:37 -#, python-format -msgid "PyWebDAV Import Error!" -msgstr "¡Error de importación PyWebDAV!" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.module.module,description:document_webdav.module_meta_information -msgid "" -" With this module, the WebDAV server for the documents is activated.\n" -" You can then use any compatible browser to remotely see the " -"attachments of OpenObject.\n" -"\n" -" After installation, the webDAV server can be controlled by a " -"[webdav] section in the server's config.\n" -" Server Configuration Parameter:\n" -" [webdav]\n" -" ; enable = True ; Serve webdav over the http(s) servers\n" -" ; vdir = webdav ; the directory that webdav will be served at\n" -" ; this default val means that webdav will be\n" -" ; on \"http://localhost:8069/webdav/\n" -" ; verbose = True ; Turn on the verbose messages of webdav\n" -" ; debug = True ; Turn on the debugging messages of webdav\n" -" ; since the messages are routed to the python logging, with\n" -" ; levels \"debug\" and \"debug_rpc\" respectively, you can leave\n" -" ; these options on\n" -msgstr "" -" Con este módulo se activa el servidor WebDAV para los documentos.\n" -" Puede utilizar cualquier navegador compatible para ver los archivos " -"adjuntos de forma remota OpenObject.\n" -"\n" -" Después de la instalación, el servidor WebDAV puede ser controlado en la " -"sección [webdav] de la configuración del servidor.\n" -" Parámetros de configuración del servidor:\n" -" [webdav]\n" -" ; enable = True ; Serve webdav over the http(s) servers\n" -" ; vdir = webdav ; the directory that webdav will be served at\n" -" ; this default val means that webdav will be\n" -" ; on \"http://localhost:8069/webdav/\n" -" ; verbose = True ; Turn on the verbose messages of webdav\n" -" ; debug = True ; Turn on the debugging messages of webdav\n" -" ; since the messages are routed to the python logging, with\n" -" ; levels \"debug\" and \"debug_rpc\" respectively, you can leave\n" -" ; these options on\n" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "Directory cannot be parent of itself!" -msgstr "¡El directorio no puede ser su propio padre!" - -#. module: document_webdav -#: view:document.directory:0 -msgid "Dynamic context" -msgstr "Contexto dinámico" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "The directory name must be unique !" -msgstr "¡El nombre de directorio debe ser único!" - -#. module: document_webdav -#: code:addons/document_webdav/webdav.py:37 -#, python-format -msgid "" -"Please install PyWebDAV from " -"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -"0.9.4.tar.gz&can=2&q=/" -msgstr "" -"Instale PyWebDAV desde " -"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -"0.9.4.tar.gz&can=2&q=/" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_dir_props -msgid "DAV properties for folders" -msgstr "Propiedades DAV para carpetas" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directorio" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Fecha de Modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: model:ir.module.module,shortdesc:document_webdav.module_meta_information -msgid "WebDAV server for Document Management" -msgstr "Servidor WebDAV para gestión de documentos" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "Directory must have a parent or a storage" -msgstr "El directorio debe tener un padre o un almacenamiento." - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" diff --git a/addons/document_webdav/i18n/es_PY.po b/addons/document_webdav/i18n/es_PY.po deleted file mode 100644 index 1abd3318f11..00000000000 --- a/addons/document_webdav/i18n/es_PY.po +++ /dev/null @@ -1,202 +0,0 @@ -# Spanish (Paraguay) translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-21 16:13+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Spanish (Paraguay) \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Fecha de creación" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Buscar propiedades del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espacio de nombres" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades se añadirán a las peticiones WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Carpeta" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario de la última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Carp" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Fecha de modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "¡Error de importación PyWebDAV!" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "¡Error! No puede crear carpetas recursivos." - -#~ msgid "DAV properties for documents" -#~ msgstr "Propiedades DAV para documentos" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propiedades DAV para carpetas" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "¡El directorio no puede ser su propio padre!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "¡El nombre de carpeta debe ser único!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Instale PyWebDAV desde " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Dynamic context" -#~ msgstr "Contexto dinámico" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "La Carpeta debe tener un padre o un almacenamiento." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Servidor WebDAV para gestión de documentos" diff --git a/addons/document_webdav/i18n/es_VE.po b/addons/document_webdav/i18n/es_VE.po deleted file mode 100644 index 980373d3850..00000000000 --- a/addons/document_webdav/i18n/es_VE.po +++ /dev/null @@ -1,226 +0,0 @@ -# Spanish translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2011-01-11 11:15+0000\n" -"PO-Revision-Date: 2011-01-13 09:01+0000\n" -"Last-Translator: Alberto Luengo Cabanillas (Pexego) \n" -"Language-Team: Spanish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2011-09-05 05:43+0000\n" -"X-Generator: Launchpad (build 13830)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Fecha de creación" - -#. module: document_webdav -#: constraint:document.directory:0 -msgid "Error! You can not create recursive Directories." -msgstr "¡Error! No puede crear directorios recursivos." - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Buscar propiedades del documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espacio de nombres" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades se añadirán a las peticiones WebDAV" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_file_props -msgid "DAV properties for documents" -msgstr "Propiedades DAV para documentos" - -#. module: document_webdav -#: code:addons/document_webdav/webdav.py:37 -#, python-format -msgid "PyWebDAV Import Error!" -msgstr "¡Error de importación PyWebDAV!" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.module.module,description:document_webdav.module_meta_information -msgid "" -" With this module, the WebDAV server for the documents is activated.\n" -" You can then use any compatible browser to remotely see the " -"attachments of OpenObject.\n" -"\n" -" After installation, the webDAV server can be controlled by a " -"[webdav] section in the server's config.\n" -" Server Configuration Parameter:\n" -" [webdav]\n" -" ; enable = True ; Serve webdav over the http(s) servers\n" -" ; vdir = webdav ; the directory that webdav will be served at\n" -" ; this default val means that webdav will be\n" -" ; on \"http://localhost:8069/webdav/\n" -" ; verbose = True ; Turn on the verbose messages of webdav\n" -" ; debug = True ; Turn on the debugging messages of webdav\n" -" ; since the messages are routed to the python logging, with\n" -" ; levels \"debug\" and \"debug_rpc\" respectively, you can leave\n" -" ; these options on\n" -msgstr "" -" Con este módulo se activa el servidor WebDAV para los documentos.\n" -" Puede utilizar cualquier navegador compatible para ver los archivos " -"adjuntos de forma remota OpenObject.\n" -"\n" -" Después de la instalación, el servidor WebDAV puede ser controlado en la " -"sección [webdav] de la configuración del servidor.\n" -" Parámetros de configuración del servidor:\n" -" [webdav]\n" -" ; enable = True ; Serve webdav over the http(s) servers\n" -" ; vdir = webdav ; the directory that webdav will be served at\n" -" ; this default val means that webdav will be\n" -" ; on \"http://localhost:8069/webdav/\n" -" ; verbose = True ; Turn on the verbose messages of webdav\n" -" ; debug = True ; Turn on the debugging messages of webdav\n" -" ; since the messages are routed to the python logging, with\n" -" ; levels \"debug\" and \"debug_rpc\" respectively, you can leave\n" -" ; these options on\n" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "Directory cannot be parent of itself!" -msgstr "¡El directorio no puede ser su propio padre!" - -#. module: document_webdav -#: view:document.directory:0 -msgid "Dynamic context" -msgstr "Contexto dinámico" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "The directory name must be unique !" -msgstr "¡El nombre de directorio debe ser único!" - -#. module: document_webdav -#: code:addons/document_webdav/webdav.py:37 -#, python-format -msgid "" -"Please install PyWebDAV from " -"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -"0.9.4.tar.gz&can=2&q=/" -msgstr "" -"Instale PyWebDAV desde " -"http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -"0.9.4.tar.gz&can=2&q=/" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_dir_props -msgid "DAV properties for folders" -msgstr "Propiedades DAV para carpetas" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nombre" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directorio" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Fecha de Modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: model:ir.module.module,shortdesc:document_webdav.module_meta_information -msgid "WebDAV server for Document Management" -msgstr "Servidor WebDAV para gestión de documentos" - -#. module: document_webdav -#: sql_constraint:document.directory:0 -msgid "Directory must have a parent or a storage" -msgstr "El directorio debe tener un padre o un almacenamiento." - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" diff --git a/addons/document_webdav/i18n/et.po b/addons/document_webdav/i18n/et.po deleted file mode 100644 index 0bdcabf4967..00000000000 --- a/addons/document_webdav/i18n/et.po +++ /dev/null @@ -1,164 +0,0 @@ -# Estonian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-08-03 06:12+0000\n" -"Last-Translator: lyyser \n" -"Language-Team: Estonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/eu.po b/addons/document_webdav/i18n/eu.po deleted file mode 100644 index 34ba223e20d..00000000000 --- a/addons/document_webdav/i18n/eu.po +++ /dev/null @@ -1,164 +0,0 @@ -# Basque translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-10-08 07:38+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Basque \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/fi.po b/addons/document_webdav/i18n/fi.po deleted file mode 100644 index 0165aa7580d..00000000000 --- a/addons/document_webdav/i18n/fi.po +++ /dev/null @@ -1,202 +0,0 @@ -# Finnish translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-07-20 10:18+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Finnish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Luontipäivä" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Asiakirjat" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Hae dokumentin ominaisuuksia" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Nimiavaruus" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV ominaisuudet" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Ryhmittely.." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Nämä ominaisuudet lisätään WebDAV pyyntöihin" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Dokumenttien DAV ominaisuudet" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokumentti" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Hakemistot" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV ominaisuudet" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Hakemistojen DAV ominaisuudet" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Ominaisuudet" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nimi" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Arvo" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Hakemisto" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Viimeksi muuttanut käyttäjä" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Hakemisto" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Muokkauspäivä" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Tekijä" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV ominaisuudet" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Korvaa" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Virhe! Et voi luoda rekursiivisia kansioita." - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV ominaisuudet dokumenteille" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Hakemisto ei voi olla itsensä ylähakemisto!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Hakemiston nimen tulee olla uniikki !" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV tuontivirhe !" - -#~ msgid "Dynamic context" -#~ msgstr "Dynaaminen konteksti" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV palvelin dokumenttienhallinnalle" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Hakemistolla täytyy olla ylätason hakemisto tai tietovarasto" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV ominaisuudet hakemistoille" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Asenna PyWebDAV osoitteesta " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" diff --git a/addons/document_webdav/i18n/fr.po b/addons/document_webdav/i18n/fr.po deleted file mode 100644 index b3f218be952..00000000000 --- a/addons/document_webdav/i18n/fr.po +++ /dev/null @@ -1,202 +0,0 @@ -# French translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-21 13:47+0000\n" -"Last-Translator: Florian Hatat \n" -"Language-Team: French \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Date de création" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documents" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Propriétés du document" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Rechercher dans les propriétés du document" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espace de noms" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propriétés du DAV (Distributed Authoring and Versioning)" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Groupé par ..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Ces propriétés seront ajoutées aux requêtes WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Propriétés DAV pour les documents" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Répertoires" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propriétés WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Propriétés DAV pour les répertoires" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propriétés" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nom" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valeur" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Répertoire" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Utilisateur de la dernière modification" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Répertoire" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Date de modification" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Créateur" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Propriétés du document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Propriétés DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Remplacer" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Erreur! Vous ne pouvez pas créer de répertoires récursifs." - -#~ msgid "Dynamic context" -#~ msgstr "Contexte dynamique" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propriétés DAV pour les classeurs" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Un répertoire ne peut pas être son propre parent !" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Le nom du répertoire doit être unique !" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Installer PyWebDAV à partir de l'URL : " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Le répertoire doit avoir un parent ou un espace de stockage" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Erreur d'import PyWebDAV !" - -#~ msgid "DAV properties for documents" -#~ msgstr "Propriétés DAV (Distributed Authoring and Versioning) du document" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Serveur WebDAV pour le module de Gestion Documentaire" diff --git a/addons/document_webdav/i18n/gl.po b/addons/document_webdav/i18n/gl.po deleted file mode 100644 index fa71b913b61..00000000000 --- a/addons/document_webdav/i18n/gl.po +++ /dev/null @@ -1,202 +0,0 @@ -# Galician translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-02-24 01:19+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Galician \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Data de creación" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Búsqueda de propiedades do documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Espazo de nomes" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propiedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar por ..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propiedades engadiranse as peticións WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propiedades WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propiedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nome" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "documento.webdav.dir.propiedad" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directorio" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuario última modificación" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Data de modificación" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Creador" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituto" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Erro de importación PyWebDAV!" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Erro! Non se pode crear directorios recursivos." - -#~ msgid "DAV properties for documents" -#~ msgstr "Propiedades DAV para documentos" - -#~ msgid "The directory name must be unique !" -#~ msgstr "O nome do directorio debe ser único!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Instale PyWebDAV desde " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "O directorio non pode ser o seu propio pai!" - -#~ msgid "Dynamic context" -#~ msgstr "Contexto dinámico" - -#~ msgid "DAV properties for folders" -#~ msgstr "Propiedades DAV para cartafois" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Servidor WebDAV para xestión de documentos" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "O directorio debe ter un pai ou un almacenamento." diff --git a/addons/document_webdav/i18n/gu.po b/addons/document_webdav/i18n/gu.po deleted file mode 100644 index 115c85051df..00000000000 --- a/addons/document_webdav/i18n/gu.po +++ /dev/null @@ -1,164 +0,0 @@ -# Gujarati translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-04-23 09:32+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Gujarati \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "બનાવà«àª¯àª¾àª¨à«€ તારીખ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "દસà«àª¤àª¾àªµà«‡àªœà«‹" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "ગà«àª°à«àªª દà«àªµàª¾àª°àª¾..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "દસà«àª¤àª¾àªµà«‡àªœ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "ફોલà«àª¡àª°à«àª¸" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "ગà«àª£àª§àª°à«àª®à«‹" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "નામ" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "મૂલà«àª¯" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "ડિરેકà«àªŸàª°à«€" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "ફેરફાર કરà«àª¯àª¾àª¨à«€ તારીખ" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "રચનાર" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/hr.po b/addons/document_webdav/i18n/hr.po deleted file mode 100644 index d0388f2da0a..00000000000 --- a/addons/document_webdav/i18n/hr.po +++ /dev/null @@ -1,176 +0,0 @@ -# Croatian translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-01-27 10:29+0000\n" -"Last-Translator: Davor Bojkić \n" -"Language-Team: Croatian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Datum stvaranja" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokumenti" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Svojstva dokumenta" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Pretraži svojstva dokumenta" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Imenski prostor" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV svojstva" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupiraj po..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Ova svojstva će biti dodana DAV upitima" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV svojstva za dokumente" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokument" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Mape" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WEB DAV svojstva" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV svojstva za mape" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Svojstva" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Naziv" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Vrijednost" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Mapa" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Korisnik posljednje promjene" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Datum izmjene" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Autor" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Svojstva dokumenta" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV svojstva" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Zamijeni" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "PogreÅ¡ka! Ne možete stvarati rekurzivne mape." - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Mapa ne može biti sama sebi nadreÄ‘ena!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Naziv mape mora biti jedinstven!" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Mapa mora imati roditelja ili pohranu (storage)" diff --git a/addons/document_webdav/i18n/hu.po b/addons/document_webdav/i18n/hu.po deleted file mode 100644 index ba8d5dea690..00000000000 --- a/addons/document_webdav/i18n/hu.po +++ /dev/null @@ -1,172 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * document_webdav -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-02-28 23:29+0000\n" -"Last-Translator: krnkris \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Létrehozás dátuma" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokumentumok" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Dokumentum tulajdonsága" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Dokumentum tulajdonságok keresése" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Név helye" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV tulajdonságai" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Csoportosítás..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Ezek a tulajdonságok hozzá lesznek adva a WebDAV igényhez" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV tulajdonságok a dokumetumokhoz" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokumentum" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Könyvtárak" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV tulajdonságok" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV tulajdonságok a könyvtárakhoz" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Tulajdonságok" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Név" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Érték" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Könyvtár" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Utolsó módosítást végzó felhasználó" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Mappa" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Módosítás dátuma" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Létrehozó" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Dokument tulajdonság" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV tuajdonság" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Helyettesítés" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Hiba! Nem hozhat létre körkörös mappahivatkozást." - -#~ msgid "The directory name must be unique !" -#~ msgstr "A könyvtár nevének egyedinek kell lennie !" - -#~ msgid "Dynamic context" -#~ msgstr "Dinamikus környezet" diff --git a/addons/document_webdav/i18n/id.po b/addons/document_webdav/i18n/id.po deleted file mode 100644 index 71cd66255f1..00000000000 --- a/addons/document_webdav/i18n/id.po +++ /dev/null @@ -1,164 +0,0 @@ -# Indonesian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-08-17 09:23+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Indonesian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "" diff --git a/addons/document_webdav/i18n/it.po b/addons/document_webdav/i18n/it.po deleted file mode 100644 index ba97f135b89..00000000000 --- a/addons/document_webdav/i18n/it.po +++ /dev/null @@ -1,202 +0,0 @@ -# Italian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-01-12 13:21+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Italian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Data di creazione" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documenti" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Proprietà documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Cerca proprietà documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namespace" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Proprietà DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Raggruppa per..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Queste proprietà verranno aggiunte alle richieste WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Proprietà DAV per Documenti" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Cartelle" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Proprietà WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Proprietà DAV per Cartelle" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Proprietà" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nome" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valore" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directory" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Ultimo utente modificatore" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Data ultima modifica" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Creatore" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Proprietà Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Proprietà DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Sostituire" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Errore! Non è possibile creare directory ricorsive." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "server WebDAV per Gestione Documentale" - -#~ msgid "Dynamic context" -#~ msgstr "Contesto dinamico" - -#~ msgid "DAV properties for folders" -#~ msgstr "Proprietà DAV per cartelle" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "La cartella non può essere padre di sè stessa!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Il nome della cartella deve essere univoco!" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Per favore installare PyWebDAV dall'indirizzo: " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV: errore importazione!" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "La Cartella deve avere un padre o uno storage" - -#~ msgid "DAV properties for documents" -#~ msgstr "Proprietà DAV per documenti" diff --git a/addons/document_webdav/i18n/ja.po b/addons/document_webdav/i18n/ja.po deleted file mode 100644 index ccffd490882..00000000000 --- a/addons/document_webdav/i18n/ja.po +++ /dev/null @@ -1,193 +0,0 @@ -# Japanese translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-04-21 00:03+0000\n" -"Last-Translator: Masaki Yamaya \n" -"Language-Team: Japanese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "作æˆæ—¥" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "文書" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "文書ã®ç‰¹æ€§ã‚’検索ã™ã‚‹" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "ãƒãƒ¼ãƒ ã‚¹ãƒšãƒ¼ã‚¹" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV特性" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "グループ化…" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "ã“れらã®ç‰¹æ€§ã¯WebDAVè¦æ±‚ã«è¿½åŠ ã•ã‚Œã¾ã™ã€‚" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "文書ã®DAV特性" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "文書" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "フォルダ" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV特性" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "フォルダã®DAV特性" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "特性" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "åå‰" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "値" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "ディレクトリ" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "å‰å›žã€ä¿®æ­£ã—ãŸãƒ¦ãƒ¼ã‚¶" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "ディレクトリ" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "変更日" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "作æˆè€…" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV特性" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "代替" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "エラー:ディレクトリをé‡è¤‡ã—ã¦ä½œã‚‹ã“ã¨ã¯ã§ãã¾ã›ã‚“。" - -#~ msgid "The directory name must be unique !" -#~ msgstr "ディレクトリåã¯å›ºæœ‰ã§ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "下記ã®ã‚µã‚¤ãƒˆã‹ã‚‰ PyWebDAV をインストールã—ã¦ãã ã•ã„。 " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAVã®å–è¾¼ã¿ã‚¨ãƒ©ãƒ¼" - -#~ msgid "Dynamic context" -#~ msgstr "ダイナミックãªæ–‡è„ˆ" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "ディレクトリã¯ãれ自身ã®è¦ªãƒ¬ãƒ™ãƒ«ã«ãªã‚Œã¾ã›ã‚“。" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "ディレクトリã¯è¦ªã‚ã‚‹ã„ã¯ã‚¹ãƒˆãƒ¬ãƒ¼ã‚¸ã‚’æŒã£ã¦ã„ãªã‘ã‚Œã°ã„ã‘ã¾ã›ã‚“。" diff --git a/addons/document_webdav/i18n/mk.po b/addons/document_webdav/i18n/mk.po deleted file mode 100644 index 23cce809236..00000000000 --- a/addons/document_webdav/i18n/mk.po +++ /dev/null @@ -1,164 +0,0 @@ -# Macedonian translation for openobject-addons -# Copyright (c) 2013 Rosetta Contributors and Canonical Ltd 2013 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2013. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2013-03-07 12:27+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Macedonian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Датумот е креиран" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Документи" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "СвојÑтво на документ" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Барај ÑвојÑтва на документ" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "ПроÑтор за имиња" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV ÑвојÑтва" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Групирај по..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Овие ÑвојÑтва ќе бидат додадени на WebDAV барањата" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV ÑвојÑтва за документи" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Документ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Папки" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV ÑвојÑтва" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV ÑвојÑтва за папки" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "СвојÑтва" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Име" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "ВредноÑÑ‚" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Директориум" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "КориÑник на поÑледна измена" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Дир." - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Изменет датум" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Креатор" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "СвојÑтво на документ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV ÑвојÑтва" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Замена" diff --git a/addons/document_webdav/i18n/mn.po b/addons/document_webdav/i18n/mn.po deleted file mode 100644 index d69bf245091..00000000000 --- a/addons/document_webdav/i18n/mn.po +++ /dev/null @@ -1,173 +0,0 @@ -# Mongolian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-09-29 11:14+0000\n" -"Last-Translator: ub121 \n" -"Language-Team: Mongolian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Ò®Ò¯ÑгÑÑÑн огноо" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Баримтууд" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Баримтыг төлөвөөр хайх" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "ÐÑрийн муж" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "БүлÑглÑвÑл..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Баримт" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "ХавтÑууд" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "ҮзүүлÑлтүүд" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "ÐÑÑ€" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Орлуулах" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Ðлдаа! Тойрч холбогдÑон Ñ…Ð°Ð²Ñ‚Ð°Ñ Ò¯Ò¯ÑгÑж болохгүй." - -#~ msgid "The directory name must be unique !" -#~ msgstr "ХавтаÑны нÑÑ€ давхцаж болохгүй!" - -#~ msgid "Dynamic context" -#~ msgstr "Динамик контекÑÑ‚" diff --git a/addons/document_webdav/i18n/nb.po b/addons/document_webdav/i18n/nb.po deleted file mode 100644 index ba87993ea5e..00000000000 --- a/addons/document_webdav/i18n/nb.po +++ /dev/null @@ -1,193 +0,0 @@ -# Norwegian Bokmal translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-09-07 17:44+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Norwegian Bokmal \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Dato opprettet" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokumenter" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Søk Dokumentegenskaper." - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Navnerom" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV egenskaper" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "Dokumentet.WebDAV.fil.egenskap" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupper etter ..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Disse egenskapene vil bli lagt til WebDAV-forespørsler" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV Eiendommer for Dokumenter." - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokument" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Mapper" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV egenskaper." - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV egenskaper for mapper." - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Egenskaper" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Navn" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "Dokumentet.WebDAV.dir.eiendom" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Verdi" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Katalog" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Siste endring Bruker" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Retn" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Dato endret" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Opprettet av" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV Egenskaper." - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Erstatte" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Feil! Du kan opprette rekursive kataloger." - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Vennligst installer PyWebDAV fra " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Katalogen kan ikke være overordnede av seg selv!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Katalogen Navnet mÃ¥ være unikt!" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV importere Feil!" - -#~ msgid "Dynamic context" -#~ msgstr "Dynamisk sammenheng" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Katalog mÃ¥ ha en overordnede eller en lagringsplass." diff --git a/addons/document_webdav/i18n/nl.po b/addons/document_webdav/i18n/nl.po deleted file mode 100644 index 783df9fdb70..00000000000 --- a/addons/document_webdav/i18n/nl.po +++ /dev/null @@ -1,202 +0,0 @@ -# Dutch translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-25 21:00+0000\n" -"Last-Translator: Erwin van der Ploeg (BAS Solutions) \n" -"Language-Team: Dutch \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Aanmaakdatum" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documenten" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Document eigenschap" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Document eigenschappen zoeken" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Naamruimte" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV eigenschappen" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Groepeer op..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Deze eigenschappen worden toegevoegd bij WebDAV aanvragen" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV instellingen voor documenten" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Mappen" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV eigenschappen" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV instellingen voor documenten" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Eigenschappen" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Naam" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Waarde" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Map" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Gebruiker laatste wijziging" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Map" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Datum gewijzigd" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Gemaakt door" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Document eigenschap" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV instellingen" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Vervangen" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Fout ! U kunt geen recursieve mappen maken." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV server voor documentbeheer" - -#~ msgid "Dynamic context" -#~ msgstr "Dynamische context" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV eigenschappen voor mappen" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Map kan niet bovenliggend aan zichzelf zijn!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "De mapnaam moet uniek zijn!" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Map moet een bovenliggende map hebben of opslag zijn" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Installeer aub PyWebDAV vanaf " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV import fout!" - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV eigenschappen voor documenten" diff --git a/addons/document_webdav/i18n/pl.po b/addons/document_webdav/i18n/pl.po deleted file mode 100644 index 7a68242fb68..00000000000 --- a/addons/document_webdav/i18n/pl.po +++ /dev/null @@ -1,189 +0,0 @@ -# Polish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-28 09:13+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Polish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "PrzestrzeÅ„ nazw" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "WÅ‚aÅ›ciwioÅ›ci DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupuj wg..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Te wÅ‚aÅ›ciwoÅ›ci zostanÄ… dodane do zgÅ‚oszeÅ„ WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WÅ‚aÅ›ciwoÅ›ci WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "WÅ‚aÅ›ciwoÅ›ci" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nazwa" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Wartość" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Katalog" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Kat" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Subsytut" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Katalog nie może być nadrzÄ™dny dla samego siebie !" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "BÅ‚Ä…d importu PyWebDAV" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "BÅ‚Ä…d! Nie możesz tworzyć rekurencyjnych katalogów." - -#~ msgid "Dynamic context" -#~ msgstr "Dynamiczny kontekst" - -#~ msgid "DAV properties for folders" -#~ msgstr "WÅ‚aÅ›ciwoÅ›ci DAV dla katalogów" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Nazwa katalogu musi być unikalna !" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Serwer WebDAV do ZarzÄ…dzania dokumentami" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Katalog musi mieć katalog nadrzÄ™dny lub nazwÄ™ napÄ™du." diff --git a/addons/document_webdav/i18n/pt.po b/addons/document_webdav/i18n/pt.po deleted file mode 100644 index 732196f47de..00000000000 --- a/addons/document_webdav/i18n/pt.po +++ /dev/null @@ -1,202 +0,0 @@ -# Portuguese translation for openobject-addons -# Copyright (c) 2009 Rosetta Contributors and Canonical Ltd 2009 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2009. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-17 14:02+0000\n" -"Last-Translator: Rui Franco (multibase.pt) \n" -"Language-Team: Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Data da Criação" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Propriedade do documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Procurar propriedades de documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namespace" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propriedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupo por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propriedades serão adicionadas às solicitações WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Propriedades DAV para documentos" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Pastas" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV propriedades" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Propriedades DAV para documentos" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propriedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nome" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Directório" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Última Modificação do Utilizador" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Data Modificada" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Criador" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Propriedade do documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Propriedades DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituir" - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV propriedades de documentos" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV Erro de importação!" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Uma pasta não pode ser ascendente de sí própria" - -#~ msgid "Dynamic context" -#~ msgstr "Contexto dinâmico" - -#~ msgid "The directory name must be unique !" -#~ msgstr "O nome da pasta tem de ser único !" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Por favor instale PyWebDAV de " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV propriedades de pastas" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV servidor para Gestão de Documentos" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "A pasta tem de ter um ascendente ou um armazenamento" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Erro! Não é possível criar Pastas recursivas." diff --git a/addons/document_webdav/i18n/pt_BR.po b/addons/document_webdav/i18n/pt_BR.po deleted file mode 100644 index 13fa0f2a10a..00000000000 --- a/addons/document_webdav/i18n/pt_BR.po +++ /dev/null @@ -1,193 +0,0 @@ -# Brazilian Portuguese translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-12-10 18:01+0000\n" -"Last-Translator: Projetaty Soluções OpenSource \n" -"Language-Team: Brazilian Portuguese \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Dada de Criação" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Propriedade do Documento" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Procurar Propriedades dos Documentos" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namespace" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Propriedades DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Agrupar Por..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Estas propriedades serão adicionadas para requisições WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Propriedades DAV para Documentos" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Pastas" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Propriedades WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Propriedades DAV para as pastas" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Propriedades" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nome" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valor" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Diretório" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Usuário da Última Modificação" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Modificado em" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Criador" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Propriedade do Documento" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Propriedades DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Substituto" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Erro! Você não pode criar diretórios recursivos." - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Diretório não pode ser pai dele mesmo!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "O nome do diretório deve ser único !" - -#~ msgid "Dynamic context" -#~ msgstr "Contexo dinâmico" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Por favor instale o PyWebDAV de " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Erro de Iimportação PyWEbDAV!" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "O diretório precisa ter um pai ou um armazenamento" diff --git a/addons/document_webdav/i18n/ro.po b/addons/document_webdav/i18n/ro.po deleted file mode 100644 index 3921af3a32d..00000000000 --- a/addons/document_webdav/i18n/ro.po +++ /dev/null @@ -1,202 +0,0 @@ -# Romanian translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-04 14:42+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Romanian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Data Creata" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Documente" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Actul de proprietate" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Cautare Proprietati documente" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Spatiu nume" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "Proprietati DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "proprietate.fisier.document.webdav" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupeaza dupa..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Aceste proprietati vor fi adaugate cererilor WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Proprietati DAV pentru Documente" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Document" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Foldere" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "Proprietari WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Proprietati DAV pentru Foldere" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Proprietati" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Nume" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "proprietate.dir.document.webdav" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Valoare" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Director" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Utilizatorul ultimei modificari" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Director" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Data modificare" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Creator" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Actul de Proprietate" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "Proprietati DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Inlocuitor" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Eroare! Nu puteti crea Directoare recursive." - -#~ msgid "DAV properties for documents" -#~ msgstr "Proprietati DAV pentru documente" - -#~ msgid "DAV properties for folders" -#~ msgstr "Proprietăți DAV pentru fisiere" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Directorul nu poate fi parinte lui insusi" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Numele directorului trebuie sa fie unic !" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Eroare Import PyWebDAV!" - -#~ msgid "Dynamic context" -#~ msgstr "Context dinamic" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Serverul WebDAV pentru Managementul documentelor" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Directorul trebuie sa aiba un parinte sau o arhiva" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Va rugam sa instalati PyWebDAV de la adresa " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" diff --git a/addons/document_webdav/i18n/ru.po b/addons/document_webdav/i18n/ru.po deleted file mode 100644 index b52b83eb92a..00000000000 --- a/addons/document_webdav/i18n/ru.po +++ /dev/null @@ -1,202 +0,0 @@ -# Russian translation for openobject-addons -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2011-03-16 00:07+0000\n" -"Last-Translator: FULL NAME \n" -"Language-Team: Russian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Дата ÑозданиÑ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Документы" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "СвойÑтво документа" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "ПоиÑк по ÑвойÑтвам документа" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "ПроÑтранÑтво имён" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "ÐаÑтройки DAV" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Группировать по ..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Эти ÑвойÑтва будут добавлены к запроÑам WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "СвойÑтва DAV Ð´Ð»Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð¾Ð²" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Документ" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Папки" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "ÐаÑтройки WebDAV" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "СвойÑтва DAV Ð´Ð»Ñ Ð¿Ð°Ð¿Ð¾Ðº" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "СвойÑтва" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Ðазвание" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Значение" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Каталог" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Ðвтор поÑледнего изменениÑ" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Кат." - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Дата изменениÑ" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Создатель" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "СвойÑтво документа" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "СвойÑтва DAV" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Заменить" - -#~ msgid "DAV properties for documents" -#~ msgstr "DAV-ÑвойÑтва документа" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Каталог не может быть родительÑким Ð´Ð»Ñ Ñамого ÑебÑ!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Ð˜Ð¼Ñ ÐºÐ°Ñ‚Ð°Ð»Ð¾Ð³Ð° должно быть уникальным!" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "Ошибка импорта PyWebDAV" - -#~ msgid "Dynamic context" -#~ msgstr "ДинамичеÑкий контекÑÑ‚" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Каталог должен иметь Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»Ñ Ð¸Ð»Ð¸ хранилище" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "Сервер WebDAV Ð´Ð»Ñ ÑƒÐ¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð´Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ð¼Ð¸" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "ТребуетÑÑ ÑƒÑтановить PyWebDAV Ñ Ð°Ð´Ñ€ÐµÑа " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV-ÑвойÑтва папок" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Ошибка! ÐÐµÐ»ÑŒÐ·Ñ Ñоздавать вложенные директории." diff --git a/addons/document_webdav/i18n/sl.po b/addons/document_webdav/i18n/sl.po deleted file mode 100644 index e400dc7d2cd..00000000000 --- a/addons/document_webdav/i18n/sl.po +++ /dev/null @@ -1,167 +0,0 @@ -# Slovenian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-08-03 06:12+0000\n" -"Last-Translator: Mantavya Gajjar (Open ERP) \n" -"Language-Team: Slovenian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Datum nastanka" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokumenti" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Lastnost dokumenta" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Iskanje lastnosti dokumenta" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Imenski prostor" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV lasnosti" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Združi po ..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Te lastnosti bodo dodane k WebDAV zahtevkom" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV lastnosti za dokumente" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokument" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Mape" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV lastnosti" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV lastnosti za mape" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Lastnosti" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Ime" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Vrednost" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Mapa" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Zadnja sprememba" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Mapa" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Datum spremembe" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Avtor" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Lastnost dokumenta" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV lastnosti" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Zamenjava" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Napaka! Ne morete izdelati rekurzivnih imenikov." diff --git a/addons/document_webdav/i18n/sr.po b/addons/document_webdav/i18n/sr.po deleted file mode 100644 index 69ae3709a62..00000000000 --- a/addons/document_webdav/i18n/sr.po +++ /dev/null @@ -1,176 +0,0 @@ -# Serbian translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-11-03 07:58+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Serbian \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Prostor" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV Svojstva" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupisano po..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Ova ce svojstva biti dodana WebDAV zahtevima" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV Svojstva" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Svojstva" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Ime" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Vrednost" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Direktorijum" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Zamena" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Greska ! Ne mozes kreirati rekursivne Direktorijume." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV server za Upravljanje Dokumentima" - -#~ msgid "Dynamic context" -#~ msgstr "Dinamicki Kontekst" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV svojstva za foldere" diff --git a/addons/document_webdav/i18n/sr@latin.po b/addons/document_webdav/i18n/sr@latin.po deleted file mode 100644 index d8f448fc745..00000000000 --- a/addons/document_webdav/i18n/sr@latin.po +++ /dev/null @@ -1,176 +0,0 @@ -# Serbian latin translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-12-23 16:24+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Serbian latin \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Prostor" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV osobine" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupisano po..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Ova ce svojstva biti dodana WebDAV zahtevima" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV Svojstva" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Svojstva" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Ime" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Vrednost" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Direktorijum" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dir" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Zamena" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Greska ! Ne mozes kreirati rekursivne Direktorijume." - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "WebDAV server za Upravljanje Dokumentima" - -#~ msgid "Dynamic context" -#~ msgstr "Dinamicki Kontekst" - -#~ msgid "DAV properties for folders" -#~ msgstr "DAV svojstva za foldere" diff --git a/addons/document_webdav/i18n/sv.po b/addons/document_webdav/i18n/sv.po deleted file mode 100644 index 82f59f905d2..00000000000 --- a/addons/document_webdav/i18n/sv.po +++ /dev/null @@ -1,193 +0,0 @@ -# Swedish translation for openobject-addons -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2010. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2010-11-30 17:03+0000\n" -"Last-Translator: OpenERP Administrators \n" -"Language-Team: Swedish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "Skapad datum" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Dokument" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Sök bland dokumentens egenskaper" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namnrymd" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV-attribut" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Gruppera" - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Dessa attribut adderas till WebDAV-anropen" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "DAV-attribut för dokument" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Dokument" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Mappar" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV-attribut" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV-attribut för kataloger" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Attribut" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Namn" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "Värde" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Katalog" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Senaste ändring av användaren" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Katalog" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "Ändringsdatum" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "Författare" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV-attribut" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Ersätt" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Katalogen kan inte ha sig själv som förälder!" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Fel! Ni kan inte skapa rekursiva kataloger" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV importfel!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Katalognamnet mÃ¥ste vara unikt !" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Vänligen installera PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "Dynamic context" -#~ msgstr "Dynamiskt sammanhang" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Katalogen mÃ¥ste ha en förälder eller en lagringsplats" diff --git a/addons/document_webdav/i18n/tr.po b/addons/document_webdav/i18n/tr.po deleted file mode 100644 index 5e0cfe6715c..00000000000 --- a/addons/document_webdav/i18n/tr.po +++ /dev/null @@ -1,193 +0,0 @@ -# Turkish translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-01-25 17:22+0000\n" -"Last-Translator: Ahmet Altınışık \n" -"Language-Team: Turkish \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "OluÅŸturma Tarihi" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "Belgeler" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "Döküman özelliÄŸi" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "Belge özelliklerini ara" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Ä°simalanı" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV özellikleri" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "belge.webdav.dosya.özellik" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "Grupla..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "Özellikler WebDAV isteklerine aklenecektir" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "Belgeler için DAV Özellikleri" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "Belge" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "Klasörler" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV özellikleri" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "Klasörler için DAV özellikleri" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "Özellikler" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "Adı" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "belge.webdav.diz.özellik" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "DeÄŸer" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "Dizin" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "Son DeÄŸiÅŸtiren Kullanıcı" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "Dizin" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "DeÄŸiÅŸtirilme Tarihi" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "OluÅŸturan" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "Döküman özelliÄŸi" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV Özellikleri" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "Yedek" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "Hata! Yinelenen Dizinler oluÅŸturamazsınız." - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV İçeaktarma Hatası!" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "Dizin kendisinin üstü olamaz!" - -#~ msgid "The directory name must be unique !" -#~ msgstr "Dizin adı eÅŸsiz olmalı" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "Lütfen PyWebDAV2 " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/ adresinden kurun" - -#~ msgid "Dynamic context" -#~ msgstr "Dinamik içerik" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "Dizinin bir üst dizini ya da depolaması olmalı" diff --git a/addons/document_webdav/i18n/zh_CN.po b/addons/document_webdav/i18n/zh_CN.po deleted file mode 100644 index fbfb09ca78c..00000000000 --- a/addons/document_webdav/i18n/zh_CN.po +++ /dev/null @@ -1,201 +0,0 @@ -# Translation of OpenERP Server. -# This file contains the translation of the following modules: -# * document_ics -# -msgid "" -msgstr "" -"Project-Id-Version: OpenERP Server 6.0dev\n" -"Report-Msgid-Bugs-To: support@openerp.com\n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-11-27 16:44+0000\n" -"Last-Translator: 盈通 ccdos \n" -"Language-Team: \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "创建时间" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "文档" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "å•æ®å±žæ€§" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "文档属性列表" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "命å空间" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV属性" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "Copy text \t document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "分组..." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "这些属性将被添加到WebDAV请求上" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "文档的DAV属性" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "文件" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "目录" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "webDAV 属性" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "目录的DAV属性" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "属性" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "å称" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "值" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "目录" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "最近修改用户" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "目录" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "修改日期" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "创建人" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "å•æ®å±žæ€§" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV属性" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "替æ¢" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "错误:你无法建立递归的目录" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV导入错误ï¼" - -#~ msgid "DAV properties for documents" -#~ msgstr "文档的DAV属性" - -#~ msgid "DAV properties for folders" -#~ msgstr "目录的DAV属性" - -#~ msgid "The directory name must be unique !" -#~ msgstr "目录å必须唯一ï¼" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "请从这里下载安装PyWebDAV \r\n" -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" - -#~ msgid "WebDAV server for Document Management" -#~ msgstr "文档管ç†ç³»ç»Ÿçš„WebDAVæœåŠ¡å™¨" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "目录ä¸èƒ½è®¾ä¸ºè‡ªå·±çš„父目录。" - -#~ msgid "Dynamic context" -#~ msgstr "动æ€ä¸Šä¸‹æ–‡" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "目录必须有父目录或一个存储区" diff --git a/addons/document_webdav/i18n/zh_TW.po b/addons/document_webdav/i18n/zh_TW.po deleted file mode 100644 index 4bf552ce267..00000000000 --- a/addons/document_webdav/i18n/zh_TW.po +++ /dev/null @@ -1,192 +0,0 @@ -# Chinese (Traditional) translation for openobject-addons -# Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 -# This file is distributed under the same license as the openobject-addons package. -# FIRST AUTHOR , 2012. -# -msgid "" -msgstr "" -"Project-Id-Version: openobject-addons\n" -"Report-Msgid-Bugs-To: FULL NAME \n" -"POT-Creation-Date: 2012-12-21 17:05+0000\n" -"PO-Revision-Date: 2012-08-30 11:51+0000\n" -"Last-Translator: Bonnie Duan \n" -"Language-Team: Cenoq Corp.\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"X-Launchpad-Export-Date: 2014-03-04 07:26+0000\n" -"X-Generator: Launchpad (build 16948)\n" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_date:0 -#: field:document.webdav.file.property,create_date:0 -msgid "Date Created" -msgstr "建立日期" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_document_props -msgid "Documents" -msgstr "文件" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Document property" -msgstr "" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Search Document properties" -msgstr "æœå°‹æ–‡ä»¶ç›®éŒ„" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: field:document.webdav.dir.property,namespace:0 -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,namespace:0 -msgid "Namespace" -msgstr "Namespace" - -#. module: document_webdav -#: field:document.directory,dav_prop_ids:0 -msgid "DAV properties" -msgstr "DAV 內容" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_file_property -msgid "document.webdav.file.property" -msgstr "document.webdav.file.property" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Group By..." -msgstr "群組...." - -#. module: document_webdav -#: view:document.directory:0 -msgid "These properties will be added to WebDAV requests" -msgstr "這些內容將被加到 WebDAV 請求" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_file_props_form -msgid "DAV Properties for Documents" -msgstr "文件的DAV 內容" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -#: field:document.webdav.file.property,file_id:0 -msgid "Document" -msgstr "文件" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_folder_props -msgid "Folders" -msgstr "檔案夾" - -#. module: document_webdav -#: view:document.directory:0 -msgid "WebDAV properties" -msgstr "WebDAV 內容" - -#. module: document_webdav -#: model:ir.actions.act_window,name:document_webdav.action_dir_props_form -msgid "DAV Properties for Folders" -msgstr "DAV 檔案夾內容" - -#. module: document_webdav -#: view:document.directory:0 -#: view:document.webdav.dir.property:0 -#: view:document.webdav.file.property:0 -msgid "Properties" -msgstr "內容" - -#. module: document_webdav -#: field:document.webdav.dir.property,name:0 -#: field:document.webdav.file.property,name:0 -msgid "Name" -msgstr "å稱" - -#. module: document_webdav -#: model:ir.model,name:document_webdav.model_document_webdav_dir_property -msgid "document.webdav.dir.property" -msgstr "document.webdav.dir.property" - -#. module: document_webdav -#: field:document.webdav.dir.property,value:0 -#: field:document.webdav.file.property,value:0 -msgid "Value" -msgstr "價值" - -#. module: document_webdav -#: field:document.webdav.dir.property,dir_id:0 -#: model:ir.model,name:document_webdav.model_document_directory -msgid "Directory" -msgstr "目錄" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_uid:0 -#: field:document.webdav.file.property,write_uid:0 -msgid "Last Modification User" -msgstr "最後修改使用者" - -#. module: document_webdav -#: view:document.webdav.dir.property:0 -msgid "Dir" -msgstr "路徑" - -#. module: document_webdav -#: field:document.webdav.dir.property,write_date:0 -#: field:document.webdav.file.property,write_date:0 -msgid "Date Modified" -msgstr "修改日期" - -#. module: document_webdav -#: field:document.webdav.dir.property,create_uid:0 -#: field:document.webdav.file.property,create_uid:0 -msgid "Creator" -msgstr "建立者" - -#. module: document_webdav -#: view:document.webdav.file.property:0 -msgid "Document Property" -msgstr "" - -#. module: document_webdav -#: model:ir.ui.menu,name:document_webdav.menu_properties -msgid "DAV Properties" -msgstr "DAV 內容" - -#. module: document_webdav -#: field:document.webdav.dir.property,do_subst:0 -#: field:document.webdav.file.property,do_subst:0 -msgid "Substitute" -msgstr "替代項目" - -#~ msgid "Error! You can not create recursive Directories." -#~ msgstr "錯誤! 您ä¸èƒ½å»ºç«‹å¾ªç’°çš„目錄" - -#, python-format -#~ msgid "PyWebDAV Import Error!" -#~ msgstr "PyWebDAV 匯入錯誤!" - -#~ msgid "Directory cannot be parent of itself!" -#~ msgstr "目錄ä¸èƒ½æˆç‚ºè‡ªå·±çš„æ¯ç›®éŒ„!" - -#~ msgid "Dynamic context" -#~ msgstr "動態背景" - -#~ msgid "The directory name must be unique !" -#~ msgstr "目錄åä¸èƒ½é‡è¦†ï¼" - -#, python-format -#~ msgid "" -#~ "Please install PyWebDAV from " -#~ "http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/" -#~ msgstr "" -#~ "從 http://code.google.com/p/pywebdav/downloads/detail?name=PyWebDAV-" -#~ "0.9.4.tar.gz&can=2&q=/ï¼Œè«‹å®‰è£ PyWebDAV" - -#~ msgid "Directory must have a parent or a storage" -#~ msgstr "目錄必須è¦æœ‰æ¯ç›®éŒ„或儲存室" diff --git a/addons/document_webdav/nodes.py b/addons/document_webdav/nodes.py deleted file mode 100644 index 9a35f3cfe1b..00000000000 --- a/addons/document_webdav/nodes.py +++ /dev/null @@ -1,416 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010 Tiny SPRL (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - - -import time -import urllib -import uuid - -from openerp import SUPERUSER_ID -from openerp.tools.safe_eval import safe_eval as eval - -from openerp.addons.document import document as nodes - -def dict_filter(srcdic, keys, res=None): - ''' Return a copy of srcdic that has only keys set. - If any of keys are missing from srcdic, the result won't have them, - either. - @param res If given, result will be updated there, instead of a new dict. - ''' - if res is None: - res = {} - for k in keys: - if k in srcdic: - res[k] = srcdic[k] - return res - -class node_acl_mixin(object): - def _get_dav_owner(self, cr): - return self.uuser - - def _get_dav_group(self, cr): - return self.ugroup - - def _get_dav_supported_privilege_set(self, cr): - return '' # TODO - - def _get_dav_current_user_privilege_set(self, cr): - return '' # TODO - - def _get_dav_props_hlpr(self, cr, par_class, prop_model, - prop_ref_field, res_id): - """ Helper for dav properties, usable in subclasses - - @param par_class The parent class - @param prop_model The name of the orm model holding the properties - @param prop_ref_field The name of the field at prop_model pointing to us - @param res_id the id of self in the corresponing orm table, that should - match prop_model.prop_ref_field - """ - ret = par_class.get_dav_props(self, cr) - if prop_model: - propobj = self.context._dirobj.pool[prop_model] - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - # Not really needed because we don't do eval here: - # ctx.update({'uid': uid, 'dbname': self.context.dbname }) - # dict_filter(self.context.extra_ctx, ['username', 'groupname', 'webdav_path'], ctx) - sdomain = [(prop_ref_field, '=', False),] - if res_id: - sdomain = ['|', (prop_ref_field, '=', res_id)] + sdomain - prop_ids = propobj.search(cr, uid, sdomain, context=ctx) - if prop_ids: - ret = ret.copy() - for pbro in propobj.browse(cr, uid, prop_ids, context=ctx): - ret[pbro.namespace] = ret.get(pbro.namespace, ()) + \ - (pbro.name,) - # Note that we cannot have properties to conditionally appear - # on the context, yet. - - return ret - - def _get_dav_eprop_hlpr(self, cr, ns, prop, - par_class, prop_model, - prop_ref_field, res_id): - """ Helper for get dav eprop, usable in subclasses - - @param namespace the one to search for - @param name Name to search for - @param par_class The parent class - @param prop_model The name of the orm model holding the properties - @param prop_ref_field The name of the field at prop_model pointing to us - @param res_id the id of self in the corresponing orm table, that should - match prop_model.prop_ref_field - """ - ret = par_class.get_dav_eprop(self, cr, ns, prop) - if ret is not None: - return ret - if prop_model: - propobj = self.context._dirobj.pool[prop_model] - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - ctx.update({'uid': uid, 'dbname': self.context.dbname }) - ctx['node_classname'] = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) - dict_filter(self.context.extra_ctx, ['username', 'groupname', 'webdav_path'], ctx) - sdomain = [(prop_ref_field, '=', False),('namespace', '=', ns), ('name','=', prop)] - if res_id: - sdomain = ['|', (prop_ref_field, '=', res_id)] + sdomain - prop_ids = propobj.search(cr, uid, sdomain, context=ctx) - if prop_ids: - pbro = propobj.browse(cr, uid, prop_ids[0], context=ctx) - val = pbro.value - if pbro.do_subst: - if val.startswith("('") and val.endswith(")"): - glbls = { 'urlquote': urllib.quote, } - val = eval(val, glbls, ctx) - else: - val = val % ctx - return val - return None - - def _dav_lock_hlpr(self, cr, lock_data, par_class, prop_model, - prop_ref_field, res_id): - """ Helper, which uses the dav properties table for placing locks - - @param lock_data a dictionary of input to this function. - @return list of tuples, DAV:activelock _contents_ structure. - See webdav.py:class Prop2Xml() for semantics - - Note: although the DAV response shall be an , this - function will only return the elements inside the activelock, - because the calling function needs to append the in - it. See webdav.py:mk_lock_response() - - In order to reuse code, this function can be called with - lock_data['unlock_mode']=True, in order to unlock. - - @return bool in unlock mode, (davstruct, prop_id, token) in lock/refresh, - or (False, prop_id, token) if already locked, - or (False, False, False) if lock not found to refresh - """ - assert prop_model - assert res_id - assert isinstance(lock_data, dict), '%r' % lock_data - propobj = self.context._dirobj.pool[prop_model] - uid = self.context.uid - ctx = self.context.context.copy() - ctx.update(self.dctx) - ctx.update({'uid': uid, 'dbname': self.context.dbname }) - ctx['node_classname'] = "%s.%s" % (self.__class__.__module__, self.__class__.__name__) - dict_filter(self.context.extra_ctx, ['username', 'groupname', 'webdav_path'], ctx) - sdomain = [(prop_ref_field, '=', res_id), ('namespace', '=', 'DAV:'), - ('name','=', 'lockdiscovery')] - props_to_delete = [] - lock_found = False - lock_val = None - tmout2 = int(lock_data.get('timeout', 3*3600)) - - prop_ids = propobj.search(cr, uid, sdomain, context=ctx) - if prop_ids: - for pbro in propobj.browse(cr, uid, prop_ids, context=ctx): - val = pbro.value - if pbro.do_subst: - if val.startswith("('") and val.endswith(")"): - glbls = { 'urlquote': urllib.quote, } - val = eval(val, glbls, ctx) - else: - # all locks should be at "subst" format - continue - if not (val and isinstance(val, tuple) - and val[0:2] == ( 'activelock','DAV:')): - # print "Value is not activelock:", val - continue - - old_token = False - old_owner = False - try: - # discover the timeout. If anything goes wrong, delete - # the lock (cleanup) - tmout = False - for parm in val[2]: - if parm[1] != 'DAV:': - continue - if parm[0] == 'timeout': - if isinstance(parm[2], basestring) \ - and parm[2].startswith('Second-'): - tmout = int(parm[2][7:]) - elif parm[0] == 'locktoken': - if isinstance(parm[2], basestring): - old_token = parm[2] - elif isinstance(parm[2], tuple) and \ - parm[2][0:2] == ('href','DAV:'): - old_token = parm[2][2] - else: - # print "Mangled token in DAV property: %r" % parm[2] - props_to_delete.append(pbro.id) - continue - elif parm[0] == 'owner': - old_owner = parm[2] # not used yet - if tmout: - mdate = pbro.write_date or pbro.create_date - mdate = time.mktime(time.strptime(mdate,'%Y-%m-%d %H:%M:%S')) - if mdate + tmout < time.time(): - props_to_delete.append(pbro.id) - continue - else: - props_to_delete.append(pbro.id) - continue - except ValueError: - props_to_delete.append(pbro.id) - continue - - # A valid lock is found here - if lock_data.get('refresh', False): - if old_token != lock_data.get('token'): - continue - # refresh mode. Just touch anything and the ORM will update - # the write uid+date, won't it? - # Note: we don't update the owner, because incoming refresh - # wouldn't have a body, anyway. - propobj.write(cr, uid, [pbro.id,], { 'name': 'lockdiscovery'}) - elif lock_data.get('unlock_mode', False): - if old_token != lock_data.get('token'): - continue - props_to_delete.append(pbro.id) - - lock_found = pbro.id - lock_val = val - - if tmout2 > 3*3600: # 3 hours maximum - tmout2 = 3*3600 - elif tmout2 < 300: - # 5 minutes minimum, but an unlock request can always - # break it at any time. Ensures no negative values, either. - tmout2 = 300 - - if props_to_delete: - # explicitly delete, as admin, any of the ids we have identified. - propobj.unlink(cr, SUPERUSER_ID, props_to_delete) - - if lock_data.get('unlock_mode', False): - return lock_found and True - elif (not lock_found) and not (lock_data.get('refresh', False)): - # Create a new lock, attach and return it. - new_token = uuid.uuid4().urn - lock_val = ('activelock', 'DAV:', - [ ('locktype', 'DAV:', (lock_data.get('locktype',False) or 'write','DAV:')), - ('lockscope', 'DAV:', (lock_data.get('lockscope',False) or 'exclusive','DAV:')), - # ? ('depth', 'DAV:', lock_data.get('depth','0') ), - ('timeout','DAV:', 'Second-%d' % tmout2), - ('locktoken', 'DAV:', ('href', 'DAV:', new_token)), - # ('lockroot', 'DAV: ..., we don't store that, appended by caller - ]) - new_owner = lock_data.get('lockowner',False) or ctx.get('username', False) - if new_owner: - lock_val[2].append( ('owner', 'DAV:', new_owner) ) - prop_id = propobj.create(cr, uid, { prop_ref_field: res_id, - 'namespace': 'DAV:', 'name': 'lockdiscovery', - 'do_subst': True, 'value': repr(lock_val) }) - return (lock_val[2], prop_id, new_token ) - elif not lock_found: # and refresh - return (False, False, False) - elif lock_found and not lock_data.get('refresh', False): - # already locked - return (False, lock_found, old_token) - else: - return (lock_val[2], lock_found, old_token ) - -class node_dir(node_acl_mixin, nodes.node_dir): - """ override node_dir and add DAV functionality - """ - DAV_PROPS = { "DAV:": ('owner', 'group', - 'supported-privilege-set', - 'current-user-privilege-set'), - } - DAV_M_NS = { "DAV:" : '_get_dav',} - http_options = { 'DAV': ['access-control',] } - - def get_dav_resourcetype(self, cr): - return ('collection', 'DAV:') - - def get_dav_props(self, cr): - return self._get_dav_props_hlpr(cr, nodes.node_dir, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - - def get_dav_eprop(self, cr, ns, prop): - return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_dir, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - - -class node_file(node_acl_mixin, nodes.node_file): - DAV_PROPS = { "DAV:": ('owner', 'group', - 'supported-privilege-set', - 'current-user-privilege-set', - ), - } - DAV_M_NS = { "DAV:" : '_get_dav',} - http_options = { 'DAV': ['access-control', ] } - pass - - def get_dav_resourcetype(self, cr): - return '' - - def get_dav_props(self, cr): - return self._get_dav_props_hlpr(cr, nodes.node_file, - 'document.webdav.file.property', 'file_id', self.file_id) - - def dav_lock(self, cr, lock_data): - """ Locks or unlocks the node, using DAV semantics. - - Unlocking will be done when lock_data['unlock_mode'] == True - - See _dav_lock_hlpr() for calling details. - - It is fundamentally OK to use this function from non-DAV endpoints, - but they will all have to emulate the tuple-in-list structure of - the DAV lock data. RFC if this translation should be done inside - the _dav_lock_hlpr (to ease other protocols). - """ - return self._dav_lock_hlpr(cr, lock_data, nodes.node_file, - 'document.webdav.file.property', 'file_id', self.file_id) - - def dav_unlock(self, cr, token): - """Releases the token lock held for the node - - This is a utility complement of dav_lock() - """ - lock_data = { 'token': token, 'unlock_mode': True } - return self._dav_lock_hlpr(cr, lock_data, nodes.node_file, - 'document.webdav.file.property', 'file_id', self.file_id) - - def get_dav_eprop(self, cr, ns, prop): - if ns == 'DAV:' and prop == 'supportedlock': - return [ ('lockentry', 'DAV:', - [ ('lockscope','DAV:', ('shared', 'DAV:')), - ('locktype','DAV:', ('write', 'DAV:')), - ]), - ('lockentry', 'DAV:', - [ ('lockscope','DAV:', ('exclusive', 'DAV:')), - ('locktype','DAV:', ('write', 'DAV:')), - ] ) - ] - return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_file, - 'document.webdav.file.property', 'file_id', self.file_id) - -class node_database(nodes.node_database): - def get_dav_resourcetype(self, cr): - return ('collection', 'DAV:') - - def get_dav_props(self, cr): - return self._get_dav_props_hlpr(cr, nodes.node_database, - 'document.webdav.dir.property', 'dir_id', False) - - def get_dav_eprop(self, cr, ns, prop): - return self._get_dav_eprop_hlpr(cr, nodes.node_database, ns, prop, - 'document.webdav.dir.property', 'dir_id', False) - -class node_res_obj(node_acl_mixin, nodes.node_res_obj): - DAV_PROPS = { "DAV:": ('owner', 'group', - 'supported-privilege-set', - 'current-user-privilege-set'), - } - DAV_M_NS = { "DAV:" : '_get_dav',} - http_options = { 'DAV': ['access-control',] } - - def get_dav_resourcetype(self, cr): - return ('collection', 'DAV:') - - def get_dav_props(self, cr): - return self._get_dav_props_hlpr(cr, nodes.node_res_obj, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - - def get_dav_eprop(self, cr, ns, prop): - return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_res_obj, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - - -class node_res_dir(node_acl_mixin, nodes.node_res_dir): - DAV_PROPS = { "DAV:": ('owner', 'group', - 'supported-privilege-set', - 'current-user-privilege-set'), - } - DAV_M_NS = { "DAV:" : '_get_dav',} - http_options = { 'DAV': ['access-control',] } - res_obj_class = node_res_obj - - def get_dav_resourcetype(self, cr): - return ('collection', 'DAV:') - - def get_dav_props(self, cr): - return self._get_dav_props_hlpr(cr, nodes.node_res_dir, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - - def get_dav_eprop(self, cr, ns, prop): - return self._get_dav_eprop_hlpr(cr, ns, prop, nodes.node_res_dir, - 'document.webdav.dir.property', 'dir_id', self.dir_id) - -# Some copies, so that this module can replace 'from document import nodes' -get_node_context = nodes.get_node_context -node_context = nodes.node_context -node_class = nodes.node_class -node_descriptor = nodes.node_descriptor - - -#eof - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/public_html/index.html b/addons/document_webdav/public_html/index.html deleted file mode 100644 index b3a841aced7..00000000000 --- a/addons/document_webdav/public_html/index.html +++ /dev/null @@ -1,9 +0,0 @@ - - -OpenERP server - - -This is an OpenERP server. Nothing to GET here. - - - diff --git a/addons/document_webdav/redirect.py b/addons/document_webdav/redirect.py deleted file mode 100644 index 41cbe3b883b..00000000000 --- a/addons/document_webdav/redirect.py +++ /dev/null @@ -1,110 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2010 OpenERP s.a. (). -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - - -import logging -import urlparse -from openerp.service.websrv_lib import FixSendError, HTTPHandler, HttpOptions -from openerp.service.http_server import HttpLogHandler -_logger = logging.getLogger(__name__) -class RedirectHTTPHandler(HttpLogHandler, FixSendError, HttpOptions, HTTPHandler): - - _HTTP_OPTIONS = { 'Allow': ['OPTIONS', 'GET', 'HEAD', 'PROPFIND'] } - redirect_paths = {} - - def __init__(self, request, client_address, server): - HTTPHandler.__init__(self,request,client_address,server) - - def send_head(self): - """Common code for GET and HEAD commands. - - It will either send the correct redirect (Location) response - or a 404. - """ - - if self.path.endswith('/'): - self.path = self.path[:-1] - - if not self.path: - # Return an empty page - self.send_response(200) - self.send_header("Content-Length", 0) - self.end_headers() - return None - - redir_path = self._find_redirect() - if redir_path is False: - self.send_error(404, "File not found") - return None - elif redir_path is None: - return None - - server_proto = getattr(self.server, 'proto', 'http').lower() - addr, port = self.server.server_name, self.server.server_port - try: - addr, port = self.request.getsockname() - except Exception, e: - self.log_error("Cannot calculate own address:" , e) - - if self.headers.has_key('Host'): - uparts = list(urlparse.urlparse("%s://%s:%d"% (server_proto, addr,port))) - uparts[1] = self.headers['Host'] - baseuri = urlparse.urlunparse(uparts) - else: - baseuri = "%s://%s:%d"% (server_proto, addr, port ) - - - location = baseuri + redir_path - # relative uri: location = self.redirect_paths[self.path] - - self.send_response(301) - self.send_header("Location", location) - self.send_header("Content-Length", 0) - self.end_headers() - # Do we need a Cache-content: header here? - _logger.debug("redirecting %s to %s", self.path, redir_path) - return None - - def do_PROPFIND(self): - self._get_ignore_body() - return self.do_HEAD() - - def _find_redirect(self): - """ Locate self.path among the redirects we can handle - @return The new path, False for 404 or None for already sent error - """ - return self.redirect_paths.get(self.path, False) - - def _get_ignore_body(self): - if not self.headers.has_key("content-length"): - return - max_chunk_size = 10*1024*1024 - size_remaining = int(self.headers["content-length"]) - got = '' - while size_remaining: - chunk_size = min(size_remaining, max_chunk_size) - got = self.rfile.read(chunk_size) - size_remaining -= len(got) - -#eof - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/security/ir.model.access.csv b/addons/document_webdav/security/ir.model.access.csv deleted file mode 100644 index fa81bcee2e2..00000000000 --- a/addons/document_webdav/security/ir.model.access.csv +++ /dev/null @@ -1,5 +0,0 @@ -id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink -access_webdav_dir_property_all,webdav.dir.property all,model_document_webdav_dir_property,,1,0,0,0 -access_webdav_dir_property_group_doc_manager,webdav.dir.property document manager,model_document_webdav_dir_property,base.group_system,1,1,1,1 -access_webdav_dir_property_group_system,webdav.dir.property group system,model_document_webdav_dir_property,base.group_system,1,1,1,1 -access_webdav_file_property_all,webdav.file.property all,model_document_webdav_file_property,,1,1,1,1 diff --git a/addons/document_webdav/test/webdav_test1.yml b/addons/document_webdav/test/webdav_test1.yml deleted file mode 100644 index ae91d7cd4a8..00000000000 --- a/addons/document_webdav/test/webdav_test1.yml +++ /dev/null @@ -1,63 +0,0 @@ -- - In order to test the document_webdav functionality -- - I open the HTTP port and perform an OPTIONS request to the server -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - reload(te) # reload.. - dc = te.DAVClient(timeout=2.0) - # have a small timeout, enough for any heavily-loaded test server to - # respond, but small so that this test won't block further loading. - # Don't catch the exception, so that the whole YAML test will abort - # if the WebDAV service is not available (eg. during an upgrade from - # command line). - dc.gd_options() - dc.get_creds(self, cr, uid) - dc.gd_options(path=cr.dbname, expect={'DAV': ['1',]}) -- - I will test the propnames at the document root -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - dc = te.DAVClient() - dc.get_creds(self, cr, uid) - dc.gd_propname(path=cr.dbname+'/Documents/') -- - I will test the ETags of the document root -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - dc = te.DAVClient() - dc.get_creds(self, cr, uid) - dc.gd_getetag(path=cr.dbname+'/Documents/') - -- - I will now ls -l the document root. -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - dc = te.DAVClient() - dc.get_creds(self, cr, uid) - res = dc.gd_lsl(path=cr.dbname+'/Documents/') - for lin in res: - print "%(type)s\t%(uid)s\t%(gid)s\t%(size)s\t%(mtime)s\t%(name)s" % lin -- - I will put a file to the server -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - dc = te.DAVClient() - dc.get_creds(self, cr, uid) - tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') - res = dc.gd_put(path=cr.dbname+'/Documents/test_davclient.py', srcpath=tdp) -- - I will try to get the file from the root -- - !python {model: ir.attachment}: | - from document_webdav import test_davclient as te - import addons - dc = te.DAVClient() - dc.get_creds(self, cr, uid) - tdp = openerp.modules.module.get_module_resource('document_webdav', 'test_davclient.py') - res = dc.gd_get(path=cr.dbname+'/Documents/test_davclient.py', crange=(4,508), compare=tdp) diff --git a/addons/document_webdav/test_davclient.py b/addons/document_webdav/test_davclient.py deleted file mode 100644 index f3a8b35b582..00000000000 --- a/addons/document_webdav/test_davclient.py +++ /dev/null @@ -1,707 +0,0 @@ -# -*- encoding: utf-8 -*- -# -# Copyright P. Christeas 2008,2009 -# Copyright OpenERP SA. (http://www.openerp.com) 2010 -# -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 2 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -############################################################################### - -""" A trivial HTTP/WebDAV client, used for testing the server -""" -# code taken from the 'http-client.py' script: -# http://git.hellug.gr/?p=xrg/openerp;a=history;f=tests/http-client.py;hb=refs/heads/xrg-60 - -import gzip -import logging -import xml.dom.minidom - -import httplib - -from openerp.tools import config -from xmlrpclib import Transport, ProtocolError -import StringIO -import base64 -from openerp import SUPERUSER_ID - -_logger = logging.getLogger(__name__) - -class HTTP11(httplib.HTTP): - _http_vsn = 11 - _http_vsn_str = 'HTTP/1.1' - -class PersistentTransport(Transport): - """Handles an HTTP transaction to an XML-RPC server, persistently.""" - - def __init__(self, use_datetime=0): - self._use_datetime = use_datetime - self._http = {} - log.debug("Using persistent transport") - - def make_connection(self, host): - # create a HTTP connection object from a host descriptor - if not self._http.has_key(host): - host, extra_headers, x509 = self.get_host_info(host) - self._http[host] = HTTP11(host) - _logger.debug("New connection to %s", host) - return self._http[host] - - def get_host_info(self, host): - host, extra_headers, x509 = Transport.get_host_info(self,host) - if extra_headers == None: - extra_headers = [] - - extra_headers.append( ( 'Connection', 'keep-alive' )) - - return host, extra_headers, x509 - - def _parse_response(self, file, sock, response): - """ read response from input file/socket, and parse it - We are persistent, so it is important to only parse - the right amount of input - """ - - p, u = self.getparser() - - if response.msg.get('content-encoding') == 'gzip': - gzdata = StringIO.StringIO() - while not response.isclosed(): - rdata = response.read(1024) - if not rdata: - break - gzdata.write(rdata) - gzdata.seek(0) - rbuffer = gzip.GzipFile(mode='rb', fileobj=gzdata) - while True: - respdata = rbuffer.read() - if not respdata: - break - p.feed(respdata) - else: - while not response.isclosed(): - rdata = response.read(1024) - if not rdata: - break - p.feed(rdata) - if len(rdata)<1024: - break - - p.close() - return u.close() - - def request(self, host, handler, request_body, verbose=0): - # issue XML-RPC request - - h = self.make_connection(host) - if verbose: - h.set_debuglevel(1) - - self.send_request(h, handler, request_body) - self.send_host(h, host) - self.send_user_agent(h) - self.send_content(h, request_body) - - resp = h._conn.getresponse() - # TODO: except BadStatusLine, e: - - errcode, errmsg, headers = resp.status, resp.reason, resp.msg - - - if errcode != 200: - raise ProtocolError( - host + handler, - errcode, errmsg, - headers - ) - - self.verbose = verbose - - try: - sock = h._conn.sock - except AttributeError: - sock = None - - return self._parse_response(h.getfile(), sock, resp) - -class CompressedTransport(PersistentTransport): - def send_content(self, connection, request_body): - connection.putheader("Content-Type", "text/xml") - - if len(request_body) > 512 or True: - buffer = StringIO.StringIO() - output = gzip.GzipFile(mode='wb', fileobj=buffer) - output.write(request_body) - output.close() - buffer.seek(0) - request_body = buffer.getvalue() - connection.putheader('Content-Encoding', 'gzip') - - connection.putheader("Content-Length", str(len(request_body))) - connection.putheader("Accept-Encoding",'gzip') - connection.endheaders() - if request_body: - connection.send(request_body) - - def send_request(self, connection, handler, request_body): - connection.putrequest("POST", handler, skip_accept_encoding=1) - -class SafePersistentTransport(PersistentTransport): - def make_connection(self, host): - # create a HTTP connection object from a host descriptor - if not self._http.has_key(host): - host, extra_headers, x509 = self.get_host_info(host) - self._http[host] = httplib.HTTPS(host, None, **(x509 or {})) - _logger.debug("New connection to %s", host) - return self._http[host] - -class AuthClient(object): - def getAuth(self, atype, realm): - raise NotImplementedError("Cannot authenticate for %s" % atype) - - def resolveFailedRealm(self, realm): - """ Called when, using a known auth type, the realm is not in cache - """ - raise NotImplementedError("Cannot authenticate for realm %s" % realm) - -class BasicAuthClient(AuthClient): - def __init__(self): - self._realm_dict = {} - - def getAuth(self, atype, realm): - if atype != 'Basic' : - return super(BasicAuthClient,self).getAuth(atype, realm) - - if not self._realm_dict.has_key(realm): - _logger.debug("realm dict: %r", self._realm_dict) - _logger.debug("missing key: \"%s\"" % realm) - self.resolveFailedRealm(realm) - return 'Basic '+ self._realm_dict[realm] - - def addLogin(self, realm, username, passwd): - """ Add some known username/password for a specific login. - This function should be called once, for each realm - that we want to authenticate against - """ - assert realm - auths = base64.encodestring(username + ':' + passwd) - if auths[-1] == "\n": - auths = auths[:-1] - self._realm_dict[realm] = auths - -class addAuthTransport: - """ Intermediate class that authentication algorithm to http transport - """ - - def setAuthClient(self, authobj): - """ Set the authentication client object. - This method must be called before any request is issued, that - would require http authentication - """ - assert isinstance(authobj, AuthClient) - self._auth_client = authobj - - - def request(self, host, handler, request_body, verbose=0): - # issue XML-RPC request - - h = self.make_connection(host) - if verbose: - h.set_debuglevel(1) - - tries = 0 - atype = None - realm = None - - while(tries < 3): - self.send_request(h, handler, request_body) - self.send_host(h, host) - self.send_user_agent(h) - if atype: - # This line will bork if self.setAuthClient has not - # been issued. That is a programming error, fix your code! - auths = self._auth_client.getAuth(atype, realm) - _logger.debug("sending authorization: %s", auths) - h.putheader('Authorization', auths) - self.send_content(h, request_body) - - resp = h._conn.getresponse() - # except BadStatusLine, e: - tries += 1 - - if resp.status == 401: - if 'www-authenticate' in resp.msg: - (atype,realm) = resp.msg.getheader('www-authenticate').split(' ',1) - data1 = resp.read() - if data1: - log.warning("Why have data on a 401 auth. message?") - if realm.startswith('realm="') and realm.endswith('"'): - realm = realm[7:-1] - _logger.debug("Resp: %r %r", resp.version,resp.isclosed(), resp.will_close) - _logger.debug("Want to do auth %s for realm %s", atype, realm) - if atype != 'Basic': - raise ProtocolError(host+handler, 403, - "Unknown authentication method: %s" % atype, resp.msg) - continue # with the outer while loop - else: - raise ProtocolError(host+handler, 403, - 'Server-incomplete authentication', resp.msg) - - if resp.status != 200: - raise ProtocolError( host + handler, - resp.status, resp.reason, resp.msg ) - - self.verbose = verbose - - try: - sock = h._conn.sock - except AttributeError: - sock = None - - return self._parse_response(h.getfile(), sock, resp) - - raise ProtocolError(host+handler, 403, "No authentication.",'') - -class PersistentAuthTransport(addAuthTransport,PersistentTransport): - pass - -class PersistentAuthCTransport(addAuthTransport,CompressedTransport): - pass - -class HTTPSConnection(httplib.HTTPSConnection): - certs_file = None - def connect(self): - "Connect to a host on a given (SSL) port. check the certificate" - import socket, ssl - - if HTTPSConnection.certs_file: - ca_certs = HTTPSConnection.certs_file - cert_reqs = ssl.CERT_REQUIRED - else: - ca_certs = None - cert_reqs = ssl.CERT_NONE - sock = socket.create_connection((self.host, self.port), self.timeout) - self.sock = ssl.wrap_socket(sock, self.key_file, self.cert_file, - ca_certs=ca_certs, - cert_reqs=cert_reqs) - - - def getpeercert(self): - import ssl - cert = None - if self.sock: - cert = self.sock.getpeercert() - else: - cert = ssl.get_server_certificate((self.host,self.port), - ssl_version=ssl.PROTOCOL_SSLv23 ) - lf = (len(ssl.PEM_FOOTER)+1) - if cert[0-lf] != '\n': - cert = cert[:0-lf]+'\n'+cert[0-lf:] - _logger.debug("len-footer: %s cert: %r", lf, cert[0-lf]) - - return cert - - -class DAVClient(object): - """An instance of a WebDAV client, connected to the OpenERP server - """ - - def __init__(self, user=None, passwd=None, dbg=0, use_ssl=False, useragent=False, timeout=None): - if use_ssl: - self.host = config.get_misc('httpsd', 'interface', False) - self.port = config.get_misc('httpsd', 'port', 8071) - if not self.host: - self.host = config.get('xmlrpcs_interface') - self.port = config.get('xmlrpcs_port') - else: - self.host = config.get_misc('httpd', 'interface') - self.port = config.get_misc('httpd', 'port', 8069) - if not self.host: - self.host = config.get('xmlrpc_interface') - self.port = config.get('xmlrpc_port') or self.port - if self.host == '0.0.0.0' or not self.host: - self.host = '127.0.0.1' - self.port = int(self.port) - if not config.get_misc('webdav','enable',True): - raise Exception("WebDAV is disabled, cannot continue") - self.davpath = '/' + config.get_misc('webdav','vdir','webdav') - self.user = user - self.passwd = passwd - self.dbg = dbg - self.timeout = timeout or 5.0 # seconds, tests need to respond pretty fast! - self.hdrs = {} - if useragent: - self.set_useragent(useragent) - - def get_creds(self, obj, cr, uid): - """Read back the user credentials from cr, uid - - @param obj is any orm object, in order to use its pool - @param uid is the numeric id, which we will try to reverse resolve - - note: this is a hackish way to get the credentials. It is expected - to break if "base_crypt" is used. - """ - ruob = obj.pool.get('res.users') - res = ruob.read(cr, SUPERUSER_ID, [uid,], ['login', 'password']) - assert res, "uid %s not found" % uid - self.user = res[0]['login'] - self.passwd = res[0]['password'] - if self.passwd.startswith('$1$'): - # md5 by base crypt. We cannot decode, wild guess - # that passwd = login - self.passwd = self.user - return True - - def set_useragent(self, uastr): - """ Set the user-agent header to something meaningful. - Some shorthand names will be replaced by stock strings. - """ - if uastr in ('KDE4', 'Korganizer'): - self.hdrs['User-Agent'] = "Mozilla/5.0 (compatible; Konqueror/4.4; Linux) KHTML/4.4.3 (like Gecko)" - elif uastr == 'iPhone3': - self.hdrs['User-Agent'] = "DAVKit/5.0 (765); iCalendar/5.0 (79); iPhone/4.1 8B117" - elif uastr == "MacOS": - self.hdrs['User-Agent'] = "WebDAVFS/1.8 (01808000) Darwin/9.8.0 (i386)" - else: - self.hdrs['User-Agent'] = uastr - - def _http_request(self, path, method='GET', hdrs=None, body=None): - if not hdrs: - hdrs = {} - import base64 - dbg = self.dbg - hdrs.update(self.hdrs) - _logger.debug("Getting %s http://%s:%d/%s", method, self.host, self.port, path) - conn = httplib.HTTPConnection(self.host, port=self.port, timeout=self.timeout) - conn.set_debuglevel(dbg) - if not path: - path = "/index.html" - if not hdrs.has_key('Connection'): - hdrs['Connection']= 'keep-alive' - conn.request(method, path, body, hdrs ) - try: - r1 = conn.getresponse() - except httplib.BadStatusLine, bsl: - log.warning("Bad status line: %s", bsl.line) - raise Exception('Bad status line.') - if r1.status == 401: # and r1.headers: - if 'www-authenticate' in r1.msg: - (atype,realm) = r1.msg.getheader('www-authenticate').split(' ',1) - data1 = r1.read() - if not self.user: - raise Exception('Must auth, have no user/pass!') - _logger.debug("Ver: %s, closed: %s, will close: %s", r1.version,r1.isclosed(), r1.will_close) - _logger.debug("Want to do auth %s for realm %s", atype, realm) - if atype == 'Basic' : - auths = base64.encodestring(self.user + ':' + self.passwd) - if auths[-1] == "\n": - auths = auths[:-1] - hdrs['Authorization']= 'Basic '+ auths - #sleep(1) - conn.request(method, path, body, hdrs ) - r1 = conn.getresponse() - else: - raise Exception("Unknown auth type %s" %atype) - else: - _logger.warning("Got 401, cannot auth") - raise Exception('No auth') - - _logger.debug("Reponse: %s %s",r1.status, r1.reason) - data1 = r1.read() - if method != 'GET': - _logger.debug("Body:\n%s\nEnd of body", data1) - try: - ctype = r1.msg.getheader('content-type') - if ctype and ';' in ctype: - ctype, encoding = ctype.split(';',1) - if ctype == 'text/xml': - doc = xml.dom.minidom.parseString(data1) - _logger.debug("XML Body:\n %s", doc.toprettyxml(indent="\t")) - except Exception: - _logger.warning("Cannot print XML.", exc_info=True) - pass - conn.close() - return r1.status, r1.msg, data1 - - def _assert_headers(self, expect, msg): - """ Assert that the headers in msg contain the expect values - """ - for k, v in expect.items(): - hval = msg.getheader(k) - if not hval: - raise AssertionError("Header %s not defined in http response" % k) - if isinstance(v, (list, tuple)): - delim = ',' - hits = map(str.strip, hval.split(delim)) - mvits= [] - for vit in v: - if vit not in hits: - mvits.append(vit) - if mvits: - raise AssertionError("HTTP header \"%s\" is missing: %s" %(k, ', '.join(mvits))) - else: - if hval.strip() != v.strip(): - raise AssertionError("HTTP header \"%s: %s\"" % (k, hval)) - - def gd_options(self, path='*', expect=None): - """ Test the http options functionality - If a dictionary is defined in expect, those options are - asserted. - """ - if path != '*': - path = self.davpath + path - hdrs = { 'Content-Length': 0 - } - s, m, d = self._http_request(path, method='OPTIONS', hdrs=hdrs) - assert s == 200, "Status: %r" % s - assert 'OPTIONS' in m.getheader('Allow') - _logger.debug('Options: %r', m.getheader('Allow')) - - if expect: - self._assert_headers(expect, m) - - def _parse_prop_response(self, data): - """ Parse a propfind/propname response - """ - def getText(node): - rc = [] - for node in node.childNodes: - if node.nodeType == node.TEXT_NODE: - rc.append(node.data) - return ''.join(rc) - - def getElements(node, namespaces=None, strict=False): - for cnod in node.childNodes: - if cnod.nodeType != node.ELEMENT_NODE: - if strict: - _logger.debug("Found %r inside <%s>", cnod, node.tagName) - continue - if namespaces and (cnod.namespaceURI not in namespaces): - _logger.debug("Ignoring <%s> in <%s>", cnod.tagName, node.localName) - continue - yield cnod - - nod = xml.dom.minidom.parseString(data) - nod_r = nod.documentElement - res = {} - assert nod_r.localName == 'multistatus', nod_r.tagName - for resp in nod_r.getElementsByTagNameNS('DAV:', 'response'): - href = None - status = 200 - res_nss = {} - for cno in getElements(resp, namespaces=['DAV:',]): - if cno.localName == 'href': - assert href is None, "Second href in same response" - href = getText(cno) - elif cno.localName == 'propstat': - for pno in getElements(cno, namespaces=['DAV:',]): - rstatus = None - if pno.localName == 'prop': - for prop in getElements(pno): - key = prop.localName - tval = getText(prop).strip() - val = tval or (True, rstatus or status) - if prop.namespaceURI == 'DAV:' and prop.localName == 'resourcetype': - val = 'plain' - for rte in getElements(prop, namespaces=['DAV:',]): - # Note: we only look at DAV:... elements, we - # actually expect only one DAV:collection child - val = rte.localName - res_nss.setdefault(prop.namespaceURI,{})[key] = val - elif pno.localName == 'status': - rstr = getText(pno) - htver, sta, msg = rstr.split(' ', 3) - assert htver == 'HTTP/1.1' - rstatus = int(sta) - else: - _logger.debug("What is <%s> inside a ?", pno.tagName) - - else: - _logger.debug("Unknown node: %s", cno.tagName) - - res.setdefault(href,[]).append((status, res_nss)) - - return res - - def gd_propfind(self, path, props=None, depth=0): - if not props: - propstr = '' - else: - propstr = '' - nscount = 0 - for p in props: - ns = None - if isinstance(p, tuple): - p, ns = p - if ns is None or ns == 'DAV:': - propstr += '<%s/>' % p - else: - propstr += '' %(nscount, p, nscount, ns) - nscount += 1 - propstr += '' - - body=""" - %s""" % propstr - hdrs = { 'Content-Type': 'text/xml; charset=utf-8', - 'Accept': 'text/xml', - 'Depth': depth, - } - - s, m, d = self._http_request(self.davpath + path, method='PROPFIND', - hdrs=hdrs, body=body) - assert s == 207, "Bad status: %s" % s - ctype = m.getheader('Content-Type').split(';',1)[0] - assert ctype == 'text/xml', m.getheader('Content-Type') - res = self._parse_prop_response(d) - if depth == 0: - assert len(res) == 1 - res = res.values()[0] - else: - assert len(res) >= 1 - return res - - - def gd_propname(self, path, depth=0): - body=""" - """ - hdrs = { 'Content-Type': 'text/xml; charset=utf-8', - 'Accept': 'text/xml', - 'Depth': depth - } - s, m, d = self._http_request(self.davpath + path, method='PROPFIND', - hdrs=hdrs, body=body) - assert s == 207, "Bad status: %s" % s - ctype = m.getheader('Content-Type').split(';',1)[0] - assert ctype == 'text/xml', m.getheader('Content-Type') - res = self._parse_prop_response(d) - if depth == 0: - assert len(res) == 1 - res = res.values()[0] - else: - assert len(res) >= 1 - return res - - def gd_getetag(self, path, depth=0): - return self.gd_propfind(path, props=['getetag',], depth=depth) - - def gd_lsl(self, path): - """ Return a list of 'ls -l' kind of data for a folder - - This is based on propfind. - """ - - lspairs = [ ('name', 'displayname', 'n/a'), ('size', 'getcontentlength', '0'), - ('type', 'resourcetype', '----------'), ('uid', 'owner', 'nobody'), - ('gid', 'group', 'nogroup'), ('mtime', 'getlastmodified', 'n/a'), - ('mime', 'getcontenttype', 'application/data'), ] - - propnames = [ l[1] for l in lspairs] - propres = self.gd_propfind(path, props=propnames, depth=1) - - res = [] - for href, pr in propres.items(): - lsline = {} - for st, nsdic in pr: - davprops = nsdic['DAV:'] - if st == 200: - for lsp in lspairs: - if lsp[1] in davprops: - if lsp[1] == 'resourcetype': - if davprops[lsp[1]] == 'collection': - lsline[lsp[0]] = 'dr-xr-x---' - else: - lsline[lsp[0]] = '-r-xr-x---' - else: - lsline[lsp[0]] = davprops[lsp[1]] - elif st in (404, 403): - for lsp in lspairs: - if lsp[1] in davprops: - lsline[lsp[0]] = lsp[2] - else: - _logger.debug("Strange status: %s", st) - - res.append(lsline) - - return res - - def gd_get(self, path, crange=None, mime=None, compare=None): - """ HTTP GET for path, supporting Partial ranges - """ - hdrs = { 'Accept': mime or '*/*', } - if crange: - if isinstance(crange, tuple): - crange = [crange,] - if not isinstance(crange, list): - raise TypeError("Range must be a tuple or list of tuples.") - rs = [] - for r in crange: - rs.append('%d-%d' % r) - hdrs['Range'] = 'bytes='+ (','.join(rs)) - s, m, d = self._http_request(self.davpath + path, method='GET', hdrs=hdrs) - assert s in (200, 206), "Bad status: %s" % s - ctype = m.getheader('Content-Type') - if ctype and ';' in ctype: - ctype = ctype.split(';',1)[0] - if mime: - assert ctype == mime, m.getheader('Content-Type') - rrange = None - rrh = m.getheader('Content-Range') - if rrh: - assert rrh.startswith('bytes '), rrh - rrh=rrh[6:].split('/',1)[0] - rrange = map(int, rrh.split('-',1)) - if compare: - # we need to compare the returned data with that of compare - fd = open(compare, 'rb') - d2 = fd.read() - fd.close() - if crange: - if len(crange) > 1: - raise NotImplementedError - r = crange[0] - d2 = d2[r[0]:r[1]+1] - assert d2 == d, "Data does not match" - return ctype, rrange, d - - def gd_put(self, path, body=None, srcpath=None, mime=None, noclobber=False): - """ HTTP PUT - @param noclobber will prevent overwritting a resource (If-None-Match) - @param mime will set the content-type - """ - hdrs = { } - if not (body or srcpath): - raise ValueError("PUT must have something to send.") - if (not body) and srcpath: - fd = open(srcpath, 'rb') - body = fd.read() - fd.close() - if mime: - hdrs['Content-Type'] = mime - if noclobber: - hdrs['If-None-Match'] = '*' - s, m, d = self._http_request(self.davpath + path, method='PUT', - hdrs=hdrs, body=body) - assert s == (201), "Bad status: %s" % s - etag = m.getheader('ETag') - return etag or True - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/webdav.py b/addons/document_webdav/webdav.py deleted file mode 100644 index aedad059c16..00000000000 --- a/addons/document_webdav/webdav.py +++ /dev/null @@ -1,350 +0,0 @@ -# -*- coding: utf-8 -*- -############################################################################## -# -# OpenERP, Open Source Management Solution -# Copyright (C) 2004-2010 Tiny SPRL (). -# Copyright (c) 1999 Christian Scholz (ruebe@aachen.heimat.de) -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . -# -############################################################################## - -import logging - -_logger = logging.getLogger(__name__) -import xml.dom.minidom -domimpl = xml.dom.minidom.getDOMImplementation() -from xml.dom.minicompat import StringTypes - -import urlparse -import urllib -from openerp.osv import osv -from openerp.tools.translate import _ - -try: - from pywebdav.lib import utils - from pywebdav.lib.propfind import PROPFIND - from pywebdav.lib.report import REPORT -except ImportError: - from DAV import utils - from DAV.propfind import PROPFIND - from DAV.report import REPORT - -from openerp import tools - -class Text2(xml.dom.minidom.Text): - def writexml(self, writer, indent="", addindent="", newl=""): - data = "%s%s%s" % (indent, self.data, newl) - data = data.replace("&", "&").replace("<", "<") - data = data.replace(">", ">") - writer.write(data) - -class Prop2xml(object): - """ A helper class to convert property structs to DAV:XML - - Written to generalize the use of _prop_child(), a class is - needed to hold some persistent data accross the recursions - of _prop_elem_child(). - """ - - def __init__(self, doc, namespaces, nsnum): - """ Init the structure - @param doc the xml doc element - @param namespaces a dict of namespaces - @param nsnum the next namespace number to define - """ - self.doc = doc - self.namespaces = namespaces - self.nsnum = nsnum - - def createText2Node(self, data): - if not isinstance(data, StringTypes): - raise TypeError, "Node contents must be a string." - t = Text2() - t.data = data - t.ownerDocument = self.doc - return t - - def _prop_child(self, xnode, ns, prop, value): - """Append a property xml node to xnode, with value - - And a little smarter than that, it will consider namespace and - also allow nested properties etc. - - :param ns the namespace of the node - :param prop the name of the property - :param value the value. Can be: - string: text node - tuple ('elem', 'ns') for empty sub-node - tuple ('elem', 'ns', sub-elems) for sub-node with elements - tuple ('elem', 'ns', sub-elems, {attrs}) for sub-node with - optional elements and attributes - list, of above tuples - """ - if ns == 'DAV:': - ns_prefix = 'D:' - else: - ns_prefix="ns"+str(self.namespaces.index(ns))+":" - - pe = self.doc.createElement(ns_prefix+str(prop)) - if hasattr(value, '__class__') and value.__class__.__name__ == 'Element': - pe.appendChild(value) - else: - if ns == 'DAV:' and prop=="resourcetype" and isinstance(value, int): - # hack, to go.. - if value == 1: - ve = self.doc.createElement("D:collection") - pe.appendChild(ve) - else: - self._prop_elem_child(pe, ns, value, ns_prefix) - - xnode.appendChild(pe) - - def _prop_elem_child(self, pnode, pns, v, pns_prefix): - - if isinstance(v, list): - for vit in v: - self._prop_elem_child(pnode, pns, vit, pns_prefix) - elif isinstance(v,tuple): - need_ns = False - if v[1] == pns: - ns_prefix = pns_prefix - elif v[1] == 'DAV:': - ns_prefix = 'D:' - elif v[1] in self.namespaces: - ns_prefix="ns"+str(self.namespaces.index(v[1]))+":" - else: - ns_prefix="ns"+str(self.nsnum)+":" - need_ns = True - - ve = self.doc.createElement(ns_prefix+v[0]) - if need_ns: - ve.setAttribute("xmlns:ns"+str(self.nsnum), v[1]) - if len(v) > 2 and v[2] is not None: - if isinstance(v[2], (list, tuple)): - # support nested elements like: - # ( 'elem', 'ns:', [('sub-elem1', 'ns1'), ...] - self._prop_elem_child(ve, v[1], v[2], ns_prefix) - else: - vt = self.createText2Node(tools.ustr(v[2])) - ve.appendChild(vt) - if len(v) > 3 and v[3]: - assert isinstance(v[3], dict) - for ak, av in v[3].items(): - ve.setAttribute(ak, av) - pnode.appendChild(ve) - else: - ve = self.createText2Node(tools.ustr(v)) - pnode.appendChild(ve) - - -super_mk_prop_response = PROPFIND.mk_prop_response -def mk_prop_response(self, uri, good_props, bad_props, doc): - """ make a new result element - - We differ between the good props and the bad ones for - each generating an extra -Node (for each error - one, that means). - - """ - re=doc.createElement("D:response") - # append namespaces to response - nsnum=0 - namespaces = self.namespaces[:] - if 'DAV:' in namespaces: - namespaces.remove('DAV:') - for nsname in namespaces: - re.setAttribute("xmlns:ns"+str(nsnum),nsname) - nsnum=nsnum+1 - - propgen = Prop2xml(doc, namespaces, nsnum) - # write href information - uparts=urlparse.urlparse(uri) - fileloc=uparts[2] - if uparts[3]: - fileloc += ';' + uparts[3] - if isinstance(fileloc, unicode): - fileloc = fileloc.encode('utf-8') - href=doc.createElement("D:href") - davpath = self._dataclass.parent.get_davpath() - if uparts[0] and uparts[1]: - hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc)) - else: - # When the request has been relative, we don't have enough data to - # reply with absolute url here. - hurl = '%s%s' % (davpath, urllib.quote(fileloc)) - huri=doc.createTextNode(hurl) - href.appendChild(huri) - re.appendChild(href) - - # write good properties - ps=doc.createElement("D:propstat") - if good_props: - re.appendChild(ps) - s=doc.createElement("D:status") - t=doc.createTextNode("HTTP/1.1 200 OK") - s.appendChild(t) - ps.appendChild(s) - - gp=doc.createElement("D:prop") - for ns in good_props.keys(): - if ns == 'DAV:': - ns_prefix = 'D:' - else: - ns_prefix="ns"+str(namespaces.index(ns))+":" - for p,v in good_props[ns].items(): - if v is None: - continue - propgen._prop_child(gp, ns, p, v) - - ps.appendChild(gp) - re.appendChild(ps) - - # now write the errors! - if len(bad_props.items()): - - # write a propstat for each error code - for ecode in bad_props.keys(): - ps=doc.createElement("D:propstat") - re.appendChild(ps) - s=doc.createElement("D:status") - t=doc.createTextNode(utils.gen_estring(ecode)) - s.appendChild(t) - ps.appendChild(s) - bp=doc.createElement("D:prop") - ps.appendChild(bp) - - for ns in bad_props[ecode].keys(): - if ns == 'DAV:': - ns_prefix='D:' - else: - ns_prefix="ns"+str(self.namespaces.index(ns))+":" - - for p in bad_props[ecode][ns]: - pe=doc.createElement(ns_prefix+str(p)) - bp.appendChild(pe) - - re.appendChild(ps) - - # return the new response element - return re - - -def mk_propname_response(self, uri, propnames, doc): - """ make a new result element for a PROPNAME request - - This will simply format the propnames list. - propnames should have the format {NS1 : [prop1, prop2, ...], NS2: ...} - - """ - re=doc.createElement("D:response") - - # write href information - uparts=urlparse.urlparse(uri) - fileloc=uparts[2] - if uparts[3]: - fileloc += ';' + uparts[3] - if isinstance(fileloc, unicode): - fileloc = fileloc.encode('utf-8') - href=doc.createElement("D:href") - davpath = self._dataclass.parent.get_davpath() - if uparts[0] and uparts[1]: - hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc)) - else: - # When the request has been relative, we don't have enough data to - # reply with absolute url here. - hurl = '%s%s' % (davpath, urllib.quote(fileloc)) - huri=doc.createTextNode(hurl) - href.appendChild(huri) - re.appendChild(href) - - ps=doc.createElement("D:propstat") - nsnum=0 - - for ns,plist in propnames.items(): - # write prop element - pr=doc.createElement("D:prop") - if ns == 'DAV': - nsp = 'D' - else: - nsp="ns"+str(nsnum) - ps.setAttribute("xmlns:"+nsp,ns) - nsnum=nsnum+1 - - # write propertynames - for p in plist: - pe=doc.createElement(nsp+":"+p) - pr.appendChild(pe) - - ps.appendChild(pr) - - re.appendChild(ps) - - return re - -PROPFIND.mk_prop_response = mk_prop_response -PROPFIND.mk_propname_response = mk_propname_response - -def mk_lock_response(self, uri, props): - """ Prepare the data response to a DAV LOCK command - - This function is here, merely to be in the same file as the - ones above, that have similar code. - """ - doc = domimpl.createDocument('DAV:', "D:prop", None) - ms = doc.documentElement - ms.setAttribute("xmlns:D", "DAV:") - # ms.tagName = 'D:multistatus' - namespaces = [] - nsnum = 0 - propgen = Prop2xml(doc, namespaces, nsnum) - # write href information - uparts=urlparse.urlparse(uri) - fileloc=uparts[2] - if uparts[3]: - fileloc += ';' + uparts[3] - if isinstance(fileloc, unicode): - fileloc = fileloc.encode('utf-8') - davpath = self.parent.get_davpath() - if uparts[0] and uparts[1]: - hurl = '%s://%s%s%s' % (uparts[0], uparts[1], davpath, urllib.quote(fileloc)) - else: - # When the request has been relative, we don't have enough data to - # reply with absolute url here. - hurl = '%s%s' % (davpath, urllib.quote(fileloc)) - - props.append( ('lockroot', 'DAV:', ('href', 'DAV:', (hurl)))) - pld = doc.createElement('D:lockdiscovery') - ms.appendChild(pld) - propgen._prop_child(pld, 'DAV:', 'activelock', props) - - return doc.toxml(encoding="utf-8") - -super_create_prop = REPORT.create_prop - -def create_prop(self): - try: - if (self.filter is not None) and self._depth == "0": - hrefs = self.filter.getElementsByTagNameNS('DAV:', 'href') - if hrefs: - self._depth = "1" - except Exception: - pass - return super_create_prop(self) - -REPORT.create_prop = create_prop - -#eof - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/webdav_demo.xml b/addons/document_webdav/webdav_demo.xml deleted file mode 100644 index 9bd68b8a1f1..00000000000 --- a/addons/document_webdav/webdav_demo.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - debug: - node_class - %(node_classname)s - - - - - - - diff --git a/addons/document_webdav/webdav_server.py b/addons/document_webdav/webdav_server.py deleted file mode 100644 index e495f5c9f2f..00000000000 --- a/addons/document_webdav/webdav_server.py +++ /dev/null @@ -1,676 +0,0 @@ -# -*- encoding: utf-8 -*- -############################################################################9 -# -# Copyright P. Christeas 2008-2010 -# Copyright OpenERP SA, 2010 (http://www.openerp.com ) -# -# Disclaimer: Many of the functions below borrow code from the -# python-webdav library (http://code.google.com/p/pywebdav/ ), -# which they import and override to suit OpenERP functionality. -# python-webdav was written by: Simon Pamies -# Christian Scholz -# Vince Spicer -# -# WARNING: This program as such is intended to be used by professional -# programmers who take the whole responsability of assessing all potential -# consequences resulting from its eventual inadequacies and bugs -# End users who are looking for a ready-to-use solution with commercial -# garantees and support are strongly adviced to contract a Free Software -# Service Company -# -# This program is Free Software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License -# as published by the Free Software Foundation; either version 3 -# of the License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -############################################################################### - - -import logging -import openerp -from dav_fs import openerp_dav_handler -from openerp.tools.config import config -try: - from pywebdav.lib.WebDAVServer import DAVRequestHandler - from pywebdav.lib.utils import IfParser, TagList - from pywebdav.lib.errors import DAV_Error, DAV_Forbidden, DAV_NotFound - from pywebdav.lib.propfind import PROPFIND -except ImportError: - from DAV.WebDAVServer import DAVRequestHandler - from DAV.utils import IfParser, TagList - from DAV.errors import DAV_Error, DAV_Forbidden, DAV_NotFound - from DAV.propfind import PROPFIND -from openerp.service import http_server -from openerp.service.websrv_lib import FixSendError, HttpOptions -from BaseHTTPServer import BaseHTTPRequestHandler -import urlparse -import urllib -import re -import time -from string import atoi -import socket -# from DAV.constants import DAV_VERSION_1, DAV_VERSION_2 -from xml.dom import minidom -from redirect import RedirectHTTPHandler -_logger = logging.getLogger(__name__) -khtml_re = re.compile(r' KHTML/([0-9\.]+) ') - -def OpenDAVConfig(**kw): - class OpenDAV: - def __init__(self, **kw): - self.__dict__.update(**kw) - - def getboolean(self, word): - return self.__dict__.get(word, False) - - class Config: - DAV = OpenDAV(**kw) - - return Config() - - -class DAVHandler(DAVRequestHandler, HttpOptions, FixSendError): - verbose = False - - protocol_version = 'HTTP/1.1' - _HTTP_OPTIONS= { 'DAV' : ['1', '2'], - 'Allow' : [ 'GET', 'HEAD', 'COPY', 'MOVE', 'POST', 'PUT', - 'PROPFIND', 'PROPPATCH', 'OPTIONS', 'MKCOL', - 'DELETE', 'TRACE', 'REPORT', ] - } - - def __init__(self, request, client_address, server): - self.request = request - self.client_address = client_address - self.server = server - self.setup() - - def get_userinfo(self, user, pw): - return False - - def _log(self, message): - self._logger.debug(message) - - def handle(self): - """Handle multiple requests if necessary.""" - self.close_connection = 1 - try: - self.handle_one_request() - while not self.close_connection: - self.handle_one_request() - except Exception as e: - try: - self.log_error("Request timed out: %r \n Trying old version of HTTPServer", e) - self._init_buffer() - except Exception as e: - #a read or a write timed out. Discard this connection - self.log_error("Not working neither, closing connection\n %r", e) - self.close_connection = 1 - - def finish(self): - pass - - def get_db_from_path(self, uri): - # interface class will handle all cases. - res = self.IFACE_CLASS.get_db(uri, allow_last=True) - return res - - def setup(self): - self.davpath = '/'+config.get_misc('webdav','vdir','webdav') - addr, port = self.server.server_name, self.server.server_port - server_proto = getattr(self.server,'proto', 'http').lower() - # Too early here to use self.headers - self.baseuri = "%s://%s:%d/"% (server_proto, addr, port) - self.IFACE_CLASS = openerp_dav_handler(self, self.verbose) - - def copymove(self, CLASS): - """ Our uri scheme removes the /webdav/ component from there, so we - need to mangle the header, too. - """ - up = urlparse.urlparse(urllib.unquote(self.headers['Destination'])) - if up.path.startswith(self.davpath): - self.headers['Destination'] = up.path[len(self.davpath):] - else: - raise DAV_Forbidden("Not allowed to copy/move outside webdav path.") - # TODO: locks - DAVRequestHandler.copymove(self, CLASS) - - def get_davpath(self): - return self.davpath - - def log_message(self, format, *args): - _logger.debug(format % args) - - def log_error(self, format, *args): - _logger.warning(format % args) - - def _prep_OPTIONS(self, opts): - ret = opts - dc=self.IFACE_CLASS - uri=urlparse.urljoin(self.get_baseuri(dc), self.path) - uri=urllib.unquote(uri) - try: - ret = dc.prep_http_options(uri, opts) - except DAV_Error, (ec,dd): - pass - except Exception,e: - self.log_error("Error at options: %s", str(e)) - raise - return ret - - def send_response(self, code, message=None): - # the BufferingHttpServer will send Connection: close , while - # the BaseHTTPRequestHandler will only accept int code. - # workaround both of them. - if self.command == 'PROPFIND' and int(code) == 404: - kh = khtml_re.search(self.headers.get('User-Agent','')) - if kh and (kh.group(1) < '4.5'): - # There is an ugly bug in all khtml < 4.5.x, where the 404 - # response is treated as an immediate error, which would even - # break the flow of a subsequent PUT request. At the same time, - # the 200 response (rather than 207 with content) is treated - # as "path not exist", so we send this instead - # https://bugs.kde.org/show_bug.cgi?id=166081 - code = 200 - BaseHTTPRequestHandler.send_response(self, int(code), message) - - def send_header(self, key, value): - if key == 'Connection' and value == 'close': - self.close_connection = 1 - DAVRequestHandler.send_header(self, key, value) - - def send_body(self, DATA, code=None, msg=None, desc=None, ctype='application/octet-stream', headers=None): - if headers and 'Connection' in headers: - pass - elif self.request_version in ('HTTP/1.0', 'HTTP/0.9'): - pass - elif self.close_connection == 1: # close header already sent - pass - elif headers and self.headers.get('Connection',False) == 'Keep-Alive': - headers['Connection'] = 'keep-alive' - - if headers is None: - headers = {} - - DAVRequestHandler.send_body(self, DATA, code=code, msg=msg, desc=desc, - ctype=ctype, headers=headers) - - def do_PUT(self): - dc=self.IFACE_CLASS - uri=urlparse.urljoin(self.get_baseuri(dc), self.path) - uri=urllib.unquote(uri) - # Handle If-Match - if self.headers.has_key('If-Match'): - test = False - etag = None - - for match in self.headers['If-Match'].split(','): - if match == '*': - if dc.exists(uri): - test = True - break - else: - if dc.match_prop(uri, match, "DAV:", "getetag"): - test = True - break - if not test: - self._get_body() - self.send_status(412) - return - - # Handle If-None-Match - if self.headers.has_key('If-None-Match'): - test = True - etag = None - for match in self.headers['If-None-Match'].split(','): - if match == '*': - if dc.exists(uri): - test = False - break - else: - if dc.match_prop(uri, match, "DAV:", "getetag"): - test = False - break - if not test: - self._get_body() - self.send_status(412) - return - - # Handle expect - expect = self.headers.get('Expect', '') - if (expect.lower() == '100-continue' and - self.protocol_version >= 'HTTP/1.1' and - self.request_version >= 'HTTP/1.1'): - self.send_status(100) - self._flush() - - # read the body - body=self._get_body() - - # locked resources are not allowed to be overwritten - if self._l_isLocked(uri): - return self.send_body(None, '423', 'Locked', 'Locked') - - ct=None - if self.headers.has_key("Content-Type"): - ct=self.headers['Content-Type'] - try: - location = dc.put(uri, body, ct) - except DAV_Error, (ec,dd): - self.log_error("Cannot PUT to %s: %s", uri, dd) - return self.send_status(ec) - - headers = {} - etag = None - if location and isinstance(location, tuple): - etag = location[1] - location = location[0] - # note that we have allowed for > 2 elems - if location: - headers['Location'] = location - else: - try: - if not etag: - etag = dc.get_prop(location or uri, "DAV:", "getetag") - if etag: - headers['ETag'] = str(etag) - except Exception: - pass - - self.send_body(None, '201', 'Created', '', headers=headers) - - def _get_body(self): - body = None - if self.headers.has_key("Content-Length"): - l=self.headers['Content-Length'] - body=self.rfile.read(atoi(l)) - return body - - def do_DELETE(self): - try: - DAVRequestHandler.do_DELETE(self) - except DAV_Error, (ec, dd): - return self.send_status(ec) - - def do_UNLOCK(self): - """ Unlocks given resource """ - - dc = self.IFACE_CLASS - self.log_message('UNLOCKing resource %s' % self.headers) - - uri = urlparse.urljoin(self.get_baseuri(dc), self.path) - uri = urllib.unquote(uri) - - token = self.headers.get('Lock-Token', False) - if token: - token = token.strip() - if token[0] == '<' and token[-1] == '>': - token = token[1:-1] - else: - token = False - - if not token: - return self.send_status(400, 'Bad lock token') - - try: - res = dc.unlock(uri, token) - except DAV_Error, (ec, dd): - return self.send_status(ec, dd) - - if res == True: - self.send_body(None, '204', 'OK', 'Resource unlocked.') - else: - # We just differentiate the description, for debugging purposes - self.send_body(None, '204', 'OK', 'Resource not locked.') - - def do_LOCK(self): - """ Attempt to place a lock on the given resource. - """ - - dc = self.IFACE_CLASS - lock_data = {} - - self.log_message('LOCKing resource %s' % self.headers) - - body = None - if self.headers.has_key('Content-Length'): - l = self.headers['Content-Length'] - body = self.rfile.read(atoi(l)) - - depth = self.headers.get('Depth', 'infinity') - - uri = urlparse.urljoin(self.get_baseuri(dc), self.path) - uri = urllib.unquote(uri) - self.log_message('do_LOCK: uri = %s' % uri) - - ifheader = self.headers.get('If') - - if ifheader: - ldif = IfParser(ifheader) - if isinstance(ldif, list): - if len(ldif) !=1 or (not isinstance(ldif[0], TagList)) \ - or len(ldif[0].list) != 1: - raise DAV_Error(400, "Cannot accept multiple tokens.") - ldif = ldif[0].list[0] - if ldif[0] == '<' and ldif[-1] == '>': - ldif = ldif[1:-1] - - lock_data['token'] = ldif - - if not body: - lock_data['refresh'] = True - else: - lock_data['refresh'] = False - lock_data.update(self._lock_unlock_parse(body)) - - if lock_data['refresh'] and not lock_data.get('token', False): - raise DAV_Error(400, 'Lock refresh must specify token.') - - lock_data['depth'] = depth - - try: - created, data, lock_token = dc.lock(uri, lock_data) - except DAV_Error, (ec, dd): - return self.send_status(ec, dd) - - headers = {} - if not lock_data['refresh']: - headers['Lock-Token'] = '<%s>' % lock_token - - if created: - self.send_body(data, '201', 'Created', ctype='text/xml', headers=headers) - else: - self.send_body(data, '200', 'OK', ctype='text/xml', headers=headers) - - def _lock_unlock_parse(self, body): - # Override the python-webdav function, with some improvements - # Unlike the py-webdav one, we also parse the owner minidom elements into - # pure pythonic struct. - doc = minidom.parseString(body) - - data = {} - owners = [] - for info in doc.getElementsByTagNameNS('DAV:', 'lockinfo'): - for scope in info.getElementsByTagNameNS('DAV:', 'lockscope'): - for scc in scope.childNodes: - if scc.nodeType == info.ELEMENT_NODE \ - and scc.namespaceURI == 'DAV:': - data['lockscope'] = scc.localName - break - for ltype in info.getElementsByTagNameNS('DAV:', 'locktype'): - for ltc in ltype.childNodes: - if ltc.nodeType == info.ELEMENT_NODE \ - and ltc.namespaceURI == 'DAV:': - data['locktype'] = ltc.localName - break - for own in info.getElementsByTagNameNS('DAV:', 'owner'): - for ono in own.childNodes: - if ono.nodeType == info.TEXT_NODE: - if ono.data: - owners.append(ono.data) - elif ono.nodeType == info.ELEMENT_NODE \ - and ono.namespaceURI == 'DAV:' \ - and ono.localName == 'href': - href = '' - for hno in ono.childNodes: - if hno.nodeType == info.TEXT_NODE: - href += hno.data - owners.append(('href','DAV:', href)) - - if len(owners) == 1: - data['lockowner'] = owners[0] - elif not owners: - pass - else: - data['lockowner'] = owners - return data - -from openerp.service.http_server import reg_http_service,OpenERPAuthProvider - -class DAVAuthProvider(OpenERPAuthProvider): - def authenticate(self, db, user, passwd, client_address): - """ authenticate, but also allow the False db, meaning to skip - authentication when no db is specified. - """ - if db is False: - return True - return OpenERPAuthProvider.authenticate(self, db, user, passwd, client_address) - - -class dummy_dav_interface(object): - """ Dummy dav interface """ - verbose = True - - PROPS={"DAV:" : ('creationdate', - 'displayname', - 'getlastmodified', - 'resourcetype', - ), - } - - M_NS={"DAV:" : "_get_dav", } - - def __init__(self, parent): - self.parent = parent - - def get_propnames(self, uri): - return self.PROPS - - def get_prop(self, uri, ns, propname): - if self.M_NS.has_key(ns): - prefix=self.M_NS[ns] - else: - raise DAV_NotFound - mname=prefix+"_"+propname.replace('-', '_') - try: - m=getattr(self,mname) - r=m(uri) - return r - except AttributeError: - raise DAV_NotFound - - def get_data(self, uri, range=None): - raise DAV_NotFound - - def _get_dav_creationdate(self, uri): - return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()) - - def _get_dav_getlastmodified(self, uri): - return time.strftime("%a, %d %b %Y %H:%M:%S GMT", time.gmtime()) - - def _get_dav_displayname(self, uri): - return uri - - def _get_dav_resourcetype(self, uri): - return ('collection', 'DAV:') - - def exists(self, uri): - """ return 1 or None depending on if a resource exists """ - uri2 = uri.split('/') - if len(uri2) < 3: - return True - _logger.debug("Requested uri: %s", uri) - return None # no - - def is_collection(self, uri): - """ return 1 or None depending on if a resource is a collection """ - return None # no - -class DAVStaticHandler(http_server.StaticHTTPHandler): - """ A variant of the Static handler, which will serve dummy DAV requests - """ - - verbose = False - protocol_version = 'HTTP/1.1' - _HTTP_OPTIONS= { 'DAV' : ['1', '2'], - 'Allow' : [ 'GET', 'HEAD', - 'PROPFIND', 'OPTIONS', 'REPORT', ] - } - - def send_body(self, content, code, message='OK', content_type='text/xml'): - self.send_response(int(code), message) - self.send_header("Content-Type", content_type) - # self.send_header('Connection', 'close') - self.send_header('Content-Length', len(content) or 0) - self.end_headers() - if hasattr(self, '_flush'): - self._flush() - - if self.command != 'HEAD': - self.wfile.write(content) - - def do_PROPFIND(self): - """Answer to PROPFIND with generic data. - - A rough copy of python-webdav's do_PROPFIND, but hacked to work - statically. - """ - - dc = dummy_dav_interface(self) - - # read the body containing the xml request - # iff there is no body then this is an ALLPROP request - body = None - if self.headers.has_key('Content-Length'): - l = self.headers['Content-Length'] - body = self.rfile.read(atoi(l)) - - path = self.path.rstrip('/') - uri = urllib.unquote(path) - - pf = PROPFIND(uri, dc, self.headers.get('Depth', 'infinity'), body) - - try: - DATA = '%s\n' % pf.createResponse() - except DAV_Error, (ec,dd): - return self.send_error(ec,dd) - except Exception: - self.log_exception("Cannot PROPFIND") - raise - - # work around MSIE DAV bug for creation and modified date - # taken from Resource.py @ Zope webdav - if (self.headers.get('User-Agent') == - 'Microsoft Data Access Internet Publishing Provider DAV 1.1'): - DATA = DATA.replace('', - '') - DATA = DATA.replace('', - '') - - self.send_body(DATA, '207','Multi-Status','Multiple responses') - - def not_get_baseuri(self): - baseuri = '/' - if self.headers.has_key('Host'): - uparts = list(urlparse.urlparse('/')) - uparts[1] = self.headers['Host'] - baseuri = urlparse.urlunparse(uparts) - return baseuri - - def get_davpath(self): - return '' - - -try: - - if (config.get_misc('webdav','enable',True)): - directory = '/'+config.get_misc('webdav','vdir','webdav') - handler = DAVHandler - verbose = config.get_misc('webdav','verbose',True) - handler.debug = config.get_misc('webdav','debug',True) - _dc = { 'verbose' : verbose, - 'directory' : directory, - 'lockemulation' : True, - } - - conf = OpenDAVConfig(**_dc) - handler._config = conf - reg_http_service(directory, DAVHandler, DAVAuthProvider) - _logger.info("WebDAV service registered at path: %s/ "% directory) - - if not (config.get_misc('webdav', 'no_root_hack', False)): - # Now, replace the static http handler with the dav-enabled one. - # If a static-http service has been specified for our server, then - # read its configuration and use that dir_path. - # NOTE: this will _break_ any other service that would be registered - # at the root path in future. - base_path = False - if config.get_misc('static-http','enable', False): - base_path = config.get_misc('static-http', 'base_path', '/') - if base_path and base_path == '/': - dir_path = config.get_misc('static-http', 'dir_path', False) - else: - dir_path = openerp.modules.module.get_module_resource('document_webdav','public_html') - # an _ugly_ hack: we put that dir back in tools.config.misc, so that - # the StaticHttpHandler can find its dir_path. - config.misc.setdefault('static-http',{})['dir_path'] = dir_path - - reg_http_service('/', DAVStaticHandler) - -except Exception, e: - _logger.error('Cannot launch webdav: %s' % e) - - -def init_well_known(): - reps = RedirectHTTPHandler.redirect_paths - - num_svcs = config.get_misc('http-well-known', 'num_services', '0') - - for nsv in range(1, int(num_svcs)+1): - uri = config.get_misc('http-well-known', 'service_%d' % nsv, False) - path = config.get_misc('http-well-known', 'path_%d' % nsv, False) - if not (uri and path): - continue - reps['/'+uri] = path - - if int(num_svcs): - reg_http_service('/.well-known', RedirectHTTPHandler) - -init_well_known() - -class PrincipalsRedirect(RedirectHTTPHandler): - - - redirect_paths = {} - - def _find_redirect(self): - for b, r in self.redirect_paths.items(): - if self.path.startswith(b): - return r + self.path[len(b):] - return False - -def init_principals_redirect(): - """ Some devices like the iPhone will look under /principals/users/xxx for - the user's properties. In OpenERP we _cannot_ have a stray /principals/... - working path, since we have a database path and the /webdav/ component. So, - the best solution is to redirect the url with 301. Luckily, it does work in - the device. The trick is that we need to hard-code the database to use, either - the one centrally defined in the config, or a "forced" one in the webdav - section. - """ - dbname = config.get_misc('webdav', 'principal_dbname', False) - if (not dbname) and not config.get_misc('webdav', 'no_principals_redirect', False): - dbname = config.get('db_name', False) - if dbname: - PrincipalsRedirect.redirect_paths[''] = '/webdav/%s/principals' % dbname - reg_http_service('/principals', PrincipalsRedirect) - _logger.info( - "Registered HTTP redirect handler for /principals to the %s db.", - dbname) - -init_principals_redirect() - -#eof - - - - -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/document_webdav/webdav_setup.xml b/addons/document_webdav/webdav_setup.xml deleted file mode 100644 index dbf6bc8fbcc..00000000000 --- a/addons/document_webdav/webdav_setup.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - [] - - - - - directory - - principals - - - - [] - - - - - - directory - - groups - - - - [] - - - - - directory - - resources - - - [('id','=',uid)] - - - - - - - ressource - - - __uids__ - - - [('id','=',uid)] - - - - - - - ressource - - - users - - - [] - - - - - directory - - locations - - - DAV: - current-user-principal - ('href','DAV:','/%s/%s/principals/users/%s' % ('webdav',dbname, username ) ) - - - - DAV: - principal-URL - ('href','DAV:','/%s/%s/principals/users/%s' % ('webdav',dbname, username ) ) - - - - - \ No newline at end of file diff --git a/addons/document_webdav/webdav_view.xml b/addons/document_webdav/webdav_view.xml deleted file mode 100644 index 5a0cb75274e..00000000000 --- a/addons/document_webdav/webdav_view.xml +++ /dev/null @@ -1,157 +0,0 @@ - - - - - - document.webdav.dir.property.form - document.webdav.dir.property - -
- - - - - - - - -
-
- - - document.webdav.dir.property.tree - document.webdav.dir.property - - - - - - - - - - - Search View: Directory DAV properties - document.webdav.dir.property - - - - - - - - - - - - - DAV Properties for Folders - ir.actions.act_window - document.webdav.dir.property - form - tree,form - - - - - - - - - document.directory.webdav.inherit - document.directory - - - - - - - - - - - - document.webdav.file.property.form - document.webdav.file.property - -
- - - - - - - - - -
-
- - - document.webdav.file.property.tree - document.webdav.file.property - - - - - - - - - - - Search View: File DAV properties - document.webdav.file.property - - - - - - - - - - - - - DAV Properties for Documents - ir.actions.act_window - document.webdav.file.property - form - tree,form - - - -
-
diff --git a/addons/hw_escpos/controllers/main.py b/addons/hw_escpos/controllers/main.py index e950950a985..9e5656ef986 100644 --- a/addons/hw_escpos/controllers/main.py +++ b/addons/hw_escpos/controllers/main.py @@ -12,6 +12,7 @@ import math import md5 import openerp.addons.hw_proxy.controllers.main as hw_proxy import subprocess +import traceback from threading import Thread, Lock from Queue import Queue, Empty @@ -36,6 +37,7 @@ from openerp.tools.translate import _ _logger = logging.getLogger(__name__) + class EscposDriver(Thread): def __init__(self): Thread.__init__(self) @@ -45,6 +47,7 @@ class EscposDriver(Thread): def connected_usb_devices(self): connected = [] + for device in supported_devices.device_list: if usb.core.find(idVendor=device['vendor'], idProduct=device['product']) != None: connected.append(device) @@ -74,6 +77,8 @@ class EscposDriver(Thread): self.push_task('status') return self.status + + def open_cashbox(self,printer): printer.cashdraw(2) printer.cashdraw(5) @@ -113,6 +118,9 @@ class EscposDriver(Thread): if timestamp >= time.time() - 1 * 60 * 60: self.print_receipt_body(printer,data) printer.cut() + elif task == 'xml_receipt': + if timestamp >= time.time() - 1 * 60 * 60: + printer.receipt(data) elif task == 'cashbox': if timestamp >= time.time() - 12: self.open_cashbox(printer) @@ -123,7 +131,8 @@ class EscposDriver(Thread): except Exception as e: self.set_status('error', str(e)) - _logger.error(e); + errmsg = str(e) + '\n' + '-'*60+'\n' + traceback.format_exc() + '-'*60 + '\n' + _logger.error(errmsg); def push_task(self,task, data = None): self.lockedstart() @@ -142,12 +151,15 @@ class EscposDriver(Thread): if len(ips) == 0: eprint.text('ERROR: Could not connect to LAN\n\nPlease check that the PosBox is correc-\ntly connected with a network cable,\n that the LAN is setup with DHCP, and\nthat network addresses are available') elif len(ips) == 1: - eprint.text('IP Address\n'+ips[0]+'\n') + eprint.text('IP Address:\n'+ips[0]+'\n') else: - eprint.text('IP Addresses\n') + eprint.text('IP Addresses:\n') for ip in ips: eprint.text(ip+'\n') + if len(ips) >= 1: + eprint.text('\nHomepage:\nhttp://'+ips[0]+':8069\n') + eprint.text('\n\n') eprint.cut() @@ -278,10 +290,10 @@ class EscposDriver(Thread): driver = EscposDriver() +driver.push_task('printstatus') + hw_proxy.drivers['escpos'] = driver -driver.push_task('printstatus') - class EscposProxy(hw_proxy.Proxy): @http.route('/hw_proxy/open_cashbox', type='json', auth='none', cors='*') @@ -293,4 +305,9 @@ class EscposProxy(hw_proxy.Proxy): def print_receipt(self, receipt): _logger.info('ESC/POS: PRINT RECEIPT') driver.push_task('receipt',receipt) + + @http.route('/hw_proxy/print_xml_receipt', type='json', auth='none', cors='*') + def print_receipt(self, receipt): + _logger.info('ESC/POS: PRINT XML RECEIPT') + driver.push_task('xml_receipt',receipt) diff --git a/addons/hw_escpos/escpos/constants.py b/addons/hw_escpos/escpos/constants.py index 723c67013f0..6f0be0bb135 100644 --- a/addons/hw_escpos/escpos/constants.py +++ b/addons/hw_escpos/escpos/constants.py @@ -22,6 +22,7 @@ PAPER_PART_CUT = '\x1d\x56\x01' # Partial cut paper TXT_NORMAL = '\x1b\x21\x00' # Normal text TXT_2HEIGHT = '\x1b\x21\x10' # Double height text TXT_2WIDTH = '\x1b\x21\x20' # Double width text +TXT_DOUBLE = '\x1b\x21\x30' # Double height & Width TXT_UNDERL_OFF = '\x1b\x2d\x00' # Underline font OFF TXT_UNDERL_ON = '\x1b\x2d\x01' # Underline font 1-dot ON TXT_UNDERL2_ON = '\x1b\x2d\x02' # Underline font 2-dot ON diff --git a/addons/hw_escpos/escpos/escpos.py b/addons/hw_escpos/escpos/escpos.py index a4942019f8c..84b52f99d8c 100644 --- a/addons/hw_escpos/escpos/escpos.py +++ b/addons/hw_escpos/escpos/escpos.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +# -*- coding: utf-8 -*- ''' @author: Manuel F Martinez @organization: Bashlinux @@ -17,6 +17,10 @@ import io import base64 import math import md5 +import re +import traceback +import xml.etree.ElementTree as ET +import xml.dom.minidom as minidom from PIL import Image @@ -30,13 +34,272 @@ except ImportError: from constants import * from exceptions import * +def utfstr(stuff): + """ converts stuff to string and does without failing if stuff is a utf8 string """ + if isinstance(stuff,basestring): + return stuff + else: + return str(stuff) + +class StyleStack: + """ + The stylestack is used by the xml receipt serializer to compute the active styles along the xml + document. Styles are just xml attributes, there is no css mechanism. But the style applied by + the attributes are inherited by deeper nodes. + """ + def __init__(self): + self.stack = [] + self.defaults = { # default style values + 'align': 'left', + 'underline': 'off', + 'bold': 'off', + 'size': 'normal', + 'font' : 'a', + 'width': 48, + 'indent': 0, + 'tabwidth': 2, + 'bullet': ' - ', + 'line-ratio':0.5, + + 'value-decimals': 2, + 'value-symbol': '', + 'value-symbol-position': 'after', + 'value-autoint': 'off', + 'value-decimals-separator': '.', + 'value-thousands-separator': ',', + 'value-width': 0, + + } + + self.types = { # attribute types, default is string and can be ommitted + 'width': 'int', + 'indent': 'int', + 'tabwidth': 'int', + 'line-ratio': 'float', + 'value-decimals': 'int', + 'value-width': 'int', + } + + self.cmds = { + # translation from styles to escpos commands + # some style do not correspond to escpos command are used by + # the serializer instead + 'align': { + 'left': TXT_ALIGN_LT, + 'right': TXT_ALIGN_RT, + 'center': TXT_ALIGN_CT, + }, + 'underline': { + 'off': TXT_UNDERL_OFF, + 'on': TXT_UNDERL_ON, + 'double': TXT_UNDERL2_ON, + }, + 'bold': { + 'off': TXT_BOLD_OFF, + 'on': TXT_BOLD_ON, + }, + 'font': { + 'a': TXT_FONT_A, + 'b': TXT_FONT_B, + }, + 'size': { + 'normal': TXT_NORMAL, + 'double-height': TXT_2HEIGHT, + 'double-width': TXT_2WIDTH, + 'double': TXT_DOUBLE, + } + } + + self.push(self.defaults) + + def get(self,style): + """ what's the value of a style at the current stack level""" + level = len(self.stack) -1 + while level >= 0: + if style in self.stack[level]: + return self.stack[level][style] + else: + level = level - 1 + return None + + def enforce_type(self, attr, val): + """converts a value to the attribute's type""" + if not attr in self.types: + return utfstr(val) + elif self.types[attr] == 'int': + return int(float(val)) + elif self.types[attr] == 'float': + return float(val) + else: + return utfstr(val) + + def push(self, style={}): + """push a new level on the stack with a style dictionnary containing style:value pairs""" + _style = {} + for attr in style: + if attr in self.cmds and not style[attr] in self.cmds[attr]: + print 'WARNING: ESC/POS PRINTING: ignoring invalid value: '+utfstr(style[attr])+' for style: '+utfstr(attr) + else: + _style[attr] = self.enforce_type(attr, style[attr]) + self.stack.append(_style) + + def set(self, style={}): + """overrides style values at the current stack level""" + _style = {} + for attr in style: + if attr in self.cmds and not style[attr] in self.cmds[attr]: + print 'WARNING: ESC/POS PRINTING: ignoring invalid value: '+utfstr(style[attr])+' for style: '+utfstr(attr) + else: + self.stack[-1][attr] = self.enforce_type(attr, style[attr]) + + def pop(self): + """ pop a style stack level """ + if len(self.stack) > 1 : + self.stack = self.stack[:-1] + + def to_escpos(self): + """ converts the current style to an escpos command string """ + cmd = '' + for style in self.cmds: + cmd += self.cmds[style][self.get(style)] + return cmd + +class XmlSerializer: + """ + Converts the xml inline / block tree structure to a string, + keeping track of newlines and spacings. + The string is outputted asap to the provided escpos driver. + """ + def __init__(self,escpos): + self.escpos = escpos + self.stack = ['block'] + self.dirty = False + + def start_inline(self,stylestack=None): + """ starts an inline entity with an optional style definition """ + self.stack.append('inline') + if self.dirty: + self.escpos._raw(' ') + if stylestack: + self.style(stylestack) + + def start_block(self,stylestack=None): + """ starts a block entity with an optional style definition """ + if self.dirty: + self.escpos._raw('\n') + self.dirty = False + self.stack.append('block') + if stylestack: + self.style(stylestack) + + def end_entity(self): + """ ends the entity definition. (but does not cancel the active style!) """ + if self.stack[-1] == 'block' and self.dirty: + self.escpos._raw('\n') + self.dirty = False + if len(self.stack) > 1: + self.stack = self.stack[:-1] + + def pre(self,text): + """ puts a string of text in the entity keeping the whitespace intact """ + if text: + self.escpos.text(text) + self.dirty = True + + def text(self,text): + """ puts text in the entity. Whitespace and newlines are stripped to single spaces. """ + if text: + text = utfstr(text) + text = text.strip() + text = re.sub('\s+',' ',text) + if text: + self.dirty = True + self.escpos.text(text) + + def linebreak(self): + """ inserts a linebreak in the entity """ + self.dirty = False + self.escpos._raw('\n') + + def style(self,stylestack): + """ apply a style to the entity (only applies to content added after the definition) """ + self.raw(stylestack.to_escpos()) + + def raw(self,raw): + """ puts raw text or escpos command in the entity without affecting the state of the serializer """ + self.escpos._raw(raw) + +class XmlLineSerializer: + """ + This is used to convert a xml tree into a single line, with a left and a right part. + The content is not output to escpos directly, and is intended to be fedback to the + XmlSerializer as the content of a block entity. + """ + def __init__(self, indent=0, tabwidth=2, width=48, ratio=0.5): + self.tabwidth = tabwidth + self.indent = indent + self.width = max(0, width - int(tabwidth*indent)) + self.lwidth = int(self.width*ratio) + self.rwidth = max(0, self.width - self.lwidth) + self.clwidth = 0 + self.crwidth = 0 + self.lbuffer = '' + self.rbuffer = '' + self.left = True + + def _txt(self,txt): + if self.left: + if self.clwidth < self.lwidth: + txt = txt[:max(0, self.lwidth - self.clwidth)] + self.lbuffer += txt + self.clwidth += len(txt) + else: + if self.crwidth < self.rwidth: + txt = txt[:max(0, self.rwidth - self.crwidth)] + self.rbuffer += txt + self.crwidth += len(txt) + + def start_inline(self,stylestack=None): + if (self.left and self.clwidth) or (not self.left and self.crwidth): + self._txt(' ') + + def start_block(self,stylestack=None): + self.start_inline(stylestack) + + def end_entity(self): + pass + + def pre(self,text): + if text: + self._txt(text) + def text(self,text): + if text: + text = utfstr(text) + text = text.strip() + text = re.sub('\s+',' ',text) + if text: + self._txt(text) + + def linebreak(self): + pass + def style(self,stylestack): + pass + def raw(self,raw): + pass + + def start_right(self): + self.left = False + + def get_line(self): + return ' ' * self.indent * self.tabwidth + self.lbuffer + ' ' * (self.width - self.clwidth - self.crwidth) + self.rbuffer + + class Escpos: """ ESC/POS Printer object """ device = None encoding = None img_cache = {} - def _check_image_size(self, size): """ Check and fix the size of the image to 32 bits """ if size % 32 == 0: @@ -48,7 +311,6 @@ class Escpos: else: return (image_border / 2, (image_border / 2) + 1) - def _print_image(self, line, size): """ Print formatted image """ i = 0 @@ -101,7 +363,6 @@ class Escpos: return raw - def _convert_image(self, im): """ Parse image and prepare it to a printable format """ pixels = [] @@ -197,8 +458,7 @@ class Escpos: # Convert the RGB image in printable image self._convert_image(im) - - def barcode(self, code, bc, width, height, pos, font): + def barcode(self, code, bc, width=255, height=2, pos='below', font='a'): """ Print Barcode """ # Align Bar Code() self._raw(TXT_ALIGN_CT) @@ -249,6 +509,193 @@ class Escpos: else: raise exception.BarcodeCodeError() + def receipt(self,xml): + """ + Prints an xml based receipt definition + """ + + def strclean(string): + if not string: + string = '' + string = string.strip() + string = re.sub('\s+',' ',string) + return string + + def format_value(value, decimals=3, width=0, decimals_separator='.', thousands_separator=',', autoint=False, symbol='', position='after'): + decimals = max(0,int(decimals)) + width = max(0,int(width)) + value = float(value) + + if autoint and math.floor(value) == value: + decimals = 0 + if width == 0: + width = '' + + if thousands_separator: + formatstr = "{:"+str(width)+",."+str(decimals)+"f}" + else: + formatstr = "{:"+str(width)+"."+str(decimals)+"f}" + + + ret = formatstr.format(value) + ret = ret.replace(',','COMMA') + ret = ret.replace('.','DOT') + ret = ret.replace('COMMA',thousands_separator) + ret = ret.replace('DOT',decimals_separator) + + if symbol: + if position == 'after': + ret = ret + symbol + else: + ret = symbol + ret + return ret + + def print_elem(stylestack, serializer, elem, indent=0): + + elem_styles = { + 'h1': {'bold': 'on', 'size':'double'}, + 'h2': {'size':'double'}, + 'h3': {'bold': 'on', 'size':'double-height'}, + 'h4': {'size': 'double-height'}, + 'h5': {'bold': 'on'}, + 'em': {'font': 'b'}, + 'b': {'bold': 'on'}, + } + + stylestack.push() + if elem.tag in elem_styles: + stylestack.set(elem_styles[elem.tag]) + stylestack.set(elem.attrib) + + if elem.tag in ('p','div','section','article','receipt','header','footer','li','h1','h2','h3','h4','h5'): + serializer.start_block(stylestack) + serializer.text(elem.text) + for child in elem: + print_elem(stylestack,serializer,child) + serializer.start_inline(stylestack) + serializer.text(child.tail) + serializer.end_entity() + serializer.end_entity() + + elif elem.tag in ('span','em','b','left','right'): + serializer.start_inline(stylestack) + serializer.text(elem.text) + for child in elem: + print_elem(stylestack,serializer,child) + serializer.start_inline(stylestack) + serializer.text(child.tail) + serializer.end_entity() + serializer.end_entity() + + elif elem.tag == 'value': + serializer.start_inline(stylestack) + serializer.pre(format_value( + elem.text, + decimals=stylestack.get('value-decimals'), + width=stylestack.get('value-width'), + decimals_separator=stylestack.get('value-decimals-separator'), + thousands_separator=stylestack.get('value-thousands-separator'), + autoint=(stylestack.get('autoint') == 'on'), + symbol=stylestack.get('value-symbol'), + position=stylestack.get('value-symbol-position') + )) + serializer.end_entity() + + elif elem.tag == 'line': + width = stylestack.get('width') + if stylestack.get('size') in ('double', 'double-width'): + width = width / 2 + + lineserializer = XmlLineSerializer(stylestack.get('indent')+indent,stylestack.get('tabwidth'),width,stylestack.get('line-ratio')) + serializer.start_block(stylestack) + for child in elem: + if child.tag == 'left': + print_elem(stylestack,lineserializer,child,indent=indent) + elif child.tag == 'right': + lineserializer.start_right() + print_elem(stylestack,lineserializer,child,indent=indent) + serializer.pre(lineserializer.get_line()) + serializer.end_entity() + + elif elem.tag == 'ul': + serializer.start_block(stylestack) + bullet = stylestack.get('bullet') + for child in elem: + if child.tag == 'li': + serializer.style(stylestack) + serializer.raw(' ' * indent * stylestack.get('tabwidth') + bullet) + print_elem(stylestack,serializer,child,indent=indent+1) + serializer.end_entity() + + elif elem.tag == 'ol': + cwidth = len(str(len(elem))) + 2 + i = 1 + serializer.start_block(stylestack) + for child in elem: + if child.tag == 'li': + serializer.style(stylestack) + serializer.raw(' ' * indent * stylestack.get('tabwidth') + ' ' + (str(i)+')').ljust(cwidth)) + i = i + 1 + print_elem(stylestack,serializer,child,indent=indent+1) + serializer.end_entity() + + elif elem.tag == 'pre': + serializer.start_block(stylestack) + serializer.pre(elem.text) + serializer.end_entity() + + elif elem.tag == 'hr': + width = stylestack.get('width') + if stylestack.get('size') in ('double', 'double-width'): + width = width / 2 + serializer.start_block(stylestack) + serializer.text('-'*width) + serializer.end_entity() + + elif elem.tag == 'br': + serializer.linebreak() + + elif elem.tag == 'img': + if 'src' in elem.attrib and 'data:' in elem.attrib['src']: + self.print_base64_image(elem.attrib['src']) + + elif elem.tag == 'barcode' and 'encoding' in elem.attrib: + serializer.start_block(stylestack) + self.barcode(strclean(elem.text),elem.attrib['encoding']) + serializer.end_entity() + + elif elem.tag == 'cut': + self.cut() + elif elem.tag == 'partialcut': + self.cut(mode='part') + elif elem.tag == 'cashdraw': + self.cashdraw(2) + self.cashdraw(5) + + stylestack.pop() + + try: + stylestack = StyleStack() + serializer = XmlSerializer(self) + root = ET.fromstring(xml) + + self._raw(stylestack.to_escpos()) + + print_elem(stylestack,serializer,root) + + if 'open-cashdrawer' in root.attrib and root.attrib['open-cashdrawer'] == 'true': + self.cashdraw(2) + self.cashdraw(5) + if not 'cut' in root.attrib or root.attrib['cut'] == 'true' : + self.cut() + + except Exception as e: + errmsg = str(e)+'\n'+'-'*48+'\n'+traceback.format_exc() + '-'*48+'\n' + self.text(errmsg) + self.cut() + + raise e + def text(self,txt): """ Print Utf8 encoded alpha-numeric text """ if not txt: diff --git a/addons/document_ftp/wizard/__init__.py b/addons/hw_posbox_homepage/__init__.py similarity index 96% rename from addons/document_ftp/wizard/__init__.py rename to addons/hw_posbox_homepage/__init__.py index 40997cc6b90..a208bc1c551 100644 --- a/addons/document_ftp/wizard/__init__.py +++ b/addons/hw_posbox_homepage/__init__.py @@ -18,8 +18,8 @@ # along with this program. If not, see . # ############################################################################## -import ftp_browse -import ftp_configuration +import controllers # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/document_webdav/__init__.py b/addons/hw_posbox_homepage/__openerp__.py similarity index 64% rename from addons/document_webdav/__init__.py rename to addons/hw_posbox_homepage/__openerp__.py index 486b38e681c..7c0cac0f370 100644 --- a/addons/document_webdav/__init__.py +++ b/addons/hw_posbox_homepage/__openerp__.py @@ -18,10 +18,30 @@ # along with this program. If not, see . # ############################################################################## -import logging -import webdav -import webdav_server -import document_webdav + +{ + 'name': 'PosBox Homepage', + 'version': '1.0', + 'category': 'Hardware Drivers', + 'sequence': 6, + 'summary': 'A homepage for the PosBox', + 'description': """ +PosBox Homepage +=============== + +This module overrides openerp web interface to display a simple +Homepage that explains what's the posbox and show the status, +and where to find documentation. + +If you activate this module, you won't be able to access the +regular openerp interface anymore. + +""", + 'author': 'OpenERP SA', + 'depends': ['hw_proxy'], + 'installable': False, + 'auto_install': False, +} # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hw_posbox_homepage/controllers/__init__.py b/addons/hw_posbox_homepage/controllers/__init__.py new file mode 100644 index 00000000000..b5f0bcc9ec6 --- /dev/null +++ b/addons/hw_posbox_homepage/controllers/__init__.py @@ -0,0 +1,3 @@ +import main +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/hw_posbox_homepage/controllers/main.py b/addons/hw_posbox_homepage/controllers/main.py new file mode 100644 index 00000000000..bab94be060c --- /dev/null +++ b/addons/hw_posbox_homepage/controllers/main.py @@ -0,0 +1,63 @@ +# -*- coding: utf-8 -*- +import logging +import os +import time +from os import listdir + +import openerp +from openerp import http +from openerp.http import request +from openerp.tools.translate import _ + +_logger = logging.getLogger(__name__) + +index_template = """ + + + + OpenERP's PosBox + + + +

Your PosBox is up and running

+

+ The PosBox is an hardware adapter that allows you to use + receipt printers and barcode scanners with OpenERP's Point of + Sale, version 8.0 or later. You can start an online free trial, + or download and install it yourself. +

+

+ For more information on how to setup the Point of Sale with + the PosBox, please refer to the manual +

+

+ To see the status of the connected hardware, please refer + to the hardware status page +

+

+ The PosBox software installed on this posbox is version 6, + the posbox version number is independent from OpenERP. You can upgrade + the software on the upgrade page +

+

For any other question, please contact the OpenERP support at support@openerp.com +

+ + + +""" + + +class PosboxHomepage(openerp.addons.web.controllers.main.Home): + @http.route('/', type='http', auth='none', website=True) + def index(self): + #return request.render('hw_posbox_homepage.index',mimetype='text/html') + return index_template + diff --git a/addons/document_ftp/__init__.py b/addons/hw_posbox_upgrade/__init__.py similarity index 92% rename from addons/document_ftp/__init__.py rename to addons/hw_posbox_upgrade/__init__.py index e7e4a647563..a208bc1c551 100644 --- a/addons/document_ftp/__init__.py +++ b/addons/hw_posbox_upgrade/__init__.py @@ -19,10 +19,7 @@ # ############################################################################## -import ftpserver -import wizard -import res_config - -post_load = ftpserver.start_server +import controllers # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/document_ftp/res_config.py b/addons/hw_posbox_upgrade/__openerp__.py similarity index 56% rename from addons/document_ftp/res_config.py rename to addons/hw_posbox_upgrade/__openerp__.py index 93b3aa69974..68f81c2079b 100644 --- a/addons/document_ftp/res_config.py +++ b/addons/hw_posbox_upgrade/__openerp__.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- ############################################################################## # -# OpenERP, Open Source Business Applications -# Copyright (C) 2004-2012 OpenERP S.A. (). +# OpenERP, Open Source Management Solution +# Copyright (C) 2004-2010 Tiny SPRL (). # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU Affero General Public License as @@ -19,19 +19,28 @@ # ############################################################################## -from openerp.osv import fields, osv -from openerp.tools import config -class documnet_ftp_setting(osv.osv_memory): - _name = 'knowledge.config.settings' - _inherit = 'knowledge.config.settings' - _columns = { - 'document_ftp_url': fields.char('Browse Documents', size=128, - help ="""Click the url to browse the documents""", readonly=True), - } +{ + 'name': 'PosBox Software Upgrader', + 'version': '1.0', + 'category': 'Hardware Drivers', + 'sequence': 6, + 'summary': 'Allows to remotely upgrade the PosBox software', + 'description': """ +PosBox Software Upgrader +======================== - def get_default_ftp_config(self, cr, uid, fields, context=None): - action = self.pool.get('ir.model.data').get_object(cr, uid, 'document_ftp', 'action_document_browse') - return {'document_ftp_url': action.url} +This module allows to remotely upgrade the PosBox software to a +new version. This module is specific to the PosBox setup and environment +and should not be installed on regular openerp servers. + +""", + 'author': 'OpenERP SA', + 'depends': ['hw_proxy'], + 'test': [ + ], + 'installable': False, + 'auto_install': False, +} # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/hw_posbox_upgrade/controllers/__init__.py b/addons/hw_posbox_upgrade/controllers/__init__.py new file mode 100644 index 00000000000..b5f0bcc9ec6 --- /dev/null +++ b/addons/hw_posbox_upgrade/controllers/__init__.py @@ -0,0 +1,3 @@ +import main +# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: + diff --git a/addons/hw_posbox_upgrade/controllers/main.py b/addons/hw_posbox_upgrade/controllers/main.py new file mode 100644 index 00000000000..b741a7a9102 --- /dev/null +++ b/addons/hw_posbox_upgrade/controllers/main.py @@ -0,0 +1,126 @@ +# -*- coding: utf-8 -*- +import logging +import os +import time + +import openerp +import openerp.addons.hw_proxy.controllers.main as hw_proxy +import threading +from openerp import http +from openerp.http import request +from openerp.tools.translate import _ + +_logger = logging.getLogger(__name__) + +upgrade_template = """ + + + + OpenERP's PosBox - Software Upgrade + + + + + +

PosBox Software Upgrade

+

+ This tool will help you perform an upgrade of the PosBox's software. + However the preferred method to upgrade the posbox is to flash the sd-card with + the latest image. The upgrade + procedure is explained into to the PosBox manual +

+

+ To upgrade the posbox, click on the upgrade button. The upgrade will take a few minutes. Do not reboot the PosBox during the upgrade. +

+
+ Upgrade +
+ + + +""" + +class PosboxUpgrader(hw_proxy.Proxy): + def __init__(self): + super(PosboxUpgrader,self).__init__() + self.upgrading = threading.Lock() + self.last_upgrade = 0 + + @http.route('/hw_proxy/upgrade', type='http', auth='none', ) + def upgrade(self): + return upgrade_template + + @http.route('/hw_proxy/perform_upgrade', type='http', auth='none') + def perform_upgrade(self): + self.upgrading.acquire() + if time.time() - self.last_upgrade < 30: + self.upgrading.release() + return 'UPTODATE' + else: + os.system('/bin/bash /home/pi/openerp/update.sh') + self.last_upgrade = time.time() + self.upgrading.release() + return 'SUCCESS' + + @http.route('/hw_proxy/perform_restart', type='http', auth='none') + def perform_restart(self): + self.upgrading.acquire() + if time.time() - self.last_upgrade < 30: + self.upgrading.release() + return 'RESTARTED' + else: + os.system('/bin/bash /home/pi/openerp/restart.sh') + self.last_upgrade = time.time() + self.upgrading.release() + return 'SUCCESS' + + diff --git a/addons/hw_proxy/controllers/main.py b/addons/hw_proxy/controllers/main.py index 5293abd1f25..9e94e4817a4 100644 --- a/addons/hw_proxy/controllers/main.py +++ b/addons/hw_proxy/controllers/main.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import logging +import commands import simplejson import os import os.path @@ -43,7 +44,32 @@ class Proxy(http.Controller): @http.route('/hw_proxy/status', type='http', auth='none', cors='*') def status_http(self): - resp = '\n\n

Hardware Proxy Status

\n' + resp = """ + + + + OpenERP's PosBox + + + +

Hardware Status

+

The list of enabled drivers and their status

+""" statuses = self.get_status() for driver in statuses: @@ -56,12 +82,22 @@ class Proxy(http.Controller): else: color = 'red' - resp += "

"+driver+' : '+status['status']+"

\n" + resp += "

"+driver+' : '+status['status']+"

\n" resp += "
    \n" for msg in status['messages']: resp += '
  • '+msg+'
  • \n' resp += "
\n" - resp += "\n\n\n\n" + resp += """ +

Connected Devices

+

The list of connected USB devices as seen by the posbox

+ """ + devices = commands.getoutput("lsusb").split('\n') + resp += "
\n" + for device in devices: + device_name = device[device.find('ID')+2:] + resp+= "
"+device_name+"
\n" + resp += "
\n" + resp += "\n\n\n" return request.make_response(resp,{ 'Cache-Control': 'no-cache', diff --git a/addons/hw_proxy/static/doc/manual.pdf b/addons/hw_proxy/static/doc/manual.pdf new file mode 100644 index 00000000000..5a55c56654d Binary files /dev/null and b/addons/hw_proxy/static/doc/manual.pdf differ diff --git a/addons/knowledge/res_config.py b/addons/knowledge/res_config.py index 5a3452836a5..118532db750 100644 --- a/addons/knowledge/res_config.py +++ b/addons/knowledge/res_config.py @@ -26,15 +26,8 @@ class knowledge_config_settings(osv.osv_memory): _inherit = 'res.config.settings' _columns = { 'module_document': fields.boolean('Manage documents', - help='This is a complete document management system, with: user authentication, ' - 'full document search (but pptx and docx are not supported), and a document dashboard.\n' + help='Document indexation, full text search of attachements.\n' '-This installs the module document.'), - 'module_document_ftp': fields.boolean('Share repositories (FTP)', - help='Access your documents in OpenERP through an FTP interface.\n' - '-This installs the module document_ftp.'), - 'module_document_webdav': fields.boolean('Share repositories (WebDAV)', - help='Access your documents in OpenERP through WebDAV.\n' - '-This installs the module document_webdav.'), } # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/knowledge/res_config_view.xml b/addons/knowledge/res_config_view.xml index cbf9295b8ac..5a526f04b42 100644 --- a/addons/knowledge/res_config_view.xml +++ b/addons/knowledge/res_config_view.xml @@ -20,14 +20,6 @@