Copyright (C) 2018 Webman Technologies
*/
defined( 'ABSPATH' ) or exit;
/* Contact Form 7 check */
$active_plugins = get_option( 'active_plugins', array() );
if( !in_array( 'contact-form-7/wp-contact-form-7.php',$active_plugins ) )
{
require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
deactivate_plugins('WMAMC-cf7-address-autocomplete/WMAMC-cf7-address-autocomplete.php');
if( isset( $_GET['activate'] ))
unset( $_GET['activate'] );
}
class WMAMC_cf7_address_autocomplete
{
private $fields, $names;
protected static $instance;
protected $adminpage;
protected $generator;
public function __construct()
{
/* plugin activation */
register_activation_hook(__FILE__, array( $this, 'WMAMC_cf7_address_autocomplete_plugin_activate') );
/* plugin deactivation */
register_deactivation_hook(__FILE__, array( $this, 'WMAMC_cf7_address_autocomplete_plugin_deactivate') );
/* add address autocomplete field */
add_action('wpcf7_init', array($this, 'WMAMC_cf7_address_autocomplete_create_address_field'));
/* create google place api menu under contacts menu */
add_action('admin_menu', array($this,'WMAMC_cf7_address_autocomplete_menu_item'));
/* display fields on google place api page */
add_action('admin_init', array($this,'WMAMC_cf7_address_autocomplete_display_gpa_fields'));
/* check version of contact form 7 */
add_action('admin_init', array($this,'WMAMC_cf7_address_autocomplete_wpcf7_version_check'));
/* create tag for address autocomplete in admin panel*/
add_action( 'wpcf7_admin_init', array($this,'WMAMC_cf7_address_autocomplete_add_tag_generator'), 20 );
/* add shortcode for autocomplete field*/
add_action( 'wpcf7_init', array($this, 'WMAMC_cf7_address_autocomplete_shortcode_add'));
/* validation for autocomplete field*/
add_filter( 'wpcf7_validate_address_geo_autocomplete', array($this, 'WMAMC_cf7_address_autocomplete_filter_validation' ), 10, 2);
add_filter( 'wpcf7_validate_address_geo_autocomplete*', array($this, 'WMAMC_cf7_address_autocomplete_filter_validation' ), 10, 2);
/* messages for address autocomplete field */
add_filter( 'wpcf7_messages', array($this, 'WMAMC_cf7_address_autocomplete_messages'));
/* include plugin script*/
add_action( 'wp_footer', array($this,'WMAMC_cf7_gpa_plugin_script'), 21, 1 );
add_action('admin_init', array($this,'WMAMC_cf7_address_autocomplete_load_plugin'));
/* load google api script*/
add_action( 'wp_enqueue_scripts', array($this,'WMAMC_cf7_gpa_load_user_api' ));
/* Validation filter */
// end of construct function
}
/**********************
check if current version of plugin
********************************************/
public function WMAMC_cf7_address_autocomplete_wpcf7_version_check()
{
$version = get_option( 'WMAMC_cf7_address_autocomplete_version' );
return version_compare($version, '1.0.0', '=') ? true : false;
}
/**
* Display an error message when parent plugin is missing
*/
function WMAMC_cf7_address_autocomplete_self_deactivate_notice()
{
?>
" . __( 'Please install and activate contact form 7 plugin before activating this plugin.', 'WMAMC_cf7_address_autocomplete_trdom' ) . ""; ?>
adminpage = add_submenu_page(
'wpcf7',
__('Google Place API','google-place-api'),
__('Google Place API','google-place-api'),
'manage_options',
'google-place-api',
array($this, 'WMAMC_cf7_google_place_admin' ),
'dashicons-admin-post'
);
}
public function WMAMC_cf7_address_autocomplete_load_plugin()
{
/* do stuff once right after activation */
if (is_admin() && get_option('Activated_Plugin') == 'WMAMC-cf7-address-autocomplete')
{
delete_option( 'Activated_Plugin' );
if (!class_exists('WPCF7'))
{
add_action('admin_notices', array($this,'WMAMC_cf7_address_autocomplete_self_deactivate_notice'));
/** Deactivate our plugin if contact form 7 is not installed ***/
deactivate_plugins(plugin_basename(__FILE__));
if (isset($_GET['activate']))
{
unset($_GET['activate']);
}
}
}
}
/***********************
creating google place api page in admin panel
**********************************************************/
public function WMAMC_cf7_google_place_admin()
{
?>
Google Places API Info.
true ) );
// end of function orem_cf7_address_autocomplete_create_address_field
}
/******************
handling autocomplete tag
***********************************************/
public function wpcf7_addrauto_form_tag_handler($tag)
{
/* $tag = new WPCF7_Shortcode($tag); */
if (empty($tag->name))
{
return '';
}
$validation_error = wpcf7_get_validation_error( $tag->name );
$class = wpcf7_form_controls_class( $tag->type, 'wpcf7-autocomplete' );
/* $class = wpcf7_form_controls_class( $tag->type ); */
if ( $validation_error )
{
$class .= ' wpcf7-not-valid';
}
$atts = array();
$atts['size'] = $tag->get_size_option( '40' );
$atts['maxlength'] = $tag->get_maxlength_option();
$atts['class'] = $tag->get_class_option( $class );
$atts['id'] = $tag->get_id_option();
$atts['tabindex'] = $tag->get_option( 'tabindex', 'int', true );
if ( $tag->has_option( 'readonly' ) )
{
$atts['readonly'] = 'readonly';
}
if ( $tag->is_required() )
{
$atts['aria-required'] = 'true';
}
$atts['aria-invalid'] = $validation_error ? 'true' : 'false';
if ( $tag->has_option( 'placeholder' ) )
{
$place = $tag->get_option( 'placeholder', '[-0-9a-zA-Z_\s]+', true );
$place = str_replace("_", " ", $place);
$atts['placeholder'] = $place;
}
$atts['type'] = 'text';
$atts['name'] = $tag->name;
$atts = wpcf7_format_atts($atts);
$this->fields[$tag->name] = $tag->values;
$this->names[] = $tag->name;
$html = sprintf(
'%3$s',
sanitize_html_class( $tag->name ), $atts, $validation_error );
return $html;
// end of function wpcf7_addrauto_form_tag_handler
}
/********************
validating the autocomplete field
***************************************************/
public function WMAMC_cf7_address_autocomplete_filter_validation( $result, $tag )
{
$tag = new WPCF7_Shortcode($tag);
$name = $tag->name;
$value = isset( $_POST[$name] )
? trim( wp_unslash( strtr( (string) $_POST[$name], "\n", " " ) ) )
: '';
if ( $tag->is_required() && '' == $value)
{
$result->invalidate( $tag, wpcf7_get_message( 'invalid_required' ) );
}
return $result;
}
/************************
tag is generated for address autocomplete
*********************************************/
public function WMAMC_cf7_address_autocomplete_add_tag_generator()
{
if ( ! function_exists( 'wpcf7_add_tag_generator' ) )
return;
wpcf7_add_tag_generator( 'address_geo_autocomplete', __( 'Address Autocomplete', 'WMAMC_cf7_address_autocomplete_trdom' ),
'tb-tg-pane-autocomplete', array($this, 'WMAMC_cf7_address_autocomplete_tag_generator_addrauto' ) );
}
/******************
address autocomplete tag details and html genrated
*********************************************************/
public function WMAMC_cf7_address_autocomplete_tag_generator_addrauto($contact_form, $args = '' )
{
$args = wp_parse_args( $args, array() );
$type = 'address_geo_autocomplete';
$description = __( "Generate a form-tag for a group of autocomplete field.", 'WMAMC_cf7_address_autocomplete_trdom' );
$desc_link ="";
?>
array(
'description' => __( "The value selected is invalid.", 'WMAMC_cf7_address_autocomplete_trdom' ),
'default' => __( 'Autocomplete value seems invalid.', 'WMAMC_cf7_address_autocomplete_trdom' )
),
'invalid_required' => array(
'description' => 'Please fill in the required field.',
'default' => 'Please fill in the required field.'
) ) );
}
public function WMAMC_cf7_address_autocomplete_plugin_activate()
{
$user_permission = current_user_can( 'update_core' );
if ($user_permission == true)
{
add_option('Activated_Plugin', 'WMAMC-cf7-address-autocomplete');
}
$version = get_option( 'WMAMC_cf7_address_autocomplete_version' );
if( version_compare($version, '5.0.1', '<'))
{
// Do some special things when we update to 5.0.1.
}
if ($user_permission == true)
{
update_option( 'WMAMC_cf7_address_autocomplete_version','1.0.0');
}
// end of function orem_cf7_address_autocomplete_plugin_activate
}
public function WMAMC_cf7_address_autocomplete_plugin_deactivate()
{
// end of function orem_cf7_address_autocomplete_plugin_deactivate
}
public function WMAMC_cf7_address_autocomplete_instance()
{
if ( is_null( self::$instance ) ) {
self::$instance = new self();
}
return self::$instance;
// end of function orem_cf7_address_autocomplete_instance
}
// end of class Orem_cf7_address_autocomplete
}
function WMAMC_cf7_address_autocomplete()
{
return WMAMC_cf7_address_autocomplete::WMAMC_cf7_address_autocomplete_instance();
}
WMAMC_cf7_address_autocomplete();
?>