diff --git a/admin/views/page-catalog.php b/admin/views/page-catalog.php index 366e5ed..d419227 100644 --- a/admin/views/page-catalog.php +++ b/admin/views/page-catalog.php @@ -2,10 +2,10 @@ /** * Admin page view: ROBOTSTXT Plugins catalog. * - * Available variables: - * $catalog list> Catalog entries from Core. - * $local array - * Local install state, keyed by slug. + * Catalog table (Plugin · Version · Requires WP · Requires PHP · Price · + * Action · Status) with an always-open detail row under each plugin + * (website link + description), an intro paragraph, and Support / + * Payments sections below the table. * * @package Robotstxt_Manager */ @@ -57,6 +57,10 @@ $compat_warnings = 0;

+

+ +

+

@@ -95,12 +99,12 @@ $compat_warnings = 0; - - + - + + @@ -129,8 +133,7 @@ $compat_warnings = 0; $req_php = is_string( $raw_rphp ) ? $raw_rphp : ''; $website_url = '' !== $page_url ? $page_url : $homepage; - $expandable = ( '' !== $desc || '' !== $website_url ); - $toggle_id = 'robotstxt-manager-toggle-' . esc_attr( $slug ); + $has_detail = ( '' !== $website_url || '' !== $desc ); // Compatibility checks. $wp_ok = '' === $req_wp || version_compare( $local_wp_version, $req_wp, '>=' ); @@ -157,25 +160,9 @@ $compat_warnings = 0; ?> - - - - - -
- - - - - 0.0 ) { - echo esc_html( sprintf( '€%s / year', number_format_i18n( $cost, 0 ) ) ); - } else { - echo '—'; - } - ?> + @@ -200,6 +187,40 @@ $compat_warnings = 0; — + + 0.0 || 'premium' === $kind ) { + echo esc_html( + sprintf( + /* translators: %s: formatted price number. */ + __( '€%s / year', 'robotstxt-manager' ), + number_format_i18n( $cost, 0 ) + ) + ); + } else { + echo esc_html__( 'Free', 'robotstxt-manager' ); + } + ?> + + + + + + + 0.0 && '' !== $page_url ) : ?> + + + 0.0 && '' !== $page_url ) ? 'button-secondary' : 'button-primary'; + ?> + + + + + + + + - - - - - - 0.0 && '' !== $page_url ) : ?> - - - 0.0 && '' !== $page_url ) ? 'button-secondary' : 'button-primary'; - ?> - - - - - - - - - + - -

- + + + @@ -256,6 +258,16 @@ $compat_warnings = 0; +

+

+ +

+ +

+

+ +

+ 0 ) : ?>

