true, 'message' => esc_html__( 'Success', 'makewebbetter-hubspot-for-woocommerce' ), ); check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $response['status'] = false; $response['message'] = esc_html__( 'Something went wrong. Please verify your HubSpot Connection once.', 'makewebbetter-hubspot-for-woocommerce' ); } } echo wp_json_encode( $response ); wp_die(); } /** * Create new group for contact properties. * * @since 1.0.0 */ public function hubwoo_create_property_group() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['groupName'] ) ) { $group_name = sanitize_key( wp_unslash( $_POST['groupName'] ) ); } $object_type = 'contacts'; $groups = HubWooContactProperties::get_instance()->_get( 'groups' ); $group_details = array(); if ( ! empty( $groups ) ) { foreach ( $groups as $single_group ) { if ( $single_group['name'] == $group_name ) { $group_details = $single_group; break; } } } $response = HubWooConnectionMananager::get_instance()->create_group( $group_details, $object_type ); echo wp_json_encode( $response ); wp_die(); } /** * Get hubwoo group properties by group name. * * @since 1.0.0 */ public function hubwoo_get_group_properties() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( isset( $_POST['groupName'] ) ) { $group_name = sanitize_text_field( wp_unslash( $_POST['groupName'] ) ); $properties = HubWooContactProperties::get_instance()->_get( 'properties', $group_name ); echo wp_json_encode( $properties ); } wp_die(); } /** * Create an group property on ajax request. * * @since 1.0.0 */ public function hubwoo_create_group_property() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( isset( $_POST['propertyDetails'] ) ) { $property_details = map_deep( wp_unslash( $_POST['propertyDetails'] ), 'sanitize_text_field' ); $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $property_details, 'contact' ); $response['body'] = json_decode( $response['body'], true ); echo wp_json_encode( $response ); wp_die(); } } /** * Create deal group property on ajax request. * * @since 1.4.0 */ public function hubwoo_deals_create_property() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $product_properties = Hubwoo::hubwoo_get_product_properties(); $object_type = 'products'; $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $product_properties, $object_type ); if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { update_option( 'hubwoo_product_property_created', 'yes' ); $response['body'] = json_decode( $response['body'], true ); } else if ( 403 == $response['status_code'] ) { update_option( 'hubwoo_product_scope_needed', 'yes' ); update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); } $deal_properties = Hubwoo::hubwoo_get_deal_properties(); $object_type = 'deals'; $response = HubWooConnectionMananager::get_instance()->create_batch_properties( $deal_properties, $object_type ); if ( 201 == $response['status_code'] || 207 == $response['status_code'] ) { update_option( 'hubwoo_deal_property_created', 'yes' ); $response['body'] = json_decode( $response['body'], true ); } echo wp_json_encode( $response ); wp_die(); } /** * Get lists to be created on husbpot. * * @since 1.0.0 */ public function hubwoo_get_lists_to_create() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $lists = HubWooContactProperties::get_instance()->_get( 'lists' ); echo wp_json_encode( $lists ); wp_die(); } /** * Create bulk lists on hubspot. * * @since 1.0.0 */ public function hubwoo_create_list() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( isset( $_POST['listDetails'] ) ) { $list_details = map_deep( wp_unslash( $_POST['listDetails'] ), 'sanitize_text_field' ); $response = HubWooConnectionMananager::get_instance()->create_list( $list_details ); echo wp_json_encode( $response ); } wp_die(); } /** * Create single group on HubSpot. * * @since 1.0.0 */ public function hubwoo_create_single_group() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['name'] ) ) { $group_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); } else { $group_name = ''; } $groups = HubWooContactProperties::get_instance()->_get( 'groups' ); $group_details = ''; $object_type = 'contacts'; if ( is_array( $groups ) && count( $groups ) ) { foreach ( $groups as $single_group ) { if ( $single_group['name'] === $group_name ) { $group_details = $single_group; break; } } } if ( ! empty( $group_details ) ) { $response = HubWooConnectionMananager::get_instance()->create_group( $group_details, $object_type ); } if ( isset( $response['status_code'] ) && ( 201 === $response['status_code'] || 409 === $response['status_code'] ) ) { $add_groups = get_option( 'hubwoo-groups-created', array() ); $add_groups[] = $group_details['name']; update_option( 'hubwoo-groups-created', $add_groups ); } echo wp_json_encode( $response ); wp_die(); } /** * Create single property on HubSpot. * * @since 1.0.0 */ public function hubwoo_create_single_property() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['group'] ) ) { $group_name = sanitize_text_field( wp_unslash( $_POST['group'] ) ); } else { $group_name = ''; } if ( ! empty( $_POST['name'] ) ) { $property_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); } else { $property_name = ''; } $properties = HubWooContactProperties::get_instance()->_get( 'properties', $group_name ); if ( ! empty( $properties ) && count( $properties ) ) { foreach ( $properties as $single_property ) { if ( ! empty( $single_property['name'] ) && $single_property['name'] == $property_name ) { $property_details = $single_property; break; } } } if ( ! empty( $property_details ) ) { $property_details['groupName'] = $group_name; $response = HubWooConnectionMananager::get_instance()->create_property( $property_details, 'contacts' ); } if ( isset( $response['status_code'] ) && ( 201 === $response['status_code'] || 409 === $response['status_code'] ) ) { $add_properties = get_option( 'hubwoo-properties-created', array() ); $add_properties[] = $property_details['name']; update_option( 'hubwoo-properties-created', $add_properties ); } echo wp_json_encode( $response ); wp_die(); } /** * Create single list on hubspot. * * @since 1.0.0 */ public function hubwoo_create_single_list() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( isset( $_POST['name'] ) ) { $list_name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); $lists = HubWooContactProperties::get_instance()->_get( 'lists' ); if ( ! empty( $lists ) && count( $lists ) ) { foreach ( $lists as $single_list ) { if ( ! empty( $single_list['name'] ) && $single_list['name'] == $list_name ) { $list_details = $single_list; break; } } } if ( ! empty( $list_details ) ) { $response = HubWooConnectionMananager::get_instance()->create_list( $list_details ); } if ( isset( $response['status_code'] ) && ( 200 === $response['status_code'] || 409 === $response['status_code'] ) ) { $add_lists = get_option( 'hubwoo-lists-created', array() ); $add_lists[] = $list_name; update_option( 'hubwoo-lists-created', $add_lists ); } echo wp_json_encode( $response ); wp_die(); } } /** * Create single list on hubspot. * * @since 1.0.0 */ public function hubwoo_create_single_workflow() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['name'] ) ) { $name = sanitize_text_field( wp_unslash( $_POST['name'] ) ); $add_workflows = get_option( 'hubwoo-workflows-created', array() ); if ( in_array( $name, $add_workflows ) ) { return; } $workflows = HubWooContactProperties::get_instance()->_get( 'workflows' ); if ( ! empty( $workflows ) ) { foreach ( $workflows as $single_workflow ) { if ( isset( $single_workflow['name'] ) && $single_workflow['name'] == $name ) { $workflow_details = $single_workflow; break; } } } if ( ! empty( $workflow_details ) ) { $response = HubWooConnectionMananager::get_instance()->create_workflow( $workflow_details ); if ( isset( $response['status_code'] ) && ( 200 != $response['status_code'] ) ) { $response = HubwooErrorHandling::get_instance()->hubwoo_handle_response( $response, HubwooConst::HUBWOOWORKFLOW, array( 'current_workflow' => $workflow_details ) ); } if ( 200 == $response['status_code'] ) { $add_workflows[] = $workflow_details['name']; update_option( 'hubwoo-workflows-created', $add_workflows ); $workflow_data = isset( $response['body'] ) ? $response['body'] : ''; if ( ! empty( $workflow_data ) ) { $workflow_data = json_decode( $workflow_data ); $id = isset( $workflow_data->id ) ? $workflow_data->id : ''; update_option( $workflow_details['name'], $id ); } } echo wp_json_encode( $response ); wp_die(); } } } /** * Ajax search for order statuses. * * @since 1.0.0 */ public function hubwoo_search_for_order_status() { $order_statuses = wc_get_order_statuses(); $modified_order_statuses = array(); if ( ! empty( $order_statuses ) ) { foreach ( $order_statuses as $status_key => $single_status ) { $modified_order_statuses[] = array( $status_key, $single_status ); } } echo wp_json_encode( $modified_order_statuses ); wp_die(); } /** * User roles for batch sync. * * @since 1.0.0 */ public function hubwoo_get_for_user_roles() { global $hubwoo; $user_roles = $hubwoo->hubwoo_get_user_roles(); $modified_order_statuses = array(); if ( ! empty( $user_roles ) ) { foreach ( $user_roles as $user_key => $single_role ) { $modified_order_statuses[] = array( $user_key, $single_role ); } } echo wp_json_encode( $modified_order_statuses ); wp_die(); } /** * Callback to sync contacts to hubspot in 1 click. * * @since 1.0.0 */ public function hubwoo_ocs_instant_sync() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['step'] ) ) { $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); } else { $step = ''; } $contact_sync = true; $hubwoo_datasync = new HubwooDataSync(); $total_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); if ( ! $total_need_syncing ) { $percentage_done = 100; $response = array( 'step' => $step + 1, 'progress' => $percentage_done, 'completed' => true, 'nocontacts' => true, ); echo wp_json_encode( $response ); wp_die(); } $users_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user(); $user_data = array(); $args = array(); if ( is_array( $users_need_syncing ) && count( $users_need_syncing ) ) { $user_data = $hubwoo_datasync->get_sync_data( $users_need_syncing ); $args['ids'] = $users_need_syncing; $args['type'] = 'user'; } else { $roles = get_option( 'hubwoo_customers_role_settings', array() ); if ( in_array( 'guest_user', $roles, true ) ) { $contact_sync = false; $user_to_sync = $hubwoo_datasync->hubwoo_get_all_unique_user( false, 'guestOrder' ); $user_data = $hubwoo_datasync->get_guest_sync_data( $user_to_sync ); $args['ids'] = $user_to_sync; $args['type'] = 'order'; } } if ( ! empty( $user_data ) ) { if ( Hubwoo::is_valid_client_ids_stored() ) { $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { $response = HubWooConnectionMananager::get_instance()->create_or_update_contacts( $user_data, $args ); if ( ( count( $user_data ) > 1 ) && isset( $response['status_code'] ) && 400 === $response['status_code'] ) { if ( isset( $response['response'] ) ) { $error_response = json_decode( $response['response'], true ); if ( isset( $error_response['failureMessages'] ) ) { $failure_messages = $error_response['failureMessages']; if ( is_array( $failure_messages ) ) { foreach ( $failure_messages as $failure_error ) { $property_validation_error = isset( $failure_error['propertyValidationResult'] ) ? 1 : 0; if ( $property_validation_error ) { $percentage_done = 100; $response = array( 'step' => $step + 1, 'progress' => $percentage_done, 'completed' => true, 'propertyError' => true, ); echo wp_json_encode( $response ); wp_die(); } } } } } $response = Hubwoo_Admin::hubwoo_split_contact_batch( $user_data ); } $hsocssynced = get_option( 'hubwoo_ocs_contacts_synced', 0 ); if ( ! empty( $user_to_sync ) ) { $hsocssynced += count( $user_to_sync ); } if ( $contact_sync ) { foreach ( $users_need_syncing as $user_id ) { update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); } } else { foreach ( $user_to_sync as $order_id ) { //hpos changes $order = wc_get_order($order_id); $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); $order->save(); } } update_option( 'hubwoo_ocs_contacts_synced', $hsocssynced ); } } } $percentage_done = 0; $total_users = get_option( 'hubwoo_total_ocs_need_sync', 0 ); if ( $total_users ) { $synced = $total_users - $total_need_syncing; $percentage = ( $synced / $total_users ) * 100; $percentage_done = sprintf( '%.2f', $percentage ); } $response = array( 'step' => $step + 1, 'progress' => $percentage_done, 'totalNeedSyncing' => $total_need_syncing, 'synced' => wp_json_encode( $users_need_syncing ), ); $contactqueue = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); if ( ! $contactqueue ) { $response['progress'] = 100; $response['completed'] = true; delete_option( 'hubwoo_total_ocs_need_sync' ); delete_option( 'hubwoo_ocs_contacts_synced' ); } echo wp_json_encode( $response ); wp_die(); } /** * Update workflow listing window when a workflow is created. * * @since 1.0.0 */ public function hubwoo_update_workflow_tab() { global $hubwoo; $created_workflows = get_option( 'hubwoo-workflows-created', '' ); $workflows_dependencies = $hubwoo->hubwoo_workflows_dependency(); $updated_tabs = array(); $dependencies_count = 0; if ( is_array( $workflows_dependencies ) && count( $workflows_dependencies ) ) { foreach ( $workflows_dependencies as $workflows ) { $dependencies_count = count( $workflows['dependencies'] ); $counter = 0; foreach ( $workflows['dependencies'] as $dependencies ) { if ( is_array( $created_workflows ) && count( $created_workflows ) ) { if ( in_array( $dependencies, $created_workflows, true ) ) { $counter++; } } } if ( $counter === $dependencies_count ) { $updated_tabs[] = $workflows['workflow']; } } } echo wp_json_encode( $updated_tabs ); wp_die(); } /** * Email the hubspot API error log. * * @since 1.0.0 */ public function hubwoo_email_the_error_log() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $log_dir = WC_LOG_DIR . 'hubspot-for-woocommerce-logs.log'; $attachments = array( $log_dir ); $to = 'integrations@makewebbetter.com'; $subject = 'HubSpot Pro Error Logs'; $headers = array( 'Content-Type: text/html; charset=UTF-8' ); $message = 'admin email: ' . get_option( 'admin_email', '' ) . '
'; $status = wp_mail( $to, $subject, $message, $headers, $attachments ); if ( 1 === $status ) { $status = 'success'; } else { $status = 'failure'; } update_option( 'hubwoo_pro_alert_param_set', false ); echo wp_json_encode( $status ); wp_die(); } /** * Disconnect hubspot account. * * @since 1.0.0 */ public function hubwoo_disconnect_account() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); global $hubwoo; $delete_meta = false; if ( isset( $_POST['data'] ) ) { $data = map_deep( wp_unslash( $_POST['data'] ), 'sanitize_text_field' ); $delete_meta = 'yes' == $data['delete_meta'] ? true : false; } $hubwoo->hubwoo_switch_account( true, $delete_meta ); echo wp_json_encode( true ); wp_die(); } /** * Get wordpress/woocommerce user roles. * * @since 1.0.0 */ public function hubwoo_get_user_for_current_roles() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $hubwoo_data_sync = new HubwooDataSync(); $unique_users = $hubwoo_data_sync->hubwoo_get_all_unique_user( true ); update_option( 'hubwoo_total_ocs_need_sync', $unique_users ); echo wp_json_encode( $unique_users ); wp_die(); } /** * Get sync status for contact/deal. * * @since 1.0.0 */ public function hubwoo_get_current_sync_status() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['data'] ) ) { $type = map_deep( wp_unslash( $_POST['data'] ), 'sanitize_text_field' ); } else { $type = ''; } if ( isset( $type['type'] ) ) { switch ( $type['type'] ) { case 'contact': $status = get_option( 'hubwoo_background_process_running', false ); break; case 'deal': $status = get_option( 'hubwoo_deals_sync_running', 0 ); break; default: $status = false; break; } echo wp_json_encode( $status ); } wp_die(); } /** * Saving Updates to the Database. * * @since 1.0.0 */ public function hubwoo_save_updates() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( isset( $_POST['updates'] ) && ! empty( $_POST['action'] ) ) { $updates = map_deep( wp_unslash( $_POST['updates'] ), 'sanitize_text_field' ); if ( isset( $_POST['type'] ) ) { $action = map_deep( wp_unslash( $_POST['type'] ), 'sanitize_text_field' ); $status = false; if ( count( $updates ) ) { foreach ( $updates as $db_key => $value ) { if ( 'update' === $action ) { $value = 'EMPTY_ARRAY' === $value ? array() : $value; update_option( $db_key, $value ); } elseif ( 'delete' === $action ) { delete_option( $value ); } } $status = true; } echo wp_json_encode( $status ); wp_die(); } } } /** * Saving Updates to the Database. * * @since 1.0.0 */ public function hubwoo_manage_sync() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['process'] ) ) { $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); if ( ! empty( $process ) ) { if ( 'start-deal' === $process ) { $orders_needs_syncing = Hubwoo_Admin::hubwoo_orders_count_for_deal(); if ( $orders_needs_syncing ) { update_option( 'hubwoo_deals_sync_running', 1 ); update_option( 'hubwoo_deals_sync_total', $orders_needs_syncing ); as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_background' ); } } else { Hubwoo::hubwoo_stop_sync( $process ); } echo true; } } wp_die(); } /** * Manages Vids to Database. * * @since 1.0.0 */ public function hubwoo_manage_vids() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $status = false; if ( ! empty( $_POST['process'] ) ) { $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); if ( ! empty( $process ) ) { switch ( $process ) { case 'contact': update_option( 'hubwoo_contact_vid_update', 1 ); as_schedule_recurring_action( time(), 300, 'hubwoo_update_contacts_vid' ); $status = true; break; case 'deal': delete_option( 'hubwoo_ecomm_order_date_allow' ); $orders_needs_syncing = Hubwoo_Admin::hubwoo_orders_count_for_deal(); if ( $orders_needs_syncing ) { update_option( 'hubwoo_deals_sync_running', 1 ); update_option( 'hubwoo_deals_sync_total', $orders_needs_syncing ); as_schedule_recurring_action( time(), 300, 'hubwoo_deals_sync_background' ); $status = true; } break; default: break; } } } echo wp_json_encode( $status ); wp_die(); } /** * Ajax call to search for deal stages. * * @since 1.0.0 */ public function hubwoo_deals_search_for_stages() { $stages = get_option( 'hubwoo_fetched_deal_stages', array() ); $existing_stages = array(); $deal_stage_id = 'stageId'; if ( 'yes' == get_option( 'hubwoo_ecomm_pipeline_created', 'no' ) ) { $deal_stage_id = 'id'; } if ( is_array( $stages ) && count( $stages ) ) { foreach ( $stages as $stage ) { $existing_stages[] = array( $stage[ $deal_stage_id ], $stage['label'] ); } } echo wp_json_encode( $existing_stages ); wp_die(); } /** * Get orders count for 1 click sync. * * @since 1.0.0 */ public function hubwoo_ecomm_get_ocs_count() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $ocs_order_count = Hubwoo_Admin::hubwoo_orders_count_for_deal(); if ( 1 != get_option( 'hubwoo_deals_sync_running', 0 ) ) { update_option( 'hubwoo_deals_current_sync_total', $ocs_order_count ); } echo wp_json_encode( $ocs_order_count ); wp_die(); } /** * Track sync percentage and eta for background processes * * @since 1.0.0 */ public function hubwoo_sync_status_tracker() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $response = array( 'percentage' => 0, 'is_running' => 'no', ); if ( isset( $_POST['process'] ) ) { $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); if ( ! empty( $process ) ) { switch ( $process ) { case 'contact': if ( get_option( 'hubwoo_background_process_running', false ) ) { $unique_users = Hubwoo::hubwoo_get_total_contact_need_sync(); update_option( 'hubwoo_total_ocs_contact_need_sync', $unique_users ); $users_to_sync = get_option( 'hubwoo_total_ocs_contact_need_sync', 0 ); $current_user_sync = get_option( 'hubwoo_ocs_contacts_synced', 0 ); $perc = round( $current_user_sync * 100 / $users_to_sync ); $response['percentage'] = $perc > 100 ? 100 : $perc; $response['is_running'] = 'yes'; if ( 100 == $response['percentage'] ) { update_option( 'hubwoo_background_process_running', false ); } } break; case 'product': if ( 'yes' == get_option( 'hubwoo_start_product_sync', 'no' ) ) { $total_products = get_option( 'hubwoo_products_to_sync', 0 ); $sync_result = Hubwoo::hubwoo_make_db_query( 'total_synced_products' ); if ( ! empty( $sync_result ) ) { $sync_result = (array) $sync_result[0]; $synced_products = $sync_result['COUNT(post_id)']; if ( 0 != $total_products ) { $response['percentage'] = round( $synced_products * 100 / $total_products ); $response['eta'] = Hubwoo::hubwoo_create_sync_eta( $synced_products, $total_products, 3, 5 ); $response['is_running'] = 'yes'; } } } break; case 'order': if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { $data = Hubwoo::get_sync_status(); $response['percentage'] = $data['deals_progress']; $response['eta'] = $data['eta_deals_sync']; $response['is_running'] = 'yes'; } break; } echo wp_json_encode( $response ); } } wp_die(); } /** * Upserting ecomm bridge settings for hubspot objects-contact,deal,product,line-item * * @since 1.0.0 */ public function hubwoo_ecomm_setup() { check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $response = array( 'status_code' => 404, 'response' => 'E-Commerce Bridge Setup Failed.', ); if ( ! empty( $_POST['process'] ) ) { $process = map_deep( wp_unslash( $_POST['process'] ), 'sanitize_text_field' ); if ( ! empty( $process ) ) { switch ( $process ) { case 'get-total-products': $store = Hubwoo::get_store_data(); break; case 'update-deal-stages': $deal_stages = Hubwoo::fetch_deal_stages_from_pipeline( 'Ecommerce Pipeline', false ); $deal_model = Hubwoo::hubwoo_deal_stage_model(); $process_deal_stages = array_map( function ( $deal_stage_data ) use ( $deal_model ) { $updates = ( isset( $deal_model[ $deal_stage_data['id'] ] ) && ! empty( $deal_model[ $deal_stage_data['id'] ] ) ) ? $deal_model[ $deal_stage_data['id'] ] : ''; if ( ! empty( $updates ) ) { foreach ( $updates as $key => $value ) { if ( array_key_exists( $key, $deal_stage_data ) ) { $deal_stage_data[ $key ] = $value; } } } return $deal_stage_data; }, $deal_stages['stages'] ); $deal_stages['stages'] = $process_deal_stages; $pipeline_id = $deal_stages['id']; unset( $deal_stages['id'] ); $response = HubWooConnectionMananager::get_instance()->update_deal_pipeline( $deal_stages, $pipeline_id ); update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_deals_mapping() ); break; case 'reset-mapping': if ( ! empty( $_POST['pipeline'] ) ) { $selected_pipeline = map_deep( wp_unslash( $_POST['pipeline'] ), 'sanitize_text_field' ); if ( 'Ecommerce Pipeline' == $selected_pipeline ) { update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_deals_mapping() ); } else if ( 'Sales Pipeline' == $selected_pipeline ) { update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_sales_deals_mapping() ); } } else { update_option( 'hubwoo_ecomm_final_mapping', '' ); } break; case 'start-products-sync': if ( ! as_next_scheduled_action( 'hubwoo_products_sync_background' ) ) { update_option( 'hubwoo_start_product_sync', 'yes' ); as_schedule_recurring_action( time(), 180, 'hubwoo_products_sync_background' ); } $response['status_code'] = 200; $response['response'] = 'Product Sync-Status has been initiated'; break; } echo wp_json_encode( $response ); } } wp_die(); } /** * Get the onboarding submission data. * * @since 1.0.4 */ public function hubwoo_get_onboard_form() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['key'] ) ) { $key = map_deep( wp_unslash( $_POST['key'] ), 'sanitize_text_field' ); $key = str_replace( '[]', '', $key ); $options = array_map( function( $option ) { return array( $option, $option ); }, Hubwoo::hubwoo_onboarding_questionaire()[ $key ]['options'] ); echo json_encode( $options ); } wp_die(); } /** * Handle the onboarding form submision. * * @since 1.0.4 */ public function hubwoo_onboard_form() { // check the nonce sercurity. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['formData'] ) ) { $form_data = map_deep( wp_unslash( $_POST['formData'] ), 'sanitize_text_field' ); if ( ! empty( $form_data ) ) { $form_details = array(); array_walk( $form_data, function( $field, $name ) use ( &$form_details ) { if ( is_array( $field ) ) { $field = HubwooGuestOrdersManager::hubwoo_format_array( $field ); } $form_details['fields'][] = array( 'name' => $name, 'value' => $field, ); } ); echo json_encode( HubWooConnectionMananager::get_instance()->submit_form_data( $form_details, '5373140', '0354594f-26ce-414d-adab-4e89f2104902' ) ); } } wp_die(); } /** * Generate Contacts CSV file. */ public function hubwoo_ocs_historical_contact() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['step'] ) ) { $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); } else { $step = ''; } $hubwoo_datasync = new HubwooDataSync(); $total_need_syncing = $hubwoo_datasync->hubwoo_get_all_unique_user( true ); $server_time = ini_get( 'max_execution_time' ); if ( isset( $server_time ) && $server_time < 1500 ) { $server_time = 1500; } if ( ! $total_need_syncing ) { $percentage_done = 100; echo wp_json_encode( array( 'step' => $step + 1, 'progress' => $percentage_done, 'max_time' => empty( $server_time ) ? 1500 : $server_time, 'status' => true, 'response' => true, ) ); wp_die(); } else { $percentage_done = 0; echo wp_json_encode( array( 'step' => $step, 'progress' => $percentage_done, 'max_time' => empty( $server_time ) ? '1500' : $server_time, 'status' => true, 'contact' => $total_need_syncing, 'response' => 'Historical contact data found.', ) ); wp_die(); } } /** * Import historical contacts csv to hubspot. */ public function hubwoo_historical_contact_sync() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); if ( ! empty( $_POST['step'] ) ) { $step = sanitize_text_field( wp_unslash( $_POST['step'] ) ); } else { $step = ''; } if ( ! empty( $_POST['max_item'] ) ) { $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); } else { $max_item = 15; } $con_get_vid = ! empty( $_POST['con_get_vid'] ) ? sanitize_text_field( wp_unslash( $_POST['con_get_vid'] ) ) : 'final_request'; $skip_product = 'false'; $user_ids = array(); $contraints = array( array( 'key' => 'hubwoo_ecomm_pro_id', 'compare' => 'NOT EXISTS', ), array( 'key' => 'hubwoo_ecomm_invalid_pro', 'compare' => 'NOT EXISTS', ), array( 'key' => 'hubwoo_product_synced', 'compare' => 'NOT EXISTS', ), 'relation' => 'AND', ); $total_products = Hubwoo::hubwoo_ecomm_get_products( -1, $contraints ); if ( 'yes' == get_option( 'hubwoo_product_scope_needed', 'no' ) ) { $total_products = array(); $skip_product = 'true'; } if ( count( $total_products ) == 0 ) { if( Hubwoo::hubwoo_check_hpos_active() ) { $query = new WC_Order_Query(array( 'posts_per_page' => -1, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'return' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'post_parent' => 0, 'meta_key' => 'hubwoo_ecomm_deal_created', 'meta_compare' => 'NOT EXISTS', )); $order_ids = $query->get_orders(); } else { $query = new WP_Query(); $order_args = array( 'post_type' => 'shop_order', 'posts_per_page' => -1, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'fields' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'meta_query' => array( array( 'key' => 'hubwoo_ecomm_deal_created', 'compare' => 'NOT EXISTS', ), ), ); $order_ids = $query->query( $order_args ); } } $hubwoo_datasync = new HubwooDataSync(); $user_ids = $hubwoo_datasync->hubwoo_get_all_unique_user( false, 'customer', $max_item ); $response = ''; if ( empty( $user_ids ) ) { $percentage_done = 100; echo wp_json_encode( array( 'step' => $step + 1, 'progress' => $percentage_done, 'status' => true, 'total_prod' => empty( $total_products ) ? 0 : count( $total_products ), 'total_deals' => empty( $order_ids ) ? 0 : count( $order_ids ), 'skip_product' => $skip_product, 'response' => 'No Contact found.', ) ); wp_die(); } foreach ( $user_ids as $user_id ) { $user_info = json_decode( json_encode( get_userdata( $user_id ) ), true ); $user_email = $user_info['data']['user_email']; $contact = array(); $properties = array(); $hubwoo_customer = new HubWooCustomer( $user_id ); $properties = $hubwoo_customer->get_contact_properties(); $user_properties = $hubwoo_customer->get_user_data_properties( $properties ); foreach ( $user_properties as $key => $property ) { $contact[ $property['property'] ] = $property['value']; } $contact['email'] = $user_email; $contact = array( 'properties' => $contact, ); if ( ! empty( $contact ) ) { $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contact ); if ( 201 == $response['status_code'] ) { $contact_vid = json_decode( $response['body'] ); update_user_meta( $user_id, 'hubwoo_user_vid', $contact_vid->id ); update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); } else if ( 409 == $response['status_code'] ) { $contact_vid = json_decode( $response['body'] ); $hs_id = explode( 'ID: ', $contact_vid->message ); $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contact ); update_user_meta( $user_id, 'hubwoo_user_vid', $hs_id[1] ); update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); } else if ( 400 == $response['status_code'] ) { update_user_meta( $user_id, 'hubwoo_invalid_contact', 'yes' ); update_user_meta( $user_id, 'hubwoo_pro_user_data_change', 'synced' ); } do_action( 'hubwoo_ecomm_contact_synced', $user_email ); } } } echo wp_json_encode( array( 'step' => $step + 1, 'status' => true, 'total_prod' => empty( $total_products ) ? 0 : count( $total_products ), 'total_deals' => empty( $order_ids ) ? 0 : count( $order_ids ), 'skip_product' => $skip_product, 'response' => 'Historical contacts synced successfully.', ) ); wp_die(); } /** * Sync historical products data. */ public function hubwoo_historical_products_import() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $order_ids = array(); $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : ''; $pro_get_vid = ! empty( $_POST['pro_get_vid'] ) ? sanitize_text_field( wp_unslash( $_POST['pro_get_vid'] ) ) : 'final_request'; if ( ! empty( $_POST['max_item'] ) ) { $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); } else { $max_item = 15; } if( Hubwoo::hubwoo_check_hpos_active() ) { $query = new WC_Order_Query(array( 'posts_per_page' => -1, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'return' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'post_parent' => 0, 'meta_key' => 'hubwoo_ecomm_deal_created', 'meta_compare' => 'NOT EXISTS', )); $order_ids = $query->get_orders(); } else { $query = new WP_Query(); $order_args = array( 'post_type' => 'shop_order', 'posts_per_page' => -1, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'fields' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'meta_query' => array( array( 'key' => 'hubwoo_ecomm_deal_created', 'compare' => 'NOT EXISTS', ), ), ); $order_ids = $query->query( $order_args ); } $product_data = Hubwoo::hubwoo_get_product_data( $max_item ); if ( empty( $product_data ) ) { echo wp_json_encode( array( 'step' => $step + 1, 'status' => true, 'total_deals' => empty( $order_ids ) ? '' : count( $order_ids ), 'response' => 'No products found to sync.', ) ); wp_die(); } if ( ! empty( $product_data ) && is_array( $product_data ) ) { foreach ( $product_data as $pro_id => $value ) { $filtergps = array(); $product_data = array( 'properties' => $value['properties'], ); $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { $product = wc_get_product( $pro_id ); $filtergps = array( 'filterGroups' => array( array( 'filters' => array( array( 'value' => $pro_id, 'propertyName' => 'store_product_id', 'operator' => 'EQ', ), ), ), ), ); if( !empty($product->get_sku()) ) { $filtergps['filterGroups'][] = array( 'filters' => array( array( 'value' => $product->get_sku(), 'propertyName' => 'hs_sku', 'operator' => 'EQ', ), ), ); } $response = HubWooConnectionMananager::get_instance()->search_object_record( 'products', $filtergps ); if ( 200 == $response['status_code'] ) { $responce_body = json_decode( $response['body'] ); $result = $responce_body->results; if ( ! empty( $result ) ) { foreach ( $result as $key => $value ) { update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $value->id ); } } } $pro_hs_id = get_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', true ); if ( ! empty( $pro_hs_id ) ) { $response = HubWooConnectionMananager::get_instance()->update_object_record( 'products', $pro_hs_id, $product_data ); if ( 200 == $response['status_code'] ) { delete_post_meta( $pro_id, 'hubwoo_product_synced' ); } } else { $response = HubWooConnectionMananager::get_instance()->create_object_record( 'products', $product_data ); if ( 201 == $response['status_code'] ) { $response_body = json_decode( $response['body'] ); update_post_meta( $pro_id, 'hubwoo_ecomm_pro_id', $response_body->id ); delete_post_meta( $pro_id, 'hubwoo_product_synced' ); } } do_action( 'hubwoo_update_product_property', $pro_id ); } } if ( 'final_request' == $pro_get_vid ) { update_option( 'hubwoo_ecomm_setup_completed', 'yes' ); } echo wp_json_encode( array( 'step' => $step + 1, 'status' => true, 'total_deals' => empty( $order_ids ) ? '' : count( $order_ids ), 'response' => 'Products batch synced succesfully', ) ); wp_die(); } } /** * Sync historical deals to HubSpot. */ public function hubwoo_historical_deals_sync() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $object_type = 'DEAL'; $deal_updates = array(); $step = ! empty( $_POST['step'] ) ? sanitize_text_field( wp_unslash( $_POST['step'] ) ) : ''; if ( ! empty( $_POST['max_item'] ) ) { $max_item = sanitize_text_field( wp_unslash( $_POST['max_item'] ) ); } else { $max_item = 15; } if( Hubwoo::hubwoo_check_hpos_active() ) { $query = new WC_Order_Query(array( 'posts_per_page' => $max_item, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'return' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'post_parent' => 0, 'meta_key' => 'hubwoo_ecomm_deal_created', 'meta_compare' => 'NOT EXISTS', )); $order_ids = $query->get_orders(); } else { $query = new WP_Query(); $order_args = array( 'post_type' => 'shop_order', 'posts_per_page' => $max_item, 'post_status' => array_keys( wc_get_order_statuses() ), 'orderby' => 'date', 'order' => 'desc', 'fields' => 'ids', 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'meta_query' => array( array( 'key' => 'hubwoo_ecomm_deal_created', 'compare' => 'NOT EXISTS', ), ), ); $order_ids = $query->query( $order_args ); } if ( empty( $order_ids ) ) { echo wp_json_encode( array( 'step' => $step + 1, 'status' => true, 'response' => 'No deals found to sync.', ) ); wp_die(); } foreach ( $order_ids as $order_id ) { $order = wc_get_order( $order_id ); $deal_updates = array(); if ( $order instanceof WC_Order ) { $customer_id = $order->get_customer_id(); if ( ! empty( $customer_id ) ) { $source = 'user'; HubwooObjectProperties::hubwoo_ecomm_contacts_with_id( $customer_id ); } else { $source = 'guest'; $guest_object_type = 'CONTACT'; $guest_user_properties = $this->mwb_get_guestuser_properties( $order_id ); $contact_properties = array(); foreach ( $guest_user_properties as $key => $value ) { $contact_properties[ $value['property'] ] = $value['value']; } $guest_contact_properties = apply_filters( 'hubwoo_map_ecomm_guest_' . $guest_object_type . '_properties', $contact_properties, $order_id ); $contacts = array(); if ( isset( $order_id ) ) { //hpos changes $user_data = array(); $user_data['email'] = $order->get_billing_email(); $user_data['customer_group'] = 'guest'; $user_data['firstname'] = $order->get_billing_first_name(); $user_data['lastname'] = $order->get_billing_last_name(); $user_data['customer_source_store'] = get_bloginfo( 'name' ); $user_data['hs_language'] = $order->get_meta('hubwoo_preferred_language', true); foreach ( $guest_contact_properties as $key => $value ) { $user_data[ $key ] = $value; } $user_vid = $order->get_meta('hubwoo_user_vid', true); $contacts = array( 'properties' => $user_data, ); } if ( ! empty( $contacts ) ) { $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { if ( ! empty( $user_vid ) ) { $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $user_vid, $contacts ); } else { $response = HubWooConnectionMananager::get_instance()->create_object_record( 'contacts', $contacts ); if ( 201 == $response['status_code'] ) { $contact_vid = json_decode( $response['body'] ); $order->update_meta_data('hubwoo_user_vid', $contact_vid->id); $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); $order->save(); } else if ( 409 == $response['status_code'] ) { $contact_vid = json_decode( $response['body'] ); $hs_id = explode( 'ID: ', $contact_vid->message ); $response = HubWooConnectionMananager::get_instance()->update_object_record( 'contacts', $hs_id[1], $contacts ); $order->update_meta_data('hubwoo_user_vid', $hs_id[1]); $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); $order->save(); } else if ( 400 == $response['status_code'] ) { $order->update_meta_data('hubwoo_invalid_contact', 'yes'); $order->update_meta_data('hubwoo_pro_user_data_change', 'synced'); $order->update_meta_data('hubwoo_pro_guest_order', 'synced'); $order->save(); } } $user_email = $order->get_billing_email(); do_action( 'hubwoo_ecomm_contact_synced', $user_email ); } } } } $assc_deal_cmpy = get_option( 'hubwoo_assoc_deal_cmpy_enable', 'yes' ); $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); $hubwoo_ecomm_deal = new HubwooEcommObject( $order_id, $object_type ); $deal_properties = $hubwoo_ecomm_deal->get_object_properties(); $deal_properties = apply_filters( 'hubwoo_map_ecomm_' . $object_type . '_properties', $deal_properties, $order_id ); if ( 'yes' == get_option( 'hubwoo_deal_multi_currency_enable', 'no' ) ) { $currency = $order->get_currency(); if ( ! empty( $currency ) ) { $deal_properties['deal_currency_code'] = $currency; } } if ( empty( $pipeline_id ) ) { Hubwoo::get_all_deal_stages(); $pipeline_id = get_option( 'hubwoo_ecomm_pipeline_id', false ); } $deal_properties['pipeline'] = $pipeline_id; $deal_updates = array( 'properties' => $deal_properties, ); $response = ''; if ( 'user' == $source ) { $user_info = json_decode( wp_json_encode( get_userdata( $customer_id ) ), true ); $user_email = $user_info['data']['user_email']; $contact = $user_email; if ( empty( $contact ) ) { $contact = $customer_id; } $contact_vid = get_user_meta( $customer_id, 'hubwoo_user_vid', true ); $invalid_contact = get_user_meta( $customer_id, 'hubwoo_invalid_contact', true ); } else { $contact_vid = $order->get_meta('hubwoo_user_vid', true); $contact = $order->get_billing_email(); $invalid_contact = $order->get_meta('hubwoo_invalid_contact', true); } if ( count( $deal_updates ) ) { $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { $deal_name = '#' . $order->get_order_number(); $user_detail['first_name'] = $order->get_billing_first_name(); $user_detail['last_name'] = $order->get_billing_last_name(); foreach ( $user_detail as $value ) { if ( ! empty( $value ) ) { $deal_name .= ' ' . $value; } } $filtergps = array( 'filterGroups' => array( array( 'filters' => array( array( 'value' => $deal_name, 'propertyName' => 'dealname', 'operator' => 'EQ', ), ), ), ), ); $response = HubWooConnectionMananager::get_instance()->search_object_record( 'deals', $filtergps ); if ( 200 == $response['status_code'] ) { $responce_body = json_decode( $response['body'] ); $result = $responce_body->results; if ( ! empty( $result ) ) { foreach ( $result as $key => $value ) { $order->update_meta_data('hubwoo_ecomm_deal_id', $value->id); $order->update_meta_data('hubwoo_order_line_item_created', 'yes'); $order->save(); } } } $hubwoo_ecomm_deal_id = $order->get_meta('hubwoo_ecomm_deal_id', true); if ( empty( $hubwoo_ecomm_deal_id ) ) { $response = HubWooConnectionMananager::get_instance()->create_object_record( 'deals', $deal_updates ); if ( 201 == $response['status_code'] ) { $response_body = json_decode( $response['body'] ); $hubwoo_ecomm_deal_id = $response_body->id; $order->update_meta_data('hubwoo_ecomm_deal_id', $hubwoo_ecomm_deal_id ); $order->save(); } } else { $response = HubWooConnectionMananager::get_instance()->update_object_record( 'deals', $hubwoo_ecomm_deal_id, $deal_updates ); } HubWooConnectionMananager::get_instance()->associate_object( 'deal', $hubwoo_ecomm_deal_id, 'contact', $contact_vid, 3 ); do_action( 'hubwoo_ecomm_deal_created', $order_id ); if ( 'yes' == $assc_deal_cmpy ) { if ( ! empty( $contact ) && empty( $invalid_contact ) ) { Hubwoo::hubwoo_associate_deal_company( $contact, $hubwoo_ecomm_deal_id ); } } $this->bulk_line_item_link( $order_id ); } } } echo wp_json_encode( array( 'step' => $step + 1, 'status' => true, 'response' => 'Deals batch synced succesfully', ) ); wp_die(); } /** * Hide review notice. */ public function hubwoo_hide_rev_notice() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); update_option( 'hubwoo_hide_rev_notice', 'yes' ); echo wp_json_encode( array( 'status' => true, 'response' => 'Notice hide succesfully', ) ); wp_die(); } /** * Hide HPOS notice */ public function hubwoo_hide_hpos_notice(){ // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); update_option( 'hubwoo_hide_hpos_notice', 'yes' ); echo wp_json_encode( array( 'status' => true, 'response' => 'Notice hide succesfully', ) ); wp_die(); } /** * Get guest user properties. * * @param int $order_id Order ID. */ public function mwb_get_guestuser_properties( $order_id ) { global $hubwoo; $hubwoo_guest_order = wc_get_order( $order_id ); if ( $hubwoo_guest_order instanceof WC_Order ) { //hpos changes $guest_email = $hubwoo_guest_order->get_billing_email(); $guest_order_callback = new HubwooGuestOrdersManager( $order_id ); $guest_user_properties = $guest_order_callback->get_order_related_properties( $order_id, $guest_email ); $guest_user_properties = $hubwoo->hubwoo_filter_contact_properties( $guest_user_properties ); $fname = $hubwoo_guest_order->get_billing_first_name(); if ( ! empty( $fname ) ) { $guest_user_properties[] = array( 'property' => 'firstname', 'value' => $fname, ); } $lname = $hubwoo_guest_order->get_billing_last_name(); if ( ! empty( $lname ) ) { $guest_user_properties[] = array( 'property' => 'lastname', 'value' => $lname, ); } $cname = $hubwoo_guest_order->get_billing_company(); if ( ! empty( $cname ) ) { $guest_user_properties[] = array( 'property' => 'company', 'value' => $cname, ); } $city = $hubwoo_guest_order->get_billing_city(); if ( ! empty( $city ) ) { $guest_user_properties[] = array( 'property' => 'city', 'value' => $city, ); } $state = $hubwoo_guest_order->get_billing_state(); if ( ! empty( $state ) ) { $guest_user_properties[] = array( 'property' => 'state', 'value' => $state, ); } $country = $hubwoo_guest_order->get_billing_country(); if ( ! empty( $country ) ) { $guest_user_properties[] = array( 'property' => 'country', 'value' => Hubwoo::map_country_by_abbr( $country ), ); } $address1 = $hubwoo_guest_order->get_billing_address_1(); $address2 = $hubwoo_guest_order->get_billing_address_2(); if ( ! empty( $address1 ) || ! empty( $address2 ) ) { $address = $address1 . ' ' . $address2; $guest_user_properties[] = array( 'property' => 'address', 'value' => $address, ); } $zip = $hubwoo_guest_order->get_billing_postcode(); if ( ! empty( $zip ) ) { $guest_user_properties[] = array( 'property' => 'zip', 'value' => $zip, ); } $guest_phone = $hubwoo_guest_order->get_billing_phone(); if ( ! empty( $guest_phone ) ) { $guest_user_properties[] = array( 'property' => 'mobilephone', 'value' => $guest_phone, ); $guest_user_properties[] = array( 'property' => 'phone', 'value' => $guest_phone, ); } $customer_new_order_flag = 'no'; $prop_index = array_search( 'customer_new_order', array_column( $guest_user_properties, 'property' ) ); if ( Hubwoo_Admin::hubwoo_check_for_properties( 'order_recency_rating', 5, $guest_user_properties ) ) { if ( Hubwoo_Admin::hubwoo_check_for_properties( 'last_order_status', get_option( 'hubwoo_no_status', 'wc-completed' ), $guest_user_properties ) ) { $customer_new_order_flag = 'yes'; } } if ( $prop_index ) { $guest_user_properties[ $prop_index ]['value'] = $customer_new_order_flag; } else { $guest_user_properties[] = array( 'property' => 'customer_new_order', 'value' => $customer_new_order_flag, ); } } return $guest_user_properties; } /** * Sync line items to deals over Hubspot. * * @param int $order_id Order ID. */ public function bulk_line_item_link( $order_id ) { if ( ! empty( $order_id ) ) { $object_type = 'LINE_ITEM'; $order = wc_get_order( $order_id ); $line_updates = array(); $order_items = $order->get_items(); $object_ids = array(); $response = array( 'status_code' => 206 ); $no_products_found = false; if ( is_array( $order_items ) && count( $order_items ) ) { foreach ( $order_items as $item_key => $single_item ) : $product_id = $single_item->get_variation_id(); if ( 0 === $product_id ) { $product_id = $single_item->get_product_id(); if ( 0 === $product_id ) { $no_products_found = true; } } if ( get_post_status( $product_id ) == 'trash' || get_post_status( $product_id ) == false ) { continue; } $item_sku = get_post_meta( $product_id, '_sku', true ); if ( empty( $item_sku ) ) { $item_sku = $product_id; } $line_item_hs_id = wc_get_order_item_meta( $item_key, 'hubwoo_ecomm_line_item_id', true ); if ( ! empty( $line_item_hs_id ) || 'yes' == $order->get_meta('hubwoo_order_line_item_created', 'no') ) { continue; } $quantity = ! empty( $single_item->get_quantity() ) ? $single_item->get_quantity() : 0; $item_total = ! empty( $single_item->get_total() ) ? $single_item->get_total() : 0; $item_sub_total = ! empty( $single_item->get_subtotal() ) ? $single_item->get_subtotal() : 0; $product = $single_item->get_product(); $name = HubwooObjectProperties::get_instance()->hubwoo_ecomm_product_name( $product ); $discount_amount = abs( $item_total - $item_sub_total ); $discount_amount = $discount_amount / $quantity; $item_sub_total = $item_sub_total / $quantity; $hs_product_id = get_post_meta( $product_id, 'hubwoo_ecomm_pro_id', true ); $object_ids[] = $item_key; $properties = array( 'quantity' => $quantity, 'price' => $item_sub_total, 'amount' => $item_total, 'name' => $name, 'discount_amount' => $discount_amount, 'sku' => $item_sku, 'tax_amount' => $single_item->get_total_tax(), ); if ( 'yes' != get_option( 'hubwoo_product_scope_needed', 'no' ) ) { $properties['hs_product_id'] = $hs_product_id; } $properties = apply_filters( 'hubwoo_line_item_properties', $properties, $product_id, $order_id ); $line_updates[] = array( 'properties' => $properties, ); endforeach; } $line_updates = apply_filters( 'hubwoo_custom_line_item', $line_updates, $order_id ); if ( count( $line_updates ) ) { $line_updates = array( 'inputs' => $line_updates, ); $flag = true; if ( Hubwoo::is_access_token_expired() ) { $hapikey = HUBWOO_CLIENT_ID; $hseckey = HUBWOO_SECRET_ID; $status = HubWooConnectionMananager::get_instance()->hubwoo_refresh_token( $hapikey, $hseckey ); if ( ! $status ) { $flag = false; } } if ( $flag ) { $response = HubWooConnectionMananager::get_instance()->create_batch_object_record( 'line_items', $line_updates ); } } if ( 201 == $response['status_code'] || 204 == $response['status_code'] || empty( $object_ids ) ) { $order->update_meta_data( 'hubwoo_ecomm_deal_created', 'yes' ); $order->save(); $deal_id = $order->get_meta( 'hubwoo_ecomm_deal_id', true ); if ( isset( $response['body'] ) && ! empty( $response['body'] ) ) { $response_body = json_decode( $response['body'] ); foreach ( $order_items as $item_key => $single_item ) : $product_id = $single_item->get_variation_id(); if ( 0 === $product_id ) { $product_id = $single_item->get_product_id(); if ( 0 === $product_id ) { $no_products_found = true; } } if ( get_post_status( $product_id ) == 'trash' || get_post_status( $product_id ) == false ) { continue; } $product = $single_item->get_product(); $name = HubwooObjectProperties::get_instance()->hubwoo_ecomm_product_name( $product ); if ( isset( $response_body ) && ! empty( $response_body ) ) { foreach ( $response_body->results as $key => $value ) { $line_item_hs_id = $value->id; $order->update_meta_data( 'hubwoo_order_line_item_created', 'yes' ); $order->save(); $response = HubWooConnectionMananager::get_instance()->associate_object( 'deal', $deal_id, 'line_item', $line_item_hs_id, 19 ); } } endforeach; if ( 1 == get_option( 'hubwoo_deals_sync_running', 0 ) ) { $current_count = get_option( 'hubwoo_deals_current_sync_count', 0 ); update_option( 'hubwoo_deals_current_sync_count', ++$current_count ); } } } } } /** * Fetch logs from database. */ public function hubwoo_get_datatable_data() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $request = $_GET; $offset = $request['start']; $limit = $request['length']; $search_data = $request['search']; $search_value = $search_data['value']; if ( '' !== $search_value ) { $log_data = Hubwoo::hubwoo_get_log_data( $search_value ); } else { $log_data = Hubwoo::hubwoo_get_log_data( false, $limit, $offset ); } $count_data = Hubwoo::hubwoo_get_total_log_count(); $total_count = $count_data[0]; $data = array(); foreach ( $log_data as $key => $value ) { $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] = ! empty( $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] ) ? $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ] : '-'; $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] = ! empty( $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] ) ? $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_id' ] : '-'; $current_request = $value['request']; //phpcs:ignore $response = unserialize( $value['response'] ); //phpcs:ignore $temp = array( '', $value['event'], $value[ Hubwoo::get_current_crm_name( 'slug' ) . '_object' ], gmdate( 'd-m-Y h:i A', esc_html( $value['time'] ) ), $current_request, wp_json_encode( $response ), ); $data[] = $temp; } $json_data = array( 'draw' => intval( $request['draw'] ), 'recordsTotal' => $total_count, 'recordsFiltered' => $total_count, 'data' => $data, ); echo wp_json_encode( $json_data ); wp_die(); } /** * Download logs from database. */ public function hubwoo_download_sync_log() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $crm_name = Hubwoo::get_current_crm_name( 'slug' ); $log_data = Hubwoo::hubwoo_get_log_data( false, 25, 0, true ); $data = array(); $log_dir = WC_LOG_DIR . $crm_name . '-sync-log.log'; if ( ! is_dir( $log_dir ) ) { $log_dir = WC_LOG_DIR . $crm_name . '-sync-log.log'; } global $wp_filesystem; // Define global object of WordPress filesystem. WP_Filesystem(); // Intialise new file system object. $file_data = ''; $wp_filesystem->put_contents( $log_dir, '' ); foreach ( $log_data as $key => $value ) { $value[ $crm_name . '_id' ] = ! empty( $value[ $crm_name . '_id' ] ) ? $value[ $crm_name . '_id' ] : '-'; $log = 'Feed : ' . $value['event'] . PHP_EOL; $log .= ucwords( $crm_name ) . ' Object : ' . $value[ $crm_name . '_object' ] . PHP_EOL; $log .= 'Time : ' . gmdate( 'd-m-Y h:i A', esc_html( $value['time'] ) ) . PHP_EOL; $log .= 'Request : ' . $value['request'] . PHP_EOL; // phpcs:ignore $log .= 'Response : ' . wp_json_encode( unserialize( $value['response'] ) ) . PHP_EOL; // phpcs:ignore $log .= '-----------------------------------------------------------------------' . PHP_EOL; $file_data .= $log; $wp_filesystem->put_contents( $log_dir, $file_data ); } $json_data = array( 'success' => true, 'redirect' => admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-logs&hubwoo_download=1' ), ); echo wp_json_encode( $json_data ); wp_die(); } /** * Clear log from database */ public function hubwoo_clear_sync_log() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); global $wpdb; $table_name = $wpdb->prefix . 'hubwoo_log'; $wpdb->get_results( $wpdb->prepare( 'DELETE FROM %1s', $table_name ) ); $json_data = array( 'success' => true, 'redirect' => admin_url( 'admin.php?page=hubwoo&hubwoo_tab=hubwoo-logs' ), ); echo wp_json_encode( $json_data ); wp_die(); } /** * Fetch pipeline deal stages. */ public function hubwoo_fetch_deal_stages() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $selected_pipeline = ! empty( $_POST['selected_pipeline'] ) ? sanitize_text_field( wp_unslash( $_POST['selected_pipeline'] ) ) : ''; $all_pipeline = get_option( 'hubwoo_potal_pipelines', true ); update_option( 'hubwoo_ecomm_pipeline_id', $selected_pipeline ); $deal_stages = ''; foreach ( $all_pipeline as $single_pipeline ) { if ( $single_pipeline['id'] == $selected_pipeline ) { $deal_stages = $single_pipeline['stages']; if ( 'Ecommerce Pipeline' == $single_pipeline['label'] ) { Hubwoo::update_deal_stages_mapping( $deal_stages ); } else if ( 'Sales Pipeline' == $single_pipeline['label'] ) { update_option( 'hubwoo_ecomm_final_mapping', Hubwoo::hubwoo_sales_deals_mapping() ); } } } if ( ! empty( $deal_stages ) ) { update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); update_option( 'hubwoo_fetched_deal_stages', $deal_stages ); update_option( 'hubwoo_ecomm_won_stages', '' ); } echo wp_json_encode( array( 'success' => true, ) ); wp_die(); } /** * Fetch deal pipelines. */ public function hubwoo_fetch_update_pipelines() { // Nonce verification. check_ajax_referer( 'hubwoo_security', 'hubwooSecurity' ); $selected_pipeline = ! empty( $_POST['selected_pipeline'] ) ? sanitize_text_field( wp_unslash( $_POST['selected_pipeline'] ) ) : ''; $all_deal_pipelines = HubWooConnectionMananager::get_instance()->fetch_all_deal_pipelines(); if ( ! empty( $all_deal_pipelines['results'] ) ) { update_option( 'hubwoo_potal_pipelines', $all_deal_pipelines['results'] ); } $all_pipeline = get_option( 'hubwoo_potal_pipelines', true ); update_option( 'hubwoo_ecomm_pipeline_id', $selected_pipeline ); $deal_stages = ''; foreach ( $all_pipeline as $single_pipeline ) { if ( $single_pipeline['id'] == $selected_pipeline ) { $deal_stages = $single_pipeline['stages']; } } if ( ! empty( $deal_stages ) ) { update_option( 'hubwoo_ecomm_pipeline_created', 'yes' ); update_option( 'hubwoo_fetched_deal_stages', $deal_stages ); update_option( 'hubwoo_ecomm_won_stages', '' ); } echo wp_json_encode( array( 'success' => true, ) ); wp_die(); } } } new Hubwoo_Ajax_Handler();