summaryrefslogtreecommitdiff
path: root/addons/document/document.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/document/document.py')
-rw-r--r--addons/document/document.py64
1 files changed, 52 insertions, 12 deletions
diff --git a/addons/document/document.py b/addons/document/document.py
index 585031e1fc5..1a66145a9d8 100644
--- a/addons/document/document.py
+++ b/addons/document/document.py
@@ -66,8 +66,10 @@ def random_name():
# root: if we are at the first directory of a ressource
#
INVALID_CHARS={'*':str(hash('*')), '|':str(hash('|')) , "\\":str(hash("\\")), '/':'__', ':':str(hash(':')), '"':str(hash('"')), '<':str(hash('<')) , '>':str(hash('>')) , '?':str(hash('?'))}
+
+
class node_class(object):
- def __init__(self, cr, uid, path,object,object2=False, context={}, content=False, type='collection', root=False):
+ def __init__(self, cr, uid, path, object, object2=False, context={}, content=False, type='collection', root=False):
self.cr = cr
self.uid = uid
self.path = path
@@ -92,7 +94,7 @@ class node_class(object):
where.append( ('parent_id','=',self.object.id) )
where.append( ('res_id','=',False) )
if nodename:
- where.append( (fobj._rec_name,'like',nodename) )
+ where.append( (fobj._rec_name,'=',nodename) )
for content in self.object.content_ids:
if self.object2 or not content.include_name:
if content.include_name:
@@ -135,7 +137,7 @@ class node_class(object):
where = []
if nodename:
nodename = self.get_translation(nodename, self.context['lang'])
- where.append(('name','like',nodename))
+ where.append(('name','=',nodename))
if (self.object and self.object.type=='directory') or not self.object2:
where.append(('parent_id','=',self.object and self.object.id or False))
else:
@@ -161,7 +163,7 @@ class node_class(object):
fobj = pool.get('ir.attachment')
vargs = [('parent_id','=',False),('res_id','=',False)]
if nodename:
- vargs.append(('name','like',nodename))
+ vargs.append(('name','=',nodename))
file_ids=fobj.search(self.cr,self.uid,vargs)
res = fobj.browse(self.cr, self.uid, file_ids, context=self.context)
@@ -171,9 +173,9 @@ class node_class(object):
pool = pooler.get_pool(self.cr.dbname)
obj = pool.get(self.object.ressource_type_id.model)
if len(obj.fields_get(self.cr, self.uid, ['dirname'])):
- _dirname_field = 'dirname'
+ _dirname_field = 'dirname'
else:
- _dirname_field = 'name'
+ _dirname_field = 'name'
name_for = obj._name.split('.')[-1]
if nodename and nodename.find(name_for) == 0 :
@@ -186,7 +188,7 @@ class node_class(object):
if nodename.find(INVALID_CHARS[invalid]) :
nodename=nodename.replace(INVALID_CHARS[invalid],invalid)
nodename = self.get_translation(nodename, self.context['lang'])
- where.append((_dirname_field,'like',nodename))
+ where.append((_dirname_field,'=',nodename))
if self.object.ressource_tree:
if obj._parent_name in obj.fields_get(self.cr,self.uid):
@@ -205,14 +207,16 @@ class node_class(object):
ids = obj.search(self.cr, self.uid, where)
res = obj.browse(self.cr, self.uid, ids,self.context)
- for r in res:
+ for r in res:
if len(obj.fields_get(self.cr, self.uid, [_dirname_field])):
r.name = eval('r.'+_dirname_field)
else:
- r.name = name_for+'%d'%r.id
+ r.name = False
+ if not r.name:
+ r.name = name_for + '%d'%r.id
for invalid in INVALID_CHARS:
if r.name.find(invalid) :
- r.name=r.name.replace(invalid,INVALID_CHARS[invalid])
+ r.name = r.name.replace(invalid,INVALID_CHARS[invalid])
result2 = map(lambda x: node_class(self.cr, self.uid, self.path+'/'+x.name.replace('/','__'), self.object, x, context=self.context, root=x.id), res)
if result2:
if self.object.ressource_tree:
@@ -323,7 +327,7 @@ class document_directory(osv.osv):
where = []
if nodename:
nodename = self.get_translation(nodename, self.context['lang'])
- where.append(('name','like',nodename))
+ where.append(('name','=',nodename))
if object:
where.append(('parent_id','=',object.id))
ids = self.search(cr, uid, where, context)
@@ -718,9 +722,45 @@ class document_configuration_wizard(osv.osv_memory):
'host': fields.char('Server Address', size=64, help="Put here the server address or IP. " \
"Keep localhost if you don't know what to write.", required=True)
}
+
+ def detect_ip_addr(self, cr, uid, context=None):
+ def _detect_ip_addr(self, cr, uid, context=None):
+ from array import array
+ import socket
+ from struct import pack, unpack
+
+ try:
+ import fcntl
+ except ImportError:
+ fcntl = None
+
+ if not fcntl: # not UNIX:
+ host = socket.gethostname()
+ ip_addr = socket.gethostbyname(host)
+ else: # UNIX:
+ # get all interfaces:
+ nbytes = 128 * 32
+ s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ names = array('B', '\0' * nbytes)
+ outbytes = unpack('iL', fcntl.ioctl( s.fileno(), 0x8912, pack('iL', nbytes, names.buffer_info()[0])))[0]
+ namestr = names.tostring()
+ ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)]
+
+ for ifname in [iface for iface in ifaces if iface != 'lo']:
+ ip_addr = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, pack('256s', ifname[:15]))[20:24])
+ break
+ return ip_addr
+
+ try:
+ ip_addr = _detect_ip_addr(self, cr, uid, context)
+ except:
+ ip_addr = 'localhost'
+ return ip_addr
+
_defaults = {
- 'host': lambda *args: 'localhost'
+ 'host': detect_ip_addr,
}
+
def action_cancel(self,cr,uid,ids,conect=None):
return {
'view_type': 'form',