Compare commits

..

21 Commits

Author SHA1 Message Date
Mojib Wali
97feb284cf v2.0.0 2021-03-29 10:07:03 +02:00
Unix
20fc3e62be bugfix: recent uploads filter only latest version 2021-03-29 09:46:16 +02:00
Mojib Wali
530d32d7c7 migrate: to invenio-app-rdm:v2 2021-03-29 09:41:35 +02:00
Mojib Wali
b27d54b6f0 v1.9.6 2021-03-23 11:43:52 +01:00
Mojib Wali
f81ca88835 footer: adds documentation link
* footer: adds documentation link

* landingpage: disable jump btn
2021-03-23 11:40:47 +01:00
Mojib Wali
39c19238dd v1.9.5 2021-03-19 14:40:29 +01:00
Mojib Wali
3f14a3ada4 PublisherField: makes field required
* Publisher: makes field required
* publisherField: change in helptext
2021-03-19 14:39:29 +01:00
Mojib Wali
0a5a78312e v1.9.4 2021-03-19 12:56:27 +01:00
Mojib Wali
0cc1635e3a bugfix: translation order for tug logo (#176) 2021-03-19 12:54:35 +01:00
Mojib Wali
0f8ebffaa2 Translations: updated 2021-03-19 11:14:16 +01:00
Unix
0e2c1a0f60 style: login form 2021-03-19 09:55:49 +01:00
Mojib Wali
4d902f014b v1.9.3 2021-03-18 08:28:20 +01:00
Mojib Wali
ea54a17c43 bugfix: adds check for scheme 'doi' 2021-03-17 17:11:00 +01:00
Mojib Wali
db01116eeb v1.9.2 2021-03-17 10:32:11 +01:00
Mojib Wali
ea92a2f563 dep: adds invenio_config_tugraz 2021-03-17 10:27:55 +01:00
Mojib Wali
a4558e02bf doimint: adds suffix config 2021-03-17 10:15:30 +01:00
Mojib Wali
c87e65d89f dep: bump in webpack 2021-03-17 09:40:05 +01:00
Mojib Wali
6360bcab7b doimint: adds positive message on doi register 2021-03-16 12:53:47 +01:00
Mojib Wali
95710c440e depositform: get doi from backend 2021-03-16 09:55:59 +01:00
David Eckhard
063ddc985a refactor: remove unused files 2021-03-16 08:37:04 +01:00
David Eckhard
6cb248644b feature: add doi retrieve endpoint 2021-03-16 08:37:04 +01:00
21 changed files with 399 additions and 351 deletions

View File

@@ -10,7 +10,7 @@ import {
} from "semantic-ui-react"; } from "semantic-ui-react";
import { FieldArray } from "formik"; import { FieldArray } from "formik";
import { DoiRest, MapDatacite } from "datacite-rest"; import { FetchDoi, MapDatacite } from "datacite-rest";
export class DoiMint extends Component { export class DoiMint extends Component {
constructor(props) { constructor(props) {
@@ -29,8 +29,12 @@ export class DoiMint extends Component {
this.metadata.identifiers.length > 0 && this.metadata.identifiers.length > 0 &&
this.metadata.identifiers[0] != null this.metadata.identifiers[0] != null
) { ) {
this.is_doi = true; for(var identifier of this.metadata.identifiers){
this.id_doi = this.metadata.identifiers[0].identifier; if (identifier.scheme == "doi"){
this.is_doi = true;
this.id_doi = identifier.identifier;
}
}
} }
// add metadata to the state // add metadata to the state
@@ -47,65 +51,66 @@ export class DoiMint extends Component {
// this should fetch a new doi // this should fetch a new doi
var pushDoi = (form) => { var pushDoi = (form) => {
// activate the loader // activate the loader
this.setState({ this.setState({
showLoader: true, showLoader: true,
}); });
const url = this.configs.datacite_url; // get the prefix from backend
const auth = {
username: this.configs.datacite_uname,
password: this.configs.datacite_pass,
};
const prefix = this.configs.datacite_prefix; const prefix = this.configs.datacite_prefix;
const suffix = this.configs.datacite_suffix;
// get mapped DOI if (prefix !== null && suffix !== null) {
const mapped = MapDatacite(this.metadata, this.record.id, prefix); // get mapped DOI
const mapped = MapDatacite(this.metadata, this.record.id, prefix, suffix);
const _doirest = new DoiRest(url); const _fetchdoi = new FetchDoi("/getdoi");
// Create a new DOI // Create a new DOI
_doirest _fetchdoi
.create(mapped, auth, this.configs.datacite_password_iv) .create(mapped)
.then((data) => { .then((data) => {
// if there is an error // if there is an error
if (data.data.errors) { if (data.data.errors) {
this.setState({ this.setState({
showLoader: false, showLoader: false,
isError: true, isError: true,
errorMsg: data.data.errors[0].title, errorMsg: data.data.errors[0].title,
}); });
// if credentials are wrong! }
} else if (data.code == 405) { // new doi is fetched
this.setState({ else {
showLoader: false, // add new identifier
isError: true, const _identifiers = [
errorMsg: "Not configured!", {
}); identifier: data.data.data.data.id,
} scheme: "doi",
// new doi is fetched },
else { ];
// add new identifier // submit the value to the form
const _identifiers = [ this.setState({ identifiers: _identifiers });
{ form.setFieldValue(
identifier: data.data.data.id, "metadata.identifiers",
scheme: "doi", this.state.identifiers
}, );
];
// submit the value to the form
this.setState({ identifiers: _identifiers });
form.setFieldValue("metadata.identifiers", this.state.identifiers);
this.is_doi = true; this.is_doi = true;
// deactivate the loader // deactivate the loader
this.setState({ this.setState({
showLoader: false, showLoader: false,
doi_id: this.state.identifiers[0].identifier, doi_id: this.state.identifiers[0].identifier,
}); });
} }
}) })
.catch((error) => { .catch((error) => {
console.log("error", error); console.log("error", error);
});
} else {
this.setState({
showLoader: false,
isError: true,
errorMsg: "Not configured!",
}); });
}
}; };
// get a link of dio // get a link of dio
@@ -175,6 +180,12 @@ export class DoiMint extends Component {
marginTop: "10px", marginTop: "10px",
}} }}
> >
{this.state.doi_id && (
<Message positive>
<Message.Header>A DOI is registered!</Message.Header>
<p>Please save the deposit. </p>
</Message>
)}
<Label <Label
style={{ style={{
cursor: "pointer", cursor: "pointer",

View File

@@ -0,0 +1,47 @@
// This file is part of React-Invenio-Deposit
// Copyright (C) 2020 CERN.
// Copyright (C) 2020 Northwestern University.
// Copyright (C) 2021 Graz University of Technology.
//
// React-Invenio-Deposit is free software; you can redistribute it and/or modify it
// under the terms of the MIT License; see LICENSE file for more details.
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { FieldLabel, TextField } from 'react-invenio-forms';
export class PublisherField extends Component {
render() {
const { fieldPath, label, labelIcon, placeholder, required } = this.props;
return (
<TextField
fieldPath={fieldPath}
helpText={
'The publisher is used to formulate the citation, if you are plannig to mint a new DOI this publisher will be cited.'
}
label={
<FieldLabel htmlFor={fieldPath} icon={labelIcon} label={label} />
}
placeholder={placeholder}
required={required}
/>
);
}
}
PublisherField.propTypes = {
fieldPath: PropTypes.string.isRequired,
label: PropTypes.string,
labelIcon: PropTypes.string,
placeholder: PropTypes.string,
required: PropTypes.bool,
};
PublisherField.defaultProps = {
fieldPath: 'metadata.publisher',
label: 'Publisher',
labelIcon: 'building outline',
placeholder: 'Enter publisher name',
};

View File

@@ -33,7 +33,6 @@ import {
LanguagesField, LanguagesField,
PublishButton, PublishButton,
PublicationDateField, PublicationDateField,
PublisherField,
ResourceTypeField, ResourceTypeField,
SaveButton, SaveButton,
SubjectsField, SubjectsField,
@@ -44,6 +43,7 @@ import {
} from "react-invenio-deposit"; } from "react-invenio-deposit";
import { AccordionField } from "react-invenio-forms"; import { AccordionField } from "react-invenio-forms";
import { DoiMint } from "./DoiMint"; import { DoiMint } from "./DoiMint";
import { PublisherField } from "./PublisherField";
export class RDMDepositForm extends Component { export class RDMDepositForm extends Component {
constructor(props) { constructor(props) {
@@ -279,14 +279,11 @@ export class RDMDepositForm extends Component {
config={this.config} config={this.config}
record={this.props.record} record={this.props.record}
files={this.props.files} files={this.props.files}
permissions={this.props.permissions}
> >
<FormFeedback fieldPath="message" /> <FormFeedback fieldPath="message" />
<Container style={{ marginTop: "10px" }}> <Container style={{ marginTop: "10px" }}>
<DepositFormTitle <DepositFormTitle />
// TODO: make is_published part of the API response
// so we don't have to do this
isPublished={this.props.record.is_published}
/>
<Grid> <Grid>
<Grid.Row> <Grid.Row>
<Grid.Column width={11}> <Grid.Column width={11}>
@@ -296,7 +293,7 @@ export class RDMDepositForm extends Component {
label={"Files"} label={"Files"}
ui={this.accordionStyle} ui={this.accordionStyle}
> >
{this.noFiles && ( {this.noFiles && this.props.record.is_published && (
<p <p
style={{ style={{
textAlign: "center", textAlign: "center",
@@ -448,7 +445,7 @@ export class RDMDepositForm extends Component {
/> />
<DatesField options={this.vocabularies.metadata.dates} /> <DatesField options={this.vocabularies.metadata.dates} />
<VersionField /> <VersionField />
<PublisherField /> <PublisherField required />
<br /> <br />
</AccordionField> </AccordionField>
{/**TODO: uncomment to use FundingField*/} {/**TODO: uncomment to use FundingField*/}
@@ -505,8 +502,11 @@ export class RDMDepositForm extends Component {
label={"Protection"} label={"Protection"}
labelIcon={"shield"} labelIcon={"shield"}
/> />
{this.config.data_cite &&( {this.config.data_cite && (
<DoiMint record={this.props.record} config={this.config.data_cite}/> <DoiMint
record={this.props.record}
config={this.config.data_cite}
/>
)} )}
</Sticky> </Sticky>
</Grid.Column> </Grid.Column>

View File

@@ -17,6 +17,7 @@ ReactDOM.render(
record={getInputFromDOM("deposits-record")} record={getInputFromDOM("deposits-record")}
files={getInputFromDOM("deposits-record-files")} files={getInputFromDOM("deposits-record-files")}
config={getInputFromDOM("deposits-config")} config={getInputFromDOM("deposits-config")}
permissions={getInputFromDOM("deposits-record-permissions")}
/>, />,
document.getElementById("deposit-form") document.getElementById("deposit-form")
); );

View File

@@ -46,5 +46,5 @@
margin-top: 10px; margin-top: 10px;
} }
.spacer-long{ .spacer-long{
margin-top: 20px; margin-top: 30px;
} }

View File

@@ -110,7 +110,8 @@ TUG_ROUTES = {
"comingsoon": "/comingsoon", "comingsoon": "/comingsoon",
"deposit_create": "/uploads/new", "deposit_create": "/uploads/new",
"deposit_edit": "/uploads/<pid_value>", "deposit_edit": "/uploads/<pid_value>",
"record_detail": "/records/<pid_value>" "getdoi": "/getdoi",
"record_detail": "/records/<pid_value>",
} }
# Datacite # Datacite

View File

@@ -1,88 +0,0 @@
#!/usr/bin/env python
"""crypto helper module. see https://gist.github.com/marcoslin/8026990."""
import binascii
from Crypto import Random
from Crypto.Cipher import AES
# ------------------------------
# DEFINE Encryption Class
class Cryptor(object):
"""Crypto class implementation.
Provide encryption and decryption function that works with crypto-js.
https://code.google.com/p/crypto-js/
Padding implemented as per RFC 2315: PKCS#7 page 21
http://www.ietf.org/rfc/rfc2315.txt
The key to make pycrypto work with crypto-js are:
1. Use MODE_CFB. For some reason, crypto-js decrypted result from MODE_CBC
gets truncated
2. Use Pkcs7 padding as per RFC 2315, the default padding used by CryptoJS
3. On the JS side, make sure to wrap ciphertext with CryptoJS.lib.CipherParams.create()
"""
# AES-256 key (32 bytes)
KEY = "01ab38d5e05c92aa098921d9d4626107133c7e2ab0e4849558921ebcc242bcb0"
BLOCK_SIZE = 16
@classmethod
def _pad_string(cls, in_string):
"""Pad an input string according to PKCS#7."""
in_len = len(in_string)
pad_size = cls.BLOCK_SIZE - (in_len % cls.BLOCK_SIZE)
return in_string.ljust(in_len + pad_size, chr(pad_size))
@classmethod
def _unpad_string(cls, in_string):
"""Remove the PKCS#7 padding from a text string."""
in_len = len(in_string)
pad_size = ord(in_string[-1])
if pad_size > cls.BLOCK_SIZE:
raise ValueError("Input is not padded or padding is corrupt")
return in_string[: in_len - pad_size]
@classmethod
def generate_iv(cls, size=16):
"""Generate initialization vector."""
return Random.get_random_bytes(size)
@classmethod
def encrypt(cls, in_string, in_key, in_iv=None):
"""Return encrypted string.
@in_string: Simple str to be encrypted
@key: hexified key
@iv: hexified iv
"""
key = binascii.a2b_hex(in_key)
if in_iv is None:
iv = cls.generate_iv()
in_iv = binascii.b2a_hex(iv)
else:
iv = binascii.a2b_hex(in_iv)
aes = AES.new(key, AES.MODE_CFB, iv, segment_size=128)
padded = cls._pad_string(in_string).encode("utf-8")
encrypted = aes.encrypt(padded)
return in_iv, encrypted
@classmethod
def decrypt(cls, in_encrypted, in_key, in_iv):
"""Return encrypted string.
@in_encrypted: Base64 encoded
@key: hexified key
@iv: hexified iv
"""
key = binascii.a2b_hex(in_key)
iv = binascii.a2b_hex(in_iv)
aes = AES.new(key, AES.MODE_CFB, iv, segment_size=128)
decrypted = aes.decrypt(binascii.a2b_base64(in_encrypted).rstrip())
return cls._unpad_string(decrypted)

View File

@@ -21,4 +21,6 @@ class FrontpageRecordsSearch(RecordsSearch):
"""Default index and filter for frontpage search.""" """Default index and filter for frontpage search."""
index = "rdmrecords-records" index = "rdmrecords-records"
default_filter = Q("query_string", query=("access.record:public")) default_filter = Q(
"query_string", query=(
"access.record:public" "AND versions.is_latest:true"))

View File

@@ -1,7 +1,5 @@
{# {#
Copyright (C) 2020 TUGRAZ Copyright (C) 2020-2021 Graz University of Technology.
Copyright (C) 2020 mojib wali
Copyright (C) 2020 Nikita Lvov
invenio-theme-tugraz is free software; you can redistribute it and/or invenio-theme-tugraz is free software; you can redistribute it and/or
modify it under the terms of the MIT License; see LICENSE file for more modify it under the terms of the MIT License; see LICENSE file for more
@@ -14,30 +12,32 @@
{% from "invenio_accounts/_macros.html" import render_field, form_errors %} {% from "invenio_accounts/_macros.html" import render_field, form_errors %}
{% block page_body %} {% block page_body %}
<div class="spacer-long"></div> <div class="spacer-long"></div>
<div class="spacer-long"></div>
<div class="ui container"> <div class="ui container">
<div class="ui centered grid"> <div class="ui centered grid padded">
<div class="ui padded segments big form"> <div class="ui padded segments huge form">
<div class="ui login segment padded"> <div class="ui login segment padded">
<div class="divider hidden"></div> <div class="divider hidden"></div>
{%- block form_header %} {%- block form_header %}
<h3 class="ui login header">{{ _('Log in to Repository') }}</h3> <h3 class="ui login header">{{ _('Log in to Repository') }}</h3>
{%- endblock form_header %} {%- endblock form_header %}
<div class="ui divider"></div>
<!--Log in with SSO--> <!--Log in with SSO-->
{%- if config.INVENIO_CONFIG_TUGRAZ_SHIBBOLETH %} {%- if config.INVENIO_CONFIG_TUGRAZ_SHIBBOLETH %}
<div class="ui divider"></div>
<div class="login-page-button ui fluid large button"> <div class="login-page-button ui fluid large button">
<a href="{{ url_for('sso_saml.sso', idp='idp') }}" class="inverted tiny image label"> <a href="{{ url_for('sso_saml.sso', idp='idp') }}" class="inverted tiny image label">
{% trans type='TUGRAZ' %} Log in with {{ type }}{% endtrans %} {% trans type='TUGRAZ' %} Log in with {{ type }}{% endtrans %}
<img src="{{ url_for('static', filename=config.INVENIO_THEME_TUGRAZ_ICON)}}" height="20px" /> <img src="{{ url_for('static', filename=config.INVENIO_THEME_TUGRAZ_ICON)}}" height="20px" />
</a> </a>
</div> </div>
<div class="spacer-long"></div>
<div class="ui inverted horizontal divider"><span class="text-color">{{_ ("Or")}}</span></div> <div class="ui inverted horizontal divider"><span class="text-color">{{_ ("Or")}}</span></div>
{%- endif %} {%- endif %}
{%- block form_outer %} {%- block form_outer %}
{%- with form = login_user_form %} {%- with form = login_user_form %}
<div style="padding-bottom: 20px;padding-top: 6px;">
<form action="{{ url_for_security('login') }}" method="POST" name="login_user_form" class="ui big form"> <form action="{{ url_for_security('login') }}" method="POST" name="login_user_form" class="ui big form">
{{ form.hidden_tag() }} {{ form.hidden_tag() }}
{{ form_errors(form) }} {{ form_errors(form) }}
@@ -47,6 +47,7 @@
<i class="ui sign-in icon"></i>{{ _('Log In') }} <i class="ui sign-in icon"></i>{{ _('Log In') }}
</button> </button>
</form> </form>
</div>
{%- endwith %} {%- endwith %}
{%- endblock form_outer %} {%- endblock form_outer %}
<div class="divider hidden"></div> <div class="divider hidden"></div>

View File

@@ -10,17 +10,20 @@
{%- extends config.BASE_TEMPLATE %} {%- extends config.BASE_TEMPLATE %}
{%- block page_body %} {%- block page_body %}
{%- if record %} {%- if record %}
<input id="deposits-record" type="hidden" name="deposits-record" value='{{record | tojson }}'></input> <input id="deposits-record" type="hidden" name="deposits-record" value='{{record | tojson }}'></input>
{%- endif %} {%- endif %}
{%- if files %} {%- if files %}
<input id="deposits-record-files" type="hidden" name="deposits-record-files" value='{{files | tojson }}'></input> <input id="deposits-record-files" type="hidden" name="deposits-record-files" value='{{files | tojson }}'></input>
{%- endif %} {%- endif %}
{%- if forms_config %} {%- if forms_config %}
<input type="hidden" name="deposits-config" value='{{forms_config | tojson }}'></input> <input type="hidden" name="deposits-config" value='{{forms_config | tojson }}'></input>
{%- endif %} {%- endif %}
<div id="deposit-form"></div> {%- if permissions %}
{%- endblock page_body %} <input id="deposits-record-permissions" type="hidden" name="deposits-record-permissions" value='{{permissions | tojson }}'></input>
{%- endif %}
<div id="deposit-form"></div>
{%- endblock page_body %}
{%- block javascript %} {%- block javascript %}
{{ super() }} {{ super() }}

View File

@@ -29,6 +29,10 @@
<h2>{{_ ("Repository")}}</h2> <h2>{{_ ("Repository")}}</h2>
<p class="bodytext"> <p class="bodytext">
<a href="https://tu-graz-library.github.io/docs-repository" title="Repository documentation" target="_blank">
{{_ ("Documentation")}} <i class="external alternate icon"></i>
</a>
<br>
<!-- <a href="{{ url_for('invenio_theme_tugraz.comingsoon') }}"> <!-- <a href="{{ url_for('invenio_theme_tugraz.comingsoon') }}">
{{_ ("Impressum")}}<i class="angle right icon"></i> {{_ ("Impressum")}}<i class="angle right icon"></i>
</a> </a>

View File

@@ -44,7 +44,7 @@
{% if not records %} {% if not records %}
<div class="ui centered grid"> <div class="ui centered grid">
<p style="font-size: medium;">There are no public records to show.</p> <p style="font-size: medium;">{{_('There are no public records to show.')}}</p>
</div> </div>
{% endif %} {% endif %}

View File

@@ -17,12 +17,34 @@
{%- set metadata = record.metadata %} {%- set metadata = record.metadata %}
{%- block page_body %} {%- block page_body %}
{% if permissions is defined and permissions.can_update_draft %} <div class="banners">
<div {% if permissions is defined and permissions.can_edit %}
id="recordManagement" <div class="ui warning flashed top-attached manage message">
data-recid='{{ record["id"] | tojson }}'> <div class="ui container">
<div id="recordManagement" data-record='{{ record | tojson }}' data-permissions='{{ permissions | tojson }}'></div>
</div>
</div> </div>
{% endif %} {% endif %}
{% if not record.versions.is_latest %}
<div class="ui warning flashed top-attached manage message">
<div class="ui container">
<div class="ui relaxed grid">
<div class="column">
<div class="row">
<p>
{% trans link_start=('<a href="' + record.links.latest_html + '"><b>')|safe, link_end='</b></a>'|safe %}
There is a {{ link_start }}newer version{{ link_end }} of the record available.
{% endtrans %}
</p>
</div>
</div>
</div>
</div>
</div>
{% endif %}
</div>
<div class="ui container"> <div class="ui container">
<div class="ui relaxed grid"> <div class="ui relaxed grid">
<div class="two column row top-padded"> <div class="two column row top-padded">
@@ -33,9 +55,7 @@
<div class="two column row"> <div class="two column row">
<div class="left floated left aligned column"> <div class="left floated left aligned column">
<span class="ui" title="Publication date">{{ record.ui.publication_date_l10n_long }}</span> <span class="ui" title="Publication date">{{ record.ui.publication_date_l10n_long }}</span>
{%- if metadata.version %} <span class="label text-muted"> | Version {{ record.ui.version }}</span>
<span class="label text-muted"> | Version {{ metadata.version }}</span>
{% endif %}
</div> </div>
<div class="right floated right aligned column"> <div class="right floated right aligned column">
<span class="ui label small grey">{{ record.ui.resource_type }}</span> <span class="ui label small grey">{{ record.ui.resource_type }}</span>
@@ -88,7 +108,7 @@
<div class="ui grid"> <div class="ui grid">
<div class="two column row top-bottom-padded font-small"> <div class="two column row top-bottom-padded font-small">
<div class="four wide column"> <div class="four wide column">
<p><b>Upload infromation</b></p> <p><b>Upload information</b></p>
</div> </div>
<div class="twelve wide column"> <div class="twelve wide column">
<span class="label text-muted"> <span class="label text-muted">
@@ -98,7 +118,7 @@
</div> </div>
</div> </div>
{%- endblock record_footer -%} {%- endblock record_footer -%}
{%- block jump -%} <!-- {%- block jump -%}
<div class="ui grid"> <div class="ui grid">
<div class="centered row" id="jump-btn"> <div class="centered row" id="jump-btn">
<a style="cursor: pointer;"> <a style="cursor: pointer;">
@@ -107,15 +127,15 @@
</a> </a>
</div> </div>
</div> </div>
{%- endblock jump -%} {%- endblock jump -%} -->
{%- endblock record_body %} {%- endblock record_body %}
</div> </div>
<div class="five wide column"> <div class="five wide column">
{% block record_sidebar %} {% block record_sidebar %}
{%- include "invenio_app_rdm/records/details/side_bar.html" %} {%- include "invenio_app_rdm/records/details/side_bar.html" %}
<div style="text-align: center;"> <div style="text-align: center;">
{%- include "invenio_theme_tugraz/landingpage/doi.html" %} {%- include "invenio_theme_tugraz/landingpage/doi.html" %}
</div> </div>
{% endblock record_sidebar %} {% endblock record_sidebar %}
</div> </div>
</div> </div>

View File

@@ -7,7 +7,11 @@
#} #}
{% if metadata.identifiers %} {% if metadata.identifiers %}
{%- set id_doi = metadata.identifiers[0].identifier %} {% for identifier in metadata.identifiers %}
{% if identifier.scheme == 'doi' %}
{%- set id_doi = identifier.identifier %}
<dd> <dd>
{% if id_doi %} {% if id_doi %}
<span class="get-badge" data-toggle="tooltip" data-placement="bottom" style="cursor: pointer;" <span class="get-badge" data-toggle="tooltip" data-placement="bottom" style="cursor: pointer;"
@@ -34,3 +38,6 @@
{% endif %} {% endif %}
</dd> </dd>
{% endif %} {% endif %}
{% endfor %}
{% endif %}

View File

@@ -60,7 +60,7 @@
<img height="51.862" src="{{ url_for('static', filename='images/library_logo.png')}}"> <img height="51.862" src="{{ url_for('static', filename='images/library_logo.png')}}">
</div> </div>
<div class="affiliation-text"> <div class="affiliation-text">
<a title="RDM" href="{{url_for('invenio_theme_tugraz.index')}}"> <a title="Home" href="{{url_for('invenio_theme_tugraz.index')}}">
TU GRAZ TU GRAZ
<br> <br>
{{_ ("REPOSITORY")}} {{_ ("REPOSITORY")}}

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: invenio-theme-tugraz 1.0.4\n" "Project-Id-Version: invenio-theme-tugraz 1.0.4\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n" "Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2021-01-04 14:18+0100\n" "POT-Creation-Date: 2021-03-19 10:53+0100\n"
"PO-Revision-Date: 2020-10-06 10:27+0200\n" "PO-Revision-Date: 2020-10-06 10:27+0200\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language: de\n" "Language: de\n"
@@ -19,21 +19,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: invenio_theme_tugraz/config.py:13 invenio_theme_tugraz/config.py:50 #: invenio_theme_tugraz/config.py:14 invenio_theme_tugraz/config.py:54
msgid "TU Graz Repository" msgid "TU Graz Repository"
msgstr "TU Graz Repository" msgstr "TU Graz Repository"
#: invenio_theme_tugraz/config.py:53 #: invenio_theme_tugraz/config.py:57
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:31 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:30
msgid "Repository" msgid "Repository"
msgstr "Repository" msgstr "Repository"
#: invenio_theme_tugraz/config.py:76 #: invenio_theme_tugraz/config.py:80
msgid "German" msgid "German"
msgstr "Deutsche" msgstr "Deutsche"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/accounts_base.html:27 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/accounts_base.html:26
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/base.html:27 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/base.html:26
msgid "Invenio" msgid "Invenio"
msgstr "Invenio" msgstr "Invenio"
@@ -113,177 +113,179 @@ msgstr "Nutzungsstatistiken"
msgid "All uploads display standards compliant usage statistics" msgid "All uploads display standards compliant usage statistics"
msgstr "Alle Uploads entsprechen den Standards der Nutzungsstatistiken." msgstr "Alle Uploads entsprechen den Standards der Nutzungsstatistiken."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:34 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:33
msgid "Impressum" msgid "Impressum"
msgstr "Imprint" msgstr "Imprint"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:38 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:37
msgid "Data protection" msgid "Data protection"
msgstr "Datenschutzerklärung" msgstr "Datenschutzerklärung"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:42 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:41
msgid "Feedback" msgid "Feedback"
msgstr "Feedback" msgstr "Feedback"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:51 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:50
msgid "Features" msgid "Features"
msgstr "Features" msgstr "Features"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:53 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:52
msgid "Scalability" msgid "Scalability"
msgstr "Skalierbarkeit" msgstr "Skalierbarkeit"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:55 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:54
msgid "Institutional integration" msgid "Institutional integration"
msgstr "Institutionelle Einbindung" msgstr "Institutionelle Einbindung"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:57 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:56
msgid "Next Generation Repository" msgid "Next Generation Repository"
msgstr "Repositorium der nächsten Generation" msgstr "Repositorium der nächsten Generation"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:60 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:59
msgid "Repository Profiles" msgid "Repository Profiles"
msgstr "Repositorienprofile" msgstr "Repositorienprofile"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:62 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:61
msgid "Resilient" msgid "Resilient"
msgstr "Resilient, widerstandsfähig" msgstr "Resilient, widerstandsfähig"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:68
msgid "Connected Services" msgid "Connected Services"
msgstr "Verbundene Services " msgstr "Verbundene Services "
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:73 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:72
msgid "PURE" msgid "PURE"
msgstr "PURE" msgstr "PURE"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:76 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:75
msgid "CampusOnline" msgid "CampusOnline"
msgstr "CampusOnline" msgstr "CampusOnline"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:79 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:78
msgid "Research Data Management" msgid "Research Data Management"
msgstr "Forschungsdatenmanagement" msgstr "Forschungsdatenmanagement"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:85
msgid "Accessibility" msgid "Accessibility"
msgstr "Barrierefreiheit" msgstr "Barrierefreiheit"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "Tipp:" msgid "Tipp:"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "Use Ctrl + and Crtl -" msgid "Use Ctrl + and Crtl -"
msgstr "Verwenden Sie Strg+ und Strg-" msgstr "Verwenden Sie Strg+ und Strg-"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "to change the font size." msgid "to change the font size."
msgstr "Um die Schriftgröße zu ändern." msgstr "Um die Schriftgröße zu ändern."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:35 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:34
msgid "Home" msgid "Home"
msgstr "Startseite" msgstr "Startseite"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:48 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:47
msgid "Uploads" msgid "Uploads"
msgstr "Hochladen" msgstr "Hochladen"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:24 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:27
msgid "Type and press enter to search" msgid "Type and press enter to search"
msgstr "Suchbegriff eingeben und “Enter” drücken (?)" msgstr "Suchbegriff eingeben und “Enter” drücken (?)"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:40 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:43
msgid "Recent uploads" msgid "Recent uploads"
msgstr "Kürzlich hochgeladene Dateien" msgstr "Kürzlich hochgeladene Dateien"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:52 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:47
msgid "There are no public records to show."
msgstr "Es sind keine öffentlich zugänglichen Datensätze vorhanden."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:61
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/record_landing_page.html:33
msgid "Publication date" msgid "Publication date"
msgstr "Datum der Veröffentlichung" msgstr "Datum der Veröffentlichung"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:57 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:66
msgid "Version" #: invenio_theme_tugraz/templates/invenio_theme_tugraz/record_landing_page.html:38
msgstr "Version"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:62
msgid "Resource type" msgid "Resource type"
msgstr "Art der Veröffentlichung" msgstr "Art der Veröffentlichung"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:91 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:99
#, python-format #, python-format
msgid "" msgid ""
"\n" "\n"
" Uploaded on %(date)s\n" " Uploaded on %(date)s\n"
" " " "
msgstr "Hochgeladen am %(date)s\n" msgstr "Hochgeladen am %(date)s\n"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:110 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:126
msgid "More" msgid "More"
msgstr "Mehr" msgstr "Mehr"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:119 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136
msgid "Need help?" msgid "Need help?"
msgstr "Brauchen Sie Hilfe?" msgstr "Brauchen Sie Hilfe?"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:123 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:140
msgid "Contact us" msgid "Contact us"
msgstr "Kontaktiere uns" msgstr "Kontaktiere uns"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:127 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:145
msgid "prioritizes all Recent uploads." msgid "prioritizes all Recent uploads."
msgstr "Reiht die neuesten Uploads vor." msgstr "Reiht die neuesten Uploads vor."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:130 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:148
msgid "We can help with:" msgid "We can help with:"
msgstr "Wir können helfen bei:" msgstr "Wir können helfen bei:"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:135 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:153
msgid "Uploading your research data, software, preprints, etc." msgid "Uploading your research data, software, preprints, etc."
msgstr "Hochladen Ihrer Forschungsdaten, Software, Preprints usw." msgstr "Hochladen Ihrer Forschungsdaten, Software, Preprints usw."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:154
msgid "One-on-one with" msgid "One-on-one with"
msgstr "Eins-zu-eins mit" msgstr "Eins-zu-eins mit"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:154
msgid "supporters." msgid "supporters."
msgstr "Unterstützern" msgstr "Unterstützern"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:137 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:155
msgid "Quota increases beyond our default policy." msgid "Quota increases beyond our default policy."
msgstr "Erhöhung Ihres Kontingents über das vertraglich Zugesicherte hinaus." msgstr "Erhöhung Ihres Kontingents über das vertraglich Zugesicherte hinaus."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:138 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:156
msgid "Scripts for automated uploading of larger datasets." msgid "Scripts for automated uploading of larger datasets."
msgstr "Skripte zum automatisierten Hochladen größerer Datensätze." msgstr "Skripte zum automatisierten Hochladen größerer Datensätze."
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:143 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:161
msgid "Why use" msgid "Why use"
msgstr "Warum" msgstr "Warum"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:67 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:66
#, fuzzy #, fuzzy
msgid "REPOSITORY" msgid "REPOSITORY"
msgstr "Repository" msgstr "Repository"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:68
msgid "LIBRARY & ARCHIVES" msgid "LIBRARY & ARCHIVES"
msgstr "Bibliothek und Archiv" msgstr "Bibliothek und Archiv"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:79 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:78
msgid "SCIENCE" msgid "SCIENCE"
msgstr "Wissenschaft" msgstr "WISSEN"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:79
msgid "PASSION"
msgstr "TECHNIK"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:80 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:80
msgid "PASSION"
msgstr "Leidenschaft"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:81
msgid "TECHNOLOGY" msgid "TECHNOLOGY"
msgstr "Technik" msgstr "LEIDENSCHAFT"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/header_login.html:8 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/header_login.html:8
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:60 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:61
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:81 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:81
msgid "Sign up" msgid "Sign up"
msgstr "Registrierung" msgstr "Registrierung"
@@ -296,16 +298,16 @@ msgstr "Einloggen"
msgid "Sign out" msgid "Sign out"
msgstr "Ausloggen" msgstr "Ausloggen"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:24 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:23
msgid "Log in to Repository" msgid "Log in to Repository"
msgstr "Anmelden" msgstr "Anmelden"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:32 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:30
#, python-format #, python-format
msgid " Log in with %(type)s" msgid " Log in with %(type)s"
msgstr "Einloggen mit" msgstr "Einloggen mit"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:36 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:35
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:55 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:55
msgid "Or" msgid "Or"
msgstr "Oder" msgstr "Oder"
@@ -314,12 +316,12 @@ msgstr "Oder"
msgid "Log In" msgid "Log In"
msgstr "Einloggen" msgstr "Einloggen"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:59 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:60
#, python-format #, python-format
msgid "New to %(sitename)s?" msgid "New to %(sitename)s?"
msgstr "Neu im %(sitename)s?" msgstr "Neu im %(sitename)s?"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:70
msgid "Forgot password?" msgid "Forgot password?"
msgstr "Passwort vergessen" msgstr "Passwort vergessen"
@@ -373,3 +375,20 @@ msgstr "RDM DOI Abzeichen"
msgid "DOI" msgid "DOI"
msgstr "DOI" msgstr "DOI"
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/landingpage/detail.html:44
msgid "Open Access"
msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/landingpage/doi.html:37
msgid "No minted DOI"
msgstr ""
#~ msgid "Version"
#~ msgstr "Version"
#~ msgid ""
#~ "\n"
#~ " Uploaded on %(date)s\n"
#~ " "
#~ msgstr "Hochgeladen am %(date)s\n"

View File

@@ -7,9 +7,9 @@
#, fuzzy #, fuzzy
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: invenio-theme-tugraz 1.3.1\n" "Project-Id-Version: invenio-theme-tugraz 1.9.3\n"
"Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n" "Report-Msgid-Bugs-To: mojib.wali@tugraz.at\n"
"POT-Creation-Date: 2021-01-04 14:18+0100\n" "POT-Creation-Date: 2021-03-19 10:53+0100\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -18,21 +18,21 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"Generated-By: Babel 2.9.0\n" "Generated-By: Babel 2.9.0\n"
#: invenio_theme_tugraz/config.py:13 invenio_theme_tugraz/config.py:50 #: invenio_theme_tugraz/config.py:14 invenio_theme_tugraz/config.py:54
msgid "TU Graz Repository" msgid "TU Graz Repository"
msgstr "" msgstr ""
#: invenio_theme_tugraz/config.py:53 #: invenio_theme_tugraz/config.py:57
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:31 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:30
msgid "Repository" msgid "Repository"
msgstr "" msgstr ""
#: invenio_theme_tugraz/config.py:76 #: invenio_theme_tugraz/config.py:80
msgid "German" msgid "German"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/accounts_base.html:27 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/accounts_base.html:26
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/base.html:27 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/base.html:26
msgid "Invenio" msgid "Invenio"
msgstr "" msgstr ""
@@ -102,176 +102,178 @@ msgstr ""
msgid "All uploads display standards compliant usage statistics" msgid "All uploads display standards compliant usage statistics"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:34 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:33
msgid "Impressum" msgid "Impressum"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:38 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:37
msgid "Data protection" msgid "Data protection"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:42 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:41
msgid "Feedback" msgid "Feedback"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:51 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:50
msgid "Features" msgid "Features"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:53 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:52
msgid "Scalability" msgid "Scalability"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:55 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:54
msgid "Institutional integration" msgid "Institutional integration"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:57 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:56
msgid "Next Generation Repository" msgid "Next Generation Repository"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:60 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:59
msgid "Repository Profiles" msgid "Repository Profiles"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:62 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:61
msgid "Resilient" msgid "Resilient"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:68
msgid "Connected Services" msgid "Connected Services"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:73 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:72
msgid "PURE" msgid "PURE"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:76 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:75
msgid "CampusOnline" msgid "CampusOnline"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:79 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:78
msgid "Research Data Management" msgid "Research Data Management"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:85
msgid "Accessibility" msgid "Accessibility"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "Tipp:" msgid "Tipp:"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "Use Ctrl + and Crtl -" msgid "Use Ctrl + and Crtl -"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:87 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/footer.html:86
msgid "to change the font size." msgid "to change the font size."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:35 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:34
msgid "Home" msgid "Home"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:48 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/header.html:47
msgid "Uploads" msgid "Uploads"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:24 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:27
msgid "Type and press enter to search" msgid "Type and press enter to search"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:40 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:43
msgid "Recent uploads" msgid "Recent uploads"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:52 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:47
msgid "There are no public records to show."
msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:61
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/record_landing_page.html:33
msgid "Publication date" msgid "Publication date"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:57 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:66
msgid "Version" #: invenio_theme_tugraz/templates/invenio_theme_tugraz/record_landing_page.html:38
msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:62
msgid "Resource type" msgid "Resource type"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:91 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:99
#, python-format #, python-format
msgid "" msgid ""
"\n" "\n"
" Uploaded on %(date)s\n" " Uploaded on %(date)s\n"
" " " "
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:110 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:126
msgid "More" msgid "More"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:119 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136
msgid "Need help?" msgid "Need help?"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:123 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:140
msgid "Contact us" msgid "Contact us"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:127 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:145
msgid "prioritizes all Recent uploads." msgid "prioritizes all Recent uploads."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:130 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:148
msgid "We can help with:" msgid "We can help with:"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:135 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:153
msgid "Uploading your research data, software, preprints, etc." msgid "Uploading your research data, software, preprints, etc."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:154
msgid "One-on-one with" msgid "One-on-one with"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:136 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:154
msgid "supporters." msgid "supporters."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:137 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:155
msgid "Quota increases beyond our default policy." msgid "Quota increases beyond our default policy."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:138 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:156
msgid "Scripts for automated uploading of larger datasets." msgid "Scripts for automated uploading of larger datasets."
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:143 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/index.html:161
msgid "Why use" msgid "Why use"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:67 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:66
msgid "REPOSITORY" msgid "REPOSITORY"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:68
msgid "LIBRARY & ARCHIVES" msgid "LIBRARY & ARCHIVES"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:79 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:78
msgid "SCIENCE" msgid "SCIENCE"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:80 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:79
msgid "PASSION" msgid "PASSION"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:81 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/navbar.html:80
msgid "TECHNOLOGY" msgid "TECHNOLOGY"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/header_login.html:8 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/header_login.html:8
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:60 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:61
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:81 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:81
msgid "Sign up" msgid "Sign up"
msgstr "" msgstr ""
@@ -284,16 +286,16 @@ msgstr ""
msgid "Sign out" msgid "Sign out"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:24 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:23
msgid "Log in to Repository" msgid "Log in to Repository"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:32 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:30
#, python-format #, python-format
msgid " Log in with %(type)s" msgid " Log in with %(type)s"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:36 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:35
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:55 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/register_user.html:55
msgid "Or" msgid "Or"
msgstr "" msgstr ""
@@ -302,12 +304,12 @@ msgstr ""
msgid "Log In" msgid "Log In"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:59 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:60
#, python-format #, python-format
msgid "New to %(sitename)s?" msgid "New to %(sitename)s?"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:69 #: invenio_theme_tugraz/templates/invenio_theme_tugraz/accounts/login_user.html:70
msgid "Forgot password?" msgid "Forgot password?"
msgstr "" msgstr ""
@@ -357,3 +359,11 @@ msgstr ""
msgid "DOI" msgid "DOI"
msgstr "" msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/landingpage/detail.html:44
msgid "Open Access"
msgstr ""
#: invenio_theme_tugraz/templates/invenio_theme_tugraz/landingpage/doi.html:37
msgid "No minted DOI"
msgstr ""

View File

@@ -12,4 +12,4 @@ This file is imported by ``invenio_theme_tugraz.__init__``,
and parsed by ``setup.py``. and parsed by ``setup.py``.
""" """
__version__ = "1.9.1" __version__ = "2.0.0"

View File

@@ -12,8 +12,9 @@ import binascii
from os import environ from os import environ
from typing import Dict from typing import Dict
import requests
from elasticsearch_dsl.utils import AttrDict from elasticsearch_dsl.utils import AttrDict
from flask import Blueprint, current_app, g, render_template from flask import Blueprint, current_app, g, render_template, request
from flask_login import login_required from flask_login import login_required
from flask_menu import current_menu from flask_menu import current_menu
from invenio_app_rdm.records_ui.views.decorators import ( from invenio_app_rdm.records_ui.views.decorators import (
@@ -21,18 +22,17 @@ from invenio_app_rdm.records_ui.views.decorators import (
pass_record, pass_record,
pass_record_files, pass_record_files,
service, service,
user_permissions,
) )
from invenio_app_rdm.records_ui.views.deposits import ( from invenio_app_rdm.records_ui.views.deposits import (
get_form_config, get_form_config,
get_search_url, get_search_url,
new_record, new_record,
) )
from invenio_rdm_records.proxies import current_rdm_records
from invenio_rdm_records.resources.config import RDMDraftFilesResourceConfig from invenio_rdm_records.resources.config import RDMDraftFilesResourceConfig
from invenio_rdm_records.resources.serializers import UIJSONSerializer from invenio_rdm_records.resources.serializers import UIJSONSerializer
from invenio_rdm_records.services import RDMDraftFilesService from invenio_rdm_records.services import RDMDraftFilesService
from .crypto import Cryptor
from .search import FrontpageRecordsSearch from .search import FrontpageRecordsSearch
@@ -51,6 +51,7 @@ def ui_blueprint(app):
blueprint.add_url_rule(routes["comingsoon"], view_func=comingsoon) blueprint.add_url_rule(routes["comingsoon"], view_func=comingsoon)
blueprint.add_url_rule(routes["deposit_create"], view_func=deposit_create) blueprint.add_url_rule(routes["deposit_create"], view_func=deposit_create)
blueprint.add_url_rule(routes["record_detail"], view_func=record_detail) blueprint.add_url_rule(routes["record_detail"], view_func=record_detail)
blueprint.add_url_rule(routes["getdoi"], view_func=retrieve_doi, methods=["POST"])
@blueprint.app_template_filter("make_dict_like") @blueprint.app_template_filter("make_dict_like")
def make_dict_like(value: str, key: str) -> Dict[str, str]: def make_dict_like(value: str, key: str) -> Dict[str, str]:
@@ -83,22 +84,42 @@ def comingsoon():
def get_datacite_details(): def get_datacite_details():
"""Application credentials for DOI.""" """Application credentials for DOI."""
url = environ.get('INVENIO_DATACITE_URL') or "" prefix = environ.get("INVENIO_DATACITE_PREFIX")
username = environ.get('INVENIO_DATACITE_UNAME') or "" suffix = environ.get("INVENIO_DATACITE_SUFFIX")
password = environ.get('INVENIO_DATACITE_PASS') or ""
prefix = environ.get('INVENIO_DATACITE_PREFIX') or ""
password_iv, encrypted_password = Cryptor.encrypt(password, Cryptor.KEY)
details = { details = {
"datacite_url": url,
"datacite_uname": username,
"datacite_pass": binascii.b2a_base64(encrypted_password).rstrip(),
"datacite_prefix": prefix, "datacite_prefix": prefix,
"datacite_password_iv": password_iv, "datacite_suffix": suffix,
} }
return details return details
@login_required
def retrieve_doi():
"""Retrieve DOI from datacite API."""
doi_metadata = request.get_json()
url = environ.get("INVENIO_DATACITE_URL")
username = environ.get("INVENIO_DATACITE_UNAME")
password = environ.get("INVENIO_DATACITE_PASS")
doi_response = requests.post(
url,
auth=(username, password),
json=doi_metadata,
)
response_data = {"code": doi_response.status_code}
try:
doi_response.raise_for_status()
response_data["data"] = doi_response.json()
except requests.exceptions.RequestException:
response_data["errors"] = doi_response.json()["errors"]
return response_data, response_data["code"]
# #
# TODO: change this override behaviour once # TODO: change this override behaviour once
# PR is merged: # PR is merged:
@@ -125,9 +146,7 @@ def deposit_create():
@pass_draft @pass_draft
def deposit_edit(draft=None, pid_value=None): def deposit_edit(draft=None, pid_value=None):
"""Edit an existing deposit.""" """Edit an existing deposit."""
# TODO: should be embedded in record service files_list = current_rdm_records.draft_files_service.list_files(
files_service = RDMDraftFilesService()
files_list = files_service.list_files(
id_=pid_value, id_=pid_value,
identity=g.identity, identity=g.identity,
links_config=RDMDraftFilesResourceConfig.links_config, links_config=RDMDraftFilesResourceConfig.links_config,
@@ -136,14 +155,6 @@ def deposit_edit(draft=None, pid_value=None):
serializer = UIJSONSerializer() serializer = UIJSONSerializer()
record = serializer.serialize_object_to_dict(draft.to_dict()) record = serializer.serialize_object_to_dict(draft.to_dict())
# TODO: get the `is_published` field when reading the draft
from invenio_pidstore.errors import PIDUnregistered
try:
service().draft_cls.pid.resolve(pid_value, registered_only=True)
record["is_published"] = True
except PIDUnregistered:
record["is_published"] = False
forms_config = get_form_config(apiUrl=f"/api/records/{pid_value}/draft") forms_config = get_form_config(apiUrl=f"/api/records/{pid_value}/draft")
forms_config["data_cite"] = get_datacite_details() forms_config["data_cite"] = get_datacite_details()
@@ -153,13 +164,13 @@ def deposit_edit(draft=None, pid_value=None):
record=record, record=record,
files=files_list.to_dict(), files=files_list.to_dict(),
searchbar_config=dict(searchUrl=get_search_url()), searchbar_config=dict(searchUrl=get_search_url()),
permissions=draft.has_permissions_to(['new_version'])
) )
@pass_record @pass_record
@pass_record_files @pass_record_files
@user_permissions(actions=['update_draft']) def record_detail(record=None, files=None, pid_value=None):
def record_detail(record=None, files=None, pid_value=None, permissions=None):
"""Record detail page (aka landing page).""" """Record detail page (aka landing page)."""
files_dict = None if files is None else files.to_dict() files_dict = None if files is None else files.to_dict()
return render_template( return render_template(
@@ -167,5 +178,5 @@ def record_detail(record=None, files=None, pid_value=None, permissions=None):
record=UIJSONSerializer().serialize_object_to_dict(record.to_dict()), record=UIJSONSerializer().serialize_object_to_dict(record.to_dict()),
pid=pid_value, pid=pid_value,
files=files_dict, files=files_dict,
permissions=permissions, permissions=record.has_permissions_to(['edit', 'new_version']),
) )

View File

@@ -32,7 +32,7 @@ theme = WebpackThemeBundle(
'prop-types': '^15.7.2', 'prop-types': '^15.7.2',
'react-dnd': '^11.1.3', 'react-dnd': '^11.1.3',
'react-dnd-html5-backend': '^11.1.3', 'react-dnd-html5-backend': '^11.1.3',
'react-invenio-deposit': '^0.11.10', 'react-invenio-deposit': '^0.12.0',
'react-invenio-forms': '^0.6.3', 'react-invenio-forms': '^0.6.3',
'react-dropzone': "^11.0.3", 'react-dropzone': "^11.0.3",
'yup': '^0.27.0', 'yup': '^0.27.0',
@@ -40,7 +40,7 @@ theme = WebpackThemeBundle(
'@ckeditor/ckeditor5-react': '^2.1.0', '@ckeditor/ckeditor5-react': '^2.1.0',
# datacite - rest api plugin # datacite - rest api plugin
'datacite-rest': '^0.1.4', 'datacite-rest': '^0.1.7',
}, },
) )

View File

@@ -20,9 +20,9 @@ tests_require = [
"invenio-app>=1.3.0,<2.0.0", "invenio-app>=1.3.0,<2.0.0",
] ]
# Should follow inveniosoftware/invenio versions # Should follow invenio-app-rdm
invenio_search_version = ">=1.4.0,<2.0.0" invenio_search_version = ">=1.4.0,<1.5.0"
invenio_db_version = ">=1.0.5,<2.0.0" invenio_db_version = ">=1.0.9,<1.1.0"
extras_require = { extras_require = {
"elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"], "elasticsearch7": [f"invenio-search[elasticsearch7]{invenio_search_version}"],
@@ -58,10 +58,9 @@ install_requires = [
"invenio-i18n>=1.2.0", "invenio-i18n>=1.2.0",
"elasticsearch_dsl>=7.2.1", "elasticsearch_dsl>=7.2.1",
"invenio_search>=1.4.0,<2.0.0", "invenio_search>=1.4.0,<2.0.0",
"invenio_config_tugraz>=0.5.1",
# keep this package updated. # keep this package updated.
"invenio_app_rdm<=1.0.0", "invenio_app_rdm==2.0.1",
# needed for DOI credential encryption
"pycryptodome==3.10.1",
] ]
packages = find_packages() packages = find_packages()