• Resolved wrappingduke

    (@wrappingduke)


    Hello,

    I’m attempting to activate Equivalent Mobile Redirect plugin but receiving the following error:

    “Parse error: syntax error, unexpected….wp-content\plugins\equivalent-mobile-redirect\equivalent-mobile-redirect.php on line 74”

    Here’s the code for php file where the error is occurring:

    <?php
    /*
    Plugin Name: Equivalent Mobile Redirect
    Description: Detect and redirect mobile visitors to the equivalent page on your mobile site.
    Version: 4.2
    Author: uniquelylost
    Author URI: https://ndstud.io/
    License: GPL3
    */
    
    // Exit if accessed directly
        if ( ! defined( 'ABSPATH' ) ) {
            die;
        }
    
    //START ADD ADMIN PANEL
    require_once ('includes/emr-options.php' );
    
    //END ADD ADMIN PANEL
    
    // Start your engines!
    new NDG_Speedy_Page_Redirect;
    
    class NDG_Speedy_Page_Redirect {
    
    	/**
    	 * Plugin version number.
    	 *
    	 * @const string
    	 */
    	const VERSION = '4.2';
    
    	/**
    	 * List of post types for which to enable this plugin.
    	 * Note: can be filtered via "ndg_spr_post_types".
    	 *
    	 * @var array
    	 */
    	public $post_types;
    
    	/**
    	 * Redirection data from the postmeta table, structured by blog_id and post_id.
    	 *
    	 * @var array
    	 */
    	public $data;
    
    	/**
    	 * Constructor.
    	 *
    	 * @return void
    	 */
    	public function __construct() {
    		// Run update routine if needed, also upon activation
    		if ( version_compare( self::VERSION, get_option( 'ndg_spr_version', 0 ), '>' ) ) {
    			$this->update();
    		}
    
    		// This init action should happen after register_post_type calls: priority > 10
    		add_action( 'init', array( $this, 'init' ), 20 );
    
    		add_action( 'plugins_loaded', array( $this, 'activate' ) );
    	}
    
    	/**
    		@brief		During activation, update the settings.
    		@since		2018-11-08 20:01:16
    	**/
    	public function activate()
    	{
    		$options = get_option( 'rooter2484_theme_options' );
    		if ( ! $options )
    			return;
    		$new_options = [
    			'emr_tablets' => ( $options[ 'emrlego' ] == 'plumbers' ? 'yes' : 'no' ),
    			'emr_all_select' => ( $options[ 'emrall' ]  == 'rediryes' ? 'yes' : 'no' ),
    			'emr_redir_all_url' => $options[ 'redirallurl' ],
    			'emr_front_page' => ( $options[ 'emrfrontpage' ] == 'frontyes' ? 'yes' : 'no' ),
    			'emr_redir_front_url' => $options[ 'frontpageurl' ],
    		];
    		update_option( 'emr_settings', $new_options );
    		delete_option( 'rooter2484_theme_options' );
    	}
    
    	/**
    	 * Update the plugin to a newer version.
    	 *
    	 * @return void
    	 */
    	public function update() {
    		// Store version of the installed plugin for future updates
    		update_option( 'ndg_spr_version', self::VERSION );
    	}
    
    	/**
    	 * Initialize the plugin.
    	 *
    	 * @return void
    	 */
    	public function init() {
    
    		// Automatically include all public custom post types
    		$this->post_types = array_merge(
    			array( 'page' => 'page', 'post' => 'post' ),
    			get_post_types( array( '_builtin' => false ) )
    		);
    
    		// Allow user to modify the post types
    		$this->post_types = apply_filters( 'ndg_spr_post_types', $this->post_types );
    
    		// Avoid needless work
    		if ( empty( $this->post_types ) )
    			return;
    
    		// Mirror the post types array so we can do fast isset() checks on the keys
    		$this->post_types = array_combine( $this->post_types, $this->post_types );
    
    		// Add the link actions only for the applicable post types: pages, posts and/or custom post types
    		if ( isset( $this->post_types['page'] ) ) {
    			add_action( 'page_link', array( $this, 'link' ), 20, 2 );
    		}
    		if ( isset( $this->post_types['post'] ) ) {
    			add_action( 'post_link', array( $this, 'link' ), 20, 2 );
    		}
    		if ( array_diff( $this->post_types, array( 'page', 'post' ) ) ) {
    			add_action( 'post_type_link', array( $this, 'link' ), 20, 2 );
    		}
    
    		// Action for the actual redirect
    		add_action( 'template_redirect', array( $this, 'template_redirect' ), 1);
    
    		// Stuff that's only required in the admin area
    		if ( is_admin() ) {
    			// Meta box setup
    			add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ) );
    			add_action( 'save_post', array( $this, 'save_post' ) );
    		}
    	}
    
    	/**
    	 * Add meta boxes for page redirection to all applicable post types.
    	 *
    	 * @return void
    	 */
    	public function add_meta_boxes() {
    		// Add meta box for each post type
    		foreach ( $this->post_types as $post_type ) {
    			add_meta_box( 'ndg_page_redirect', __( 'Mobile Redirect', 'emr-redirect' ), array( $this, 'meta_box_show' ), $post_type );
    		}
    	}
    
    	/**
    	 * Output the form for the page redirection meta box.
    	 *
    	 * @param object $post post object
    	 * @return void
    	 */
    	public function meta_box_show( $post ) {
    		// Default data entered in the form
    		$default = array(
    			'url_raw' => '', // Don't prefill the field with "https://" because such an incomplete URL triggers an HTML5 error for the "url" input type
    			'status'  => 302,
    		);
    
    		// Load existing redirection data for this post if any
    		$data = (array) $this->get_post_data( $post->ID );
    
    		// Overwrite default values with existing ones
    		$values = array_merge( $default, $data );
    
    		// Add a hidden nonce field for security
    		wp_nonce_field( 'ndg_spr_' . $post->ID, 'ndg_spr_nonce', false );
    
    		// Output the URL field
    		echo '<p>';
    		echo '<label for="ndg_spr_url">' . __( 'Mobile URL:', 'emr-redirect' ) . '</label> ';
    		echo '<input id="ndg_spr_url" name="ndg_spr_url" type="url" value="' . esc_url( $values['url_raw'] ) . '" size="50" style="width:80%" placeholder="https://google.com">';
    		echo '</p>';
    	}
    
    	/**
    	 * Update post redirection data in database.
    	 *
    	 * @param integer $post_id post ID
    	 * @return void
    	 */
    	public function save_post( $post_id ) {
    		// Validate nonce
    		if ( ! isset( $_POST['ndg_spr_nonce'] ) || ! wp_verify_nonce( $_POST['ndg_spr_nonce'], 'ndg_spr_' . $post_id ) )
    			return;
    
    		// Basic clean of the entered URL if any
    		$url = ( isset( $_POST['ndg_spr_url'] ) ) ? trim( (string) $_POST['ndg_spr_url'] ) : '';
    
    		// A URL was entered (standalone protocols like "https://" are considered emtpy)
    		if ( '' !== $url && ! preg_match( '~^[-a-z0-9+.]++://$~i', $url ) ) {
    			// Prepare data array to store in the database
    			$data['url'] = esc_url_raw( $url );
    
    			// Save the data in the postmeta table
    			update_post_meta( $post_id, '_ndg_Speedy_Page_Redirect', $data );
    		}
    		// No URL entered
    		else {
    			// Delete any possible previous data stored for this post
    			delete_post_meta( $post_id, '_ndg_speedy_page_redirect' );
    		}
    	}
    
    	/**
    	 * Return the new destination URL of a post in case of a permanent redirect.
    	 *
    	 * @param string $url URL of the post
    	 * @param integer|object $post post ID or post object
    	 * @return string post URL
    	 */
    	public function link( $url, $post ) {
    		// Only continue if page redirection is enabled for this post type
    		if ( ! isset( $this->post_types[ (string) get_post_type( $post ) ] ) )
    			return $url;
    
    		// page_link action returns ID, post_link action returns object
    		$post_id = ( isset( $post->ID ) ) ? $post->ID : $post;
    
    		// No redirection data found
    		if ( ! $data = $this->get_post_data( $post_id ) )
    			return $url;
    
    		// Return the destination URL
    		return $url;
    	}
    
    	/**
    	 * Perform the actual redirect if needed.
    	 *
    	 * @return void
    	 */
    	public function template_redirect() {
    		global $post;
    
    		//Let's see if we should set the full site cookie
    		if(isset($_GET['view_full_site'])) {
    			$get_cookie_check = $_GET['view_full_site'];
    		}
    		if(isset($get_cookie_check)) {
    			//strip the https://www from the domain
    			$site_url =  site_url();
    			$domain = parse_url($site_url, PHP_URL_HOST);
    
    			if($get_cookie_check =='true'){
    				//set the cookie
    				setcookie("emr_full_site", 1, time()+86400, "/", $domain);
    				$_COOKIE['emr_full_site'] = 1;
    			}
    			if($get_cookie_check =='false'){
    				//set the cookie
    				setcookie("emr_full_site", 0, time()-3600, "/", $domain);
    				$_COOKIE['emr_full_site'] = 0;
    			}
    		}
    		//cookie variable
    		if(isset($_COOKIE['emr_full_site'])) {
    			$full_site_cookie= $_COOKIE['emr_full_site'];
    		}
    		//cookie empty then include
    		if (empty($full_site_cookie)) {
    			if ( !class_exists('Mobile_Detect') ) {
    				require_once('includes/Mobile_Detect.php');
    			}
    			$detect = new Mobile_Detect();
    			//emr option page settings
    			$options = get_option('emr_settings');
    			if (isset($options['emr_on_off'])) {
    				$emr_enabled = $options['emr_on_off'];
    				if ( $emr_enabled == 'off' ) {
    					return;
    				}
    			}
    			$tablets_redirect = $options['emr_tablets'];
    			$mobile_to_one_url = $options['emr_all_select'];
    			$mobile_all_url = $options['emr_redir_all_url'];
    			$nonstatic_homepage_redirect = $options['emr_front_page'];
    			$nonstatic_redirect_url = $options['emr_redir_front_url'];
    			
    			if ( $detect->isMobile() && $mobile_to_one_url == 'yes' ) {
    				if ( $detect->isTablet() && $tablets_redirect == 'no' ) {
    					$detect = "false";
    				}
    				elseif ( $mobile_all_url !="" ) {
    					// redirect all and quit
    					wp_redirect( $mobile_all_url, 302);
    					exit;
    				}
    			}
    			elseif ( $detect->isMobile() && $nonstatic_homepage_redirect == 'yes' && is_home() ) {
    				if ( $detect->isTablet() && $tablets_redirect == 'no' ) {
    					$detect = "false";
    				}
    				elseif ( $nonstatic_redirect_url !="" ) {
    					wp_redirect( $nonstatic_redirect_url, 302 );
    					exit;
    				}
    			}
    			elseif ($detect->isMobile()) {
    				if ( $detect->isTablet() && $tablets_redirect == 'no' ) {
    					$detect = "false";
    				}
    				else {
    					// Finally do the regular mobile redirect and quit
    					// Redirects only apply to pages or single posts
    					if ( ! is_page() && ! is_single() && ! is_front_page() )
    						return;
    					// Only continue if page redirection is enabled for this post type
    					if ( ! isset( $this->post_types[ (string) get_post_type( $post ) ] ) )
    						return;
    					// No redirection data found for this post
    					if ( ! $data = $this->get_post_data( $post->ID ) )
    						return;
    					else {
    						wp_redirect($data['url'], 302);
    						exit;
    					}
    				}
    			}
    		}
    	}
    
    	/**
    	 * Get redirection data for a post.
    	 *
    	 * @param integer|object $post post ID or post object
    	 * @param integer|object $blog blog ID or blog object
    	 * @return array|null post redirection data for the post
    	 */
    	public function get_post_data( $post, $blog = null ) {
    		// Clean post ID
    		$post_id = (int) ( ( isset( $post->ID ) ) ? $post->ID : $post );
    
    		// Clean blog ID
    		if ( ! $blog_id = (int) ( ( isset( $blog->blog_id ) ) ? $blog->blog_id : $blog ) ) {
    			// Use current blog ID by default
    			global $blog_id;
    		}
    
    		// Load redirection data for this blog from the database
    		if ( ! isset( $this->data[ $blog_id ] ) ) {
    			// Load redirection data for all posts of this blog
    			global $wpdb;
    			$rows = $wpdb->get_results( 'SELECT post_id, meta_value FROM ' . $wpdb->postmeta . ' WHERE meta_key = "_ndg_speedy_page_redirect"' );
    
    			// Initialize redirect data for the blog
    			$this->data[ $blog_id ] = array();
    
    			foreach ( $rows as $row ) {
    				// Unserialize data
    				$data = unserialize( $row->meta_value );
    
    				// Store the originally saved URL as raw_url
    				$data['url_raw'] = $data['url'];
    
    				// Generate the full URL in case a relative URL is stored in the database
    				if ( '/' === substr( $data['url'], 0, 1 ) ) {
    					$data['url'] = trailingslashit( get_bloginfo( 'url' ) ) . ltrim( $data['url'], '/' );
    				}
    
    				// Cache redirection data in object property
    				$this->data[ $blog_id ][ (int) $row->post_id ] = $data;
    			}
    		}
    
    		// Return redirection data for post if any
    		return ( isset( $this->data[ $blog_id ][ $post_id ] ) ) ? $this->data[ $blog_id ][ $post_id ] : null;
    	}
    
    }

    Help is appreciated.

    • This topic was modified 6 years, 1 month ago by wrappingduke. Reason: correct link to page
    • This topic was modified 6 years, 1 month ago by wrappingduke.

    The page I need help with: [log in to see the link]

Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Author uniquelylost

    (@uniquelylost)

    Hi @wrappingduke

    What version of WP are you using?

    What version of PHP?

    Also is there any way can you provide the full PHP error message?

    • This reply was modified 6 years, 1 month ago by uniquelylost.
    Thread Starter wrappingduke

    (@wrappingduke)

    Hello,

    Thanks for the reply. It’s appreciated. Here are the answers to your inquiries:

    1. What version of WP are you using? Version 4.9.8
    2. What version of PHP? 5.3
    3. The full PHP error? Parse error: syntax error, unexpected ‘[‘ in E:\web\vanguard\mobile\wp-content\plugins\equivalent-mobile-redirect\equivalent-mobile-redirect.php on line 74

    • This reply was modified 6 years, 1 month ago by wrappingduke.
    Plugin Author uniquelylost

    (@uniquelylost)

    @wrappingduke

    Can you upgrade to atleast PHP 5.6?

    PHP 5.3 reached its end of life and became unsupported unsupported on Aug 14 2014.

    You would be better off upgrading to PHP 7 if you can but if not 5.6 should work.

    Thread Starter wrappingduke

    (@wrappingduke)

    Hello,

    Thanks for the reply. It’s appreciated. PHP was upgraded to 7.0, as you suggestgd and the plugin was activated. However, redirection isn’t occurring. Caching isn’t being done on the desktop, so I’m not sure what’s preventing from happening.

    Redirection to one url has been enabled in the EMR settings and the url has been inputted but to no avail.

    Help is appreciated.

    Plugin Author uniquelylost

    (@uniquelylost)

    Hi, what domain is it for?

    Thread Starter wrappingduke

    (@wrappingduke)

    Plugin Author uniquelylost

    (@uniquelylost)

    hmm that site uses WordPress? Doesn’t look like it does… Mostly when the redirects are not occurring correctly its due to a caching problem. Like a caching plugin please see – https://www.ads-software.com/support/topic/not-working-with-caching-plugins-solution/

    • This reply was modified 6 years, 1 month ago by uniquelylost.
    • This reply was modified 6 years, 1 month ago by uniquelylost.
    Thread Starter wrappingduke

    (@wrappingduke)

    Hi,

    Thanks for the reply. W3 Total cache has been installed and activated w/ the same results, unfortunately. I’m attempting to redirect to the following url:

    https://www.vanguardinfotech.com/mobile/vs/index.html

    The necessary User agents groups for phones and tablets are provided for redirection.

    Plugin Author uniquelylost

    (@uniquelylost)

    What’s happens with no caching enabled do the redirects occur correctly?

    Thread Starter wrappingduke

    (@wrappingduke)

    Hi,

    Thanks for the responses. They were very helpful. I really appreciate it. However, no caching didn’t resolve the problem, so a javascript solution was implemented.

    Thanks again!

Viewing 10 replies - 1 through 10 (of 10 total)
  • The topic ‘Unable to activate plugin’ is closed to new replies.