mirror of
https://github.com/Part-DB/Part-DB-server.git
synced 2025-06-21 01:25:55 +02:00
Added possibility to define alternative names on data structures
This can be used to find elements, based on the data returned by info providers
This commit is contained in:
parent
edc54aaf91
commit
b74ab18a6d
11 changed files with 79 additions and 5 deletions
|
@ -419,4 +419,34 @@ abstract class AbstractStructuralDBElement extends AttachmentContainingDBElement
|
||||||
|
|
||||||
return $this;
|
return $this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a comma separated list of alternative names.
|
||||||
|
* @return string|null
|
||||||
|
*/
|
||||||
|
public function getAlternativeNames(): ?string
|
||||||
|
{
|
||||||
|
if ($this->alternative_names === null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//Remove trailing comma
|
||||||
|
return rtrim($this->alternative_names, ',');
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets a comma separated list of alternative names.
|
||||||
|
* @return $this
|
||||||
|
*/
|
||||||
|
public function setAlternativeNames(?string $new_value): self
|
||||||
|
{
|
||||||
|
//Add a trailing comma, if not already there (makes it easier to find in the database)
|
||||||
|
if (is_string($new_value) && substr($new_value, -1) !== ',') {
|
||||||
|
$new_value .= ',';
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->alternative_names = $new_value;
|
||||||
|
|
||||||
|
return $this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,9 @@ declare(strict_types=1);
|
||||||
|
|
||||||
namespace App\Form\AdminPages;
|
namespace App\Form\AdminPages;
|
||||||
|
|
||||||
|
use App\Entity\PriceInformations\Currency;
|
||||||
|
use App\Entity\ProjectSystem\Project;
|
||||||
|
use App\Entity\UserSystem\Group;
|
||||||
use Symfony\Bundle\SecurityBundle\Security;
|
use Symfony\Bundle\SecurityBundle\Security;
|
||||||
use App\Entity\Base\AbstractNamedDBElement;
|
use App\Entity\Base\AbstractNamedDBElement;
|
||||||
use App\Entity\Base\AbstractStructuralDBElement;
|
use App\Entity\Base\AbstractStructuralDBElement;
|
||||||
|
@ -111,6 +114,19 @@ class BaseEntityAdminForm extends AbstractType
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($entity instanceof AbstractStructuralDBElement && !($entity instanceof Group || $entity instanceof Project || $entity instanceof Currency)) {
|
||||||
|
$builder->add('alternative_names', TextType::class, [
|
||||||
|
'required' => false,
|
||||||
|
'label' => 'entity.edit.alternative_names.label',
|
||||||
|
'help' => 'entity.edit.alternative_names.help',
|
||||||
|
'empty_data' => null,
|
||||||
|
'attr' => [
|
||||||
|
'class' => 'tagsinput',
|
||||||
|
'data-controller' => 'elements--tagsinput',
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
$this->additionalFormElements($builder, $options, $entity);
|
$this->additionalFormElements($builder, $options, $entity);
|
||||||
|
|
||||||
//Attachment section
|
//Attachment section
|
||||||
|
|
|
@ -209,17 +209,17 @@ class StructuralDBElementRepository extends NamedDBElementRepository
|
||||||
return $result[0];
|
return $result[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
/*//If we have no result, try to find the element by additional names
|
//If we have no result, try to find the element by alternative names
|
||||||
$qb = $this->createQueryBuilder('e');
|
$qb = $this->createQueryBuilder('e');
|
||||||
//Use lowercase conversion to be case-insensitive
|
//Use lowercase conversion to be case-insensitive
|
||||||
$qb->where($qb->expr()->like('LOWER(e.additional_names)', 'LOWER(:name)'));
|
$qb->where($qb->expr()->like('LOWER(e.alternative_names)', 'LOWER(:name)'));
|
||||||
$qb->setParameter('name', '%'.$name.'%');
|
$qb->setParameter('name', '%'.$name.',%');
|
||||||
|
|
||||||
$result = $qb->getQuery()->getResult();
|
$result = $qb->getQuery()->getResult();
|
||||||
|
|
||||||
if (count($result) === 1) {
|
if (count($result) >= 1) {
|
||||||
return $result[0];
|
return $result[0];
|
||||||
}*/
|
}
|
||||||
|
|
||||||
//If we find nothing, return null
|
//If we find nothing, return null
|
||||||
return null;
|
return null;
|
||||||
|
@ -247,6 +247,9 @@ class StructuralDBElementRepository extends NamedDBElementRepository
|
||||||
$entity = new $class;
|
$entity = new $class;
|
||||||
$entity->setName($name);
|
$entity->setName($name);
|
||||||
|
|
||||||
|
//Set the found name to the alternative names, so the entity can be easily renamed later
|
||||||
|
$entity->setAlternativeNames($name);
|
||||||
|
|
||||||
$this->setNewEntityToCache($entity);
|
$this->setNewEntityToCache($entity);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -265,6 +265,7 @@ final class DTOtoEntityConverter
|
||||||
//If the entity was newly created, set the file filter
|
//If the entity was newly created, set the file filter
|
||||||
if ($tmp->getId() === null) {
|
if ($tmp->getId() === null) {
|
||||||
$tmp->setFiletypeFilter('application/pdf');
|
$tmp->setFiletypeFilter('application/pdf');
|
||||||
|
$tmp->setAlternativeNames(self::TYPE_DATASHEETS_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tmp;
|
return $tmp;
|
||||||
|
@ -282,6 +283,7 @@ final class DTOtoEntityConverter
|
||||||
//If the entity was newly created, set the file filter
|
//If the entity was newly created, set the file filter
|
||||||
if ($tmp->getId() === null) {
|
if ($tmp->getId() === null) {
|
||||||
$tmp->setFiletypeFilter('image/*');
|
$tmp->setFiletypeFilter('image/*');
|
||||||
|
$tmp->setAlternativeNames(self::TYPE_DATASHEETS_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $tmp;
|
return $tmp;
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
{% block additional_panes %}
|
{% block additional_panes %}
|
||||||
<div class="tab-pane" id="home_advanced">
|
<div class="tab-pane" id="home_advanced">
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
{{ form_row(form.comment) }}
|
{{ form_row(form.comment) }}
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="tab-pane" id="home_advanced">
|
<div class="tab-pane" id="home_advanced">
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
|
<hr>
|
||||||
{{ form_row(form.partname_regex) }}
|
{{ form_row(form.partname_regex) }}
|
||||||
{{ form_row(form.partname_hint) }}
|
{{ form_row(form.partname_hint) }}
|
||||||
<hr>
|
<hr>
|
||||||
|
|
|
@ -15,4 +15,8 @@
|
||||||
|
|
||||||
{% block new_title %}
|
{% block new_title %}
|
||||||
{% trans %}footprint.new{% endtrans %}
|
{% trans %}footprint.new{% endtrans %}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block additional_controls %}
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
{% endblock %}
|
{% endblock %}
|
|
@ -16,5 +16,6 @@
|
||||||
{{ form_row(form.unit) }}
|
{{ form_row(form.unit) }}
|
||||||
{{ form_row(form.is_integer) }}
|
{{ form_row(form.is_integer) }}
|
||||||
{{ form_row(form.use_si_prefix)}}
|
{{ form_row(form.use_si_prefix)}}
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -21,6 +21,8 @@
|
||||||
|
|
||||||
{% block additional_panes %}
|
{% block additional_panes %}
|
||||||
<div class="tab-pane" id="home_options">
|
<div class="tab-pane" id="home_options">
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
|
|
||||||
{{ form_row(form.storage_type) }}
|
{{ form_row(form.storage_type) }}
|
||||||
{{ form_row(form.is_full) }}
|
{{ form_row(form.is_full) }}
|
||||||
{{ form_row(form.limit_to_existing_parts) }}
|
{{ form_row(form.limit_to_existing_parts) }}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
{% block additional_panes %}
|
{% block additional_panes %}
|
||||||
<div class="tab-pane" id="home_advanced">
|
<div class="tab-pane" id="home_advanced">
|
||||||
|
{{ form_row(form.alternative_names) }}
|
||||||
{{ form_row(form.default_currency) }}
|
{{ form_row(form.default_currency) }}
|
||||||
{{ form_row(form.shipping_costs) }}
|
{{ form_row(form.shipping_costs) }}
|
||||||
{{ form_row(form.comment) }}
|
{{ form_row(form.comment) }}
|
||||||
|
|
|
@ -11561,5 +11561,17 @@ Please note, that you can not impersonate a disabled user. If you try you will g
|
||||||
<target>Create parts from info provider</target>
|
<target>Create parts from info provider</target>
|
||||||
</segment>
|
</segment>
|
||||||
</unit>
|
</unit>
|
||||||
|
<unit id="9BvJ32n" name="entity.edit.alternative_names.label">
|
||||||
|
<segment>
|
||||||
|
<source>entity.edit.alternative_names.label</source>
|
||||||
|
<target>Alternative names</target>
|
||||||
|
</segment>
|
||||||
|
</unit>
|
||||||
|
<unit id="GgN2HwP" name="entity.edit.alternative_names.help">
|
||||||
|
<segment>
|
||||||
|
<source>entity.edit.alternative_names.help</source>
|
||||||
|
<target>The alternative names given here, are used to find this element based on the results of the information providers.</target>
|
||||||
|
</segment>
|
||||||
|
</unit>
|
||||||
</file>
|
</file>
|
||||||
</xliff>
|
</xliff>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue