Add Mobile Detect #65

Open
glaydston wants to merge 8 commits from mcontigo/master into master
7 changed files with 2771 additions and 1192 deletions

79
.gitignore vendored
View file

@ -1,2 +1,81 @@
vendor
composer.lock
### Example user template template
### Example user template
# IntelliJ project files
.idea
*.iml
out
gen### OSX template
*.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff:
.idea/workspace.xml
.idea/tasks.xml
.idea/dictionaries
.idea/vcs.xml
.idea/jsLibraryMappings.xml
# Sensitive or high-churn files:
.idea/dataSources.ids
.idea/dataSources.xml
.idea/dataSources.local.xml
.idea/sqlDataSources.xml
.idea/dynamic.xml
.idea/uiDesigner.xml
# Gradle:
.idea/gradle.xml
.idea/libraries
# Mongo Explorer plugin:
.idea/mongoSettings.xml
## File-based project format:
*.iws
## Plugin-specific files:
# IntelliJ
/out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties

View file

@ -86,6 +86,7 @@ Many thanks for donations, contributors, supporters, testers & bug reporters:
* 7th Veil, LLC
* Julia Harsch
* Grant Berntsen
* [Glaydston Veloso](https://github.com/glaydston)
== Installation ==
@ -135,6 +136,12 @@ Version numbering logic:
* every .B version indicates new features.
* every ..C indicates bugfixes for A.B version.
= 1.12.0 =
*2016-11-09*
* Add new class to detect mobile devices
* Create a cache to mobile and desktop version
= 1.11.1 =
*2016-04-21*

1453
backends/mobile-detect.php Normal file

File diff suppressed because one or more lines are too long

View file

@ -227,7 +227,7 @@ abstract class WP_FFPC_ABSTRACT {
* callback function to add settings link to plugins page
*
* @param array $links Current links to add ours to
*
* @return array $links Current links
*/
public function plugin_settings_link ( $links ) {
$settings_link = '<a href="' . $this->settings_link . '">' . __translate__( 'Settings', 'wp-ffpc') . '</a>';
@ -359,7 +359,7 @@ abstract class WP_FFPC_ABSTRACT {
*
* @param mixed $var Variable to dump
* @param boolean $ret Return text instead of printing if true
*
* @return mixed $var Variable to dump
*/
protected function print_var ( $var , $ret = false ) {
if ( @is_array ( $var ) || @is_object( $var ) || @is_bool( $var ) )
@ -401,7 +401,7 @@ abstract class WP_FFPC_ABSTRACT {
* @param $print
* boolean: is true, the options will be printed, otherwise the string will be returned
*
* @return
* @return mixed
* prints or returns the options string
*
*/
@ -594,9 +594,9 @@ abstract class WP_FFPC_ABSTRACT {
* display formatted alert message
*
* @param string $msg Error message
* @param string $error "level" of error
* @param mixed $level "level" of error
* @param boolean $network WordPress network or not, DEPRECATED
*
* @return mixed
*/
static public function alert ( $msg, $level=LOG_WARNING, $network=false ) {
if ( empty($msg)) return false;

View file

@ -70,7 +70,7 @@ else {
}
/* no cache for WooCommerce URL patterns */
if ( isset($wp_ffpc_config['nocache_woocommerce']) && !empty($wp_ffpc_config['nocache_woocommerce']) &&
if ( isset($wp_ffpc_config['nocache_woocommerce']) && !empty($wp_ffpc_config['nocache_woocommerce']) &&
isset($wp_ffpc_config['nocache_woocommerce_url']) && trim($wp_ffpc_config['nocache_woocommerce_url']) ) {
$pattern = sprintf('#%s#', trim($wp_ffpc_config['nocache_woocommerce_url']));
if ( preg_match($pattern, $wp_ffpc_uri) ) {
@ -145,7 +145,21 @@ if ( $wp_ffpc_backend->status() === false ) {
}
/* try to get data & meta keys for current page */
$wp_ffpc_keys = array ( 'meta' => $wp_ffpc_config['prefix_meta'], 'data' => $wp_ffpc_config['prefix_data'] );
/* include the mobile detect */
include_once ('backends/mobile-detect.php');
$mobile_detect = new Mobile_Detect;
$wp_ffpc_keys = array();
/* verify if mobile device (phones or tablets). */
if($mobile_detect->isMobile()){
__wp_ffpc_debug__('Set the ffpc keys to the mobile version');
$wp_ffpc_keys = array ( 'meta' => $wp_ffpc_config['prefix_meta_mobile'], 'data' => $wp_ffpc_config['prefix_data_mobile'] );
} else {
__wp_ffpc_debug__('Set the ffpc keys to the desktop version');
$wp_ffpc_keys = array( 'meta' => $wp_ffpc_config['prefix_meta'], 'data' => $wp_ffpc_config['prefix_data'] );
}
$wp_ffpc_values = array();
__wp_ffpc_debug__ ( "Trying to fetch entries");
@ -259,7 +273,7 @@ if ( isset($wp_ffpc_config['generate_time']) && $wp_ffpc_config['generate_time']
$mtime = explode ( " ", microtime() );
$wp_ffpc_gentime = ( $mtime[1] + $mtime[0] ) - $wp_ffpc_gentime;
$insertion = "\n<!-- WP-FFPC cache output stats\n\tcache engine: ". $wp_ffpc_config['cache_type'] ."\n\tUNIX timestamp: ". time() . "\n\tdate: ". date( 'c' ) . "\n\tfrom server: ". $_SERVER['SERVER_ADDR'] . " -->\n";
$insertion = "\n<!-- \n\tCache Engine: ". $wp_ffpc_config['cache_type'] ."\n\tDate: ". date( 'c' ) . " -->\n";
$index = stripos( $wp_ffpc_values['data'] , '</body>' );
$wp_ffpc_values['data'] = substr_replace( $wp_ffpc_values['data'], $insertion, $index, 0);
@ -309,6 +323,8 @@ function wp_ffpc_callback( $buffer ) {
global $wp_ffpc_backend;
/* check is it's a redirect */
global $wp_ffpc_redirect;
/* check is it's a mobile version*/
global $mobile_detect;
/* no is_home = error, WordPress functions are not availabe */
if (!function_exists('is_home'))
@ -458,10 +474,15 @@ function wp_ffpc_callback( $buffer ) {
/* add generation info is option is set, but only to HTML */
if ( $wp_ffpc_config['generate_time'] == '1' && stripos($buffer, '</body>') ) {
global $wp_ffpc_gentime;
/* verify the device type to output into the generation stats */
$device_type = $mobile_detect -> isMobile() ? 'mobile': 'desktop';
__wp_ffpc_debug__('The device type is: ' . $device_type);
$mtime = explode ( " ", microtime() );
$wp_ffpc_gentime = ( $mtime[1] + $mtime[0] )- $wp_ffpc_gentime;
$insertion = "\n<!-- WP-FFPC cache generation stats" . "\n\tgeneration time: ". round( $wp_ffpc_gentime, 3 ) ." seconds\n\tgeneraton UNIX timestamp: ". time() . "\n\tgeneraton date: ". date( 'c' ) . "\n\tgenerator server: ". $_SERVER['SERVER_ADDR'] . " -->\n";
$insertion = "\n<!-- WP-FFPC cache generation stats" . "\n\tgeneration time: ". round( $wp_ffpc_gentime, 3 ) ." seconds\n\tgeneraton UNIX timestamp: ". time() . "\n\tgeneraton date: ". date( 'c' ) . "\n\tDevice Type: " . $device_type . "\n\tgenerator server: ". $_SERVER['SERVER_ADDR'] . " -->\n";
$index = stripos( $buffer , '</body>' );
$to_store = substr_replace( $buffer, $insertion, $index, 0);
@ -480,10 +501,10 @@ function wp_ffpc_callback( $buffer ) {
*/
$to_store = apply_filters( 'wp-ffpc-to-store', $to_store );
$prefix_meta = $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_meta'] );
$prefix_meta = ($mobile_detect -> isMobile())? $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_meta_mobile'] ): $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_meta'] );
$wp_ffpc_backend->set ( $prefix_meta, $meta );
$prefix_data = $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_data'] );
$prefix_data = ($mobile_detect -> isMobile())? $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_data_mobile'] ): $wp_ffpc_backend->key ( $wp_ffpc_config['prefix_data'] );
$wp_ffpc_backend->set ( $prefix_data , $to_store );
if ( !empty( $meta['status'] ) && $meta['status'] == 404 ) {

File diff suppressed because it is too large Load diff

View file

@ -3,7 +3,7 @@
Plugin Name: WP-FFPC
Plugin URI: https://github.com/petermolnar/wp-ffpc
Description: WordPress in-memory full page cache plugin
Version: 1.11.1
Version: 1.12.0
Author: Peter Molnar <hello@petermolnar.eu>
Author URI: http://petermolnar.eu/
License: GPLv3
@ -44,7 +44,9 @@ $wp_ffpc_defaults = array (
'expire_taxonomy' => 300,
'invalidation_method' => 0,
'prefix_meta' => 'meta-',
'prefix_meta_mobile' => 'meta-mobile-',
'prefix_data' => 'data-',
'prefix_data_mobile' => 'data-mobile-',
'charset' => 'utf-8',
'log' => true,
'cache_type' => 'memcached',
@ -69,4 +71,4 @@ $wp_ffpc_defaults = array (
'hashkey' => false,
);
$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.11.2', 'WP-FFPC', $wp_ffpc_defaults, 'PeterMolnar_WordPressPlugins_wp-ffpc_HU' , 'WP-FFPC' , 'FA3NT7XDVHPWU' );
$wp_ffpc = new WP_FFPC ( 'wp-ffpc', '1.12.0', 'WP-FFPC', $wp_ffpc_defaults, 'PeterMolnar_WordPressPlugins_wp-ffpc_HU' , 'WP-FFPC' , 'FA3NT7XDVHPWU' );