1
0
mirror of https://github.com/typemill/typemill.git synced 2025-07-30 19:00:32 +02:00

test changes

This commit is contained in:
trendschau
2019-11-03 19:17:55 +01:00
5 changed files with 84 additions and 2 deletions

View File

@@ -164,6 +164,37 @@ class ContentApiController extends ContentController
}
}
public function discardArticleChanges(Request $request, Response $response, $args)
{
# get params from call
$this->params = $request->getParams();
$this->uri = $request->getUri();
# set structure
if(!$this->setStructure($draft = true)){ return $response->withJson($this->errors, 404); }
# set item
if(!$this->setItem()){ return $response->withJson($this->errors, 404); }
# set redirect url to edit page
$url = $this->uri->getBaseUrl() . '/tm/content/' . $this->settings['editor'] . $this->item->urlRel;
# remove the unpublished changes
$delete = $this->deleteContentFiles(['txt']);
if($delete)
{
# update the backend structure
$this->setStructure($draft = true, $cache = false);
return $response->withJson(['data' => $this->structure, 'errors' => false, 'url' => $url], 200);
}
else
{
return $response->withJson(['data' => $this->structure, 'errors' => $this->errors], 404);
}
}
public function deleteArticle(Request $request, Response $response, $args)
{
# get params from call

View File

@@ -11,6 +11,7 @@ $app->post('/api/v1/article/markdown', ContentApiController::class . ':getArticl
$app->post('/api/v1/article/html', ContentApiController::class . ':getArticleHtml')->setName('api.article.html')->add(new RestrictApiAccess($container['router']));
$app->post('/api/v1/article/publish', ContentApiController::class . ':publishArticle')->setName('api.article.publish')->add(new RestrictApiAccess($container['router']));
$app->delete('/api/v1/article/unpublish', ContentApiController::class . ':unpublishArticle')->setName('api.article.unpublish')->add(new RestrictApiAccess($container['router']));
$app->delete('/api/v1/article/discard', ContentApiController::class . ':discardArticleChanges')->setName('api.article.discard')->add(new RestrictApiAccess($container['router']));
$app->post('/api/v1/article', ContentApiController::class . ':createArticle')->setName('api.article.create')->add(new RestrictApiAccess($container['router']));
$app->put('/api/v1/article', ContentApiController::class . ':updateArticle')->setName('api.article.update')->add(new RestrictApiAccess($container['router']));
$app->delete('/api/v1/article', ContentApiController::class . ':deleteArticle')->setName('api.article.delete')->add(new RestrictApiAccess($container['router']));

View File

@@ -1,6 +1,7 @@
<div class="editor buttonset" id="publishController" data-published="{{ item.published }}" data-drafted="{{ item.drafted }}" v-cloak>
<div v-if="errors.message" class="message error">${ errors.message }</div>
<button v-if="raw" @click.prevent="saveDraft" id="draft" :class="draftResult" :disabled="draftDisabled"><span class="desktop">Save&nbsp;</span>Draft</button><button @click.prevent="publishDraft" id="publish" :class="publishResult" :disabled="publishDisabled">Publish</button>
<button @click.prevent="discardDraft" v-if="visual && !publishStatus" id="discard" :class="discardResult" :disabled="publishDisabled">Discard</button>
<div class="secondary">
<button @click.prevent="depublishArticle" class="button--secondary" :disabled="publishStatus"><span class="desktop">${publishLabel}</span><span class="mobile">${publishLabelMobile}</span></button>
<button @click.prevent="showModal" class="button--secondary danger"><span class="desktop">delete</span><span class="mobile">X</span></button>

View File

@@ -21,6 +21,7 @@ let editor = new Vue({
publishController.publishDisabled = false;
publishController.draftResult = "";
publishController.publishResult = "";
publishController.discardResult = "";
},
}
});

View File

@@ -19,6 +19,7 @@ let publishController = new Vue({
deleteDisabled: false,
draftResult: "",
publishResult: "",
discardResult: "",
deleteResult: "",
publishStatus: document.getElementById("publishController").dataset.published ? false : true,
publishLabel: document.getElementById("publishController").dataset.published ? "online" : "offline",
@@ -83,6 +84,53 @@ let publishController = new Vue({
}
}, method, url, this.form );
},
discardDraft: function(e) {
var self = this;
self.errors.message = false;
editor.errors = {title: false, content: false};
self.discardResult = "load";
self.publishDisabled = "disabled";
var url = self.root + '/api/v1/article/discard';
var method = 'DELETE';
sendJson(function(response, httpStatus)
{
if(httpStatus == 400)
{
self.publishDisabled = false;
self.discardResult = "fail";
self.errors.message = "You are probably logged out. Please backup your changes, login and then try again."
}
else if(response)
{
var result = JSON.parse(response);
if(result.errors)
{
self.publishDisabled = false;
self.discardResult = "fail";
if(result.errors.title){ editor.errors.title = result.errors.title[0] }
if(result.errors.content){ editor.errors.content = result.errors.content[0] }
if(result.errors.message){ self.errors.message = result.errors.message }
}
else
{
window.location.replace(result.url);
}
}
else if(httpStatus != 200)
{
self.publishDisabled = false;
self.discardResult = "fail";
self.errors.message = "Something went wrong, please refresh the page and try again."
}
}, method, url, this.form);
},
saveDraft: function(e){
var self = this;
@@ -93,7 +141,7 @@ let publishController = new Vue({
self.draftResult = "load";
var url = this.root + '/api/v1/article';
var method = 'PUT';
var method = 'PUT';
this.form.title = editor.form.title;
this.form.content = editor.form.content;
@@ -107,7 +155,7 @@ let publishController = new Vue({
self.errors.message = "You are probably logged out. Please backup your changes, login and then try again."
}
else if(response)
{
{
var result = JSON.parse(response);
if(result.errors)