Subversion Repositories region

[/] [stable/] [1.0/] [classes/] [ezxISO3166.php] - Blame information for rev 4

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 xrow
<?php
2
class ezxISO3166
3
{
4
    var $address;
5
    function ezxISO3166( $address = null )
6
    {
7
        if ( !$address )
8 4 xrow
           $this->address = ezxISO3166::getRealIpAddr();
9 2 xrow
        else
10
           $this->address = $address;
11 4 xrow
    }
12
    function defautCountryCode()
13
    {
14
        $regionini = eZINI::instance( 'region.ini' );
15
        return strtoupper( $regionini->variable( 'Settings', 'DefaultCountryCode' ) );
16
    }
17
    function getRealIpAddr()
18
    {
19
        //check ip from share internet
20
        if ( !empty( $_SERVER['HTTP_CLIENT_IP'] ) )
21
        {
22
            $ip = $_SERVER['HTTP_CLIENT_IP'];
23
        }
24
        //to check ip is pass from proxy
25
        elseif ( !empty( $_SERVER['HTTP_X_FORWARDED_FOR'] ) )
26
        {
27
            $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
28
        }
29
        else
30
        {
31
            $ip = $_SERVER['REMOTE_ADDR'];
32
        }
33
        return $ip;
34 2 xrow
    }
35
    function getALLfromIP()
36
    {
37
        // this sprintf() wrapper is needed, because the PHP long is signed by default
38
        $ipnum = sprintf("%u", ip2long( $this->address ));
39
        $query = "SELECT cc, cn FROM ezx_i2c_ip NATURAL JOIN ezx_i2c_cc WHERE ${ipnum} BETWEEN start AND end";
40
        $db =& eZDB::instance();
41
        $result = $db->arrayQuery( $query );
42
        if ( isset( $result[0] )  )
43
            return $result[0];
44
    }
45
    function getCCfromIP()
46
    {
47
        $data = $this->getALLfromIP();
48
        if( isset( $data['cc'] ) )
49
            return $data['cc'];
50
        else
51
            return false;
52
    }
53
    function getCOUNTRYfromIP()
54
    {
55
        $data = $this->getALLfromIP();
56
        if( isset( $data['cn'] ) )
57
        {
58
            return $data['cn'];
59
        }
60
        else
61
            return false;
62
    }
63
    function getCCfromNAME( $name )
64
    {
65
        $ip2country = new ip2country( gethostbyname( $name ) );
66
        return $ip2country->getCCfromIP();
67
    }
68
    function getCOUNTRYfromNAME( $name )
69
    {
70
        $ip2country = new ip2country( gethostbyname( $name ) );
71
        return $ip2country->getCOUNTRYfromIP();
72
 
73
    }
74
    function getCountryCodeFromAccess( $accessname )
75
    {
76
        $list = split( '[_-]',  $accessname, 2 );
77
        return $list[0];
78
    }
79
    function getPrimaryLocales( $Code = null, $exceptCurrent = true )
80
    {
81
        $regionini = eZINI::instance( 'region.ini' );
82
        $list = split( '[_-]',  $Code, 2 );
83
        $regionini = eZINI::instance( 'region.ini' );
84
        $regions = $regionini->groups();
85
        $locales = array();
86
        foreach ( $regions as $key => $region )
87
        {
88
            $list2 = split( '[_-]',  $key, 2 );
89
            if ( !isset( $locales[$list2[1]] )  )
90
            {
91
                /* TODO $exceptCurrent
92
                if ( $exceptCurrent and ( $Code != $region['Siteaccess'] ) )
93
                {
94
 
95
                }
96
                elseif( $exceptCurrent === false )
97
                {
98
 
99
                }
100
                */
101
                $region['code'] = $list2[0] . '-' . $list2[1];
102
                if ( $region['code'] != '*-*' )
103
                {
104
                    $region['possible_languagecodes'] = array();
105
                    array_push( $region['possible_languagecodes'], $list2[0] . '-' . $list2[1] );
106
                    array_push( $region['possible_languagecodes'], $list2[0] );
107
                }
108
                else
109
                {
110
                    $region['possible_languagecodes'] = array();
111
                    array_push( $region['possible_languagecodes'], $region['Siteaccess'] );
112
 
113
                    $extralang = $regionini->variable( '*_*', 'AdditionalLanguageList' );
114
                    foreach ( $extralang  as $lang )
115
                    {
116
                        array_push( $region['possible_languagecodes'], $lang );
117
                    }
118
                }    
119
                $locales[$list2[1]] = $region;
120
            }
121
        }
122
        return $locales;
123
    }
124
    function getLanguagesFromLocalCode( $Code, $exceptCurrent = true )
125
    {
126
        $list = split( '[_-]',  $Code, 2 );
127
        $regionini = eZINI::instance( 'region.ini' );
128
        $regions = $regionini->groups();
129
        $languages = array();
130
        foreach ( $regions as $key => $region )
131
        {
132
            $list2 = split( '[_-]', $key, 2 );
133
            if ( $list[1] == $list2[1]  )
134
            {
135
                if ( $exceptCurrent and ( $Code != $region['Siteaccess'] ) )
136
                {
137
                    $languages[$region['Siteaccess']] = $region;
138
                }
139
                elseif( $exceptCurrent === false )
140
                {
141
                    $languages[$region['Siteaccess']] = $region;
142
                }
143
            }
144
 
145
        }
146
        return $languages;
147
    }
148
    function countries()
149
    {
150
        $regionini = eZINI::instance( 'region.ini' );
151
        $regions = $regionini->groups();
152
 
153
        $counties = array();
154
        foreach ( $regions as $key => $region )
155
        {
156
            $list = split( '[_-]',  $key, 2 );
157
            if ( isset( $list[1] ) )
158
                $counties[$list[1]] = $list[1];
159
        }
160
        return $counties;
161
    }
162
    function preferredCountry()
163
    {
164
        $ip = new ezxISO3166();
165 4 xrow
        $code = $ip->getCCfromIP();
166
        if( !$code )
167
            $code = ezxISO3166::defautCountryCode();
168 2 xrow
        $countries = ezxISO3166::countries();
169
        if ( in_array( $code, $countries ) )
170
            return $code;
171
        else if( $code )
172
            return true;
173
        else
174
            return false;
175
    }
176
}
177
?>