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

src/helpers/CurrencyFilter.php (1 issue)

Labels
Severity

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

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
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