Issues (8)

src/Calculate/Calculate.php (3 issues)

1
<?php
2
3
namespace CConverter\Calculate;
4
5
use CConverter\Cache\CacheFile;
6
7
class Calculate implements CalculateInterface
8
{
9
    /**
10
     * @var contains fixer.io api key string
11
     */
12
    protected $api_key;
13
14
    /**
15
     * @const contains fixer.io API URL
16
     */
17
    const API_URL = "http://data.fixer.io/api/latest";
18
19
    /**
20
     * get api key
21
     *
22
     * @param  string $key
23
     * @return bool
24
     */
25
    public function __construct($key)
26
    {
27
            $this->api_key = $key;
28
29
            return true;
30
    }
31
32
    /**
33
     * change or not float decimals
34
     *
35
     * @param  float $calc
36
     * @param  int   $short
37
     * @return float
38
     */
39
    public static function roundValue($calc, $short)
40
    {
41
            if($short){ $number = 2; }else{ $number = 5; }
42
            $output = round($calc, $number);
43
44
            return $output;
45
    }
46
47
    /**
48
     * currency conversion, cache check and fixer.io api connection
49
     *
50
     * @param  string|array   $getFrom
51
     * @param  string|array   $getTo
52
     * @param  float          $amount
53
     * @param  bool|int       $short
54
     * @param  bool           $isCache
55
     * @param  int   	      $cacheTime
56
     * @return string|array
57
     */
58
    public function getValues($getFrom, $getTo, $amount, $short, $isCache, $cacheTime)
59
    {
60
        if($isCache && CacheFile::isCacheDir()){
61
            if(CacheFile::isFile()){
62
                $file = CacheFile::getFileName();
63
                if(CacheFile::isCurrent($file)){
64
                    $data = CacheFile::getCache($file);
65
                }else{
66
                    $data = file_get_contents(self::API_URL."?access_key=".$this->api_key);
67
                    CacheFile::setNewCacheFile($file, $data, $cacheTime);
68
                }
69
            }else{
70
                $data = file_get_contents(self::API_URL."?access_key=".$this->api_key);
71
                CacheFile::setNewCacheFile(false, $data, $cacheTime);
72
            }
73
        }else{
74
            $data = file_get_contents(self::API_URL."?access_key=".$this->api_key);
75
        }
76
        $data = json_decode($data);
77
78
        if($this->validateErrors($data)){
79
            if(is_array($getFrom) || is_array($getTo)){
80
                $newArray = array();
81
82
                if(is_array($getFrom)){
83
                    if(is_array($getTo)){
84
                        foreach($getFrom as $currency){
85
                            $getA = $data->rates->$currency;
86
                            foreach($getTo as $currency2){
87
                                $getB = $data->rates->$currency2;
88
                                $calc = Calculate::roundValue(($amount * $getB)/$getA, $short);
0 ignored issues
show
It seems like $short can also be of type boolean; however, parameter $short of CConverter\Calculate\Calculate::roundValue() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

88
                                $calc = Calculate::roundValue(($amount * $getB)/$getA, /** @scrutinizer ignore-type */ $short);
Loading history...
89
                                array_push($newArray, array($currency, array($currency2 => $calc)));
90
                            }
91
                        }
92
                    }else{
93
                        foreach($getFrom as $currency){
94
                            $getA = $data->rates->$currency;
95
                            $getB = $data->rates->$getTo;
96
                            $calc = Calculate::roundValue(($amount * $getB)/$getA, $short);
97
                            array_push($newArray, array($currency, array($getTo => $calc)));
98
                        }
99
                    }
100
                }else{
101
                    foreach($getTo as $currency){
102
                        $getA = $data->rates->$getFrom;
103
                        $getB = $data->rates->$currency;
104
                        $calc = Calculate::roundValue(($amount * $getB)/$getA, $short);
105
                        array_push($newArray, array($getFrom, array($currency => $calc)));
106
                    }
107
                }
108
                $output = $newArray;
109
            }else{
110
                $getA = $data->rates->$getFrom;
111
                $getB = $data->rates->$getTo;
112
113
                $output = Calculate::roundValue(($amount * $getB)/$getA, $short);
114
            }
115
        }else{
116
            $output = false;
117
        }
118
        
119
        return $output;
120
    }
121
122
    /**
123
     * validate errors in conncection with fixer.io api
124
     *
125
     * @param  string|array $data
126
     * @return bool
127
     * @throws \InvalidArgumentException
128
     */
129
    public function validateErrors($data)
130
    {
131
        if(!$data->success){
0 ignored issues
show
The property success does not exist on string.
Loading history...
132
            $getErrorCode = $data->error->code;
0 ignored issues
show
The property error does not exist on string.
Loading history...
133
            $getErrorInfo = $data->error->info;
134
            throw new \InvalidArgumentException("[$getErrorCode] $getErrorInfo");
135
        }
136
        return true;
137
    }
138
}
139