Completed
Push — master ( 7c7cea...ce111c )
by Aleksandr
01:40
created

Checksum::formKeyPartials()   B

Complexity

Conditions 8
Paths 6

Size

Total Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 22
rs 8.4444
c 0
b 0
f 0
cc 8
nc 6
nop 1
1
<?php
2
3
4
namespace carono\checksum;
5
6
/**
7
 * Class Checksum
8
 *
9
 * @package app\helpers
10
 */
11
class Checksum
12
{
13
    /**
14
     * @param $array
15
     * @param null $salt
16
     * @return string
17
     */
18
    public static function calculate($array, $salt = null)
19
    {
20
        if ($key = static::formKey($array)) {
21
            return hash('sha256', $key . $salt);
22
        }
23
24
        return null;
25
    }
26
27
    /**
28
     * @param $array
29
     * @param $hash
30
     * @param null $salt
31
     * @return bool
32
     */
33
    public static function validate($array, $hash, $salt = null)
34
    {
35
        return static::calculate($array, $salt) === $hash;
36
    }
37
38
    /**
39
     * @param $array
40
     * @return array
41
     */
42
    public static function formKeyPartials($array)
43
    {
44
        $array = static::prepareData($array);
45
        $result = [];
46
        foreach ((array)$array as $model => $values) {
47
            if (is_array($values)) {
48
                foreach ($values as $key => $value) {
49
                    if (is_array($value)) {
50
                        foreach ($value as $subKey => $subValue) {
51
                            $result[] = implode('=', [$model, is_numeric($key) ? $value : $key]);
52
                            break;
53
                        }
54
                    } else {
55
                        $result[] = implode('=', [$model, is_numeric($key) ? $value : $key]);
56
                    }
57
                }
58
            }
59
        }
60
        $result = array_unique($result);
61
        sort($result);
62
        return $result;
63
    }
64
65
    protected static function prepareData($array)
66
    {
67
        $array = array_filter($array ?: [], 'is_array');
68
69
        return $array;
70
    }
71
72
    /**
73
     * @param $array
74
     * @return string
75
     */
76
    public static function formKey($array)
77
    {
78
        return implode('|', static::formKeyPartials($array));
79
    }
80
}