I can get "mobile" for boutique to display in safari, but on my iphone, using Chrome, it shows the regular site.
Any way to make it recognize the mobile version of Chrome as well?
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
Cyberek wrote:Ps - do you have template updated to latest version?
<?php
/**
*
* Main framework class
*
* @version 1.0.0
* @package Gavern Framework
* @copyright Copyright (C) 2010 - 2011 GavickPro. All rights reserved.
*
*/
// No direct access.
defined('_JEXEC') or die;
if(!defined('DS')){
define('DS',DIRECTORY_SEPARATOR);
}
/*
* Main framework class
*/
class GKTemplate {
// template ID
public $TID = 1;
// access to the standard Joomla! template API
public $API;
/*
* detected browser:
*
* browser
* css3
* mobile
*
*/
public $browser;
// page config
public $config;
// page menu
public $menu;
// module styles
public $module_styles;
// page suffix
public $page_suffix;
// submenu
public $generateSubmenu;
// frontpage detection variables
public $globalMenuActive = null;
public $globalMenuLanguage = null;
// constructor
public function __construct($tpl, $module_styles, $embed_mode = false) {
$file = dirname(__file__) . DS . 'framework' . DS . 'gk.browser.php';
if (!is_file($file)) return null;
require_once ($file);
// load the mootools
JHtml::_('behavior.framework', true);
// create instance of GKBrowser class
$gkbrowser = new GKBrowser();
// put the template handler into API field
$this->API = $tpl;
// put the styles to class field
$this->module_styles = $module_styles;
// check the browser
$this->browser = $gkbrowser->detectBrowser();
// get the params
$this->getParameters();
// get the page suffix
$this->getSuffix();
// get the modules overrides
$this->getModuleStyles();
// get type and generate menu
$this->menu = $this->getMenuType();
// enable/disable mootools for pages
$this->getMooTools();
if(!$embed_mode) {
// mobile mode
if ($this->browser->get('mobile')) {
$this->getLayout('mobile');
} else {
if ($this->browser->get('browser') == 'facebook') { // facebook mode
$this->getLayout('facebook');
} else { // normal mode
$this->getLayout('normal');
}
}
}
// parse FB and Tweeter buttons
$this->socialApiParser($embed_mode);
// mobile parsing
$this->mobileParser();
// define an event for replacement
$dispatcher = JDispatcher::getInstance();
// set a proper event for GKParserPlugin
if($this->getParam('use_gk_cache', 0) == 0) {
$dispatcher->register('onAfterRender', 'GKParserPlugin');
} else {
$dispatcher->register('onBeforeCache', 'GKParserPlugin');
}
}
// get the template parameters in PHP form
public function getParameters() {
// create config object
$this->config = new JObject();
// set layout override param
$this->config->set('layout_override', $this->overrideArrayParse($this->getParam('layout_override', '')));
// set menu override param
$this->config->set('menu_override', $this->overrideArrayParse($this->getParam('menu_override', '')));
$this->config->set('suffix_override', $this->overrideArrayParse($this->getParam('suffix_override', '')));
$this->config->set('module_override', $this->overrideArrayParse($this->getParam('module_override', '')));
$this->config->set('tools_override', $this->overrideArrayParse($this->getParam('tools_for_pages', '')));
$this->config->set('mootools_override', $this->overrideArrayParse($this->getParam('mootools_for_pages', '')));
}
public function getMooTools() {
$isOverrided = $this->getMooToolsOverride();
if($isOverrided){
$document = &JFactory::getDocument();
$header = $document->getHeadData();
$scripts = $header['scripts'];
// table which contains scripts to disable
$toRemove = array('mootools-core.js', 'mootools-more.js', 'caption.js');
foreach ($scripts as $key => $value){
foreach ($toRemove as $remove){
if (strpos($key, $remove) !== false) unset($scripts[$key]);
}
}
$header['scripts'] = $scripts;
$document->setHeadData($header);
}
}
// Browser detection
//
//
//
// Functions usable for views
//
//
//
// function to get layout for specified mode
public function getLayout($mode) {
// check layout saved in cookie
$tpl_name = str_replace(' ', '_', JText::_('TPL_GK_LANG_NAME'));
$cookie_name = 'gkGavernMobile'.$tpl_name;
$cookie = (isset($_COOKIE[$cookie_name])) ? $_COOKIE[$cookie_name] : 'mobile';
if ($mode == 'mobile' && $cookie == 'mobile') { // mobile mode
if( $this->browser->get('browser') == 'iphone' ) { // iphone
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('iphone_layout', 'iphone') . '.php';
if (is_file($layoutpath)) include ($layoutpath);
else echo 'iPhone layout doesn\'t exist!';
} else if( $this->browser->get('browser') == 'android' ) { // android
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('android_layout', 'android') . '.php';
if (is_file($layoutpath)) include ($layoutpath);
else echo 'Android layout doesn\'t exist!';
} else { // handheld
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('handheld_layout', 'handheld') . '.php';
if (is_file($layoutpath)) include ($layoutpath);
else echo 'Handheld layout doesn\'t exist!';
}
} else {
if ($mode == 'facebook') { // facebook mode
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('facebook_layout', 'facebook') . '.php';
if (is_file($layoutpath)) include ($layoutpath);
else echo 'Facebook layout doesn\'t exist!';
} else { // normal mode
// check the override
$is_overrided = $this->getLayoutOverride();
// if current page is overrided
if ($is_overrided !== false) {
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $is_overrided . '.php';
if (is_file($layoutpath)) {
include ($layoutpath);
} else {
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('default_layout', 'default') . '.php';
if (is_file($layoutpath)) {
include ($layoutpath);
} else {
echo 'Default layout doesn\'t exist!';
}
}
} else { // else - load default layout
$layoutpath = $this->URLtemplatepath() . DS . 'layouts' . DS . $this->getParam('default_layout', 'default') . '.php';
if (is_file($layoutpath)) {
include ($layoutpath);
} else {
echo 'Default layout doesn\'t exist!';
}
}
}
}
}
// function to get page suffix
public function getSuffix() {
// check the override
$is_overrided = $this->getSuffixOverride();
// if current page is overrided
if ($is_overrided !== false) {
$this->page_suffix = $is_overrided;
} else {
$this->page_suffix = '';
}
}
// function to get page suffix
public function getModuleStyles() {
$keys = array_keys($this->module_styles);
$module_override = $this->config->get('module_override');
for($i = 0; $i < count($keys); $i++) {
if(isset($module_override[$keys[$i]])) {
$this->module_styles[$keys[$i]] = $module_override[$keys[$i]];
}
}
}
// function to load specified block
public function loadBlock($path) {
jimport('joomla.filesystem.file');
if(JFile::exists($this->URLtemplatepath() . DS . 'layouts' . DS . 'blocks' . DS . $path . '.php')) {
include($this->URLtemplatepath() . DS . 'layouts' . DS . 'blocks' . DS . $path . '.php');
}
}
// function to get menu type
public function getMenuType() {
// check layout saved in cookie
$tpl_name = str_replace(' ', '_', JText::_('TPL_GK_LANG_NAME'));
$cookie_name = 'gkGavernMobile'.$tpl_name;
$cookie = (isset($_COOKIE[$cookie_name])) ? $_COOKIE[$cookie_name] : 'mobile';
if(!$this->browser->get('mobile') || $cookie == 'desktop') {
// check the override
$is_overrided = $this->getMenuOverride();
$menu_type = 'gk_menu';
// if current menu is overrided
$menu_type = ($is_overrided !== false) ? $is_overrided : $this->getParam('menu_type', 0);
} else {
if(($this->browser->get('browser') == 'iphone' && $this->getParam('iphone_layout', 'iphone')!='iphone') || ($this->browser->get('browser') == 'android' && $this->getParam('android_layout', 'android')!='android') || ($this->browser->get('browser') == 'handheld' && $this->getParam('handheld_layout', 'handheld')!='handheld')){
$menu_type = $this->getParam('menu_type', 0);
} else {
$menu_type = ($this->browser->get('browser') == 'iphone' || $this->browser->get('browser') == 'android') ? 'gk_iphone' : 'gk_handheld';
}
}
// select the menu
switch ($menu_type) {
case 'gk_iphone' :
$file = dirname(__file__) . DS . 'menu' . DS . 'GKIPhone.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKIPhone';
$this->generateSubmenu = false;
break;
case 'gk_handheld' :
$file = dirname(__file__) . DS . 'menu' . DS . 'GKHandheld.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKHandheld';
$this->generateSubmenu = false;
break;
case 'gk_menu':
$file = dirname(__file__) . DS . 'menu' . DS . 'GKMenu.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKMenu';
$this->generateSubmenu = false;
break;
case 'gk_dropline':
$file = dirname(__file__) . DS . 'menu' . DS . 'GKDropline.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKDropline';
$this->generateSubmenu = true;
break;
case 'gk_split':
$file = dirname(__file__) . DS . 'menu' . DS . 'GKSplit.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKSplit';
$this->generateSubmenu = true;
break;
default:
$file = dirname(__file__) . DS . 'menu' . DS . 'GKMenu.php';
if (!is_file($file)) return null;
require_once ($file);
$menuclass = 'GKMenu';
$this->generateSubmenu = false;
break;
}
$gkmenu = new $menuclass($this->API->params);
$gkmenu->_tmpl = $this->API;
return $gkmenu;
}
// function to get layout override
public function getLayoutOverride() {
// get current ItemID
$ItemID = JRequest::getInt('Itemid');
// get current option value
$option = JRequest::getCmd('option');
// override array
$layout_overrides = $this->config->get('layout_override');
// check the config
if (isset($layout_overrides[$ItemID])) {
return $layout_overrides[$ItemID];
} else {
if (isset($layout_overrides[$option])) {
return $layout_overrides[$option];
} else {
return false;
}
}
}
// function to get layout override
public function getSuffixOverride() {
// get current ItemID
$ItemID = JRequest::getInt('Itemid');
// get current option value
$option = JRequest::getCmd('option');
// override array
$suffix_overrides = $this->config->get('suffix_override');
// check the config
if (isset($suffix_overrides[$ItemID])) {
return $suffix_overrides[$ItemID];
} else {
if (isset($suffix_overrides[$option])) {
return $suffix_overrides[$option];
} else {
return false;
}
}
}
// function to get menu override
public function getMenuOverride() {
// get current ItemID
$ItemID = JRequest::getInt('Itemid');
// get current option value
$option = JRequest::getCmd('option');
// override array
$menu_overrides = $this->config->get('menu_override');
// check the config
if (isset($menu_overrides[$ItemID])) {
return $menu_overrides[$ItemID];
} else {
if (isset($menu_overrides[$option])) {
return $menu_overrides[$option];
} else {
return false;
}
}
}
// function to get tools override
public function getToolsOverride() {
// get current ItemID
$ItemID = JRequest::getInt('Itemid');
// get current option value
$option = JRequest::getCmd('option');
// override array
$tools_override = $this->config->get('tools_override');
// get current tools setting
$tools_type = $this->getParam('tools', 'all');
if($tools_type == 'all') { return true; }
else if($tools_type == 'none') { return false; }
else if($tools_type == 'selected') {
if (isset($tools_override[$ItemID])) { return true; }
else { return false; }
}
else {
if (isset($tools_override[$ItemID])) { return false; }
else { return true; }
}
}
public function getMooToolsOverride() {
// get current ItemID
$ItemID = JRequest::getInt('Itemid');
// get current option value
$option = JRequest::getCmd('option');
// override array
$mootools_override = $this->config->get('mootools_override');
// check the config
if (isset($mootools_override[$ItemID])) {
return $mootools_override[$ItemID];
} else {
if (isset($mootools_override[$option])) {
return $mootools_override[$option];
} else {
return false;
}
}
}
// function to generate columns block
public function generateColumnsBlock($amount, $base_name, $group_id, $start_num) {
// returns:
// array(
// [number] => array(
// "class" => // class of the position
// "width" => // width of the position
// "name" => // name of the position
// ),
// ...
// )
// possible classes: gkColLeft, gkColRight, gkColCenter, gkColFull
$amount_of_columns = 0;
// column existing
$columns = array();
// check how many columns you have to generate
for($i = $start_num; $i <= $amount + ($start_num - 1); $i++) {
if($this->modules($base_name . $i)) {
$columns[$i] = true;
$amount_of_columns++;
} else {
$columns[$i] = false;
}
}
// if any column exists
if($amount_of_columns > 0) {
// variable to store column width
$column_width = '100';
// check if more than one column exists
if($amount_of_columns > 1) {
// automatically recognize the widest column
$widest_column = $this->getParam($group_id . '_widest', '');
$widest_column_value = $this->getParam($group_id . '_widest_value', 0);
// check if the widest column is visible
if($this->modules($widest_column) && $widest_column_value != 0) {
$column_width = round((100 - $widest_column_value) / ($amount_of_columns - 1), 3);
$column_width = round($column_width - 0.005, 2);
$result = array();
$added_amount = 0;
//
for($i = $start_num; $i <= $amount + ($start_num - 1); $i++) {
if($columns[$i]) {
$added_amount++;
$column_class = ($added_amount == 1) ? 'gkColLeft' : (($added_amount == $amount_of_columns) ? 'gkColRight' : 'gkColCenter');
$result[$i-$start_num] = array(
"class" => $column_class,
"width" => ($base_name . $i == $widest_column) ? $widest_column_value : $column_width,
"name" => $base_name . $i
);
}
}
} else { // all columns are equal
$column_width = round(100 / $amount_of_columns, 3);
$column_width = round($column_width - 0.005, 2);
$result = array();
$added_amount = 0;
for($i = $start_num; $i <= $amount + ($start_num - 1); $i++) {
if($columns[$i]) {
$added_amount++;
$column_class = ($added_amount == 1) ? 'gkColLeft' : (($added_amount == $amount_of_columns) ? 'gkColRight' : 'gkColCenter');
$result[$i-$start_num] = array(
"class" => $column_class,
"width" => $column_width,
"name" => $base_name . $i
);
}
}
}
} else {
$active_index = 0;
for($i = $start_num; $i <= $amount + ($start_num - 1); $i++) {
if($columns[$i]) $active_index = $i;
}
$result = array(
"0" => array(
"class" => 'gkColFull',
"width" => '100',
"name" => $base_name . $active_index
)
);
}
return $result;
} else { // if any column exists - return null
return null;
}
}
// function to generate columns widths
public function generateColumnsWidth() {
// header column
if($this->modules('header1 and header2')) {
$this->addCSSRule('#gkHeader1 { width: ' . $this->getParam('header_column_width', '50'). '%; }');
$this->addCSSRule('#gkHeader2 { width: ' . (($this->getParam('header_spaces', 'nospace') == 'nospace' ? 100 : 98 ) - $this->getParam('header_column_width', '50')) . '%; }');
} else {
$this->addCSSRule('#gkHeader1 { width:100%}');
$this->addCSSRule('#gkHeader2 { width:100%}');
}
// left column
if($this->modules('left_left and left_right')) {
$this->addCSSRule('#gkLeftLeft { width: ' . $this->getParam('left2_column_width', '50'). '%; }');
$this->addCSSRule('#gkLeftRight { width: ' . (100 - $this->getParam('left2_column_width', '50')) . '%; }');
}
// right column
if($this->modules('right_left and right_right')) {
$this->addCSSRule('#gkRightLeft { width: ' . $this->getParam('right2_column_width', '50'). '%; }');
$this->addCSSRule('#gkRightRight { width: ' . (100 - $this->getParam('right2_column_width', '50')) . '%; }');
}
// main column
if($this->modules('inset1 and inset2')) {
$this->addCSSRule('#gkInset1 { width: ' . $this->getParam('inset_column_width', '20'). '%; }');
$this->addCSSRule('#gkInset2 { width: ' . $this->getParam('inset2_column_width', '20'). '%; }');
$this->addCSSRule('#gkComponentWrap { width: ' . (100 - ($this->getParam('inset_column_width', '20') + $this->getParam('inset2_column_width', '20'))) . '%; }');
} elseif($this->modules('inset1 or inset2')) {
if($this->modules('inset1')) {
$this->addCSSRule('#gkInset1 { width: ' . $this->getParam('inset_column_width', '20'). '%; }');
$this->addCSSRule('#gkComponentWrap { width: ' . (100 - $this->getParam('inset_column_width', '20')) . '%; }');
} else {
$this->addCSSRule('#gkInset2 { width: ' . $this->getParam('inset2_column_width', '20'). '%; }');
$this->addCSSRule('#gkComponentWrap { width: ' . (100 - $this->getParam('inset2_column_width', '20')) . '%; }');
}
}
// all columns
$left_column = $this->modules('left_top + left_bottom + left_left + left_right');
$right_column = $this->modules('right_top + right_bottom + right_left + right_right');
if($left_column && $right_column) {
$this->addCSSRule('#gkLeft { width: ' . $this->getParam('left_column_width', '20'). '%; }');
$this->addCSSRule('#gkRight { width: ' . $this->getParam('right_column_width', '20'). '%; }');
$this->addCSSRule('#gkContent { width: ' . (100 - ($this->getParam('left_column_width', '20') + $this->getParam('right_column_width', '20'))) . '%; }');
} elseif ( $left_column ) {
$this->addCSSRule('#gkLeft { width: ' . $this->getParam('left_column_width', '20'). '%; }');
$this->addCSSRule('#gkContent { width: ' . (100 - $this->getParam('left_column_width', '20')) . '%; }');
} elseif ( $right_column ) {
$this->addCSSRule('#gkRight { width: ' . $this->getParam('right_column_width', '20'). '%; }');
$this->addCSSRule('#gkContent { width: ' . (100 - $this->getParam('right_column_width', '20')) . '%; }');
}
}
// function to generate blocks paddings
public function generatePadding($block) {
// main blocks
if($block == 'gkMainBlock') return 'gkPaddingTLR';
// gkMainBlock
if($block == 'gkContentColumn') {
if($this->modules('right_top + right_bottom + right_left + right_right')) {
return 'gkPaddingR';
}
return '';
}
// Content
if($block == 'gkInset1') return 'gkPaddingTBL';
if($block == 'gkInset2') return 'gkPaddingTBR';
if($block == 'gkComponentWrap') return ($this->modules('inset1')) ? 'gkPaddingL' : '';
// left column
if($block == 'gkLeftLeft') return ($this->modules('left_right')) ? ' gkPaddingR' : '';
// right column
if($block == 'gkRightLeft') return ($this->modules('right_right')) ? ' gkPaddingR' : '';
// main column
if($block == 'gkContentTop' || $block == 'gkContentBottom') {
if($this->modules('right_top + right_bottom + right_left + right_right')) return 'gkPaddingTBL';
else return 'gkPaddingTBLR';
}
if($block == 'gkContentMainbody') {
if($this->modules('right_top + right_bottom + right_left + right_right')) {
return 'gkPaddingR';
}
return '';
}
}
// function to check if mainbody exists
public function mainExists($mode){
if($mode == 'all') {
return ($this->checkComponent() || $this->checkMainbody() || $this->modules('left_top + left_bottom + left_left + left_right + right_top + right_bottom + right_left + right_right + top + bottom + mainbody_top + mainbody_bottom + inset1 + inset2 + mainbody'));
} elseif($mode == 'content') {
return ($this->checkComponent() || $this->checkMainbody() || $this->modules('mainbody_top + mainbody_bottom + mainbody + inset1 + inset2 + top + bottom'));
} elseif($mode == 'content_mainbody') {
return ($this->checkComponent() || $this->checkMainbody() || $this->modules('mainbody_top + mainbody_bottom + mainbody + inset1 + inset2'));
} elseif($mode == 'component_wrap') {
return ($this->checkComponent() || $this->checkMainbody() || $this->modules('mainbody_top + mainbody_bottom + mainbody'));
} elseif($mode == 'component') {
return ($this->checkComponent() || $this->checkMainbody());
}
}
// function to check if component exists
function checkComponent() {
if($this->isFrontpage()) {
$result = ($this->getParam('mainbody_frontpage', '') != 'only_mainbody');
return (!isset($_POST['option'])) ? $result : true;
}else {
return !($this->getParam('mainbody_subpage', '') == 'mainbody_or_component' && $this->modules("mainbody") > 0);
}
}
// function to check if mainbody exists
function checkMainbody() {
if($this->isFrontpage()) {
return (($this->getParam('mainbody_frontpage', '') != 'only_component') && $this->modules("mainbody") > 0);
} else {
return ($this->getParam('mainbody_subpage', '') == 'mainbody_or_component' && $this->modules("mainbody") > 0);
}
}
function isFrontpage(){
// get all known languages
$languages = JLanguage::getKnownLanguages();
$menu = JSite::getMenu();
foreach($languages as $lang){
if ($menu->getActive() == $menu->getDefault( $lang['tag'] )) {
return true;
}
}
return false;
}
public function addTouchIcon() {
$touch_image = $this->getParam('touch_image', '');
if($touch_image == '') {
$touch_image = $this->URLtemplate() . '/images/touch-device.png';
} else {
$touch_image = $this->URLtemplate() . $touch_image;
}
$doc = JFactory::getDocument();
$doc->addCustomTag('<link rel="apple-touch-icon" href="'.$touch_image.'">');
$doc->addCustomTag('<link rel="apple-touch-icon-precompose" href="'.$touch_image.'">');
}
// function to generate the messages on specified position
public function messages($position) {
if($position == $this->getParam('messages_position', 'message-position-1')) {
echo '<jdoc:include type="message" />';
}
}
// Parse Facebook and Tweeter buttons
public function socialApiParser($embed_mode = false) {
// FB login
if(!($this->getParam('fb_api_id', '') != '' && $this->getParam('fb_login', '0') == 1) || $this->browser->get('mobile')) {
// clear FB login
GKParser::$customRules['/<gavern:fblogin(.*?)gavern:fblogin>/mis'] = '';
} else {
GKParser::$customRules['/<gavern:fblogin>/mi'] = '';
GKParser::$customRules['/<\/gavern:fblogin>/mi'] = '';
}
// get the informations about excluded articles and categories
$excluded_articles = explode(',', $this->getParam('excluded_arts', ''));
$excluded_categories = $this->getParam('excluded_cats', '');
if(is_array($excluded_categories) && $excluded_categories[0] == '') $excluded_categories = array(0);
else if(is_string($excluded_categories)) $excluded_categories = array($excluded_categories);
// get the variables from the URL
$option = JRequest::getCmd('option', '');
$view = JRequest::getCmd('view', '');
$id = JRequest::getVar('id', '');
if(strpos($id, ':')) $id = substr($id, 0, strpos($id, ':'));
$catid = JRequest::getVar('catid', '');
if(strpos($catid, ':')) $catid = substr($catid, 0, strpos($catid, ':'));
// find catid if it is not set in the URL
if($catid == '' && $option == 'com_content' && $view == 'article' && $id != '') {
$db = JFactory::getDBO();
$query = 'SELECT catid FROM #__content AS c WHERE c.id = ' . $id . ' LIMIT 1';
// Set the query
$db->setQuery($query);
$results = $db->loadObjectList();
// get the new category ID
if(count($results) > 0) {
$catid = $results[0]->catid;
}
}
// excluded
$is_excluded = false;
// FB like
if($this->getParam('fb_like', '0') == 1 && !$is_excluded && !$this->browser->get('mobile')) {
// configure FB like
$fb_like_attributes = '';
// configure FB like
if($this->getParam('fb_like_send', 1) == 1) { $fb_like_attributes .= ' send="true"'; }
$fb_like_attributes .= ' layout="'.$this->getParam('fb_like_layout', 'standard').'"';
$fb_like_attributes .= ' show_faces="'.$this->getParam('fb_like_show_faces', 'true').'"';
$fb_like_attributes .= ' width="'.$this->getParam('fb_like_width', '500').'"';
$fb_like_attributes .= ' action="'.$this->getParam('fb_like_action', 'like').'"';
$fb_like_attributes .= ' font="'.$this->getParam('fb_like_font', 'arial').'"';
$fb_like_attributes .= ' colorscheme="'.$this->getParam('fb_like_colorscheme', 'light').'"';
GKParser::$customRules['/GK_FB_LIKE_SETTINGS/'] = $fb_like_attributes;
} else {
// clear FB like
GKParser::$customRules['/<gavern:social><fb:like(.*?)fb:like><\/gavern:social>/mi'] = '';
}
// G+
if($this->getParam('google_plus', '1') == 1 && !$is_excluded && !$this->browser->get('mobile')) {
// configure FB like
$google_plus_attributes = '';
// configure FB like
if($this->getParam('google_plus_annotation', 'inline') != 'bubble') {
$google_plus_attributes .= ' annotation="'.$this->getParam('google_plus_annotation', 'inline').'"';
}
if($this->getParam('google_plus_size', 'medium') != 'standard') {
$google_plus_attributes .= ' size="'.$this->getParam('google_plus_size', 'medium').'"';
}
if($this->getParam('google_plus_annotation', 'inline') == 'inline') {
$google_plus_attributes .= ' width="'.$this->getParam('google_plus_width', '250').'"';
}
GKParser::$customRules['/GK_GOOGLE_PLUS_SETTINGS/'] = $google_plus_attributes;
} else {
// clear G+ button
GKParser::$customRules['/<gavern:social><g:plusone(.*?)g:plusone><\/gavern:social>/mi'] = '';
}
// G+ Share button
if($this->getParam('google_plus_share', '1') == 1 && !$is_excluded && !$this->browser->get('mobile')) {
$google_plus_share_attributes = '';
$google_plus_share_attributes .= ' annotation="'.$this->getParam('google_plus_share_annotation', 'vertical-bubble').'"';
if($this->getParam('google_plus_share_annotation', 'vertical-bubble') != 'vertical-bubble') {
$google_plus_share_attributes .= ' height="'.$this->getParam('google_plus_share_size', '20').'"';
}
GKParser::$customRules['/GK_GOOGLE_PLUS_SHARE_SETTINGS/'] = $google_plus_share_attributes;
} else {
// clear G+ share button
GKParser::$customRules['/<gavern:social><g:plus(.*?)g:plus><\/gavern:social>/mi'] = '';
}
// Twitter
if($this->getParam('tweet_btn', '0') == 1 && !$is_excluded && !$this->browser->get('mobile') && $option == 'com_content' && $view == 'article') {
// configure Twitter buttons
$tweet_btn_attributes = '';
$tweet_btn_attributes .= ' data-count="'.$this->getParam('tweet_btn_data_count', 'vertical').'"';
if($this->getParam('tweet_btn_data_via', '') != '') $tweet_btn_attributes .= ' data-via="'.$this->getParam('tweet_btn_data_via', '').'"';
$tweet_btn_attributes .= ' data-lang="'.$this->getParam('tweet_btn_data_lang', 'en').'"';
GKParser::$customRules['/GK_TWEET_BTN_SETTINGS/'] = $tweet_btn_attributes;
} else {
// clear Twitter buttons
GKParser::$customRules['/<gavern:social><a href="http:\/\/twitter.com\/share"(.*?)\/a><\/gavern:social>/mi'] = '';
}
// Digg
if($this->getParam('digg_btn', '0') == 1 && !$is_excluded && !$this->browser->get('mobile')) {
// configure Twitter buttons
$digg_btn_attributes = $this->getParam('digg_btn_style', 'DiggWide');
GKParser::$customRules['/GK_DIGG_SETTINGS/'] = $digg_btn_attributes;
} else {
// clear Twitter buttons
GKParser::$customRules['/<gavern:social><a class="DiggThisButton(.*?)\/a><\/gavern:social>/mi'] = '';
}
// Delicious
if($this->getParam('delicious_btn', '0') != 1 || $is_excluded || $this->browser->get('mobile')) {
// clear Delicious buttons
GKParser::$customRules['/<gavern:social><a href="https?:\/\/www.delicious.com\/save"(.*?)\/a><\/gavern:social>/mi'] = '';
}
// Instapaper
if($this->getParam('instapaper_btn', '0') != 1 || $is_excluded || $this->browser->get('mobile')) {
// clear Delicious buttons
GKParser::$customRules['/<gavern:social><a href="https?:\/\/www.instapaper.com\/hello2(.*?)\/a><\/gavern:social>/mi'] = '';
}
// Pinterest
if($this->getParam('pinterest_btn', '0') == 1 && !$is_excluded && !$this->browser->get('mobile')) {
// configure Pinterest buttons
$pinterest_btn_attributes = $this->getParam('pinterest_btn_style', 'horizontal');
GKParser::$customRules['/GK_PINTEREST_SETTINGS/'] = $pinterest_btn_attributes;
} else {
// clear Pinterest button
GKParser::$customRules['/<gavern:social><a href="https?:\/\/pinterest.com\/pin\/create\/button\/(.*?)\/a><\/gavern:social>/mi'] = '';
}
// check the excluded article IDs and category IDs
if(($option == 'com_content' && $view == 'article' && in_array($id, $excluded_articles, false)) ||
($catid != '' && $option == 'com_content' && $view == 'article' && in_array($catid, $excluded_categories, false)) || $embed_mode) {
$is_excluded = true;
// clear SocialAPI div
GKParser::$customRules['/<gavern:social(.*?)gavern:social>/mis'] = '';
GKParser::$customRules['/<gavern:socialAPI(.*?)gavern:socialAPI>/mis'] = '';
} else {
GKParser::$customRules['/<gavern:social>/mi'] = '';
GKParser::$customRules['/<\/gavern:social>/mi'] = '';
GKParser::$customRules['/<gavern:socialAPI>/mi'] = '';
GKParser::$customRules['/<\/gavern:socialAPI>/mi'] = '';
}
GKParser::$customRules['/<meta name="og:/'] = '<meta property="og:';
}
function mobileParser() {
if($this->browser->get('mobile')) {
// clear desktop elements
GKParser::$customRules['/<gavern:desktop(.*?)gavern:desktop>/mis'] = '';
GKParser::$customRules['/<gavern:mobile>/mis'] = '';
GKParser::$customRules['/<\/gavern:mobile>/mis'] = '';
if(($this->browser->get('browser') == 'iphone' || $this->browser->get('browser') == 'android') &&
$this->getParam('mobile_collapsible', '0') == '1') {
GKParser::$customRules['/<gavern:gk_collapsible\/>/mis'] = ' class="gkCollapsible"';
GKParser::$customRules['/<gavern:gk_collapsible_button\/>/mis'] = '<span class="gkToggle show">Toggle</span>';
} else {
GKParser::$customRules['/<gavern:gk_collapsible\/>/mis'] = ' class="gkFeaturedItemTitle"';
GKParser::$customRules['/<gavern:gk_collapsible_button\/>/mis'] = '';
}
} else {
// clear mobile elements
GKParser::$customRules['/<gavern:mobile(.*?)gavern:mobile>/mis'] = '';
GKParser::$customRules['/<gavern:desktop>/mis'] = '';
GKParser::$customRules['/<\/gavern:desktop>/mis'] = '';
GKParser::$customRules['/<gavern:gk_collapsible\/>/mis'] = '';
GKParser::$customRules['/<gavern:gk_collapsible_button\/>/mis'] = '';
}
}
function googleAnalyticsParser(){
$data = $this->getParam('google_analytics','');
$exploded_data = explode("\r\n", $data);
$script_code = '';
if(count($exploded_data) >= 1) {
for ($i = 0; $i < count($exploded_data); $i++) {
if(isset($exploded_data[$i])) {
$key = $exploded_data[$i];
if(preg_match('/^UA(.*)/i', $key)) {
if($this->getParam('cookie_consent', '0') == 0) {
$script_code .= '<script type="text/javascript">';
} else {
$script_code .= '<script type="text/plain" class="cc-onconsent-analytics">';
}
$script_code .= 'var _gaq = _gaq || []; _gaq.push([\'_setAccount\', \'' .$key. '\']); _gaq.push([\'_trackPageview\']);(function() { var ga = document.createElement(\'script\'); ga.type = \'text/javascript\'; ga.async = true;ga.src = (\'https:\' == document.location.protocol ? \'https://ssl\' : \'http://www\') + \'.google-analytics.com/ga.js\';var s = document.getElementsByTagName(\'script\')[0]; s.parentNode.insertBefore(ga, s); })();</script>';
}
}
}
}
return $script_code;
}
//
//
//
// Other functions
//
//
//
public function overrideArrayParse($data)
{
$results = array();
// exploding settings
$exploded_data = explode("\r\n", $data);
// parsing
for ($i = 0; $i < count($exploded_data); $i++) {
if(isset($exploded_data[$i])) {
// preparing pair key-value
$pair = explode('=', trim($exploded_data[$i]));
// extracting key and value from pair
if(count($pair) == 2){
$key = $pair[0];
$value = $pair[1];
// checking existing of key in config array
if (!isset($this->results[$key])) {
// setting value for key
$results[$key] = $value;
}
}
}
}
// return results array
return $results;
}
//
//
// Function for CSS/JS compression
//
//
function registerCache() {
$dispatcher = JDispatcher::getInstance();
$dispatcher->register('onBeforeRender', 'useCache');
}
function registerJSCompression() {
$dispatcher = JDispatcher::getInstance();
$dispatcher->register('onBeforeCompileHead', 'useJSCompression');
}
//
//
//
// Override of the Joomla API functions
//
//
//
public function addCSS($url) {
$this->API->addStyleSheet($url);
}
public function addJS($url) {
$this->API->addScript($url);
}
public function addCSSRule($code) {
$this->API->addStyleDeclaration($code);
}
public function addJSFragment($code) {
$this->API->addScriptDeclaration($code);
}
public function getParam($key, $default) {
return $this->API->params->get($key, $default);
}
public function modules($rule) {
return $this->API->countModules($rule);
}
public function URLbase() {
return JURI::base();
}
public function URLtemplate() {
return JURI::base() . "templates/" . $this->API->template;
}
public function URLpath() {
return JPATH_SITE;
}
public function URLtemplatepath() {
return $this->URLpath() . DS . "templates" . DS . $this->API->template;
}
public function getPageName() {
$config = new JConfig();
return $config->sitename;
}
}
if(!function_exists('GKParserPlugin')){
function GKParserPlugin(){
$parser = new GKParser();
}
}
if(!function_exists('useCache')){
function useCache() {
$document = JFactory::getDocument();
$cache_css = $document->params->get('css_compression');
$overwrite = $document->params->get('css_cache');
$toAddURLs = array();
$toRemove = array();
$scripts = array();
$css_urls = array();
if($document->params->get('jscss_excluded') != '') {
$toRemove = explode(',',$document->params->get('jscss_excluded'));
}
if ($cache_css) {
foreach ($document->_styleSheets as $strSrc => $strAttr) {
if (!preg_match('/\?.{1,}$/', $strSrc) && (!isset($strAttr['media']) || $strAttr['media'] == '')) {
$break = false;
if(count($toRemove) > 0) {
foreach ($toRemove as $remove) {
$remove = str_replace(' ', '', $remove);
if(strpos($strSrc, $remove) !== false) {
$toAddURLs[] = $strSrc;
$break = true;
continue;
}
}
}
if(!$break) {
if (!preg_match('/\?.{1,}$/', $strSrc)) {
$srcurl =cleanUrl($strSrc);
if (!$srcurl) continue;
//remove this css and add later
if($srcurl != 'components/com_community/templates/gk_style/css/style.css') {
unset($document->_styleSheets[$strSrc]);
$path = str_replace('/', DS, $srcurl);
$css_urls[] = array(JPATH_SITE . DS . $path, $srcurl);
}
//$document->_styleSheets = array();
}
}
}
}
}
// re-add external scripts
foreach($toAddURLs as $url) {
$document->addStylesheet($url);
}
if ($cache_css) {
$url = optimizecss($css_urls, $overwrite);
if ($url) {
$document->addStylesheet($url);
} else {
foreach ($css_urls as $urls) {
$document->addStylesheet($urls[1]); //re-add stylesheet to head
}
}
}
}
}
if(!function_exists('useJSCompression')){
function useJSCompression()
{
$js_urls = array();
$toAddURLs = array();
$document = &JFactory::getDocument();
$toRemove = array();
$break = false;
if($document->params->get('jscss_excluded') != '') {
$toRemove = explode(',',$document->params->get('jscss_excluded'));
}
foreach ($document->_scripts as $strSrc => $strAttr) {
if(count($toRemove) > 0) {
foreach ($toRemove as $remove){
$remove = str_replace(' ', '', $remove);
if(strpos($strSrc, $remove) !== false) {
$toAddURLs[] = $strSrc;
$break = true;
continue;
}
}
}
if(!$break) {
$srcurl = cleanUrl($strSrc);
unset($document->_scripts[$strSrc]);
if (!$srcurl){
$js_urls[] = array($strSrc, $strSrc);
} else {
$path = str_replace('/', DS, $srcurl);
$js_urls[] = array(JPATH_SITE . DS . $path, JURI::base(true) . '/' . $srcurl);
}
}
$break = false;
}
// clean all scripts
$document->_scripts = array();
// optimize or re-add
$url = optimizejs($js_urls, false);
if ($url) {
$document->addScript($url);
} else {
foreach ($js_urls as $urls) $document->addScript($url[1]); //re-add stylesheet to head
}
// re-add external scripts
foreach($toAddURLs as $url) $document->addScript($url);
}
}
if(!function_exists('cleanUrl')){
function cleanUrl($strSrc) {
if (preg_match('/^https?\:/', $strSrc)) {
if (!preg_match('#^' . preg_quote(JURI::base()) . '#', $strSrc)) return false; //external css
$strSrc = str_replace(JURI::base(), '', $strSrc);
} else {
if (preg_match('/^\//', $strSrc)) {
if (!preg_match('#^' . preg_quote(JURI::base(true)) . '#', $strSrc)) return false; //same server, but outsite website
$strSrc = preg_replace('#^' . preg_quote(JURI::base(true)) . '#', '', $strSrc);
}
}
$strSrc = str_replace('//', '/', $strSrc);
$strSrc = preg_replace('/^\//', '', $strSrc);
return $strSrc;
}
}
if(!function_exists('optimizecss')){
function optimizecss($css_urls, $overwrite = false) {
$content = '';
$files = '';
//jimport('joomla.filesystem.file');
foreach ($css_urls as $url) {
$files .= $url[1];
//join css files into one file
$content .= "/* FILE: {$url[1]} */\n" . compresscss(JFile::read($url[1]), $url[1]) . "\n\n";
}
$file = md5($files) . '.css';
if(useGZip()) $file = $file.'.php';
$expireHeader = (int) 30 * 24 * 60 * 60;
if(useGZip()) {
$headers = "<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header(\"Content-type: text/css\");";
$headers .= "header(\"Content-Encoding: gzip\");";
}
$headers .= "header('Expires: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s')) + $expireHeader) . " GMT');";
$headers .= "header('Last-Modified: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s'))) . " GMT');";
$headers .= "header('Cache-Control: Public');";
$headers .= "header('Vary: Accept-Encoding');?>";
$content = $headers . $content;
$url = store_file($content, $file, $overwrite);
return $url;
}
}
if(!function_exists('optimizejs')){
function optimizejs($js_urls, $overwrite = false) {
$content = '';
$files = '';
jimport('joomla.filesystem.file');
foreach ($js_urls as $url) {
$files .= $url[1];
$srcurl = cleanUrl($url[1]);
if (!$srcurl){
if (preg_match('/http/', $url[0])) {
$external = file_get_contents($url[0]);
} else {
$external = file_get_contents('http:'.$url[0]);
}
$content .= "/* FILE: {$url[0]} */\n" . $external . "\n\n";
} else {
$content .= "/* FILE: {$url[1]} */\n" . @JFile::read($url[0]) . "\n\n";
}
}
$file = md5($files) . '.js';
if(useGZip()) $file = $file.'.php';
$path = JPATH_SITE . DS . 'cache' . DS . 'gk'. DS . $file;
if (is_file($path) && filesize($path) > 0) {
// skip compression and leave current URL
} else {
$content = compressjs($content);
}
$expireHeader = (int) 30 * 24 * 60 * 60;
if(useGZip()) {
$headers = "<?php if(extension_loaded('zlib')){ob_start('ob_gzhandler');} header(\"Content-type: text/javascript\");";
$headers .= "header(\"Content-Encoding: gzip\");";
}
$headers .= "header('Expires: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s')) + $expireHeader) . " GMT');";
$headers .= "header('Last-Modified: " . gmdate('D, d M Y H:i:s', strtotime(date('D, d M Y H:i:s'))) . " GMT');";
$headers .= "header('Cache-Control: Public');";
$headers .= "header('Vary: Accept-Encoding');?>";
$content = $headers.$content;
$url = store_file($content, $file, true);
return $url;
}
}
if(!function_exists('compressjs')){
function compressjs($data) {
require_once(dirname(__file__) . DS . 'minify' . DS . 'JSMin.php');
$data = JSMin::minify($data);
return $data;
}
}
if(!function_exists('compresscss')){
function compresscss($data, $url) {
global $current_css_url;
$current_css_url = JURI::root() . $url;
/* remove comments */
$data = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $data);
/* remove tabs, spaces, new lines, etc. */
$data = str_replace(array("\r\n", "\r", "\n", "\t", ' ', ' ', ' '), ' ', $data);
/* remove unnecessary spaces */
$data = preg_replace('/[ ]+([{};,:])/', '\1', $data);
$data = preg_replace('/([{};,:])[ ]+/', '\1', $data);
/* remove empty class */
$data = preg_replace('/(\}([^\}]*\{\})+)/', '}', $data);
/* remove PHP code */
$data = preg_replace('/<\?(.*?)\?>/mix', '', $data);
/* replace url*/
$data = preg_replace_callback('/url\(([^\)]*)\)/', 'replaceurl', $data);
return $data;
}
}
if(!function_exists('replaceurl')){
function replaceurl($matches) {
$url = str_replace(array('"', '\''), '', $matches[1]);
global $current_css_url;
$url = converturl($url, $current_css_url);
return "url('$url')";
}
}
if(!function_exists('converturl')){
function converturl($url, $cssurl) {
$base = dirname($cssurl);
if (preg_match('/^(\/|http)/', $url))
return $url;
/*absolute or root*/
while (preg_match('/^\.\.\//', $url)) {
$base = dirname($base);
$url = substr($url, 3);
}
$url = $base . '/' . $url;
return $url;
}
}
if(!function_exists('store_file')){
function store_file($data, $filename, $overwrite = false) {
$path = 'cache' . DS . 'gk';
jimport('joomla.filesystem.folder');
if (!is_dir($path)) JFolder::create($path);
$path = $path . DS . $filename;
$url = JURI::base(true) .DS. 'cache'. DS .'gk' . DS. $filename;
if (is_file($path) && !$overwrite) return $url;
JFile::write($path, $data);
return is_file($path) ? $url : false;
}
}
if(!function_exists('useGZip')){
function useGZip() {
if (!isset($_SERVER['HTTP_ACCEPT_ENCODING'])) {
return false;
} elseif (!extension_loaded('zlib') || ini_get('zlib.output_compression')) {
return false;
} else {
return true;
}
}
}
// EOF
case 'mozilla':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
break;
} else {
$result->set('browser', 'ff');
break;
}
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
case '':
foreach($userAgents as $item)
{
if(preg_match('/'.$item.'/i', $browser->getAgentString())){
$result->set('browser', 'ff');
$result->set('mobile', false);
$result->set('css3', true);
break;
} else {
$result->set('browser', 'handheld');
$result->set('mobile', true);
$result->set('css3', false);
}
}
break;
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/32.0.1700.68 Safari/537.36
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$this->result->set('browser', 'android');
$this->result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else {
$this->result->set('browser', 'chrome');
$this->result->set('mobile', false);
$this->result->set('css3', true);
}
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
<?php
/**
*
* GKBrowser class
*
* @version 3.0.0
* @package Gavern Framework
* @copyright Copyright (C) 2010 - 2012 GavickPro. All rights reserved.
*
*/
// No direct access.
defined('_JEXEC') or die;
class GKBrowser {
public $result;
public function __construct() {
jimport('joomla.environment.browser');
jimport('joomla.base.object');
$browser = JBrowser::getInstance();
$this->result = new JObject();
$this->result->set("tablet", false);
$this->result->set('mobile', false);
$userAgents = array(
'googlebot','msnbot','w3c','yahoo','acme.spider', 'ahoythehomepagefinder', 'aleksika spider', 'ia_archiver', 'alkaline', 'emcspider', 'antibot', 'arachnophilia','architext', 'aretha', 'ariadne', 'arks', 'aspider', 'atn.txt', 'atomz', 'auresys', 'awbot', 'backrub', 'baiduspider', 'bigbrother', 'bjaaland', 'blackwidow', 'blogsphere', 'isspider', 'blogshares bot', 'blogvisioneye', 'blogwatcher', 'blogwise.com-metachecker', 'bloodhound', 'bobby', 'bordermanager', 'boris', 'bravobrian bstop', 'brightnet', 'bspider', 'bumblebee', 'catvschemistryspider', 'calif', 'cassandra', 'ccgcrawl', 'checkbot', 'christcrawler', 'churl', 'cj spider', 'cmc', 'collective', 'combine', 'computer_and_automation_research_institute_crawler', 'robi', 'conceptbot', 'coolbot', 'cosmixcrawler', 'crawlconvera', 'cscrawler', 'cusco', 'cyberspyder', 'cydralspyder', 'daviesbot', 'deepindex', 'denmex websearch', 'deweb', 'blindekuh', 'dienstspider', 'digger','webreader', 'cgireader', 'diibot', 'digout4u', 'directhit', 'dnabot', 'downes', 'download_express', 'dragonbot', 'dwcp', 'e-collector', 'e-societyrobot', 'ebiness', 'echo', 'eit', 'elfinbot', 'emacs', 'enterprise_search', 'esther', 'evliyacelebi', 'exabot', 'exactseek', 'exalead ng', 'ezresult', 'fangcrawl', 'fast-webcrawler', 'fastbuzz.com', 'faxobot', 'feedster crawler', 'felix', 'fetchrover', 'fido', 'fish', 'flurryv', 'fdse', 'fouineur', 'franklin locator', 'freecrawl', 'frontier', 'funnelweb', 'gaisbot', 'galaxybot', 'gama', 'gazz', 'gcreep', 'getbot', 'puu', 'geturl', 'gigabot', 'gnodspider', 'golem', 'googlebot', 'gornker', 'grapnel', 'griffon', 'gromit', 'grub-client', 'hambot', 'hatena antenna', 'havindex', 'octopus', 'hometown', 'htdig', 'htmlgobble', 'pitkow', 'hyperdecontextualizer', 'finnish', 'irobot', 'iajabot', 'ibm', 'illinois state tech labs', 'imagelock', 'incywincy', 'informant', 'infoseek', 'infoseeksidewinder', 'infospider', 'ilse', 'ingrid', 'slurp', 'inspectorwww', 'intelliagent', 'cruiser', 'internet ninja', 'myweb', 'internetseer', 'iron33', 'israelisearch', 'javabee', 'jbot', 'jcrawler', 'jeeves', 'jennybot', 'jetbot', 'jobo', 'jobot', 'joebot', 'jumpstation', 'justview', 'katipo', 'kdd', 'kilroy', 'fireball', 'ko_yappo_robot', 'labelgrabber.txt', 'larbin', 'legs', 'linkidator', 'linkbot', 'linkchecker', 'linkfilter.net url verifier', 'linkscan', 'linkwalker', 'lockon', 'logo_gif', 'lycos', 'mac finder', 'macworm', 'magpie', 'marvin', 'mattie', 'mediafox', 'mediapartners-google', 'mercator', 'mercubot', 'merzscope', 'mindcrawler', 'moget', 'momspider', 'monster', 'mixcat', 'motor', 'mozdex', 'msiecrawler', 'msnbot', 'muscatferret', 'mwdsearch', 'my little bot', 'naverrobot', 'naverbot', 'meshexplorer', 'nederland.zoek', 'netresearchserver', 'netcarta', 'netcraft', 'netmechanic', 'netscoop', 'newscan-online', 'nextopiabot', 'nhse', 'nitle blog spider', 'nomad', 'gulliver', 'npbot', 'nutch', 'nzexplorer', 'obidos-bot', 'occam', 'sitegrabber', 'openfind', 'orb_search', 'overture-webcrawler', 'packrat', 'pageboy', 'parasite', 'patric', 'pegasus', 'perlcrawler', 'perman', 'petersnews', 'pka', 'phantom', 'piltdownman', 'pimptrain', 'pioneer', 'pipeliner', 'plumtreewebaccessor', 'polybot', 'pompos', 'poppi', 'iconoclast', 'pjspider', 'portalb', 'psbot', 'quepasacreep', 'raven', 'rbse', 'redalert', 'resumerobot', 'roadrunner', 'rhcs', 'robbie', 'robofox', 'francoroute', 'robozilla', 'roverbot', 'rules', 'seochat', 'safetynetrobot', 'scooter', 'search_au', 'searchprocess', 'searchspider', 'seekbot', 'semanticdiscovery', 'senrigan', 'sgscout', 'shaggy', 'shaihulud', 'sherlock-spider', 'shoutcast', 'sift', 'simbot', 'ssearcher', 'site-valet', 'sitespider', 'sitetech', 'slcrawler', 'slysearch', 'smartspider', 'snooper', 'solbot', 'soziopath', 'space bison', 'spanner', 'speedy', 'spiderbot', 'spiderline', 'spiderman', 'spiderview', 'spider_monkey', 'splatsearch.com', 'spry', 'steeler', 'suke', 'suntek', 'surveybot', 'sven', 'syndic8', 'szukacz', 'tach_bw', 'tarantula', 'tarspider', 'techbot', 'technoratibot', 'templeton', 'teoma_agent1', 'teradex', 'jubii', 'northstar', 'w3index', 'perignator', 'python', 'tkwww', 'webmoose', 'wombat', 'webfoot', 'wanderer', 'worm', 'timbobot', 'titan', 'titin', 'tlspider', 'turnitinbot', 'ucsd', 'udmsearch', 'ultraseek', 'unlost_web_crawler', 'urlck', 'vagabondo', 'valkyrie', 'victoria', 'visionsearch', 'voila', 'voyager', 'vspider', 'vwbot', 'w3m2', 'wmir', 'wapspider', 'appie', 'wallpaper', 'waypath scout', 'corev', 'web downloader', 'webbandit', 'webbase', 'webcatcher', 'webcompass', 'webcopy', 'webcraftboot', 'webfetcher', 'webfilter', 'webgather', 'weblayers', 'weblinker', 'webmirror', 'webquest', 'webrace', 'webreaper', 'websnarf', 'webspider', 'wolp', 'webstripper', 'webtrends link analyzer', 'webvac', 'webwalk', 'webwalker', 'webwatch', 'wz101', 'wget', 'whatuseek', 'whowhere', 'ferret', 'wired-digital', 'wisenutbot', 'wwwc', 'xenu link sleuth', 'xget', 'cosmos', 'yahoo', 'yandex', 'zao', 'zeus', 'zyborg'
);
$is_IE6 = preg_match('/msie\s(5\.[5-9]|[6]\.[0-9]*).*(win)/i', $browser->
getAgentString()) && !preg_match('/msie\s([7-9]\.[0-9]*).*(win)/i', $browser->
getAgentString());
$fb_crawler = preg_match('/facebook/i', $browser->getAgentString());
$w3c_validator = preg_match('/w3c/i', $browser->getAgentString());
// check if facebook crawler
if ($fb_crawler) {
$this->result->set('browser', 'facebook');
$this->result->set('mobile', false);
$this->result->set('css3', true);
} else {
switch ($browser->getBrowser()) {
case 'mozilla':
if(preg_match('/Android/i', $browser->getAgentString())) {
$this->result->set('browser', 'android');
$this->result->set('mobile', true);
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
break;
} else {
$this->result->set('browser', 'ff');
break;
}
case 'opera':
if(preg_match('/opera\smobi/i', $browser->getAgentString())) {
$this->result->set('browser', 'handheld');
$this->result->set('mobile', true);
} else {
$this->result->set('browser', 'opera');
$this->result->set('mobile', false);
$this->result->set('css3', true);
}
break;
case 'safari':
case 'konqueror':
if (preg_match('/chrome/i', $browser->getAgentString())) {
$this->result->set('browser', 'chrome');
} else {
if (preg_match('/android/i', $browser->getAgentString())) {
$this->result->set('browser', 'android');
if(preg_match('/mobile/i', $browser->getAgentString())) {
$this->result->set('mobile', true);
} else {
$this->result->set('tablet', true);
}
} else {
if (preg_match('/iphone/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else {
if (preg_match('/ipad/i', $browser->getAgentString())) {
$this->result->set('browser', 'ipad');
$this->result->set('tablet', true);
} else {
if (preg_match('/safari/i', $browser->getAgentString())) {
$this->result->set('browser', 'safari');
} else {
if (preg_match('/safari/i', $this->result->browser) || preg_match('/chrome/i', $this->result->browser)) {
$this->result->set('mobile', false);
$this->result->set('css3', true);
} else {
$this->result->set('mobile', true);
$this->result->set('css3', false);
}
}
}
}
}
}
break;
case 'msie':
if (preg_match('/iemobile/i', $browser->getAgentString())) {
$this->result->set('mobile', true);
$this->result->set('browser', 'handheld');
} else {
if ($is_IE6) {
$this->result->set('browser', 'ie6');
$this->result->set('css3', false);
} else {
if (preg_match('/msie\s[7]/i', $browser->getAgentString()))
$this->result->set('browser', 'ie7');
else
if (preg_match('/msie\s[8]/i', $browser->getAgentString()))
$this->result->set('browser', 'ie8');
else
if (preg_match('/msie\s[9]/i', $browser->getAgentString()))
$this->result->set('browser', 'ie9');
$this->result->set('css3', true);
}
$this->result->set('mobile', false);
}
break;
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$this->result->set('browser', 'android');
$this->result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$this->result->set('browser', 'iphone');
$this->result->set('mobile', true);
} else {
$this->result->set('browser', 'chrome');
$this->result->set('mobile', false);
$this->result->set('css3', true);
}
break;
case '':
foreach($userAgents as $item)
{
if(preg_match('/'.$item.'/i', $browser->getAgentString())){
$this->result->set('browser', 'ff');
$this->result->set('mobile', false);
$this->result->set('css3', true);
break;
} else {
$this->result->set('browser', 'handheld');
$this->result->set('mobile', true);
$this->result->set('css3', false);
}
}
break;
}
}
return $this->result;
}
}
// EOF
if ($fb_crawler) {
$result->set('browser', 'facebook');
$result->set('mobile', false);
$result->set('css3', true);
} else {
switch ($browser->getBrowser()) {
case 'opera':
if(preg_match('/opera\smobi/i', $browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true);
} else {
$result->set('browser', 'opera');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'safari':
case 'konqueror':
if (preg_match('/chrome/i', $browser->getAgentString())) {
$result->set('browser', 'chrome');
} else {
if (preg_match('/android/i', $browser->getAgentString())) {
if(preg_match('/Android 3./i', $browser->getAgentString())) {
$result->set('browser', 'safari');
}
else {
$result->set('browser', 'android');
$result->set('mobile', true);
}
} else {
if (preg_match('/iphone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
if (preg_match('/ipad/i', $browser->getAgentString())) {
$result->set('browser', 'ipad');
} else {
if (preg_match('/safari/i', $browser->getAgentString())) {
$result->set('browser', 'safari');
} else {
if (preg_match('/safari/i', $result->browser) || preg_match('/chrome/i', $result->browser)) {
$result->set('mobile', false);
$result->set('css3', true);
} else {
$result->set('mobile', true);
$result->set('css3', false);
}
}
}
}
}
}
break;
case 'msie':
if (preg_match('/iemobile/i', $browser->getAgentString())) {
$result->set('mobile', true);
$result->set('browser', 'handheld');
} else {
if ($is_IE6) {
$result->set('browser', 'ie6');
$result->set('css3', false);
} else {
if (preg_match('/msie\s[7]/i', $browser->getAgentString()))
$result->set('browser', 'ie7');
else
if (preg_match('/msie\s[8]/i', $browser->getAgentString()))
$result->set('browser', 'ie8');
else
if (preg_match('/msie\s[9]/i', $browser->getAgentString()))
$result->set('browser', 'ie9');
$result->set('css3', true);
}
$result->set('mobile', false);
}
break;
case 'blackberry':
if (preg_match('/blackberry/i',$browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true); }
break;
case 'mozilla':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
break;
} else {
$result->set('browser', 'ff');
break;
}
case '':
foreach($userAgents as $item)
{
if(preg_match('/'.$item.'/i', $browser->getAgentString())){
$result->set('browser', 'ff');
$result->set('mobile', false);
$result->set('css3', true);
break;
} else {
$result->set('browser', 'handheld');
$result->set('mobile', true);
$result->set('css3', false);
}
}
break;
}
}
else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'ipad');
$result->set('mobile', false);
$result->set('css3', true);
}
Cyberek wrote:
- Code: Select all
if ($fb_crawler) {
$result->set('browser', 'facebook');
$result->set('mobile', false);
$result->set('css3', true);
} else {
switch ($browser->getBrowser()) {
case 'opera':
if(preg_match('/opera\smobi/i', $browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true);
} else {
$result->set('browser', 'opera');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'safari':
case 'konqueror':
if (preg_match('/chrome/i', $browser->getAgentString())) {
$result->set('browser', 'chrome');
} else {
if (preg_match('/android/i', $browser->getAgentString())) {
if(preg_match('/Android 3./i', $browser->getAgentString())) {
$result->set('browser', 'safari');
}
else {
$result->set('browser', 'android');
$result->set('mobile', true);
}
} else {
if (preg_match('/iphone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
if (preg_match('/ipad/i', $browser->getAgentString())) {
$result->set('browser', 'ipad');
} else {
if (preg_match('/safari/i', $browser->getAgentString())) {
$result->set('browser', 'safari');
} else {
if (preg_match('/safari/i', $result->browser) || preg_match('/chrome/i', $result->browser)) {
$result->set('mobile', false);
$result->set('css3', true);
} else {
$result->set('mobile', true);
$result->set('css3', false);
}
}
}
}
}
}
break;
case 'msie':
if (preg_match('/iemobile/i', $browser->getAgentString())) {
$result->set('mobile', true);
$result->set('browser', 'handheld');
} else {
if ($is_IE6) {
$result->set('browser', 'ie6');
$result->set('css3', false);
} else {
if (preg_match('/msie\s[7]/i', $browser->getAgentString()))
$result->set('browser', 'ie7');
else
if (preg_match('/msie\s[8]/i', $browser->getAgentString()))
$result->set('browser', 'ie8');
else
if (preg_match('/msie\s[9]/i', $browser->getAgentString()))
$result->set('browser', 'ie9');
$result->set('css3', true);
}
$result->set('mobile', false);
}
break;
case 'blackberry':
if (preg_match('/blackberry/i',$browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true); }
break;
case 'mozilla':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
break;
} else {
$result->set('browser', 'ff');
break;
}
case '':
foreach($userAgents as $item)
{
if(preg_match('/'.$item.'/i', $browser->getAgentString())){
$result->set('browser', 'ff');
$result->set('mobile', false);
$result->set('css3', true);
break;
} else {
$result->set('browser', 'handheld');
$result->set('mobile', true);
$result->set('css3', false);
}
}
break;
}
}
This code we have confirmed works fine with all versions of iOS chrome.
Cyberek wrote:
- Code: Select all
if ($fb_crawler) {
$result->set('browser', 'facebook');
$result->set('mobile', false);
$result->set('css3', true);
} else {
switch ($browser->getBrowser()) {
case 'opera':
if(preg_match('/opera\smobi/i', $browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true);
} else {
$result->set('browser', 'opera');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'chrome':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
} else if(preg_match('/Mobile Safari/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPad/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
$result->set('browser', 'chrome');
$result->set('mobile', false);
$result->set('css3', true);
}
break;
case 'safari':
case 'konqueror':
if (preg_match('/chrome/i', $browser->getAgentString())) {
$result->set('browser', 'chrome');
} else {
if (preg_match('/android/i', $browser->getAgentString())) {
if(preg_match('/Android 3./i', $browser->getAgentString())) {
$result->set('browser', 'safari');
}
else {
$result->set('browser', 'android');
$result->set('mobile', true);
}
} else {
if (preg_match('/iphone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
} else {
if (preg_match('/ipad/i', $browser->getAgentString())) {
$result->set('browser', 'ipad');
} else {
if (preg_match('/safari/i', $browser->getAgentString())) {
$result->set('browser', 'safari');
} else {
if (preg_match('/safari/i', $result->browser) || preg_match('/chrome/i', $result->browser)) {
$result->set('mobile', false);
$result->set('css3', true);
} else {
$result->set('mobile', true);
$result->set('css3', false);
}
}
}
}
}
}
break;
case 'msie':
if (preg_match('/iemobile/i', $browser->getAgentString())) {
$result->set('mobile', true);
$result->set('browser', 'handheld');
} else {
if ($is_IE6) {
$result->set('browser', 'ie6');
$result->set('css3', false);
} else {
if (preg_match('/msie\s[7]/i', $browser->getAgentString()))
$result->set('browser', 'ie7');
else
if (preg_match('/msie\s[8]/i', $browser->getAgentString()))
$result->set('browser', 'ie8');
else
if (preg_match('/msie\s[9]/i', $browser->getAgentString()))
$result->set('browser', 'ie9');
$result->set('css3', true);
}
$result->set('mobile', false);
}
break;
case 'blackberry':
if (preg_match('/blackberry/i',$browser->getAgentString())) {
$result->set('browser', 'handheld');
$result->set('mobile', true); }
break;
case 'mozilla':
if(preg_match('/Android/i', $browser->getAgentString())) {
$result->set('browser', 'android');
$result->set('mobile', true);
break;
} else if(preg_match('/iPhone/i', $browser->getAgentString())) {
$result->set('browser', 'iphone');
$result->set('mobile', true);
break;
} else {
$result->set('browser', 'ff');
break;
}
case '':
foreach($userAgents as $item)
{
if(preg_match('/'.$item.'/i', $browser->getAgentString())){
$result->set('browser', 'ff');
$result->set('mobile', false);
$result->set('css3', true);
break;
} else {
$result->set('browser', 'handheld');
$result->set('mobile', true);
$result->set('css3', false);
}
}
break;
}
}
This code we have confirmed works fine with all versions of iOS chrome.