Completed
Push — master ( 5f948f...7c7cea )
by Aleksandr
02:44 queued 01:09
created

Checksum::formKeyPartials()   B

Complexity

Conditions 8
Paths 6

Size

Total Lines 21
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 21
rs 7.1428
cc 8
eloc 14
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
        } else {
23
            return null;
24
        }
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
        $realHash = static::calculate($array, $salt);
36
        return $realHash == $hash;
37
    }
38
39
    /**
40
     * @param $array
41
     * @return array
42
     */
43
    public static function formKeyPartials($array)
44
    {
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[] = join('=', [$model, is_numeric($key) ? $value : $key]);
52
                            break;
53
                        }
54
                    } else {
55
                        $result[] = join('=', [$model, is_numeric($key) ? $value : $key]);
56
                    }
57
                }
58
            }
59
        }
60
        $result = array_unique($result);
61
        sort($result);
62
        return $result;
63
    }
64
65
    /**
66
     * @param $array
67
     * @return string
68
     */
69
    public static function formKey($array)
70
    {
71
        $result = join('|', static::formKeyPartials($array));
72
        return $result;
73
    }
74
}