silverstripe-archive / silverstripe-mobile

Mobile support module for SilverStripe CMS
http://silverstripe.org/mobile/
BSD 3-Clause "New" or "Revised" License
36 stars 36 forks source link

Change is_iphone so that it doesn't detect iPad #21

Open bummzack opened 12 years ago

bummzack commented 12 years ago

I think the is_iphone method should be rewritten to:

return (preg_match('/(ipod;|iphone;)/i', $_SERVER['HTTP_USER_AGENT'])) ? true : false;

By adding the semicolons you're making sure that you match the "correct" part of the user-agent string (the user-agent string also contains iphone on an iPad somewhere, but by adding the semicolon ensures you capture the right part).

I've read the other issues/change requests regarding different templates for different devices and I support that idea. Since iPad and iPhone are quite different when it comes to screen-estate and browsing behavior, iPad should be treated separately or at least not considered to be an iPhone or a "mobile device" at all (hence this issue).

moveforward commented 12 years ago

+1. Kind of surprised me to see my site's mobile theme being served up to ipad.

moveforward commented 12 years ago

actually, the issue seems to be related to this line (around line 72 of MobileBrowserDetector.php):

case(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|pda|psp|treo)/i', $agent)):

iPad has 'Mobile' in the UA string so iPad is triggering is_mobile. Possible solution: case(preg_match('/(up.browser|up.link|mmp|symbian|smartphone|midp|wap|vodafone|o2|pocket|kindle|mobile|pda|psp|treo)/i', $agent) && (stripos($_SERVER['HTTP_USER_AGENT'], 'ipad') === false)):