PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.1.4
Admin Columns v7.1.4
7.1.4 7.0.19 2.3.5 2.4 2.4.1 2.4.10 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.6.1 2.5.6.2 2.5.6.3 2.5.6.4 3.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.7 3.1 3.1.1 3.1.10 3.1.2 3.1.3 3.1.5 3.2.3 3.2.7 3.3.1 3.4.1 3.4.6 3.4.8 4.0.1 4.0.3 4.1.6 4.2.2 4.2.5 4.3 4.3.2 4.4.1 4.4.4 4.4.5 4.5.5 4.6.1 4.7.18 4.7.19 4.7.20 4.7.7 7.0.13 7.0.14 7.0.16 trunk 1.0 1.1 1.1.3 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.5.1 1.4.6 1.4.6.1 1.4.6.2 1.4.6.3 1.4.6.4 1.4.7 1.4.8 1.4.9 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.2.1 2.2.1.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.5.1 2.2.6 2.2.6.1 2.2.6.2 2.2.6.3 2.2.6.4 2.2.7 2.2.8 2.2.8.1 2.2.9 2.3.1 2.3.2 2.3.3
codepress-admin-columns / classes / Admin / Asset / Columns.php
codepress-admin-columns / classes / Admin / Asset Last commit date
Script 2 days ago Addons.php 2 days ago Columns.php 2 days ago
Columns.php
705 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Admin\Asset;
6
7 use AC;
8 use AC\Admin\Banner\BannerContextResolver;
9 use AC\Asset\Location;
10 use AC\Asset\Script;
11 use AC\Capabilities;
12 use AC\Form\NonceFactory;
13 use AC\Helper\Mbstring;
14 use AC\Storage\Repository\EditorFavorites;
15 use AC\Storage\Repository\EditorMenuStatus;
16 use AC\Table\TableScreenCollection;
17 use AC\Table\TableScreenRepository\SortByLabel;
18 use AC\TableScreen;
19 use AC\Type\ListScreenId;
20 use AC\Type\StartingPrice;
21 use AC\Type\Url\Documentation;
22 use AC\Type\Url\Site;
23 use AC\Type\Url\UtmTags;
24
25 class Columns extends Script
26 {
27 private TableScreen $table_screen;
28
29 private TableScreenCollection $table_screens;
30
31 private AC\Admin\MenuListItems $menu_items;
32
33 private EditorFavorites $favorite_repository;
34
35 private AC\Table\TableScreenRepository $table_screen_repository;
36
37 private AC\ColumnGroups $column_groups;
38
39 private AC\Promo\PromoRepository $promos;
40
41 private Location $parent_location;
42
43 private AC\Integration\IntegrationRepository $integration_repository;
44
45 private bool $is_pro_active;
46
47 private ?ListScreenId $list_id;
48
49 private BannerContextResolver $banner_context_resolver;
50
51 public function __construct(
52 string $handle,
53 Location $location,
54 TableScreen $table_screen,
55 TableScreenCollection $table_screens,
56 AC\Admin\MenuListItems $menu_items,
57 AC\Table\TableScreenRepository $table_screen_repository,
58 EditorFavorites $favorite_repository,
59 AC\ColumnGroups $column_groups,
60 AC\Promo\PromoRepository $promos,
61 AC\Integration\IntegrationRepository $integration_repository,
62 Location $parent_location,
63 bool $is_pro_active,
64 BannerContextResolver $banner_context_resolver,
65 ?ListScreenId $list_id = null
66 ) {
67 parent::__construct($handle, $location, [
68 'jquery-ui-sortable',
69 Script\GlobalTranslationFactory::HANDLE,
70 ]);
71
72 $this->table_screen = $table_screen;
73 $this->table_screens = $table_screens;
74 $this->menu_items = $menu_items;
75 $this->favorite_repository = $favorite_repository;
76 $this->table_screen_repository = $table_screen_repository;
77 $this->column_groups = $column_groups;
78 $this->promos = $promos;
79 $this->parent_location = $parent_location;
80 $this->integration_repository = $integration_repository;
81 $this->is_pro_active = $is_pro_active;
82 $this->banner_context_resolver = $banner_context_resolver;
83 $this->list_id = $list_id;
84 }
85
86 public function get_pro_modal_arguments(): array
87 {
88 $arguments = [];
89 $upgrade_page_url = new UtmTags(Site::create_admin_columns_pro(), 'banner');
90
91 $plural = $this->table_screen->get_labels()->get_plural();
92 $singular = $this->table_screen->get_labels()->get_singular();
93
94 if (Mbstring::strlen($plural) > 30) {
95 $plural = __('content', 'codepress-admin-columns');
96 $singular = __('item', 'codepress-admin-columns');
97 }
98
99 $plural_lower = Mbstring::strtolower($plural);
100 $singular_lower = Mbstring::strtolower($singular);
101
102 $items = [
103 'editing' => __('Inline edit directly in the table', 'codepress-admin-columns'),
104 'sorting' => __('Sort and filter on any column', 'codepress-admin-columns'),
105 'bulk-edit' => sprintf(
106 /* translators: %s: post type label plural (e.g. "posts", "pages") */
107 __('Bulk edit hundreds of %s at once', 'codepress-admin-columns'),
108 $plural_lower
109 ),
110 'export' => __('Export table data to CSV', 'codepress-admin-columns'),
111 'column-sets' => __('Multiple views per screen', 'codepress-admin-columns'),
112 ];
113
114 if (current_user_can(Capabilities::MANAGE)) {
115 $promo = $this->promos->find_active();
116
117 if ($promo) {
118 $arguments['promo'] = [
119 'title' => $promo->get_title(),
120 'url' => (string)$promo->get_url(),
121 'button_label' => $promo->get_button_label(),
122 'discount_until' => sprintf(
123 __("Discount is valid until %s", 'codepress-admin-columns'),
124 $promo->get_date_range()->get_end()->format('j F Y')
125 ),
126 ];
127 }
128 }
129
130 $integration_priority = [
131 'ac-addon-woocommerce',
132 'ac-addon-acf',
133 'ac-addon-yoast-seo',
134 'ac-addon-gravityforms',
135 'ac-addon-metabox',
136 'ac-addon-events-calendar',
137 'ac-addon-buddypress',
138 'ac-addon-jetengine',
139 'ac-addon-pods',
140 'ac-addon-types',
141 'ac-addon-media-library-assistant',
142 'ac-addon-rankmath',
143 'ac-addon-seopress',
144 ];
145
146 $active_integrations = [];
147
148 foreach ($this->integration_repository->find_all_by_active_plugins() as $integration) {
149 $active_integrations[$integration->get_slug()] = $integration;
150 }
151
152 $integrations = [];
153
154 foreach ($integration_priority as $slug) {
155 if (! isset($active_integrations[$slug])) {
156 continue;
157 }
158
159 $integration = $active_integrations[$slug];
160 $integrations[] = [
161 'url' => (string)$integration->get_url(),
162 'label' => $integration->get_title(),
163 ];
164
165 if (count($integrations) >= 2) {
166 break;
167 }
168 }
169
170 $features = [];
171
172 foreach ($items as $utm_content => $label) {
173 $features[] = [
174 'url' => $upgrade_page_url->with_content('usp-' . $utm_content)->get_url(),
175 'label' => $label,
176 ];
177 }
178
179 $arguments['title'] = sprintf(
180 /* translators: %s: post type label plural (e.g. "posts", "pages") */
181 __('Manage your %s faster', 'codepress-admin-columns'),
182 $plural_lower
183 );
184 $arguments['description'] = sprintf(
185 /* translators: 1: post type label plural, 2: post type label singular */
186 __(
187 'Turn your %1$s overview into a workspace for sorting, editing, filtering, and exporting - without opening a single %2$s.',
188 'codepress-admin-columns'
189 ),
190 $plural_lower,
191 $singular_lower
192 );
193 $arguments['upgrade_cta'] = sprintf(
194 /* translators: %s: post type label plural (e.g. "posts", "pages") */
195 __('Unlock faster %s management ', 'codepress-admin-columns'),
196 $singular_lower
197 );
198 $arguments['upgrade_cta_price'] = sprintf(
199 /* translators: %s: price (e.g. $79) */
200 __('from %s/year', 'codepress-admin-columns'),
201 StartingPrice::get()
202 );
203 $arguments['features'] = $features;
204 $arguments['integrations'] = $integrations;
205 $arguments['promo_url'] = $upgrade_page_url->get_url();
206 $arguments['discount'] = 10;
207
208 return $arguments;
209 }
210
211 private function get_pro_banner_context(): ?array
212 {
213 $context = $this->banner_context_resolver->resolve($this->table_screen);
214
215 if ($context === null) {
216 return null;
217 }
218
219 return $context->get_arguments($this->table_screen);
220 }
221
222 /**
223 * @return array<int, array{list_key: string, message: string, type: string, cta_label?: string, cta_url?: string}>
224 */
225 private function get_screen_notices(): array
226 {
227 return (array)apply_filters('ac/admin/screen_notices', []);
228 }
229
230 private function encode_groups(AC\Type\Groups $groups): array
231 {
232 $encode = [];
233
234 foreach ($groups as $group) {
235 $encode[] = [
236 'slug' => $group->get_slug(),
237 'label' => $group->get_label(),
238 'priority' => $group->get_priority(),
239 'icon' => $group->has_icon() ? $group->get_icon() : '',
240 ];
241 }
242
243 return $encode;
244 }
245
246 public function register(): void
247 {
248 parent::register();
249
250 $uninitialized_table_screens = [];
251
252 foreach ($this->table_screens as $table_screen) {
253 $uninitialized_table_screens[(string)$table_screen->get_id()] = [
254 'screen_link' => (string)$table_screen->get_url()->with_arg('save-default-headings', '1'),
255 ];
256 }
257
258 $this->add_inline_variable('ac_admin_columns', [
259 'assets' => $this->parent_location->with_suffix('assets')->get_url(),
260 'nonce' => NonceFactory::create_ajax()->create(),
261 'show_column_info' => (new AC\Admin\Preference\ScreenOptions())->is_active('show_column_info'),
262 'is_pro' => $this->is_pro_active,
263 'list_key' => (string)$this->table_screen->get_id(),
264 'list_id' => (string)$this->list_id,
265 'uninitialized_list_screens' => ! empty($uninitialized_table_screens) ? $uninitialized_table_screens : null,
266 'column_groups' => $this->encode_groups($this->column_groups->find_all()),
267 'menu_items' => $this->get_menu_items(),
268 'menu_items_favorites' => $this->encode_favorites($this->get_favorite_table_screens()),
269 'menu_groups_opened' => (new EditorMenuStatus())->get_groups(),
270 'urls' => [
271 'upgrade' => (new UtmTags(Site::create_admin_columns_pro(), 'upgrade'))->get_url(),
272 'learn_more' => (new UtmTags(Site::create_admin_columns_pro(), 'learn-more'))->get_url(),
273 ],
274 'pro_banner' => $this->is_pro_active ? null : $this->get_pro_modal_arguments(),
275 'pro_banner_context' => $this->is_pro_active ? null : $this->get_pro_banner_context(),
276 'screen_notices' => $this->get_screen_notices(),
277 'review' => [
278 'doc_url' => (new UtmTags(new Documentation(), 'review-notice'))->get_url(),
279 'upgrade_url' => (new UtmTags(Site::create_admin_columns_pro(), 'upgrade'))->get_url(),
280 ],
281 'support' => [
282 'description' => sprintf(
283 __(
284 "For full documentation, bug reports, feature suggestions and other tips visit %s.",
285 'codepress-admin-columns'
286 ),
287 sprintf(
288 '<a target="_blank" href="%s">%s</a>',
289 (new UtmTags(new Documentation()))->get_url(),
290 __('the Admin Columns website', 'codepress-admin-columns')
291 )
292 ),
293 'review' => (new UtmTags(new Documentation(), 'review-notice'))->get_url(),
294 ],
295 'confirm_delete' => (bool)apply_filters('ac/delete_confirmation', true),
296 'table_elements' => [
297 'default' => [
298 __('Filters', 'codepress-admin-columns'),
299 __('Status (Quick Links)', 'codepress-admin-columns'),
300 __('Search', 'codepress-admin-columns'),
301 __('Bulk Actions', 'codepress-admin-columns'),
302 __('Row Actions (Below Title)', 'codepress-admin-columns'),
303 ],
304 'features' => [
305 __('Inline Edit', 'codepress-admin-columns'),
306 __('Bulk Edit', 'codepress-admin-columns'),
307 __('Bulk Delete', 'codepress-admin-columns'),
308 __('Smart Filters', 'codepress-admin-columns'),
309 __('Export', 'codepress-admin-columns'),
310 __('Conditional Formatting', 'codepress-admin-columns'),
311 __('Add Row (Quick Add)', 'codepress-admin-columns'),
312 __('Resize Columns', 'codepress-admin-columns'),
313 __('Resize Columns', 'codepress-admin-columns'),
314 ],
315 ],
316 ]);
317
318 $this->localize(
319 'ac_admin_columns_i18n',
320 new Script\Localize\Translation([
321 'table_views' => [
322 'delete_view' => __('Delete view', 'codepress-admin-columns'),
323 ],
324 'errors' => [
325 'ajax_unknown' => __('Something went wrong.', 'codepress-admin-columns'),
326 'original_exist' => __(
327 '%s column is already present and can not be duplicated.',
328 'codepress-admin-columns'
329 ),
330 ],
331 'pro' => [
332 'modal' => [
333 'title' => __('This is a Pro feature', 'codepress-admin-columns'),
334 'subtitle' => __(
335 'Upgrade to Pro and take Admin Columns to the next level.',
336 'codepress-admin-columns'
337 ),
338 'also_get' => __('With Pro you also get', 'codepress-admin-columns'),
339 'trusted_by' => sprintf(
340 '%s · %s',
341 sprintf(
342 /* translators: %s: number of sites (e.g. 250,000+) */
343 __('Trusted by %s WordPress sites', 'codepress-admin-columns'),
344 '250,000+'
345 ),
346 sprintf(
347 /* translators: %s: rating (e.g. 4.9) */
348 __('%s on Trustpilot', 'codepress-admin-columns'),
349 '4.9'
350 )
351 ),
352 'guarantee' => __('30-day money-back guarantee', 'codepress-admin-columns'),
353 'see_all' => __('See all Pro features', 'codepress-admin-columns'),
354 'upgrade' => sprintf(
355 '%s - %s',
356 __('Upgrade', 'codepress-admin-columns'),
357 sprintf(
358 /* translators: %s: price (e.g. $79) */
359 __('from %s/year', 'codepress-admin-columns'),
360 StartingPrice::get()
361 )
362 ),
363 'features' => [
364 'inline_edit' => [
365 'badge' => __('Inline Editing is a Pro feature', 'codepress-admin-columns'),
366 'headline' => __(
367 'Edit content directly in the list table',
368 'codepress-admin-columns'
369 ),
370 'description' => __(
371 'Click any cell to edit - no need to open each item individually. Works with custom fields, taxonomies, and more.',
372 'codepress-admin-columns'
373 ),
374 'label' => __(
375 'Edit content directly in the list table',
376 'codepress-admin-columns'
377 ),
378 ],
379 'bulk_edit' => [
380 'badge' => __('Bulk Editing is a Pro feature', 'codepress-admin-columns'),
381 'headline' => __('Edit hundreds of items at once', 'codepress-admin-columns'),
382 'description' => __(
383 'Select multiple items and update them in one go - change statuses, categories, custom fields, and more.',
384 'codepress-admin-columns'
385 ),
386 'label' => __('Bulk edit hundreds of items at once', 'codepress-admin-columns'),
387 ],
388 'sorting' => [
389 'badge' => __('Sorting is a Pro feature', 'codepress-admin-columns'),
390 'headline' => __(
391 'Sort and filter your content by any column',
392 'codepress-admin-columns'
393 ),
394 'description' => __(
395 'Instantly find what you need - sort by any column and filter by custom fields, dates, statuses, and more.',
396 'codepress-admin-columns'
397 ),
398 'label' => __('Sort and filter by any column', 'codepress-admin-columns'),
399 ],
400 'filter' => [
401 'badge' => __('Filtering is a Pro feature', 'codepress-admin-columns'),
402 'headline' => __(
403 'Sort and filter your content by any column',
404 'codepress-admin-columns'
405 ),
406 'description' => __(
407 'Instantly find what you need - sort by any column and filter by custom fields, dates, statuses, and more.',
408 'codepress-admin-columns'
409 ),
410 'label' => __('Sort and filter by any column', 'codepress-admin-columns'),
411 ],
412 'search' => [
413 'badge' => __('Smart Filtering is a Pro feature', 'codepress-admin-columns'),
414 'headline' => __(
415 'Filter your content with saved filters',
416 'codepress-admin-columns'
417 ),
418 'description' => __(
419 'Create smart filters combining multiple conditions. Save them as segments and reuse them with one click.',
420 'codepress-admin-columns'
421 ),
422 'label' => __('Smart filters with saved segments', 'codepress-admin-columns'),
423 ],
424 'export' => [
425 'badge' => __('Export is a Pro feature', 'codepress-admin-columns'),
426 'headline' => __('Export your list table data to CSV', 'codepress-admin-columns'),
427 'description' => __(
428 'Export exactly what you see - your columns, your filters, your data. Ready for spreadsheets or further processing.',
429 'codepress-admin-columns'
430 ),
431 'label' => __('Export table data to CSV', 'codepress-admin-columns'),
432 ],
433 'list_tables' => [
434 'badge' => __('Column Sets is a Pro feature', 'codepress-admin-columns'),
435 'headline' => __('Create multiple table views', 'codepress-admin-columns'),
436 'description' => __(
437 'Set up different column configurations for different tasks. Switch between views with one click.',
438 'codepress-admin-columns'
439 ),
440 'label' => __('Multiple table views per screen', 'codepress-admin-columns'),
441 ],
442 ],
443 ],
444 'banner' => [
445 'badge' => __('Admin Columns Pro', 'codepress-admin-columns'),
446 'title' => __('Manage your content faster', 'codepress-admin-columns'),
447 'description' => __(
448 'Turn your list tables into a powerful command center for sorting, editing, filtering, and exporting content.',
449 'codepress-admin-columns'
450 ),
451 'features_label' => __('With Pro you get', 'codepress-admin-columns'),
452 'works_with' => __('Works with:', 'codepress-admin-columns'),
453 'trust' => sprintf(
454 '%s · %s',
455 sprintf(
456 /* translators: %s: number of sites (e.g. 250,000+) */
457 __('%s sites', 'codepress-admin-columns'),
458 '250,000+'
459 ),
460 sprintf(
461 /* translators: %s: rating (e.g. 4.9) */
462 __('%s on Trustpilot', 'codepress-admin-columns'),
463 '4.9'
464 )
465 ),
466 'upgrade_cta' => __('Upgrade to Pro', 'codepress-admin-columns'),
467 'upgrade_cta_price' => sprintf(
468 /* translators: %s: price (e.g. $79) */
469 __('from %s/year', 'codepress-admin-columns'),
470 StartingPrice::get()
471 ),
472 'guarantee' => __('30-day money-back guarantee', 'codepress-admin-columns'),
473 'see_all' => __('See all Pro features', 'codepress-admin-columns'),
474 'discount_title' => __('Get 10% off Admin Columns Pro', 'codepress-admin-columns'),
475 'discount_description' => __(
476 "Upgrade today and we'll send you a discount code for your first year.",
477 'codepress-admin-columns'
478 ),
479 'your_email' => __('Your email address', 'codepress-admin-columns'),
480 'send_discount' => __('Get discount code', 'codepress-admin-columns'),
481 'discount_note' => __('No spam. Just your discount code.', 'codepress-admin-columns'),
482 ],
483 'settings' => [
484 'status' => [
485 'status' => __('Active', 'codepress-admin-columns'),
486 'activate' => __('Activate', 'codepress-admin-columns'),
487 'description' => __(
488 'Toggle to show or hide this view on the list table.',
489 'codepress-admin-columns'
490 ),
491 ],
492 'conditionals' => [
493 'select_roles' => __('Select roles', 'codepress-admin-columns'),
494 'select_users' => __('Select users', 'codepress-admin-columns'),
495 'conditionals' => __('Conditionals', 'codepress-admin-columns'),
496 'description' => __(
497 'Make this table view available only for specific users or roles.',
498 'codepress-admin-columns'
499 ),
500 ],
501 'elements' => [
502 'table_elements' => __('Table Elements', 'codepress-admin-columns'),
503 'description' => __(
504 'Show or hide elements from the table list screen.',
505 'codepress-admin-columns'
506 ),
507 'default' => __('default Elements', 'codepress-admin-columns'),
508 'features' => __('Features', 'codepress-admin-columns'),
509 ],
510
511 'preferences' => [
512 'preferences' => __('Preferences', 'codepress-admin-columns'),
513 'description' => __(
514 'Set default settings that users will see when they visit the list table.',
515 'codepress-admin-columns'
516 ),
517 'horizontal_scrolling' => __('Horizontal Scrolling', 'codepress-admin-columns'),
518 'sorting' => __('Initial Sorting', 'codepress-admin-columns'),
519 'segments' => __('Pre-applied Filters', 'codepress-admin-columns'),
520 'no_segments' => __('No saved filters available.', 'codepress-admin-columns'),
521 'primary_column' => __('Primary Column', 'codepress-admin-columns'),
522 'wrapping' => __('Wrapping', 'codepress-admin-columns'),
523 'wrapping_options' => [
524 'wrap' => sprintf(
525 '%s (%s)',
526 _x('Wrap', 'wrapping_option', 'codepress-admin-columns'),
527 __('default', 'codepress-admin-columns')
528 ),
529 'clip' => _x('Clip', 'wrapping_option', 'codepress-admin-columns'),
530 'auto' => _x('Auto Width', 'wrapping_option', 'codepress-admin-columns'),
531 ],
532 'unlock' => __(
533 'Unlock with Admin Columns Pro',
534 'codepress-admin-columns'
535 ),
536 ],
537 ],
538 ],
539 'notices' => [
540 'unsaved_changes' => __('You have unsaved changes', 'codepress-admin-columns'),
541 'unsaved_changes_leave' => __(
542 'If you leave this page, all unsaved changes will be lost. Are you sure you want to leave?',
543 'codepress-admin-columns'
544 ),
545 'inactive' => sprintf(
546 __(
547 'This table view is %s and won’t appear on the list table.',
548 'codepress-admin-columns'
549 ),
550 sprintf('<strong>%s</strong >', __('not active', 'codepress-admin-columns'))
551 ),
552 'not_saved_settings' => sprintf(
553 '%s %s',
554 sprintf(
555 __('These settings are %s.', 'codepress-admin-columns'),
556 sprintf('<strong>%s</strong >', __('not saved', 'codepress-admin-columns'))
557 ),
558 sprintf(
559 __(
560 'Click %s to apply these column settings to the list table.',
561 'codepress-admin-columns'
562 ),
563 sprintf('<strong>%s</strong >', __('Save', 'codepress-admin-columns')),
564 )
565 ),
566 ],
567 'support' => [
568 'title' => __('Support', 'codepress-admin-columns'),
569 ],
570 'review' => [
571 'happy' => __('Missing something?', 'codepress-admin-columns'),
572 'help_improve' => __(
573 'Help us improve Admin Columns with one quick click.',
574 'codepress-admin-columns'
575 ),
576 'all_good' => __('All good', 'codepress-admin-columns'),
577 'need_feature' => __('Need a feature', 'codepress-admin-columns'),
578 'glad' => __("Glad to hear it!", 'codepress-admin-columns'),
579 'give_rating' => __(
580 'A quick rating or tweet helps us a lot.',
581 'codepress-admin-columns'
582 ),
583 'whats_wrong' => __('Let us know!', 'codepress-admin-columns'),
584 'checkdocs' => __(
585 'Tell us what feature you need on the WordPress.org support forum.',
586 'codepress-admin-columns'
587 ),
588 'check_pro' => __('See Pro features', 'codepress-admin-columns'),
589 'docs' => __('Docs', 'codepress-admin-columns'),
590 'forum' => __('Forum', 'codepress-admin-columns'),
591 'rate' => __('Rate', 'codepress-admin-columns'),
592 'tweet' => __('Tweet', 'codepress-admin-columns'),
593
594 ],
595 'global' => [
596 'search' => __('Search', 'codepress-admin-columns'),
597 'select' => __('Select', 'codepress-admin-columns'),
598 ],
599 'menu' => [
600 'favorites' => __('Favorites', 'codepress-admin-columns'),
601 ],
602 'settings' => [
603 'label' => [
604 'column' => __('Column', 'codepress-admin-columns'),
605 'column_info' => __('Column Info', 'codepress-admin-columns'),
606 'table_view_label' => __('Table View Label', 'codepress-admin-columns'),
607 'select_icon' => __('Select Icon', 'codepress-admin-columns'),
608 ],
609 ],
610 'editor' => [
611 'label' => [
612 'save' => __('Save Changes', 'codepress-admin-columns'),
613 'add_column' => __('Add Column', 'codepress-admin-columns'),
614 'add_columns' => __('Add Columns', 'codepress-admin-columns'),
615 'clear_columns' => __('Clear columns', 'codepress-admin-columns'),
616 'undo' => __('Undo', 'codepress-admin-columns'),
617 'load_default_columns' => __('Load default columns', 'codepress-admin-columns'),
618 'view' => __('View Table', 'codepress-admin-columns'),
619 ],
620 'sentence' => [
621 'columns_read_only' => __(
622 sprintf(
623 'This table view is %s and can therefore not be edited.',
624 sprintf(
625 '<strong>%s</strong>',
626 __('read only', 'codepress-admin-columns')
627 )
628 ),
629 'codepress-admin-columns'
630 ),
631 'column_no_duplicate' => __(
632 'Column %s could not be duplicated',
633 'codepress-admin-columns'
634 ),
635 'original_already_exists' => __(
636 'Original column already exists.',
637 'codepress-admin-columns'
638 ),
639 'show_default_columns' => __(
640 'The default columns will be shown on the list table when no columns are added.',
641 'codepress-admin-columns'
642 ),
643 'get_started' => __(
644 'Start by adding columns to your list table.',
645 'codepress-admin-columns'
646 ),
647 'documentation' => sprintf(
648 __('New to Admin Columns? Take a look at our %s', 'codepress-admin-columns'),
649 sprintf(
650 '<a target="_blank" href="%s">%s</a>',
651 AC\Type\Url\Documentation::create_with_path(
652 AC\Type\Url\Documentation::ARTICLE_GETTING_STARTED
653 ),
654 __('getting started guide', 'codepress-admin-columns')
655 )
656 ),
657 ],
658 ],
659 ])
660 );
661 }
662
663 private function get_favorite_table_screens(): TableScreenCollection
664 {
665 return $this->table_screen_repository->find_all_by_ids(
666 $this->favorite_repository->find_all(),
667 new SortByLabel()
668 );
669 }
670
671 private function encode_favorites(TableScreenCollection $collection): array
672 {
673 $keys = [];
674
675 foreach ($collection as $table_screen) {
676 $keys[] = (string)$table_screen->get_id();
677 }
678
679 return $keys;
680 }
681
682 public function get_menu_items(): array
683 {
684 $options = [];
685
686 foreach ($this->menu_items->all() as $item) {
687 $group = $item->get_group();
688 $group_name = $group->get_name();
689
690 if (! isset($options[$group_name])) {
691 $options[$group_name] = [
692 'title' => $group->get_label(),
693 'icon' => $group->has_icon() ? $group->get_icon() : '',
694 'options' => [],
695 ];
696 }
697
698 $options[$group_name]['options'][$item->get_key()] = $item->get_label();
699 }
700
701 return $options;
702 }
703
704 }
705