Skip to content

Instantly share code, notes, and snippets.

@dev-w3
Last active March 8, 2021 04:54
Show Gist options
  • Save dev-w3/1c23a4d94a919cc957d02b505f8e4f8f to your computer and use it in GitHub Desktop.
Save dev-w3/1c23a4d94a919cc957d02b505f8e4f8f to your computer and use it in GitHub Desktop.
add_action( 'rest_api_init', 'register_api_hooks' );
add_action( 'rest_api_init', 'wp_rest_user_endpoints' );
function register_api_hooks() {
register_rest_route(
'apihandle/', '/login/',
array(
'methods' => 'POST',
'callback' => 'login_api',
)
);
}
function login_api($request){
$creds = array();
$response = array();
$creds['user_login'] = $request["username"];
$creds['user_password'] = utf8_encode($request["password"]);
$creds['remember'] = true;
$user = wp_signon( $creds, false );
$error = new WP_Error();
$userarry = (array)$user;
$username = $userarry['data']->user_nicename;
$user_id = $userarry['data']->ID;
$fname= get_user_meta($user_id, 'first_name', $first_name);
$lname = get_user_meta($user_id, 'last_name', $last_name);
$cphone = get_user_meta($user_id, 'work', $phone);
$company = get_user_meta($user_id, 'company', $company);
// $userarry['data'] = $fname;
$userinfo = array();
//$userinfo = array("first_name"=> $fname,"work"=>$lname, "company_name"=>$company, "company_phone"=>$cphone);
//
$userinfo['first_name'] = $fname;
$userinfo['last_name'] = $lname;
$userinfo['company_name'] = $company;
$userinfo['company_phone'] = $cphone;
//$userinfoarray = array_flatten($userinfo);
$data = array_merge((array)$userarry['data'], $userinfo);
$data = array_flatten($data);
$arr = replaceArrayKey($data, '0', 'first_name');
$arr1 = replaceArrayKey($arr, '1', 'last_name');
$arr2 = replaceArrayKey($arr1, '2', 'company_name');
$farray = replaceArrayKey($arr2, '3', 'company_phone');
if ( is_wp_error($user) ) {
// echo $user->get_error_message();
$error->add(401, __("Username or Password is incorrect.", 'wp-user-login'), array('status' => 400));
return $error;
}
$response['code'] = 200;
$response['message'] = __("User '" . $username . "' loggedin Successfully", "wp-user-login");
$response['data'] = $farray;
return new WP_REST_Response($response, 123);
}
add_action( 'after_setup_theme', 'custom_login' );
/*
For Registration
*/
function wp_rest_user_endpoints($request) {
/**
* Handle Register User request.
*/
register_rest_route('apihandle/', '/register', array(
'methods' => 'POST',
'callback' => 'wc_rest_user_endpoint_handler',
));
}
function wc_rest_user_endpoint_handler($request = null) {
$response = array();
$parameters = $request->get_json_params();
$username = sanitize_text_field($request['username']);
$email = sanitize_text_field($request['email']);
$first_name = sanitize_text_field($request['first_name']);
$last_name = sanitize_text_field($request['last_name']);
$phone = sanitize_text_field($request['phone']);
$company = sanitize_text_field($request['company']);
$password = sanitize_text_field($request['password']);
// $role = sanitize_text_field($parameters['role']);
$error = new WP_Error();
if (empty($username)) {
$error->add(400, __("Username field 'username' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($email)) {
$error->add(401, __("Email field 'email' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($password)) {
$error->add(404, __("Password field 'password' is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($first_name)) {
$error->add(401, __("First Name field is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($last_name)) {
$error->add(401, __("Last Name field is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($phone)) {
$error->add(401, __("Phone Number field is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($company)) {
$error->add(401, __("Company Name field is required.", 'wp-rest-user'), array('status' => 400));
return $error;
}
$user_id = username_exists($username);
if (!$user_id && email_exists($email) == false) {
$user_id = wp_create_user($username, $password, $email);
if (!is_wp_error($user_id)) {
// Ger User Meta Data (Sensitive, Password included. DO NOT pass to front end.)
$user = get_user_by('id', $user_id);
update_user_meta($user_id, 'first_name', $first_name);
update_user_meta($user_id, 'last_name', $last_name);
update_user_meta($user_id, 'work', $phone);
update_user_meta($user_id, 'company', $company);
$user_info = get_userdata( $user_id );
$userinfo = array();
$userinfo = array("user_id" => $user_id, "user_login" => $username, "user_email" => $email, "first_name"=> $first_name,"last_name"=>$last_name, "company_name"=>$company, "company_phone"=>$phone, "display_name" => $user_info->display_name);
// $user->set_role($role);
$user->set_role('apihandle-customer');
// WooCommerce specific code
if (class_exists('WooCommerce')) {
$user->set_role('customer');
}
// Ger User Data (Non-Sensitive, Pass to front end.)
$response['code'] = 200;
$response['message'] = __("User '" . $username . "' Registration was Successful", "wp-rest-user");
$response['data'] = $userinfo;
} else {
return $user_id;
}
} else {
$error->add(406, __("Email already exists, please try 'Reset Password'", 'wp-rest-user'), array('status' => 400));
return $error;
}
return new WP_REST_Response($response, 123);
}
// update_profile
add_action( 'rest_api_init', 'wp_user_update_endpoints' );
function wp_user_update_endpoints($request) {
register_rest_route('apihandle/', '/updateprofile', array(
'methods' => 'POST',
'callback' => 'wc_user_update_endpoint_handler',
));
}
function wc_user_update_endpoint_handler($request = null) {
$response = array();
$user_id = sanitize_text_field($request['user_id']);
$username = sanitize_text_field($request['username']);
$first_name = sanitize_text_field($request['first_name']);
$last_name = sanitize_text_field($request['last_name']);
$display_name = sanitize_text_field($request['display_name']);
$email_address = sanitize_text_field($request['email_address']);
$new_password = sanitize_text_field($request['new_password']);
$company_name = sanitize_text_field($request['company_name']);
$company_mobile = sanitize_text_field($request['company_mobile']);
$work_phone = sanitize_text_field($request['work_phone']);
$fax = sanitize_text_field($request['fax']);
$address = sanitize_text_field($request['address']);
$city = sanitize_text_field($request['city']);
$state = sanitize_text_field($request['state']);
$zipcode = sanitize_text_field($request['zipcode']);
$usercheck = get_userdata( $user_id );
$error = new WP_Error();
if ( $username == ''){
$error->add(401, __("Username is required", 'wp-rest-user'), array('status' => 400));
return $error;
}
if ( $email_address == ''){
$error->add(401, __("Email is required", 'wp-rest-user'), array('status' => 400));
return $error;
}
if ( $usercheck == false || $user_id == '' ){
$error->add(401, __("User doesn't exists", 'wp-rest-user'), array('status' => 400));
return $error;
} else {
$WP_array = array(
'ID' => $user_id,
//'first_name' => $first_name,
//'last_name' => $last_name,
'display_name' => $display_name,
);
$WParray = array(
'ID' => $user_id,
//'first_name' => $first_name,
//'last_name' => $last_name,
'display_name' => $display_name,
'user_pass' => $new_password,
);
if($new_password)
$update_user = wp_update_user($WParray);
else
$update_user = wp_update_user($WP_array);
if($update_user) {
if($first_name)
update_user_meta($update_user, 'first_name', $first_name);
if($last_name)
update_user_meta($update_user, 'last_name', $last_name);
if($work_phone)
update_user_meta($update_user, 'work', $work_phone);
if($company_name)
update_user_meta($update_user, 'company', $company_name);
if($company_mobile)
update_user_meta($update_user, 'mobile', $company_mobile);
if($fax)
update_user_meta($update_user, 'fax', $fax);
if($address)
update_user_meta($update_user, 'address', $address);
if($city)
update_user_meta($update_user, 'city', $city);
if($state)
update_user_meta($update_user, 'state', $state);
if($zipcode)
update_user_meta($update_user, 'zip', $zipcode);
$fname = get_user_meta($update_user, 'first_name', true);
$lname = get_user_meta($update_user, 'last_name', true);
$work = get_user_meta($update_user, 'work', true);
$company = get_user_meta($update_user, 'company', true);
$mobile = get_user_meta($update_user, 'mobile', true);
$fax = get_user_meta($update_user, 'fax', true);
$address = get_user_meta($update_user, 'address', true);
$city = get_user_meta($update_user, 'city', true);
$state = get_user_meta($update_user, 'state', true);
$zipcode = get_user_meta($update_user, 'zip', true);
$user_info = get_userdata( $update_user );
$userinfo = array("user_id" => $update_user, "user_login" => $user_info->user_login, "display_name" => $user_info->display_name, "user_email" => $user_info->user_email, "first_name"=> $fname,"last_name"=>$lname, "company_name"=>$company, "company_phone"=>$work, 'mobile' => $mobile, 'fax' => $fax, 'address' => $address, 'city' => $city, 'state' => $state, 'zipcode' => $zipcode);
$response['code'] = 200;
$response['message'] = __("Profile updated successfully.", "wp-rest-user");
$response['data'] = $userinfo;
return new WP_REST_Response($response, 123);
}
}
}
// Logout API
add_action( 'rest_api_init', 'wp_logout_endpoints' );
function wp_logout_endpoints($request) {
register_rest_route('apihandle/', '/logout', array(
'methods' => 'GET',
'callback' => 'wc_logout_endpoint_handler',
));
}
function wc_logout_endpoint_handler() {
wp_destroy_current_session();
wp_logout();
wp_set_current_user(0);
$response['code'] = 200;
$response['message'] = __("logged out Successfully", "wp-rest-user");
return new WP_REST_Response($response, 123);
}
// Logout from all devices
add_action( 'rest_api_init', 'wp_logout_alldevices_endpoints' );
function wp_logout_alldevices_endpoints($request) {
register_rest_route('apihandle/', '/logout-all', array(
'methods' => 'POST',
'callback' => 'wc_logout_alldevices_endpoint_handler',
));
}
function wc_logout_alldevices_endpoint_handler($request = null) {
$user_id = $request['user_id'];
$sessions = WP_Session_Tokens::get_instance($user_id);
$sessions->destroy_all();
$response['code'] = 200;
$response['message'] = __("logged out Successfully", "wp-rest-user");
return new WP_REST_Response($response, 123);
}
// get rewards
add_action( 'rest_api_init', 'wp_rewards_endpoints' );
function wp_rewards_endpoints($request) {
register_rest_route('apihandle/', '/rewards', array(
'methods' => 'POST',
'callback' => 'wc_rewards_endpoint_handler',
));
}
function wc_rewards_endpoint_handler($request = null) {
$user_id = $request['user_id'];
$error = new WP_Error();
$usercheck = get_userdata( $user_id );
if ( $usercheck == false || $user_id == '' ){
$error->add(401, __("User doesn't exists", 'wp-rest-user'), array('status' => 400));
return $error;
}
$default_rewards = get_user_meta($user_id, 'mycred_default', true);
$total_rewards = get_user_meta($user_id, 'mycred_default_total', true);
$rewards = array('rewards_default' => $default_rewards, 'rewards_default_total' => $total_rewards);
$response['code'] = 200;
$response['message'] = __("Rewards points", "wp-rest-user");
$response['data'] = $rewards;
return new WP_REST_Response($response, 123);
}
add_action( 'rest_api_init', 'wp_create_post_endpoints' );
function wp_create_post_endpoints($request) {
/**
* Handle Register User request.
*/
register_rest_route('apihandle/', '/upload-receipts', array(
'methods' => 'POST',
'callback' => 'wc_create_post_endpoint_handler',
));
}
function wc_create_post_endpoint_handler($request = null) {
$response = array();
$parameters = $request->get_json_params();
$title = $request['customer_last_name'] .' - ' . date('d/m/yy');
$state = sanitize_text_field($request['state']);
$dealer = sanitize_text_field($request['dealer']);
$reference = sanitize_text_field($request['reference']);
$purchase_amount = sanitize_text_field($request['purchase_amount']);
$recipts = $request['recipts'];
$notes = sanitize_text_field($request['notes']);
$verified = sanitize_text_field($request['verified']);
$post_author = sanitize_text_field($request['post_author']);
$user_info = get_userdata( $post_author);
$userdire = $user_info->user_login;
$upload = wp_upload_dir();
$upload_dir = $upload['basedir'];
$upload_dir = $upload_dir . '/apihandle/'.$userdire;
if (! is_dir($upload_dir)) {
mkdir( $upload_dir, 0777 );
}
$file_name = $_FILES['recipts']['name'];
$file_temp = $_FILES['recipts']['tmp_name'];
$upload_dir = wp_upload_dir();
$image_data = file_get_contents( $file_temp );
$filename = basename( $file_name );
$filetype = wp_check_filetype($file_name);
$filename = time().'.'.$filetype['ext'];
$file = $upload_dir['basedir'] . '/apihandle/' .$userdire.'/'. $filename;
file_put_contents( $file, $image_data );
$wp_filetype = wp_check_filetype( $filename, null );
$attachment = array( 'post_mime_type' => $wp_filetype['type'], 'post_title' => sanitize_file_name( $filename ),
'post_content' => '', 'post_status' => 'inherit');
$attach_id = wp_insert_attachment( $attachment, $file );
$feat_image_url = wp_get_attachment_url( $attach_id );
$error = new WP_Error();
if (empty($post_author)) {
$error->add(400, __("Please login to upload recipts", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($purchase_amount)) {
$error->add(401, __("Order amount is required", 'wp-rest-user'), array('status' => 400));
return $error;
}
if (empty($_FILES['recipts']['tmp_name'])) {
$error->add(401, __("Please upload recipts file", 'wp-rest-user'), array('status' => 400));
return $error;
}
$post_id = wp_insert_post(array (
'post_type' => 'apihandle_reward',
'post_title' => $title,
'post_content' => $title,
'post_author' => $post_author,
'post_status' => 'publish',
'comment_status' => 'closed', // if you prefer
));
$nts = array();
$nts[] = $notes;
if ($post_id) {
update_post_meta($post_id, 'apihandle-state', $state);
update_post_meta($post_id, 'apihandle-distributor', $dealer);
update_post_meta($post_id, 'apihandle-sale_amount', $purchase_amount);
update_post_meta($post_id, 'apihandle-file_upload', $feat_image_url);
update_post_meta($post_id, 'apihandle-sale_verified', $verified);
update_post_meta($post_id, 'apihandle-notes_internal', $notes);
update_post_meta($post_id, 'apihandle-file_desc', $notes);
$userinfo = array("id" => $post_id, "state" => $state, "dealer" => $dealer, "purchase_amount" => $purchase_amount, "receipt"=> $feat_image_url, 'notes' => $notes);
$response['code'] = 200;
$response['message'] = __("Receipt Uploaded successfully", "wp-rest-user");
$response['data'] = $userinfo;
return new WP_REST_Response($response, 123);
}
}
/*
For Delete Posts
*/
/*
$api_response = wp_remote_request( 'example.com/wp-json/wp/v2/posts/{POST_ID}', array( // ?force=true to skip trash
'method' => 'DELETE',
'headers' => array(
'Authorization' => 'Basic ' . base64_encode( 'LOGIN:PASSWORD' )
)
));
$body = json_decode( $api_response['body'] );
if( wp_remote_retrieve_response_message( $api_response ) === 'OK' ) {
if( $body->deleted == true ) {
echo 'The post ' . $body->previous->title->rendered . ' has been completely deleted';
} else {
echo 'The post ' . $body->title->rendered . ' has been moved to trash';
}
}
*/
@dev-w3
Copy link
Author

dev-w3 commented Aug 11, 2020

WordPress API

Login
Register
Logout from all Devices
Update Profile

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment