Changeset 3749403
- Timestamp:
- 10/15/2026 10:18:31 PM (3 weeks ago)
- Location:
- filedeck-store-master/trunk
- Files:
-
- 30 edited
-
assets/js/admin-rules.js (modified) (2 diffs)
-
assets/js/admin-start.js (modified) (3 diffs)
-
assets/js/admin.js (modified) (6 diffs)
-
assets/js/blocks.js (modified) (2 diffs)
-
filedeck-store-master.php (modified) (7 diffs)
-
includes/Admin/AdminShell.php (modified) (4 diffs)
-
includes/Admin/ProductQuantityPanel.php (modified) (1 diff)
-
includes/Blocks/PlacementBlock.php (modified) (2 diffs)
-
includes/Cli/Commands.php (modified) (3 diffs)
-
includes/Kernel/Container.php (modified) (1 diff)
-
includes/Modules/CartFulfilment/CheckoutFieldsModule.php (modified) (1 diff)
-
includes/Modules/Core/DiagnosticsModule.php (modified) (6 diffs)
-
includes/Modules/Core/HealthRunner.php (modified) (6 diffs)
-
includes/Modules/Core/PortabilityModule.php (modified) (1 diff)
-
includes/Modules/Notifications/OrderDocumentsModule.php (modified) (1 diff)
-
includes/Modules/Notifications/RecipientsModule.php (modified) (2 diffs)
-
includes/Rest/ConfigController.php (modified) (1 diff)
-
includes/Rest/OverviewController.php (modified) (3 diffs)
-
includes/Rest/RulesController.php (modified) (2 diffs)
-
includes/Rest/SimulateController.php (modified) (1 diff)
-
includes/Shared/Blueprints/BlueprintService.php (modified) (2 diffs)
-
includes/Shared/Documents/DocumentService.php (modified) (1 diff)
-
includes/Shared/Forms/FormRepository.php (modified) (3 diffs)
-
includes/Shared/Money/Decimal.php (modified) (7 diffs)
-
includes/Shared/Money/Money.php (modified) (1 diff)
-
includes/Shared/Privacy/PersonalData.php (modified) (2 diffs)
-
includes/Shared/Rules/RepositoryException.php (modified) (1 diff)
-
includes/Shared/Storage/Settings.php (modified) (1 diff)
-
includes/Shared/Support/Json.php (modified) (2 diffs)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
filedeck-store-master/trunk/assets/js/admin-rules.js
r3744954 r3749403 881 881 ) 882 882 : h( 'p', { className: 'sm-step__hint' }, 883 __( 'This kind of rule cannot be checked against a product before it goes live — nothing in FileDeck StoreMaster can answer what it would do without applying it. Publish it as a draft first and it changes nothing until you turn it on.', 'filedeck-store-master' ) ),883 __( 'This kind of rule cannot be checked against a product before it goes live — nothing in StoreMaster can answer what it would do without applying it. Publish it as a draft first and it changes nothing until you turn it on.', 'filedeck-store-master' ) ), 884 884 check[ 0 ] && ! check[ 0 ].error && ! draftApplied( check[ 0 ] ) 885 885 // The rule did NOT fire. This used to render the same … … 893 893 var why = draftRejection( check[ 0 ] ); 894 894 if ( ! why ) { 895 return h( 'p', null, __( ' FileDeck StoreMaster did not report why.', 'filedeck-store-master' ) );895 return h( 'p', null, __( 'StoreMaster did not report why.', 'filedeck-store-master' ) ); 896 896 } 897 897 return h( Fragment, null, -
filedeck-store-master/trunk/assets/js/admin-start.js
r3744954 r3749403 219 219 ) ) 220 220 : h( Notice, { status: 'error', isDismissible: false }, 221 __( 'Something on this list will stop FileDeck StoreMaster working properly. You can still set up, but fix this first.', 'filedeck-store-master' ) ),221 __( 'Something on this list will stop StoreMaster working properly. You can still set up, but fix this first.', 'filedeck-store-master' ) ), 222 222 h( 'ul', { className: 'sm-start__checks' }, shown.map( function ( c, i ) { 223 223 return h( Fragment, { key: i }, Check( c ) ); … … 366 366 // as having a working shop, and a blueprint cannot know a 367 367 // merchant's tiers, prices or hours. 368 h( 'p', null, __( ' FileDeck StoreMaster has turned on what this kind of shop needs. These are the things only you can decide.', 'filedeck-store-master' ) ),368 h( 'p', null, __( 'StoreMaster has turned on what this kind of shop needs. These are the things only you can decide.', 'filedeck-store-master' ) ), 369 369 steps.length 370 370 ? h( 'ol', { className: 'sm-start__steps' }, steps.map( function ( s, i ) { … … 512 512 ? __( 'Or set up something else', 'filedeck-store-master' ) 513 513 : __( 'What are you setting up?', 'filedeck-store-master' ) ), 514 h( 'p', null, __( ' FileDeck StoreMaster will switch on what that kind of shop needs, show you what changes before anything does, and tell you what is left to you.', 'filedeck-store-master' ) ),514 h( 'p', null, __( 'StoreMaster will switch on what that kind of shop needs, show you what changes before anything does, and tell you what is left to you.', 'filedeck-store-master' ) ), 515 515 516 516 h( 'div', { className: 'storemaster-modules' }, blueprints.map( function ( b ) { -
filedeck-store-master/trunk/assets/js/admin.js
r3747742 r3749403 603 603 h( Card, { className: 'storemaster-card' }, h( CardBody, null, 604 604 h( 'h2', null, __( 'Support bundle', 'filedeck-store-master' ) ), 605 h( 'p', null, __( 'What FileDeck StoreMaster would tell somebody helping you: your versions, which modules are on, the state of the database and the results above. No customer, no order and no key is ever in it.', 'filedeck-store-master' ) ),605 h( 'p', null, __( 'What StoreMaster would tell somebody helping you: your versions, which modules are on, the state of the database and the results above. No customer, no order and no key is ever in it.', 'filedeck-store-master' ) ), 606 606 bundleError[ 0 ] ? h( Notice, { status: 'error', isDismissible: false }, bundleError[ 0 ] ) : null, 607 607 … … 701 701 return JSON.parse( incoming[ 0 ] ); 702 702 } catch ( e ) { 703 importError[ 1 ]( __( 'That is not a FileDeck StoreMaster configuration file — it is not valid JSON.', 'filedeck-store-master' ) );703 importError[ 1 ]( __( 'That is not a StoreMaster configuration file — it is not valid JSON.', 'filedeck-store-master' ) ); 704 704 return null; 705 705 } … … 1014 1014 h( Card, { className: 'storemaster-card' }, h( CardBody, null, 1015 1015 h( 'h2', null, __( 'Import', 'filedeck-store-master' ) ), 1016 h( 'p', null, __( 'Paste a configuration exported from another FileDeck StoreMaster site. Nothing is changed until you have seen what it would do and said so.', 'filedeck-store-master' ) ),1016 h( 'p', null, __( 'Paste a configuration exported from another StoreMaster site. Nothing is changed until you have seen what it would do and said so.', 'filedeck-store-master' ) ), 1017 1017 importError[ 0 ] ? h( Notice, { status: 'error', isDismissible: false }, importError[ 0 ] ) : null, 1018 1018 h( 'textarea', { … … 1697 1697 .filter( isActive ) 1698 1698 .sort( function ( a, b ) { return b.path.length - a.path.length; } )[ 0 ]; 1699 var title = current ? current.label : __( ' FileDeck StoreMaster', 'filedeck-store-master' );1699 var title = current ? current.label : __( 'StoreMaster', 'filedeck-store-master' ); 1700 1700 1701 1701 // A group with nothing in it renders NOTHING — no heading, no empty … … 1795 1795 // a rail would eat the content. 1796 1796 return h( 'div', { className: 'storemaster-layout' }, 1797 h( 'nav', { className: 'storemaster-nav', 'aria-label': __( ' FileDeck StoreMaster sections', 'filedeck-store-master' ) },1797 h( 'nav', { className: 'storemaster-nav', 'aria-label': __( 'StoreMaster sections', 'filedeck-store-master' ) }, 1798 1798 // The find box leads, because at twenty-five destinations 1799 1799 // typing is faster than reading — and it is inside the nav it … … 1828 1828 // THE PAGE'S OWN HEADING, naming the screen. 1829 1829 // 1830 // There was an h1 here before and it read "FileDeck Store 1831 // Master" on all twenty-five screens, which is the same as 1830 // There was an h1 here before and it read "StoreMaster" on all twenty-five screens, which is the same as 1832 1831 // having none: a heading identical everywhere cannot tell you 1833 1832 // where you are. The label comes from the route table the -
filedeck-store-master/trunk/assets/js/blocks.js
r3744954 r3749403 93 93 94 94 var inspector = h( InspectorControls, null, 95 h( PanelBody, { title: __( ' FileDeck StoreMaster', 'filedeck-store-master' ), initialOpen: true },95 h( PanelBody, { title: __( 'StoreMaster', 'filedeck-store-master' ), initialOpen: true }, 96 96 h( SelectControl, { 97 97 label: __( 'Show', 'filedeck-store-master' ), … … 120 120 EmptyResponsePlaceholder: function () { 121 121 return h( Placeholder, { 122 label: __( ' FileDeck StoreMaster', 'filedeck-store-master' )122 label: __( 'StoreMaster', 'filedeck-store-master' ) 123 123 }, __( 'This shows nothing yet. Check the surface is set up — a product table needs a published view, filters need the catalogue index.', 'filedeck-store-master' ) ); 124 124 } 125 125 } ) 126 126 : h( Placeholder, { 127 label: __( ' FileDeck StoreMaster', 'filedeck-store-master' ),127 label: __( 'StoreMaster', 'filedeck-store-master' ), 128 128 instructions: __( 'Choose what this block should show.', 'filedeck-store-master' ) 129 129 }, h( SelectControl, { -
filedeck-store-master/trunk/filedeck-store-master.php
r3747742 r3749403 3 3 * Plugin Name: FileDeck Store Master for WooCommerce 4 4 * Description: One WooCommerce toolkit instead of a stack of add-ons — product tabs, quantity rules, discounts, lead times, quick view, checkout fields, order documents and more, each independently enabled. 5 * Version: 3.1. 05 * Version: 3.1.1 6 6 * Requires at least: 6.6 7 7 * Requires PHP: 8.1 … … 50 50 } 51 51 echo '<div class="notice notice-warning"><p><strong>' 52 . esc_html__( 'Two copies of FileDeck StoreMaster are installed.', 'filedeck-store-master' ) . '</strong> '52 . esc_html__( 'Two copies of StoreMaster are installed.', 'filedeck-store-master' ) . '</strong> ' 53 53 . esc_html( 54 54 sprintf( … … 65 65 } 66 66 67 define( 'STOREMASTER_VERSION', '3.1. 0' ); // Header + constant + readme.txt Stable tag move together (version-gate).67 define( 'STOREMASTER_VERSION', '3.1.1' ); // Header + constant + readme.txt Stable tag move together (version-gate). 68 68 define( 'STOREMASTER_SCHEMA_VERSION', 1 ); 69 69 define( 'STOREMASTER_PLUGIN_FILE', __FILE__ ); … … 95 95 return sprintf( 96 96 /* translators: 1: required PHP version, 2: running PHP version */ 97 __( ' FileDeck StoreMaster requires PHP %1$s or newer. This site runs PHP %2$s.', 'filedeck-store-master' ),97 __( 'StoreMaster requires PHP %1$s or newer. This site runs PHP %2$s.', 'filedeck-store-master' ), 98 98 STOREMASTER_MIN_PHP, 99 99 PHP_VERSION … … 103 103 return sprintf( 104 104 /* translators: 1: required WordPress version, 2: running WordPress version */ 105 __( ' FileDeck StoreMaster requires WordPress %1$s or newer. This site runs WordPress %2$s.', 'filedeck-store-master' ),105 __( 'StoreMaster requires WordPress %1$s or newer. This site runs WordPress %2$s.', 'filedeck-store-master' ), 106 106 STOREMASTER_MIN_WP, 107 107 get_bloginfo( 'version' ) … … 109 109 } 110 110 if ( ! defined( 'WC_VERSION' ) ) { 111 return __( ' FileDeck StoreMaster requires WooCommerce to be installed and active.', 'filedeck-store-master' );111 return __( 'StoreMaster requires WooCommerce to be installed and active.', 'filedeck-store-master' ); 112 112 } 113 113 if ( version_compare( WC_VERSION, STOREMASTER_MIN_WC, '<' ) ) { 114 114 return sprintf( 115 115 /* translators: 1: required WooCommerce version, 2: running WooCommerce version */ 116 __( ' FileDeck StoreMaster requires WooCommerce %1$s or newer. This site runs WooCommerce %2$s.', 'filedeck-store-master' ),116 __( 'StoreMaster requires WooCommerce %1$s or newer. This site runs WooCommerce %2$s.', 'filedeck-store-master' ), 117 117 STOREMASTER_MIN_WC, 118 118 WC_VERSION … … 169 169 return; 170 170 } 171 echo '<div class="notice notice-error"><p><strong> FileDeck StoreMaster</strong> — ' . esc_html( $reason ) . '</p></div>';171 echo '<div class="notice notice-error"><p><strong>StoreMaster</strong> — ' . esc_html( $reason ) . '</p></div>'; 172 172 } 173 173 ); -
filedeck-store-master/trunk/includes/Admin/AdminShell.php
r3744954 r3749403 47 47 // parts on and off is the owner's, not a delegate's. 48 48 add_menu_page( 49 __( ' FileDeck StoreMaster', 'filedeck-store-master' ),50 __( ' FileDeck StoreMaster', 'filedeck-store-master' ),49 __( 'StoreMaster', 'filedeck-store-master' ), 50 __( 'StoreMaster', 'filedeck-store-master' ), 51 51 Capabilities::ACCESS_META, 52 52 self::SLUG, … … 132 132 <div id="storemaster-app"> 133 133 <noscript> 134 <h1><?php esc_html_e( ' FileDeck StoreMaster', 'filedeck-store-master' ); ?></h1>135 <p><?php esc_html_e( 'The FileDeck StoreMaster control centre needs JavaScript. Your storefront is unaffected.', 'filedeck-store-master' ); ?></p>134 <h1><?php esc_html_e( 'StoreMaster', 'filedeck-store-master' ); ?></h1> 135 <p><?php esc_html_e( 'The StoreMaster control centre needs JavaScript. Your storefront is unaffected.', 'filedeck-store-master' ); ?></p> 136 136 <p> 137 137 <?php … … 325 325 printf( 326 326 '<div class="notice notice-error"><p><strong>%1$s</strong> %2$s <a href="%3$s">%4$s</a></p></div>', 327 esc_html__( ' FileDeck StoreMaster:', 'filedeck-store-master' ),327 esc_html__( 'StoreMaster:', 'filedeck-store-master' ), 328 328 esc_html__( 'a database update did not finish. Nothing was rolled back, so your modules are running against a partly updated database.', 'filedeck-store-master' ), 329 329 esc_url( admin_url( 'admin.php?page=' . self::SLUG . '#/diagnostics' ) ), … … 341 341 printf( 342 342 '<div class="notice notice-warning"><p><strong>%1$s</strong> %2$s %3$s <code>wp storemaster safe-mode disable</code></p></div>', 343 esc_html__( ' FileDeck StoreMaster safe mode is on.', 'filedeck-store-master' ),344 esc_html__( 'No FileDeck StoreMaster module runs on storefront page loads. Store API and AJAX requests — the Blocks cart and checkout — are still handled. Your settings are untouched.', 'filedeck-store-master' ),343 esc_html__( 'StoreMaster safe mode is on.', 'filedeck-store-master' ), 344 esc_html__( 'No StoreMaster module runs on storefront page loads. Store API and AJAX requests — the Blocks cart and checkout — are still handled. Your settings are untouched.', 'filedeck-store-master' ), 345 345 esc_html__( 'Turn it off with:', 'filedeck-store-master' ) 346 346 ); -
filedeck-store-master/trunk/includes/Admin/ProductQuantityPanel.php
r3744954 r3749403 71 71 72 72 echo '<div class="options_group storemaster-quantity">'; 73 echo '<p class="form-field"><strong>' . esc_html__( ' FileDeck StoreMaster quantity rules', 'filedeck-store-master' ) . '</strong></p>';73 echo '<p class="form-field"><strong>' . esc_html__( 'StoreMaster quantity rules', 'filedeck-store-master' ) . '</strong></p>'; 74 74 wp_nonce_field( 'storemaster_product_quantity', '_storemaster_nonce' ); 75 75 -
filedeck-store-master/trunk/includes/Blocks/PlacementBlock.php
r3744954 r3749403 53 53 array( 54 54 'api_version' => 3, 55 'title' => __( ' FileDeck StoreMaster', 'filedeck-store-master' ),55 'title' => __( 'StoreMaster', 'filedeck-store-master' ), 56 56 'category' => 'woocommerce', 57 57 'icon' => 'screenoptions', 58 'description' => __( 'Place a FileDeck StoreMaster surface: a product table, filters, search, a quote basket and the rest.', 'filedeck-store-master' ),58 'description' => __( 'Place a StoreMaster surface: a product table, filters, search, a quote basket and the rest.', 'filedeck-store-master' ), 59 59 'attributes' => array( 60 60 'surface' => array( 'type' => 'string', 'default' => '' ), … … 86 86 return ''; 87 87 } 88 return '<p class="sm-notice">' . esc_html__( ' FileDeck StoreMaster: choose what this block should show. If the surface you picked is missing, its module is switched off or not in this build. Only editors see this message.', 'filedeck-store-master' ) . '</p>';88 return '<p class="sm-notice">' . esc_html__( 'StoreMaster: choose what this block should show. If the surface you picked is missing, its module is switched off or not in this build. Only editors see this message.', 'filedeck-store-master' ) . '</p>'; 89 89 } 90 90 -
filedeck-store-master/trunk/includes/Cli/Commands.php
r3744954 r3749403 307 307 \WP_CLI::error( 308 308 $known 309 ? 'The catalogue index module is switched off. Turn it on in FileDeck StoreMaster → Modules.'309 ? 'The catalogue index module is switched off. Turn it on in StoreMaster → Modules.' 310 310 : 'No catalogue index is installed on this site.' 311 311 ); … … 504 504 $document = json_decode( $raw, true ); 505 505 if ( ! is_array( $document ) ) { 506 \WP_CLI::error( 'That file is not a FileDeck StoreMaster export.' );506 \WP_CLI::error( 'That file is not a StoreMaster export.' ); 507 507 } 508 508 … … 743 743 if ( 'enable' === $action ) { 744 744 SafeMode::enable( true ); 745 \WP_CLI::success( 'Safe mode is on. No FileDeck StoreMaster module runs on the storefront; settings are untouched.' );745 \WP_CLI::success( 'Safe mode is on. No StoreMaster module runs on the storefront; settings are untouched.' ); 746 746 return; 747 747 } -
filedeck-store-master/trunk/includes/Kernel/Container.php
r3744954 r3749403 53 53 if ( ! isset( $this->factories[ $id ] ) ) { 54 54 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- $id is a class or interface name passed to set() by our own boot code, and this message is a developer fault that reaches a log, never a page. 55 throw new \RuntimeException( ' FileDeck StoreMaster: unregistered service ' . $id );55 throw new \RuntimeException( 'StoreMaster: unregistered service ' . $id ); 56 56 } 57 57 $this->resolved[ $id ] = call_user_func( $this->factories[ $id ], $this ); -
filedeck-store-master/trunk/includes/Modules/CartFulfilment/CheckoutFieldsModule.php
r3744954 r3749403 656 656 return array( 657 657 'status' => 'warning', 658 'summary' => __( 'This WooCommerce does not expose its field registry, so FileDeck StoreMaster cannot confirm the fields arrived.', 'filedeck-store-master' ),658 'summary' => __( 'This WooCommerce does not expose its field registry, so StoreMaster cannot confirm the fields arrived.', 'filedeck-store-master' ), 659 659 ); 660 660 } -
filedeck-store-master/trunk/includes/Modules/Core/DiagnosticsModule.php
r3744954 r3749403 33 33 __( 'Diagnostics', 'filedeck-store-master' ), 34 34 'core', 35 __( 'See whether FileDeck StoreMaster is healthy, which plugins overlap it, and exactly what a support bundle would contain before you send one.', 'filedeck-store-master' ),35 __( 'See whether StoreMaster is healthy, which plugins overlap it, and exactly what a support bundle would contain before you send one.', 'filedeck-store-master' ), 36 36 'free', 37 37 __( 'Admin only. Adds nothing to a storefront request.', 'filedeck-store-master' ) … … 63 63 public function site_health_tests( $tests ) { 64 64 $tests['direct']['storemaster'] = array( 65 'label' => __( ' FileDeck StoreMaster', 'filedeck-store-master' ),65 'label' => __( 'StoreMaster', 'filedeck-store-master' ), 66 66 'test' => function () { 67 67 $results = HealthRunner::run(); … … 79 79 return array( 80 80 'label' => 'good' === $status 81 ? __( ' FileDeck StoreMaster is healthy', 'filedeck-store-master' )82 : __( ' FileDeck StoreMaster has something to look at', 'filedeck-store-master' ),81 ? __( 'StoreMaster is healthy', 'filedeck-store-master' ) 82 : __( 'StoreMaster has something to look at', 'filedeck-store-master' ), 83 83 'status' => $status, 84 84 'badge' => array( 'label' => __( 'Commerce', 'filedeck-store-master' ), 'color' => 'blue' ), 85 85 'description' => '' === $lines 86 ? '<p>' . esc_html__( 'Every FileDeck StoreMaster health check passed.', 'filedeck-store-master' ) . '</p>'86 ? '<p>' . esc_html__( 'Every StoreMaster health check passed.', 'filedeck-store-master' ) . '</p>' 87 87 : '<ul>' . $lines . '</ul>', 88 88 'test' => 'storemaster', … … 141 141 ? array( 142 142 'status' => 'pass', 143 'summary' => __( 'Your licence is active, so FileDeck StoreMaster can be configured normally.', 'filedeck-store-master' ),143 'summary' => __( 'Your licence is active, so StoreMaster can be configured normally.', 'filedeck-store-master' ), 144 144 ) 145 145 : array( 146 146 'status' => 'warning', 147 'summary' => __( 'Your licence has lapsed. Your shop is unaffected and every saved rule is still running — but nothing in FileDeck StoreMaster can be changed until you renew.', 'filedeck-store-master' ),147 'summary' => __( 'Your licence has lapsed. Your shop is unaffected and every saved rule is still running — but nothing in StoreMaster can be changed until you renew.', 'filedeck-store-master' ), 148 148 ); 149 149 } … … 183 183 return array( 184 184 'status' => 'fail', 185 'summary' => __( ' FileDeck StoreMaster could not read its rules to check them.', 'filedeck-store-master' ),185 'summary' => __( 'StoreMaster could not read its rules to check them.', 'filedeck-store-master' ), 186 186 ); 187 187 } … … 226 226 $parts[] = sprintf( 227 227 /* translators: %s: comma-separated rule names */ 228 __( 'These rules compare a category, tag or product with "is", which FileDeck StoreMaster reads as "is the only one" — change them to "is one of": %s.', 'filedeck-store-master' ),228 __( 'These rules compare a category, tag or product with "is", which StoreMaster reads as "is the only one" — change them to "is one of": %s.', 'filedeck-store-master' ), 229 229 implode( ', ', array_keys( $mistold ) ) 230 230 ); -
filedeck-store-master/trunk/includes/Modules/Core/HealthRunner.php
r3744954 r3749403 146 146 $reason = storemaster_incompatibility_reason(); 147 147 return '' === $reason 148 ? array( 'status' => 'pass', 'summary' => __( 'The platform meets FileDeck StoreMaster\'s requirements.', 'filedeck-store-master' ) )148 ? array( 'status' => 'pass', 'summary' => __( 'The platform meets StoreMaster\'s requirements.', 'filedeck-store-master' ) ) 149 149 : array( 'status' => 'fail', 'summary' => $reason ); 150 150 }, … … 159 159 return array( 160 160 'status' => 'fail', 161 'summary' => __( 'One or more FileDeck StoreMaster tables are missing. Deactivate and reactivate the plugin to recreate them.', 'filedeck-store-master' ),161 'summary' => __( 'One or more StoreMaster tables are missing. Deactivate and reactivate the plugin to recreate them.', 'filedeck-store-master' ), 162 162 'detail' => implode( ', ', $verify['missing_tables'] ), 163 163 ); … … 168 168 return array( 169 169 'status' => 'warning', 170 'summary' => __( 'A table index is missing. FileDeck StoreMaster works but some queries will be slower than they should be.', 'filedeck-store-master' ),170 'summary' => __( 'A table index is missing. StoreMaster works but some queries will be slower than they should be.', 'filedeck-store-master' ), 171 171 'detail' => implode( ', ', $verify['missing_indexes'] ), 172 172 ); … … 261 261 'summary' => Environment::hpos_enabled() 262 262 ? __( 'Orders are stored in WooCommerce\'s own tables (HPOS).', 'filedeck-store-master' ) 263 : __( 'Orders are stored as posts. FileDeck StoreMaster reads and writes them through WooCommerce either way.', 'filedeck-store-master' ),263 : __( 'Orders are stored as posts. StoreMaster reads and writes them through WooCommerce either way.', 'filedeck-store-master' ), 264 264 ); 265 265 }, … … 272 272 $overlaps = ConflictScan::detect(); 273 273 if ( ! $overlaps ) { 274 return array( 'status' => 'pass', 'summary' => __( 'No plugin was detected that overlaps an enabled FileDeck StoreMaster module.', 'filedeck-store-master' ) );274 return array( 'status' => 'pass', 'summary' => __( 'No plugin was detected that overlaps an enabled StoreMaster module.', 'filedeck-store-master' ) ); 275 275 } 276 276 return array( … … 279 279 /* translators: %d: number of plugins */ 280 280 _n( 281 '%d active plugin overlaps an enabled FileDeck StoreMaster module. Review it on staging before relying on both.',282 '%d active plugins overlap enabled FileDeck StoreMaster modules. Review them on staging before relying on both.',281 '%d active plugin overlaps an enabled StoreMaster module. Review it on staging before relying on both.', 282 '%d active plugins overlap enabled StoreMaster modules. Review them on staging before relying on both.', 283 283 count( $overlaps ), 284 284 'filedeck-store-master' -
filedeck-store-master/trunk/includes/Modules/Core/PortabilityModule.php
r3744954 r3749403 59 59 __( 'Configuration export', 'filedeck-store-master' ), 60 60 'core', 61 __( 'Take a signed, secret-free copy of your FileDeck StoreMaster configuration for review, staging or a rollback.', 'filedeck-store-master' ),61 __( 'Take a signed, secret-free copy of your StoreMaster configuration for review, staging or a rollback.', 'filedeck-store-master' ), 62 62 'free', 63 63 __( 'Admin and CLI only. Adds nothing to a storefront request.', 'filedeck-store-master' ) -
filedeck-store-master/trunk/includes/Modules/Notifications/OrderDocumentsModule.php
r3744954 r3749403 409 409 add_meta_box( 410 410 'storemaster-order-documents', 411 __( ' FileDeck StoreMaster: documents', 'filedeck-store-master' ),411 __( 'StoreMaster: documents', 'filedeck-store-master' ), 412 412 array( $this, 'render_metabox' ), 413 413 array_values( array_unique( array_filter( $screens ) ) ), -
filedeck-store-master/trunk/includes/Modules/Notifications/RecipientsModule.php
r3744954 r3749403 459 459 wp_nonce_field( 'storemaster_user_recipients', '_storemaster_nonce' ); 460 460 ?> 461 <h2><?php esc_html_e( ' FileDeck StoreMaster order emails', 'filedeck-store-master' ); ?></h2>461 <h2><?php esc_html_e( 'StoreMaster order emails', 'filedeck-store-master' ); ?></h2> 462 462 <table class="form-table" role="presentation"> 463 463 <tr> … … 500 500 add_meta_box( 501 501 'storemaster-order-recipients', 502 __( ' FileDeck StoreMaster: extra recipients', 'filedeck-store-master' ),502 __( 'StoreMaster: extra recipients', 'filedeck-store-master' ), 503 503 array( $this, 'render_order_metabox' ), 504 504 array_values( array_unique( array_filter( $screens ) ) ), -
filedeck-store-master/trunk/includes/Rest/ConfigController.php
r3744954 r3749403 190 190 return new \WP_Error( 191 191 'storemaster_unsupported_format', 192 __( 'This file was written by a different version of FileDeck StoreMaster.', 'filedeck-store-master' ),192 __( 'This file was written by a different version of StoreMaster.', 'filedeck-store-master' ), 193 193 array( 'status' => 422 ) 194 194 ); -
filedeck-store-master/trunk/includes/Rest/OverviewController.php
r3744954 r3749403 78 78 'severity' => 'critical', 79 79 'code' => 'safe_mode_active', 80 'text' => __( 'Safe mode is on: FileDeck StoreMaster modules are not running on the storefront. Your settings are untouched.', 'filedeck-store-master' ),80 'text' => __( 'Safe mode is on: StoreMaster modules are not running on the storefront. Your settings are untouched.', 'filedeck-store-master' ), 81 81 ); 82 82 } … … 141 141 return array( 142 142 'code' => 'resolve_warning', 143 'text' => __( 'Something needs attention before FileDeck StoreMaster can be trusted to price your shop correctly.', 'filedeck-store-master' ),143 'text' => __( 'Something needs attention before StoreMaster can be trusted to price your shop correctly.', 'filedeck-store-master' ), 144 144 'label' => __( 'Open diagnostics', 'filedeck-store-master' ), 145 145 'route' => '#/diagnostics', … … 154 154 return array( 155 155 'code' => 'get_started', 156 'text' => __( 'Nothing runs on your storefront yet. Tell FileDeck StoreMaster what you are setting up and it will switch on what that kind of shop needs — showing you first, and telling you what is left to do.', 'filedeck-store-master' ),156 'text' => __( 'Nothing runs on your storefront yet. Tell StoreMaster what you are setting up and it will switch on what that kind of shop needs — showing you first, and telling you what is left to do.', 'filedeck-store-master' ), 157 157 'label' => __( 'Get started', 'filedeck-store-master' ), 158 158 'route' => '#/start', -
filedeck-store-master/trunk/includes/Rest/RulesController.php
r3744954 r3749403 567 567 return new \WP_Error( 568 568 'storemaster_error', 569 __( ' FileDeck StoreMaster could not check your permissions for this rule. Try again shortly.', 'filedeck-store-master' ),569 __( 'StoreMaster could not check your permissions for this rule. Try again shortly.', 'filedeck-store-master' ), 570 570 array( 'status' => 503 ) 571 571 ); … … 679 679 return new \WP_Error( 680 680 'storemaster_error', 681 __( ' FileDeck StoreMaster could not check your permissions for this rule. Try again shortly.', 'filedeck-store-master' ),681 __( 'StoreMaster could not check your permissions for this rule. Try again shortly.', 'filedeck-store-master' ), 682 682 array( 'status' => 503 ) 683 683 ); -
filedeck-store-master/trunk/includes/Rest/SimulateController.php
r3744954 r3749403 335 335 AccessDecision::REASON_LOGIN_REQUIRED => __( 'They would have to sign in first.', 'filedeck-store-master' ), 336 336 AccessDecision::REASON_PASSWORD => __( 'They would have to enter an access password.', 'filedeck-store-master' ), 337 AccessDecision::REASON_FAIL_CLOSED => __( ' FileDeck StoreMaster could not read your access rules, so it refused rather than guess. This needs fixing now.', 'filedeck-store-master' ),337 AccessDecision::REASON_FAIL_CLOSED => __( 'StoreMaster could not read your access rules, so it refused rather than guess. This needs fixing now.', 'filedeck-store-master' ), 338 338 ); 339 339 } -
filedeck-store-master/trunk/includes/Shared/Blueprints/BlueprintService.php
r3744954 r3749403 295 295 $blueprint = $this->get( $id ); 296 296 if ( null === $blueprint ) { 297 throw new \InvalidArgumentException( ' FileDeck StoreMaster: no such blueprint.' );297 throw new \InvalidArgumentException( 'StoreMaster: no such blueprint.' ); 298 298 } 299 299 … … 530 530 $journal = $this->journal(); 531 531 if ( ! isset( $journal[ $id ] ) ) { 532 throw new \InvalidArgumentException( ' FileDeck StoreMaster: that blueprint has not been applied here.' );532 throw new \InvalidArgumentException( 'StoreMaster: that blueprint has not been applied here.' ); 533 533 } 534 534 -
filedeck-store-master/trunk/includes/Shared/Documents/DocumentService.php
r3744954 r3749403 148 148 149 149 Logger::error( 'document_number_allocation_failed', array( 'type' => $type, 'order' => (int) $order->get_id() ) ); 150 throw new \RuntimeException( ' FileDeck StoreMaster: could not allocate a document number.' );150 throw new \RuntimeException( 'StoreMaster: could not allocate a document number.' ); 151 151 } 152 152 -
filedeck-store-master/trunk/includes/Shared/Forms/FormRepository.php
r3744954 r3749403 197 197 $key = (string) ( $definition['key'] ?? '' ); 198 198 if ( ! preg_match( '/^[a-z][a-z0-9_]{1,40}$/', $key ) ) { 199 throw new \InvalidArgumentException( ' FileDeck StoreMaster: a field key must start with a lowercase letter and contain only lowercase letters, numbers and underscores.' );199 throw new \InvalidArgumentException( 'StoreMaster: a field key must start with a lowercase letter and contain only lowercase letters, numbers and underscores.' ); 200 200 } 201 201 $type = (string) ( $definition['type'] ?? 'text' ); 202 202 if ( ! in_array( $type, self::TYPES, true ) ) { 203 203 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- The message becomes a WP_Error the control centre renders as text, so it is escaped at the point of display; naming the rejected type back is the whole value of the message and esc_html() here would mangle it. 204 throw new \InvalidArgumentException( ' FileDeck StoreMaster: unsupported field type ' . $type );204 throw new \InvalidArgumentException( 'StoreMaster: unsupported field type ' . $type ); 205 205 } 206 206 … … 211 211 // changing the type would silently reinterpret it (PRD 6.5). 212 212 if ( null !== $existing && $existing['type'] !== $type && $this->key_in_use( $owner, $key ) ) { 213 throw new \InvalidArgumentException( ' FileDeck StoreMaster: this field has been used on an order, so its type cannot change. Archive it and add a new field.' );213 throw new \InvalidArgumentException( 'StoreMaster: this field has been used on an order, so its type cannot change. Archive it and add a new field.' ); 214 214 } 215 215 … … 251 251 252 252 if ( in_array( $type, array( 'select', 'radio' ), true ) && ! $config['options'] ) { 253 throw new \InvalidArgumentException( ' FileDeck StoreMaster: a select or radio field needs at least one option.' );253 throw new \InvalidArgumentException( 'StoreMaster: a select or radio field needs at least one option.' ); 254 254 } 255 255 -
filedeck-store-master/trunk/includes/Shared/Money/Decimal.php
r3744954 r3749403 58 58 if ( 1 !== preg_match( '/^([+-]?)(\d+)(?:\.(\d*))?$/', $value, $m ) ) { 59 59 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- $value is the string that just failed the pattern, and whoever has to fix a malformed price needs to see it verbatim. It reaches a log or a WP_Error the admin escapes at the point of display; nothing echoes it as markup, and escaping here would spell entities into the diagnostic. 60 throw new \InvalidArgumentException( ' FileDeck StoreMaster: not a decimal string: ' . $value );60 throw new \InvalidArgumentException( 'StoreMaster: not a decimal string: ' . $value ); 61 61 } 62 62 $negative = '-' === $m[1]; … … 75 75 if ( strlen( ltrim( $digits, '0' ) ) > 18 ) { 76 76 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- $value already passed the pattern above, so it is a sign, digits and at most one point; there is nothing in it for an escaper to change. Escaped anyway wherever it is shown. 77 throw new \InvalidArgumentException( ' FileDeck StoreMaster: decimal value out of range: ' . $value );77 throw new \InvalidArgumentException( 'StoreMaster: decimal value out of range: ' . $value ); 78 78 } 79 79 $units = (int) $digits; … … 101 101 public static function fromFloat( float $value, int $scale = self::DEFAULT_SCALE ): self { 102 102 if ( ! is_finite( $value ) ) { 103 throw new \InvalidArgumentException( ' FileDeck StoreMaster: non-finite value cannot be a decimal' );103 throw new \InvalidArgumentException( 'StoreMaster: non-finite value cannot be a decimal' ); 104 104 } 105 105 return self::of( number_format( $value, $scale, '.', '' ), $scale ); … … 163 163 public function div( self $other, ?int $scale = null, string $mode = self::ROUND_HALF_UP ): self { 164 164 if ( 0 === $other->units ) { 165 throw new \DomainException( ' FileDeck StoreMaster: division by zero' );165 throw new \DomainException( 'StoreMaster: division by zero' ); 166 166 } 167 167 $target = null === $scale ? $this->scale : max( 0, $scale ); … … 261 261 private static function shift( int $units, int $by ): int { 262 262 if ( $by < 0 ) { 263 throw new \InvalidArgumentException( ' FileDeck StoreMaster: negative shift' );263 throw new \InvalidArgumentException( 'StoreMaster: negative shift' ); 264 264 } 265 265 for ( $i = 0; $i < $by; $i++ ) { 266 266 if ( $units > intdiv( PHP_INT_MAX, 10 ) || $units < intdiv( PHP_INT_MIN, 10 ) ) { 267 throw new \OverflowException( ' FileDeck StoreMaster: decimal overflow' );267 throw new \OverflowException( 'StoreMaster: decimal overflow' ); 268 268 } 269 269 $units *= 10; … … 274 274 private static function add_units( int $a, int $b ): int { 275 275 if ( ( $b > 0 && $a > PHP_INT_MAX - $b ) || ( $b < 0 && $a < PHP_INT_MIN - $b ) ) { 276 throw new \OverflowException( ' FileDeck StoreMaster: decimal overflow on add' );276 throw new \OverflowException( 'StoreMaster: decimal overflow on add' ); 277 277 } 278 278 return $a + $b; … … 285 285 $result = $a * $b; 286 286 if ( ! is_int( $result ) || intdiv( $result, $b ) !== $a ) { 287 throw new \OverflowException( ' FileDeck StoreMaster: decimal overflow on multiply' );287 throw new \OverflowException( 'StoreMaster: decimal overflow on multiply' ); 288 288 } 289 289 return $result; -
filedeck-store-master/trunk/includes/Shared/Money/Money.php
r3744954 r3749403 188 188 if ( $this->currency !== $other->currency ) { 189 189 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- Two ISO codes, each either the store's own currency setting or a literal from calling code. Combining currencies is a programming fault: the message reaches a log or a notice that is escaped where it is displayed, never markup emitted from here. 190 throw new \DomainException( ' FileDeck StoreMaster: cannot combine ' . $this->currency . ' with ' . $other->currency );190 throw new \DomainException( 'StoreMaster: cannot combine ' . $this->currency . ' with ' . $other->currency ); 191 191 } 192 192 } -
filedeck-store-master/trunk/includes/Shared/Privacy/PersonalData.php
r3744954 r3749403 71 71 $sources = array( 72 72 'storemaster-extra-recipients' => array( 73 'label' => __( ' FileDeck StoreMaster: extra order email recipients', 'filedeck-store-master' ),73 'label' => __( 'StoreMaster: extra order email recipients', 'filedeck-store-master' ), 74 74 'export' => array( __CLASS__, 'export_recipients' ), 75 75 'erase' => array( __CLASS__, 'erase_recipients' ), 76 76 ), 77 77 'storemaster-checkout-fields' => array( 78 'label' => __( ' FileDeck StoreMaster: checkout field answers', 'filedeck-store-master' ),78 'label' => __( 'StoreMaster: checkout field answers', 'filedeck-store-master' ), 79 79 'export' => array( __CLASS__, 'export_checkout_fields' ), 80 80 'erase' => array( __CLASS__, 'erase_checkout_fields' ), … … 179 179 sprintf( 180 180 /* translators: %s: the name of the data source */ 181 __( ' FileDeck StoreMaster could not erase %s. The data is still there; try again, and check the site log.', 'filedeck-store-master' ),181 __( 'StoreMaster could not erase %s. The data is still there; try again, and check the site log.', 'filedeck-store-master' ), 182 182 $key 183 183 ), -
filedeck-store-master/trunk/includes/Shared/Rules/RepositoryException.php
r3744954 r3749403 45 45 46 46 parent::__construct( 47 ' FileDeck StoreMaster could not reach the rule store (' . $operation . '): '47 'StoreMaster could not reach the rule store (' . $operation . '): ' 48 48 . ( '' !== $db_error ? $db_error : 'the database refused the query without reporting an error' ) 49 49 ); -
filedeck-store-master/trunk/includes/Shared/Storage/Settings.php
r3744954 r3749403 69 69 if ( is_string( $encoded ) && strlen( $encoded ) > self::MAX_BYTES ) { 70 70 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- A diagnostic, never a page: SettingsController answers a LengthException with its own translated sentence and drops this message, so the only place it lands is the log. Escaping the quotes around the domain key would make that log line harder to read, not safer. 71 throw new \LengthException( ' FileDeck StoreMaster: settings for "' . $domain . '" exceed ' . self::MAX_BYTES . ' bytes' );71 throw new \LengthException( 'StoreMaster: settings for "' . $domain . '" exceed ' . self::MAX_BYTES . ' bytes' ); 72 72 } 73 73 $key = $this->option_name( $domain ); -
filedeck-store-master/trunk/includes/Shared/Support/Json.php
r3744954 r3749403 33 33 if ( false === $json ) { 34 34 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- json_last_error_msg() returns one of PHP's own fixed strings, never caller data. The message is prose that reaches a merchant through a WP_Error the admin escapes at the point of display; escaping it here would only spell entities into the sentence they read. 35 throw new \InvalidArgumentException( ' FileDeck StoreMaster: value is not JSON-encodable (' . json_last_error_msg() . ')' );35 throw new \InvalidArgumentException( 'StoreMaster: value is not JSON-encodable (' . json_last_error_msg() . ')' ); 36 36 } 37 37 return $json; … … 50 50 if ( strlen( $json ) > $limit ) { 51 51 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- $limit is an int: either MAX_BYTES or the ceiling the calling code chose. The message is escaped where it is displayed, not emitted as markup from here. 52 throw new \InvalidArgumentException( ' FileDeck StoreMaster: JSON document exceeds ' . $limit . ' bytes' );52 throw new \InvalidArgumentException( 'StoreMaster: JSON document exceeds ' . $limit . ' bytes' ); 53 53 } 54 54 if ( ! self::is_valid_utf8( $json ) ) { 55 throw new \InvalidArgumentException( ' FileDeck StoreMaster: JSON document is not valid UTF-8' );55 throw new \InvalidArgumentException( 'StoreMaster: JSON document is not valid UTF-8' ); 56 56 } 57 57 if ( self::has_duplicate_keys( $json ) ) { 58 throw new \InvalidArgumentException( ' FileDeck StoreMaster: JSON document contains duplicate object keys' );58 throw new \InvalidArgumentException( 'StoreMaster: JSON document contains duplicate object keys' ); 59 59 } 60 60 $data = json_decode( $json, true, 32, JSON_BIGINT_AS_STRING ); 61 61 if ( JSON_ERROR_NONE !== json_last_error() ) { 62 62 // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped -- json_last_error_msg() returns one of PHP's own fixed strings, never the document that failed to parse. The message is escaped at the point of display, not here. 63 throw new \InvalidArgumentException( ' FileDeck StoreMaster: malformed JSON (' . json_last_error_msg() . ')' );63 throw new \InvalidArgumentException( 'StoreMaster: malformed JSON (' . json_last_error_msg() . ')' ); 64 64 } 65 65 if ( ! is_array( $data ) ) { 66 throw new \InvalidArgumentException( ' FileDeck StoreMaster: JSON document must decode to an object or array' );66 throw new \InvalidArgumentException( 'StoreMaster: JSON document must decode to an object or array' ); 67 67 } 68 68 return $data; -
filedeck-store-master/trunk/readme.txt
r3747742 r3749403 5 5 Tested up to: 7.1 6 6 Requires PHP: 8.1 7 Stable tag: 3.1. 07 Stable tag: 3.1.1 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 78 78 == Changelog == 79 79 80 = 3.1.1 = 81 * Changed: inside WordPress the plugin now calls itself StoreMaster: the admin menu, the editor block, the order and product panels, and its notices and messages. The purchase-order method is listed as "Purchase order (StoreMaster)" in WooCommerce's payment settings; what shoppers see at checkout is unchanged. Nothing to reconfigure, and nothing stored changes. 82 80 83 = 3.1.0 = 81 84 * Added: every capability now has a picture. The Modules screen shows one on each card, so you can tell what something does before reading about it.
Note:
See TracChangeset
for help on using the changeset viewer.
![(please configure the [header_logo] section in trac.ini)](/chrome/site/your_project_logo.png)