aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--admin/include/themes.class.php25
-rw-r--r--admin/themes/default/template/themes_installed.tpl4
-rw-r--r--include/common.inc.php24
-rw-r--r--include/mdetect.php1000
-rw-r--r--language/en_UK/admin.lang.php2
-rw-r--r--language/fr_FR/admin.lang.php2
6 files changed, 1053 insertions, 4 deletions
diff --git a/admin/include/themes.class.php b/admin/include/themes.class.php
index b30c25add..505785b73 100644
--- a/admin/include/themes.class.php
+++ b/admin/include/themes.class.php
@@ -48,6 +48,8 @@ class themes
*/
function perform_action($action, $theme_id)
{
+ global $conf;
+
if (isset($this->db_themes_by_id[$theme_id]))
{
$crt_db_theme = $this->db_themes_by_id[$theme_id];
@@ -86,6 +88,12 @@ class themes
break;
}
+ if ($this->fs_themes[$theme_id]['mobile'] and !empty($conf['mobile_theme']))
+ {
+ array_push($errors, l10n('You can activate only one mobile theme.'));
+ break;
+ }
+
if (file_exists($file_to_include))
{
include($file_to_include);
@@ -105,6 +113,11 @@ INSERT INTO '.THEMES_TABLE.'
\''.$this->fs_themes[$theme_id]['name'].'\')
;';
pwg_query($query);
+
+ if ($this->fs_themes[$theme_id]['mobile'])
+ {
+ conf_update_param('mobile_theme', $theme_id);
+ }
}
break;
@@ -164,6 +177,11 @@ DELETE
WHERE id= \''.$theme_id.'\'
;';
pwg_query($query);
+
+ if ($this->fs_themes[$theme_id]['mobile'])
+ {
+ conf_update_param('mobile_theme', '');
+ }
break;
case 'delete':
@@ -325,6 +343,7 @@ SELECT
'uri' => '',
'description' => '',
'author' => '',
+ 'mobile' => false,
);
$theme_data = implode( '', file($path.'/themeconf.inc.php') );
@@ -365,10 +384,14 @@ SELECT
{
$theme['parent'] = $val[1];
}
- if (preg_match('/["\']activable["\'].*?(true|false)/', $theme_data, $val))
+ if (preg_match('/["\']activable["\'].*?(true|false)/i', $theme_data, $val))
{
$theme['activable'] = get_boolean($val[1]);
}
+ if (preg_match('/["\']mobile["\'].*?(true|false)/i', $theme_data, $val))
+ {
+ $theme['mobile'] = get_boolean($val[1]);
+ }
// screenshot
$screenshot_path = $path.'/screenshot.png';
diff --git a/admin/themes/default/template/themes_installed.tpl b/admin/themes/default/template/themes_installed.tpl
index f591e14f1..57df78a79 100644
--- a/admin/themes/default/template/themes_installed.tpl
+++ b/admin/themes/default/template/themes_installed.tpl
@@ -17,7 +17,7 @@ jQuery(document).ready(function() {
<div class="themeBoxes">
{foreach from=$active_themes item=theme}
<div class="themeBox{if $theme.is_default} themeDefault{/if}">
- <div class="themeName">{$theme.name}{if $theme.is_default} <em>({'default'|@translate})</em>{/if}</div>
+ <div class="themeName">{$theme.name}{if $theme.is_default} <em>({'default'|@translate})</em>{/if} {if $theme.mobile} <em>({'mobile'|@translate})</em>{/if}</div>
<div class="themeShot"><a href="{$theme.screenshot}" class="preview-box" title="{$theme.name}"><img src="{$theme.screenshot}" alt=""></a></div>
<div class="themeActions">
<div>
@@ -47,7 +47,7 @@ jQuery(document).ready(function() {
<div class="themeBoxes">
{foreach from=$inactive_themes item=theme}
<div class="themeBox">
- <div class="themeName">{$theme.name}</div>
+ <div class="themeName">{$theme.name}{if $theme.mobile} <em>({'mobile'|@translate})</em>{/if}</div>
<div class="themeShot"><a href="{$theme.screenshot}" class="preview-box" title="{$theme.name}"><img src="{$theme.screenshot}" alt=""></a></div>
<div class="themeActions">
<div>
diff --git a/include/common.inc.php b/include/common.inc.php
index 73d2dadb9..158dbf1ef 100644
--- a/include/common.inc.php
+++ b/include/common.inc.php
@@ -192,7 +192,29 @@ if (defined('IN_ADMIN') and IN_ADMIN )
}
else
{ // Classic template
- $template = new Template(PHPWG_ROOT_PATH.'themes', $user['theme'] );
+ $theme = $user['theme'];
+
+ if (!isset($_SESSION['is_mobile']))
+ {
+ include_once(PHPWG_ROOT_PATH.'include/mdetect.php');
+ $uagent_obj = new uagent_info();
+ if ($_SESSION['is_mobile'] = $uagent_obj->DetectMobileLong())
+ {
+ $_SESSION['use_mobile_theme'] = !empty($conf['mobile_theme']);
+ }
+ }
+ if ($_SESSION['is_mobile'])
+ {
+ if (isset($_REQUEST['mobile']))
+ {
+ $_SESSION['use_mobile_theme'] = get_boolean($_REQUEST['mobile']);
+ }
+ if ($_SESSION['use_mobile_theme'])
+ {
+ $theme = $conf['mobile_theme'];
+ }
+ }
+ $template = new Template(PHPWG_ROOT_PATH.'themes', $theme );
}
if ( !isset($conf['no_photo_yet']) )
diff --git a/include/mdetect.php b/include/mdetect.php
new file mode 100644
index 000000000..a3a48104d
--- /dev/null
+++ b/include/mdetect.php
@@ -0,0 +1,1000 @@
+<?php
+
+/* *******************************************
+// Copyright 2010-2012, Anthony Hand
+//
+// File version date: January 21, 2012
+// Update:
+// - Added the constructor method per new features in PHP 5.0: __construct().
+// - Moved Windows Phone 7 to the iPhone Tier. WP7.5's IE 9-based browser is good enough now.
+// - Added a new variable for 2 versions of the new BlackBerry Bold Touch (9900 and 9930): deviceBBBoldTouch.
+// - Updated DetectBlackBerryTouch() to support the 2 versions of the new BlackBerry Bold Touch (9900 and 9930).
+// - Updated DetectKindle() to focus on eInk devices only. The Kindle Fire should be detected as a regular Android device.
+//
+// File version date: August 22, 2011
+// Update:
+// - Updated DetectAndroidTablet() to fix a bug introduced in the last fix! The true/false returns were mixed up.
+//
+// File version date: August 16, 2011
+// Update:
+// - Updated DetectAndroidTablet() to exclude Opera Mini, which was falsely reporting as running on a tablet device when on a phone.
+//
+// File version date: August 7, 2011
+// Update:
+// - The Opera for Android browser doesn't follow Google's recommended useragent string guidelines, so some fixes were needed.
+// - Updated DetectAndroidPhone() and DetectAndroidTablet() to properly detect devices running Opera Mobile.
+// - Created 2 new methods: DetectOperaAndroidPhone() and DetectOperaAndroidTablet().
+// - Updated DetectTierIphone(). Removed the call to DetectMaemoTablet(), an obsolete mobile OS.
+//
+//
+// LICENSE INFORMATION
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+// http://www.apache.org/licenses/LICENSE-2.0
+// Unless required by applicable law or agreed to in writing,
+// software distributed under the License is distributed on an
+// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
+// either express or implied. See the License for the specific
+// language governing permissions and limitations under the License.
+//
+//
+// ABOUT THIS PROJECT
+// Project Owner: Anthony Hand
+// Email: anthony.hand@gmail.com
+// Web Site: http://www.mobileesp.com
+// Source Files: http://code.google.com/p/mobileesp/
+//
+// Versions of this code are available for:
+// PHP, JavaScript, Java, ASP.NET (C#), and Ruby
+//
+// *******************************************
+*/
+
+
+
+//**************************
+// The uagent_info class encapsulates information about
+// a browser's connection to your web site.
+// You can use it to find out whether the browser asking for
+// your site's content is probably running on a mobile device.
+// The methods were written so you can be as granular as you want.
+// For example, enquiring whether it's as specific as an iPod Touch or
+// as general as a smartphone class device.
+// The object's methods return 1 for true, or 0 for false.
+class uagent_info
+{
+ var $useragent = "";
+ var $httpaccept = "";
+
+ //standardized values for true and false.
+ var $true = 1;
+ var $false = 0;
+
+ //Let's store values for quickly accessing the same info multiple times.
+ var $isIphone = 0; //Stores whether the device is an iPhone or iPod Touch.
+ var $isAndroidPhone = 0; //Stores whether the device is a (small-ish) Android phone or media player.
+ var $isTierTablet = 0; //Stores whether is the Tablet (HTML5-capable, larger screen) tier of devices.
+ var $isTierIphone = 0; //Stores whether is the iPhone tier of devices.
+ var $isTierRichCss = 0; //Stores whether the device can probably support Rich CSS, but JavaScript support is not assumed. (e.g., newer BlackBerry, Windows Mobile)
+ var $isTierGenericMobile = 0; //Stores whether it is another mobile device, which cannot be assumed to support CSS or JS (eg, older BlackBerry, RAZR)
+
+ //Initialize some initial smartphone string variables.
+ var $engineWebKit = 'webkit';
+ var $deviceIphone = 'iphone';
+ var $deviceIpod = 'ipod';
+ var $deviceIpad = 'ipad';
+ var $deviceMacPpc = 'macintosh'; //Used for disambiguation
+
+ var $deviceAndroid = 'android';
+ var $deviceGoogleTV = 'googletv';
+ var $deviceXoom = 'xoom'; //Motorola Xoom
+ var $deviceHtcFlyer = 'htc_flyer'; //HTC Flyer
+
+ var $deviceNuvifone = 'nuvifone'; //Garmin Nuvifone
+
+ var $deviceSymbian = 'symbian';
+ var $deviceS60 = 'series60';
+ var $deviceS70 = 'series70';
+ var $deviceS80 = 'series80';
+ var $deviceS90 = 'series90';
+
+ var $deviceWinPhone7 = 'windows phone os 7';
+ var $deviceWinMob = 'windows ce';
+ var $deviceWindows = 'windows';
+ var $deviceIeMob = 'iemobile';
+ var $devicePpc = 'ppc'; //Stands for PocketPC
+ var $enginePie = 'wm5 pie'; //An old Windows Mobile
+
+ var $deviceBB = 'blackberry';
+ var $vndRIM = 'vnd.rim'; //Detectable when BB devices emulate IE or Firefox
+ var $deviceBBStorm = 'blackberry95'; //Storm 1 and 2
+ var $deviceBBBold = 'blackberry97'; //Bold 97x0 (non-touch)
+ var $deviceBBBoldTouch = 'blackberry 99'; //Bold 99x0 (touchscreen)
+ var $deviceBBTour = 'blackberry96'; //Tour
+ var $deviceBBCurve = 'blackberry89'; //Curve2
+ var $deviceBBTorch = 'blackberry 98'; //Torch
+ var $deviceBBPlaybook = 'playbook'; //PlayBook tablet
+
+ var $devicePalm = 'palm';
+ var $deviceWebOS = 'webos'; //For Palm's line of WebOS devices
+ var $deviceWebOShp = 'hpwos'; //For HP's line of WebOS devices
+
+ var $engineBlazer = 'blazer'; //Old Palm browser
+ var $engineXiino = 'xiino'; //Another old Palm
+
+ var $deviceKindle = 'kindle'; //Amazon Kindle, eInk one.
+
+ //Initialize variables for mobile-specific content.
+ var $vndwap = 'vnd.wap';
+ var $wml = 'wml';
+
+ //Initialize variables for other random devices and mobile browsers.
+ var $deviceTablet = 'tablet'; //Generic term for slate and tablet devices
+ var $deviceBrew = 'brew';
+ var $deviceDanger = 'danger';
+ var $deviceHiptop = 'hiptop';
+ var $devicePlaystation = 'playstation';
+ var $deviceNintendoDs = 'nitro';
+ var $deviceNintendo = 'nintendo';
+ var $deviceWii = 'wii';
+ var $deviceXbox = 'xbox';
+ var $deviceArchos = 'archos';
+
+ var $engineOpera = 'opera'; //Popular browser
+ var $engineNetfront = 'netfront'; //Common embedded OS browser
+ var $engineUpBrowser = 'up.browser'; //common on some phones
+ var $engineOpenWeb = 'openweb'; //Transcoding by OpenWave server
+ var $deviceMidp = 'midp'; //a mobile Java technology
+ var $uplink = 'up.link';
+ var $engineTelecaQ = 'teleca q'; //a modern feature phone browser
+
+ var $devicePda = 'pda'; //some devices report themselves as PDAs
+ var $mini = 'mini'; //Some mobile browsers put 'mini' in their names.
+ var $mobile = 'mobile'; //Some mobile browsers put 'mobile' in their user agent strings.
+ var $mobi = 'mobi'; //Some mobile browsers put 'mobi' in their user agent strings.
+
+ //Use Maemo, Tablet, and Linux to test for Nokia's Internet Tablets.
+ var $maemo = 'maemo';
+ var $linux = 'linux';
+ var $qtembedded = 'qt embedded'; //for Sony Mylo and others
+ var $mylocom2 = 'com2'; //for Sony Mylo also
+
+ //In some UserAgents, the only clue is the manufacturer.
+ var $manuSonyEricsson = "sonyericsson";
+ var $manuericsson = "ericsson";
+ var $manuSamsung1 = "sec-sgh";
+ var $manuSony = "sony";
+ var $manuHtc = "htc"; //Popular Android and WinMo manufacturer
+
+ //In some UserAgents, the only clue is the operator.
+ var $svcDocomo = "docomo";
+ var $svcKddi = "kddi";
+ var $svcVodafone = "vodafone";
+
+ //Disambiguation strings.
+ var $disUpdate = "update"; //pda vs. update
+
+
+ //**************************
+ //The constructor. Allows the latest PHP (5.0+) to locate a constructor object and initialize the object.
+ function __construct()
+ {
+ $this->uagent_info();
+ }
+
+
+ //**************************
+ //The object initializer. Initializes several default variables.
+ function uagent_info()
+ {
+ $this->useragent = isset($_SERVER['HTTP_USER_AGENT'])?strtolower($_SERVER['HTTP_USER_AGENT']):'';
+ $this->httpaccept = isset($_SERVER['HTTP_ACCEPT'])?strtolower($_SERVER['HTTP_ACCEPT']):'';
+
+ //Let's initialize some values to save cycles later.
+ $this->InitDeviceScan();
+ }
+
+ //**************************
+ // Initialize Key Stored Values.
+ function InitDeviceScan()
+ {
+ global $isIphone, $isAndroidPhone, $isTierTablet, $isTierIphone;
+
+ //We'll use these 4 variables to speed other processing. They're super common.
+ $this->isIphone = $this->DetectIphoneOrIpod();
+ $this->isAndroidPhone = $this->DetectAndroidPhone();
+ $this->isTierIphone = $this->DetectTierIphone();
+ $this->isTierTablet = $this->DetectTierTablet();
+
+ //Optional: Comment these out if you don't need them.
+ global $isTierRichCss, $isTierGenericMobile;
+ $this->isTierRichCss = $this->DetectTierRichCss();
+ $this->isTierGenericMobile = $this->DetectTierOtherPhones();
+ }
+
+ //**************************
+ //Returns the contents of the User Agent value, in lower case.
+ function Get_Uagent()
+ {
+ return $this->useragent;
+ }
+
+ //**************************
+ //Returns the contents of the HTTP Accept value, in lower case.
+ function Get_HttpAccept()
+ {
+ return $this->httpaccept;
+ }
+
+
+ //**************************
+ // Detects if the current device is an iPhone.
+ function DetectIphone()
+ {
+ if (stripos($this->useragent, $this->deviceIphone) > -1)
+ {
+ //The iPad and iPod Touch say they're an iPhone. So let's disambiguate.
+ if ($this->DetectIpad() == $this->true ||
+ $this->DetectIpod() == $this->true)
+ return $this->false;
+ //Yay! It's an iPhone!
+ else
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an iPod Touch.
+ function DetectIpod()
+ {
+ if (stripos($this->useragent, $this->deviceIpod) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an iPad tablet.
+ function DetectIpad()
+ {
+ if (stripos($this->useragent, $this->deviceIpad) > -1 &&
+ $this->DetectWebkit() == $this->true)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an iPhone or iPod Touch.
+ function DetectIphoneOrIpod()
+ {
+ //We repeat the searches here because some iPods may report themselves as an iPhone, which would be okay.
+ if (stripos($this->useragent, $this->deviceIphone) > -1 ||
+ stripos($this->useragent, $this->deviceIpod) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects *any* iOS device: iPhone, iPod Touch, iPad.
+ function DetectIos()
+ {
+ if (($this->DetectIphoneOrIpod() == $this->true) ||
+ ($this->DetectIpad() == $this->true))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // Detects *any* Android OS-based device: phone, tablet, and multi-media player.
+ // Also detects Google TV.
+ function DetectAndroid()
+ {
+ if ((stripos($this->useragent, $this->deviceAndroid) > -1) ||
+ ($this->DetectGoogleTV() == $this->true))
+ return $this->true;
+ //Special check for the HTC Flyer 7" tablet
+ if ((stripos($this->useragent, $this->deviceHtcFlyer) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a (small-ish) Android OS-based device
+ // used for calling and/or multi-media (like a Samsung Galaxy Player).
+ // Google says these devices will have 'Android' AND 'mobile' in user agent.
+ // Ignores tablets (Honeycomb and later).
+ function DetectAndroidPhone()
+ {
+ if (($this->DetectAndroid() == $this->true) &&
+ (stripos($this->useragent, $this->mobile) > -1))
+ return $this->true;
+ //Special check for Android phones with Opera Mobile. They should report here.
+ if (($this->DetectOperaAndroidPhone() == $this->true))
+ return $this->true;
+ //Special check for the HTC Flyer 7" tablet. It should report here.
+ if ((stripos($this->useragent, $this->deviceHtcFlyer) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a (self-reported) Android tablet.
+ // Google says these devices will have 'Android' and NOT 'mobile' in their user agent.
+ function DetectAndroidTablet()
+ {
+ //First, let's make sure we're on an Android device.
+ if ($this->DetectAndroid() == $this->false)
+ return $this->false;
+
+ //Special check for Opera Android Phones. They should NOT report here.
+ if ($this->DetectOperaMobile() == $this->true)
+ return $this->false;
+ //Special check for the HTC Flyer 7" tablet. It should NOT report here.
+ if ((stripos($this->useragent, $this->deviceHtcFlyer) > -1))
+ return $this->false;
+
+ //Otherwise, if it's Android and does NOT have 'mobile' in it, Google says it's a tablet.
+ if (stripos($this->useragent, $this->mobile) > -1)
+ return $this->false;
+ else
+ return $this->true;
+ }
+
+ //**************************
+ // Detects if the current device is an Android OS-based device and
+ // the browser is based on WebKit.
+ function DetectAndroidWebKit()
+ {
+ if (($this->DetectAndroid() == $this->true) &&
+ ($this->DetectWebkit() == $this->true))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a GoogleTV.
+ function DetectGoogleTV()
+ {
+ if (stripos($this->useragent, $this->deviceGoogleTV) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is based on WebKit.
+ function DetectWebkit()
+ {
+ if (stripos($this->useragent, $this->engineWebKit) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // Detects if the current browser is the Nokia S60 Open Source Browser.
+ function DetectS60OssBrowser()
+ {
+ //First, test for WebKit, then make sure it's either Symbian or S60.
+ if ($this->DetectWebkit() == $this->true)
+ {
+ if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
+ stripos($this->useragent, $this->deviceS60) > -1)
+ {
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is any Symbian OS-based device,
+ // including older S60, Series 70, Series 80, Series 90, and UIQ,
+ // or other browsers running on these devices.
+ function DetectSymbianOS()
+ {
+ if (stripos($this->useragent, $this->deviceSymbian) > -1 ||
+ stripos($this->useragent, $this->deviceS60) > -1 ||
+ stripos($this->useragent, $this->deviceS70) > -1 ||
+ stripos($this->useragent, $this->deviceS80) > -1 ||
+ stripos($this->useragent, $this->deviceS90) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a
+ // Windows Phone 7 device.
+ function DetectWindowsPhone7()
+ {
+ if (stripos($this->useragent, $this->deviceWinPhone7) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a Windows Mobile device.
+ // Excludes Windows Phone 7 devices.
+ // Focuses on Windows Mobile 6.xx and earlier.
+ function DetectWindowsMobile()
+ {
+ if ($this->DetectWindowsPhone7() == $this->true)
+ return $this->false;
+ //Most devices use 'Windows CE', but some report 'iemobile'
+ // and some older ones report as 'PIE' for Pocket IE.
+ if (stripos($this->useragent, $this->deviceWinMob) > -1 ||
+ stripos($this->useragent, $this->deviceIeMob) > -1 ||
+ stripos($this->useragent, $this->enginePie) > -1)
+ return $this->true;
+ //Test for Windows Mobile PPC but not old Macintosh PowerPC.
+ if (stripos($this->useragent, $this->devicePpc) > -1
+ && !(stripos($this->useragent, $this->deviceMacPpc) > 1))
+ return $this->true;
+ //Test for certain Windwos Mobile-based HTC devices.
+ if (stripos($this->useragent, $this->manuHtc) > -1 &&
+ stripos($this->useragent, $this->deviceWindows) > -1)
+ return $this->true;
+ if ($this->DetectWapWml() == $this->true &&
+ stripos($this->useragent, $this->deviceWindows) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is any BlackBerry device.
+ // Includes the PlayBook.
+ function DetectBlackBerry()
+ {
+ if ((stripos($this->useragent, $this->deviceBB) > -1) ||
+ (stripos($this->httpaccept, $this->vndRIM) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is on a BlackBerry tablet device.
+ // Examples: PlayBook
+ function DetectBlackBerryTablet()
+ {
+ if ((stripos($this->useragent, $this->deviceBBPlaybook) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a BlackBerry phone device AND uses a
+ // WebKit-based browser. These are signatures for the new BlackBerry OS 6.
+ // Examples: Torch. Includes the Playbook.
+ function DetectBlackBerryWebKit()
+ {
+ if (($this->DetectBlackBerry() == $this->true) &&
+ ($this->DetectWebkit() == $this->true))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a BlackBerry Touch phone
+ // device, such as the Storm, Torch, and Bold Touch. Excludes the Playbook.
+ function DetectBlackBerryTouch()
+ {
+ if ((stripos($this->useragent, $this->deviceBBStorm) > -1) ||
+ (stripos($this->useragent, $this->deviceBBTorch) > -1) ||
+ (stripos($this->useragent, $this->deviceBBBoldTouch) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a BlackBerry OS 5 device AND
+ // has a more capable recent browser. Excludes the Playbook.
+ // Examples, Storm, Bold, Tour, Curve2
+ // Excludes the new BlackBerry OS 6 and 7 browser!!
+ function DetectBlackBerryHigh()
+ {
+ //Disambiguate for BlackBerry OS 6 or 7 (WebKit) browser
+ if ($this->DetectBlackBerryWebKit() == $this->true)
+ return $this->false;
+ if ($this->DetectBlackBerry() == $this->true)
+ {
+ if (($this->DetectBlackBerryTouch() == $this->true) ||
+ stripos($this->useragent, $this->deviceBBBold) > -1 ||
+ stripos($this->useragent, $this->deviceBBTour) > -1 ||
+ stripos($this->useragent, $this->deviceBBCurve) > -1)
+ {
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a BlackBerry device AND
+ // has an older, less capable browser.
+ // Examples: Pearl, 8800, Curve1.
+ function DetectBlackBerryLow()
+ {
+ if ($this->DetectBlackBerry() == $this->true)
+ {
+ //Assume that if it's not in the High tier, then it's Low.
+ if (($this->DetectBlackBerryHigh() == $this->true) ||
+ ($this->DetectBlackBerryWebKit() == $this->true))
+ return $this->false;
+ else
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is on a PalmOS device.
+ function DetectPalmOS()
+ {
+ //Most devices nowadays report as 'Palm', but some older ones reported as Blazer or Xiino.
+ if (stripos($this->useragent, $this->devicePalm) > -1 ||
+ stripos($this->useragent, $this->engineBlazer) > -1 ||
+ stripos($this->useragent, $this->engineXiino) > -1)
+ {
+ //Make sure it's not WebOS first
+ if ($this->DetectPalmWebOS() == $this->true)
+ return $this->false;
+ else
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // Detects if the current browser is on a Palm device
+ // running the new WebOS.
+ function DetectPalmWebOS()
+ {
+ if (stripos($this->useragent, $this->deviceWebOS) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is on an HP tablet running WebOS.
+ function DetectWebOSTablet()
+ {
+ if ((stripos($this->useragent, $this->deviceWebOShp) > -1)
+ && (stripos($this->useragent, $this->deviceTablet) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a
+ // Garmin Nuvifone.
+ function DetectGarminNuvifone()
+ {
+ if (stripos($this->useragent, $this->deviceNuvifone) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // Check to see whether the device is any device
+ // in the 'smartphone' category.
+ function DetectSmartphone()
+ {
+ global $isIphone, $isAndroidPhone, $isTierIphone;
+
+ if (($this->isIphone == $this->true)
+ || ($this->isAndroidPhone == $this->true)
+ || ($this->isTierIphone == $this->true)
+ || ($this->DetectS60OssBrowser() == $this->true)
+ || ($this->DetectSymbianOS() == $this->true)
+ || ($this->DetectWindowsMobile() == $this->true)
+ || ($this->DetectWindowsPhone7() == $this->true)
+ || ($this->DetectBlackBerry() == $this->true)
+ || ($this->DetectPalmWebOS() == $this->true)
+ || ($this->DetectPalmOS() == $this->true)
+ || ($this->DetectGarminNuvifone() == $this->true))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // Detects whether the device is a Brew-powered device.
+ function DetectBrewDevice()
+ {
+ if (stripos($this->useragent, $this->deviceBrew) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects the Danger Hiptop device.
+ function DetectDangerHiptop()
+ {
+ if (stripos($this->useragent, $this->deviceDanger) > -1 ||
+ stripos($this->useragent, $this->deviceHiptop) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is Opera Mobile or Mini.
+ function DetectOperaMobile()
+ {
+ if (stripos($this->useragent, $this->engineOpera) > -1)
+ {
+ if ((stripos($this->useragent, $this->mini) > -1) ||
+ (stripos($this->useragent, $this->mobi) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is Opera Mobile
+ // running on an Android phone.
+ function DetectOperaAndroidPhone()
+ {
+ if ((stripos($this->useragent, $this->engineOpera) > -1) &&
+ (stripos($this->useragent, $this->deviceAndroid) > -1) &&
+ (stripos($this->useragent, $this->mobi) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is Opera Mobile
+ // running on an Android tablet.
+ function DetectOperaAndroidTablet()
+ {
+ if ((stripos($this->useragent, $this->engineOpera) > -1) &&
+ (stripos($this->useragent, $this->deviceAndroid) > -1) &&
+ (stripos($this->useragent, $this->deviceTablet) > -1))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects whether the device supports WAP or WML.
+ function DetectWapWml()
+ {
+ if (stripos($this->httpaccept, $this->vndwap) > -1 ||
+ stripos($this->httpaccept, $this->wml) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an Amazon Kindle (eInk devices only).
+ // Note: For the Kindle Fire, use the normal Android methods.
+ function DetectKindle()
+ {
+ if (stripos($this->useragent, $this->deviceKindle) > -1 &&
+ DetectAndroid() == $this->false)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // The quick way to detect for a mobile device.
+ // Will probably detect most recent/current mid-tier Feature Phones
+ // as well as smartphone-class devices. Excludes Apple iPads and other modern tablets.
+ function DetectMobileQuick()
+ {
+ //Let's exclude tablets
+ if ($this->isTierTablet == $this->true)
+ return $this->false;
+
+ //Most mobile browsing is done on smartphones
+ if ($this->DetectSmartphone() == $this->true)
+ return $this->true;
+
+ if (($this->DetectWapWml() == $this->true)
+ || ($this->DetectBrewDevice() == $this->true)
+ || ($this->DetectOperaMobile() == $this->true))
+ return $this->true;
+
+ if ((stripos($this->useragent, $this->engineNetfront) > -1)
+ || (stripos($this->useragent, $this->engineUpBrowser) > -1)
+ || (stripos($this->useragent, $this->engineOpenWeb) > -1))
+ return $this->true;
+
+ if (($this->DetectDangerHiptop() == $this->true)
+ || ($this->DetectMidpCapable() == $this->true)
+ || ($this->DetectMaemoTablet() == $this->true)
+ || ($this->DetectArchos() == $this->true))
+ return $this->true;
+
+ if ((stripos($this->useragent, $this->devicePda) > -1) &&
+ !(stripos($this->useragent, $this->disUpdate) > -1))
+ return $this->true;
+ if (stripos($this->useragent, $this->mobile) > -1)
+ return $this->true;
+
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a Sony Playstation.
+ function DetectSonyPlaystation()
+ {
+ if (stripos($this->useragent, $this->devicePlaystation) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a Nintendo game device.
+ function DetectNintendo()
+ {
+ if (stripos($this->useragent, $this->deviceNintendo) > -1 ||
+ stripos($this->useragent, $this->deviceWii) > -1 ||
+ stripos($this->useragent, $this->deviceNintendoDs) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is a Microsoft Xbox.
+ function DetectXbox()
+ {
+ if (stripos($this->useragent, $this->deviceXbox) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an Internet-capable game console.
+ function DetectGameConsole()
+ {
+ if ($this->DetectSonyPlaystation() == $this->true)
+ return $this->true;
+ else if ($this->DetectNintendo() == $this->true)
+ return $this->true;
+ else if ($this->DetectXbox() == $this->true)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device supports MIDP, a mobile Java technology.
+ function DetectMidpCapable()
+ {
+ if (stripos($this->useragent, $this->deviceMidp) > -1 ||
+ stripos($this->httpaccept, $this->deviceMidp) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is on one of the Maemo-based Nokia Internet Tablets.
+ function DetectMaemoTablet()
+ {
+ if (stripos($this->useragent, $this->maemo) > -1)
+ return $this->true;
+ //For Nokia N810, must be Linux + Tablet, or else it could be something else.
+ if ((stripos($this->useragent, $this->linux) > -1)
+ && (stripos($this->useragent, $this->deviceTablet) > -1)
+ && ($this->DetectWebOSTablet() == $this->false)
+ && ($this->DetectAndroid() == $this->false))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current device is an Archos media player/Internet tablet.
+ function DetectArchos()
+ {
+ if (stripos($this->useragent, $this->deviceArchos) > -1)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // Detects if the current browser is a Sony Mylo device.
+ function DetectSonyMylo()
+ {
+ if (stripos($this->useragent, $this->manuSony) > -1)
+ {
+ if ((stripos($this->useragent, $this->qtembedded) > -1) ||
+ (stripos($this->useragent, $this->mylocom2) > -1))
+ {
+ return $this->true;
+ }
+ else
+ return $this->false;
+ }
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // The longer and more thorough way to detect for a mobile device.
+ // Will probably detect most feature phones,
+ // smartphone-class devices, Internet Tablets,
+ // Internet-enabled game consoles, etc.
+ // This ought to catch a lot of the more obscure and older devices, also --
+ // but no promises on thoroughness!
+ function DetectMobileLong()
+ {
+ if ($this->DetectMobileQuick() == $this->true)
+ return $this->true;
+ if ($this->DetectGameConsole() == $this->true)
+ return $this->true;
+ if ($this->DetectSonyMylo() == $this->true)
+ return $this->true;
+
+ //Detect older phones from certain manufacturers and operators.
+ if (stripos($this->useragent, $this->uplink) > -1)
+ return $this->true;
+ if (stripos($this->useragent, $this->manuSonyEricsson) > -1)
+ return $this->true;
+ if (stripos($this->useragent, $this->manuericsson) > -1)
+ return $this->true;
+
+ if (stripos($this->useragent, $this->manuSamsung1) > -1)
+ return $this->true;
+ if (stripos($this->useragent, $this->svcDocomo) > -1)
+ return $this->true;
+ if (stripos($this->useragent, $this->svcKddi) > -1)
+ return $this->true;
+ if (stripos($this->useragent, $this->svcVodafone) > -1)
+ return $this->true;
+
+ else
+ return $this->false;
+ }
+
+
+
+ //*****************************
+ // For Mobile Web Site Design
+ //*****************************
+
+ //**************************
+ // The quick way to detect for a tier of devices.
+ // This method detects for the new generation of
+ // HTML 5 capable, larger screen tablets.
+ // Includes iPad, Android (e.g., Xoom), BB Playbook, WebOS, etc.
+ function DetectTierTablet()
+ {
+ if (($this->DetectIpad() == $this->true)
+ || ($this->DetectAndroidTablet() == $this->true)
+ || ($this->DetectBlackBerryTablet() == $this->true)
+ || ($this->DetectWebOSTablet() == $this->true))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+ //**************************
+ // The quick way to detect for a tier of devices.
+ // This method detects for devices which can
+ // display iPhone-optimized web content.
+ // Includes iPhone, iPod Touch, Android, Windows Phone 7, WebOS, etc.
+ function DetectTierIphone()
+ {
+ if (($this->isIphone == $this->true) ||
+ ($this->isAndroidPhone == $this->true))
+ return $this->true;
+
+ if (($this->DetectBlackBerryWebKit() == $this->true) &&
+ ($this->DetectBlackBerryTouch() == $this->true))
+ return $this->true;
+ if ($this->DetectWindowsPhone7() == $this->true)
+ return $this->true;
+ if ($this->DetectPalmWebOS() == $this->true)
+ return $this->true;
+ if ($this->DetectGarminNuvifone() == $this->true)
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // The quick way to detect for a tier of devices.
+ // This method detects for devices which are likely to be capable
+ // of viewing CSS content optimized for the iPhone,
+ // but may not necessarily support JavaScript.
+ // Excludes all iPhone Tier devices.
+ function DetectTierRichCss()
+ {
+ if ($this->DetectMobileQuick() == $this->true)
+ {
+ if (($this->DetectTierIphone() == $this->true))
+ return $this->false;
+
+ //The following devices are explicitly ok.
+ if ($this->DetectWebkit() == $this->true) //Any WebKit
+ return $this->true;
+ if ($this->DetectS60OssBrowser() == $this->true)
+ return $this->true;
+
+ //Note: 'High' BlackBerry devices ONLY
+ if ($this->DetectBlackBerryHigh() == $this->true)
+ return $this->true;
+
+ //Older Windows 'Mobile' isn't good enough for iPhone Tier.
+ if ($this->DetectWindowsMobile() == $this->true)
+ return $this->true;
+ if (stripos($this->useragent, $this->engineTelecaQ) > -1)
+ return $this->true;
+
+ //default
+ else
+ return $this->false;
+ }
+ else
+ return $this->false;
+ }
+
+ //**************************
+ // The quick way to detect for a tier of devices.
+ // This method detects for all other types of phones,
+ // but excludes the iPhone and RichCSS Tier devices.
+ function DetectTierOtherPhones()
+ {
+ //Exclude devices in the other 2 categories
+ if (($this->DetectMobileLong() == $this->true)
+ && ($this->DetectTierIphone() == $this->false)
+ && ($this->DetectTierRichCss() == $this->false))
+ return $this->true;
+ else
+ return $this->false;
+ }
+
+
+}
+
+?> \ No newline at end of file
diff --git a/language/en_UK/admin.lang.php b/language/en_UK/admin.lang.php
index c881ecc22..f1cf6685d 100644
--- a/language/en_UK/admin.lang.php
+++ b/language/en_UK/admin.lang.php
@@ -845,4 +845,6 @@ $lang['This album contains no photo.'] = 'This album contains no photo.';
$lang['Not cropped correctly?'] = 'Not cropped correctly?';
$lang['Center of interest'] = 'Center of interest';
$lang['Move to album'] = 'Move to album';
+$lang['You can activate only one mobile theme.'] = 'You can activate only one mobile theme.';
+$lang['mobile'] = 'mobile';
?> \ No newline at end of file
diff --git a/language/fr_FR/admin.lang.php b/language/fr_FR/admin.lang.php
index e110790ae..6f3cea4ef 100644
--- a/language/fr_FR/admin.lang.php
+++ b/language/fr_FR/admin.lang.php
@@ -846,4 +846,6 @@ $lang['This album contains %d photos, added between %s and %s.'] = 'Cet album co
$lang['This album contains no photo.'] = 'Cet album ne contient pas de photo.';
$lang['%s has been successfully updated.'] = '%s a été mis à jour avec succès.';
$lang['Move to album'] = 'Déplacer vers l\'album';
+$lang['You can activate only one mobile theme.'] = 'Vous ne pouvez activer qu\'un seul thème mobile.';
+$lang['mobile'] = 'mobile';
?> \ No newline at end of file