def ajaxgateway(self, req, form): """ """ argd = wash_urlargd( form, {"projectid": (str, ""), "publicationid": (str, ""), "action": (str, ""), "current_field": (str, "")} ) # Get parameters action = argd["action"] publicationid = argd["publicationid"] projectid = argd["projectid"] # Check if action is supported assert action in ("save", "verify_field", "submit", "unlinkproject", "linkproject") # JSON return dictionary out = { "errors": {}, "warnings": {}, "addclasses": {}, "delclasses": {}, "substitutions": {}, "appends": {}, "hiddens": [], "showns": [], "action": action, } if action == "verify_field": current_field = argd["current_field"] assert current_field metadata = wash_form(form, publicationid) out["errors"], out["warnings"] = OpenAIREPublication.static_check_metadata( metadata, publicationid, check_only_field=current_field, ln=argd["ln"] ) else: user_info = collect_user_info(req) auth_code, auth_message = acc_authorize_action(user_info, "submit", doctype="OpenAIRE") assert auth_code == 0 uid = user_info["uid"] publication = OpenAIREPublication(uid, publicationid, ln=argd["ln"]) if action == "unlinkproject": publication.unlink_project(projectid) out["substitutions"]["#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out["warnings"] = ( simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid), ) elif action == "linkproject": publication.link_project(projectid) out["substitutions"]["#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out["warnings"] = ( simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid), ) else: publication.merge_form(form) publication.check_metadata() publication.check_projects() out["errors"], out["warnings"] = ( simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid), ) if "".join( out["errors"].values() ).strip(): # FIXME bad hack, we need a cleaner way to discover if there are errors out["addclasses"]["#status_%s" % publicationid] = "error" out["delclasses"]["#status_%s" % publicationid] = "warning ok empty" elif "".join(out["warnings"].values()).strip(): out["addclasses"]["#status_%s" % publicationid] = "warning" out["delclasses"]["#status_%s" % publicationid] = "error ok empty" else: out["addclasses"]["#status_%s" % publicationid] = "ok" out["delclasses"]["#status_%s" % publicationid] = "warning error empty" if action == "save": out["substitutions"][ "#publication_information_%s" % publicationid ] = publication.get_publication_information() elif action == "submit": if not "".join(out["errors"].values()).strip(): publication.upload_record() out["appends"]["#submitted_publications"] = publication.get_publication_preview() out["showns"].append("#submitted_publications") out["hiddens"].append("#header_row_%s" % publicationid) out["hiddens"].append("#body_row_%s" % publicationid) req.content_type = "application/json" return json.dumps(out)
def ajaxgateway(self, req, form): """ """ argd = wash_urlargd(form, {'projectid': (str, ''), 'publicationid': ( str, ''), 'action': (str, ''), 'current_field': (str, '')}) # Get parameters action = argd['action'] publicationid = argd['publicationid'] projectid = argd['projectid'] # Check if action is supported assert(action in ( 'save', 'verify_field', 'submit', 'unlinkproject', 'linkproject')) # JSON return dictionary out = { 'errors': {}, 'warnings': {}, 'addclasses': {}, 'delclasses': {}, 'substitutions': {}, 'appends': {}, 'hiddens': [], 'showns': [], 'action': action, } if action == 'verify_field': current_field = argd['current_field'] assert(current_field) metadata = wash_form(form, publicationid) out["errors"], out["warnings"] = OpenAIREPublication.static_check_metadata(metadata, publicationid, check_only_field=current_field, ln=argd['ln']) else: user_info = collect_user_info(req) auth_code, auth_message = acc_authorize_action( user_info, 'submit', doctype='OpenAIRE') assert(auth_code == 0) uid = user_info['uid'] publication = OpenAIREPublication( uid, publicationid, ln=argd['ln']) if action == 'unlinkproject': publication.unlink_project(projectid) out["substitutions"]["#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out["warnings"] = simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid) elif action == 'linkproject': publication.link_project(projectid) out["substitutions"]["#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out["warnings"] = simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid) else: publication.merge_form(form) publication.check_metadata() publication.check_projects() out["errors"], out["warnings"] = simple_metadata2namespaced_metadata(publication.errors, publicationid), simple_metadata2namespaced_metadata(publication.warnings, publicationid) if "".join(out["errors"].values()).strip(): # FIXME bad hack, we need a cleaner way to discover if there are errors out['addclasses']['#status_%s' % publicationid] = 'error' out['delclasses']['#status_%s' % publicationid] = 'warning ok empty' elif "".join(out["warnings"].values()).strip(): out['addclasses']['#status_%s' % publicationid] = 'warning' out['delclasses']['#status_%s' % publicationid] = 'error ok empty' else: out['addclasses']['#status_%s' % publicationid] = 'ok' out['delclasses']['#status_%s' % publicationid] = 'warning error empty' if action == 'save': out["substitutions"]['#publication_information_%s' % publicationid] = publication.get_publication_information() elif action == 'submit': if not "".join(out["errors"].values()).strip(): publication.upload_record() out["appends"]['#submitted_publications'] = publication.get_publication_preview() out["showns"].append('#submitted_publications') out["hiddens"].append('#header_row_%s' % publicationid) out["hiddens"].append('#body_row_%s' % publicationid) req.content_type = 'application/json' return json.dumps(out)
def edit(pub_id=u'', action=u'edit'): """ Edit an upload """ uid = current_user.get_id() if action not in ['edit', 'save', 'delete', 'reserve-doi']: abort(404) try: pub = OpenAIREPublication(uid, publicationid=pub_id) title = pub.metadata.get('title', 'Untitled') or 'Untitled' editable = is_editable(pub) except ValueError: abort(404) # All POST requests change the publication, and are not allowed if the # publication is not editable anymore. if request.method == 'POST': if not editable: flash("You cannot edit an already submitted upload. Please contact %s if you would like to make changes!" % CFG_SITE_SUPPORT_EMAIL) return redirect(url_for('.edit', pub_id=pub.publicationid)) # # Action handling # ctx = {} if action == 'reserve-doi': # # Reserve DOI action (AjAX) # if request.method == 'POST': doi = pub.create_doi() return json.dumps({'doi': doi}) else: abort(405) elif action == 'delete': # # Delete action # if not editable: flash("You cannot delete an already submitted upload. Please contact %s if you would like to have it removed!" % CFG_SITE_SUPPORT_EMAIL) return redirect(url_for('.edit', pub_id=pub.publicationid)) pub.delete() flash("Upload '%s' was deleted." % title, 'success') return redirect(url_for('.index')) elif action == 'edit': # # Edit action # upload_url = url_for('deposit.upload', pub_id=pub.publicationid) dropbox_upload_url = url_for('deposit.dropbox_upload', pub_id=pub.publicationid) ctx = { 'pub': pub, 'recid': pub.metadata.get('__recid__', None), 'title': title, 'is_editable': editable, 'upload_url': upload_url, 'dropbox_upload_url': dropbox_upload_url, } if request.method == 'POST': form = DepositionForm(request.values, crsf_enabled=False) mapper = DepositionFormMapper(pub) pub = mapper.map(form) form._pub = pub if form.validate(): pub.save() pub.upload_record() flash("Upload was successfully submitted - it may take up 5 minutes before it has been fully integrated into %s." % CFG_SITE_NAME, category='success') return redirect(url_for('.index')) else: pub.save() ctx['form'] = form ctx['form_message'] = "The form was saved, but there were errors. Please see below." elif editable: mapper = PublicationMapper() form = DepositionForm(mapper.map(pub), crsf_enabled=False) ctx['form'] = form else: ctx['record_hd'] = format_record(recID=pub.recid, xml_record=pub.marcxml, ln=g.ln, of='hd') ctx['record_hdinfo'] = format_record(recID=pub.recid, xml_record=pub.marcxml, ln=g.ln, of='HDINFO') elif action == 'save': # # Save action (AjAX) # if request.method == 'POST': form = DepositionForm(request.values, crsf_enabled=False) mapper = DepositionFormMapper(pub) pub = mapper.map(form) form._pub = pub if form.validate(): pub.save() return json.dumps({'status': 'success', 'form': 'Successfully saved.'}) else: pub.save() errors = dict([(x, '') for x in form._fields.keys()]) errors.update(form.errors) return json.dumps({ 'status': 'warning', 'form': 'The form was saved, but there were errors. Please see below.', 'fields': errors, }) else: abort(405) return render_template( "openaire_edit.html", myresearch=get_exisiting_publications_for_uid(current_user.get_id()), **ctx )
def ajaxgateway(self, req, form): """ """ argd = wash_urlargd( form, { 'projectid': (str, ''), 'publicationid': (str, ''), 'action': (str, ''), 'current_field': (str, '') }) # Get parameters action = argd['action'] publicationid = argd['publicationid'] projectid = argd['projectid'] # Check if action is supported assert (action in ('save', 'verify_field', 'submit', 'unlinkproject', 'linkproject')) # JSON return dictionary out = { 'errors': {}, 'warnings': {}, 'addclasses': {}, 'delclasses': {}, 'substitutions': {}, 'appends': {}, 'hiddens': [], 'showns': [], 'action': action, } if action == 'verify_field': current_field = argd['current_field'] assert (current_field) metadata = wash_form(form, publicationid) out["errors"], out[ "warnings"] = OpenAIREPublication.static_check_metadata( metadata, publicationid, check_only_field=current_field, ln=argd['ln']) else: user_info = collect_user_info(req) auth_code, auth_message = acc_authorize_action(user_info, 'submit', doctype='OpenAIRE') assert (auth_code == 0) uid = user_info['uid'] publication = OpenAIREPublication(uid, publicationid, ln=argd['ln']) if action == 'unlinkproject': publication.unlink_project(projectid) out["substitutions"][ "#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out[ "warnings"] = simple_metadata2namespaced_metadata( publication.errors, publicationid), simple_metadata2namespaced_metadata( publication.warnings, publicationid) elif action == 'linkproject': publication.link_project(projectid) out["substitutions"][ "#projectsbox_%s" % publicationid] = publication.get_projects_information() publication.check_projects() out["errors"], out[ "warnings"] = simple_metadata2namespaced_metadata( publication.errors, publicationid), simple_metadata2namespaced_metadata( publication.warnings, publicationid) else: publication.merge_form(form) publication.check_metadata() publication.check_projects() out["errors"], out[ "warnings"] = simple_metadata2namespaced_metadata( publication.errors, publicationid), simple_metadata2namespaced_metadata( publication.warnings, publicationid) if "".join(out["errors"].values()).strip( ): # FIXME bad hack, we need a cleaner way to discover if there are errors out['addclasses']['#status_%s' % publicationid] = 'error' out['delclasses']['#status_%s' % publicationid] = 'warning ok empty' elif "".join(out["warnings"].values()).strip(): out['addclasses']['#status_%s' % publicationid] = 'warning' out['delclasses']['#status_%s' % publicationid] = 'error ok empty' else: out['addclasses']['#status_%s' % publicationid] = 'ok' out['delclasses']['#status_%s' % publicationid] = 'warning error empty' if action == 'save': out["substitutions"][ '#publication_information_%s' % publicationid] = publication.get_publication_information( ) elif action == 'submit': if not "".join(out["errors"].values()).strip(): publication.upload_record() out["appends"][ '#submitted_publications'] = publication.get_publication_preview( ) out["showns"].append('#submitted_publications') out["hiddens"].append('#header_row_%s' % publicationid) out["hiddens"].append('#body_row_%s' % publicationid) req.content_type = 'application/json' return json.dumps(out)
def edit(pub_id=u'', action=u'edit'): """ Edit an upload """ uid = current_user.get_id() if action not in ['edit', 'save', 'delete', 'reserve-doi']: abort(404) try: pub = OpenAIREPublication(uid, publicationid=pub_id) title = pub.metadata.get('title', 'Untitled') or 'Untitled' editable = is_editable(pub) except ValueError: abort(404) # All POST requests change the publication, and are not allowed if the # publication is not editable anymore. if request.method == 'POST': if not editable: flash( "You cannot edit an already submitted upload. Please contact %s if you would like to make changes!" % CFG_SITE_SUPPORT_EMAIL) return redirect(url_for('.edit', pub_id=pub.publicationid)) # # Action handling # ctx = {} if action == 'reserve-doi': # # Reserve DOI action (AjAX) # if request.method == 'POST': doi = pub.create_doi() return json.dumps({'doi': doi}) else: abort(405) elif action == 'delete': # # Delete action # if not editable: flash( "You cannot delete an already submitted upload. Please contact %s if you would like to have it removed!" % CFG_SITE_SUPPORT_EMAIL) return redirect(url_for('.edit', pub_id=pub.publicationid)) pub.delete() flash("Upload '%s' was deleted." % title, 'success') return redirect(url_for('.index')) elif action == 'edit': # # Edit action # upload_url = url_for('deposit.upload', pub_id=pub.publicationid) dropbox_upload_url = url_for('deposit.dropbox_upload', pub_id=pub.publicationid) ctx = { 'pub': pub, 'recid': pub.metadata.get('__recid__', None), 'title': title, 'is_editable': editable, 'upload_url': upload_url, 'dropbox_upload_url': dropbox_upload_url, } if request.method == 'POST': form = DepositionForm(request.values, crsf_enabled=False) mapper = DepositionFormMapper(pub) pub = mapper.map(form) form._pub = pub if form.validate(): pub.save() pub.upload_record() flash( "Upload was successfully submitted - it may take up 5 minutes before it has been fully integrated into %s." % CFG_SITE_NAME, category='success') return redirect(url_for('.index')) else: pub.save() ctx['form'] = form ctx['form_message'] = "The form was saved, but there were errors. Please see below." elif editable: mapper = PublicationMapper() form = DepositionForm(mapper.map(pub), crsf_enabled=False) ctx['form'] = form else: ctx['record_hd'] = format_record(recID=pub.recid, xml_record=pub.marcxml, ln=g.ln, of='hd') ctx['record_hdinfo'] = format_record(recID=pub.recid, xml_record=pub.marcxml, ln=g.ln, of='HDINFO') elif action == 'save': # # Save action (AjAX) # if request.method == 'POST': form = DepositionForm(request.values, crsf_enabled=False) mapper = DepositionFormMapper(pub) pub = mapper.map(form) form._pub = pub if form.validate(): pub.save() return json.dumps({ 'status': 'success', 'form': 'Successfully saved.' }) else: pub.save() errors = dict([(x, '') for x in form._fields.keys()]) errors.update(form.errors) return json.dumps({ 'status': 'warning', 'form': 'The form was saved, but there were errors. Please see below.', 'fields': errors, }) else: abort(405) return render_template("openaire_edit.html", myresearch=get_exisiting_publications_for_uid( current_user.get_id()), **ctx)