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