@@ -290,12 +302,7 @@ $compat_warnings = 0; .robotstxt-manager-compat-warning { cursor: help; } .robotstxt-manager-row--incompatible { background-color: #fef7f0 !important; } -/* Expandable detail rows (CSS-only toggle). */ -.robotstxt-manager-toggle { display: none; } -.robotstxt-manager-toggle-label { cursor: pointer; display: inline-block; width: 1.4em; } -.robotstxt-manager-toggle-arrow::before { content: "\25B8"; /* ▸ */ } -.robotstxt-manager-detail-row { display: none; } -.robotstxt-manager-detail-row td { border-top: none !important; } -tr:has(.robotstxt-manager-toggle:checked) + tr.robotstxt-manager-detail-row { display: table-row; } -tr:has(.robotstxt-manager-toggle:checked) .robotstxt-manager-toggle-arrow::before { content: "\25BE"; /* ▾ */ } +/* Detail rows (always open): muted, attached to the row above. */ +.robotstxt-manager-detail-row td { border-top: none !important; padding-top: 0; } +.robotstxt-manager-detail-description { color: #50575e; } diff --git a/changelog.txt b/changelog.txt index 32683dc..56d6dfd 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,5 +1,22 @@ == Changelog == += 1.0.0 = + +_Release date: 2026-08-15_ + +**Highlights** + +* Catalog page redesign. The table columns are now Plugin · Version · Requires WP · Requires PHP · Price · Action · Status: the Type column is merged into Price ("Free" for cost-0 plugins, the annual price for premium), the version moved into its own column, the action buttons sit before the status, and "Local state" is renamed "Status". Each plugin's detail row — website link first, then its description — is now **always open** (the click-to-expand toggle is gone). An intro paragraph after the page title explains the store, and Support + Payments sections below the table describe how to get help and how the annual-subscription model works (automatic renewal, cancellation from the account page, Mollie processing). + +**Changed** + +* Plugin version 0.6.0 → 1.0.0 — first stable release. No database schema changes (no custom tables). + +**Compatibility** + +* WordPress: 4.4 - 7.1 (scan-verified: wp-compat clean from 4.4) +* PHP: 8.0 - 8.5 (scan-verified: PHPCompatibility + manual feature audit) + = 0.6.0 = _Release date: 2026-08-15_ diff --git a/languages/robotstxt-manager-ca.mo b/languages/robotstxt-manager-ca.mo index 71cdb38..20a059d 100644 Binary files a/languages/robotstxt-manager-ca.mo and b/languages/robotstxt-manager-ca.mo differ diff --git a/languages/robotstxt-manager-ca.po b/languages/robotstxt-manager-ca.po index 36440aa..cd3e9bf 100644 --- a/languages/robotstxt-manager-ca.po +++ b/languages/robotstxt-manager-ca.po @@ -129,8 +129,6 @@ msgstr "Instal·lat (inactiu)" msgid "Insufficient permissions." msgstr "Permisos insuficients." -msgid "Local state" -msgstr "Estat local" msgid "Manager (by ROBOTSTXT) — Plugins" msgstr "Manager (by ROBOTSTXT) — Plugins" @@ -153,8 +151,6 @@ msgstr "El plugin no està instal·lat." msgid "Plugin not found in catalog." msgstr "Plugin no trobat al catàleg." -msgid "Premium" -msgstr "Premium" msgid "Price" msgstr "Preu" @@ -177,8 +173,6 @@ msgstr "Requereix WP" msgid "Settings" msgstr "Paràmetres" -msgid "Show more information" -msgstr "Mostra més informació" msgid "Store URL" msgstr "URL de la botiga" @@ -210,8 +204,6 @@ msgstr "Aquest lloc funciona amb WordPress %1$s i PHP %2$s." msgid "Too many refreshes. Please wait a minute before refreshing again." msgstr "Massa actualitzacions. Espera un minut abans de tornar a actualitzar." -msgid "Type" -msgstr "Tipus" msgid "Up to date" msgstr "Actualitzat" @@ -233,3 +225,27 @@ msgstr "El teu servidor funciona amb PHP" msgid "Your site runs WordPress" msgstr "El teu lloc funciona amb WordPress" + +msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." +msgstr "Aquesta és la botiga de plugins de ROBOTSTXT: el catàleg de plugins publicats per ROBOTSTXT, instal·lables i actualitzables directament des del teu propi wp-admin. Els plugins gratuïts s'instal·len amb un clic; els plugins premium requereixen una subscripció anual que es compra al nostre lloc web." + +msgid "Version" +msgstr "Versió" + +msgid "Status" +msgstr "Estat" + +msgid "€%s / year" +msgstr "%s €/any" + +msgid "Support" +msgstr "Suport" + +msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." +msgstr "Necessites ajuda amb un plugin de ROBOTSTXT? Visita el lloc web del plugin (l'enllaç a la seva fila de dalt) per veure la documentació i les guies, o contacta amb nosaltres a través del nostre lloc web: estarem encantats d'ajudar-te." + +msgid "Payments, and how it works" +msgstr "Pagaments, i com funciona" + +msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." +msgstr "Els plugins gratuïts s'instal·len a l'instant i sense cost. Els plugins premium són subscripcions anuals: pagues una vegada al nostre lloc web i la subscripció es renova automàticament cada any fins que la cancellis. Pots cancel·lar-la en qualsevol moment des de la teva pàgina de compte de ROBOTSTXT; l'accés segueix funcionant fins al final del període pagat. Tots els pagaments els processa de manera segura Mollie; nosaltres mai no veiem ni desem les dades de la teva targeta." diff --git a/languages/robotstxt-manager-es_ES.mo b/languages/robotstxt-manager-es_ES.mo index fe85912..9b6d0bd 100644 Binary files a/languages/robotstxt-manager-es_ES.mo and b/languages/robotstxt-manager-es_ES.mo differ diff --git a/languages/robotstxt-manager-es_ES.po b/languages/robotstxt-manager-es_ES.po index 98d8510..3059230 100644 --- a/languages/robotstxt-manager-es_ES.po +++ b/languages/robotstxt-manager-es_ES.po @@ -129,8 +129,6 @@ msgstr "Instalado (inactivo)" msgid "Insufficient permissions." msgstr "Permisos insuficientes." -msgid "Local state" -msgstr "Estado local" msgid "Manager (by ROBOTSTXT) — Plugins" msgstr "Manager (by ROBOTSTXT) — Plugins" @@ -153,8 +151,6 @@ msgstr "El plugin no está instalado." msgid "Plugin not found in catalog." msgstr "Plugin no encontrado en el catálogo." -msgid "Premium" -msgstr "Premium" msgid "Price" msgstr "Precio" @@ -177,8 +173,6 @@ msgstr "Requiere WP" msgid "Settings" msgstr "Ajustes" -msgid "Show more information" -msgstr "Mostrar más información" msgid "Store URL" msgstr "URL de la tienda" @@ -210,8 +204,6 @@ msgstr "Este sitio funciona con WordPress %1$s y PHP %2$s." msgid "Too many refreshes. Please wait a minute before refreshing again." msgstr "Demasiadas actualizaciones. Espera un minuto antes de volver a actualizar." -msgid "Type" -msgstr "Tipo" msgid "Up to date" msgstr "Actualizado" @@ -233,3 +225,27 @@ msgstr "Tu servidor funciona con PHP" msgid "Your site runs WordPress" msgstr "Tu sitio funciona con WordPress" + +msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." +msgstr "Esta es la tienda de plugins de ROBOTSTXT: el catálogo de plugins publicados por ROBOTSTXT, instalables y actualizables directamente desde tu propio wp-admin. Los plugins gratis se instalan con un clic; los plugins premium requieren una suscripción anual que se compra en nuestro sitio web." + +msgid "Version" +msgstr "Versión" + +msgid "Status" +msgstr "Estado" + +msgid "€%s / year" +msgstr "%s €/año" + +msgid "Support" +msgstr "Soporte" + +msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." +msgstr "¿Necesitas ayuda con un plugin de ROBOTSTXT? Visita el sitio web del plugin (el enlace en su fila de arriba) para ver la documentación y las guías, o contáctanos a través de nuestro sitio web: estaremos encantados de ayudarte." + +msgid "Payments, and how it works" +msgstr "Pagos, y cómo funciona" + +msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." +msgstr "Los plugins gratis se instalan al instante y sin coste. Los plugins premium son suscripciones anuales: pagas una vez en nuestro sitio web y la suscripción se renueva automáticamente cada año hasta que la canceles. Puedes cancelarla en cualquier momento desde tu página de cuenta de ROBOTSTXT; el acceso sigue funcionando hasta el final del periodo pagado. Todos los pagos los procesa de forma segura Mollie; nosotros nunca vemos ni guardamos los datos de tu tarjeta." diff --git a/languages/robotstxt-manager.pot b/languages/robotstxt-manager.pot index 228e099..2118156 100644 --- a/languages/robotstxt-manager.pot +++ b/languages/robotstxt-manager.pot @@ -128,8 +128,6 @@ msgstr "" msgid "Insufficient permissions." msgstr "" -msgid "Local state" -msgstr "" msgid "Manager (by ROBOTSTXT) — Plugins" msgstr "" @@ -152,8 +150,6 @@ msgstr "" msgid "Plugin not found in catalog." msgstr "" -msgid "Premium" -msgstr "" msgid "Price" msgstr "" @@ -176,8 +172,6 @@ msgstr "" msgid "Settings" msgstr "" -msgid "Show more information" -msgstr "" msgid "Store URL" msgstr "" @@ -209,8 +203,6 @@ msgstr "" msgid "Too many refreshes. Please wait a minute before refreshing again." msgstr "" -msgid "Type" -msgstr "" msgid "Up to date" msgstr "" @@ -232,3 +224,27 @@ msgstr "" msgid "Your site runs WordPress" msgstr "" + +msgid "This is the ROBOTSTXT plugin store: the catalog of plugins published by ROBOTSTXT, installable and updatable straight from your own wp-admin. Free plugins install with one click; premium plugins require an annual subscription that you purchase on our website." +msgstr "" + +msgid "Version" +msgstr "" + +msgid "Status" +msgstr "" + +msgid "€%s / year" +msgstr "" + +msgid "Support" +msgstr "" + +msgid "Need help with a ROBOTSTXT plugin? Visit the plugin's website (the link in its row above) for documentation and guides, or contact us through our website — we are happy to help." +msgstr "" + +msgid "Payments, and how it works" +msgstr "" + +msgid "Free plugins install instantly at no cost. Premium plugins are annual subscriptions: you pay once on our website and the subscription renews automatically every year until you cancel. You can cancel at any time from your ROBOTSTXT account page — access keeps working until the end of the paid period. All payments are processed securely by Mollie; we never see or store your card details." +msgstr "" diff --git a/readme.txt b/readme.txt index 2bddf5f..67dc346 100644 --- a/readme.txt +++ b/readme.txt @@ -3,9 +3,9 @@ Contributors: javiercasares, robotstxt Tags: dashboard, catalog, updates, subscriptions, management Requires at least: 4.4 Tested up to: 7.1 -Stable tag: 0.6.0 +Stable tag: 1.0.0 Requires PHP: 8.0 -Version: 0.6.0 +Version: 1.0.0 License: GPL-3.0-or-later License URI: https://www.gnu.org/licenses/gpl-3.0.txt @@ -42,11 +42,14 @@ Configure at **ROBOTSTXT → Settings**: | Column | Description | |---|---| -| Plugin | Name and current version from the store. Click ▸ to expand the description and website link. | -| Type | Free or Premium. | -| Price | Annual price in EUR, or — for free plugins. | -| Local state | Not installed / Installed (inactive) / Up to date / Update available (vX → vY). | +| Plugin | Name from the store. The row below each plugin carries its website link and description (always visible). | +| Version | Current version in the store. | +| Requires WP / Requires PHP | Minimum requirements, checked against this site (warning icon when not met). | +| Price | "Free", or the annual price for premium plugins. | | Action | Install / Activate / Update / Buy, depending on local state. | +| Status | Not installed / Installed (inactive) / Up to date / Update available (vX → vY). | + +Below the table: a Support section and an explanation of Payments (annual subscriptions, automatic renewal, cancellation, Mollie processing). Click "Refresh catalog" to force a fresh fetch from Core. Install, Activate, and Update run on a classic page load (no JavaScript) and report the result as a standard admin notice. @@ -89,6 +92,12 @@ Encrypted at rest using AES-256-CBC with a key derived from your site's WordPres == Changelog == += 1.0.0 = + +_Release date: 2026-08-15_ + +* Catalog redesign: columns Plugin · Version · Requires WP · Requires PHP · Price · Action · Status; Type merged into Price ("Free" or the annual price); per-plugin website link + description always open under each row; intro text after the title; Support and Payments sections below the table. First stable release. + = 0.6.0 = _Release date: 2026-08-15_ diff --git a/robotstxt-manager.php b/robotstxt-manager.php index 5ba69e3..f814d46 100644 --- a/robotstxt-manager.php +++ b/robotstxt-manager.php @@ -3,7 +3,7 @@ * Plugin Name: Manager (by ROBOTSTXT) * Plugin URI: https://git.robotstxt.es/ROBOTSTXT/robotstxt-manager * Description: Client-side dashboard for the ROBOTSTXT plugin ecosystem. Lists the catalog from a remote Plugins Core install, resolves local install/update state, and installs, activates, and updates plugins directly from the store. - * Version: 0.6.0 + * Version: 1.0.0 * Requires at least: 4.4 * Requires PHP: 8.0 * Author: ROBOTSTXT @@ -21,7 +21,7 @@ if ( ! defined( 'ABSPATH' ) ) { } /** Plugin version. */ -define( 'ROBOTSTXT_MANAGER_VERSION', '0.6.0' ); +define( 'ROBOTSTXT_MANAGER_VERSION', '1.0.0' ); /** Absolute path to the plugin directory, with trailing slash. */ define( 'ROBOTSTXT_MANAGER_DIR', plugin_dir_path( __FILE__ ) );