Changeset 3791563
- Timestamp:
- 11/08/2026 09:55:07 PM (less than one hour ago)
- Location:
- videowhisper-site-manager
- Files:
-
- 14 edited
- 1 copied
-
tags/1.21.0 (copied) (copied from videowhisper-site-manager/trunk )
-
tags/1.21.0/includes/actions/class-ai-action-registry.php (modified) (1 diff)
-
tags/1.21.0/includes/admin/class-vwsm-quick-setup.php (modified) (1 diff)
-
tags/1.21.0/includes/class-vwsm-tool-access.php (modified) (9 diffs)
-
tags/1.21.0/includes/class-vwsm-translation-tools.php (modified) (3 diffs)
-
tags/1.21.0/languages/videowhisper-site-manager.pot (modified) (22 diffs)
-
tags/1.21.0/readme.txt (modified) (1 diff)
-
tags/1.21.0/videowhisper-site-manager.php (modified) (2 diffs)
-
trunk/includes/actions/class-ai-action-registry.php (modified) (1 diff)
-
trunk/includes/admin/class-vwsm-quick-setup.php (modified) (1 diff)
-
trunk/includes/class-vwsm-tool-access.php (modified) (9 diffs)
-
trunk/includes/class-vwsm-translation-tools.php (modified) (3 diffs)
-
trunk/languages/videowhisper-site-manager.pot (modified) (22 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/videowhisper-site-manager.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
videowhisper-site-manager/tags/1.21.0/includes/actions/class-ai-action-registry.php
r3786440 r3791563 131 131 unset( $action ); 132 132 133 $actions = VWSM_Tool_Access::reviewed_content_actions( $actions ); 133 134 $actions = VWSM_User_Tool_Access::filter_actions( VWSM_Tool_Access::filter_actions( $actions ) ); 134 135 return $apply_grants ? VWSM_Relay_Permissions::filter_actions( VWSM_Native_Abilities::filter_actions( VWSM_Tool_Grants::filter_actions( $actions ) ) ) : $actions; -
videowhisper-site-manager/tags/1.21.0/includes/admin/class-vwsm-quick-setup.php
r3789255 r3791563 220 220 ) 221 221 ) . '">' . esc_html__( 'Native Abilities and connection approvals', 'videowhisper-site-manager' ) . '</a></p>'; 222 if ( class_exists( 'VWML_Settings' ) ) { 223 echo '<p><a href="' . esc_url( admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) ) . '">' . esc_html__( 'Enable Translator drafting and publication', 'videowhisper-site-manager' ) . '</a> — ' . esc_html__( 'Translation also requires these two Translator integration switches. Develop includes supported administrator tools after review; it retains personal exclusions and explicit connection restrictions.', 'videowhisper-site-manager' ) . '</p>'; } 222 224 echo '<p><a href="' . esc_url( VWSM_Admin_Guide::help_url( 'permissions' ) ) . '">' . esc_html__( 'Optional features and integration setup', 'videowhisper-site-manager' ) . '</a></p></details>'; 223 225 } -
videowhisper-site-manager/tags/1.21.0/includes/class-vwsm-tool-access.php
r3786440 r3791563 33 33 add_action( 'admin_bar_menu', array( __CLASS__, 'toolbar' ), 96 ); 34 34 add_action( 'admin_post_vwsm_tool_access_prepare', array( __CLASS__, 'prepare_post' ) ); 35 add_action( 'admin_post_vwsm_tool_access_selected', array( __CLASS__, 'selected_post' ) ); 35 36 add_action( 'admin_post_vwsm_tool_access_apply', array( __CLASS__, 'apply_post' ) ); 36 37 add_action( 'vwsm_settings_form_content_rows', array( __CLASS__, 'settings_link' ) ); … … 65 66 $fields['feature_contract'] = self::feature_signature(); 66 67 return self::digest( $fields ); 68 } 69 /** Native review records the content ceiling, including admin-only registrations. */ 70 private static function content_contracts( $names, $catalog ) { 71 $out = array(); 72 foreach ( $names as $name ) { 73 $a = $catalog[ $name ] ?? array(); 74 $domain = $a['permission_context']['content_domain'] ?? null; 75 if ( ! is_array( $domain ) ) { continue; } 76 $enums = array(); 77 $properties = (array) ( $a['inputSchema']['properties'] ?? array() ); 78 foreach ( array( 'type', 'post_type', 'taxonomy' ) as $field ) { 79 $property = (array) ( $properties[ $field ] ?? array() ); 80 $values = $property['enum'] ?? null; 81 if ( is_array( $values ) ) { $enums[ $field ] = $values; } 82 } 83 $out[ $name ] = array( 'domain' => $domain, 'enums' => $enums ); 84 } 85 return $out; 86 } 87 /** 88 * A runtime may omit builder types registered only in wp-admin. Keep the 89 * reviewed declaration when runtime scope is a subset; services still enforce 90 * actual enabled types. Any added type/taxonomy or other contract change fails 91 * the normal fingerprint check. Existing policies gain nothing on upgrade. 92 */ 93 public static function reviewed_content_actions( $actions ) { 94 if ( self::$preview ) { return $actions; } 95 $p = self::selection(); 96 $contracts = $p['content_contracts'] ?? array(); 97 if ( $p['legacy'] || ! is_array( $contracts ) ) { return $actions; } 98 foreach ( $actions as $name => $a ) { 99 $saved = $contracts[ $name ] ?? null; 100 $domain = $a['permission_context']['content_domain'] ?? null; 101 if ( ! is_array( $saved ) || ! self::valid_content_domain( $saved['domain'] ?? null ) || ! is_array( $saved['enums'] ?? null ) || ! self::valid_content_domain( $domain ) ) { continue; } 102 $subset = true; 103 foreach ( $domain as $type => $taxonomies ) { 104 if ( ! is_array( $taxonomies ) || ! isset( $saved['domain'][ $type ] ) || ! is_array( $saved['domain'][ $type ] ) || array_diff( $taxonomies, $saved['domain'][ $type ] ) ) { $subset = false; break; } 105 } 106 $next = $a; 107 foreach ( $saved['enums'] as $field => $values ) { 108 $current = $a['inputSchema']['properties'][ $field ]['enum'] ?? null; 109 if ( ! in_array( $field, array( 'type', 'post_type', 'taxonomy' ), true ) || ! is_array( $values ) || count( array_filter( $values, 'is_string' ) ) !== count( $values ) || ! is_array( $current ) || count( array_filter( $current, 'is_string' ) ) !== count( $current ) || array_diff( $current, $values ) ) { $subset = false; break; } 110 $next['inputSchema']['properties'][ $field ]['enum'] = $values; 111 } 112 if ( $subset ) { 113 $next['permission_context']['content_domain'] = $saved['domain']; 114 // The stored exact fingerprint authenticates the entire projected contract. 115 if ( isset( $p['tools'][ $name ] ) && is_string( $p['tools'][ $name ] ) && hash_equals( $p['tools'][ $name ], self::fingerprint( $next ) ) ) { $actions[ $name ] = $next; } 116 } 117 } 118 return $actions; 119 } 120 private static function valid_content_domain( $domain ) { 121 if ( ! is_array( $domain ) || count( $domain ) > 1000 ) { return false; } 122 foreach ( $domain as $type => $taxonomies ) { 123 if ( ! is_string( $type ) || ! is_array( $taxonomies ) || count( $taxonomies ) > 1000 || count( array_filter( $taxonomies, 'is_string' ) ) !== count( $taxonomies ) ) { return false; } 124 } 125 return true; 67 126 } 68 127 /** Missing policy preserves upgrades; malformed configured policy is closed. */ … … 380 439 } 381 440 return $response; 441 } 442 /** Selected contract updates retain every unselected fingerprint and policy constraint. */ 443 public static function prepare_selected( $group, $names ) { 444 if ( ! self::native() || ! in_array( $group, array( 'admins', 'others' ), true ) || ! is_array( $names ) || ! $names || count( $names ) > 100 || count( array_filter( $names, 'is_string' ) ) !== count( $names ) ) { 445 return self::error( __( 'Choose supported tools in a native administrator session.', 'videowhisper-site-manager' ) ); } 446 $prior = self::policy(); 447 $p = self::selection( $group ); 448 $catalog = self::supported(); 449 if ( ! is_array( $prior ) || ! isset( $prior['groups'][ $group ] ) || $p['legacy'] || 'disabled' === $p['mode'] ) { 450 return self::error( __( 'Review a role preset before updating individual tool definitions.', 'videowhisper-site-manager' ) ); } 451 $groups = $prior['groups']; 452 foreach ( array_unique( $names ) as $name ) { 453 if ( ! isset( $catalog[ $name ] ) || ! self::selected_allowed( $p, $group, $name, $catalog[ $name ] ) ) { 454 return self::error( __( 'A selected definition exceeds the current role constraints. Review the role policy separately.', 'videowhisper-site-manager' ) ); } 455 $groups[ $group ]['tools'][ $name ] = self::fingerprint( $catalog[ $name ] ); 456 } 457 if ( count( $groups[ $group ]['tools'] ) > VWSM_Tool_Grants::MAX_TOOLS ) { 458 return self::error( __( 'Invalid tool selection.', 'videowhisper-site-manager' ) ); } 459 ksort( $groups[ $group ]['tools'] ); 460 $groups[ $group ]['content_contracts'] = array_merge( is_array( $p['content_contracts'] ?? null ) ? $p['content_contracts'] : array(), self::content_contracts( $names, $catalog ) ); 461 $id = wp_generate_uuid4(); 462 $r = array( 463 'id' => $id, 'operator' => get_current_user_id(), 'blog' => get_current_blog_id(), 464 'session' => self::digest( wp_get_session_token() ), 'expires' => time() + 600, 465 'prior' => self::digest( $prior ), 466 'settings' => self::digest( array( get_option( 'vwsm_settings', array() ), get_option( 'vwsm_permission_epoch', '' ) ) ), 467 'catalog' => self::digest( $catalog ), 'groups' => $groups, 468 'relay_review_required' => self::relay_review_required(), 469 'selected_updates' => array( $group => array_values( array_unique( $names ) ) ), 470 ); 471 set_transient( 'vwsm_tool_review_' . $id, $r, 600 ); 472 return $r; 473 } 474 private static function selected_allowed( $p, $group, $name, $action ) { 475 if ( $p['legacy'] || 'disabled' === $p['mode'] || ( 'custom' !== $p['mode'] && ! self::mode_allows( $p['mode'], $name, $action, $group ) ) || ( $p['draft_only'] && ! self::mode_allows( 'drafts', $name, $action, $group ) ) ) { 476 return false; } 477 $risk = self::risk( $name, $action ); 478 return ! ( ( 'others' === $group && ( 'mcp:admin' === $action['required_scope'] || ( ! $action['read_only'] && 'safe' !== $risk ) ) ) || ( 'developer' === $risk && 'developer' !== $p['level'] ) || ( 'power' === $risk && 'safe' === $p['level'] ) ); 382 479 } 383 480 /** Exact native review; raw settings digest detects concurrent configuration changes. */ … … 438 535 'tools' => $tools, 439 536 'features' => 'disabled' !== $mode, 537 'content_contracts' => self::content_contracts( $names, $catalog ), 440 538 ); 441 539 } … … 513 611 echo '<tr><th>' . esc_html__( 'Tool access', 'videowhisper-site-manager' ) . '</th><td><a href="' . esc_url( self::url() ) . '">' . esc_html__( 'Review role presets and individual tools', 'videowhisper-site-manager' ) . '</a><p class="description">' . esc_html__( 'Reviewed role presets may enable API feature switches for that group. Site Read Only, publication controls, connection approvals and WordPress permissions still apply.', 'videowhisper-site-manager' ) . '</p></td></tr>'; } 514 612 public static function prepare_post() { 613 self::require_post(); 515 614 check_admin_referer( 'vwsm_tool_access_prepare' ); 516 615 $modes = isset( $_POST['modes'] ) && is_array( $_POST['modes'] ) ? wp_unslash( $_POST['modes'] ) : null; … … 532 631 } 533 632 public static function apply_post() { 633 self::require_post(); 534 634 check_admin_referer( 'vwsm_tool_access_apply' ); 535 635 $id = isset( $_POST['review'] ) && is_string( $_POST['review'] ) ? wp_unslash( $_POST['review'] ) : ''; … … 541 641 wp_safe_redirect( self::url( array( 'saved' => 1 ) ) ); 542 642 exit; 643 } 644 private static function require_post() { 645 if ( 'POST' !== ( $_SERVER['REQUEST_METHOD'] ?? '' ) ) { 646 wp_die( esc_html__( 'Use the reviewed POST form for this action.', 'videowhisper-site-manager' ), '', array( 'response' => 405 ) ); } 647 } 648 public static function selected_post() { 649 self::require_post(); 650 check_admin_referer( 'vwsm_tool_access_selected' ); 651 $group = isset( $_POST['group'] ) && is_string( $_POST['group'] ) ? wp_unslash( $_POST['group'] ) : ''; 652 $names = isset( $_POST['selected_definitions'] ) && is_array( $_POST['selected_definitions'] ) ? wp_unslash( $_POST['selected_definitions'] ) : array(); 653 $r = self::prepare_selected( $group, $names ); 654 if ( is_wp_error( $r ) ) { 655 wp_die( esc_html( $r->get_error_message() ), '', array( 'response' => 409 ) ); } 656 wp_safe_redirect( self::url( array( 'review' => $r['id'] ) ) ); 657 exit; 658 } 659 private static function selected_form() { 660 $catalog = self::supported(); 661 echo '<details id="vwsm-selected-definitions"><summary>' . esc_html__( 'Review selected new or changed definitions', 'videowhisper-site-manager' ) . '</summary><p>' . esc_html__( 'Update only the checked definitions. Keep the current preset, draft limits, other role groups, unselected fingerprints, personal restrictions and connection/package approvals. Unselected stale tools remain unavailable.', 'videowhisper-site-manager' ) . '</p>'; 662 foreach ( array( 'admins', 'others' ) as $group ) { 663 $p = self::selection( $group ); 664 $candidates = array_filter( $catalog, static function ( $a, $name ) use ( $p, $group ) { 665 return self::selected_allowed( $p, $group, $name, $a ) && ( ! isset( $p['tools'][ $name ] ) || ! hash_equals( $p['tools'][ $name ], self::fingerprint( $a ) ) ); 666 }, ARRAY_FILTER_USE_BOTH ); 667 if ( ! $candidates ) { 668 continue; } 669 echo '<form method="post" action="' . esc_url( admin_url( 'admin-post.php' ) ) . '"><input type="hidden" name="action" value="vwsm_tool_access_selected"><input type="hidden" name="group" value="' . esc_attr( $group ) . '"><h3>' . esc_html( 'admins' === $group ? __( 'Admins', 'videowhisper-site-manager' ) : __( 'Other Roles', 'videowhisper-site-manager' ) ) . '</h3>'; 670 wp_nonce_field( 'vwsm_tool_access_selected' ); 671 foreach ( $candidates as $name => $a ) { 672 echo '<p><label><input type="checkbox" name="selected_definitions[]" value="' . esc_attr( $name ) . '"> <code>' . esc_html( $name ) . '</code> — ' . esc_html( wp_html_excerpt( wp_strip_all_tags( $a['description'] ), 180 ) ) . '</label></p>'; } 673 submit_button( __( 'Review selected definitions', 'videowhisper-site-manager' ), 'secondary' ); 674 echo '</form>'; 675 } 676 echo '</details>'; 543 677 } 544 678 /** Quick selector is also used on Activate; forms never nest. */ … … 634 768 echo '<div class="notice notice-error"><p>' . esc_html__( 'The review expired. Prepare it again.', 'videowhisper-site-manager' ) . '</p></div>'; } 635 769 if ( $r ) { 770 if ( isset( $r['selected_updates'] ) ) { 771 echo '<p><strong>' . esc_html__( 'Only these tool definitions will change:', 'videowhisper-site-manager' ) . '</strong> <code>' . esc_html( implode( ', ', array_merge( ...array_values( $r['selected_updates'] ) ) ) ) . '</code></p><p>' . esc_html__( 'All other role constraints and unselected fingerprints are retained.', 'videowhisper-site-manager' ) . '</p>'; } 636 772 echo '<p><strong>' . esc_html__( 'Relay approval mode', 'videowhisper-site-manager' ) . '</strong>: ' . esc_html( $r['relay_review_required'] ? __( 'Require an administrator review for each account and relay client.', 'videowhisper-site-manager' ) : __( 'Use reviewed role presets; no extra per-client admin step. Custom, Read Only, Safe Drafts and revoked policies stay restrictive. Existing Full policies, including partial Full selections, will follow the current reviewed role preset.', 'videowhisper-site-manager' ) ) . '</p>'; 637 773 echo '<h2>' . esc_html__( 'Review role access', 'videowhisper-site-manager' ) . '</h2><table class="widefat striped"><thead><tr><th>' . esc_html__( 'Group', 'videowhisper-site-manager' ) . '</th><th>' . esc_html__( 'Current → proposed', 'videowhisper-site-manager' ) . '</th><th>' . esc_html__( 'Tools and constraints', 'videowhisper-site-manager' ) . '</th></tr></thead><tbody>'; … … 647 783 if ( isset( $_GET['saved'] ) ) { 648 784 echo '<div class="notice notice-success"><p>' . esc_html__( 'Tool access saved. Existing client records and package allowlists were retained; the reviewed relay approval mode now applies.', 'videowhisper-site-manager' ) . '</p></div>'; } 785 $stale = false; 786 foreach ( self::supported() as $name => $a ) { 787 foreach ( array( 'admins', 'others' ) as $group ) { 788 $p = self::selection( $group ); 789 if ( isset( $p['tools'][ $name ] ) && ! hash_equals( $p['tools'][ $name ], self::fingerprint( $a ) ) ) { 790 $stale = true; } 791 } 792 } 793 if ( $stale ) { 794 echo '<div class="notice notice-warning"><p>' . esc_html__( 'Some selected definitions changed and are unavailable. Review only the needed definitions below to retain unrelated permissions.', 'videowhisper-site-manager' ) . ' <a href="#vwsm-selected-definitions">' . esc_html__( 'Review changed definitions', 'videowhisper-site-manager' ) . '</a></p></div>'; } 649 795 self::quick( true ); 796 self::selected_form(); 650 797 echo '<details style="margin-top:24px"><summary>' . esc_html__( 'How presets and approvals work', 'videowhisper-site-manager' ) . '</summary><p>' . esc_html__( 'Disabled blocks Site Manager tools. Read exposes reads. Draft allows unpublished content and private review proposals. Write adds routine edits, taxonomy changes, recoverable trash and own-action rollback when a snapshot exists. Admin adds routine site administration; Develop adds high-risk code and package operations. Admin and Develop are admin-only. Custom retains draft protection and requires review for each new or changed tool. WordPress core REST access from an Application Password is outside this plugin policy.', 'videowhisper-site-manager' ) . '</p><p>' . esc_html__( 'This table lists supported metadata for installed integrations. A checked tool is an availability ceiling, not proof that the current connection can execute it. Native Abilities, relay consent, account plans, object capabilities and package allowlists may narrow it further. No arbitrary code executor is provided.', 'videowhisper-site-manager' ) . '</p>'; 651 798 do_action( 'vwsm_tool_access_help' ); -
videowhisper-site-manager/tags/1.21.0/includes/class-vwsm-translation-tools.php
r3791171 r3791563 133 133 public static function can_publish() { 134 134 return ! VWSM_Tool_Grants::is_safe_drafts() && VWSM_Tool_Access::publication_enabled() && ! empty( VWSM_Access_Control::get_settings()['allow_publish'] ); } 135 /** Explain configuration separately from per-object publication readiness. */ 136 public static function publication_readiness() { 137 $translator = ( new VWML_Settings() )->get(); 138 $site = VWSM_Access_Control::get_settings(); 139 $admin = current_user_can( 'manage_options' ); 140 $tools = VWSM_AI_Action_Registry::get_actions(); 141 $checks = array( 142 'integration_drafting' => ! empty( $translator['integration_enabled'] ), 143 'integration_publication' => ! empty( $translator['integration_publish'] ), 144 'site_editing' => empty( $site['read_only'] ), 145 'site_publication' => ! empty( $site['allow_publish'] ), 146 'permission_mode_publication' => self::can_publish(), 147 'publish_tool_approved' => isset( $tools['translation_publish'] ) || isset( $tools['translation_admin_publish'] ), 148 ); 149 return array( 150 'configuration_ready' => ! in_array( false, $checks, true ), 151 'checks' => $checks, 152 'translator_settings_url' => $admin ? admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) : '', 153 'site_setup_url' => $admin ? VWSM_Onboarding_Approvals::url( array( 'activation_section' => 'finish' ) ) : '', 154 'tool_access_url' => $admin ? VWSM_Tool_Access::url() : '', 155 'guidance' => __( 'An administrator enables integration drafting and publication in Translator Settings, then allows editing and direct publishing in Site Manager Quick setup and reviews the role tools. Develop includes supported administrator tools after review; explicit client restrictions and personal exclusions remain in force. Ask the administrator to review the current connection if its publish tool is missing. Each translation still needs an editable original, a complete current draft and resolved protection review.', 'videowhisper-site-manager' ), 156 ); 157 } 135 158 /** 136 159 * Declare versioned tools only when the owning integration is available. … … 305 328 'integration_enabled' => VWML_API::enabled(), 306 329 'publication_enabled' => ! empty( ( new VWML_Settings() )->get()['integration_publish'] ) && self::can_publish(), 330 'publication_readiness' => self::publication_readiness(), 307 331 'administration_available' => VWML_API::admin(), 308 332 'setup_url' => current_user_can( 'manage_options' ) ? admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) : '', … … 327 351 return self::with_editorial_action( $action, 'route_propose', static fn() => method_exists( 'VWML_API', 'propose_route' ) ? VWML_API::propose_route( $args['post_id'], $args['locale'], $args['path'], $args['version'], $args['source_hash'] ) : VWML_API::error() ); 328 352 case 'translation_publish': 329 return self::with_editorial_action( $action, 'publish', static fn() => self::can_publish() ? VWML_API::publish( $args['post_id'], $args['locale'], $args['source_hash'], $args['version'], false, true ) : VWML_API::error() );353 return self::with_editorial_action( $action, 'publish', static fn() => self::can_publish() ? VWML_API::publish( $args['post_id'], $args['locale'], $args['source_hash'], $args['version'], false, true ) : new WP_Error( 'vwsm_translation_publication_setup', __( 'Translation publication is disabled by a current permission or setting. Ask an administrator to review the publication readiness checklist.', 'videowhisper-site-manager' ), array( 'status' => 403, 'publication_readiness' => self::publication_readiness() ) ) ); 330 354 } 331 355 return VWML_API::error(); -
videowhisper-site-manager/tags/1.21.0/languages/videowhisper-site-manager.pot
r3791171 r3791563 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 1.2 0.0\n"5 "Project-Id-Version: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 1.21.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/videowhisper-site-manager\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-11-08T 12:06:44+00:00\n"12 "POT-Creation-Date: 2026-11-08T20:50:15+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 40 40 msgstr "" 41 41 42 #: includes/actions/class-ai-action-registry.php:14 142 #: includes/actions/class-ai-action-registry.php:142 43 43 msgid "The tool must match the route." 44 44 msgstr "" 45 45 46 #: includes/actions/class-ai-action-registry.php:14 546 #: includes/actions/class-ai-action-registry.php:146 47 47 #: includes/class-access-control.php:212 48 48 #: includes/mcp/class-mcp-server.php:560 … … 50 50 msgstr "" 51 51 52 #: includes/actions/class-ai-action-registry.php:14 852 #: includes/actions/class-ai-action-registry.php:149 53 53 msgid "The action does not belong to this route." 54 54 msgstr "" … … 530 530 #: includes/admin/class-vwsm-quick-setup.php:135 531 531 #: includes/admin/class-vwsm-quick-setup.php:158 532 #: includes/class-vwsm-tool-access.php: 629532 #: includes/class-vwsm-tool-access.php:763 533 533 #: includes/services/class-vwsm-editorial-workflow.php:308 534 534 msgid "Native administrator access is required." … … 1223 1223 #. translators: %1$s: tool identifier, %2$s: capability group label. 1224 1224 #: includes/admin/class-vwsm-quick-setup.php:195 1225 #: includes/admin/class-vwsm-quick-setup.php:23 51225 #: includes/admin/class-vwsm-quick-setup.php:237 1226 1226 #: includes/class-vwsm-relay-review.php:388 1227 #: includes/class-vwsm-tool-access.php:557 1228 #: includes/class-vwsm-tool-access.php:586 1229 #: includes/class-vwsm-tool-access.php:592 1230 #: includes/class-vwsm-tool-access.php:619 1231 #: includes/class-vwsm-tool-access.php:639 1227 #: includes/class-vwsm-tool-access.php:669 1228 #: includes/class-vwsm-tool-access.php:691 1229 #: includes/class-vwsm-tool-access.php:720 1230 #: includes/class-vwsm-tool-access.php:726 1231 #: includes/class-vwsm-tool-access.php:753 1232 #: includes/class-vwsm-tool-access.php:775 1232 1233 msgid "Admins" 1233 1234 msgstr "" … … 1236 1237 #. translators: %1$s: tool identifier, %2$s: capability group label. 1237 1238 #: includes/admin/class-vwsm-quick-setup.php:196 1238 #: includes/admin/class-vwsm-quick-setup.php:23 51239 #: includes/admin/class-vwsm-quick-setup.php:237 1239 1240 #: includes/class-vwsm-relay-review.php:388 1240 #: includes/class-vwsm-tool-access.php:558 1241 #: includes/class-vwsm-tool-access.php:586 1242 #: includes/class-vwsm-tool-access.php:592 1243 #: includes/class-vwsm-tool-access.php:619 1244 #: includes/class-vwsm-tool-access.php:639 1241 #: includes/class-vwsm-tool-access.php:669 1242 #: includes/class-vwsm-tool-access.php:692 1243 #: includes/class-vwsm-tool-access.php:720 1244 #: includes/class-vwsm-tool-access.php:726 1245 #: includes/class-vwsm-tool-access.php:753 1246 #: includes/class-vwsm-tool-access.php:775 1245 1247 msgid "Other Roles" 1246 1248 msgstr "" … … 1267 1269 1268 1270 #: includes/admin/class-vwsm-quick-setup.php:210 1269 #: includes/class-vwsm-tool-access.php: 5701271 #: includes/class-vwsm-tool-access.php:704 1270 1272 msgid "Require an extra administrator review for each relay client" 1271 1273 msgstr "" … … 1284 1286 1285 1287 #: includes/admin/class-vwsm-quick-setup.php:213 1286 #: includes/admin/class-vwsm-quick-setup.php:23 11288 #: includes/admin/class-vwsm-quick-setup.php:233 1287 1289 msgid "Review activation" 1288 1290 msgstr "" … … 1300 1302 msgstr "" 1301 1303 1302 #: includes/admin/class-vwsm-quick-setup.php:222 1304 #: includes/admin/class-vwsm-quick-setup.php:223 1305 msgid "Enable Translator drafting and publication" 1306 msgstr "" 1307 1308 #: includes/admin/class-vwsm-quick-setup.php:223 1309 msgid "Translation also requires these two Translator integration switches. Develop includes supported administrator tools after review; it retains personal exclusions and explicit connection restrictions." 1310 msgstr "" 1311 1312 #: includes/admin/class-vwsm-quick-setup.php:224 1303 1313 msgid "Optional features and integration setup" 1304 1314 msgstr "" 1305 1315 1306 #: includes/admin/class-vwsm-quick-setup.php:23 11316 #: includes/admin/class-vwsm-quick-setup.php:233 1307 1317 msgid "Setting" 1308 1318 msgstr "" 1309 1319 1310 #: includes/admin/class-vwsm-quick-setup.php:23 11311 #: includes/class-vwsm-tool-access.php: 6371320 #: includes/admin/class-vwsm-quick-setup.php:233 1321 #: includes/class-vwsm-tool-access.php:773 1312 1322 msgid "Current → proposed" 1313 1323 msgstr "" 1314 1324 1315 1325 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1316 #: includes/admin/class-vwsm-quick-setup.php:23 51326 #: includes/admin/class-vwsm-quick-setup.php:237 1317 1327 #, php-format 1318 1328 msgid "%1$s → %2$s · Selected tools: %3$d" … … 1320 1330 1321 1331 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1322 #: includes/admin/class-vwsm-quick-setup.php:23 51332 #: includes/admin/class-vwsm-quick-setup.php:237 1323 1333 msgid "Existing settings" 1324 1334 msgstr "" 1325 1335 1326 1336 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1327 #: includes/admin/class-vwsm-quick-setup.php:23 51337 #: includes/admin/class-vwsm-quick-setup.php:237 1328 1338 msgid "Exact tools" 1329 1339 msgstr "" 1330 1340 1331 #: includes/admin/class-vwsm-quick-setup.php:23 71341 #: includes/admin/class-vwsm-quick-setup.php:239 1332 1342 msgid "Allowed roles" 1333 1343 msgstr "" 1334 1344 1335 #: includes/admin/class-vwsm-quick-setup.php:23 71345 #: includes/admin/class-vwsm-quick-setup.php:239 1336 1346 msgid "AI/SI editing" 1337 1347 msgstr "" 1338 1348 1339 #: includes/admin/class-vwsm-quick-setup.php:23 71349 #: includes/admin/class-vwsm-quick-setup.php:239 1340 1350 msgid "Direct publishing" 1341 1351 msgstr "" 1342 1352 1343 #: includes/admin/class-vwsm-quick-setup.php:23 71353 #: includes/admin/class-vwsm-quick-setup.php:239 1344 1354 msgid "Extra relay-client admin review" 1345 1355 msgstr "" 1346 1356 1347 #: includes/admin/class-vwsm-quick-setup.php:2 391348 #: includes/admin/class-vwsm-quick-setup.php:24 01357 #: includes/admin/class-vwsm-quick-setup.php:241 1358 #: includes/admin/class-vwsm-quick-setup.php:242 1349 1359 msgid "On" 1350 1360 msgstr "" 1351 1361 1352 #: includes/admin/class-vwsm-quick-setup.php:2 391353 #: includes/admin/class-vwsm-quick-setup.php:24 01362 #: includes/admin/class-vwsm-quick-setup.php:241 1363 #: includes/admin/class-vwsm-quick-setup.php:242 1354 1364 msgid "Off" 1355 1365 msgstr "" 1356 1366 1357 #: includes/admin/class-vwsm-quick-setup.php:24 41367 #: includes/admin/class-vwsm-quick-setup.php:246 1358 1368 msgid "Preset-based relay access" 1359 1369 msgstr "" 1360 1370 1361 #: includes/admin/class-vwsm-quick-setup.php:24 41371 #: includes/admin/class-vwsm-quick-setup.php:246 1362 1372 msgid "Existing Full client policies will follow the reviewed role preset, including Full policies with a previously partial tool selection. Custom, Read Only, Safe Drafts and revoked client policies remain restrictive. Personal exclusions are retained." 1363 1373 msgstr "" 1364 1374 1365 #: includes/admin/class-vwsm-quick-setup.php:24 51375 #: includes/admin/class-vwsm-quick-setup.php:247 1366 1376 msgid "These changes affect site/role availability. Client scopes, explicit restricted or revoked grants, personal exclusions, native Abilities and exact package approvals remain separate. No credential or customer record is changed." 1367 1377 msgstr "" 1368 1378 1369 #: includes/admin/class-vwsm-quick-setup.php:24 71379 #: includes/admin/class-vwsm-quick-setup.php:249 1370 1380 msgid "I reviewed these exact site and role changes." 1371 1381 msgstr "" 1372 1382 1373 #: includes/admin/class-vwsm-quick-setup.php:2 481383 #: includes/admin/class-vwsm-quick-setup.php:250 1374 1384 msgid "Activate and continue" 1375 1385 msgstr "" 1376 1386 1377 #: includes/admin/class-vwsm-quick-setup.php:2 491387 #: includes/admin/class-vwsm-quick-setup.php:251 1378 1388 msgid "Back to setup" 1379 1389 msgstr "" … … 2488 2498 #: includes/admin/views/native-abilities-page.php:70 2489 2499 #: includes/class-vwsm-local-oauth.php:940 2490 #: includes/class-vwsm-tool-access.php:4 62491 #: includes/class-vwsm-tool-access.php: 6062500 #: includes/class-vwsm-tool-access.php:47 2501 #: includes/class-vwsm-tool-access.php:740 2492 2502 msgid "Read" 2493 2503 msgstr "" … … 5351 5361 #: includes/class-vwsm-local-oauth.php:539 5352 5362 #: includes/class-vwsm-local-oauth.php:918 5353 #: includes/class-vwsm-tool-access.php:5 15363 #: includes/class-vwsm-tool-access.php:52 5354 5364 #: includes/class-vwsm-user-tool-access.php:32 5355 5365 msgid "Custom" … … 5499 5509 #: includes/class-vwsm-local-oauth.php:940 5500 5510 #: includes/class-vwsm-relay-review.php:61 5501 #: includes/class-vwsm-tool-access.php:4 85511 #: includes/class-vwsm-tool-access.php:49 5502 5512 msgid "Write" 5503 5513 msgstr "" … … 5654 5664 5655 5665 #: includes/class-vwsm-native-abilities.php:484 5656 #: includes/class-vwsm-tool-access.php: 6525666 #: includes/class-vwsm-tool-access.php:799 5657 5667 msgid "Native Abilities" 5658 5668 msgstr "" … … 5724 5734 #: includes/class-vwsm-relay-review.php:16 5725 5735 #: includes/class-vwsm-relay-review.php:60 5726 #: includes/class-vwsm-tool-access.php:4 75736 #: includes/class-vwsm-tool-access.php:48 5727 5737 #: includes/class-vwsm-user-tool-access.php:24 5728 5738 msgid "Draft" … … 5747 5757 #: includes/class-vwsm-relay-review.php:28 5748 5758 #: includes/class-vwsm-relay-review.php:36 5749 #: includes/class-vwsm-tool-access.php: 3865759 #: includes/class-vwsm-tool-access.php:483 5750 5760 msgid "Native administrator review is required." 5751 5761 msgstr "" … … 5773 5783 5774 5784 #: includes/class-vwsm-relay-review.php:58 5775 #: includes/class-vwsm-tool-access.php:4 55785 #: includes/class-vwsm-tool-access.php:46 5776 5786 #: includes/class-vwsm-user-tool-access.php:22 5777 5787 msgid "Disabled" … … 5779 5789 5780 5790 #: includes/class-vwsm-relay-review.php:64 5781 #: includes/class-vwsm-tool-access.php: 495791 #: includes/class-vwsm-tool-access.php:50 5782 5792 #: includes/class-vwsm-user-tool-access.php:29 5783 5793 msgid "Admin" … … 5785 5795 5786 5796 #: includes/class-vwsm-relay-review.php:65 5787 #: includes/class-vwsm-tool-access.php:5 05788 #: includes/class-vwsm-tool-access.php: 6095797 #: includes/class-vwsm-tool-access.php:51 5798 #: includes/class-vwsm-tool-access.php:743 5789 5799 #: includes/class-vwsm-user-tool-access.php:30 5790 5800 msgid "Develop" … … 6032 6042 msgstr "" 6033 6043 6034 #: includes/class-vwsm-tool-access.php: 3716044 #: includes/class-vwsm-tool-access.php:430 6035 6045 msgid "This tool is disabled by the site Tool access policy. Ask an administrator to review Tool access." 6036 6046 msgstr "" 6037 6047 6038 #: includes/class-vwsm-tool-access.php:388 6048 #: includes/class-vwsm-tool-access.php:445 6049 msgid "Choose supported tools in a native administrator session." 6050 msgstr "" 6051 6052 #: includes/class-vwsm-tool-access.php:450 6053 msgid "Review a role preset before updating individual tool definitions." 6054 msgstr "" 6055 6056 #: includes/class-vwsm-tool-access.php:454 6057 msgid "A selected definition exceeds the current role constraints. Review the role policy separately." 6058 msgstr "" 6059 6060 #: includes/class-vwsm-tool-access.php:458 6061 #: includes/class-vwsm-tool-access.php:517 6062 msgid "Invalid tool selection." 6063 msgstr "" 6064 6065 #: includes/class-vwsm-tool-access.php:485 6039 6066 msgid "Invalid relay review mode." 6040 6067 msgstr "" 6041 6068 6042 #: includes/class-vwsm-tool-access.php: 3976069 #: includes/class-vwsm-tool-access.php:494 6043 6070 msgid "Invalid feature selection." 6044 6071 msgstr "" 6045 6072 6046 #: includes/class-vwsm-tool-access.php: 4046073 #: includes/class-vwsm-tool-access.php:501 6047 6074 msgid "Choose a supported mode for each group." 6048 6075 msgstr "" 6049 6076 6050 #: includes/class-vwsm-tool-access.php:420 6051 msgid "Invalid tool selection." 6052 msgstr "" 6053 6054 #: includes/class-vwsm-tool-access.php:424 6077 #: includes/class-vwsm-tool-access.php:521 6055 6078 msgid "A selected tool is unavailable for this group or draft constraint. Refresh the table and review again." 6056 6079 msgstr "" 6057 6080 6058 #: includes/class-vwsm-tool-access.php: 4436081 #: includes/class-vwsm-tool-access.php:541 6059 6082 msgid "Choose a preset or review a Custom tool selection for both groups before using preset-based relay access." 6060 6083 msgstr "" 6061 6084 6062 #: includes/class-vwsm-tool-access.php: 4716085 #: includes/class-vwsm-tool-access.php:569 6063 6086 msgid "The review expired or settings/tools changed. Prepare a fresh review." 6064 6087 msgstr "" 6065 6088 6066 #: includes/class-vwsm-tool-access.php: 4736089 #: includes/class-vwsm-tool-access.php:571 6067 6090 msgid "This review has already been used." 6068 6091 msgstr "" 6069 6092 6070 #: includes/class-vwsm-tool-access.php: 4946093 #: includes/class-vwsm-tool-access.php:592 6071 6094 msgid "Another administrator changed the policy. Review again." 6072 6095 msgstr "" 6073 6096 6074 #: includes/class-vwsm-tool-access.php: 4996075 #: includes/class-vwsm-tool-access.php: 5076076 #: includes/class-vwsm-tool-access.php: 5136077 #: includes/class-vwsm-tool-access.php: 6306097 #: includes/class-vwsm-tool-access.php:597 6098 #: includes/class-vwsm-tool-access.php:605 6099 #: includes/class-vwsm-tool-access.php:611 6100 #: includes/class-vwsm-tool-access.php:764 6078 6101 msgid "Tool access" 6079 6102 msgstr "" 6080 6103 6081 #: includes/class-vwsm-tool-access.php: 5136104 #: includes/class-vwsm-tool-access.php:611 6082 6105 msgid "Review role presets and individual tools" 6083 6106 msgstr "" 6084 6107 6085 #: includes/class-vwsm-tool-access.php: 5136108 #: includes/class-vwsm-tool-access.php:611 6086 6109 msgid "Reviewed role presets may enable API feature switches for that group. Site Read Only, publication controls, connection approvals and WordPress permissions still apply." 6087 6110 msgstr "" 6088 6111 6089 #: includes/class-vwsm-tool-access.php: 5376112 #: includes/class-vwsm-tool-access.php:637 6090 6113 msgid "Confirm the reviewed policy first." 6091 6114 msgstr "" 6092 6115 6093 #: includes/class-vwsm-tool-access.php:552 6116 #: includes/class-vwsm-tool-access.php:646 6117 msgid "Use the reviewed POST form for this action." 6118 msgstr "" 6119 6120 #: includes/class-vwsm-tool-access.php:661 6121 msgid "Review selected new or changed definitions" 6122 msgstr "" 6123 6124 #: includes/class-vwsm-tool-access.php:661 6125 msgid "Update only the checked definitions. Keep the current preset, draft limits, other role groups, unselected fingerprints, personal restrictions and connection/package approvals. Unselected stale tools remain unavailable." 6126 msgstr "" 6127 6128 #: includes/class-vwsm-tool-access.php:673 6129 msgid "Review selected definitions" 6130 msgstr "" 6131 6132 #: includes/class-vwsm-tool-access.php:686 6094 6133 msgid "Site Read Only is on." 6095 6134 msgstr "" 6096 6135 6097 #: includes/class-vwsm-tool-access.php: 5526136 #: includes/class-vwsm-tool-access.php:686 6098 6137 msgid "Write presets remain blocked until editing is unlocked. Presets never override the site publishing switch." 6099 6138 msgstr "" 6100 6139 6101 #: includes/class-vwsm-tool-access.php: 5526140 #: includes/class-vwsm-tool-access.php:686 6102 6141 msgid "Review site editing controls" 6103 6142 msgstr "" 6104 6143 6105 #: includes/class-vwsm-tool-access.php: 5556144 #: includes/class-vwsm-tool-access.php:689 6106 6145 msgid "Role presets" 6107 6146 msgstr "" 6108 6147 6109 #: includes/class-vwsm-tool-access.php: 5556148 #: includes/class-vwsm-tool-access.php:689 6110 6149 msgid "Choose the tools available to each group, then review before saving. Client scopes and explicit connection restrictions still apply." 6111 6150 msgstr "" 6112 6151 6113 #: includes/class-vwsm-tool-access.php: 5706152 #: includes/class-vwsm-tool-access.php:704 6114 6153 msgid "Extra client admin review (optional)" 6115 6154 msgstr "" 6116 6155 6117 #: includes/class-vwsm-tool-access.php: 5706156 #: includes/class-vwsm-tool-access.php:704 6118 6157 msgid "Optional. When off, eligible connections use the reviewed role preset. Custom, Read Only, Safe Drafts and revoked client policies stay restrictive. Existing Full policies follow the role preset, including Full policies with a previously partial tool selection. Your AI app may request its own tool approval." 6119 6158 msgstr "" 6120 6159 6121 #: includes/class-vwsm-tool-access.php: 5716160 #: includes/class-vwsm-tool-access.php:705 6122 6161 msgid "Presets configure API features for the selected tools. Saved credentials, allowed roles, media source hosts, SEO provider and package approvals are retained. Other Roles still need an enabled AI role and the relevant WordPress capabilities." 6123 6162 msgstr "" 6124 6163 6125 #: includes/class-vwsm-tool-access.php: 5736126 #: includes/class-vwsm-tool-access.php: 5756164 #: includes/class-vwsm-tool-access.php:707 6165 #: includes/class-vwsm-tool-access.php:709 6127 6166 #: includes/services/class-vwsm-search-evidence.php:265 6128 6167 msgid "Review tool access" 6129 6168 msgstr "" 6130 6169 6131 #: includes/class-vwsm-tool-access.php: 5766170 #: includes/class-vwsm-tool-access.php:710 6132 6171 msgid "View all tools" 6133 6172 msgstr "" 6134 6173 6135 #: includes/class-vwsm-tool-access.php: 5846174 #: includes/class-vwsm-tool-access.php:718 6136 6175 msgid "Select tools by feature" 6137 6176 msgstr "" 6138 6177 6139 #: includes/class-vwsm-tool-access.php: 5926178 #: includes/class-vwsm-tool-access.php:726 6140 6179 msgid "Supported tools" 6141 6180 msgstr "" 6142 6181 6143 #: includes/class-vwsm-tool-access.php: 5926182 #: includes/class-vwsm-tool-access.php:726 6144 6183 msgid "Changing a checkbox selects Custom for that group. Draft-only protection is retained when customizing Draft. Availability also depends on installed integrations, enabled features and the connected account." 6145 6184 msgstr "" 6146 6185 6147 #: includes/class-vwsm-tool-access.php: 5926186 #: includes/class-vwsm-tool-access.php:726 6148 6187 msgid "Filter tools" 6149 6188 msgstr "" 6150 6189 6151 #: includes/class-vwsm-tool-access.php: 5926190 #: includes/class-vwsm-tool-access.php:726 6152 6191 msgid "Tool and description" 6153 6192 msgstr "" 6154 6193 6155 #: includes/class-vwsm-tool-access.php: 5926194 #: includes/class-vwsm-tool-access.php:726 6156 6195 msgid "Group / risk" 6157 6196 msgstr "" 6158 6197 6159 #: includes/class-vwsm-tool-access.php: 5926198 #: includes/class-vwsm-tool-access.php:726 6160 6199 msgid "Presets" 6161 6200 msgstr "" 6162 6201 6163 #: includes/class-vwsm-tool-access.php: 6046202 #: includes/class-vwsm-tool-access.php:738 6164 6203 msgid "Details" 6165 6204 msgstr "" 6166 6205 6167 #: includes/class-vwsm-tool-access.php: 6076206 #: includes/class-vwsm-tool-access.php:741 6168 6207 msgid "Routine write" 6169 6208 msgstr "" 6170 6209 6171 #: includes/class-vwsm-tool-access.php: 6086210 #: includes/class-vwsm-tool-access.php:742 6172 6211 msgid "Administration" 6173 6212 msgstr "" 6174 6213 6175 #: includes/class-vwsm-tool-access.php: 6116214 #: includes/class-vwsm-tool-access.php:745 6176 6215 msgid "Available before connection review" 6177 6216 msgstr "" 6178 6217 6179 #: includes/class-vwsm-tool-access.php: 6116218 #: includes/class-vwsm-tool-access.php:745 6180 6219 msgid "Feature or approval required" 6181 6220 msgstr "" 6182 6221 6183 6222 #. translators: %1$s: tool identifier, %2$s: capability group label. 6184 #: includes/class-vwsm-tool-access.php: 6196223 #: includes/class-vwsm-tool-access.php:753 6185 6224 #, php-format 6186 6225 msgid "Enable %1$s for %2$s" 6187 6226 msgstr "" 6188 6227 6189 #: includes/class-vwsm-tool-access.php: 6306228 #: includes/class-vwsm-tool-access.php:764 6190 6229 msgid "Continue onboarding" 6191 6230 msgstr "" 6192 6231 6193 #: includes/class-vwsm-tool-access.php: 6346232 #: includes/class-vwsm-tool-access.php:768 6194 6233 msgid "The review expired. Prepare it again." 6195 6234 msgstr "" 6196 6235 6197 #: includes/class-vwsm-tool-access.php:636 6236 #: includes/class-vwsm-tool-access.php:771 6237 msgid "Only these tool definitions will change:" 6238 msgstr "" 6239 6240 #: includes/class-vwsm-tool-access.php:771 6241 msgid "All other role constraints and unselected fingerprints are retained." 6242 msgstr "" 6243 6244 #: includes/class-vwsm-tool-access.php:772 6198 6245 msgid "Relay approval mode" 6199 6246 msgstr "" 6200 6247 6201 #: includes/class-vwsm-tool-access.php: 6366248 #: includes/class-vwsm-tool-access.php:772 6202 6249 msgid "Require an administrator review for each account and relay client." 6203 6250 msgstr "" 6204 6251 6205 #: includes/class-vwsm-tool-access.php: 6366252 #: includes/class-vwsm-tool-access.php:772 6206 6253 msgid "Use reviewed role presets; no extra per-client admin step. Custom, Read Only, Safe Drafts and revoked policies stay restrictive. Existing Full policies, including partial Full selections, will follow the current reviewed role preset." 6207 6254 msgstr "" 6208 6255 6209 #: includes/class-vwsm-tool-access.php: 6376256 #: includes/class-vwsm-tool-access.php:773 6210 6257 msgid "Review role access" 6211 6258 msgstr "" 6212 6259 6213 #: includes/class-vwsm-tool-access.php: 6376260 #: includes/class-vwsm-tool-access.php:773 6214 6261 msgid "Group" 6215 6262 msgstr "" 6216 6263 6217 #: includes/class-vwsm-tool-access.php: 6376264 #: includes/class-vwsm-tool-access.php:773 6218 6265 msgid "Tools and constraints" 6219 6266 msgstr "" 6220 6267 6221 #: includes/class-vwsm-tool-access.php: 6396268 #: includes/class-vwsm-tool-access.php:775 6222 6269 msgid "Review exact selection" 6223 6270 msgstr "" 6224 6271 6225 #: includes/class-vwsm-tool-access.php: 6396272 #: includes/class-vwsm-tool-access.php:775 6226 6273 msgid "Draft-only execution retained." 6227 6274 msgstr "" 6228 6275 6229 #: includes/class-vwsm-tool-access.php: 6396276 #: includes/class-vwsm-tool-access.php:775 6230 6277 msgid "Selected write tools may affect public content." 6231 6278 msgstr "" 6232 6279 6233 #: includes/class-vwsm-tool-access.php: 6396280 #: includes/class-vwsm-tool-access.php:775 6234 6281 msgid "API switches follow the selected tools for this group; site Read Only and publication controls remain authoritative." 6235 6282 msgstr "" 6236 6283 6237 #: includes/class-vwsm-tool-access.php: 6396284 #: includes/class-vwsm-tool-access.php:775 6238 6285 msgid "Existing feature switches continue to apply." 6239 6286 msgstr "" 6240 6287 6241 #: includes/class-vwsm-tool-access.php: 6416288 #: includes/class-vwsm-tool-access.php:777 6242 6289 msgid "API feature switches" 6243 6290 msgstr "" 6244 6291 6245 #: includes/class-vwsm-tool-access.php: 6416292 #: includes/class-vwsm-tool-access.php:777 6246 6293 msgid "Selected tools determine their API feature switches. Read blocks writes; Draft blocks publication. Write permits own-action recovery. Admin enables routine administration and other-author content. Cross-user log recovery still needs its separate Admin scope setting. Only Develop enables protected metadata and host-allowlisted executable HTML for administrators with unfiltered_html. Source hosts and package approvals remain separate." 6247 6294 msgstr "" 6248 6295 6249 #: includes/class-vwsm-tool-access.php: 6416296 #: includes/class-vwsm-tool-access.php:777 6250 6297 msgid "Admin can change site settings and apply separately approved updates. Develop additionally permits executable HTML, protected metadata and separately approved executable packages. Use these modes only with trusted administrators and a restorable backup." 6251 6298 msgstr "" 6252 6299 6253 #: includes/class-vwsm-tool-access.php: 6436300 #: includes/class-vwsm-tool-access.php:779 6254 6301 msgid "I reviewed these tools and their public/code effects." 6255 6302 msgstr "" 6256 6303 6257 #: includes/class-vwsm-tool-access.php: 6446304 #: includes/class-vwsm-tool-access.php:780 6258 6305 msgid "Apply reviewed tool access" 6259 6306 msgstr "" 6260 6307 6261 #: includes/class-vwsm-tool-access.php: 6486308 #: includes/class-vwsm-tool-access.php:784 6262 6309 msgid "Tool access saved. Existing client records and package allowlists were retained; the reviewed relay approval mode now applies." 6263 6310 msgstr "" 6264 6311 6265 #: includes/class-vwsm-tool-access.php:650 6312 #: includes/class-vwsm-tool-access.php:794 6313 msgid "Some selected definitions changed and are unavailable. Review only the needed definitions below to retain unrelated permissions." 6314 msgstr "" 6315 6316 #: includes/class-vwsm-tool-access.php:794 6317 msgid "Review changed definitions" 6318 msgstr "" 6319 6320 #: includes/class-vwsm-tool-access.php:797 6266 6321 msgid "How presets and approvals work" 6267 6322 msgstr "" 6268 6323 6269 #: includes/class-vwsm-tool-access.php: 6506324 #: includes/class-vwsm-tool-access.php:797 6270 6325 msgid "Disabled blocks Site Manager tools. Read exposes reads. Draft allows unpublished content and private review proposals. Write adds routine edits, taxonomy changes, recoverable trash and own-action rollback when a snapshot exists. Admin adds routine site administration; Develop adds high-risk code and package operations. Admin and Develop are admin-only. Custom retains draft protection and requires review for each new or changed tool. WordPress core REST access from an Application Password is outside this plugin policy." 6271 6326 msgstr "" 6272 6327 6273 #: includes/class-vwsm-tool-access.php: 6506328 #: includes/class-vwsm-tool-access.php:797 6274 6329 msgid "This table lists supported metadata for installed integrations. A checked tool is an availability ceiling, not proof that the current connection can execute it. Native Abilities, relay consent, account plans, object capabilities and package allowlists may narrow it further. No arbitrary code executor is provided." 6275 6330 msgstr "" 6276 6331 6277 #: includes/class-vwsm-tool-access.php: 6526332 #: includes/class-vwsm-tool-access.php:799 6278 6333 msgid "Review connection permissions" 6279 6334 msgstr "" … … 6387 6442 msgstr "" 6388 6443 6389 #: includes/class-vwsm-translation-tools.php:158 6444 #: includes/class-vwsm-translation-tools.php:155 6445 msgid "An administrator enables integration drafting and publication in Translator Settings, then allows editing and direct publishing in Site Manager Quick setup and reviews the role tools. Develop includes supported administrator tools after review; explicit client restrictions and personal exclusions remain in force. Ask the administrator to review the current connection if its publish tool is missing. Each translation still needs an editable original, a complete current draft and resolved protection review." 6446 msgstr "" 6447 6448 #: includes/class-vwsm-translation-tools.php:181 6390 6449 msgid "List available translation languages and their configuration revision." 6391 6450 msgstr "" 6392 6451 6393 #: includes/class-vwsm-translation-tools.php:1 596452 #: includes/class-vwsm-translation-tools.php:182 6394 6453 msgid "List your own editable public Posts and Pages and translation statuses." 6395 6454 msgstr "" 6396 6455 6397 #: includes/class-vwsm-translation-tools.php:1 616456 #: includes/class-vwsm-translation-tools.php:184 6398 6457 msgid "Read bounded translation text from your own public Post or Page in an available language." 6399 6458 msgstr "" 6400 6459 6401 #: includes/class-vwsm-translation-tools.php:1 706460 #: includes/class-vwsm-translation-tools.php:193 6402 6461 msgid "Validate translated plain-text units and save a private translation draft without changing public content." 6403 6462 msgstr "" 6404 6463 6405 #: includes/class-vwsm-translation-tools.php: 1896464 #: includes/class-vwsm-translation-tools.php:212 6406 6465 msgid "Read your translation draft, exact source and target versions, and native review link." 6407 6466 msgstr "" 6408 6467 6409 #: includes/class-vwsm-translation-tools.php: 1986468 #: includes/class-vwsm-translation-tools.php:221 6410 6469 msgid "Publish your existing translation draft only when source/version and configured publication permissions match." 6411 6470 msgstr "" 6412 6471 6413 #: includes/class-vwsm-translation-tools.php:2 106472 #: includes/class-vwsm-translation-tools.php:233 6414 6473 msgid "Replace private progress notes for your translation after reading its notes version. Empty text clears the note; no page or translation is published." 6415 6474 msgstr "" 6416 6475 6417 #: includes/class-vwsm-translation-tools.php:2 236476 #: includes/class-vwsm-translation-tools.php:246 6418 6477 msgid "Check translation setup, publication readiness and native settings/review links before planning work. Does not enable permissions." 6419 6478 msgstr "" 6420 6479 6421 #: includes/class-vwsm-translation-tools.php:2 266480 #: includes/class-vwsm-translation-tools.php:249 6422 6481 msgid "Read bounded private source differences and section-protection status for your editable original. This does not unlock corrections or publish." 6423 6482 msgstr "" 6424 6483 6425 #: includes/class-vwsm-translation-tools.php:2 316484 #: includes/class-vwsm-translation-tools.php:254 6426 6485 msgid "Publish a reviewed translation and its local URL proposal using current versions and publication permissions. Earlier public paths remain aliases." 6427 6486 msgstr "" 6428 6487 6429 #: includes/class-vwsm-translation-tools.php:2 336488 #: includes/class-vwsm-translation-tools.php:256 6430 6489 msgid "Save a private local language-URL proposal for your translation. Normal separate publication applies it and retains public aliases; collisions fail closed." 6431 6490 msgstr "" 6432 6491 6433 #: includes/class-vwsm-translation-tools.php:2 746492 #: includes/class-vwsm-translation-tools.php:297 6434 6493 msgid "Local translation drafts and permission-controlled publication. Own content only; administrators use separately reviewed Pro tools for other authors and site elements." 6435 6494 msgstr "" 6436 6495 6437 #: includes/class-vwsm-translation-tools.php: 2896496 #: includes/class-vwsm-translation-tools.php:312 6438 6497 msgid "Translation access denied." 6439 6498 msgstr "" 6440 6499 6441 #: includes/class-vwsm-translation-tools.php:3 106500 #: includes/class-vwsm-translation-tools.php:334 6442 6501 msgid "Check setup, list languages, read your content and notes, get translation context, translate plain-text units, save a draft, update progress notes and review. Publish only when current permissions allow. Site-wide language management requires separately approved Pro administration tools." 6502 msgstr "" 6503 6504 #: includes/class-vwsm-translation-tools.php:353 6505 msgid "Translation publication is disabled by a current permission or setting. Ask an administrator to review the publication readiness checklist." 6443 6506 msgstr "" 6444 6507 -
videowhisper-site-manager/tags/1.21.0/readme.txt
r3791171 r3791563 327 327 328 328 == Changelog == 329 330 = 1.21.0 = 331 * Keep reviewed content tools available when page builders register a narrower API content inventory; new content scope still needs native review. 332 * Review only selected new or changed tool definitions without replacing other approvals. 333 * Explain translation publication prerequisites and link directly to the relevant settings. 334 329 335 330 336 = 1.20.0 = -
videowhisper-site-manager/tags/1.21.0/videowhisper-site-manager.php
r3791171 r3791563 3 3 * Plugin Name: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 4 4 * Description: Manage WordPress with your AI assistant and own account. Optional hosted relay: multiple sites from one connection and agent session. 5 * Version: 1.2 0.05 * Version: 1.21.0 6 6 * Requires at least: 6.9 7 7 * Requires PHP: 8.2 … … 20 20 } 21 21 22 define( 'VWSM_VERSION', '1.2 0.0' );22 define( 'VWSM_VERSION', '1.21.0' ); 23 23 define( 'VWSM_IMAGE_SEO_CORE', 1 ); 24 24 define( 'VWSM_LOCAL_OAUTH_CORE', 1 ); -
videowhisper-site-manager/trunk/includes/actions/class-ai-action-registry.php
r3786440 r3791563 131 131 unset( $action ); 132 132 133 $actions = VWSM_Tool_Access::reviewed_content_actions( $actions ); 133 134 $actions = VWSM_User_Tool_Access::filter_actions( VWSM_Tool_Access::filter_actions( $actions ) ); 134 135 return $apply_grants ? VWSM_Relay_Permissions::filter_actions( VWSM_Native_Abilities::filter_actions( VWSM_Tool_Grants::filter_actions( $actions ) ) ) : $actions; -
videowhisper-site-manager/trunk/includes/admin/class-vwsm-quick-setup.php
r3789255 r3791563 220 220 ) 221 221 ) . '">' . esc_html__( 'Native Abilities and connection approvals', 'videowhisper-site-manager' ) . '</a></p>'; 222 if ( class_exists( 'VWML_Settings' ) ) { 223 echo '<p><a href="' . esc_url( admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) ) . '">' . esc_html__( 'Enable Translator drafting and publication', 'videowhisper-site-manager' ) . '</a> — ' . esc_html__( 'Translation also requires these two Translator integration switches. Develop includes supported administrator tools after review; it retains personal exclusions and explicit connection restrictions.', 'videowhisper-site-manager' ) . '</p>'; } 222 224 echo '<p><a href="' . esc_url( VWSM_Admin_Guide::help_url( 'permissions' ) ) . '">' . esc_html__( 'Optional features and integration setup', 'videowhisper-site-manager' ) . '</a></p></details>'; 223 225 } -
videowhisper-site-manager/trunk/includes/class-vwsm-tool-access.php
r3786440 r3791563 33 33 add_action( 'admin_bar_menu', array( __CLASS__, 'toolbar' ), 96 ); 34 34 add_action( 'admin_post_vwsm_tool_access_prepare', array( __CLASS__, 'prepare_post' ) ); 35 add_action( 'admin_post_vwsm_tool_access_selected', array( __CLASS__, 'selected_post' ) ); 35 36 add_action( 'admin_post_vwsm_tool_access_apply', array( __CLASS__, 'apply_post' ) ); 36 37 add_action( 'vwsm_settings_form_content_rows', array( __CLASS__, 'settings_link' ) ); … … 65 66 $fields['feature_contract'] = self::feature_signature(); 66 67 return self::digest( $fields ); 68 } 69 /** Native review records the content ceiling, including admin-only registrations. */ 70 private static function content_contracts( $names, $catalog ) { 71 $out = array(); 72 foreach ( $names as $name ) { 73 $a = $catalog[ $name ] ?? array(); 74 $domain = $a['permission_context']['content_domain'] ?? null; 75 if ( ! is_array( $domain ) ) { continue; } 76 $enums = array(); 77 $properties = (array) ( $a['inputSchema']['properties'] ?? array() ); 78 foreach ( array( 'type', 'post_type', 'taxonomy' ) as $field ) { 79 $property = (array) ( $properties[ $field ] ?? array() ); 80 $values = $property['enum'] ?? null; 81 if ( is_array( $values ) ) { $enums[ $field ] = $values; } 82 } 83 $out[ $name ] = array( 'domain' => $domain, 'enums' => $enums ); 84 } 85 return $out; 86 } 87 /** 88 * A runtime may omit builder types registered only in wp-admin. Keep the 89 * reviewed declaration when runtime scope is a subset; services still enforce 90 * actual enabled types. Any added type/taxonomy or other contract change fails 91 * the normal fingerprint check. Existing policies gain nothing on upgrade. 92 */ 93 public static function reviewed_content_actions( $actions ) { 94 if ( self::$preview ) { return $actions; } 95 $p = self::selection(); 96 $contracts = $p['content_contracts'] ?? array(); 97 if ( $p['legacy'] || ! is_array( $contracts ) ) { return $actions; } 98 foreach ( $actions as $name => $a ) { 99 $saved = $contracts[ $name ] ?? null; 100 $domain = $a['permission_context']['content_domain'] ?? null; 101 if ( ! is_array( $saved ) || ! self::valid_content_domain( $saved['domain'] ?? null ) || ! is_array( $saved['enums'] ?? null ) || ! self::valid_content_domain( $domain ) ) { continue; } 102 $subset = true; 103 foreach ( $domain as $type => $taxonomies ) { 104 if ( ! is_array( $taxonomies ) || ! isset( $saved['domain'][ $type ] ) || ! is_array( $saved['domain'][ $type ] ) || array_diff( $taxonomies, $saved['domain'][ $type ] ) ) { $subset = false; break; } 105 } 106 $next = $a; 107 foreach ( $saved['enums'] as $field => $values ) { 108 $current = $a['inputSchema']['properties'][ $field ]['enum'] ?? null; 109 if ( ! in_array( $field, array( 'type', 'post_type', 'taxonomy' ), true ) || ! is_array( $values ) || count( array_filter( $values, 'is_string' ) ) !== count( $values ) || ! is_array( $current ) || count( array_filter( $current, 'is_string' ) ) !== count( $current ) || array_diff( $current, $values ) ) { $subset = false; break; } 110 $next['inputSchema']['properties'][ $field ]['enum'] = $values; 111 } 112 if ( $subset ) { 113 $next['permission_context']['content_domain'] = $saved['domain']; 114 // The stored exact fingerprint authenticates the entire projected contract. 115 if ( isset( $p['tools'][ $name ] ) && is_string( $p['tools'][ $name ] ) && hash_equals( $p['tools'][ $name ], self::fingerprint( $next ) ) ) { $actions[ $name ] = $next; } 116 } 117 } 118 return $actions; 119 } 120 private static function valid_content_domain( $domain ) { 121 if ( ! is_array( $domain ) || count( $domain ) > 1000 ) { return false; } 122 foreach ( $domain as $type => $taxonomies ) { 123 if ( ! is_string( $type ) || ! is_array( $taxonomies ) || count( $taxonomies ) > 1000 || count( array_filter( $taxonomies, 'is_string' ) ) !== count( $taxonomies ) ) { return false; } 124 } 125 return true; 67 126 } 68 127 /** Missing policy preserves upgrades; malformed configured policy is closed. */ … … 380 439 } 381 440 return $response; 441 } 442 /** Selected contract updates retain every unselected fingerprint and policy constraint. */ 443 public static function prepare_selected( $group, $names ) { 444 if ( ! self::native() || ! in_array( $group, array( 'admins', 'others' ), true ) || ! is_array( $names ) || ! $names || count( $names ) > 100 || count( array_filter( $names, 'is_string' ) ) !== count( $names ) ) { 445 return self::error( __( 'Choose supported tools in a native administrator session.', 'videowhisper-site-manager' ) ); } 446 $prior = self::policy(); 447 $p = self::selection( $group ); 448 $catalog = self::supported(); 449 if ( ! is_array( $prior ) || ! isset( $prior['groups'][ $group ] ) || $p['legacy'] || 'disabled' === $p['mode'] ) { 450 return self::error( __( 'Review a role preset before updating individual tool definitions.', 'videowhisper-site-manager' ) ); } 451 $groups = $prior['groups']; 452 foreach ( array_unique( $names ) as $name ) { 453 if ( ! isset( $catalog[ $name ] ) || ! self::selected_allowed( $p, $group, $name, $catalog[ $name ] ) ) { 454 return self::error( __( 'A selected definition exceeds the current role constraints. Review the role policy separately.', 'videowhisper-site-manager' ) ); } 455 $groups[ $group ]['tools'][ $name ] = self::fingerprint( $catalog[ $name ] ); 456 } 457 if ( count( $groups[ $group ]['tools'] ) > VWSM_Tool_Grants::MAX_TOOLS ) { 458 return self::error( __( 'Invalid tool selection.', 'videowhisper-site-manager' ) ); } 459 ksort( $groups[ $group ]['tools'] ); 460 $groups[ $group ]['content_contracts'] = array_merge( is_array( $p['content_contracts'] ?? null ) ? $p['content_contracts'] : array(), self::content_contracts( $names, $catalog ) ); 461 $id = wp_generate_uuid4(); 462 $r = array( 463 'id' => $id, 'operator' => get_current_user_id(), 'blog' => get_current_blog_id(), 464 'session' => self::digest( wp_get_session_token() ), 'expires' => time() + 600, 465 'prior' => self::digest( $prior ), 466 'settings' => self::digest( array( get_option( 'vwsm_settings', array() ), get_option( 'vwsm_permission_epoch', '' ) ) ), 467 'catalog' => self::digest( $catalog ), 'groups' => $groups, 468 'relay_review_required' => self::relay_review_required(), 469 'selected_updates' => array( $group => array_values( array_unique( $names ) ) ), 470 ); 471 set_transient( 'vwsm_tool_review_' . $id, $r, 600 ); 472 return $r; 473 } 474 private static function selected_allowed( $p, $group, $name, $action ) { 475 if ( $p['legacy'] || 'disabled' === $p['mode'] || ( 'custom' !== $p['mode'] && ! self::mode_allows( $p['mode'], $name, $action, $group ) ) || ( $p['draft_only'] && ! self::mode_allows( 'drafts', $name, $action, $group ) ) ) { 476 return false; } 477 $risk = self::risk( $name, $action ); 478 return ! ( ( 'others' === $group && ( 'mcp:admin' === $action['required_scope'] || ( ! $action['read_only'] && 'safe' !== $risk ) ) ) || ( 'developer' === $risk && 'developer' !== $p['level'] ) || ( 'power' === $risk && 'safe' === $p['level'] ) ); 382 479 } 383 480 /** Exact native review; raw settings digest detects concurrent configuration changes. */ … … 438 535 'tools' => $tools, 439 536 'features' => 'disabled' !== $mode, 537 'content_contracts' => self::content_contracts( $names, $catalog ), 440 538 ); 441 539 } … … 513 611 echo '<tr><th>' . esc_html__( 'Tool access', 'videowhisper-site-manager' ) . '</th><td><a href="' . esc_url( self::url() ) . '">' . esc_html__( 'Review role presets and individual tools', 'videowhisper-site-manager' ) . '</a><p class="description">' . esc_html__( 'Reviewed role presets may enable API feature switches for that group. Site Read Only, publication controls, connection approvals and WordPress permissions still apply.', 'videowhisper-site-manager' ) . '</p></td></tr>'; } 514 612 public static function prepare_post() { 613 self::require_post(); 515 614 check_admin_referer( 'vwsm_tool_access_prepare' ); 516 615 $modes = isset( $_POST['modes'] ) && is_array( $_POST['modes'] ) ? wp_unslash( $_POST['modes'] ) : null; … … 532 631 } 533 632 public static function apply_post() { 633 self::require_post(); 534 634 check_admin_referer( 'vwsm_tool_access_apply' ); 535 635 $id = isset( $_POST['review'] ) && is_string( $_POST['review'] ) ? wp_unslash( $_POST['review'] ) : ''; … … 541 641 wp_safe_redirect( self::url( array( 'saved' => 1 ) ) ); 542 642 exit; 643 } 644 private static function require_post() { 645 if ( 'POST' !== ( $_SERVER['REQUEST_METHOD'] ?? '' ) ) { 646 wp_die( esc_html__( 'Use the reviewed POST form for this action.', 'videowhisper-site-manager' ), '', array( 'response' => 405 ) ); } 647 } 648 public static function selected_post() { 649 self::require_post(); 650 check_admin_referer( 'vwsm_tool_access_selected' ); 651 $group = isset( $_POST['group'] ) && is_string( $_POST['group'] ) ? wp_unslash( $_POST['group'] ) : ''; 652 $names = isset( $_POST['selected_definitions'] ) && is_array( $_POST['selected_definitions'] ) ? wp_unslash( $_POST['selected_definitions'] ) : array(); 653 $r = self::prepare_selected( $group, $names ); 654 if ( is_wp_error( $r ) ) { 655 wp_die( esc_html( $r->get_error_message() ), '', array( 'response' => 409 ) ); } 656 wp_safe_redirect( self::url( array( 'review' => $r['id'] ) ) ); 657 exit; 658 } 659 private static function selected_form() { 660 $catalog = self::supported(); 661 echo '<details id="vwsm-selected-definitions"><summary>' . esc_html__( 'Review selected new or changed definitions', 'videowhisper-site-manager' ) . '</summary><p>' . esc_html__( 'Update only the checked definitions. Keep the current preset, draft limits, other role groups, unselected fingerprints, personal restrictions and connection/package approvals. Unselected stale tools remain unavailable.', 'videowhisper-site-manager' ) . '</p>'; 662 foreach ( array( 'admins', 'others' ) as $group ) { 663 $p = self::selection( $group ); 664 $candidates = array_filter( $catalog, static function ( $a, $name ) use ( $p, $group ) { 665 return self::selected_allowed( $p, $group, $name, $a ) && ( ! isset( $p['tools'][ $name ] ) || ! hash_equals( $p['tools'][ $name ], self::fingerprint( $a ) ) ); 666 }, ARRAY_FILTER_USE_BOTH ); 667 if ( ! $candidates ) { 668 continue; } 669 echo '<form method="post" action="' . esc_url( admin_url( 'admin-post.php' ) ) . '"><input type="hidden" name="action" value="vwsm_tool_access_selected"><input type="hidden" name="group" value="' . esc_attr( $group ) . '"><h3>' . esc_html( 'admins' === $group ? __( 'Admins', 'videowhisper-site-manager' ) : __( 'Other Roles', 'videowhisper-site-manager' ) ) . '</h3>'; 670 wp_nonce_field( 'vwsm_tool_access_selected' ); 671 foreach ( $candidates as $name => $a ) { 672 echo '<p><label><input type="checkbox" name="selected_definitions[]" value="' . esc_attr( $name ) . '"> <code>' . esc_html( $name ) . '</code> — ' . esc_html( wp_html_excerpt( wp_strip_all_tags( $a['description'] ), 180 ) ) . '</label></p>'; } 673 submit_button( __( 'Review selected definitions', 'videowhisper-site-manager' ), 'secondary' ); 674 echo '</form>'; 675 } 676 echo '</details>'; 543 677 } 544 678 /** Quick selector is also used on Activate; forms never nest. */ … … 634 768 echo '<div class="notice notice-error"><p>' . esc_html__( 'The review expired. Prepare it again.', 'videowhisper-site-manager' ) . '</p></div>'; } 635 769 if ( $r ) { 770 if ( isset( $r['selected_updates'] ) ) { 771 echo '<p><strong>' . esc_html__( 'Only these tool definitions will change:', 'videowhisper-site-manager' ) . '</strong> <code>' . esc_html( implode( ', ', array_merge( ...array_values( $r['selected_updates'] ) ) ) ) . '</code></p><p>' . esc_html__( 'All other role constraints and unselected fingerprints are retained.', 'videowhisper-site-manager' ) . '</p>'; } 636 772 echo '<p><strong>' . esc_html__( 'Relay approval mode', 'videowhisper-site-manager' ) . '</strong>: ' . esc_html( $r['relay_review_required'] ? __( 'Require an administrator review for each account and relay client.', 'videowhisper-site-manager' ) : __( 'Use reviewed role presets; no extra per-client admin step. Custom, Read Only, Safe Drafts and revoked policies stay restrictive. Existing Full policies, including partial Full selections, will follow the current reviewed role preset.', 'videowhisper-site-manager' ) ) . '</p>'; 637 773 echo '<h2>' . esc_html__( 'Review role access', 'videowhisper-site-manager' ) . '</h2><table class="widefat striped"><thead><tr><th>' . esc_html__( 'Group', 'videowhisper-site-manager' ) . '</th><th>' . esc_html__( 'Current → proposed', 'videowhisper-site-manager' ) . '</th><th>' . esc_html__( 'Tools and constraints', 'videowhisper-site-manager' ) . '</th></tr></thead><tbody>'; … … 647 783 if ( isset( $_GET['saved'] ) ) { 648 784 echo '<div class="notice notice-success"><p>' . esc_html__( 'Tool access saved. Existing client records and package allowlists were retained; the reviewed relay approval mode now applies.', 'videowhisper-site-manager' ) . '</p></div>'; } 785 $stale = false; 786 foreach ( self::supported() as $name => $a ) { 787 foreach ( array( 'admins', 'others' ) as $group ) { 788 $p = self::selection( $group ); 789 if ( isset( $p['tools'][ $name ] ) && ! hash_equals( $p['tools'][ $name ], self::fingerprint( $a ) ) ) { 790 $stale = true; } 791 } 792 } 793 if ( $stale ) { 794 echo '<div class="notice notice-warning"><p>' . esc_html__( 'Some selected definitions changed and are unavailable. Review only the needed definitions below to retain unrelated permissions.', 'videowhisper-site-manager' ) . ' <a href="#vwsm-selected-definitions">' . esc_html__( 'Review changed definitions', 'videowhisper-site-manager' ) . '</a></p></div>'; } 649 795 self::quick( true ); 796 self::selected_form(); 650 797 echo '<details style="margin-top:24px"><summary>' . esc_html__( 'How presets and approvals work', 'videowhisper-site-manager' ) . '</summary><p>' . esc_html__( 'Disabled blocks Site Manager tools. Read exposes reads. Draft allows unpublished content and private review proposals. Write adds routine edits, taxonomy changes, recoverable trash and own-action rollback when a snapshot exists. Admin adds routine site administration; Develop adds high-risk code and package operations. Admin and Develop are admin-only. Custom retains draft protection and requires review for each new or changed tool. WordPress core REST access from an Application Password is outside this plugin policy.', 'videowhisper-site-manager' ) . '</p><p>' . esc_html__( 'This table lists supported metadata for installed integrations. A checked tool is an availability ceiling, not proof that the current connection can execute it. Native Abilities, relay consent, account plans, object capabilities and package allowlists may narrow it further. No arbitrary code executor is provided.', 'videowhisper-site-manager' ) . '</p>'; 651 798 do_action( 'vwsm_tool_access_help' ); -
videowhisper-site-manager/trunk/includes/class-vwsm-translation-tools.php
r3791171 r3791563 133 133 public static function can_publish() { 134 134 return ! VWSM_Tool_Grants::is_safe_drafts() && VWSM_Tool_Access::publication_enabled() && ! empty( VWSM_Access_Control::get_settings()['allow_publish'] ); } 135 /** Explain configuration separately from per-object publication readiness. */ 136 public static function publication_readiness() { 137 $translator = ( new VWML_Settings() )->get(); 138 $site = VWSM_Access_Control::get_settings(); 139 $admin = current_user_can( 'manage_options' ); 140 $tools = VWSM_AI_Action_Registry::get_actions(); 141 $checks = array( 142 'integration_drafting' => ! empty( $translator['integration_enabled'] ), 143 'integration_publication' => ! empty( $translator['integration_publish'] ), 144 'site_editing' => empty( $site['read_only'] ), 145 'site_publication' => ! empty( $site['allow_publish'] ), 146 'permission_mode_publication' => self::can_publish(), 147 'publish_tool_approved' => isset( $tools['translation_publish'] ) || isset( $tools['translation_admin_publish'] ), 148 ); 149 return array( 150 'configuration_ready' => ! in_array( false, $checks, true ), 151 'checks' => $checks, 152 'translator_settings_url' => $admin ? admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) : '', 153 'site_setup_url' => $admin ? VWSM_Onboarding_Approvals::url( array( 'activation_section' => 'finish' ) ) : '', 154 'tool_access_url' => $admin ? VWSM_Tool_Access::url() : '', 155 'guidance' => __( 'An administrator enables integration drafting and publication in Translator Settings, then allows editing and direct publishing in Site Manager Quick setup and reviews the role tools. Develop includes supported administrator tools after review; explicit client restrictions and personal exclusions remain in force. Ask the administrator to review the current connection if its publish tool is missing. Each translation still needs an editable original, a complete current draft and resolved protection review.', 'videowhisper-site-manager' ), 156 ); 157 } 135 158 /** 136 159 * Declare versioned tools only when the owning integration is available. … … 305 328 'integration_enabled' => VWML_API::enabled(), 306 329 'publication_enabled' => ! empty( ( new VWML_Settings() )->get()['integration_publish'] ) && self::can_publish(), 330 'publication_readiness' => self::publication_readiness(), 307 331 'administration_available' => VWML_API::admin(), 308 332 'setup_url' => current_user_can( 'manage_options' ) ? admin_url( 'admin.php?page=vwml-settings#vwml-integrations' ) : '', … … 327 351 return self::with_editorial_action( $action, 'route_propose', static fn() => method_exists( 'VWML_API', 'propose_route' ) ? VWML_API::propose_route( $args['post_id'], $args['locale'], $args['path'], $args['version'], $args['source_hash'] ) : VWML_API::error() ); 328 352 case 'translation_publish': 329 return self::with_editorial_action( $action, 'publish', static fn() => self::can_publish() ? VWML_API::publish( $args['post_id'], $args['locale'], $args['source_hash'], $args['version'], false, true ) : VWML_API::error() );353 return self::with_editorial_action( $action, 'publish', static fn() => self::can_publish() ? VWML_API::publish( $args['post_id'], $args['locale'], $args['source_hash'], $args['version'], false, true ) : new WP_Error( 'vwsm_translation_publication_setup', __( 'Translation publication is disabled by a current permission or setting. Ask an administrator to review the publication readiness checklist.', 'videowhisper-site-manager' ), array( 'status' => 403, 'publication_readiness' => self::publication_readiness() ) ) ); 330 354 } 331 355 return VWML_API::error(); -
videowhisper-site-manager/trunk/languages/videowhisper-site-manager.pot
r3791171 r3791563 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 1.2 0.0\n"5 "Project-Id-Version: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 1.21.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/videowhisper-site-manager\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2026-11-08T 12:06:44+00:00\n"12 "POT-Creation-Date: 2026-11-08T20:50:15+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.12.0\n" … … 40 40 msgstr "" 41 41 42 #: includes/actions/class-ai-action-registry.php:14 142 #: includes/actions/class-ai-action-registry.php:142 43 43 msgid "The tool must match the route." 44 44 msgstr "" 45 45 46 #: includes/actions/class-ai-action-registry.php:14 546 #: includes/actions/class-ai-action-registry.php:146 47 47 #: includes/class-access-control.php:212 48 48 #: includes/mcp/class-mcp-server.php:560 … … 50 50 msgstr "" 51 51 52 #: includes/actions/class-ai-action-registry.php:14 852 #: includes/actions/class-ai-action-registry.php:149 53 53 msgid "The action does not belong to this route." 54 54 msgstr "" … … 530 530 #: includes/admin/class-vwsm-quick-setup.php:135 531 531 #: includes/admin/class-vwsm-quick-setup.php:158 532 #: includes/class-vwsm-tool-access.php: 629532 #: includes/class-vwsm-tool-access.php:763 533 533 #: includes/services/class-vwsm-editorial-workflow.php:308 534 534 msgid "Native administrator access is required." … … 1223 1223 #. translators: %1$s: tool identifier, %2$s: capability group label. 1224 1224 #: includes/admin/class-vwsm-quick-setup.php:195 1225 #: includes/admin/class-vwsm-quick-setup.php:23 51225 #: includes/admin/class-vwsm-quick-setup.php:237 1226 1226 #: includes/class-vwsm-relay-review.php:388 1227 #: includes/class-vwsm-tool-access.php:557 1228 #: includes/class-vwsm-tool-access.php:586 1229 #: includes/class-vwsm-tool-access.php:592 1230 #: includes/class-vwsm-tool-access.php:619 1231 #: includes/class-vwsm-tool-access.php:639 1227 #: includes/class-vwsm-tool-access.php:669 1228 #: includes/class-vwsm-tool-access.php:691 1229 #: includes/class-vwsm-tool-access.php:720 1230 #: includes/class-vwsm-tool-access.php:726 1231 #: includes/class-vwsm-tool-access.php:753 1232 #: includes/class-vwsm-tool-access.php:775 1232 1233 msgid "Admins" 1233 1234 msgstr "" … … 1236 1237 #. translators: %1$s: tool identifier, %2$s: capability group label. 1237 1238 #: includes/admin/class-vwsm-quick-setup.php:196 1238 #: includes/admin/class-vwsm-quick-setup.php:23 51239 #: includes/admin/class-vwsm-quick-setup.php:237 1239 1240 #: includes/class-vwsm-relay-review.php:388 1240 #: includes/class-vwsm-tool-access.php:558 1241 #: includes/class-vwsm-tool-access.php:586 1242 #: includes/class-vwsm-tool-access.php:592 1243 #: includes/class-vwsm-tool-access.php:619 1244 #: includes/class-vwsm-tool-access.php:639 1241 #: includes/class-vwsm-tool-access.php:669 1242 #: includes/class-vwsm-tool-access.php:692 1243 #: includes/class-vwsm-tool-access.php:720 1244 #: includes/class-vwsm-tool-access.php:726 1245 #: includes/class-vwsm-tool-access.php:753 1246 #: includes/class-vwsm-tool-access.php:775 1245 1247 msgid "Other Roles" 1246 1248 msgstr "" … … 1267 1269 1268 1270 #: includes/admin/class-vwsm-quick-setup.php:210 1269 #: includes/class-vwsm-tool-access.php: 5701271 #: includes/class-vwsm-tool-access.php:704 1270 1272 msgid "Require an extra administrator review for each relay client" 1271 1273 msgstr "" … … 1284 1286 1285 1287 #: includes/admin/class-vwsm-quick-setup.php:213 1286 #: includes/admin/class-vwsm-quick-setup.php:23 11288 #: includes/admin/class-vwsm-quick-setup.php:233 1287 1289 msgid "Review activation" 1288 1290 msgstr "" … … 1300 1302 msgstr "" 1301 1303 1302 #: includes/admin/class-vwsm-quick-setup.php:222 1304 #: includes/admin/class-vwsm-quick-setup.php:223 1305 msgid "Enable Translator drafting and publication" 1306 msgstr "" 1307 1308 #: includes/admin/class-vwsm-quick-setup.php:223 1309 msgid "Translation also requires these two Translator integration switches. Develop includes supported administrator tools after review; it retains personal exclusions and explicit connection restrictions." 1310 msgstr "" 1311 1312 #: includes/admin/class-vwsm-quick-setup.php:224 1303 1313 msgid "Optional features and integration setup" 1304 1314 msgstr "" 1305 1315 1306 #: includes/admin/class-vwsm-quick-setup.php:23 11316 #: includes/admin/class-vwsm-quick-setup.php:233 1307 1317 msgid "Setting" 1308 1318 msgstr "" 1309 1319 1310 #: includes/admin/class-vwsm-quick-setup.php:23 11311 #: includes/class-vwsm-tool-access.php: 6371320 #: includes/admin/class-vwsm-quick-setup.php:233 1321 #: includes/class-vwsm-tool-access.php:773 1312 1322 msgid "Current → proposed" 1313 1323 msgstr "" 1314 1324 1315 1325 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1316 #: includes/admin/class-vwsm-quick-setup.php:23 51326 #: includes/admin/class-vwsm-quick-setup.php:237 1317 1327 #, php-format 1318 1328 msgid "%1$s → %2$s · Selected tools: %3$d" … … 1320 1330 1321 1331 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1322 #: includes/admin/class-vwsm-quick-setup.php:23 51332 #: includes/admin/class-vwsm-quick-setup.php:237 1323 1333 msgid "Existing settings" 1324 1334 msgstr "" 1325 1335 1326 1336 #. translators: 1: Current mode, 2: Proposed mode, 3: Number of tools. 1327 #: includes/admin/class-vwsm-quick-setup.php:23 51337 #: includes/admin/class-vwsm-quick-setup.php:237 1328 1338 msgid "Exact tools" 1329 1339 msgstr "" 1330 1340 1331 #: includes/admin/class-vwsm-quick-setup.php:23 71341 #: includes/admin/class-vwsm-quick-setup.php:239 1332 1342 msgid "Allowed roles" 1333 1343 msgstr "" 1334 1344 1335 #: includes/admin/class-vwsm-quick-setup.php:23 71345 #: includes/admin/class-vwsm-quick-setup.php:239 1336 1346 msgid "AI/SI editing" 1337 1347 msgstr "" 1338 1348 1339 #: includes/admin/class-vwsm-quick-setup.php:23 71349 #: includes/admin/class-vwsm-quick-setup.php:239 1340 1350 msgid "Direct publishing" 1341 1351 msgstr "" 1342 1352 1343 #: includes/admin/class-vwsm-quick-setup.php:23 71353 #: includes/admin/class-vwsm-quick-setup.php:239 1344 1354 msgid "Extra relay-client admin review" 1345 1355 msgstr "" 1346 1356 1347 #: includes/admin/class-vwsm-quick-setup.php:2 391348 #: includes/admin/class-vwsm-quick-setup.php:24 01357 #: includes/admin/class-vwsm-quick-setup.php:241 1358 #: includes/admin/class-vwsm-quick-setup.php:242 1349 1359 msgid "On" 1350 1360 msgstr "" 1351 1361 1352 #: includes/admin/class-vwsm-quick-setup.php:2 391353 #: includes/admin/class-vwsm-quick-setup.php:24 01362 #: includes/admin/class-vwsm-quick-setup.php:241 1363 #: includes/admin/class-vwsm-quick-setup.php:242 1354 1364 msgid "Off" 1355 1365 msgstr "" 1356 1366 1357 #: includes/admin/class-vwsm-quick-setup.php:24 41367 #: includes/admin/class-vwsm-quick-setup.php:246 1358 1368 msgid "Preset-based relay access" 1359 1369 msgstr "" 1360 1370 1361 #: includes/admin/class-vwsm-quick-setup.php:24 41371 #: includes/admin/class-vwsm-quick-setup.php:246 1362 1372 msgid "Existing Full client policies will follow the reviewed role preset, including Full policies with a previously partial tool selection. Custom, Read Only, Safe Drafts and revoked client policies remain restrictive. Personal exclusions are retained." 1363 1373 msgstr "" 1364 1374 1365 #: includes/admin/class-vwsm-quick-setup.php:24 51375 #: includes/admin/class-vwsm-quick-setup.php:247 1366 1376 msgid "These changes affect site/role availability. Client scopes, explicit restricted or revoked grants, personal exclusions, native Abilities and exact package approvals remain separate. No credential or customer record is changed." 1367 1377 msgstr "" 1368 1378 1369 #: includes/admin/class-vwsm-quick-setup.php:24 71379 #: includes/admin/class-vwsm-quick-setup.php:249 1370 1380 msgid "I reviewed these exact site and role changes." 1371 1381 msgstr "" 1372 1382 1373 #: includes/admin/class-vwsm-quick-setup.php:2 481383 #: includes/admin/class-vwsm-quick-setup.php:250 1374 1384 msgid "Activate and continue" 1375 1385 msgstr "" 1376 1386 1377 #: includes/admin/class-vwsm-quick-setup.php:2 491387 #: includes/admin/class-vwsm-quick-setup.php:251 1378 1388 msgid "Back to setup" 1379 1389 msgstr "" … … 2488 2498 #: includes/admin/views/native-abilities-page.php:70 2489 2499 #: includes/class-vwsm-local-oauth.php:940 2490 #: includes/class-vwsm-tool-access.php:4 62491 #: includes/class-vwsm-tool-access.php: 6062500 #: includes/class-vwsm-tool-access.php:47 2501 #: includes/class-vwsm-tool-access.php:740 2492 2502 msgid "Read" 2493 2503 msgstr "" … … 5351 5361 #: includes/class-vwsm-local-oauth.php:539 5352 5362 #: includes/class-vwsm-local-oauth.php:918 5353 #: includes/class-vwsm-tool-access.php:5 15363 #: includes/class-vwsm-tool-access.php:52 5354 5364 #: includes/class-vwsm-user-tool-access.php:32 5355 5365 msgid "Custom" … … 5499 5509 #: includes/class-vwsm-local-oauth.php:940 5500 5510 #: includes/class-vwsm-relay-review.php:61 5501 #: includes/class-vwsm-tool-access.php:4 85511 #: includes/class-vwsm-tool-access.php:49 5502 5512 msgid "Write" 5503 5513 msgstr "" … … 5654 5664 5655 5665 #: includes/class-vwsm-native-abilities.php:484 5656 #: includes/class-vwsm-tool-access.php: 6525666 #: includes/class-vwsm-tool-access.php:799 5657 5667 msgid "Native Abilities" 5658 5668 msgstr "" … … 5724 5734 #: includes/class-vwsm-relay-review.php:16 5725 5735 #: includes/class-vwsm-relay-review.php:60 5726 #: includes/class-vwsm-tool-access.php:4 75736 #: includes/class-vwsm-tool-access.php:48 5727 5737 #: includes/class-vwsm-user-tool-access.php:24 5728 5738 msgid "Draft" … … 5747 5757 #: includes/class-vwsm-relay-review.php:28 5748 5758 #: includes/class-vwsm-relay-review.php:36 5749 #: includes/class-vwsm-tool-access.php: 3865759 #: includes/class-vwsm-tool-access.php:483 5750 5760 msgid "Native administrator review is required." 5751 5761 msgstr "" … … 5773 5783 5774 5784 #: includes/class-vwsm-relay-review.php:58 5775 #: includes/class-vwsm-tool-access.php:4 55785 #: includes/class-vwsm-tool-access.php:46 5776 5786 #: includes/class-vwsm-user-tool-access.php:22 5777 5787 msgid "Disabled" … … 5779 5789 5780 5790 #: includes/class-vwsm-relay-review.php:64 5781 #: includes/class-vwsm-tool-access.php: 495791 #: includes/class-vwsm-tool-access.php:50 5782 5792 #: includes/class-vwsm-user-tool-access.php:29 5783 5793 msgid "Admin" … … 5785 5795 5786 5796 #: includes/class-vwsm-relay-review.php:65 5787 #: includes/class-vwsm-tool-access.php:5 05788 #: includes/class-vwsm-tool-access.php: 6095797 #: includes/class-vwsm-tool-access.php:51 5798 #: includes/class-vwsm-tool-access.php:743 5789 5799 #: includes/class-vwsm-user-tool-access.php:30 5790 5800 msgid "Develop" … … 6032 6042 msgstr "" 6033 6043 6034 #: includes/class-vwsm-tool-access.php: 3716044 #: includes/class-vwsm-tool-access.php:430 6035 6045 msgid "This tool is disabled by the site Tool access policy. Ask an administrator to review Tool access." 6036 6046 msgstr "" 6037 6047 6038 #: includes/class-vwsm-tool-access.php:388 6048 #: includes/class-vwsm-tool-access.php:445 6049 msgid "Choose supported tools in a native administrator session." 6050 msgstr "" 6051 6052 #: includes/class-vwsm-tool-access.php:450 6053 msgid "Review a role preset before updating individual tool definitions." 6054 msgstr "" 6055 6056 #: includes/class-vwsm-tool-access.php:454 6057 msgid "A selected definition exceeds the current role constraints. Review the role policy separately." 6058 msgstr "" 6059 6060 #: includes/class-vwsm-tool-access.php:458 6061 #: includes/class-vwsm-tool-access.php:517 6062 msgid "Invalid tool selection." 6063 msgstr "" 6064 6065 #: includes/class-vwsm-tool-access.php:485 6039 6066 msgid "Invalid relay review mode." 6040 6067 msgstr "" 6041 6068 6042 #: includes/class-vwsm-tool-access.php: 3976069 #: includes/class-vwsm-tool-access.php:494 6043 6070 msgid "Invalid feature selection." 6044 6071 msgstr "" 6045 6072 6046 #: includes/class-vwsm-tool-access.php: 4046073 #: includes/class-vwsm-tool-access.php:501 6047 6074 msgid "Choose a supported mode for each group." 6048 6075 msgstr "" 6049 6076 6050 #: includes/class-vwsm-tool-access.php:420 6051 msgid "Invalid tool selection." 6052 msgstr "" 6053 6054 #: includes/class-vwsm-tool-access.php:424 6077 #: includes/class-vwsm-tool-access.php:521 6055 6078 msgid "A selected tool is unavailable for this group or draft constraint. Refresh the table and review again." 6056 6079 msgstr "" 6057 6080 6058 #: includes/class-vwsm-tool-access.php: 4436081 #: includes/class-vwsm-tool-access.php:541 6059 6082 msgid "Choose a preset or review a Custom tool selection for both groups before using preset-based relay access." 6060 6083 msgstr "" 6061 6084 6062 #: includes/class-vwsm-tool-access.php: 4716085 #: includes/class-vwsm-tool-access.php:569 6063 6086 msgid "The review expired or settings/tools changed. Prepare a fresh review." 6064 6087 msgstr "" 6065 6088 6066 #: includes/class-vwsm-tool-access.php: 4736089 #: includes/class-vwsm-tool-access.php:571 6067 6090 msgid "This review has already been used." 6068 6091 msgstr "" 6069 6092 6070 #: includes/class-vwsm-tool-access.php: 4946093 #: includes/class-vwsm-tool-access.php:592 6071 6094 msgid "Another administrator changed the policy. Review again." 6072 6095 msgstr "" 6073 6096 6074 #: includes/class-vwsm-tool-access.php: 4996075 #: includes/class-vwsm-tool-access.php: 5076076 #: includes/class-vwsm-tool-access.php: 5136077 #: includes/class-vwsm-tool-access.php: 6306097 #: includes/class-vwsm-tool-access.php:597 6098 #: includes/class-vwsm-tool-access.php:605 6099 #: includes/class-vwsm-tool-access.php:611 6100 #: includes/class-vwsm-tool-access.php:764 6078 6101 msgid "Tool access" 6079 6102 msgstr "" 6080 6103 6081 #: includes/class-vwsm-tool-access.php: 5136104 #: includes/class-vwsm-tool-access.php:611 6082 6105 msgid "Review role presets and individual tools" 6083 6106 msgstr "" 6084 6107 6085 #: includes/class-vwsm-tool-access.php: 5136108 #: includes/class-vwsm-tool-access.php:611 6086 6109 msgid "Reviewed role presets may enable API feature switches for that group. Site Read Only, publication controls, connection approvals and WordPress permissions still apply." 6087 6110 msgstr "" 6088 6111 6089 #: includes/class-vwsm-tool-access.php: 5376112 #: includes/class-vwsm-tool-access.php:637 6090 6113 msgid "Confirm the reviewed policy first." 6091 6114 msgstr "" 6092 6115 6093 #: includes/class-vwsm-tool-access.php:552 6116 #: includes/class-vwsm-tool-access.php:646 6117 msgid "Use the reviewed POST form for this action." 6118 msgstr "" 6119 6120 #: includes/class-vwsm-tool-access.php:661 6121 msgid "Review selected new or changed definitions" 6122 msgstr "" 6123 6124 #: includes/class-vwsm-tool-access.php:661 6125 msgid "Update only the checked definitions. Keep the current preset, draft limits, other role groups, unselected fingerprints, personal restrictions and connection/package approvals. Unselected stale tools remain unavailable." 6126 msgstr "" 6127 6128 #: includes/class-vwsm-tool-access.php:673 6129 msgid "Review selected definitions" 6130 msgstr "" 6131 6132 #: includes/class-vwsm-tool-access.php:686 6094 6133 msgid "Site Read Only is on." 6095 6134 msgstr "" 6096 6135 6097 #: includes/class-vwsm-tool-access.php: 5526136 #: includes/class-vwsm-tool-access.php:686 6098 6137 msgid "Write presets remain blocked until editing is unlocked. Presets never override the site publishing switch." 6099 6138 msgstr "" 6100 6139 6101 #: includes/class-vwsm-tool-access.php: 5526140 #: includes/class-vwsm-tool-access.php:686 6102 6141 msgid "Review site editing controls" 6103 6142 msgstr "" 6104 6143 6105 #: includes/class-vwsm-tool-access.php: 5556144 #: includes/class-vwsm-tool-access.php:689 6106 6145 msgid "Role presets" 6107 6146 msgstr "" 6108 6147 6109 #: includes/class-vwsm-tool-access.php: 5556148 #: includes/class-vwsm-tool-access.php:689 6110 6149 msgid "Choose the tools available to each group, then review before saving. Client scopes and explicit connection restrictions still apply." 6111 6150 msgstr "" 6112 6151 6113 #: includes/class-vwsm-tool-access.php: 5706152 #: includes/class-vwsm-tool-access.php:704 6114 6153 msgid "Extra client admin review (optional)" 6115 6154 msgstr "" 6116 6155 6117 #: includes/class-vwsm-tool-access.php: 5706156 #: includes/class-vwsm-tool-access.php:704 6118 6157 msgid "Optional. When off, eligible connections use the reviewed role preset. Custom, Read Only, Safe Drafts and revoked client policies stay restrictive. Existing Full policies follow the role preset, including Full policies with a previously partial tool selection. Your AI app may request its own tool approval." 6119 6158 msgstr "" 6120 6159 6121 #: includes/class-vwsm-tool-access.php: 5716160 #: includes/class-vwsm-tool-access.php:705 6122 6161 msgid "Presets configure API features for the selected tools. Saved credentials, allowed roles, media source hosts, SEO provider and package approvals are retained. Other Roles still need an enabled AI role and the relevant WordPress capabilities." 6123 6162 msgstr "" 6124 6163 6125 #: includes/class-vwsm-tool-access.php: 5736126 #: includes/class-vwsm-tool-access.php: 5756164 #: includes/class-vwsm-tool-access.php:707 6165 #: includes/class-vwsm-tool-access.php:709 6127 6166 #: includes/services/class-vwsm-search-evidence.php:265 6128 6167 msgid "Review tool access" 6129 6168 msgstr "" 6130 6169 6131 #: includes/class-vwsm-tool-access.php: 5766170 #: includes/class-vwsm-tool-access.php:710 6132 6171 msgid "View all tools" 6133 6172 msgstr "" 6134 6173 6135 #: includes/class-vwsm-tool-access.php: 5846174 #: includes/class-vwsm-tool-access.php:718 6136 6175 msgid "Select tools by feature" 6137 6176 msgstr "" 6138 6177 6139 #: includes/class-vwsm-tool-access.php: 5926178 #: includes/class-vwsm-tool-access.php:726 6140 6179 msgid "Supported tools" 6141 6180 msgstr "" 6142 6181 6143 #: includes/class-vwsm-tool-access.php: 5926182 #: includes/class-vwsm-tool-access.php:726 6144 6183 msgid "Changing a checkbox selects Custom for that group. Draft-only protection is retained when customizing Draft. Availability also depends on installed integrations, enabled features and the connected account." 6145 6184 msgstr "" 6146 6185 6147 #: includes/class-vwsm-tool-access.php: 5926186 #: includes/class-vwsm-tool-access.php:726 6148 6187 msgid "Filter tools" 6149 6188 msgstr "" 6150 6189 6151 #: includes/class-vwsm-tool-access.php: 5926190 #: includes/class-vwsm-tool-access.php:726 6152 6191 msgid "Tool and description" 6153 6192 msgstr "" 6154 6193 6155 #: includes/class-vwsm-tool-access.php: 5926194 #: includes/class-vwsm-tool-access.php:726 6156 6195 msgid "Group / risk" 6157 6196 msgstr "" 6158 6197 6159 #: includes/class-vwsm-tool-access.php: 5926198 #: includes/class-vwsm-tool-access.php:726 6160 6199 msgid "Presets" 6161 6200 msgstr "" 6162 6201 6163 #: includes/class-vwsm-tool-access.php: 6046202 #: includes/class-vwsm-tool-access.php:738 6164 6203 msgid "Details" 6165 6204 msgstr "" 6166 6205 6167 #: includes/class-vwsm-tool-access.php: 6076206 #: includes/class-vwsm-tool-access.php:741 6168 6207 msgid "Routine write" 6169 6208 msgstr "" 6170 6209 6171 #: includes/class-vwsm-tool-access.php: 6086210 #: includes/class-vwsm-tool-access.php:742 6172 6211 msgid "Administration" 6173 6212 msgstr "" 6174 6213 6175 #: includes/class-vwsm-tool-access.php: 6116214 #: includes/class-vwsm-tool-access.php:745 6176 6215 msgid "Available before connection review" 6177 6216 msgstr "" 6178 6217 6179 #: includes/class-vwsm-tool-access.php: 6116218 #: includes/class-vwsm-tool-access.php:745 6180 6219 msgid "Feature or approval required" 6181 6220 msgstr "" 6182 6221 6183 6222 #. translators: %1$s: tool identifier, %2$s: capability group label. 6184 #: includes/class-vwsm-tool-access.php: 6196223 #: includes/class-vwsm-tool-access.php:753 6185 6224 #, php-format 6186 6225 msgid "Enable %1$s for %2$s" 6187 6226 msgstr "" 6188 6227 6189 #: includes/class-vwsm-tool-access.php: 6306228 #: includes/class-vwsm-tool-access.php:764 6190 6229 msgid "Continue onboarding" 6191 6230 msgstr "" 6192 6231 6193 #: includes/class-vwsm-tool-access.php: 6346232 #: includes/class-vwsm-tool-access.php:768 6194 6233 msgid "The review expired. Prepare it again." 6195 6234 msgstr "" 6196 6235 6197 #: includes/class-vwsm-tool-access.php:636 6236 #: includes/class-vwsm-tool-access.php:771 6237 msgid "Only these tool definitions will change:" 6238 msgstr "" 6239 6240 #: includes/class-vwsm-tool-access.php:771 6241 msgid "All other role constraints and unselected fingerprints are retained." 6242 msgstr "" 6243 6244 #: includes/class-vwsm-tool-access.php:772 6198 6245 msgid "Relay approval mode" 6199 6246 msgstr "" 6200 6247 6201 #: includes/class-vwsm-tool-access.php: 6366248 #: includes/class-vwsm-tool-access.php:772 6202 6249 msgid "Require an administrator review for each account and relay client." 6203 6250 msgstr "" 6204 6251 6205 #: includes/class-vwsm-tool-access.php: 6366252 #: includes/class-vwsm-tool-access.php:772 6206 6253 msgid "Use reviewed role presets; no extra per-client admin step. Custom, Read Only, Safe Drafts and revoked policies stay restrictive. Existing Full policies, including partial Full selections, will follow the current reviewed role preset." 6207 6254 msgstr "" 6208 6255 6209 #: includes/class-vwsm-tool-access.php: 6376256 #: includes/class-vwsm-tool-access.php:773 6210 6257 msgid "Review role access" 6211 6258 msgstr "" 6212 6259 6213 #: includes/class-vwsm-tool-access.php: 6376260 #: includes/class-vwsm-tool-access.php:773 6214 6261 msgid "Group" 6215 6262 msgstr "" 6216 6263 6217 #: includes/class-vwsm-tool-access.php: 6376264 #: includes/class-vwsm-tool-access.php:773 6218 6265 msgid "Tools and constraints" 6219 6266 msgstr "" 6220 6267 6221 #: includes/class-vwsm-tool-access.php: 6396268 #: includes/class-vwsm-tool-access.php:775 6222 6269 msgid "Review exact selection" 6223 6270 msgstr "" 6224 6271 6225 #: includes/class-vwsm-tool-access.php: 6396272 #: includes/class-vwsm-tool-access.php:775 6226 6273 msgid "Draft-only execution retained." 6227 6274 msgstr "" 6228 6275 6229 #: includes/class-vwsm-tool-access.php: 6396276 #: includes/class-vwsm-tool-access.php:775 6230 6277 msgid "Selected write tools may affect public content." 6231 6278 msgstr "" 6232 6279 6233 #: includes/class-vwsm-tool-access.php: 6396280 #: includes/class-vwsm-tool-access.php:775 6234 6281 msgid "API switches follow the selected tools for this group; site Read Only and publication controls remain authoritative." 6235 6282 msgstr "" 6236 6283 6237 #: includes/class-vwsm-tool-access.php: 6396284 #: includes/class-vwsm-tool-access.php:775 6238 6285 msgid "Existing feature switches continue to apply." 6239 6286 msgstr "" 6240 6287 6241 #: includes/class-vwsm-tool-access.php: 6416288 #: includes/class-vwsm-tool-access.php:777 6242 6289 msgid "API feature switches" 6243 6290 msgstr "" 6244 6291 6245 #: includes/class-vwsm-tool-access.php: 6416292 #: includes/class-vwsm-tool-access.php:777 6246 6293 msgid "Selected tools determine their API feature switches. Read blocks writes; Draft blocks publication. Write permits own-action recovery. Admin enables routine administration and other-author content. Cross-user log recovery still needs its separate Admin scope setting. Only Develop enables protected metadata and host-allowlisted executable HTML for administrators with unfiltered_html. Source hosts and package approvals remain separate." 6247 6294 msgstr "" 6248 6295 6249 #: includes/class-vwsm-tool-access.php: 6416296 #: includes/class-vwsm-tool-access.php:777 6250 6297 msgid "Admin can change site settings and apply separately approved updates. Develop additionally permits executable HTML, protected metadata and separately approved executable packages. Use these modes only with trusted administrators and a restorable backup." 6251 6298 msgstr "" 6252 6299 6253 #: includes/class-vwsm-tool-access.php: 6436300 #: includes/class-vwsm-tool-access.php:779 6254 6301 msgid "I reviewed these tools and their public/code effects." 6255 6302 msgstr "" 6256 6303 6257 #: includes/class-vwsm-tool-access.php: 6446304 #: includes/class-vwsm-tool-access.php:780 6258 6305 msgid "Apply reviewed tool access" 6259 6306 msgstr "" 6260 6307 6261 #: includes/class-vwsm-tool-access.php: 6486308 #: includes/class-vwsm-tool-access.php:784 6262 6309 msgid "Tool access saved. Existing client records and package allowlists were retained; the reviewed relay approval mode now applies." 6263 6310 msgstr "" 6264 6311 6265 #: includes/class-vwsm-tool-access.php:650 6312 #: includes/class-vwsm-tool-access.php:794 6313 msgid "Some selected definitions changed and are unavailable. Review only the needed definitions below to retain unrelated permissions." 6314 msgstr "" 6315 6316 #: includes/class-vwsm-tool-access.php:794 6317 msgid "Review changed definitions" 6318 msgstr "" 6319 6320 #: includes/class-vwsm-tool-access.php:797 6266 6321 msgid "How presets and approvals work" 6267 6322 msgstr "" 6268 6323 6269 #: includes/class-vwsm-tool-access.php: 6506324 #: includes/class-vwsm-tool-access.php:797 6270 6325 msgid "Disabled blocks Site Manager tools. Read exposes reads. Draft allows unpublished content and private review proposals. Write adds routine edits, taxonomy changes, recoverable trash and own-action rollback when a snapshot exists. Admin adds routine site administration; Develop adds high-risk code and package operations. Admin and Develop are admin-only. Custom retains draft protection and requires review for each new or changed tool. WordPress core REST access from an Application Password is outside this plugin policy." 6271 6326 msgstr "" 6272 6327 6273 #: includes/class-vwsm-tool-access.php: 6506328 #: includes/class-vwsm-tool-access.php:797 6274 6329 msgid "This table lists supported metadata for installed integrations. A checked tool is an availability ceiling, not proof that the current connection can execute it. Native Abilities, relay consent, account plans, object capabilities and package allowlists may narrow it further. No arbitrary code executor is provided." 6275 6330 msgstr "" 6276 6331 6277 #: includes/class-vwsm-tool-access.php: 6526332 #: includes/class-vwsm-tool-access.php:799 6278 6333 msgid "Review connection permissions" 6279 6334 msgstr "" … … 6387 6442 msgstr "" 6388 6443 6389 #: includes/class-vwsm-translation-tools.php:158 6444 #: includes/class-vwsm-translation-tools.php:155 6445 msgid "An administrator enables integration drafting and publication in Translator Settings, then allows editing and direct publishing in Site Manager Quick setup and reviews the role tools. Develop includes supported administrator tools after review; explicit client restrictions and personal exclusions remain in force. Ask the administrator to review the current connection if its publish tool is missing. Each translation still needs an editable original, a complete current draft and resolved protection review." 6446 msgstr "" 6447 6448 #: includes/class-vwsm-translation-tools.php:181 6390 6449 msgid "List available translation languages and their configuration revision." 6391 6450 msgstr "" 6392 6451 6393 #: includes/class-vwsm-translation-tools.php:1 596452 #: includes/class-vwsm-translation-tools.php:182 6394 6453 msgid "List your own editable public Posts and Pages and translation statuses." 6395 6454 msgstr "" 6396 6455 6397 #: includes/class-vwsm-translation-tools.php:1 616456 #: includes/class-vwsm-translation-tools.php:184 6398 6457 msgid "Read bounded translation text from your own public Post or Page in an available language." 6399 6458 msgstr "" 6400 6459 6401 #: includes/class-vwsm-translation-tools.php:1 706460 #: includes/class-vwsm-translation-tools.php:193 6402 6461 msgid "Validate translated plain-text units and save a private translation draft without changing public content." 6403 6462 msgstr "" 6404 6463 6405 #: includes/class-vwsm-translation-tools.php: 1896464 #: includes/class-vwsm-translation-tools.php:212 6406 6465 msgid "Read your translation draft, exact source and target versions, and native review link." 6407 6466 msgstr "" 6408 6467 6409 #: includes/class-vwsm-translation-tools.php: 1986468 #: includes/class-vwsm-translation-tools.php:221 6410 6469 msgid "Publish your existing translation draft only when source/version and configured publication permissions match." 6411 6470 msgstr "" 6412 6471 6413 #: includes/class-vwsm-translation-tools.php:2 106472 #: includes/class-vwsm-translation-tools.php:233 6414 6473 msgid "Replace private progress notes for your translation after reading its notes version. Empty text clears the note; no page or translation is published." 6415 6474 msgstr "" 6416 6475 6417 #: includes/class-vwsm-translation-tools.php:2 236476 #: includes/class-vwsm-translation-tools.php:246 6418 6477 msgid "Check translation setup, publication readiness and native settings/review links before planning work. Does not enable permissions." 6419 6478 msgstr "" 6420 6479 6421 #: includes/class-vwsm-translation-tools.php:2 266480 #: includes/class-vwsm-translation-tools.php:249 6422 6481 msgid "Read bounded private source differences and section-protection status for your editable original. This does not unlock corrections or publish." 6423 6482 msgstr "" 6424 6483 6425 #: includes/class-vwsm-translation-tools.php:2 316484 #: includes/class-vwsm-translation-tools.php:254 6426 6485 msgid "Publish a reviewed translation and its local URL proposal using current versions and publication permissions. Earlier public paths remain aliases." 6427 6486 msgstr "" 6428 6487 6429 #: includes/class-vwsm-translation-tools.php:2 336488 #: includes/class-vwsm-translation-tools.php:256 6430 6489 msgid "Save a private local language-URL proposal for your translation. Normal separate publication applies it and retains public aliases; collisions fail closed." 6431 6490 msgstr "" 6432 6491 6433 #: includes/class-vwsm-translation-tools.php:2 746492 #: includes/class-vwsm-translation-tools.php:297 6434 6493 msgid "Local translation drafts and permission-controlled publication. Own content only; administrators use separately reviewed Pro tools for other authors and site elements." 6435 6494 msgstr "" 6436 6495 6437 #: includes/class-vwsm-translation-tools.php: 2896496 #: includes/class-vwsm-translation-tools.php:312 6438 6497 msgid "Translation access denied." 6439 6498 msgstr "" 6440 6499 6441 #: includes/class-vwsm-translation-tools.php:3 106500 #: includes/class-vwsm-translation-tools.php:334 6442 6501 msgid "Check setup, list languages, read your content and notes, get translation context, translate plain-text units, save a draft, update progress notes and review. Publish only when current permissions allow. Site-wide language management requires separately approved Pro administration tools." 6502 msgstr "" 6503 6504 #: includes/class-vwsm-translation-tools.php:353 6505 msgid "Translation publication is disabled by a current permission or setting. Ask an administrator to review the publication readiness checklist." 6443 6506 msgstr "" 6444 6507 -
videowhisper-site-manager/trunk/readme.txt
r3791171 r3791563 327 327 328 328 == Changelog == 329 330 = 1.21.0 = 331 * Keep reviewed content tools available when page builders register a narrower API content inventory; new content scope still needs native review. 332 * Review only selected new or changed tool definitions without replacing other approvals. 333 * Explain translation publication prerequisites and link directly to the relevant settings. 334 329 335 330 336 = 1.20.0 = -
videowhisper-site-manager/trunk/videowhisper-site-manager.php
r3791171 r3791563 3 3 * Plugin Name: VideoWhisper Site Manager for ChatGPT, Claude, Codex, Grok 4 4 * Description: Manage WordPress with your AI assistant and own account. Optional hosted relay: multiple sites from one connection and agent session. 5 * Version: 1.2 0.05 * Version: 1.21.0 6 6 * Requires at least: 6.9 7 7 * Requires PHP: 8.2 … … 20 20 } 21 21 22 define( 'VWSM_VERSION', '1.2 0.0' );22 define( 'VWSM_VERSION', '1.21.0' ); 23 23 define( 'VWSM_IMAGE_SEO_CORE', 1 ); 24 24 define( 'VWSM_LOCAL_OAUTH_CORE', 1 );
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)