# \[FRAMEWORK] Xây dựng page Account Phần 4 (ok)

![](/files/1rFug3Yeog1QHojb2HfY)

![](/files/qQ5PQRsWKzk1U5Xs55y0)

C:\xampp\htdocs\wordpress8\wp-content\themes\addframwork\js\account-business.js

```
jQuery(document).ready(function($) {
  function account_activity_load(type) {
    $(".status").removeClass("d-none");
    $.ajax({
      url: app.ajaxUrl,
      type: "post",
      dataType: "text",
      data: {
        action: 'account_activity_load_list_' + type,
        token: $("#nonce_token").val()
      },
      success: function(output) {
        $(".tab-" + type + " .account-list-item").append(output);
        $(".status").addClass("d-none");
      }
    });
  }
  function account_get_tab_number(type = "activity") {
    $.ajax({
      url: app.ajaxUrl,
      type: "post",
      dataType: "text",
      data: {
        action: 'account_activity_get_tab_number',
        type: type,
        token: $("#nonce_token").val()
      },
      success: function(output) {
        if (output != "error") {
          const obj = JSON.parse(output, function(key, value) {
            $(".account-load-btn[data-id='" + key + "'] span").text(value);
          });
        }
      }
    });
  }
  function account_business_load(type) {
    $(".status").removeClass("d-none");
    $.ajax({
      url: app.ajaxUrl,
      type: "post",
      dataType: "text",
      data: {
        action: 'account_business_load_list_' + type,
        token: $("#nonce_token").val()
      },
      success: function(output) {
        //is_busy = false;
        $(".tab-" + type + " .account-list-item").append(output);
        $(".status").addClass("d-none");
      }
    });
  }
  // ==
  account_activity_load("deal");
  account_get_tab_number();
  // ==
  $('body').on('click', '#change-acc', function(e) {
    const $this = $(this);
    const btnScan = $('#scan-voucher');
    const type = $this.attr('data-type');
    const userId = $this.attr('data-id');
    const tab_active = $(".tab-active").data("tab-id");
    $.ajax({
      url: app.ajaxUrl,
      type: "post",
      dataType: "text",
      data: {
        action: 'change_business_activity',
        token: $('#nonce_token').val(),
        type: type,
        id: userId,
      },
      beforeSend: function() {
        $(".account-list-item:not('.news') .col-6").not(".col-addnew").remove();
        $this.find('svg').addClass('spin');
      },
      success: function(response) {
        $(".menu-tab-account .li").not(".active").find("a").addClass("load");
        $this.find('svg').removeClass('spin');
        btnScan.toggle();
        if (type == 'activity') {
          // xử lý data business
          account_get_tab_number("business");
          $this.attr('data-type', 'business').find('span').text(app.business);
          $(".account-list-item .col-addnew").removeClass("d-none");
          if (tab_active != "news") {
            account_business_load(tab_active);
          }
          $(".menu-tab-account ul li:last-child,.tab-news").addClass("d-none");
          $(".col-activity-event").remove();
          return;
        }
        $this.attr('data-type', 'activity').find('span').text(app.activity);
        $(".account-list-item .col-addnew").addClass("d-none");
        account_get_tab_number();
        if (tab_active != "news") {
          account_activity_load(tab_active);
        }
        $(".menu-tab-account ul li:last-child,.tab-news").removeClass("d-none");
      },
      error: function() {
        $this.find('svg').removeClass('spin');
        alert('Error');
      }
    })
    return false;
  });
  // ==
  var exclude_img = [];
  var input_btn = 0;
  var xp = -1;
  $(document).on("click", ".add-image-btn", function(e) {
    let select = $(this).closest("form");
    input_btn++;
    select.find(".list-input-file").append("<input type='file' name='upload_files[]' id='filenumber" + input_btn + "' class='img_file upload_files' accept='.gif,.jpg,.jpeg,.png,' multiple/>");
    $("#filenumber" + input_btn).click();
  });
  $(document).on("change", ".upload_files", function(e) {
    let select = $(this).closest("form")
    files = e.target.files;
    filesLength = files.length;
    for (var i = 0; i < filesLength; i++) {
      var f = files[i];
      var res_ext = files[i].name.split(".");
      var img_or_video = res_ext[res_ext.length - 1];
      var fileReader = new FileReader();
      fileReader.name = f.name;
      fileReader.onload = function(e) {
        xp++;
        var file = e.target;
        select.find(".images-box").append("<div class='box preview-image'><div class='images-preview' style='background-image: url(" + e.target.result + ")'><button type='button' data-id='" + xp + "' class='remove-img btn-close' title='Remove'></button></div></div>");
      };
      fileReader.readAsDataURL(f);
    }
  });
  $(document).on("click", ".images-box .remove-img", function() {
    $(this).closest(".box").remove();
    exclude_img.push($(this).attr("data-id"));
  });
  // ==
  var is_busy = false;
  var add_deal_form = "#add-deal-form ";
  $(add_deal_form).submit(function() {
    if (is_busy == true) return;
    is_busy = true;
    var formData = new FormData(document.getElementById("add-deal-form"));
    formData.append('action', 'add_deal');
    formData.append('exclude_img', exclude_img);
    $.ajax({
      url: app.ajaxUrl,
      type: "post",
      contentType: false,
      processData: false,
      data: formData,
      success: function(output) {
        is_busy = false;
        if (output == "success") {
          $("#alert-success").modal("show");
          $("#add_deal_form").remove();
        }
      }
    });
    return false;
  });
});
```

