Creating another task stay in the popover

This commit is contained in:
Frederic Guillot 2015-09-05 17:06:01 -04:00
parent ccaf78b348
commit 70d3340cd0
9 changed files with 78 additions and 43 deletions

View File

@ -7,6 +7,8 @@ New features:
Improvements:
* Creating another task stay in the popover (no full page refresh anymore)
Bug fixes:
* Fix typo in template that prevent the Gitlab oauth link to be displayed

View File

@ -59,25 +59,29 @@ class Taskcreation extends Base
list($valid, $errors) = $this->taskValidator->validateCreation($values);
if ($valid) {
if ($this->taskCreation->create($values)) {
$this->session->flash(t('Task created successfully.'));
if (isset($values['another_task']) && $values['another_task'] == 1) {
unset($values['title']);
unset($values['description']);
$this->response->redirect($this->helper->url->to('taskcreation', 'create', $values));
}
else {
$this->response->redirect($this->helper->url->to('board', 'show', array('project_id' => $project['id'])));
}
}
else {
$this->session->flashError(t('Unable to create your task.'));
}
if ($valid && $this->taskCreation->create($values)) {
$this->session->flash(t('Task created successfully.'));
$this->afterSave($project, $values);
}
else {
$this->session->flashError(t('Unable to create your task.'));
}
$this->create($values, $errors);
}
private function afterSave(array $project, array &$values)
{
if (isset($values['another_task']) && $values['another_task'] == 1) {
unset($values['title']);
unset($values['description']);
if (! $this->request->isAjax()) {
$this->response->redirect($this->helper->url->to('taskcreation', 'create', $values));
}
}
else {
$this->response->redirect($this->helper->url->to('board', 'show', array('project_id' => $project['id'])));
}
}
}

View File

@ -126,11 +126,13 @@ class Taskmodification extends Base
);
if ($ajax) {
$this->response->html($this->template->render('task_modification/edit_task', $params));
$html = $this->template->render('task_modification/edit_task', $params);
}
else {
$this->response->html($this->taskLayout('task_modification/edit_task', $params));
$html = $this->taskLayout('task_modification/edit_task', $params);
}
$this->response->html($html);
}
/**
@ -145,24 +147,20 @@ class Taskmodification extends Base
list($valid, $errors) = $this->taskValidator->validateModification($values);
if ($valid) {
if ($valid && $this->taskModification->update($values)) {
$this->session->flash(t('Task updated successfully.'));
if ($this->taskModification->update($values)) {
$this->session->flash(t('Task updated successfully.'));
if ($this->request->getIntegerParam('ajax')) {
$this->response->redirect($this->helper->url->to('board', 'show', array('project_id' => $task['project_id'])));
}
else {
$this->response->redirect($this->helper->url->to('task', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id'])));
}
if ($this->request->isAjax()) {
$this->response->redirect($this->helper->url->to('board', 'show', array('project_id' => $task['project_id'])));
}
else {
$this->session->flashError(t('Unable to update your task.'));
$this->response->redirect($this->helper->url->to('task', 'show', array('project_id' => $task['project_id'], 'task_id' => $task['id'])));
}
}
$this->edit($values, $errors);
else {
$this->session->flashError(t('Unable to update your task.'));
$this->edit($values, $errors);
}
}
/**

View File

@ -66,7 +66,13 @@ class Response
*/
public function redirect($url)
{
header('Location: '.$url);
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] === 'XMLHttpRequest') {
header('X-Ajax-Redirect: '.$url);
}
else {
header('Location: '.$url);
}
exit;
}

View File

@ -67,9 +67,11 @@ class App extends \Core\Base
if (isset($this->session['flash_message'])) {
$html = '<div class="alert alert-success alert-fade-out">'.$this->helper->e($this->session['flash_message']).'</div>';
unset($this->session['flash_message']);
unset($this->session['flash_error_message']);
}
else if (isset($this->session['flash_error_message'])) {
$html = '<div class="alert alert-error">'.$this->helper->e($this->session['flash_error_message']).'</div>';
unset($this->session['flash_message']);
unset($this->session['flash_error_message']);
}

View File

@ -10,8 +10,7 @@
</div>
<?php endif ?>
<section id="task-section">
<form method="post" action="<?= $this->url->href('taskcreation', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off">
<form id="task-form" method="post" action="<?= $this->url->href('taskcreation', 'save', array('project_id' => $values['project_id'])) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
@ -80,5 +79,4 @@
<input type="submit" value="<?= t('Save') ?>" class="btn btn-blue" tabindex="11"/>
<?= t('or') ?> <?= $this->url->link(t('cancel'), 'board', 'show', array('project_id' => $values['project_id']), false, 'close-popover') ?>
</div>
</form>
</section>
</form>

View File

@ -1,8 +1,7 @@
<div class="page-header">
<h2><?= t('Edit a task') ?></h2>
</div>
<section id="task-section">
<form method="post" action="<?= $this->url->href('taskmodification', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'], 'ajax' => $ajax)) ?>" autocomplete="off">
<form id="task-form" method="post" action="<?= $this->url->href('taskmodification', 'update', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>" autocomplete="off">
<?= $this->form->csrf() ?>
@ -62,5 +61,4 @@
<?= $this->url->link(t('cancel'), 'task', 'show', array('task_id' => $task['id'], 'project_id' => $task['project_id'])) ?>
<?php endif ?>
</div>
</form>
</section>
</form>

File diff suppressed because one or more lines are too long

View File

@ -15,7 +15,8 @@ Popover.prototype.open = function(link) {
$.get(link, function(content) {
$("body").append('<div id="popover-container"><div id="popover-content">' + content + '</div></div>');
self.router.dispatch();
self.app.listen();
self.app.refresh();
self.afterOpen();
});
};
@ -48,3 +49,29 @@ Popover.prototype.listen = function() {
$(document).on("click", "#popover-container", this.close.bind(this));
$(document).on("click", "#popover-content", function(e) { e.stopPropagation(); });
};
Popover.prototype.afterOpen = function() {
var self = this;
var taskForm = $("#task-form");
if (taskForm) {
taskForm.on("submit", function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: taskForm.attr("action"),
data: taskForm.serialize(),
success: function(data, textStatus, request) {
if (request.getResponseHeader("X-Ajax-Redirect")) {
window.location = request.getResponseHeader("X-Ajax-Redirect");
}
else {
$("#popover-content").html(data);
self.afterOpen();
}
}
});
});
}
};