Pman/Images.php
[Pman.Base] / Pman / I18N.php
1 <?php
2
3 /// provide language data!!!
4 // DEPRECIATED - moved to Pman_I18N
5 /**
6  * 
7  * 
8  */
9
10 require_once 'Pman/Core/I18n.php';
11 class Pman_I18N extends Pman_Core_I18n
12 {
13     
14     // these are the languages we support.
15     var $cfg = array(
16         'l' => array(
17             'en', 'zh_CN',   'zh_HK',  'zh_TW', 'th', 'ko', 'ja', 'ms', 
18             'id', // indonesian
19             'tl', // tagalog
20             'vi', //vietnamise
21             'hi', // hindi
22             'ta', // tamil
23             '**', // other
24         ),
25         'c' => array(
26              'AU', 'CN', 'HK', 'IN', 'ID', 'JP', 'MY', 'NZ', 'TW', 'SG', 'TH', 'KR', 'US', 'PH', 'VN','**'
27         ),
28         'm' => array(
29             'USD', 'HKD', 'GBP', 'CNY', 'SGD', 'JPY'
30         )
31     );
32     
33     
34      
35     
36     
37     function getAuth()
38     {
39         parent::getAuth(); // load company!
40         //return true;
41         $au = $this->getAuthUser();
42         //if (!$au) {
43         //    $this->jerr("Not authenticated", array('authFailure' => true));
44         //}
45         $this->authUser = $au;
46         
47         $opts = PEAR::getStaticProperty('Pman_I18N', 'options');
48         $opts = empty($opts)  ?  array() : $opts;
49         
50         
51         foreach($opts as $k=>$v) {
52             
53             if ($v == '*') {
54                 $this->cfg[$k] = $this->getDefaultCfg($k);
55                 continue;
56             }
57             $this->cfg[$k] = is_array($v) ? $v  : explode(',', $v);
58         }
59         
60         
61         
62         
63         return true;
64     }
65     // returns a list of all countries..
66     function getDefaultCfg($t) {
67         $ret = array();
68         switch ($t) {
69             case 'c':
70                 require_once 'I18Nv2/Country.php';
71                 
72                 $c = new I18Nv2_Country('en');
73                 $ret =  array_keys($c->codes);
74                 $ret[] = '**';
75                 break;
76             case 'l':
77                 require_once 'I18Nv2/Language.php';
78                 $c = new I18Nv2_Language('en');
79                 $ret =  array_keys($c->codes);
80                 $ret[] = '**';
81                 break;
82             case 'm':
83                 require_once 'I18Nv2/Currency.php';
84                 $c = new I18Nv2_Currency('en');
85                 $ret =  array_keys($c->codes);
86                 $ret[] = '**';
87                 break;
88         }
89         foreach ($ret as $k=>$v) {
90             $ret[$k] = strtoupper($v);
91         }
92         
93         
94         return $ret;
95     }
96     
97     
98     
99     function setSession($au)
100     {
101         $this->authUser = $au;
102         $lbits = implode('_', $this->findLang());
103         if (empty($_SESSION['Pman_I18N'])) {
104             $_SESSION['Pman_I18N']  = array();
105         }
106         
107         $_SESSION['Pman_I18N'][$lbits] = array(
108             'l' => $this->getList('l', $lbits),
109             'c' => $this->getList('c', $lbits),
110             'm' => $this->getList('m', $lbits),
111         );
112         
113         
114     }
115       
116     function getList($type, $inlang,$fi=false)
117     {
118         //$l = new I18Nv2_Language($inlang);
119         //$c= new I18Nv2_Country($inlang);
120         $filter = !$fi  ? false :  $this->loadFilter($type); // project specific languages..
121        // print_r($filter);
122         
123         $ret = array();
124         
125         
126         
127         
128         foreach($this->cfg[$type] as $k) {
129             if (is_array($filter) && !in_array($k, $filter)) {
130                 continue;
131             }
132              
133             $ret[] = array(
134                 'code'=>$k , 
135                 'title' => $this->translate($inlang, $type, $k)
136             );
137             continue;
138             
139         }
140         // sort it??
141         return $ret;
142         
143     }
144      
145     
146     function findLang() {
147          
148         $lang = !$this->authUser || empty($this->authUser->lang ) ? 'en' : $this->authUser->lang;
149         $lbits = explode('_', strtoupper($lang));
150         $lbits[0] = strtolower($lbits[0]);
151         require_once 'I18Nv2/Country.php';
152         require_once 'I18Nv2/Language.php';
153         $langs = new I18Nv2_Language('en');
154         $countries = new I18Nv2_Country('en');
155       //  print_r($langs);
156         //print_R($lbits);
157         if (!isset($langs->codes[strtolower($lbits[0])])) {
158             $this->jerr('invalid lang');
159         }
160         if (!empty($lbits[1]) &&  !isset($countries->codes[$lbits[1]])) {  
161             $this->jerr('invalid lang Country component');
162             
163         }
164         return $lbits;
165     }
166     
167     function get($s)
168     {
169         if (empty($s)) {
170             die('no type');
171         }
172         
173         $lbits = $this->findLang();
174          
175         
176         
177         
178         switch($s) {
179             case 'Lang': 
180                 $ret = $this->getList('l', $lbits[0],empty($_REQUEST['filter']) ? false : $_REQUEST['filter']);
181                 break;
182
183             case 'Country':
184                 $ret = $this->getList('c', $lbits[0],empty($_REQUEST['filter']) ? false : $_REQUEST['filter']);
185                 break;
186                 
187              case 'Currency':
188                 $ret = $this->getList('m', $lbits[0],empty($_REQUEST['filter']) ? false : $_REQUEST['filter']);
189                 break;
190             // part of parent!!!!
191             /*
192             case 'BuildDB':
193             // by admin only?!?
194                 //DB_DataObject::debugLevel(1);
195                 $this->buildDb('l');
196                 $this->buildDb('c');
197                 $this->buildDb('m');
198                 die("DONE!");
199                 break;
200             */      
201             default: 
202                 $this->jerr("ERROR");
203         }
204          
205         $this->jdata($ret);
206         exit;
207         
208     }
209     function loadFilter($type)
210     {
211         // this code only applies to Clipping module
212         if (!$this->authUser) {
213             return false;
214         }
215         
216         // this needs moving to it's own project
217         
218         if (!$this->hasModule('Clipping')) {
219             return false;
220         }
221         if ($type == 'm') {
222             return false;
223         }
224         
225         //DB_DataObject::debugLevel(1);
226         $q = DB_DataObject::factory('Projects');
227         
228         $c = DB_Dataobject::factory('Companies');
229         $c->get($this->authUser->company_id);
230         if ($c->comptype !='OWNER') {
231             $q->client_id = $this->authUser->company_id;
232         }
233         $q->selectAdd();
234         $col = ($type == 'l' ? 'languages' : 'countries');
235         $q->selectAdd('distinct(' . ($type == 'l' ? 'languages' : 'countries').') as dval');
236         $q->whereAdd("LENGTH($col) > 0");
237         $q->find();
238         $ret = array();
239         $ret['**'] = 1;
240         while ($q->fetch()) {
241             $bits = explode(',', $q->dval);
242             foreach($bits as $k) {
243                 $ret[$k] = true;
244             }
245         }
246         return array_keys($ret);
247         
248     }
249    
250      
251     function translateList($au, $type, $k)  
252     {
253         $ar = explode(',', $k);
254         $ret = array();
255         foreach($ar as $kk) {
256             $ret[] = $this->translate($au, $type, $kk);
257         }
258         return implode(', ', $ret);
259     }
260      /**
261      * translate
262      * usage :
263      * require_once 'Pman/I18N.php';
264      * $x = new Pman_I18N();
265      * $x->translate($this->authuser, 'c', 'US');
266      * @param au - auth User
267      * @param type = 'c' or 'l'
268      * @param k - key to translate
269      * 
270      */
271      
272     function translate($au, $type, $k) 
273     {
274       
275         static $cache;
276         if (empty($k)) {
277             return '??';
278         }
279         $lang = !$au || empty($au->lang ) ? 'en' : is_string($au) ? $au : $au->lang;
280         $lbits = explode('_', strtoupper($lang));
281         $lang = $lbits[0];
282         
283         if (!isset($cache[$lang])) {
284             require_once 'I18Nv2/Country.php';
285             require_once 'I18Nv2/Language.php';
286             require_once 'I18Nv2/Currency.php';
287             $cache[$lang] = array(
288                 'l' =>  new I18Nv2_Language($lang, 'UTF-8'),
289                 'c' => new I18Nv2_Country($lang, 'UTF-8'),
290                 'm' => new I18Nv2_Currency($lang, 'UTF-8')
291             );
292             //echo '<PRE>';print_r(array($lang, $cache[$lang]['c']));
293         }
294         if ($k == '**') {
295             return 'Other / Unknown';
296         }
297     
298         
299         if ($type == 'l') {
300             $tolang = explode('_', $k);
301          
302             $ret = $cache[$lang][$type]->getName($tolang[0]);
303             if (count($tolang) > 1) {
304                 $ret.= '('.$tolang[1].')'; 
305             }
306             return $ret;
307         }
308         $ret = $cache[$lang][$type]->getName($k);
309         //print_r(array($k, $ret));
310         return $ret;
311         
312         
313     }
314     
315      
316     
317 }