Completed
Push — master ( 8bd3f3...c2bc12 )
by Dmitry
04:57
created

CurrencyFilter   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 32
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 2
lcom 0
cbo 4
dl 0
loc 32
ccs 0
cts 13
cp 0
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addSymbolAndFilter() 0 8 1
A getUsedCurrencies() 0 10 1
1
<?php
2
/**
3
 * Finance module for HiPanel
4
 *
5
 * @link      https://github.com/hiqdev/hipanel-module-finance
6
 * @package   hipanel-module-finance
7
 * @license   BSD-3-Clause
8
 * @copyright Copyright (c) 2015-2019, HiQDev (http://hiqdev.com/)
9
 */
10
11
namespace hipanel\modules\finance\helpers;
12
13
use hipanel\helpers\ArrayHelper;
14
use hipanel\helpers\StringHelper;
15
use hipanel\modules\finance\models\Bill;
16
use Yii;
17
18
/**
19
 * Class CurrencyFilter can be used to filter currencies array in finance module
20
 */
21
class CurrencyFilter
22
{
23
    /**
24
     * Adds currency symbols to each of element and filters it
25
     * @param string[] $currencies Need to filter currencies list
26
     * @return string[] Filtered currencies list with symbols
27
     */
28
    public static function addSymbolAndFilter(array $currencies): array
29
    {
30
        $currencies = array_combine(array_keys($currencies), array_map(function (string $k) {
31
            return StringHelper::getCurrencySymbol($k);
32
        }, array_keys($currencies)));
33
34
        return static::getUsedCurrencies($currencies);
0 ignored issues
show
Bug introduced by
Since getUsedCurrencies() is declared private, calling it with static will lead to errors in possible sub-classes. You can either use self, or increase the visibility of getUsedCurrencies() to at least protected.

Let’s assume you have a class which uses late-static binding:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
}

public static function getSomeVariable()
{
    return static::getTemperature();
}

}

The code above will run fine in your PHP runtime. However, if you now create a sub-class and call the getSomeVariable() on that sub-class, you will receive a runtime error:

class YourSubClass extends YourClass {
      private static function getTemperature() {
        return "-182 °C";
    }
}

print YourSubClass::getSomeVariable(); // Will cause an access error.

In the case above, it makes sense to update SomeClass to use self instead:

class YourClass
{
    private static function getTemperature() {
        return "3422 °C";
    }

    public static function getSomeVariable()
    {
        return self::getTemperature();
    }
}
Loading history...
35
    }
36
37
    /**
38
     * Filters input array of currencies
39
     * @param string[] $currencies
40
     * @return string[]
41
     */
42
    private static function getUsedCurrencies(array $currencies): array
43
    {
44
        $filterCurrencies = Yii::$app->cache->getOrSet([__METHOD__, Yii::$app->user->id], function () {
45
            return ArrayHelper::getColumn(Bill::perform('get-used-currencies', [], ['batch' => true]), 'name');
46
        }, 3600);
47
48
        return array_filter($currencies, function (string $cur) use ($filterCurrencies) {
49
            return in_array($cur, $filterCurrencies);
50
        }, ARRAY_FILTER_USE_KEY);
51
    }
52
}
53