From e7a4a45a7410aa7c4cbc2e1368964e7198cc48ba Mon Sep 17 00:00:00 2001 From: Javier Casares Date: Mon, 17 Aug 2026 16:01:48 +0000 Subject: [PATCH] v1.0.0 --- admin/views/page-catalog.php | 121 ++++++++++++++------------- changelog.txt | 17 ++++ languages/robotstxt-manager-ca.mo | Bin 7841 -> 9816 bytes languages/robotstxt-manager-ca.po | 32 +++++-- languages/robotstxt-manager-es_ES.mo | Bin 7844 -> 9783 bytes languages/robotstxt-manager-es_ES.po | 32 +++++-- languages/robotstxt-manager.pot | 32 +++++-- readme.txt | 21 +++-- robotstxt-manager.php | 4 +- 9 files changed, 170 insertions(+), 89 deletions(-) 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 71cdb38b41d0c2db01e141e92caa6638930ecc57..20a059df8c8f3021abd939b05a2d0d291045be66 100644 GIT binary patch delta 3757 zcmZvdYm8l06~}ieoig+_)KWS_ADikp4`yx);?&MqnW=3NZ3oh6uq1@I@40*KJML@WJ0Y=iZ@E zcV^$;-gE9*d#(RkYu|4k`0df`kDIUjs$$GCw==(dg;ERf?JN0UJlmtxbMP$O06)D} zsS31k9Xt)MhEKr<;CEmKhp$qKrFs^Qz;kc_{vLiE{s&?*Q;+s4#af+)JK#596`qHy z;ZCftfxF>#a2Rfe(~v(k*WtZz4|^AC_yoKLz6dwMSK$P_0PlmF@qV4S`Z*Tj*(30M z@LN!Ve*r$cN~xFN57{3g{PplHD3M)-)h)0OierPF{Q=m|{y5wXJ@|h37;M8f{35Jx zLQ#?GA1uUyw;+M2l5>?0i_M^g3<*Elt^3farhvVgSK#rv2dOs*`X8 zx=`%rP|j;Z$|zGWmJ9U@*yO?M@KbP>iW`Mb!o91M`YHSn`~QAGsl#w|uskq?qRa#E zM))NtDQrUyQ0L(!d<|;Yi!2cu?_`vt-7tV|3rrsD0x4^By&a4N;*2@=A!*1&r(d%GJBaHXVR)g0ZOi99AMH# zs<(ZtXWN?WNMx-Jy|nK7v1TU5^Gf=O*U~1@exRKoPAdA&$Tr=yx$d>@w;5(KN9i)+7venp4V=(Gf^xd4nS|)pO)c7r(xJ{e)ZMq@TZ+!l=HjZQCST9%` z#(F7;7F@sHF(ocoTnXk2Z$jhNbZ8?ts8#d~65xK*`Ux%(Wf%ow$kudhoiwueR&D8H zf#RZ)$;)N+hUCCPe*u>eg(0U`%{<0-iXDPGhV`L0WITD_J5U;fV$f6Ncy;6rNV{ zKdt{-e@CLR!fJzK@ljNc^LWE_etyIAYdAHH^M^Lhtes24Fo=@;<&76IR}Qn6g;@w^ zCyQr}p%8<*q^Db)VOsUvxPew^zar6Cw`fh(D~l@)YrHJGIEjo~ZzOs?3Yuj;f+b&P zOX0YwHC?}=|8MmdSqOZq9nWprrlQn#pm0>7;Mai3Z&Iv|alhKb+X0hRoT zO@6+X53kJ*d+|!>^#~o8zfW@Gp|VGR@*~fZ zP3@I?KhZAb=W|%utCzmr^*>&2`zxL5NT=dI-AluUrk>iE)-Za})=kamjIQ=+d*bxG zz>#v}2+v$%V7aY%ht3TaP1(82Pf6=awNdyOk&c{~i{(^`8Pn-ivdCo;5KY;;#A2dx z9uv_i@y9L(-df!Z#8Cds_DVKIob>YYSp=|n>V8(wr@n+>II1`ScOjoOE(02Q`MID* z*dT<&qD5k&IxSymAJ|sy_Io9pwQ`4W1tR->si@PeqIf6C^8QLucN!i=ym!Uw@rX!(uiRDgT<(CZxC9(`xh;9b39bPfa|v|s zfYPBdVhNZyBC{x(%gOJlg-KFRm?&ULl|7+mFn!{L4@{8Bs)5C?qebJuYzIoNK(c%VybW9Ru_g1)6w#odO zt=DC`xG1HM-hK%K9x+>XA@>%Az22^*gu5 zrOkC&Yi3@jH_PnG9WqtcUgt-)+m3RL*oa!D?4|L#zoA8nipDJ321ijUq$n@%$cmc5 lMx2yIQno~X?~X?P>W)Lj?Xuj?H}1^W4aS-aW)JPC{s*Ueds_ei delta 1822 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 UKWsi097)Z%HXa$UZ${?+0|g|?RsaA1 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__ ) );