Completed
Pull Request — master (#3)
by Denis
01:34
created

GridViewHelper::columnTitle()   A

Complexity

Conditions 4
Paths 2

Size

Total Lines 24

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
nc 2
nop 1
dl 0
loc 24
rs 9.536
c 0
b 0
f 0
1
<?php
2
3
namespace Woo\GridView;
4
5
use Woo\GridView\Columns\Actions\DeleteAction;
6
use Woo\GridView\Columns\Actions\EditAction;
7
use Woo\GridView\Columns\Actions\ShowAction;
8
use Woo\GridView\Columns\ActionsColumn;
9
use Woo\GridView\Columns\AttributeColumn;
10
use Woo\GridView\Columns\BladeColumn;
11
use Woo\GridView\Columns\CallbackColumn;
12
use Woo\GridView\Columns\ViewColumn;
13
use Woo\GridView\Filters\DropdownFilter;
14
use Woo\GridView\Filters\TextFilter;
15
use Woo\GridView\Formatters\EmailFormatter;
16
use Woo\GridView\Formatters\ImageFormatter;
17
use Woo\GridView\Formatters\TextFormatter;
18
use Woo\GridView\Formatters\UrlFormatter;
19
use Woo\GridView\Renderers\DefaultRenderer;
20
21
class GridViewHelper
22
{
23
    /**
24
     * A list of grid aliases
25
     * @var array
26
     */
27
    private static $aliases = [
28
        'column' => [
29
            'attribute' => AttributeColumn::class,
30
            'raw' => CallbackColumn::class,
31
            'callback' => CallbackColumn::class,
32
            'actions' => ActionsColumn::class,
33
            'view' => ViewColumn::class,
34
        ],
35
        'formatter' => [
36
            'email' => EmailFormatter::class,
37
            'image' => ImageFormatter::class,
38
            'text' => TextFormatter::class,
39
            'url' => UrlFormatter::class,
40
        ],
41
        'filter' => [
42
            'text' => TextFilter::class,
43
            'dropdown' => DropdownFilter::class,
44
        ],
45
        'renderer' => [
46
            'default' => DefaultRenderer::class,
47
        ],
48
        'action' => [
49
            'delete' => DeleteAction::class,
50
            'update' => EditAction::class,
51
            'edit' => EditAction::class,
52
            'show' => ShowAction::class,
53
            'view' => ShowAction::class,
54
        ]
55
    ];
56
57
    private function __construct() {}
58
59
    /**
60
     * Useful in case you want to register a new alias for your project
61
     * @param string $context
62
     * @param string $alias
63
     * @param string $aliasTo
64
     */
65
    public static function registerAlias(string $context, string $alias, string $aliasTo)
66
    {
67
        self::$aliases[$context][$alias] = $aliasTo;
68
    }
69
70
    /**
71
     * Allows to resolve class name by its alias
72
     * @param string $context
73
     * @param string $alias
74
     * @return mixed
75
     */
76
    public static function resolveAlias(string $context, string $alias)
77
    {
78
        return self::$aliases[$context][$alias] ?? $alias;
79
    }
80
81
    /**
82
     * Allows to convert options array to html string
83
     * @param array $htmlOptions
84
     * @param array $context - context is variables, which are allowed to use when property value calculated dynamically
85
     * @return string
86
     */
87
    public static function htmlOptionsToString(array $htmlOptions, array $context = []) : string
88
    {
89
        if (empty($htmlOptions)) {
90
            return '';
91
        }
92
93
        $out = [];
94
95
        foreach ($htmlOptions as $k => $v) {
96
97
            if ($v instanceof \Closure) {
98
                $v = call_user_func_array($v, $context);
99
            }
100
101
            $out[] = htmlentities($k) . '="' . htmlentities($v, ENT_COMPAT) . '"';
102
        }
103
104
        return implode(' ', $out);
105
    }
106
107
    /**
108
     * Allows to make column title by it key or attribute name
109
     * @param string|int $key
110
     * @return string
111
     */
112
    public static function columnTitle($key) : string
113
    {
114
        if (is_numeric($key)) {
115
            return 'Column';
116
        }
117
118
        return ucwords(
119
            trim(
120
                preg_replace_callback(
121
                    '/([A-Z]|_|\.)/',
122
                    function($word) {
123
                        $word = $word[0];
124
125
                        if ($word == '_' || $word == '.') {
126
                            return ' ';
127
                        }
128
129
                        return ' ' . strtolower($word);
130
                    },
131
                    $key
132
                )
133
            )
134
        );
135
    }
136
137
    /**
138
     * Helper for internal purposes
139
     * @param $id
140
     * @param $component
141
     * @return string
142
     */
143
    public static function gridIdFormatter($id, $component)
144
    {
145
        if ($id == 0) {
146
            return $component;
147
        }
148
149
        return 'grid[' . $id . '][' . $component . ']';
150
    }
151
}