223 lines
4.6 KiB
PHP
223 lines
4.6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* $Desc$
|
||
|
*
|
||
|
* @version $Id$
|
||
|
* @package opalestate
|
||
|
* @author Opal Team <info@wpopal.com >
|
||
|
* @copyright Copyright (C) 2019 wpopal.com. All Rights Reserved.
|
||
|
* @license GNU/GPL v2 or later http://www.gnu.org/licenses/gpl-2.0.html
|
||
|
*
|
||
|
* @website http://www.wpopal.com
|
||
|
* @support http://www.wpopal.com/support/forum.html
|
||
|
*/
|
||
|
|
||
|
if ( ! defined( 'ABSPATH' ) ) {
|
||
|
exit; // Exit if accessed directly
|
||
|
}
|
||
|
|
||
|
class OpalEstate_User_Search {
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
protected $user_id = 0;
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public static function get_instance() {
|
||
|
static $_instance;
|
||
|
if ( ! $_instance ) {
|
||
|
$_instance = new self();
|
||
|
}
|
||
|
|
||
|
return $_instance;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function __construct() {
|
||
|
add_action( 'init', [ $this, 'init' ] );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Set values when user logined in system
|
||
|
*/
|
||
|
public function init() {
|
||
|
|
||
|
global $current_user;
|
||
|
wp_get_current_user();
|
||
|
|
||
|
$this->user_id = $current_user->ID;
|
||
|
|
||
|
add_filter( 'opalestate_management_user_menu', [ $this, 'dashboard_menu' ] );
|
||
|
add_action( 'wp_ajax_opalestate_ajx_save_search', [ $this, 'do_save' ] );
|
||
|
add_action( 'wp_ajax_nopriv_opalestate_ajx_save_search', [ $this, 'do_save' ] );
|
||
|
|
||
|
add_shortcode( 'opalestate_user_saved_search', [ $this, 'savedsearch_page' ] );
|
||
|
|
||
|
add_filter( 'opalestate_user_content_saved_search_page', [ $this, 'savedsearch_page' ] );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function get_search_by_code( $code ) {
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$query = " SELECT * FROM " . $wpdb->prefix . "opalestate_usersearch WHERE code like %s ";
|
||
|
|
||
|
$items = $wpdb->get_results( $wpdb->prepare( $query, $code ) );
|
||
|
|
||
|
if ( isset( $items[0] ) ) {
|
||
|
return $items[0];
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function has_existed( $params ) {
|
||
|
return $this->get_search_by_code( md5( $params ) );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function insert( $data ) {
|
||
|
global $wpdb;
|
||
|
|
||
|
$args = [
|
||
|
'name' => '',
|
||
|
'params' => '',
|
||
|
'code' => '',
|
||
|
'user_id' => $this->user_id,
|
||
|
];
|
||
|
|
||
|
$args = array_merge( $args, $data );
|
||
|
$args['code'] = md5( $data['params'] );
|
||
|
|
||
|
$id = $wpdb->insert( $wpdb->prefix . 'opalestate_usersearch', $args );
|
||
|
|
||
|
return $id;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public static function install() {
|
||
|
try {
|
||
|
if ( ! function_exists( 'dbDelta' ) ) {
|
||
|
require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
|
||
|
}
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$charset_collate = $wpdb->get_charset_collate();
|
||
|
|
||
|
$sql = 'CREATE TABLE IF NOT EXISTS ' . $wpdb->prefix . 'opalestate_usersearch' . ' (
|
||
|
id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||
|
name VARCHAR(255),
|
||
|
params VARCHAR(255),
|
||
|
code VARCHAR(255),
|
||
|
user_id INT(11) DEFAULT 0
|
||
|
) ' . $charset_collate;
|
||
|
dbDelta( $sql );
|
||
|
|
||
|
} catch ( Exception $e ) {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function do_save() {
|
||
|
if ( $this->user_id > 0 && isset( $_POST['params'] ) && isset( $_POST['name'] ) && ! empty( $_POST['name'] ) && ! empty( $_POST['params'] ) ) {
|
||
|
if ( ! $this->has_existed( $_POST['params'] ) ) {
|
||
|
$this->insert( [ 'name' => sanitize_text_field( $_POST['name'] ), 'params' => $_POST['params'] ] );
|
||
|
$result = [ 'status' => true, 'message' => esc_html__( 'Saved this search successful.', 'opalestate-pro' ) ];
|
||
|
} else {
|
||
|
$result = [ 'status' => false, 'message' => esc_html__( 'You saved this search', 'opalestate-pro' ) ];
|
||
|
}
|
||
|
} else {
|
||
|
$result = [ 'status' => false, 'message' => esc_html__( 'Please sign in to save this search.', 'opalestate-pro' ) ];
|
||
|
}
|
||
|
|
||
|
echo json_encode( $result );
|
||
|
|
||
|
die;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function do_delete( $id ) {
|
||
|
|
||
|
global $wpdb;
|
||
|
if ( $this->user_id ) {
|
||
|
$wpdb->delete( $wpdb->prefix . "opalestate_usersearch", [ 'id' => $id, 'user_id' => $this->user_id ], [ '%d' ] );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function get_list() {
|
||
|
|
||
|
global $wpdb;
|
||
|
|
||
|
$query = " SELECT * FROM " . $wpdb->prefix . "opalestate_usersearch where user_id=" . $this->user_id;
|
||
|
|
||
|
return $wpdb->get_results( $query );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function is_saved() {
|
||
|
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function dashboard_menu( $menu ) {
|
||
|
$menu['savedsearch'] = [
|
||
|
'icon' => 'fa fa-search',
|
||
|
'link' => 'saved_search',
|
||
|
'title' => esc_html__( 'Saved Search', 'opalestate-pro' ),
|
||
|
'id' => 0,
|
||
|
];
|
||
|
|
||
|
return $menu;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function savedsearch_page() {
|
||
|
if ( isset( $_GET['doaction'] ) && $_GET['doaction'] == 'delete' && isset( $_GET['id'] ) ) {
|
||
|
$this->do_delete( absint( $_GET['id'] ) );
|
||
|
}
|
||
|
|
||
|
return opalestate_load_template_path( 'user-search/content-savedsearch' );
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
*
|
||
|
*/
|
||
|
public function render_button() {
|
||
|
echo opalestate_load_template_path( 'user-search/render-form' );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( opalestate_options( 'enable_saved_usersearch', 'on' ) == 'on' ) {
|
||
|
OpalEstate_User_Search::get_instance();
|
||
|
}
|