2
0
forked from Wavyzz/dolibarr

#34417 [GroupByKanban] add: drag and drop with saveinplace (#34456)

* #34417 [GroupByKanban] add: drag and drop with saveinplace

* #34417 [LibHead] fix: whitespaces

* #34417 [ProjectClass] fix: GETPOST and PHP inside JS
This commit is contained in:
evarisk-kilyan
2025-06-14 00:33:33 +02:00
committed by GitHub
parent 142440badf
commit dbf1e581a8
4 changed files with 58 additions and 4 deletions

View File

@@ -107,7 +107,7 @@ top_httphead();
// Load original field value // Load original field value
if (!empty($field) && !empty($element) && !empty($table_element) && !empty($fk_element)) { if (!empty($field) && !empty($element) && !empty($table_element) && !empty($fk_element)) {
$ext_element = GETPOST('ext_element', 'alpha', 2); $ext_element = GETPOST('ext_element', 'alpha', 2);
$field = substr($field, 8); // remove prefix val_ $field = substr($field, 8); // remove prefix editval_
$type = GETPOST('type', 'alpha', 2); $type = GETPOST('type', 'alpha', 2);
$value = ($type == 'ckeditor' ? GETPOST('value', '', 2) : GETPOST('value', 'alpha', 2)); $value = ($type == 'ckeditor' ? GETPOST('value', '', 2) : GETPOST('value', 'alpha', 2));
$loadmethod = GETPOST('loadmethod', 'alpha', 2); $loadmethod = GETPOST('loadmethod', 'alpha', 2);

View File

@@ -1621,5 +1621,59 @@ $(document).on('select2:open', (e) => {
} }
?> ?>
<?php
if (getDolGlobalString('MAIN_USE_JQUERY_JEDITABLE')) {
?>
// Code to manage drag and drop inside kanban group by view - handles sortable columns and item movement between status columns
$(document).ready(function() {
if ($('.kanban .column:not(.kanbancollapsed)').length > 0) {
$('.kanban .column:not(.kanbancollapsed)').sortable({
items: '.kanban-draggable',
connectWith: '.kanban .column:not(.kanbancollapsed)',
cursor: 'move',
opacity: 0.8,
tolerance: 'pointer',
start: function(_, ui) {
ui.item.data('original-column', ui.item.parent());
ui.placeholder.height(ui.item.outerHeight());
},
receive: function(_, ui) {
var originalColumn = ui.item.data('original-column');
var newColumn = $(this);
if (!originalColumn.is(newColumn)) {
onKanbanColumnChange(ui.item, newColumn);
}
}
});
}
});
/**
* Function called when an item is moved to a different column
* @param {jQuery} item - The dragged item
* @param {jQuery} newColumn - The new column
*/
function onKanbanColumnChange(item, newColumn) {
jQuery.ajax({
method: "POST",
url: "<?php echo DOL_URL_ROOT; ?>/core/ajax/saveinplace.php",
data: {
field: 'editval_'+newColumn.data('groupbyfield'),
element: item.data('element'),
table_element: item.data('tableelement'),
fk_element: item.data('itemid'),
value: newColumn.data('groupbyid')
},
context: document.body
});
item.data('original-column', newColumn);
}
<?php
}
?>
// End of lib_head.js.php // End of lib_head.js.php

View File

@@ -2534,7 +2534,7 @@ class Project extends CommonObject
} }
} }
$return = '<div class="box-flex-item '.($size == 'small' ? 'box-flex-item-small' : '').' box-flex-grow-zero">'; $return = '<div class="box-flex-item '.($size == 'small' ? 'box-flex-item-small' : '').' box-flex-grow-zero '.($arraydata['mode'] == 'kanbangroupby' ? 'kanban-draggable" data-itemid="'.$this->id.'" data-element="'.$this->element.'" data-tableelement="'.$this->table_element.'"' : '"').'>';
$return .= '<div class="info-box info-box-sm">'; $return .= '<div class="info-box info-box-sm">';
$return .= '<span class="info-box-icon bg-infobox-action">'; $return .= '<span class="info-box-icon bg-infobox-action">';
$return .= img_picto('', $this->public ? 'projectpub' : $this->picto); $return .= img_picto('', $this->public ? 'projectpub' : $this->picto);

View File

@@ -1768,7 +1768,7 @@ while ($i < $imaxinloop) {
print '<div class="kanbanlabel">'.$langs->trans($tmpgroupbyvalue).'</div>'; print '<div class="kanbanlabel">'.$langs->trans($tmpgroupbyvalue).'</div>';
print '</div>'; // Start and end the new column print '</div>'; // Start and end the new column
} }
print '<div class="box-flex-container-column kanban column" data-groupbyid="'.preg_replace('/[^a-z0-9]/', '', $groupbyvalue).'">'; // Start new column print '<div class="box-flex-container-column kanban column" data-groupbyid="'.preg_replace('/[^a-z0-9]/', '', $groupbyvalue).'" data-groupbyfield="'.$groupbyfield.'">'; // Start new column
print '<div class="kanbanlabel">'.$langs->trans(empty($groupbyvalues[$groupbyvalue]) ? 'Undefined' : $groupbyvalues[$groupbyvalue]).'</div>'; print '<div class="kanbanlabel">'.$langs->trans(empty($groupbyvalues[$groupbyvalue]) ? 'Undefined' : $groupbyvalues[$groupbyvalue]).'</div>';
} }
$groupbyold = $groupbyvalue; $groupbyold = $groupbyvalue;
@@ -1784,7 +1784,7 @@ while ($i < $imaxinloop) {
$selected = 1; $selected = 1;
} }
} }
$arrayofdata = array('assignedusers' => $stringassignedusers, 'thirdparty' => $companystatic, 'selected' => $selected); $arrayofdata = array('assignedusers' => $stringassignedusers, 'thirdparty' => $companystatic, 'selected' => $selected, 'mode' => $mode);
print $object->getKanbanView('', $arrayofdata, ($groupby ? 'small' : '')); print $object->getKanbanView('', $arrayofdata, ($groupby ? 'small' : ''));