def getContent(req, ids): user = users.getUserFromRequest(req) access = AccessData(user=user) language = lang(req) if "action" in req.params: state = 'ok' if req.params.get('action') == "removefiles": basenode = tree.getNode(req.params.get('id')) for f in basenode.getFiles(): try: os.remove(f.retrieveFile()) pass except: state = "error" for f in basenode.getFiles(): basenode.removeFile(f) req.write(json.dumps({'state': state})) return None if req.params.get('action') == "buildnode": # create nodes basenode = tree.getNode(req.params.get('id')) newnodes = [] errornodes = [] basenodefiles_processed = [] if req.params.get('uploader', '') == 'plupload': filename2scheme = {} for k in req.params: if k.startswith("scheme_"): filename2scheme[ k.replace('scheme_', '', 1)] = req.params.get(k) for f in basenode.getFiles(): filename = f.getName() if filename in filename2scheme: _m = getMimeType(filename) if _m[1] == "bibtex": # bibtex import handler try: nn = importBibTeX(f.retrieveFile(), basenode) newnodes.append(nn.id) basenodefiles_processed.append(f) except ValueError, e: errornodes.append((filename, str(e))) logger.debug("filename: %r, mimetype: %r" % (filename, _m)) logger.debug("__name__=%r, func=%r; _m=%r, _m[1]=%r" % (__name__, funcname(), _m, _m[1])) node_type = '%s/%s' % (_m[1], filename2scheme[filename]) n = tree.Node(filename, type=node_type) basenode.addChild(n) n.set("creator", user.getName()) n.set("creationtime", str(time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime(time.time())))) n.addFile(f) n.event_files_changed() clearFromCache(n) newnodes.append(n.id) basenodefiles_processed.append(f) basenode.removeFile(f) msg_t = (user.getName(), n.id, n.name, n.type,filename, basenode.id, basenode.name, basenode.type) msg = "%s created new node id=%r (name=%r, type=%r) by uploading file %r, node is child of base node id=%r (name=%r, type=%r)" % msg_t logger.info(msg) logging.getLogger('usertracing').info(msg) else: for filename in req.params.get('files').split('|'): _m = getMimeType(filename) logger.debug("... in %s.%s: getMimeType(filename=%r)=%r" % (__name__, funcname(), filename, _m)) fs = basenode.getFiles() logger.debug("... in %s.%s: basenode.id=%r, basenode_files: %r" % (__name__, funcname(), basenode.id, [(x.getName(), x.retrieveFile()) for x in fs])) if _m[1] == req.params.get('type') or req.params.get('type') == 'file': for f in basenode.getFiles(): # ambiguity here ? if f.retrieveFile().endswith(filename): # bibtex import handler if _m[1] == "bibtex" and not req.params.get('type') == 'file': try: nn = importBibTeX(f.retrieveFile(), basenode) newnodes.append(nn.id) basenodefiles_processed.append(f) except ValueError, e: errornodes.append((filename, str(e))) else: logger.debug("creating new node: filename: %r" % filename) logger.debug("files at basenode: %r" % [(x.getName(), x.retrieveFile()) for x in basenode.getFiles()]) n = tree.Node(filename, type='%s/%s' % (req.params.get('type'), req.params.get('value'))) basenode.addChild(n) n.set("creator", user.getName()) n.set("creationtime", str(time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime(time.time())))) # clones to a file with random name cloned_file = f.clone(None) n.addFile(cloned_file) if hasattr(n, 'event_files_changed'): n.event_files_changed() clearFromCache(n) newnodes.append(n.id) basenodefiles_processed.append(f) msg_t = (user.getName(), n.id, n.name, n.type, filename, basenode.id, basenode.name, basenode.type) msg = "%s created new node id=%r (name=%r, type=%r) by uploading file %r, node is child of base node id=%r (name=%r, type=%r)" % msg_t logger.info(msg) logging.getLogger('usertracing').info(msg) break # filename may not be unique new_tree_labels = [{'id': basenode.id, 'label': getTreeLabel(basenode, lang=language)}] for f in basenodefiles_processed: basenode.removeFile(f) f_path = f.retrieveFile() if os.path.exists(f_path): logger.debug("%s going to remove file %r from disk" % (user.getName(), f_path)) os.remove(f_path) mime = getMimeType(filename) scheme_type = {mime[1]: []} for scheme in getSchemes(req): if mime[1] in scheme.getDatatypes(): scheme_type[mime[1]].append(scheme) # break # standard file content = req.getTAL('web/edit/modules/upload.html', {'files': [filename], 'schemes': scheme_type}, macro="uploadfileok") res = json.dumps({'state': state, 'newnodes': newnodes, 'errornodes': errornodes, 'new_tree_labels': new_tree_labels, 'ret': content}) req.write(res) return None
for scheme in getSchemesforType(access, req.params.get('contenttype')): ret.append({'id': scheme.getName(), 'name': scheme.getLongName()}) req.write(json.dumps({'schemes': ret})) return None # create node with given type/schema if req.params.get('action') == "createobject": schema = req.params.get('schema') ctype = req.params.get('contenttype') n = tree.Node('', type=ctype + '/' + schema) basenode = tree.getNode(req.params.get('id')) basenode.addChild(n) n.set("creator", user.getName()) n.set("creationtime", str(time.strftime('%Y-%m-%dT%H:%M:%S', time.localtime(time.time())))) clearFromCache(n) msg_t = (user.getName(), n.id, n.name, n.type, basenode.id, basenode.name, basenode.type) msg = "%s created new node %r (%r, %r) using upload metadata form, node is child of base node %r (%r, %r)" % msg_t logger.info(msg) req.write(json.dumps({'newid': n.id, 'id': req.params.get('id')})) return None # create node using given identifier (doi, ...) if req.params.get('action') == "obj_from_identifier": identifier_importer = req.params.get('identifier_importer') identifier = req.params.get('identifier') msg = "... in %s.%s: going to create new node without file from identifier (%r)" % (__name__, funcname(), identifier) logger.debug(msg) if identifier_importer in identifier_importers: