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 / Formatter / Collection / Separator.php
codepress-admin-columns / classes / Formatter / Collection Last commit date
Implode.php 2 days ago LocalizeSeparator.php 2 days ago Separator.php 2 days ago
Separator.php
124 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Formatter\Collection;
6
7 use AC\CollectionFormatter;
8 use AC\Setting\ComponentFactory\Separator as Setting;
9 use AC\Setting\Config;
10 use AC\Type\Value;
11 use AC\Type\ValueCollection;
12
13 class Separator implements CollectionFormatter
14 {
15 private string $separator;
16
17 private int $limit;
18
19 public function __construct(?string $separator = null, ?int $limit = null)
20 {
21 $this->separator = $separator ?? self::get_separator();
22 $this->limit = $limit ?? 0;
23 }
24
25 // TODO use create_from_settings, which solves some leaking and DRY issue
26 public static function create_from_config(Config $config, int $limit = 20): self
27 {
28 return new self(
29 self::get_separator($config->get('separator', ', ')),
30 (int)$config->get('number_of_items', $limit)
31 );
32 }
33
34 public static function create_from_settings(
35 Config $config,
36 string $separator_key,
37 string $number_of_items_key
38 ): self {
39 return new self(
40 self::get_separator($config->get($separator_key)),
41 $config->has($number_of_items_key)
42 ? (int)$config->get($number_of_items_key)
43 : null
44 );
45 }
46
47 private static function get_separator(?string $setting = null): string
48 {
49 switch ($setting) {
50 case Setting::WHITE_SPACE:
51 return ' ';
52 case Setting::NEW_LINE:
53 return '<br>';
54 case Setting::HORIZONTAL_RULE:
55 return '<hr>';
56 case Setting::NONE:
57 return '';
58 case Setting::COMMA:
59 return ', ';
60 }
61
62 return self::get_separator(Setting::COMMA);
63 }
64
65 public function format(ValueCollection $collection): Value
66 {
67 $values = [];
68
69 foreach ($collection as $item) {
70 $value = (string)$item;
71
72 if ('' === $value) {
73 continue;
74 }
75
76 $values[] = $value;
77 }
78
79 return new Value(
80 $collection->get_id(),
81 $this->implode($values, $this->limit, $this->separator)
82 );
83 }
84
85 public function implode(array $array, int $limit = 10, string $glue = ', '): string
86 {
87 if ($limit <= 0 || count($array) <= $limit) {
88 return implode($glue, $array);
89 }
90
91 $first_set = array_slice($array, 0, $limit);
92 $last_set = array_slice($array, $limit);
93
94 ob_start();
95
96 if ($first_set) {
97 $first = sprintf('<span class="ac-show-more__part -first">%s</span>', implode($glue, $first_set));
98
99 $more = $last_set
100 ? sprintf(
101 '<span class="ac-show-more__part -more">%s%s</span>',
102 $glue,
103 implode($glue, $last_set)
104 )
105 : '';
106
107 $content = sprintf('<span class="ac-show-more__content">%s%s</span>', $first, $more);
108
109 $toggler = $last_set
110 ? sprintf(
111 '<span class="ac-show-more__divider">|</span><a class="ac-show-more__toggle" data-show-more-toggle data-more="%1$s" data-less="%2$s">%1$s</a>',
112 sprintf(__('%s more', 'codepress-admin-columns'), count($last_set)),
113 strtolower(__('Hide', 'codepress-admin-columns'))
114 )
115 : '';
116
117 echo sprintf('<span class="ac-show-more">%s</span>', $content . $toggler);
118 }
119
120 return (string)ob_get_clean();
121 }
122
123 }
124