You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
152 lines
4.6 KiB
152 lines
4.6 KiB
<?php
|
|
|
|
$app->get('/editor', function() use($app) {
|
|
$user = require_login($app, false);
|
|
$html = $app->render('editor.php', [
|
|
'user' => $user,
|
|
'syndication_targets' => json_decode($user->syndication_targets, true)
|
|
]);
|
|
$app->response()->body($html);
|
|
});
|
|
|
|
$app->post('/editor/publish', function() use($app) {
|
|
if($user=require_login($app)) {
|
|
$params = $app->request()->params();
|
|
|
|
$content = $params['body'];
|
|
|
|
// Clean up the HTML from the editor
|
|
$content = sanitize_editor_html($content);
|
|
|
|
if($user->micropub_optin_html_content) {
|
|
$content = ['html' => $content];
|
|
|
|
$micropub_request = array(
|
|
'name' => [$params['name']],
|
|
'description' => [$params['description']],
|
|
'image' => [$params['image']],
|
|
'content' => [$content]
|
|
);
|
|
$json = true;
|
|
} else {
|
|
$json = false;
|
|
|
|
$micropub_request = array(
|
|
'h' => 'entry',
|
|
'name' => [$params['name']],
|
|
'description' => [$params['description']],
|
|
'image' => [$params['image']],
|
|
'content' => [$content]
|
|
);
|
|
}
|
|
|
|
if(array_key_exists('category', $params) && $params['category'])
|
|
$micropub_request['category'] = $params['category'];
|
|
|
|
if(array_key_exists('slug', $params) && $params['slug'])
|
|
$micropub_request[$user->micropub_slug_field] = $params['slug'];
|
|
|
|
if(array_key_exists('status', $params) && $params['status']) {
|
|
if($params['status'] == 'draft')
|
|
$micropub_request['post-status'] = $params['status'];
|
|
}
|
|
|
|
if(array_key_exists('publish', $params) && $params['publish'] != 'now') {
|
|
$micropub_request['published'] = $params['publish'];
|
|
}
|
|
|
|
if($json) {
|
|
$micropub_request = [
|
|
'type' => ['h-entry'],
|
|
'properties' => $micropub_request
|
|
];
|
|
// Convert all values to arrays
|
|
foreach($micropub_request['properties'] as $k=>$v) {
|
|
if(!is_array($v))
|
|
$micropub_request['properties'][$k] = [$v];
|
|
}
|
|
}
|
|
|
|
$r = micropub_post_for_user($user, $micropub_request, null, $json);
|
|
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body(json_encode([
|
|
'location' => $r['location'],
|
|
'response' => trim(htmlspecialchars($r['response']))
|
|
]));
|
|
}
|
|
});
|
|
|
|
$app->post('/editor/upload', function() use($app) {
|
|
if($user=require_login($app)) {
|
|
$fn = $_FILES['files']['tmp_name'][0];
|
|
$imageURL = false;
|
|
|
|
if($user->micropub_media_endpoint) {
|
|
// If the user has a media endpoint, upload to that and return that URL
|
|
correct_photo_rotation($fn);
|
|
$r = micropub_media_post_for_user($user, $fn);
|
|
if(!empty($r['location'])) {
|
|
$imageURL = $r['location'];
|
|
}
|
|
}
|
|
if(!$imageURL) {
|
|
// Otherwise, fake a file uploader by echo'ing back the data URI
|
|
$imageData = base64_encode(file_get_contents($fn));
|
|
$imageURL = 'data:'.mime_content_type($fn).';base64,'.$imageData;
|
|
}
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body(json_encode([
|
|
'files' => [
|
|
['url'=>$imageURL]
|
|
]
|
|
]));
|
|
}
|
|
});
|
|
|
|
$app->post('/editor/parse-date', function() use($app) {
|
|
$date = false;
|
|
$params = $app->request()->params();
|
|
if(isset($params['date'])) {
|
|
if($params['date'] == 'now') {
|
|
$date = 'now';
|
|
} else {
|
|
try {
|
|
// Check if the provided date has a timezone offset
|
|
$has_timezone = preg_match('/[-+]\d\d:?\d\d$/', $params['date']);
|
|
|
|
if(!$has_timezone && $params['tzoffset']) {
|
|
$s = (-60) * $params['tzoffset'];
|
|
$h = $params['tzoffset'] / (-60);
|
|
$tz = new DateTimeZone($h);
|
|
$d = new DateTime($params['date'], $tz);
|
|
} else {
|
|
$d = new DateTime($params['date']);
|
|
}
|
|
$date = $d->format('c');
|
|
} catch(Exception $e) {
|
|
}
|
|
}
|
|
}
|
|
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body(json_encode(['date'=>$date]));
|
|
});
|
|
|
|
$app->post('/editor/delete-file', function() use($app) {
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body(json_encode(['result'=>'deleted']));
|
|
});
|
|
|
|
$app->get('/editor/oembed', function() use($app) {
|
|
$url = 'http://medium.iframe.ly/api/oembed?iframe=1&url='.urlencode($app->request()->params()['url']);
|
|
$json = file_get_contents($url);
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body($json);
|
|
});
|
|
|
|
$app->post('/editor/test-login', function() use($app) {
|
|
$logged_in = array_key_exists('user_id', $_SESSION);
|
|
$app->response()['Content-type'] = 'application/json';
|
|
$app->response()->body(json_encode(['logged_in'=>$logged_in]));
|
|
});
|