C:\xampp\htdocs\wordpress8\wp-content\themes\addframwork\framework\ajax\business.php

```
<?php
add_action('wp_ajax_account_activity_load_list_deal', 'account_activity_load_list_deal');
function account_activity_load_list_deal() {
  $current_user_id = get_current_user_id();
  if( !isset( $_POST['token']) or !wp_verify_nonce($_POST['token'],AT_NONCE_KEY.'ajax-nonce'.$current_user_id ) ) die("error"); 
  global $bj_controller;
  $model = $bj_controller->Model("business");
  $list_deal = $model->activity_load_deal_id(5);
  if(!empty($list_deal)){
    $deal_model = $bj_controller->Model("deal");
    foreach ($list_deal as  $value) {
      $deal_detail = $deal_model->get_deal_detail($value["deal_id"]);
      echo '<div class="col-6">';
        get_template_part("framework/views/deal/item","",$deal_detail);
      echo '</div>';
    }
  }else{
    echo '<p class="p-3">'.__("No data","umm").'</p>';
  }
  wp_die();
}
add_action('wp_ajax_account_activity_get_tab_number', 'account_activity_get_tab_number');
function account_activity_get_tab_number() {
  $current_user_id = get_current_user_id();
  if( !isset( $_POST['token']) or !wp_verify_nonce($_POST['token'],AT_NONCE_KEY.'ajax-nonce'.$current_user_id ) ) die("error"); 
  if(!isset($_POST["type"]) or !in_array($_POST["type"],["activity","business"])) die("error");
  global $bj_controller, $wpdb;
  $return = array(
    "deal" => 0,
    "event" => 0
  );
  if($_POST["type"] == "activity"){
    $list_deal = $bj_controller->Model("business")->activity_load_deal_id(10000);
    if(!empty($list_deal)) $return["deal"] = count($list_deal);
  }else{
    $list_business_arr = $bj_controller->Model("business")->get_list_business_by_user_id($current_user_id);
    if(!empty($list_business_arr)) {
      $arr = [];
      foreach ($list_business_arr as $value) {
        $arr[] = $value["id"];
      }
      $table = $wpdb->prefix."bj_business_deal";
      $business_id_arr = implode("','",$arr);
      $list_deal = $wpdb->get_results ( " SELECT * FROM  {$table} WHERE business_id IN ('{$business_id_arr}') ORDER BY id DESC" ,ARRAY_A);
      if(!empty($list_deal)) $return["deal"] = count($list_deal);
    };
  }
  die(json_encode($return));
}
add_action('wp_ajax_account_business_load_list_deal', 'account_business_load_list_deal');
function account_business_load_list_deal() {
  $current_user_id = get_current_user_id();
  if( !isset( $_POST['token']) or !wp_verify_nonce($_POST['token'],AT_NONCE_KEY.'ajax-nonce'.$current_user_id ) ) die("error"); 
  global $bj_controller;
  global $wpdb;
  $list_business_arr = $bj_controller->Model("business")->get_list_business_by_user_id($current_user_id);
  if(!empty($list_business_arr)) {
    $arr = [];
    foreach ($list_business_arr as $value) {
      $arr[] = $value["id"];
    }
    $table = $wpdb->prefix."bj_business_deal";
    $business_id_arr = implode("','",$arr);
    $list_deal = $wpdb->get_results ( " SELECT * FROM  {$table} WHERE business_id IN ('{$business_id_arr}') ORDER BY id DESC" ,ARRAY_A);
    if(!empty($list_deal)){
      $deal_model = $bj_controller->Model("deal");
      foreach ($list_deal as  $value) {
        $deal_detail = $deal_model->get_deal_detail($value["id"]);
        $deal_detail["account"] = true;
        echo '<div class="col-6">';
        get_template_part("framework/views/deal/item","",$deal_detail);
        echo '</div>';
      }
    }else{
      echo '<p class="p-3">'.__("No data","umm").'</p>';
    }
  };
  die();
}
add_action('wp_ajax_add_deal', 'add_deal');
function add_deal() {
  $current_user_id = get_current_user_id();
  if( !isset( $_POST['token']) or !wp_verify_nonce($_POST['token'], BJ_NONCE_KEY.'adddeal'.$current_user_id ) ) {
    die("error1"); 
  } 
  if(!empty($_POST['title']) && strlen($_POST["title"]) < 250 ){
    $title = strip_tags($_POST["title"]);}else{
    die("error2");
  }
  if(!empty($_POST['description'])){
    $description = strip_tags($_POST["description"]);
  }else{
    die("error3");
  }
  if(!empty($_POST['date_from'])){
    $date_from = strip_tags($_POST["date_from"]);
  }else{
    die("error4");
  }
  if(!empty($_POST['date_to'])){
    $date_to = strip_tags($_POST["date_to"]);
  }else{
    die("error5");
  }
  if(!empty($_POST['quantity']) && is_numeric($_POST["quantity"]) && $_POST['quantity'] < 9999999){
    $quantity = $_POST["quantity"];
  }else{
    die("error6");
  }
  global $bj_controller;
  $model = $bj_controller -> Model("directory");
  if(!empty($_POST['business_id']) && is_numeric($_POST["business_id"]) && !empty($model->get_business_detail($_POST["business_id"]))){
    $business_id = $_POST["business_id"];
  }else{
      die("error7");
  }
  $file_arr = $list_image_uploaded = [];
  if(!empty($_FILES["upload_files"])){    
    foreach ($_FILES["upload_files"]["name"] as $key => $value) {
      $file_arr[] = array(
        "name" => $_FILES["upload_files"]["name"][$key],
        "type" => $_FILES["upload_files"]["type"][$key],
        "tmp_name" => $_FILES["upload_files"]["tmp_name"][$key],
        "error" => $_FILES["upload_files"]["error"][$key],
        "size" => $_FILES["upload_files"]["size"][$key]
      );
    }
  }
  if(!empty($img_exclude)){
      foreach ($img_exclude as $key) {
        unset($file_arr[$key]);
      }
    }
    $district = "";
    $business_detai = $bj_controller->Model("business")->get_business_detail($business_id);
    if(!empty($business_detai)) $district = $business_detai["district"];
    $data_add = array(
    "business_id" => $business_id,
    "title" => $title,
    "description" => $description,
    "date_from" => $date_from,
    "date_to" => $date_to,
    "quantity" => $quantity,
    "district" => $district,
  );
  $data_format = array("%d","%s","%s","%s","%s","%d","%s");
  if(!empty($file_arr)){
    foreach ($file_arr as $file) {
      $upload_result = market_upload_image($file);
      if($upload_result["status"] == "success"){
        $list_image_uploaded[] = $upload_result["content"];
      }
    }
  }
  if(!empty($list_image_uploaded)){
    $data_add["images"] = json_encode($list_image_uploaded);
    $data_format[] = "%s";
  }
  $model = $bj_controller->Model("deal");
  $deal_id = $model->add_deal($data_add,$data_format);  
  echo $deal_id > 0 ? "success" : "error";
  die();
}
```

