XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
Mobile.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
3 
9 class Mobile
10 {
11 
16  var $ismobile = NULL;
17 
23  function &getInstance()
24  {
25  static $theInstance;
26  if(!isset($theInstance))
27  {
28  $theInstance = new Mobile();
29  }
30  return $theInstance;
31  }
32 
38  function isFromMobilePhone()
39  {
40  $oMobile = & Mobile::getInstance();
41  return $oMobile->_isFromMobilePhone();
42  }
43 
49  function _isFromMobilePhone()
50  {
51  if($this->ismobile !== NULL)
52  {
53  return $this->ismobile;
54  }
55  if(Mobile::isMobileEnabled() === false || Context::get('full_browse') || $_COOKIE["FullBrowse"])
56  {
57  return ($this->ismobile = false);
58  }
59 
60  $xe_web_path = Context::pathToUrl(_XE_PATH_);
61 
62  // default setting. if there is cookie for a device, XE do not have to check if it is mobile or not and it will enhance performace of the server.
63  $this->ismobile = FALSE;
64 
65  $m = Context::get('m');
66  if(strlen($m) == 1)
67  {
68  if($m == "1")
69  {
70  $this->ismobile = TRUE;
71  }
72  elseif($m == "0")
73  {
74  $this->ismobile = FALSE;
75  }
76  }
77  elseif(isset($_COOKIE['mobile']))
78  {
79  if($_COOKIE['user-agent'] == md5($_SERVER['HTTP_USER_AGENT']))
80  {
81  if($_COOKIE['mobile'] == 'true')
82  {
83  $this->ismobile = TRUE;
84  }
85  else
86  {
87  $this->ismobile = FALSE;
88  }
89  }
90  else
91  {
92  $this->ismobile = FALSE;
93  setcookie("mobile", FALSE);
94  setcookie("user-agent", FALSE);
95  if(!$this->isMobilePadCheckByAgent() && $this->isMobileCheckByAgent())
96  {
97  $this->ismobile = TRUE;
98  }
99  }
100  }
101  else
102  {
103  if($this->isMobilePadCheckByAgent())
104  {
105  $this->ismobile = FALSE;
106  }
107  else
108  {
109  if($this->isMobileCheckByAgent())
110  {
111  $this->ismobile = TRUE;
112  }
113  }
114  }
115 
116  if($this->ismobile !== NULL)
117  {
118  if($this->ismobile == TRUE)
119  {
120  if($_COOKIE['mobile'] != 'true')
121  {
122  $_COOKIE['mobile'] = 'true';
123  setcookie("mobile", 'true');
124  }
125  }
126  elseif($_COOKIE['mobile'] != 'false')
127  {
128  $_COOKIE['mobile'] = 'false';
129  setcookie("mobile", 'false');
130  }
131 
132  if($_COOKIE['user-agent'] != md5($_SERVER['HTTP_USER_AGENT']))
133  {
134  setcookie("user-agent", md5($_SERVER['HTTP_USER_AGENT']));
135  }
136  }
137 
138  return $this->ismobile;
139  }
140 
147  {
148  static $UACheck;
149  if(isset($UACheck))
150  {
151  return $UACheck;
152  }
153 
154  $oMobile = Mobile::getInstance();
155  $mobileAgent = array('iPod', 'iPhone', 'Android', 'BlackBerry', 'SymbianOS', 'Bada', 'Tizen', 'Kindle', 'Wii', 'SCH-', 'SPH-', 'CANU-', 'Windows Phone', 'Windows CE', 'POLARIS', 'Palm', 'Dorothy Browser', 'Mobile', 'Opera Mobi', 'Opera Mini', 'Minimo', 'AvantGo', 'NetFront', 'Nokia', 'LGPlayer', 'SonyEricsson', 'HTC');
156 
157  if($oMobile->isMobilePadCheckByAgent())
158  {
159  $UACheck = TRUE;
160  return TRUE;
161  }
162 
163  foreach($mobileAgent as $agent)
164  {
165  if(stripos($_SERVER['HTTP_USER_AGENT'], $agent) !== FALSE)
166  {
167  $UACheck = TRUE;
168  return TRUE;
169  }
170  }
171  $UACheck = FALSE;
172  return FALSE;
173  }
174 
181  {
182  static $UACheck;
183  if(isset($UACheck))
184  {
185  return $UACheck;
186  }
187  $padAgent = array('iPad', 'Android', 'webOS', 'hp-tablet', 'PlayBook');
188 
189  // Android with 'Mobile' string is not a tablet-like device, and 'Andoroid' without 'Mobile' string is a tablet-like device.
190  // $exceptionAgent[0] contains exception agents for all exceptions.
191  $exceptionAgent = array(0 => array('Opera Mini', 'Opera Mobi'), 'Android' => 'Mobile');
192 
193  foreach($padAgent as $agent)
194  {
195  if(strpos($_SERVER['HTTP_USER_AGENT'], $agent) !== FALSE)
196  {
197  if(!isset($exceptionAgent[$agent]))
198  {
199  $UACheck = TRUE;
200  return TRUE;
201  }
202  elseif(strpos($_SERVER['HTTP_USER_AGENT'], $exceptionAgent[$agent]) === FALSE)
203  {
204  // If the agent is the Android, that can be either tablet and mobile phone.
205  foreach($exceptionAgent[0] as $val)
206  {
207  if(strpos($_SERVER['HTTP_USER_AGENT'], $val) !== FALSE)
208  {
209  $UACheck = FALSE;
210  return FALSE;
211  }
212  }
213  $UACheck = TRUE;
214  return TRUE;
215  }
216  }
217  }
218 
219  $UACheck = FALSE;
220  return FALSE;
221  }
222 
230  {
231  $oMobile = Mobile::getInstance();
232  $oMobile->ismobile = $ismobile;
233  }
234 
235  function isMobileEnabled()
236  {
237  $db_info = Context::getDBInfo();
238  return ($db_info->use_mobile_view === 'Y');
239  }
240 }
241 ?>
setMobile($ismobile)
isMobileCheckByAgent()
isMobilePadCheckByAgent()
pathToUrl($path)
& getInstance()
_isFromMobilePhone()
isFromMobilePhone()
const _XE_PATH_
Definition: config.inc.php:49
isMobileEnabled()