diff --git a/CHANGELOG.md b/CHANGELOG.md index 7992ff6..b21fcc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,18 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/spec/v2.0.0.ht --- +## [2.18.0] — 2026-07-09 + +### 💅 Changed — Download-Card (`[odw_dataset]`) neu gestaltet +- **Datensatzname groß** oben, rechts daneben ein Link **„Metadaten JSON"** (lädt das JSON-LD herunter). +- Prominenter **Download-Button** zur bereitgestellten Datei (Download-URL → Mediathek-Datei → Zugriffs-URL). +- Darunter **bunte Badges** in kleiner Schrift: **Dateiformat · Dateigröße · Lizenz**. +- **Aufklappbares Accordion** („Alle Metadaten anzeigen") mit **allen angegebenen Metadatenfeldern** + (Herausgeber, Beschreibung, Thema, CESSDA, Sprache, Schlagworte, URLs, Format, Zeitraum, Kontakt u. v. m.). +- Frontend-CSS entsprechend überarbeitet; 18 neue UI-Strings in `en_US` übersetzt. + +--- + ## [2.17.0] — 2026-07-09 ### ✨ Added diff --git a/README.md b/README.md index 16cfd90..3483be4 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ ![PHP Version](https://img.shields.io/badge/PHP-%3E%3D%208.1-8892BF?style=flat-square&logo=php&logoColor=white) ![WordPress](https://img.shields.io/badge/WordPress-compatible-21759B?style=flat-square&logo=wordpress&logoColor=white) ![DCAT-AP](https://img.shields.io/badge/DCAT--AP-3.0-brightgreen?style=flat-square) -![Version](https://img.shields.io/badge/Version-2.17.0-brightgreen?style=flat-square) +![Version](https://img.shields.io/badge/Version-2.18.0-brightgreen?style=flat-square) ![PRs Welcome](https://img.shields.io/badge/PRs-willkommen-brightgreen?style=flat-square) 📖 [Dokumentation](DOCUMENTATION.md) · 📐 [Technische Spezifikation](TECHNICAL-SPEC.md) · 📝 [Changelog](CHANGELOG.md) · 🛡️ [Security](SECURITY.md) · ⚖️ [Lizenz](LICENSE) diff --git a/assets/css/frontend.css b/assets/css/frontend.css index 46add5b..036aa55 100644 --- a/assets/css/frontend.css +++ b/assets/css/frontend.css @@ -1,161 +1,166 @@ /** * Open Data Wizard — Frontend Styles (Download-Card) * - * Nur strukturelle Styles (Abstände, Layout, Rahmen). - * Farben und Schriften werden vom aktiven Theme geerbt. + * Aufbau: Name groß + „Metadaten JSON" rechts · Download-Button · bunte Badges + * (Format/Größe/Lizenz) · Accordion mit allen Metadatenfeldern. + * + * Struktur erbt Theme-Farben (currentColor); die Badges und der Download-Button + * verwenden bewusst eigene Akzentfarben, damit sie „bunt" hervorstechen. */ -/* ========================================================================= - Download-Card - ========================================================================= */ - .odw-download-card { - border: 1px solid currentColor; - border-radius: 4px; - padding: 1.25rem; + border: 1px solid rgba(128, 128, 128, 0.35); + border-radius: 8px; + padding: 1.25rem 1.4rem; margin: 1.5rem 0; - opacity: 0.99; /* Stacking context für border-color inherit */ } -/* Header: Titel + Thema-Badge nebeneinander */ -.odw-download-card__header { +/* --- Kopf: Titel groß + Metadaten-JSON-Link rechts --- */ +.odw-download-card__top { display: flex; flex-wrap: wrap; - align-items: flex-start; + align-items: baseline; justify-content: space-between; - gap: 0.5rem 0.75rem; - margin-bottom: 0.875rem; + gap: 0.4rem 1rem; + margin-bottom: 1rem; } .odw-download-card__title { margin: 0; - font-size: 1.1em; - font-weight: 600; - line-height: 1.3; + font-size: 1.6em; + font-weight: 700; + line-height: 1.25; flex: 1 1 auto; } -.odw-download-card__theme { +.odw-download-card__metajson { flex-shrink: 0; - display: inline-block; - padding: 0.2em 0.65em; - border: 1px solid currentColor; - border-radius: 99px; - font-size: 0.8em; - opacity: 0.65; + font-size: 0.82em; + text-decoration: none; + opacity: 0.75; white-space: nowrap; } -/* Metadaten-Liste */ -.odw-download-card__meta { - display: grid; - grid-template-columns: max-content 1fr; - gap: 0.3rem 1rem; - margin: 0 0 1rem; - padding: 0; - font-size: 0.9em; -} - -.odw-download-card__meta-row { - display: contents; +.odw-download-card__metajson:hover { + opacity: 1; + text-decoration: underline; } -.odw-download-card__meta dt { - font-weight: 500; - opacity: 0.65; +/* --- Download-Button (Akzent) --- */ +.odw-download-card__download { + display: inline-block; + padding: 0.6em 1.4em; + background: #2563eb; + color: #fff; + border-radius: 6px; + font-weight: 600; + font-size: 1em; + text-decoration: none; + line-height: 1.3; + transition: background 0.15s ease; } -.odw-download-card__meta dd { - margin: 0; +.odw-download-card__download:hover, +.odw-download-card__download:focus { + background: #1d4ed8; + color: #fff; } -/* Footer: Download-Button + Datei-Info */ -.odw-download-card__footer { +/* --- Bunte Badges: Format · Größe · Lizenz --- */ +.odw-download-card__badges { display: flex; flex-wrap: wrap; - align-items: center; - gap: 0.625rem; - padding-top: 0.875rem; - border-top: 1px solid currentColor; - opacity: inherit; + gap: 0.4rem; + margin: 0.9rem 0 0; } -.odw-download-card__button { +.odw-badge { display: inline-block; - padding: 0.45em 1.1em; - border: 1px solid currentColor; - border-radius: 3px; + padding: 0.2em 0.7em; + border-radius: 99px; + font-size: 0.78em; font-weight: 600; - font-size: 0.9em; - text-decoration: none; - line-height: 1.4; + line-height: 1.5; } -.odw-download-card__button:hover { - opacity: 0.8; -} +.odw-badge--format { background: #e7f0fd; color: #1c4e80; } +.odw-badge--size { background: #e6f4ea; color: #1a7f37; } +.odw-badge--license { background: #fdf3e2; color: #8a5a00; } -.odw-download-card__file-info { - font-size: 0.85em; - opacity: 0.65; +/* --- Accordion mit allen Metadatenfeldern --- */ +.odw-download-card__details { + margin-top: 1.1rem; + border-top: 1px solid rgba(128, 128, 128, 0.25); + padding-top: 0.75rem; } -.odw-download-card__button--meta { - margin-left: auto; - font-weight: normal; - opacity: 0.75; - font-size: 0.85em; +.odw-download-card__details summary { + cursor: pointer; + font-size: 0.9em; + font-weight: 600; + opacity: 0.85; + list-style-position: inside; } -.odw-download-card__button--meta:hover { +.odw-download-card__details summary:hover { opacity: 1; } -/* Keywords */ -.odw-download-card__keywords { - display: flex; - flex-wrap: wrap; - gap: 0.35rem; - margin-bottom: 1rem; +.odw-download-card__details[open] summary { + margin-bottom: 0.75rem; } -.odw-download-card__keyword { - display: inline-block; - padding: 0.15em 0.6em; - border: 1px solid currentColor; - border-radius: 99px; - font-size: 0.8em; +.odw-download-card__metalist { + display: grid; + grid-template-columns: max-content 1fr; + gap: 0.45rem 1.1rem; + margin: 0; + font-size: 0.9em; +} + +.odw-metarow { + display: contents; +} + +.odw-download-card__metalist dt { + font-weight: 600; opacity: 0.6; } +.odw-download-card__metalist dd { + margin: 0; + word-break: break-word; +} + +.odw-download-card__metalist a { + word-break: break-all; +} + /* ========================================================================= Responsive ========================================================================= */ @media screen and (max-width: 480px) { - .odw-download-card__header { - flex-direction: column; - } - - .odw-download-card__meta { - grid-template-columns: 1fr; - gap: 0; + .odw-download-card__title { + font-size: 1.35em; } - .odw-download-card__meta-row { + .odw-download-card__download { display: block; - margin-bottom: 0.4rem; + text-align: center; } - .odw-download-card__meta dt { - display: inline; + .odw-download-card__metalist { + grid-template-columns: 1fr; + gap: 0; } - .odw-download-card__meta dt::after { - content: ': '; + .odw-metarow { + display: block; + margin-bottom: 0.5rem; } - .odw-download-card__meta dd { - display: inline; + .odw-download-card__metalist dt { + display: block; } } diff --git a/includes/class-shortcode.php b/includes/class-shortcode.php index a43150d..5fb30cc 100644 --- a/includes/class-shortcode.php +++ b/includes/class-shortcode.php @@ -2,15 +2,15 @@ /** * Shortcode [odw_dataset id="…"] — Download-Card für Frontend * - * Liest Metadaten direkt via get_post_meta(); keine Carbon Fields Abhängigkeit. + * Liest Metadaten via Carbon Fields / get_post_meta(); keine harte CF-Abhängigkeit. * - * Datei-Metadaten (_odw_file_size, _odw_file_format) werden seit v1.8.0 beim - * Speichern vorberechnet (ODW_Admin::save_file_attachment) und hier direkt - * gelesen. Für ältere Datensätze ohne diese Meta-Einträge greift ein Fallback - * auf filesize()/pathinfo() zur Laufzeit. + * Aufbau der Karte (v2.18.0): + * 1. Datensatzname (groß) + Link „Metadaten JSON" (rechts) + * 2. Download-Button zur bereitgestellten Datei + * 3. Bunte Badges: Dateiformat · Dateigröße · Lizenz + * 4. Aufklappbares Accordion mit allen angegebenen Metadatenfeldern * - * CSS wird lazy per wp_register_style / wp_enqueue_style eingebunden: - * assets/css/frontend.css wird nur auf Seiten geladen, die den Shortcode rendern. + * CSS wird lazy eingebunden: assets/css/frontend.css nur auf Seiten mit Shortcode. * * @package OpenDataWizard */ @@ -37,8 +37,7 @@ public static function init(): void { } /** - * Nur registrieren — tatsächlich eingebunden wird erst beim Rendern, - * damit CSS nur auf Seiten geladen wird, die den Shortcode verwenden. + * Nur registrieren — tatsächlich eingebunden wird erst beim Rendern. */ public static function register_assets(): void { wp_register_style( @@ -49,6 +48,20 @@ public static function register_assets(): void { ); } + /** + * Reads a Carbon Fields value with a get_post_meta fallback. + * + * @param int $post_id Post ID. + * @param string $key Carbon field key (e.g. 'odw_publisher'). + * @return string + */ + private static function meta( int $post_id, string $key ): string { + if ( function_exists( 'carbon_get_post_meta' ) ) { + return trim( (string) carbon_get_post_meta( $post_id, $key ) ); + } + return trim( (string) get_post_meta( $post_id, '_' . $key, true ) ); + } + /** * Shortcode-Handler — gibt HTML zurück, kein direktes echo. * @@ -71,27 +84,22 @@ public static function render( $atts ): string { wp_enqueue_style( 'odw-frontend' ); - // --- Metadaten --- - $title = get_the_title( $post ); - $theme = (string) get_post_meta( $post_id, '_odw_theme', true ); - $file_id = (int) get_post_meta( $post_id, '_odw_file_id', true ); + $title = get_the_title( $post ); - // License from post meta. + // --- License label --- $license_label = ''; - if ( function_exists( 'carbon_get_post_meta' ) ) { - $license_uri = (string) carbon_get_post_meta( $post_id, 'odw_license' ); - if ( 'sonstige' === $license_uri ) { - $license_label = (string) carbon_get_post_meta( $post_id, 'odw_license_custom' ); - } elseif ( '' !== $license_uri ) { - $license_label = ODW_Fields::get_license_label( $license_uri ); + $license_uri = self::meta( $post_id, 'odw_license' ); + if ( 'sonstige' === $license_uri ) { + $license_label = self::meta( $post_id, 'odw_license_custom' ); + if ( class_exists( 'ODW_Fields' ) && '' !== $license_label ) { + $license_label = ODW_Fields::get_license_label( $license_label ); } + } elseif ( '' !== $license_uri && class_exists( 'ODW_Fields' ) ) { + $license_label = ODW_Fields::get_license_label( $license_uri ); } - // Keywords: newline-separated string → array of trimmed, non-empty values. - $keywords_raw = (string) get_post_meta( $post_id, '_odw_keywords', true ); - $keywords = array_filter( array_map( 'trim', explode( "\n", $keywords_raw ) ) ); - - // --- Datei-Informationen aus der Mediathek --- + // --- File (media library) --- + $file_id = (int) get_post_meta( $post_id, '_odw_file_id', true ); $file_url = ''; $file_size = ''; $file_format = ''; @@ -99,9 +107,7 @@ public static function render( $atts ): string { if ( $file_id > 0 ) { $url = wp_get_attachment_url( $file_id ); if ( $url ) { - $file_url = $url; - - // Use pre-computed meta (set on save) — fall back to runtime on old entries. + $file_url = $url; $stored_format = (string) get_post_meta( $post_id, '_odw_file_format', true ); $file_format = $stored_format ? $stored_format : strtoupper( (string) pathinfo( $url, PATHINFO_EXTENSION ) ); @@ -117,72 +123,172 @@ public static function render( $atts ): string { } } + // Format from the form takes precedence over the derived file extension. + $form_format = self::meta( $post_id, 'odw_format' ); + if ( '' !== $form_format ) { + $file_format = $form_format; + } + + // byteSize from the form when no media-library size is available. + if ( '' === $file_size ) { + $byte_size = (int) self::meta( $post_id, 'odw_byte_size' ); + if ( $byte_size > 0 ) { + $file_size = self::format_bytes( $byte_size ); + } + } + + // --- Download target: downloadURL → media file → accessURL --- + $download_url = self::meta( $post_id, 'odw_download_url' ); + if ( '' === $download_url ) { + $download_url = '' !== $file_url ? $file_url : self::meta( $post_id, 'odw_access_url' ); + } + $metadata_url = rest_url( 'datenatlas/v1/datasets/' . $post_id ); + $meta_rows = self::collect_metadata_rows( $post_id, $license_label, $file_size ); - // --- HTML aufbauen --- + // --- HTML --- ob_start(); ?>
-
-