C:\xampp\htdocs\wordpress8\wp-content\themes\addframwork\framework\models\business.php

```
<?php 
class BJ_business_Model{
	private $table_business = 'bj_business';
	public function activity_load_deal_id($number = 20,$offset = 0){
		$current_user_id = get_current_user_id();
		global $wpdb;
		$table = $wpdb->prefix."bj_business_deal_saved";
		$result = $wpdb->get_results ( $wpdb->prepare(" SELECT deal_id FROM  {$table} WHERE user_id = %d ORDER BY id DESC LIMIT %d,%d",$current_user_id,$offset,$number) ,ARRAY_A);
		if(!empty($result)) return $result;
	}
	public function get_list_business_by_user_id($user_id){
		global $wpdb;
		$table = $wpdb->prefix.$this->table_business;
		$result = $wpdb->get_results ( $wpdb->prepare(" SELECT * FROM  {$table} WHERE user_id = %d ORDER BY id DESC",$user_id) ,ARRAY_A);
		if(!empty($result)) return $result;
	}
	public function get_business_detail($business_id){
		global $wpdb;
		$table = $wpdb->prefix.$this->table_business;
		$result = $wpdb->get_results ( $wpdb->prepare(" SELECT * FROM  {$table} WHERE id = %d",$business_id) ,ARRAY_A);
		if(!empty($result)) return $result[0];
	}
}
```

