This commit is contained in:
2025-07-14 11:50:52 +02:00
parent 038cf83d85
commit b07cbc5bf4
5 changed files with 53 additions and 8 deletions

View File

@ -31,7 +31,7 @@ class Issue
private int $rowissue = 0; private int $rowissue = 0;
#[ORM\Column(nullable: true)] #[ORM\Column(nullable: true)]
private string $color = ''; private ?string $color = null;
#[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'issues')] #[ORM\ManyToOne(targetEntity: Project::class, inversedBy: 'issues')]
#[ORM\JoinColumn(nullable: false)] #[ORM\JoinColumn(nullable: false)]
@ -130,7 +130,9 @@ class Issue
public function getColor(): ?string public function getColor(): ?string
{ {
return $this->rowsprint; if($this->color) return $this->color;
elseif($this->parent) return $this->parent->getColor();
else return null;
} }
public function setColor(?string $color): static public function setColor(?string $color): static

View File

@ -6,15 +6,16 @@ use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
class SelbgType extends AbstractType class SelbgType extends AbstractType
{ {
public function configureOptions(OptionsResolver $resolver): void public function configureOptions(OptionsResolver $resolver): void
{ {
$choices = $this->loadCssClasses(); $choices = $this->loadCssClasses();
// clef => valeur // clef => valeur
$choices = array_combine($choices, $choices); $choices = array_combine($choices, $choices);
$resolver->setDefaults([ $resolver->setDefaults([
'choices' => $choices, 'choices' => $choices,
'choice_attr' => function ($choice, $key, $value) { 'choice_attr' => function ($choice, $key, $value) {

View File

@ -6,7 +6,7 @@
{% endblock %} {% endblock %}
{% block title %} {% block title %}
Modification Issue = {{title}} = Modification Issue = {{title}}
{% endblock %} {% endblock %}
{% block body %} {% block body %}
@ -27,6 +27,7 @@ Modification Issue = {{title}}
<div class="col-md-6 mx-auto"> <div class="col-md-6 mx-auto">
<div class="card mt-3"> <div class="card mt-3">
<div class="card-header">Information</div> <div class="card-header">Information</div>
{{ form_row(form.color) }}
<div class="card-body"> <div class="card-body">
</div> </div>
</div> </div>

View File

@ -4,7 +4,6 @@
<h5 style="flex-grow:1">#{{ issue.redmine.id }} = {{ issue.redmine.subject }}</h5> <h5 style="flex-grow:1">#{{ issue.redmine.id }} = {{ issue.redmine.subject }}</h5>
<a href="{{redmineUrl}}/issues/{{issue.id}}" target="_blank" class="btn btn-primary"><i class="fas fa-eye"></i></a> <a href="{{redmineUrl}}/issues/{{issue.id}}" target="_blank" class="btn btn-primary"><i class="fas fa-eye"></i></a>
<div class="btn btn-secondary" onClick="hideIssue()"><i class="fas fa-window-close"></i></div> <div class="btn btn-secondary" onClick="hideIssue()"><i class="fas fa-window-close"></i></div>
</div> </div>
<div class="d-flex"> <div class="d-flex">
@ -17,6 +16,8 @@
{% endfor %} {% endfor %}
{% endif %} {% endif %}
</div> </div>
<div><a href="{{path("app_issue_update",{id:issue.id})}}">Modifier</a></div>
</div> </div>
<div> <div>

View File

@ -16,12 +16,14 @@
z-index: 1000; z-index: 1000;
} }
main { main {
padding-top:80px; padding-top:80px;
} }
content { content {
padding:0px; padding:0px;
overflow:auto;
} }
.issueContainer { .issueContainer {
@ -42,6 +44,7 @@
.scrumContainer { .scrumContainer {
display:none; display:none;
padding-left:300px; padding-left:300px;
width:10000px;
} }
.containerStatus{ .containerStatus{
@ -313,7 +316,7 @@
</div> </div>
{% for issue in project.issues %} {% for issue in project.issues %}
<div class="issueCard card tracker{{issue.redmine.tracker.id}} category{{(issue.redmine.category is defined?issue.redmine.category.id:'0') }}" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.id:'')}}' data-id='{{issue.id}}'> <div class="issueCard {{issue.color}} card tracker{{issue.redmine.tracker.id}} category{{(issue.redmine.category is defined?issue.redmine.category.id:'0') }}" data-status='{{issue.redmine.status.id}}' data-sprint='{{issue.rowsprint}}' data-version='{{(issue.redmine.fixed_version is defined?issue.redmine.fixed_version.id:'')}}' data-id='{{issue.id}}'>
<div class='issueHeader'> <div class='issueHeader'>
<div class='issueId'>#{{issue.id}}</div> <div class='issueId'>#{{issue.id}}</div>
<div class='issueTitle'> <div class='issueTitle'>
@ -665,8 +668,13 @@
$sourceContainer = ui.item.parent(); $sourceContainer = ui.item.parent();
$movedItem = ui.item; $movedItem = ui.item;
originalIndex = ui.item.index(); originalIndex = ui.item.index();
enableAutoScroll($(window)); // ou remplace par ton conteneur scrollable
}, },
stop: function () {
disableAutoScroll();
},
update: function (event, ui) { update: function (event, ui) {
console.log("UPDATE"); console.log("UPDATE");
if (!event.originalEvent) return; if (!event.originalEvent) return;
@ -697,7 +705,7 @@
data: { data: {
target: targetId, target: targetId,
targetIssues: targetIssues targetIssues: targetIssues
}, },
success: function (response) { success: function (response) {
console.log('Déplacement réussi', response); console.log('Déplacement réussi', response);
}, },
@ -725,7 +733,39 @@
} }
}); });
let autoScrollInterval = null;
function enableAutoScroll($container) {
$(document).on('mousemove.autoScroll', function (e) {
const scrollMargin = 50; // px depuis le bord de la fenêtre
const scrollSpeed = 20; // px à chaque tick
const mouseY = e.clientY;
const windowHeight = window.innerHeight;
// Scroll vers le haut
if (mouseY < scrollMargin) {
clearInterval(autoScrollInterval);
autoScrollInterval = setInterval(() => {
$container.scrollTop($container.scrollTop() - scrollSpeed);
}, 50);
}
// Scroll vers le bas
else if (mouseY > windowHeight - scrollMargin) {
clearInterval(autoScrollInterval);
autoScrollInterval = setInterval(() => {
$container.scrollTop($container.scrollTop() + scrollSpeed);
}, 50);
} else {
clearInterval(autoScrollInterval);
}
});
}
function disableAutoScroll() {
$(document).off('mousemove.autoScroll');
clearInterval(autoScrollInterval);
}
</script> </script>
{% endblock %} {% endblock %}