mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 01:25:55 +02:00
Added an form for merging two parts together
This commit is contained in:
parent
50069c7611
commit
b0f5d9b55f
5 changed files with 85 additions and 3 deletions
|
@ -43,7 +43,8 @@ export default class extends Controller
|
|||
const message = this.element.dataset.deleteMessage;
|
||||
const title = this.element.dataset.deleteTitle;
|
||||
|
||||
const form = this.element;
|
||||
//Use event target, to find the form, where the submit button was clicked
|
||||
const form = event.target;
|
||||
const submitter = event.submitter;
|
||||
const that = this;
|
||||
|
||||
|
|
|
@ -234,6 +234,22 @@ class PartController extends AbstractController
|
|||
]);
|
||||
}
|
||||
|
||||
#[Route('/{target}/merge/{other}', name: 'part_merge')]
|
||||
public function merge(Request $request, Part $target, Part $other, PartMerger $partMerger): Response
|
||||
{
|
||||
$this->denyAccessUnlessGranted('edit', $target);
|
||||
$this->denyAccessUnlessGranted('delete', $other);
|
||||
|
||||
//Save the old name of the target part for the template
|
||||
$target_name = $target->getName();
|
||||
|
||||
$merged = $partMerger->merge($target, $other);
|
||||
return $this->renderPartForm('merge', $request, $merged, [], [
|
||||
'tname_before' => $target_name,
|
||||
'other_part' => $other,
|
||||
]);
|
||||
}
|
||||
|
||||
#[Route(path: '/{id}/from_info_provider/{providerKey}/{providerId}/update', requirements: ['providerId' => '.+'])]
|
||||
public function updateFromInfoProvider(Part $part, Request $request, string $providerKey, string $providerId,
|
||||
PartInfoRetriever $infoRetriever, PartMerger $partMerger): Response
|
||||
|
@ -259,10 +275,10 @@ class PartController extends AbstractController
|
|||
* @param array $form_options
|
||||
* @return Response
|
||||
*/
|
||||
private function renderPartForm(string $mode, Request $request, Part $data, array $form_options = []): Response
|
||||
private function renderPartForm(string $mode, Request $request, Part $data, array $form_options = [], array $merge_infos = []): Response
|
||||
{
|
||||
//Ensure that mode is either 'new' or 'edit
|
||||
if (!in_array($mode, ['new', 'edit'], true)) {
|
||||
if (!in_array($mode, ['new', 'edit', 'merge'], true)) {
|
||||
throw new \InvalidArgumentException('Invalid mode given');
|
||||
}
|
||||
|
||||
|
@ -295,6 +311,12 @@ class PartController extends AbstractController
|
|||
$this->commentHelper->setMessage($form['log_comment']->getData());
|
||||
|
||||
$this->em->persist($new_part);
|
||||
|
||||
//When we are in merge mode, we have to remove the other part
|
||||
if ($mode === 'merge') {
|
||||
$this->em->remove($merge_infos['other_part']);
|
||||
}
|
||||
|
||||
$this->em->flush();
|
||||
if ($mode === 'new') {
|
||||
$this->addFlash('success', 'part.created_flash');
|
||||
|
@ -329,12 +351,16 @@ class PartController extends AbstractController
|
|||
$template = 'parts/edit/new_part.html.twig';
|
||||
} else if ($mode === 'edit') {
|
||||
$template = 'parts/edit/edit_part_info.html.twig';
|
||||
} else if ($mode === 'merge') {
|
||||
$template = 'parts/edit/merge_parts.html.twig';
|
||||
}
|
||||
|
||||
return $this->render($template,
|
||||
[
|
||||
'part' => $new_part,
|
||||
'form' => $form,
|
||||
'merge_old_name' => $merge_infos['tname_before'] ?? null,
|
||||
'merge_other' => $merge_infos['other_part'] ?? null
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
27
templates/parts/edit/merge_parts.html.twig
Normal file
27
templates/parts/edit/merge_parts.html.twig
Normal file
|
@ -0,0 +1,27 @@
|
|||
{% extends "parts/edit/edit_part_info.html.twig" %}
|
||||
|
||||
{# @var merge_other \App\Entity\Parts\Part #}
|
||||
|
||||
{% block card_border %}border-info{% endblock %}
|
||||
{% block card_type %}bg-info text-bg-info{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
{% trans %}part.merge.title{% endtrans %} {{ merge_other.name }} {% trans %}part.merge.title.into{% endtrans %} {{ merge_old_name }}
|
||||
{% endblock %}
|
||||
|
||||
{% block card_title %}
|
||||
<i class="fas fa-code-merge" aria-hidden="true"></i>
|
||||
{% trans %}part.merge.title{% endtrans %}
|
||||
<b><a class="text-bg-info" href="{{ entity_url(merge_other, 'info') }}">{{ merge_other.name }} (ID: {{ merge_other.iD }})</a></b>
|
||||
{% trans %}part.merge.title.into{% endtrans %}
|
||||
<b><a class="text-bg-info" href="{{ entity_url(part, 'info') }}">{{ merge_old_name }} (ID: {{ part.id }})</a></b>
|
||||
{% endblock %}
|
||||
|
||||
{% block card_content %}
|
||||
<div {{ stimulus_controller('elements/delete_btn') }} {{ stimulus_action('elements/delete_btn', "submit", "submit") }}
|
||||
data-delete-title="{% trans with {'%target%': merge_old_name|escape, '%other%': merge_other.name }%}part.merge.confirm.title{% endtrans %}"
|
||||
data-delete-message="{% trans with {'%other%': merge_other.name } %}part.merge.confirm.message{% endtrans %}">
|
||||
{{ parent() }}
|
||||
</div>
|
||||
|
||||
{% endblock %}
|
|
@ -3,6 +3,10 @@
|
|||
{% block card_border %}border-success{% endblock %}
|
||||
{% block card_type %}bg-success text-white{% endblock %}
|
||||
|
||||
{% block title %}
|
||||
{% trans %}part.new.card_title{% endtrans %}
|
||||
{% endblock %}
|
||||
|
||||
{% block card_title %}
|
||||
<i class="fas fa-edit fa-plus-square" aria-hidden="true"></i>
|
||||
{% trans %}part.new.card_title{% endtrans %}
|
||||
|
|
|
@ -11969,5 +11969,29 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
|||
<target>This element was newly created and was not persisted to the database yet.</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="USUaBZ0" name="part.merge.title">
|
||||
<segment>
|
||||
<source>part.merge.title</source>
|
||||
<target>Merge part</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="sCLZTwA" name="part.merge.title.into">
|
||||
<segment>
|
||||
<source>part.merge.title.into</source>
|
||||
<target>into</target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="nISUoQl" name="part.merge.confirm.title">
|
||||
<segment>
|
||||
<source>part.merge.confirm.title</source>
|
||||
<target><![CDATA[Do you really want to merge <b>%other%</b> into <b>%target%</b>?]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
<unit id="qxHNYfX" name="part.merge.confirm.message">
|
||||
<segment>
|
||||
<source>part.merge.confirm.message</source>
|
||||
<target><![CDATA[<b>%other%</b> will be deleted, and the part will be saved with the shown information.]]></target>
|
||||
</segment>
|
||||
</unit>
|
||||
</file>
|
||||
</xliff>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue