def index(self): """Site License settings view.""" if 'POST' in request.method: jfy = {} try: # update item types and site license info SiteLicense.update(request.get_json()) jfy['status'] = 201 jfy['message'] = 'Site license was successfully updated.' except BaseException: jfy['status'] = 500 jfy['message'] = 'Failed to update site license.' return make_response(jsonify(jfy), jfy['status']) try: # site license list result_list = SiteLicense.get_records() # item types list n_lst = ItemTypes.get_latest() result = get_response_json(result_list, n_lst) return self.render( current_app.config['WEKO_ADMIN_SITE_LICENSE_TEMPLATE'], result=json.dumps(result)) except BaseException as e: current_app.logger.error('Could not save site license settings', e) abort(500)
def index(item_type_id=0): """Renders an item register view. :param item_type_id: Item type ID. (Default: 0) :return: The rendered template. """ try: lists = ItemTypes.get_latest() if lists is None or len(lists) == 0: return render_template( current_app.config['WEKO_ITEMS_UI_ERROR_TEMPLATE']) item_type = ItemTypes.get_by_id(item_type_id) if item_type is None: return redirect( url_for('.index', item_type_id=lists[0].item_type[0].id)) json_schema = '/items/jsonschema/{}'.format(item_type_id) schema_form = '/items/schemaform/{}'.format(item_type_id) need_file = False if 'filename' in json.dumps(item_type.schema): need_file = True return render_template( current_app.config['WEKO_ITEMS_UI_FORM_TEMPLATE'], render_widgets=True, need_file=need_file, record={}, jsonschema=json_schema, schemaform=schema_form, lists=lists, id=item_type_id, files=[]) except BaseException: current_app.logger.error('Unexpected error: ', sys.exc_info()[0]) return abort(400)
def init_workflow(): """Init WorkFlow Table.""" db_workflow = list() flow_list = FlowDefine.query.order_by(asc(FlowDefine.id)).all() itemtypesname_list = ItemTypes.get_latest() db_workflow.append( dict(flows_id=uuid.uuid4(), flows_name='Registration WorkFlow', itemtype_id=itemtypesname_list[0].item_type[0].id, flow_id=flow_list[0].id)) return db_workflow
def index(self): """Site License settings view.""" if 'POST' in request.method: jfy = {} try: # update item types and site license info data = request.get_json() if data and data.get('site_license'): for license in data['site_license']: err_addr = False if not license.get('addresses'): err_addr = True else: for addresses in license['addresses']: for item in addresses.values(): if not item or '' in item: err_addr = True # break for item addresses break if err_addr: # break for addresses break if err_addr: raise ValueError('IP Address is incorrect') SiteLicense.update(data) jfy['status'] = 201 jfy['message'] = 'Site license was successfully updated.' except BaseException: jfy['status'] = 500 jfy['message'] = 'Failed to update site license.' return make_response(jsonify(jfy), jfy['status']) try: # site license list result_list = SiteLicense.get_records() # item types list n_lst = ItemTypes.get_latest() result = get_response_json(result_list, n_lst) return self.render( current_app.config['WEKO_ADMIN_SITE_LICENSE_TEMPLATE'], result=json.dumps(result)) except BaseException as e: current_app.logger.error('Could not save site license settings', e) abort(500)
def workflow_detail(self, workflow_id='0'): """ Get workflow info :return: """ itemtype_list = ItemTypes.get_latest() flow_api = Flow() flow_list = flow_api.get_flow_list() if '0' == workflow_id: """Create new workflow""" return self.render('weko_workflow/admin/workflow_detail.html', workflow=None, itemtype_list=itemtype_list, flow_list=flow_list) """Update the workflow info""" workflow = WorkFlow() workflows = workflow.get_workflow_detail(workflow_id) return self.render('weko_workflow/admin/workflow_detail.html', workflow=workflows, itemtype_list=itemtype_list, flow_list=flow_list)
def default_view_method(pid, record, template=None): """Default view method. Sends ``record_viewed`` signal and renders template. """ record_viewed.send( current_app._get_current_object(), pid=pid, record=record, ) item_type_id = record.get('item_type_id') lists = ItemTypes.get_latest() if lists is None or len(lists) == 0: return render_template( current_app.config['WEKO_ITEMS_UI_ERROR_TEMPLATE'] ) item_type = ItemTypes.get_by_id(item_type_id) if item_type is None: return redirect( url_for('.index', item_type_id=lists[0].item_type[0].id)) json_schema = '/items/jsonschema/{}'.format(item_type_id) schema_form = '/items/schemaform/{}'.format(item_type_id) need_file = False # if 'filemeta' in json.dumps(item_type.schema): if 'filename' in json.dumps(item_type.schema): need_file = True return render_template( template, need_file=need_file, record=record.item_metadata, jsonschema=json_schema, schemaform=schema_form, lists=lists, links=to_links_js(pid), id=item_type_id, files=to_files_js(record), pid=pid )
def workflow_detail(self, workflow_id='0'): """Get workflow info. :return: """ if WEKO_WORKFLOW_SHOW_HARVESTING_ITEMS: itemtype_list = ItemTypes.get_latest() else: itemtype_list = ItemTypes.get_latest_custorm_harvesting() flow_api = Flow() flow_list = flow_api.get_flow_list() if '0' == workflow_id: """Create new workflow""" return self.render('weko_workflow/admin/workflow_detail.html', workflow=None, itemtype_list=itemtype_list, flow_list=flow_list) """Update the workflow info""" workflow = WorkFlow() workflows = workflow.get_workflow_detail(workflow_id) return self.render('weko_workflow/admin/workflow_detail.html', workflow=workflows, itemtype_list=itemtype_list, flow_list=flow_list)
def index(self, ItemTypeID=0): """Renders an item type mapping view. :param ItemTypeID: Item type ID. (Default: 0) :return: The rendered template. """ try: lists = ItemTypes.get_latest() # ItemTypes.get_all() if lists is None or len(lists) == 0: return self.render( current_app.config['WEKO_ITEMTYPE' 'S_UI_ADMIN_ERROR_TEMPLATE'] ) item_type = ItemTypes.get_by_id(ItemTypeID) if item_type is None: current_app.logger.info(lists[0].item_type[0]) return redirect(url_for('itemtypesmapping.index', ItemTypeID=lists[0].item_type[0].id)) itemtype_list = [] itemtype_prop = item_type.schema.get('properties') sys_admin = current_app.config['WEKO_ADMIN_PERMISSION_ROLE_SYSTEM'] is_admin = False with db.session.no_autoflush: for role in list(current_user.roles or []): if role.name == sys_admin: is_admin = True break cur_lang = current_i18n.language meta_system = item_type.render.get('meta_system') table_rows = ['pubdate'] render_table_row = item_type.render.get('table_row') meta_system_items = ['system_identifier_doi', 'system_identifier_hdl', 'system_identifier_uri', 'system_file', 'updated_date', 'created_date', 'persistent_identifier_doi', 'persistent_identifier_h', 'ranking_page_url', 'belonging_index_info'] for key in meta_system_items: if isinstance(meta_system, dict) and meta_system.get(key) \ and isinstance(meta_system[key], dict): if meta_system[key]['title_i18n'] and cur_lang in \ meta_system[key]['title_i18n'] and \ meta_system[key]['title_i18n'][cur_lang] and \ meta_system[key]['title_i18n'][cur_lang].strip(): meta_system[key]['title'] = \ meta_system[key]['title_i18n'][cur_lang] else: meta_system[key]['title'] = \ meta_system[key]['title_i18n']['en'] if \ meta_system[key]['title_i18n'] and \ meta_system[key]['title_i18n']['en'] else '' if isinstance(render_table_row, list): table_rows.extend(render_table_row) for key in table_rows: prop = itemtype_prop.get(key) schema_form = item_type.form elem_str = '' if 'default' != cur_lang: for elem in schema_form: if 'items' in elem: if elem['key'] == key: if 'title_i18n' in elem: if cur_lang in elem['title_i18n']: if len(elem['title_i18n'] [cur_lang]) > 0: elem_str = elem['title_i18n'][ cur_lang] else: elem_str = elem['title'] for sub_elem in elem['items']: if 'key' in sub_elem and \ sub_elem['key'] == key: if 'title_i18n' in sub_elem: if cur_lang in sub_elem['title_i18n']: if len( sub_elem['title_i18n'][ cur_lang]) > 0: elem_str = \ sub_elem['title_i18n'][ cur_lang] else: elem_str = sub_elem['title'] break else: if elem['key'] == key: if 'title_i18n' in elem: if cur_lang in elem['title_i18n']: if len(elem['title_i18n'] [cur_lang]) > 0: elem_str = elem['title_i18n'][ cur_lang] else: elem_str = elem['title'] if elem_str != '': break if elem_str == '': elem_str = prop.get('title') itemtype_list.append((key, elem_str)) mapping_name = request.args.get('mapping_type', 'jpcoar_mapping') jpcoar_xsd = WekoSchema.get_all() jpcoar_lists = {} for item in jpcoar_xsd: jpcoar_lists[item.schema_name] = json.loads(item.xsd) item_type_mapping = Mapping.get_record(ItemTypeID) return self.render( current_app.config['WEKO_ITEMTYPES_UI_ADMIN_MAPPING_TEMPLATE'], lists=lists, hide_mapping_prop=item_type_mapping, mapping_name=mapping_name, hide_itemtype_prop=itemtype_prop, jpcoar_prop_lists=remove_xsd_prefix(jpcoar_lists), meta_system=meta_system, itemtype_list=itemtype_list, id=ItemTypeID, is_system_admin=is_admin, lang_code=session.get('selected_language', 'en') # Set default ) except BaseException: current_app.logger.error('Unexpected error: ', sys.exc_info()[0]) return abort(400)
def prepare_edit_item(): """Prepare_edit_item. Host the api which provide 2 service: Create new activity for editing flow Check permission: check if user is owner/admin/shared user request: header: Content type must be json data: pid_value: pid_value return: The result json: code: status code, msg: meassage result, data: url redirect """ if request.headers['Content-Type'] != 'application/json': """Check header of request""" return jsonify(code=-1, msg=_('Header Error')) post_activity = request.get_json() pid_value = post_activity.get('pid_value') if pid_value: try: record = WekoRecord.get_record_by_pid(pid_value) owner = str(record.get('owner')) shared_id = str(record.get('weko_shared_id')) user_id = str(get_current_user()) is_admin = get_user_roles() activity = WorkActivity() pid_object = PersistentIdentifier.get('recid', pid_value) # check item is being editied item_id = pid_object.object_uuid workflow_action_stt = \ activity.get_workflow_activity_status_by_item_id( item_id=item_id) # show error when has stt is Begin or Doing if workflow_action_stt is not None and \ (workflow_action_stt == ActionStatusPolicy.ACTION_BEGIN or workflow_action_stt == ActionStatusPolicy.ACTION_DOING): return jsonify(code=-13, msg=_('The workflow is being edited. ')) if user_id != owner and not is_admin[0] and user_id != shared_id: return jsonify(code=-1, msg=_('You are not allowed to edit this item.')) lists = ItemTypes.get_latest() if not lists: return jsonify(code=-1, msg=_('You do not even have an itemtype.')) item_type_id = record.get('item_type_id') item_type = ItemTypes.get_by_id(item_type_id) if item_type is None: return jsonify(code=-1, msg=_('This itemtype not found.')) upt_current_activity = activity.upt_activity_detail( item_id=pid_object.object_uuid) if upt_current_activity is not None: post_activity['workflow_id'] = upt_current_activity.workflow_id post_activity['flow_id'] = upt_current_activity.flow_id post_activity['itemtype_id'] = item_type_id getargs = request.args community = getargs.get('community', None) # Create a new version of a record. record = WekoDeposit.get_record(item_id) if record is None: return jsonify(code=-1, msg=_('Record does not exist.')) deposit = WekoDeposit(record, record.model) new_record = deposit.newversion(pid_object) if new_record is None: return jsonify(code=-1, msg=_('An error has occurred.')) rtn = activity.init_activity(post_activity, community, new_record.model.id) if rtn: # GOTO: TEMPORARY EDIT MODE FOR IDENTIFIER identifier_actionid = get_actionid('identifier_grant') identifier = activity.get_action_identifier_grant( upt_current_activity.activity_id, identifier_actionid) if identifier: if identifier.get('action_identifier_select') > \ IDENTIFIER_GRANT_DOI: identifier['action_identifier_select'] = \ IDENTIFIER_GRANT_CAN_WITHDRAW elif identifier.get('action_identifier_select') == \ IDENTIFIER_GRANT_IS_WITHDRAWING: identifier['action_identifier_select'] = \ IDENTIFIER_GRANT_WITHDRAWN activity.create_or_update_action_identifier( rtn.activity_id, identifier_actionid, identifier) if community: comm = GetCommunity.get_community_by_id(community) url_redirect = url_for( 'weko_workflow.display_activity', activity_id=rtn.activity_id, community=comm.id) else: url_redirect = url_for( 'weko_workflow.display_activity', activity_id=rtn.activity_id) return jsonify(code=0, msg='success', data={'redirect': url_redirect}) except Exception as e: current_app.logger.error('Unexpected error: ', str(e)) return jsonify(code=-1, msg=_('An error has occurred.'))