C:\xampp\htdocs\wordpress8\wp-content\themes\addframwork\inc\functions\function-global.php

```
<?php
/**
 *
 * @return HTML - option list tỉnh thành
 */
function reder_province_option($default = "") {
  $json_file = get_stylesheet_directory() . "/json/tinh_tp.json";
  if (file_exists($json_file)) {
    $json       = file_get_contents($json_file);
    $tinh_thanh = json_decode($json, true);
    foreach ($tinh_thanh as $key => $value) {
      if ($key == $default) {$select = "selected";} else { $select = "";}
      echo "<option " . $select . " value='" . $key . "'>" . $value["name"] . "</option>";
    }
  }
}
/**
 * @return HTML - option list quận huyện
 */
function reder_quan_huyen_option($tinh_thanh, $default) {
  $default    = sprintf('%02d', intval($default));
  $tinh_thanh = sprintf('%02d', intval($tinh_thanh));
  $json_file  = get_stylesheet_directory() . "/json/quan-huyen/" . $tinh_thanh . ".json";
  if (file_exists($json_file)) {
    $json       = file_get_contents($json_file);
    $quan_huyen = json_decode($json, true);
    foreach ($quan_huyen as $key => $value) {
      if ($key == $default) {
        $select = "selected";
      } else {
        $select = "";
      }
      echo "<option " . $select . " value='" . $key . "'>" . $value["name_with_type"] . "</option>";
    }
  }
}
/**
 * @return HTML - option list xã phường
 */
function reder_xa_phuong_option($quan_huyen, $default) {
  $default    = intval($default);
  $quan_huyen = sprintf('%03d', intval($quan_huyen));
  $json_file  = get_stylesheet_directory() . "/json/xa-phuong/" . $quan_huyen . ".json";
  if (file_exists($json_file)) {
    $json      = file_get_contents($json_file);
    $xa_phuong = json_decode($json, true);
    foreach ($xa_phuong as $key => $value) {
      if ($key == $default) {$select = "selected";} else { $select = "";}
      echo "<option " . $select . " value='" . $key . "'>" . $value["name_with_type"] . "</option>";
    }
  }
}
/**
 * AJAX load quận huyện khi select tỉnh thành phố
 */
add_action('wp_ajax_load_quan_huyen', 'load_quan_huyen');
function load_quan_huyen() {
  $tinh_thanh = $_POST['id'];
  $type       = $_POST['type'];
  $json_file  = get_stylesheet_directory() . "/json/quan-huyen/" . $tinh_thanh . ".json";
  if (file_exists($json_file)) {
    $json       = file_get_contents($json_file);
    $quan_huyen = json_decode($json, true);
    echo '<option value="" disabled selected >' . __("Select", "golf") . '</option>';
    foreach ($quan_huyen as $key => $value) {
      if ($type) {
        echo "<option value='" . $value["name_with_type"] . "'>" . $value["name_with_type"] . "</option>";
      } else {
        echo "<option value='" . $key . "'>" . $value["name_with_type"] . "</option>";
      }
    }
  }
  die();
}
/**
 * AJAX load danh sách xã phường khi select tỉnh thành phố
 */
add_action('wp_ajax_load_xa_phuong', 'load_xa_phuong');
function load_xa_phuong() {
  $quan_huyen = $_POST['id'];
  $json_file  = get_stylesheet_directory() . "/json/xa-phuong/" . $quan_huyen . ".json";
  if (file_exists($json_file)) {
    $json      = file_get_contents($json_file);
    $xa_phuong = json_decode($json, true);
    foreach ($xa_phuong as $key => $value) {
      echo "<option value='" . $key . "'>" . $value["name_with_type"] . "</option>";
    }
  }
  die();
}
/**
 *
 * Get địa chỉ của user bởi id
 * Nếu chưa update địa chỉ, thì gán mặc định là: '90 Đường Lê Lợi, Phường Bến Thành, Quận 1, Thành phố Hồ Chí Minh'
 */
function get_address_by_id_user($user_id = null) {
  if (!$user_id) {
    $user_id = get_current_user_id();
  }
  $province_address = get_user_meta($user_id, "province_address", true);
  if ($province_address) {
    return json_decode($province_address, true);
  }
  return array(
    'province' => 79,
    'district' => 760,
    'ward'     => 26743,
    'street'   => '90 Đường Lê Lợi',
  );
}
/**
 * Get địa chỉ text
 * @return array
 */
function atw_load_province_address($user_id = null) {
  $province = '';
  $district = '';
  $ward     = '';
  if (!$user_id) {
    $user_id = get_current_user_id();
  }
  $province_address = get_address_by_id_user($user_id);
  if ($province_address && is_array($province_address)) {
    $json_file = get_stylesheet_directory() . "/json/tinh_tp.json";
    if (file_exists($json_file)) {
      $json_tinh_tp = file_get_contents($json_file);
      $tinh_thanh   = json_decode($json_tinh_tp, true);
      foreach ($tinh_thanh as $key => $value) {
        if ($key == $province_address['province']) {
          $province = $tinh_thanh[$key]['name'];
          break;
        }
      }
    }
    if ($province_address['province']):
      $json_file = get_stylesheet_directory() . "/json/quan-huyen/" . $province_address['province'] . ".json";
      if (file_exists($json_file)) {
        $json_quan_huyen = file_get_contents($json_file);
        $quan_huyen      = json_decode($json_quan_huyen, true);
        foreach ($quan_huyen as $key => $value) {
          if ($key == $province_address['district']) {
            $district = $quan_huyen[$key]['name_with_type'];
            break;
          }
        }
      }
    endif;
    if ($province_address['district']):
      $json_file = get_stylesheet_directory() . "/json/xa-phuong/" . $province_address['district'] . ".json";
      if (file_exists($json_file)) {
        $json_xa_phuong = file_get_contents($json_file);
        $xa_phuong      = json_decode($json_xa_phuong, true);
        foreach ($xa_phuong as $key => $value) {
          if ($key == $province_address['ward']) {
            $ward = $xa_phuong[$key]['name_with_type'];
            break;
          }
        }
      }
    endif;
  }
  return array(
    'province' => $province,
    'district' => $district,
    'ward'     => $ward,
    'street'   => $province_address['street'],
  );
}
/**
 *
 * Crop image
 */
function resize_image($method, $image_loc, $new_loc, $width, $height) {
  $exif = exif_read_data($image_loc);
  if (isset($exif['Orientation']) && $exif['Orientation'] === 6) {
    $rotate = -90;
  } else if (isset($exif['Orientation']) && $exif['Orientation'] === 3) {
    $rotate = 180;
  } else if (isset($exif['Orientation']) && $exif['Orientation'] === 8) {
    $rotate = 90;
  }
  if (!is_array(@$GLOBALS['errors'])) {$GLOBALS['errors'] = array();}
  if (!in_array($method, array('force', 'max', 'crop'))) {$GLOBALS['errors'][] = 'Invalid method selected.';}
  if (!$image_loc) {$GLOBALS['errors'][] = 'No source image location specified.';} else {
    if ((substr(strtolower($image_loc), 0, 7) == 'http://') || (substr(strtolower($image_loc), 0, 7) == 'https://')) { /*don't check to see if file exists since it's not local*/} elseif (!file_exists($image_loc)) {$GLOBALS['errors'][] = 'Image source file does not exist.';}
    $extension = strtolower(substr($image_loc, strrpos($image_loc, '.')));
    if (!in_array($extension, array('.jpg', '.jpeg', '.png', '.gif', '.bmp'))) {$GLOBALS['errors'][] = 'Invalid source file extension!';}
  }
  if (!$new_loc) {$GLOBALS['errors'][] = 'No destination image location specified.';} else {
    $new_extension = strtolower(substr($new_loc, strrpos($new_loc, '.')));
    if (!in_array($new_extension, array('.jpg', '.jpeg', '.png', '.gif', '.bmp'))) {$GLOBALS['errors'][] = 'Invalid destination file extension!';}
  }
  $width = abs(intval($width));
  if (!$width) {$GLOBALS['errors'][] = 'No width specified!';}
  $height = abs(intval($height));
  if (!$height) {$GLOBALS['errors'][] = 'No height specified!';}
  if (count($GLOBALS['errors']) > 0) {echo_errors();return false;}
  if (in_array($extension, array('.jpg', '.jpeg'))) {$image = @imagecreatefromjpeg($image_loc);} elseif ($extension == '.png') {$image = @imagecreatefrompng($image_loc);} elseif ($extension == '.gif') {$image = @imagecreatefromgif($image_loc);} elseif ($extension == '.bmp') {$image = @imagecreatefromwbmp($image_loc);}
  if (!$image) {$GLOBALS['errors'][] = 'Image could not be generated!';} else {
    $current_width  = imagesx($image);
    $current_height = imagesy($image);
    if ((!$current_width) || (!$current_height)) {$GLOBALS['errors'][] = 'Generated image has invalid dimensions!';}
  }
  if (count($GLOBALS['errors']) > 0) {
    @imagedestroy($image);
    echo_errors();return false;}
  if ($method == 'force') {$new_image = resize_image_force($image, $width, $height);} elseif ($method == 'max') {$new_image = resize_image_max($image, $width, $height);} elseif ($method == 'crop') {$new_image = resize_image_crop($image, $width, $height);}
  if ((!$new_image) && (count($GLOBALS['errors'] == 0))) {$GLOBALS['errors'][] = 'New image could not be generated!';}
  if (count($GLOBALS['errors']) > 0) {
    @imagedestroy($image);
    echo_errors();return false;}
  $save_error = false;
  if (in_array($extension, array('.jpg', '.jpeg'))) {
    if (isset($rotate)) {$new_image = imagerotate($new_image, $rotate, 0);}
    imagejpeg($new_image, $new_loc) or ($save_error = true);} elseif ($extension == '.png') {
    if (isset($rotate)) {$new_image = imagerotate($new_image, $rotate, 0);}
    imagepng($new_image, $new_loc) or ($save_error = true);} elseif ($extension == '.gif') {imagegif($new_image, $new_loc) or ($save_error = true);} elseif ($extension == '.bmp') {imagewbmp($new_image, $new_loc) or ($save_error = true);}
  if ($save_error) {$GLOBALS['errors'][] = 'New image could not be saved!';}
  if (count($GLOBALS['errors']) > 0) {
    @imagedestroy($image);@imagedestroy($new_image);
    echo_errors();return false;}
  imagedestroy($image);
  imagedestroy($new_image);
  return true;
}
function echo_errors() {
  if (!is_array(@$GLOBALS['errors'])) {$GLOBALS['errors'] = array('Unknown error!');}
  foreach ($GLOBALS['errors'] as $error) {echo '<p style="color:red;font-weight:bold;">Error: ' . $error . '</p>';}
}
function resize_image_force($image, $width, $height) {
  $w = @imagesx($image); //current width
  $h = @imagesy($image); //current height
  if ((!$w) || (!$h)) {$GLOBALS['errors'][] = 'Image couldn\'t be resized because it wasn\'t a valid image.';return false;}
  if (($w == $width) && ($h == $height)) {return $image;} //no resizing needed
  $image2 = imagecreatetruecolor($width, $height);
  imagecopyresampled($image2, $image, 0, 0, 0, 0, $width, $height, $w, $h);
  return $image2;
}
function resize_image_max($image, $max_width, $max_height) {
  $w = imagesx($image); //current width
  $h = imagesy($image); //current height
  if ((!$w) || (!$h)) {$GLOBALS['errors'][] = 'Image couldn\'t be resized because it wasn\'t a valid image.';return false;}
  if (($w <= $max_width) && ($h <= $max_height)) {return $image;} //no resizing needed
  //try max width first...
  $ratio = $max_width / $w;
  $new_w = $max_width;
  $new_h = $h * $ratio;
  //if that didn't work
  if ($new_h > $max_height) {
    $ratio = $max_height / $h;
    $new_h = $max_height;
    $new_w = $w * $ratio;
  }
  $new_image = imagecreatetruecolor($new_w, $new_h);
  imagecopyresampled($new_image, $image, 0, 0, 0, 0, $new_w, $new_h, $w, $h);
  return $new_image;
}
function resize_image_crop($image, $width, $height) {
  $w = @imagesx($image); //current width
  $h = @imagesy($image); //current height
  if ((!$w) || (!$h)) {$GLOBALS['errors'][] = 'Image couldn\'t be resized because it wasn\'t a valid image.';return false;}
  if (($w == $width) && ($h == $height)) {return $image;} //no resizing needed
  //try max width first...
  $ratio = $width / $w;
  $new_w = $width;
  $new_h = $h * $ratio;
  //if that created an image smaller than what we wanted, try the other way
  if ($new_h < $height) {
    $ratio = $height / $h;
    $new_h = $height;
    $new_w = $w * $ratio;
  }
  $image2 = imagecreatetruecolor($new_w, $new_h);
  imagecopyresampled($image2, $image, 0, 0, 0, 0, $new_w, $new_h, $w, $h);
  //check to see if cropping needs to happen
  if (($new_h != $height) || ($new_w != $width)) {
    $image3 = imagecreatetruecolor($width, $height);
    if ($new_h > $height) {
      //crop vertically
      $extra = $new_h - $height;
      $x     = 0; //source x
      $y     = round($extra / 2); //source y
      imagecopyresampled($image3, $image2, 0, 0, $x, $y, $width, $height, $width, $height);
    } else {
      $extra = $new_w - $width;
      $x     = round($extra / 2); //source x
      $y     = 0; //source y
      imagecopyresampled($image3, $image2, 0, 0, $x, $y, $width, $height, $width, $height);
    }
    imagedestroy($image2);
    return $image3;
  } else {
    return $image2;
  }
}
function upload_image($file) {
  $targetDir      = wp_upload_dir()["basedir"] . '/image-files/';
  $allowTypes     = array('jpg', 'png', 'jpeg');
  $fileName       = round(microtime(true)) . "_" . basename($file['name']);
  $targetFilePath = $targetDir . $fileName;
  // Check whether file type is valid
  $fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION);
  if (in_array($fileType, $allowTypes)) {
    if ($file["size"] > 10000000) {
      return array("status" => "error", "content" => "Maximum 10Mb");
    }
    if (move_uploaded_file($file['tmp_name'], $targetFilePath)) {
      resize_image('crop', $targetDir . $fileName, $targetDir . '200x200/' . $fileName, 200, 200);
      $file_id = umm_model_insert_img($fileName);
      return array("status" => "success", "content" => $file_id);
    }
  } else {
    return array("status" => "error", "content" => "Allow jpg, png, jpeg");
  }
}
function umm_model_insert_img($file_name) {
  global $wpdb;
  $table  = $wpdb->prefix . 'images';
  $data   = array('image_name' => $file_name, 'user_id' => get_current_user_id());
  $format = array('%s', '%d');
  $wpdb->insert($table, $data, $format);
  return $wpdb->insert_id;
}
function get_image_url_by_id($id, $size = "full") {
  $url = wp_get_upload_dir()["baseurl"] . "/image-files/";
  if ($size != "full") {
    $url = wp_get_upload_dir()["baseurl"] . "/image-files/200x200/";
  }
  global $wpdb;
  $table  = $wpdb->prefix . "images";
  $result = $wpdb->get_results($wpdb->prepare(" SELECT image_name  FROM  {$table} WHERE id = %d ", $id), ARRAY_A, 1);
  return $url . $result[0]["image_name"];
}
/**
 *
 * Delete uploaded images file, database
 */
function delete_img_by_id($img_id) {
  global $wpdb;
  $table     = $wpdb->prefix . "images";
  $result    = $wpdb->get_results($wpdb->prepare(" SELECT image_name  FROM  {$table} WHERE id = %d ", $img_id), ARRAY_A, 1);
  $file_name = $result[0]["image_name"];
  $folder    = wp_upload_dir()["basedir"] . '/image-files/';
  unlink($folder . $file_name);
  unlink($folder . "200x200/" . $file_name);
  $wpdb->delete($table, array('id' => $img_id), array('%d'));
}
/**
 *
 * Get image url avatar  by user id
 */
function get_url_avatar($user_id = '') {
  if ($user_id === '') {
    $user_id = get_current_user_id();
  }
  $id_avatar = get_user_meta($user_id, 'id_img_avatar', true);
  if ($id_avatar) {
    return get_image_url_by_id($id_avatar, 'thumbnail');
  }
  return AVATAR_DF;
}
/**
 *
 * Check user exists
 * @return boolean
 */
function is_user_exist($user_id) {
  $user       = get_userdata($user_id);
  $user_roles = !empty($user) ? $user->roles[0] : "";
  if ($user === false or $user_roles != USER) {
    return false;
  } else {
    return true;
  }
}
/**
 *
 * Check View other account
 * @return boolean
 */
function is_view_other_account() {
  if (is_page('account') && isset($_GET['id']) && intval($_GET['id']) !== get_current_user_id()) {
    return true;
  }
  return false;
}
/**
 *
 * Get list user follow
 * @return array
 */
function list_user_follow($user_id = null) {
  if (!$user_id) {
    $user_id = get_current_user_id();
  }
  $list_user_follow = get_user_meta($user_id, 'list_user_follow', true);
  if (!$list_user_follow) {
    return array();
  }
  return json_decode($list_user_follow, true);
}
/**
 *
 * Nhận danh sách người theo dõi tôi
 * @return array
 */
function get_list_follower($current_user_id = null) {
  if (!$current_user_id) {
    $current_user_id = get_current_user_id();
  }
  $args              = array('role' => USER);
  $users             = get_users($args);
  $list_follower_arr = [];
  foreach ($users as $value) {
    $user_id         = $value->ID;
    $list_follow_arr = list_user_follow($user_id);
    if ($list_follow_arr):
      if (in_array($current_user_id, $list_follow_arr)) {
        $list_follower_arr[] = $user_id;
      }
    endif;
  }
  return $list_follower_arr;
}
/**
 *
 * Nhận tổng số người tôi đang theo dõi
 * @return int
 */
function get_total_following($current_user_id = null) {
  if (!$current_user_id) {
    $current_user_id = get_current_user_id();
  }
  return count(list_user_follow($current_user_id));
}
/**
 * tăng lên 1 so tổng thông báo mới hiện tại của user ID
 */
function update_total_notify_user($user_id){
  $total = (int)get_user_meta( $user_id, 'total_notify', true ) + 1;
  update_user_meta( $user_id, 'total_notify', $total);
}
// ==
function get_market_image_url($img_id){
  $url = wp_get_upload_dir()["baseurl"]."/market-images/";
  global $wpdb;
  $table = $wpdb->prefix."bj_market_image";
  $result = $wpdb->get_results ( $wpdb->prepare(" SELECT image_name FROM  {$table} WHERE id = %d ",$img_id) ,ARRAY_A  );
  if(!empty($result)){
    return $url."__".$result[0]["image_name"];
  }else{
    return THEME_URL."assets/images/default.jpg";
  }
}
function market_upload_image($file){
  $targetDir = wp_upload_dir()["basedir"].'/market-images/'; 
  $allowTypes = array( 'jpg', 'png', 'jpeg'); 
  $fileName = round(microtime(true))."_".basename($file['name']);
  $targetFilePath = $targetDir.$fileName; 
    // Check whether file type is valid 
  $fileType = pathinfo($targetFilePath, PATHINFO_EXTENSION); 
  if(in_array($fileType, $allowTypes)){ 
    if($file["size"] > 5000000) return array("status" => "error","content" => "Maximum 5Mb");
    if(move_uploaded_file($file['tmp_name'], $targetFilePath)){ 
      $result = resize_image('max',$targetDir.$fileName,$targetDir.'__'.$fileName,600,4000);
      if($result == true){
        $file_id = add_market_image_to_db($fileName);
        unlink($targetDir.$fileName);
        return array("status" => "success","content" => $file_id);
      }
    }else{
      return array("status" => "error","content" => "Unknow");
    } 
  }else{
    return array("status" => "error","content" => "Allow jpg, png, jpeg");
  }
}
function add_market_image_to_db($file_name){
  global $wpdb;
  $table = $wpdb->prefix."bj_market_image";
  $wpdb->insert($table,
    array("image_name" => $file_name),
    array("%s")
  );
  return $wpdb->insert_id;
}
```

