PluginProbe
Code Snippets / 3.10.1
Code Snippets v3.10.1
3.10.2 3.10.1 3.10.0 3.10.0-beta.2 3.10.0-beta.1 4.0.0-beta.1 3.9.6 trunk 2.10.0 2.10.1 2.12.0 2.12.1 2.13.0 2.13.1 2.13.2 2.13.3 2.14.0 2.14.1 2.14.2 2.14.3 2.14.4 2.14.5 2.14.6 3.0.0 3.0.1 All 64 releases
code-snippets / php / Admin / Menus / Manage / Manage_Menu_Assets.php

Manage_Menu_Assets.php in Code Snippets 3.10.1, at php/Admin/Menus/Manage/Manage_Menu_Assets.php

134 lines 3.9 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace Code_Snippets\Admin\Menus\Manage;
4
5 use Code_Snippets\Integration\Evaluate_Functions;
6 use Code_Snippets\Model\Snippet;
7 use function Code_Snippets\code_snippets;
8 use function Code_Snippets\get_snippets;
9 use function Code_Snippets\Settings\get_setting;
10 use function Code_Snippets\Utils\enqueue_code_preview_editor;
11 use const Code_Snippets\PLUGIN_FILE;
12 use const Code_Snippets\PLUGIN_VERSION;
13
14 /**
15 * Enqueues assets and builds localized data for the manage menu.
16 */
17 class Manage_Menu_Assets {
18
19 /**
20 * Handle for JavaScript asset file.
21 */
22 private const JS_HANDLE = 'code-snippets-manage-menu';
23
24 /**
25 * Handle for CSS asset file.
26 */
27 private const CSS_HANDLE = 'code-snippets-manage';
28
29 /**
30 * Manage menu Screen Options.
31 *
32 * @var Manage_Menu_Screen_Options
33 */
34 private Manage_Menu_Screen_Options $screen_options;
35
36 /**
37 * Class constructor.
38 *
39 * @param Manage_Menu_Screen_Options $screen_options Manage menu Screen Options.
40 */
41 public function __construct( Manage_Menu_Screen_Options $screen_options ) {
42 $this->screen_options = $screen_options;
43 }
44
45 /**
46 * Count non-trashed snippets by type.
47 *
48 * @return array<string, int> Map of type name to snippet count, including 'all'.
49 */
50 private function get_snippet_type_counts(): array {
51 $counts = [ 'all' => 0 ];
52
53 foreach ( get_snippets() as $snippet ) {
54 if ( $snippet->trashed ) {
55 continue;
56 }
57
58 $counts[ $snippet->type ] = ( $counts[ $snippet->type ] ?? 0 ) + 1;
59 ++$counts['all'];
60 }
61
62 return $counts;
63 }
64
65 /**
66 * Enqueue manage assets and localize their runtime data.
67 *
68 * @param string[] $script_dependencies JavaScript dependencies.
69 * @param string[] $style_dependencies CSS dependencies.
70 *
71 * @return void
72 */
73 public function enqueue( array $script_dependencies, array $style_dependencies ): void {
74 wp_enqueue_style(
75 self::CSS_HANDLE,
76 plugins_url( 'dist/manage.css', PLUGIN_FILE ),
77 $style_dependencies,
78 PLUGIN_VERSION
79 );
80
81 wp_enqueue_script(
82 self::JS_HANDLE,
83 plugins_url( 'dist/manage.js', PLUGIN_FILE ),
84 $script_dependencies,
85 PLUGIN_VERSION,
86 [ 'in_footer' => true ]
87 );
88
89 enqueue_code_preview_editor( 'php' );
90 wp_set_script_translations( self::JS_HANDLE, 'code-snippets' );
91 code_snippets()->localize_script( self::JS_HANDLE );
92
93 $snippets_per_page = Manage_Menu::get_snippets_per_page();
94
95 $localized = [
96 'hasNetworkCap' => current_user_can( code_snippets()->get_network_cap_name() ),
97 'hiddenColumns' => $this->screen_options->get_hidden_columns(),
98 'truncateRowValues' => (int) $this->screen_options->should_truncate_rows(),
99 'snippetsPerPage' => $snippets_per_page,
100 'cloudSearchPerPage' => Manage_Menu::get_cloud_search_per_page(),
101 'isSafeModeActive' => Evaluate_Functions::is_safe_mode_active(),
102 'bulkDownloadNonce' => wp_create_nonce( 'code_snippets_bulk_download' ),
103 'supportsZipDownloads' => class_exists( 'ZipArchive' ),
104 'editorTheme' => get_setting( 'editor', 'theme' ),
105 'typeCounts' => $this->get_snippet_type_counts(),
106 'listOrder' => get_setting( 'general', 'list_order' ),
107 ];
108
109 if ( $this->screen_options->is_manage_table_view() ) {
110 // Full code bodies make this payload grow with the size of the snippet library.
111 $snippets = array_map(
112 function ( Snippet $snippet ) {
113 $fields = $snippet->get_fields();
114 $fields['code'] = '';
115 // Match the REST response: a UTC value with no offset is read
116 // as local time by the browser.
117 $fields['modified'] = $snippet->modified_iso;
118 return $fields;
119 },
120 get_snippets()
121 );
122
123 $inline_limit = apply_filters( 'code_snippets/manage/inline_snippets_limit', min( $snippets_per_page, 100 ) );
124 $inline_limit = max( 0, intval( $inline_limit ) );
125
126 if ( $inline_limit > 0 ) {
127 $localized['snippetsList'] = array_slice( $snippets, 0, $inline_limit );
128 }
129 }
130
131 wp_localize_script( self::JS_HANDLE, 'CODE_SNIPPETS_MANAGE', $localized );
132 }
133 }
134