Completed
Push — master ( c16b11...420ea2 )
by Melih Berat
01:56
created

multilang::setDir()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 4
rs 10
c 0
b 0
f 0
1
<?php
2
namespace multilangPHP;
3
4
/**
5
 * multilangPHP - PHP multi language support library
6
 * NOTE: Requires PHP version 7.0 or later
7
 * @package multilangPHP
8
 * @author Melih Berat ŞANLI
9
 * @copyright 2019 Melih Berat ŞANLI
10
 * @version 2.0.1
11
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
12
 */
13
class multilang
14
{
15
    private $language = "tr";
16
    private $dir = "system/lang/";
17
    private $from = "php";
18
    private $definedExtension = [
19
        "php",
20
        "json"
21
    ];
22
23
    /**
24
     * Get the value of language
25
     *
26
     * @return string
27
     */ 
28
    public function getLanguage(): string
29
    {
30
        return $this->language;
31
    }
32
33
    /**
34
     * Set the value of language
35
     *
36
     * @param string $language
37
     * @return self
38
     */ 
39
    public function setLanguage(string $language): self
40
    {
41
        $this->language = $language;
42
        return $this;
43
    }
44
45
    /**
46
     * Get the value of dir
47
     *
48
     * @return string
49
     */ 
50
    public function getDir(): string
51
    {
52
        return $this->dir;
53
    }
54
55
    /**
56
     * Set the value of dir
57
     *
58
     * @param string $dir
59
     * @return self
60
     */ 
61
    public function setDir(string $dir): self
62
    {
63
        $this->dir = $dir;
64
        return $this;
65
    }
66
67
    /**
68
     * Get the value of from
69
     *
70
     * @return string
71
     */ 
72
    public function getFrom(): string
73
    {
74
        return $this->from;
75
    }
76
77
    /**
78
     * Set the value of from
79
     *
80
     * @param string $from
81
     * @return self
82
     */ 
83
    public function setFrom(string $from): self
84
    {
85
        if(!in_array($from, $this->definedExtension))
86
        {
87
            $usable = "";
88
            foreach($this->definedExtension as $tip) $usable .= sprintf(' "%s",', $tip);
89
            $usable = substr($usable, 0, -1);
90
            exit("MultilangPHP: You can only use the". $usable . ' parameters.');
0 ignored issues
show
Bug Best Practice introduced by
In this branch, the function will implicitly return null which is incompatible with the type-hinted return multilangPHP\multilang. Consider adding a return statement or allowing null as return value.

For hinted functions/methods where all return statements with the correct type are only reachable via conditions, ?null? gets implicitly returned which may be incompatible with the hinted type. Let?s take a look at an example:

interface ReturnsInt {
    public function returnsIntHinted(): int;
}

class MyClass implements ReturnsInt {
    public function returnsIntHinted(): int
    {
        if (foo()) {
            return 123;
        }
        // here: null is implicitly returned
    }
}
Loading history...
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
91
        }
92
        $this->from = $from;
93
        return $this;
94
    }
95
96
    /**
97
     * Get exact location of the language file
98
     *
99
     * @return string
100
     */
101
    public function getLangFile(): string
102
    {
103
        return sprintf("%s%s.%s", $this->getDir(), $this->getLanguage(), $this->getFrom());
104
    }
105
106
    /**
107
     * Control File Extension Function
108
     * 
109
     * if file extension correct; return true
110
     *
111
     * @param string $file
112
     * @param string $extension
113
     * @return boolean
114
     */
115
    public function controlFileExtention(string $file, string $extension = null): bool
116
    {
117
        if (!$extension) $extension = $this->getFrom();
118
        $fKontrol = explode(".", $file);
119
        if($fKontrol[count($fKontrol)-1] == $extension) return true;
120
        return false;
121
    }
122
123
    /**
124
     * Return language(s) in selected directory
125
     *
126
     * @param string $returnType
127
     * @return array|string
128
     */
129
    public function listAllLangFiles(string $returnType = "array")
130
    {
131
        if ($returnType == "array" || $returnType == "html")
132
        {
133
            $langPHP_array = array();
134
            $langPHP_html = '<div class="multilang">';
135
            $openDir = opendir($this->getDir());
136
            while (($file = readdir($openDir)) != FALSE ) {
0 ignored issues
show
Bug introduced by
It seems like $openDir can also be of type false; however, parameter $dir_handle of readdir() does only seem to accept resource, 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

136
            while (($file = readdir(/** @scrutinizer ignore-type */ $openDir)) != FALSE ) {
Loading history...
Bug Best Practice introduced by
It seems like you are loosely comparing $file = readdir($openDir) of type string to the boolean FALSE. If you are specifically checking for a non-empty string, consider using the more explicit !== '' instead.
Loading history...
137
                if ($file =='.' || $file == '..' || is_file($file) || !$this->controlFileExtention($file)) continue;
138
                if ($returnType == "array") $langPHP_array[basename($file, sprintf(".%s",$this->getFrom()))] = $file;
139
                if ($returnType == "html") $langPHP_html .= sprintf(' <a href="?lang=%s" title="language %s">%s</a> ', basename($file, sprintf('.%s', $this->getFrom())), basename($file, sprintf('.%s', $this->getFrom())), basename($file, sprintf('.%s', $this->getFrom())));
140
            }
141
            $langPHP_html .= '</div>';
142
            closedir($openDir);
0 ignored issues
show
Bug introduced by
It seems like $openDir can also be of type false; however, parameter $dir_handle of closedir() does only seem to accept resource, 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

142
            closedir(/** @scrutinizer ignore-type */ $openDir);
Loading history...
143
            return $returnType == "array" ? $langPHP_array : $langPHP_html;
144
        }
145
        exit("MultilangPHP: You can only use the 'array' and 'html' parameters on ".__METHOD__."()");
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
146
    }
147
148
    /**
149
     * If set From php, we are getting languages in php file
150
     *
151
     * @param string $called
152
     * @return string
153
     */
154
    public function callInPHP(string $called): string
155
    {
156
        $call = include($this->getLangFile());
157
        if (!is_array($call)) exit("MultilangPHP: Some have problem in language file, file is not returning array: ".__METHOD__."()");
0 ignored issues
show
Bug Best Practice introduced by
In this branch, the function will implicitly return null which is incompatible with the type-hinted return string. Consider adding a return statement or allowing null as return value.

For hinted functions/methods where all return statements with the correct type are only reachable via conditions, ?null? gets implicitly returned which may be incompatible with the hinted type. Let?s take a look at an example:

interface ReturnsInt {
    public function returnsIntHinted(): int;
}

class MyClass implements ReturnsInt {
    public function returnsIntHinted(): int
    {
        if (foo()) {
            return 123;
        }
        // here: null is implicitly returned
    }
}
Loading history...
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
158
        return $call[$called];
159
    }
160
161
    /**
162
     * If set $from json, we are getting languages in json file
163
     *
164
     * @param string $called
165
     * @return string
166
     */
167
    public function callInJSON(string $called): string
168
    {
169
        $call = file_get_contents($this->getLangFile());
170
        if (!$call) exit("MultilangPHP: JSON file not readable!");
0 ignored issues
show
Bug Best Practice introduced by
In this branch, the function will implicitly return null which is incompatible with the type-hinted return string. Consider adding a return statement or allowing null as return value.

For hinted functions/methods where all return statements with the correct type are only reachable via conditions, ?null? gets implicitly returned which may be incompatible with the hinted type. Let?s take a look at an example:

interface ReturnsInt {
    public function returnsIntHinted(): int;
}

class MyClass implements ReturnsInt {
    public function returnsIntHinted(): int
    {
        if (foo()) {
            return 123;
        }
        // here: null is implicitly returned
    }
}
Loading history...
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
171
        $decodeCall = json_decode($call, true);
172
        if (is_array($decodeCall) && !$decodeCall[$called]) $decodeCall = $decodeCall[0];
173
        return $decodeCall[$called] ? $decodeCall[$called] : exit(sprintf('multilangPHP: "%s" not found in %s file', $called, $this->getLangFile()));
0 ignored issues
show
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
174
    }
175
176
    /**
177
     * Call method
178
     *
179
     * @param string $value
180
     * @return string
181
     */
182
    public function call(string $value): string
183
    {
184
        if (!$value) exit("MultilangPHP: You have to use with a parameter on ".__METHOD__."()");
0 ignored issues
show
Bug Best Practice introduced by
In this branch, the function will implicitly return null which is incompatible with the type-hinted return string. Consider adding a return statement or allowing null as return value.

For hinted functions/methods where all return statements with the correct type are only reachable via conditions, ?null? gets implicitly returned which may be incompatible with the hinted type. Let?s take a look at an example:

interface ReturnsInt {
    public function returnsIntHinted(): int;
}

class MyClass implements ReturnsInt {
    public function returnsIntHinted(): int
    {
        if (foo()) {
            return 123;
        }
        // here: null is implicitly returned
    }
}
Loading history...
Best Practice introduced by
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
185
        return call_user_func(array($this, sprintf('callIn%s', strtoupper($this->getFrom()))), $value);
186
    }
187
}