Merge branch 'master' of https://github.com/gnh1201/reasonableframework
This commit is contained in:
commit
32e51a34fd
|
@ -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
48
route/wppost.php
Normal 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
62
view/view_wppost.php
Normal 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>
|
Loading…
Reference in New Issue
Block a user