- - - + - -
-
-
-
-
-
+ + + + - -
- - + +
+ +
- + +
+ +
+ +
+
+
+ %s', + esc_url( $row['value'] ), + esc_html( $row['value'] ) + ); + } else { + echo nl2br( esc_html( $row['value'] ) ); + } + ?> +
+
+ +
+
+
+ */ + private static function collect_metadata_rows( int $post_id, string $license_label, string $file_size ): array { + $rows = array(); + + $add = static function ( string $label, string $value, bool $url = false ) use ( &$rows ): void { + if ( '' !== trim( $value ) ) { + $rows[] = array( + 'label' => $label, + 'value' => trim( $value ), + 'url' => $url, + ); + } + }; + + $add( __( 'Herausgeber', 'open-data-wizard' ), self::meta( $post_id, 'odw_publisher' ) ); + $add( __( 'Beschreibung', 'open-data-wizard' ), self::meta( $post_id, 'odw_description' ) ); + $add( __( 'Thema', 'open-data-wizard' ), self::meta( $post_id, 'odw_theme' ) ); + $add( __( 'CESSDA-Themenfeld', 'open-data-wizard' ), self::meta( $post_id, 'odw_cessda_topic' ), true ); + $add( __( 'Sprache', 'open-data-wizard' ), self::meta( $post_id, 'odw_language' ), true ); + + $keywords = array_filter( array_map( 'trim', explode( "\n", self::meta( $post_id, 'odw_keywords' ) ) ) ); + $add( __( 'Schlagworte', 'open-data-wizard' ), implode( ', ', $keywords ) ); + + $add( __( 'Zugriffs-URL', 'open-data-wizard' ), self::meta( $post_id, 'odw_access_url' ), true ); + $add( __( 'Download-URL', 'open-data-wizard' ), self::meta( $post_id, 'odw_download_url' ), true ); + $add( __( 'Format', 'open-data-wizard' ), self::meta( $post_id, 'odw_format' ) ); + $add( __( 'Media-Type', 'open-data-wizard' ), self::meta( $post_id, 'odw_media_type' ), true ); + $add( __( 'Dateigröße', 'open-data-wizard' ), $file_size ); + $add( __( 'Lizenz', 'open-data-wizard' ), $license_label ); + $add( __( 'Namensnennung', 'open-data-wizard' ), self::meta( $post_id, 'odw_attribution_text' ) ); + $add( __( 'Zugriffsrechte', 'open-data-wizard' ), self::meta( $post_id, 'odw_access_rights' ), true ); + + $add( __( 'Räumliche Abdeckung', 'open-data-wizard' ), self::meta( $post_id, 'odw_spatial' ) ); + + $t_start = self::meta( $post_id, 'odw_temporal_start' ); + $t_end = self::meta( $post_id, 'odw_temporal_end' ); + if ( '' !== $t_start || '' !== $t_end ) { + $add( __( 'Zeitraum', 'open-data-wizard' ), trim( $t_start . ' – ' . $t_end, ' –' ) ); + } + + $add( __( 'Veröffentlicht', 'open-data-wizard' ), self::meta( $post_id, 'odw_issued' ) ); + $add( __( 'Aktualisiert', 'open-data-wizard' ), self::meta( $post_id, 'odw_modified' ) ); + $add( __( 'Projektseite', 'open-data-wizard' ), self::meta( $post_id, 'odw_landing_page' ), true ); + $add( __( 'Aktualisierungsfrequenz', 'open-data-wizard' ), self::meta( $post_id, 'odw_accrual_periodicity' ), true ); + $add( __( 'Urheber', 'open-data-wizard' ), self::meta( $post_id, 'odw_originator_name' ) ); + $add( __( 'Pflegende Stelle', 'open-data-wizard' ), self::meta( $post_id, 'odw_maintainer_name' ) ); + + $contact = array_filter( + array( + self::meta( $post_id, 'odw_contact_name' ), + self::meta( $post_id, 'odw_contact_email' ), + ) + ); + $add( __( 'Kontakt', 'open-data-wizard' ), implode( ' · ', $contact ) ); + $add( __( 'Kontakt-Website', 'open-data-wizard' ), self::meta( $post_id, 'odw_contact_url' ), true ); + + return $rows; + } + /** * Formatiert eine Byte-Anzahl als lesbare Größenangabe (B / KB / MB / GB). * diff --git a/languages/open-data-wizard-en_US.mo b/languages/open-data-wizard-en_US.mo index 83e1647..8bc337a 100644 Binary files a/languages/open-data-wizard-en_US.mo and b/languages/open-data-wizard-en_US.mo differ diff --git a/languages/open-data-wizard-en_US.po b/languages/open-data-wizard-en_US.po index bce0e5a..796b80e 100644 --- a/languages/open-data-wizard-en_US.po +++ b/languages/open-data-wizard-en_US.po @@ -66,15 +66,24 @@ msgstr "Coverage" msgid "AccessURL erreichbar (dcat:accessURL)" msgstr "AccessURL reachable (dcat:accessURL)" +msgid "Aktualisiert" +msgstr "Updated" + msgid "Aktualisiert sich automatisch, während Sie die Felder ausfüllen — ohne Speichern." msgstr "Updates automatically as you fill in the fields — no saving required." +msgid "Aktualisierungsfrequenz" +msgstr "Update frequency" + msgid "Alle Datensätze" msgstr "All Datasets" msgid "Alle Datensätze, Metadaten und Plugin-Optionen beim Deinstallieren unwiderruflich löschen." msgstr "Irreversibly delete all datasets, metadata and plugin options on uninstall." +msgid "Alle Metadaten anzeigen" +msgstr "Show all metadata" + msgid "Alle Pflichtangaben ausgefüllt" msgstr "All required fields completed" @@ -237,6 +246,9 @@ msgstr "CESSDA Topic Classification" msgid "CESSDA-THEMENKLASSIFIKATION (dct:subject)" msgstr "CESSDA TOPIC CLASSIFICATION (dct:subject)" +msgid "CESSDA-Themenfeld" +msgstr "CESSDA topic" + msgid "CONTRIBUTOR-ID (dcatde:contributorID)" msgstr "CONTRIBUTOR ID (dcatde:contributorID)" @@ -291,6 +303,9 @@ msgstr "Select / upload file" msgid "Datei auswählen oder hochladen" msgstr "Select or upload file" +msgid "Datei herunterladen" +msgstr "Download file" + msgid "Datei hochladen" msgstr "Upload file" @@ -423,6 +438,9 @@ msgstr "Distribution — advanced" msgid "Download-Datei (Mediathek)" msgstr "Download file (media library)" +msgid "Download-URL" +msgstr "Download URL" + msgid "Download-URL, Format, Dateigröße, Lizenz und Zuschreibungstext." msgstr "Download URL, format, file size, license and attribution text." @@ -765,6 +783,9 @@ msgstr "Click to select" msgid "Kontakt" msgstr "Contact" +msgid "Kontakt-Website" +msgstr "Contact website" + msgid "Kontaktpunkt (dcat:contactPoint)" msgstr "Contact point (dcat:contactPoint)" @@ -840,12 +861,18 @@ msgstr "Maximum of %d datasets reached — further elements were ignored." msgid "Maximale Anzahl von %d Datensätzen erreicht — weitere Zeilen wurden ignoriert." msgstr "Maximum of %d datasets reached — further rows were ignored." +msgid "Media-Type" +msgstr "Media type" + msgid "Media-Type gesetzt (dcat:mediaType)" msgstr "Media type set (dcat:mediaType)" msgid "Metadaten (JSON-LD)" msgstr "Metadata (JSON-LD)" +msgid "Metadaten JSON" +msgstr "Metadata JSON" + msgid "Metadaten des Datenkatalogs — erscheinen in der REST-API-Antwort des Catalog-Endpoints." msgstr "Metadata of the data catalog — appears in the REST API response of the catalog endpoint." @@ -879,6 +906,9 @@ msgstr "Name of the publishing organization" msgid "Name oder Organisation der Ansprechperson." msgstr "Name or organization of the contact person." +msgid "Namensnennung" +msgstr "Attribution" + msgid "Nein" msgstr "No" @@ -957,12 +987,18 @@ msgstr "Pagination" msgid "Perfekt" msgstr "Perfect" +msgid "Pflegende Stelle" +msgstr "Maintainer" + msgid "Pflichtangaben" msgstr "Required information" msgid "Pflichtfelder" msgstr "Required fields" +msgid "Projektseite" +msgstr "Project page" + msgid "Projektseite & Aktualität" msgstr "Project page & timeliness" @@ -1020,6 +1056,9 @@ msgstr "Regions & Cities" msgid "RÄUMLICHE AUFLÖSUNG IN METERN (dcat:spatialResolutionInMeters)" msgstr "SPATIAL RESOLUTION IN METERS (dcat:spatialResolutionInMeters)" +msgid "Räumliche Abdeckung" +msgstr "Spatial coverage" + msgid "Räumliche Abdeckung (dct:spatial)" msgstr "Spatial coverage (dct:spatial)" @@ -1029,6 +1068,9 @@ msgstr "KEYWORDS (dcat:keyword)" msgid "SPRACHE (dct:language)" msgstr "LANGUAGE (dct:language)" +msgid "Schlagworte" +msgstr "Keywords" + msgid "Schlagworte (dcat:keyword)" msgstr "Keywords (dcat:keyword)" @@ -1056,6 +1098,9 @@ msgstr "Save the dataset to update the preview." msgid "Speichern Sie den Datensatz, um sie zu aktualisieren." msgstr "Save the dataset to update it." +msgid "Sprache" +msgstr "Language" + msgid "Sprache (dct:language)" msgstr "Language (dct:language)" @@ -1179,6 +1224,9 @@ msgstr "Under which license are these data available?" msgid "Unternehmen und Eigentümerschaft von Unternehmen" msgstr "Companies and company ownership" +msgid "Urheber" +msgstr "Originator" + msgid "VERSION (owl:versionInfo)" msgstr "VERSION (owl:versionInfo)" @@ -1413,6 +1461,9 @@ msgstr "Row %d: column count does not match." msgid "Zeitliche Abdeckung (dct:temporal)" msgstr "Temporal coverage (dct:temporal)" +msgid "Zeitraum" +msgstr "Time period" + msgid "Zu diesem Datensatz hochgeladen" msgstr "Uploaded to this dataset" @@ -1431,6 +1482,9 @@ msgstr "Access classification of the dataset. Example: Public, Restricted, Non-p msgid "Zugriffs-URL" msgstr "Access URL" +msgid "Zugriffsrechte" +msgstr "Access rights" + msgid "Zugriffsrechte aus Vokabular" msgstr "Access rights from vocabulary" diff --git a/open-data-wizard.php b/open-data-wizard.php index 9c39374..d8332ae 100644 --- a/open-data-wizard.php +++ b/open-data-wizard.php @@ -3,7 +3,7 @@ * Plugin Name: Open Data Wizard * Plugin URI: https://github.com/daimpad/OpenDataWizard * Description: DCAT-AP 3.0 konforme Open Data Metadatenverwaltung für WordPress. Bereitstellung als maschinenlesbarer JSON-LD-Endpoint für offene Daten. - * Version: 2.17.0 + * Version: 2.18.0 * Requires at least: 6.4 * Requires PHP: 8.1 * Author: nozilla @@ -26,7 +26,7 @@ exit; } -define( 'ODW_VERSION', '2.17.0' ); +define( 'ODW_VERSION', '2.18.0' ); define( 'ODW_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'ODW_PLUGIN_URL', plugin_dir_url( __FILE__ ) ); define( 'ODW_PLUGIN_FILE', __FILE__ );