Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 2d3c716852 |
@@ -1,39 +0,0 @@
|
|||||||
/*
|
|
||||||
* OrganonTweaks -- the "Save & Close" button on the task edit form. It is a plain type=button (so it
|
|
||||||
* never becomes the Enter default -- Enter still triggers the core Save), and on click it repoints
|
|
||||||
* the form to the plugin's TaskSaveCloseController and lets Kanboard's own modal submit it. Kanboard
|
|
||||||
* keeps ownership of the POST, CSRF, error re-render, and the X-Ajax-Redirect navigation; we only
|
|
||||||
* change the destination, so the controller redirects to the board instead of the card view.
|
|
||||||
*/
|
|
||||||
(function () {
|
|
||||||
"use strict";
|
|
||||||
|
|
||||||
document.addEventListener("click", function (e) {
|
|
||||||
if (!e.target || !e.target.closest) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var btn = e.target.closest("[data-organon-save-close]");
|
|
||||||
if (!btn) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
e.preventDefault();
|
|
||||||
|
|
||||||
var form = btn.closest("form");
|
|
||||||
var url = btn.getAttribute("data-url");
|
|
||||||
if (!form || !url) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
form.setAttribute("action", url);
|
|
||||||
|
|
||||||
if (window.KB && KB.modal && KB.modal.isOpen && KB.modal.isOpen() && KB.modal.submitForm) {
|
|
||||||
KB.modal.submitForm();
|
|
||||||
} else if (form.requestSubmit) {
|
|
||||||
form.requestSubmit();
|
|
||||||
} else {
|
|
||||||
form.submit();
|
|
||||||
}
|
|
||||||
}, false);
|
|
||||||
})();
|
|
||||||
@@ -24,7 +24,6 @@ class ConfigController extends BaseController
|
|||||||
'organon_tweaks_recurring_filters' => (int) $this->configModel->get('organon_tweaks_recurring_filters', 1),
|
'organon_tweaks_recurring_filters' => (int) $this->configModel->get('organon_tweaks_recurring_filters', 1),
|
||||||
'organon_tweaks_shortcut_labels' => (int) $this->configModel->get('organon_tweaks_shortcut_labels', 1),
|
'organon_tweaks_shortcut_labels' => (int) $this->configModel->get('organon_tweaks_shortcut_labels', 1),
|
||||||
'organon_tweaks_title_click_edit' => (int) $this->configModel->get('organon_tweaks_title_click_edit', 1),
|
'organon_tweaks_title_click_edit' => (int) $this->configModel->get('organon_tweaks_title_click_edit', 1),
|
||||||
'organon_tweaks_save_close_button' => (int) $this->configModel->get('organon_tweaks_save_close_button', 1),
|
|
||||||
),
|
),
|
||||||
'errors' => array(),
|
'errors' => array(),
|
||||||
)));
|
)));
|
||||||
@@ -44,7 +43,6 @@ class ConfigController extends BaseController
|
|||||||
$recurringFilters = isset($values['organon_tweaks_recurring_filters']) ? 1 : 0;
|
$recurringFilters = isset($values['organon_tweaks_recurring_filters']) ? 1 : 0;
|
||||||
$shortcutLabels = isset($values['organon_tweaks_shortcut_labels']) ? 1 : 0;
|
$shortcutLabels = isset($values['organon_tweaks_shortcut_labels']) ? 1 : 0;
|
||||||
$titleClickEdit = isset($values['organon_tweaks_title_click_edit']) ? 1 : 0;
|
$titleClickEdit = isset($values['organon_tweaks_title_click_edit']) ? 1 : 0;
|
||||||
$saveCloseButton = isset($values['organon_tweaks_save_close_button']) ? 1 : 0;
|
|
||||||
|
|
||||||
if ($this->configModel->save(array(
|
if ($this->configModel->save(array(
|
||||||
'organon_tweaks_always_comment_icon' => $alwaysCommentIcon,
|
'organon_tweaks_always_comment_icon' => $alwaysCommentIcon,
|
||||||
@@ -57,7 +55,6 @@ class ConfigController extends BaseController
|
|||||||
'organon_tweaks_recurring_filters' => $recurringFilters,
|
'organon_tweaks_recurring_filters' => $recurringFilters,
|
||||||
'organon_tweaks_shortcut_labels' => $shortcutLabels,
|
'organon_tweaks_shortcut_labels' => $shortcutLabels,
|
||||||
'organon_tweaks_title_click_edit' => $titleClickEdit,
|
'organon_tweaks_title_click_edit' => $titleClickEdit,
|
||||||
'organon_tweaks_save_close_button' => $saveCloseButton,
|
|
||||||
))) {
|
))) {
|
||||||
$this->flash->success(t('Settings saved successfully.'));
|
$this->flash->success(t('Settings saved successfully.'));
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -1,33 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
namespace Kanboard\Plugin\OrganonTweaks\Controller;
|
|
||||||
|
|
||||||
use Kanboard\Controller\TaskModificationController;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* "Save & Close": the exact core task update, but on success it redirects to the BOARD instead of
|
|
||||||
* reopening the card view. The plugin's "Save & Close" button repoints the edit form here (via JS),
|
|
||||||
* so everything else -- validation, permission checks, CSRF, and the modal error re-render -- is
|
|
||||||
* inherited unchanged from core TaskModificationController. This mirrors core update() line for line
|
|
||||||
* except the one redirect target (kept in sync on Kanboard upgrades).
|
|
||||||
*/
|
|
||||||
class TaskSaveCloseController extends TaskModificationController
|
|
||||||
{
|
|
||||||
public function update()
|
|
||||||
{
|
|
||||||
$task = $this->getTask();
|
|
||||||
$values = $this->request->getValues();
|
|
||||||
$values['id'] = $task['id'];
|
|
||||||
$values['project_id'] = $task['project_id'];
|
|
||||||
|
|
||||||
list($valid, $errors) = $this->taskValidator->validateModification($values);
|
|
||||||
|
|
||||||
if ($valid && $this->updateTask($task, $values, $errors)) {
|
|
||||||
$this->flash->success(t('Task updated successfully.'));
|
|
||||||
$this->response->redirect($this->helper->url->to('BoardViewController', 'show', array('project_id' => $task['project_id'])), true);
|
|
||||||
} else {
|
|
||||||
$this->flash->failure(t('Unable to update your task.'));
|
|
||||||
$this->edit($values, $errors);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
13
Plugin.php
13
Plugin.php
@@ -77,17 +77,6 @@ class Plugin extends Base
|
|||||||
$this->template->hook->attach('template:board:private:task:before-title', 'organonTweaks:board/title_edit');
|
$this->template->hook->attach('template:board:private:task:before-title', 'organonTweaks:board/title_edit');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Tweak: a "Save & Close" button on the task edit form that saves and returns to the board
|
|
||||||
// (core only reopens the card view). The button posts to a small plugin controller that
|
|
||||||
// reuses core's update and changes only the redirect; the JS repoints the form action, so
|
|
||||||
// Kanboard's modal still owns the submit, CSRF, and error re-render.
|
|
||||||
if ((int) $this->configModel->get('organon_tweaks_save_close_button', 1) === 1) {
|
|
||||||
$this->template->hook->attach('template:task:form:bottom-before-buttons', 'organonTweaks:task_form/save_close_button');
|
|
||||||
$this->hook->on('template:layout:js', array(
|
|
||||||
'template' => 'plugins/OrganonTweaks/Asset/js/save-close.js',
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Auto-managed shared custom filters (v1.5 "Show all tasks", v1.6 month filters, v1.7
|
// Auto-managed shared custom filters (v1.5 "Show all tasks", v1.6 month filters, v1.7
|
||||||
// recurring filters). Ensured lazily whenever a project header renders (covers old + new
|
// recurring filters). Ensured lazily whenever a project header renders (covers old + new
|
||||||
// boards); each group is gated by its own config toggle inside
|
// boards); each group is gated by its own config toggle inside
|
||||||
@@ -139,7 +128,7 @@ class Plugin extends Base
|
|||||||
|
|
||||||
public function getPluginVersion()
|
public function getPluginVersion()
|
||||||
{
|
{
|
||||||
return '1.8.0';
|
return '1.8.1';
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getPluginHomepage()
|
public function getPluginHomepage()
|
||||||
|
|||||||
@@ -57,9 +57,6 @@
|
|||||||
|
|
||||||
<?= $this->form->checkbox('organon_tweaks_title_click_edit', t('Clicking a task title opens the edit form'), 1, isset($values['organon_tweaks_title_click_edit']) && $values['organon_tweaks_title_click_edit'] == 1) ?>
|
<?= $this->form->checkbox('organon_tweaks_title_click_edit', t('Clicking a task title opens the edit form'), 1, isset($values['organon_tweaks_title_click_edit']) && $values['organon_tweaks_title_click_edit'] == 1) ?>
|
||||||
<p class="form-help"><?= t('On the board and the card view, click the title to open the edit modal (only where you may edit).') ?></p>
|
<p class="form-help"><?= t('On the board and the card view, click the title to open the edit modal (only where you may edit).') ?></p>
|
||||||
|
|
||||||
<?= $this->form->checkbox('organon_tweaks_save_close_button', t('Add a "Save & Close" button to the task edit form'), 1, isset($values['organon_tweaks_save_close_button']) && $values['organon_tweaks_save_close_button'] == 1) ?>
|
|
||||||
<p class="form-help"><?= t('Saves the task and returns to the board, instead of reopening the card view.') ?></p>
|
|
||||||
</fieldset>
|
</fieldset>
|
||||||
|
|
||||||
<div class="form-actions">
|
<div class="form-actions">
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
<?php $task_id = isset($values['id']) ? (int) $values['id'] : 0 ?>
|
|
||||||
<?php if ($task_id > 0): ?>
|
|
||||||
<button type="button" class="btn"
|
|
||||||
data-organon-save-close="1"
|
|
||||||
data-url="<?= $this->url->href('TaskSaveCloseController', 'update', array('plugin' => 'OrganonTweaks', 'task_id' => $task_id)) ?>">
|
|
||||||
<?= t('Save & Close') ?>
|
|
||||||
</button>
|
|
||||||
<?php endif ?>
|
|
||||||
Reference in New Issue
Block a user