Пример #1
0
    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)
Пример #2
0
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)
Пример #3
0
 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
Пример #4
0
    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)
Пример #5
0
 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)
Пример #6
0
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
    )
Пример #7
0
    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)
Пример #8
0
    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)
Пример #9
0
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.'))