C:\xampp\htdocs\wordpress8\wp-content\themes\addframwork\framework\models\deal.php

```
<?php
class BJ_deal_Model {
  private $table_business_deal = 'bj_business_deal';
  public function get_deal_detail($deal_id) {
    global $wpdb;
    $table  = $wpdb->prefix . $this->table_business_deal;
    $result = $wpdb->get_results($wpdb->prepare(" SELECT * FROM  {$table} WHERE id = %d", $deal_id), ARRAY_A);
    if (!empty($result)) {
      return $result[0];
    }
  }
  public function deal_get_list_user_id_saved($deal_id) {
    global $wpdb;
    $table  = $wpdb->prefix . "bj_business_deal_saved";
    $result = $wpdb->get_results($wpdb->prepare(" SELECT user_id FROM  {$table} WHERE deal_id = %d ", $deal_id), ARRAY_A);
    $arr    = [];
    if (!empty($result)) {
      foreach ($result as $value) {
        $arr[] = $value["user_id"];
      }
    }
    return $arr;
  }
  public function add_deal($data,$format){
    global $wpdb;
    $table = $wpdb->prefix.$this->table_business_deal;
    $wpdb->insert($table,$data,$format);
    return $wpdb->insert_id;
  }
} 
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://learnphp.gitbook.io/learnphp/wordpress-advand/framework-xay-dung-page-account-phan-4-ok.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
