diff --git a/helper/wprest.php b/helper/wprest.php index e446abc..8171b3f 100644 --- a/helper/wprest.php +++ b/helper/wprest.php @@ -110,3 +110,103 @@ if(!function_exists("get_wp_new_message")) { return $new_message; } } + +if(!function_exists("authenticate_wp")) { + function authenticate_wp($wp_server_url, $client_id, $client_secret, $route="", $code="", $scope="basic", $state="") { + $flag = false; + + $wp_access_token = get_session("wp_access_token"); + $result = array( + "redirect_uri" => false, + "response" => false + ); + + if(empty($wp_access_token)) { + if(empty($code)) { + // step 1 + $redirect_uri = get_web_build_qs($wp_server_url . "/oauth/authorize", array( + "client_id" => $client_id, + "redirect_uri" => get_route_link($route), + "response_type" => "code", + "scope" => $scope, + "state" => $state + )); + $result['redirect_uri'] = $redirect_uri; + } else { + // step 2 + $response = get_web_json($wp_server_url . "/oauth/token/", "jsondata", array( + "headers" => array( + "Content-Type" => "application/x-www-form-urlencoded", + "Authorization" => sprintf("Basic %s", base64_encode($client_id . ":" . $client_secret)) + ), + "data" => array( + "grant_type" => "authorization_code", + "code" => $code, + "client_id" => $client_id, + "client_secret" => $client_secret, + "redirect_uri" => get_route_link($route), + "state" => $state + ) + )); + + // store access token to session + set_session("wp_access_token", $response->access_token); + set_session("wp_expires_in", $response->expires_in); + set_session("wp_token_type", $response->token_type); + set_session("wp_scope", $response->scope); + set_session("refresh_token", $response->refresh_token); + + // store respose to result + $result['redirect_uri'] = get_route_link($route); + $result['response'] = $response; + } + + if(!array_key_empty("redirect_uri", $result)) { + redirect_uri($result['redirect_uri']); + } + } else { + $flag = true; + } + + return $result; + } +} + +if(!function_exists("write_wp_post")) { + function write_wp_post($wp_server_url, $access_token, $data=array()) { + $default_data = array( + "title" => "Untitled", + "content" => "insert your content", + "author" => 2, + "status" => "publish", + "categories" => "" + ); + + foreach($data as $k=>$v) { + $default_data[$k] = $v; + } + + $response = get_web_json(get_web_build_qs($wp_server_url, array( + "rest_route" => "/wp/v2/posts" + )), "jsondata", array( + "headers" => array( + "Content-Type" => "application/x-www-form-urlencoded", + "Authorization" => "Bearer " . $access_token + ), + "data" => $default_data + ) + ); + + return $response; + } +} + +if(!function_exists("get_wp_categories")) { + function get_wp_categories($wp_server_url, $access_token) { + $response = get_web_json(get_web_build_qs($wp_server_url, array( + "rest_route" => "/wp/v2/categories" + )), "get"); + + return $response; + } +} diff --git a/route/wppost.php b/route/wppost.php new file mode 100644 index 0000000..ef1460b --- /dev/null +++ b/route/wppost.php @@ -0,0 +1,48 @@ + get_requested_value("title"), + "content" => get_requested_value("content"), + "author" => 2, + "status" => get_requested_value("status"), + "categories" => get_requested_value("categories") + ); + + // run post + $response = write_wp_post($wp_server_url, $wp_access_token, $form_data); + redirect_uri(get_route_link($route)); + + break; + + default: + // set session token + set_session_token(); + + // authenticate + $client_id = ""; + $client_secret = ""; + authenticate_wp($wp_server_url, $client_id, $client_secret, $route, $code); + + $categories = get_wp_categories($wp_server_url, $wp_access_token); + $data = array( + "route" => $route, + "categories" => $categories, + "_token" => get_session_token() + ); + + renderView("view_wppost", $data); +} diff --git a/view/view_wppost.php b/view/view_wppost.php new file mode 100644 index 0000000..1c553af --- /dev/null +++ b/view/view_wppost.php @@ -0,0 +1,62 @@ + + + + Write to Wordpress + + + + +
+
+
+ Write to Wordpress + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ +
+
+
+
+ + +