This commit is contained in:
Namhyeon Go 2018-12-31 10:20:47 +09:00
commit 32e51a34fd
3 changed files with 210 additions and 0 deletions

View File

@ -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;
}
}

48
route/wppost.php Normal file
View File

@ -0,0 +1,48 @@
<?php
loadHelper("webpagetool");
loadHelper("wprest");
$route = "wppost";
$wp_server_url = "http://wordpress.local";
$wp_access_token = get_session("wp_access_token");
$code = get_requested_value("code");
$action = get_requested_value("action");
$response = false;
switch($action) {
case "write":
$form_data = array(
"title" => 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);
}

62
view/view_wppost.php Normal file
View File

@ -0,0 +1,62 @@
<!doctype html>
<html>
<head>
<title>Write to Wordpress</title>
<link rel="stylesheet" href="https://unpkg.com/purecss@1.0.0/build/pure-min.css" integrity="sha384-nn4HPE8lTHyVtfCBi5yW9d20FjT8BJwUXyWZT9InLYax14RDjBj46LmSztkmNP9w" crossorigin="anonymous">
</head>
<body>
<div id="wrap">
<form method="post" action="<?php echo base_url(); ?>" class="pure-form pure-form-aligned">
<fieldset>
<legend>Write to Wordpress</legend>
<div class="hidden">
<input type="hidden" name="route" value="<?php echo $route; ?>">
<input type="hidden" name="action" value="write">
<input type="hidden" name="_token" value="<?php echo $_token; ?>">
</div>
<div class="pure-control-group">
<label for="categories">카테고리</label>
<select id="categories" name="categories">
<option value="">선택하세요</option>
<?php
foreach($categories as $category) {
?>
<option value="<?php echo $category->id; ?>"><?php echo $category->name; ?></option>
<?php
}
?>
</select>
</div>
<div class="pure-control-group">
<label for="title">제목</label>
<input id="title" type="text" name="title" placeholder="제목">
</div>
<div class="pure-control-group">
<label for="content">내용</label>
<textarea id="content" name="content" placeholder="내용"></textarea>
</div>
<div class="pure-control-group">
<label for="status">공개유형</label>
<select id="status" name="status">
<option value="publish">publish</option>
<option value="draft">draft</option>
<option value="future">future</option>
<option value="pending">pending</option>
<option value="pending">private</option>
</select>
</div>
<div class="pure-controls">
<button type="submit" class="pure-button pure-button-primary">등록</button>
</div>
</fieldset>
</form>
</div>
</body>
</html>