Allow to select the master picture attachment.

This commit is contained in:
Jan Böhmer 2019-09-02 23:09:58 +02:00
parent fe9526e0eb
commit e2b643c52b
5 changed files with 47 additions and 6 deletions

View file

@ -73,12 +73,18 @@ abstract class Attachment extends NamedDBElement
/** /**
* Check if this attachement is a picture (analyse the file's extension). * Check if this attachement is a picture (analyse the file's extension).
* If the link is external, it is assumed that this is false.
* *
* @return bool * true if the file extension is a picture extension * @return bool * true if the file extension is a picture extension
* * otherwise false * * otherwise false
*/ */
public function isPicture(): bool public function isPicture(): bool
{ {
//We can not check if a external link is a picture, so just assume this is false
if ($this->isExternal()) {
return true;
}
$extension = pathinfo($this->getPath(), PATHINFO_EXTENSION); $extension = pathinfo($this->getPath(), PATHINFO_EXTENSION);
// list all file extensions which are supported to display them by HTML code // list all file extensions which are supported to display them by HTML code

View file

@ -121,7 +121,7 @@ class Part extends AttachmentContainingDBElement
* @var Attachment * @var Attachment
* @ORM\ManyToOne(targetEntity="App\Entity\Attachments\Attachment") * @ORM\ManyToOne(targetEntity="App\Entity\Attachments\Attachment")
* @ORM\JoinColumn(name="id_master_picture_attachement", referencedColumnName="id") * @ORM\JoinColumn(name="id_master_picture_attachement", referencedColumnName="id")
* * @Assert\Expression("value == null or value.isPicture()")
* @ColumnSecurity(prefix="attachments", type="object") * @ColumnSecurity(prefix="attachments", type="object")
*/ */
protected $master_picture_attachment; protected $master_picture_attachment;
@ -508,15 +508,27 @@ class Part extends AttachmentContainingDBElement
} }
/** /**
* Get the master picture "Attachement"-object of this part (if there is one). * Get the master picture "Attachment"-object of this part (if there is one).
* The master picture should be used as a visual description/representation of this part.
* *
* @return Attachment the master picture Attachement of this part (if there is one) * @return Attachment the master picture Attachement of this part (if there is one)
*/ */
public function getMasterPictureAttachement(): ?Attachment public function getMasterPictureAttachment(): ?Attachment
{ {
return $this->master_picture_attachment; return $this->master_picture_attachment;
} }
/**
* Sets the new master picture for this part.
* @param Attachment|null $new_master_attachment
* @return Part
*/
public function setMasterPictureAttachment(?Attachment $new_master_attachment): Part
{
$this->master_picture_attachment = $new_master_attachment;
return $this;
}
/** /**
* Get all orderdetails of this part. * Get all orderdetails of this part.
* *

View file

@ -31,6 +31,7 @@
namespace App\Form\Part; namespace App\Form\Part;
use App\Entity\Attachments\Attachment;
use App\Entity\Attachments\PartAttachment; use App\Entity\Attachments\PartAttachment;
use App\Entity\Parts\Category; use App\Entity\Parts\Category;
use App\Entity\Parts\Footprint; use App\Entity\Parts\Footprint;
@ -44,6 +45,7 @@ use App\Form\AttachmentType;
use App\Form\Type\SIUnitType; use App\Form\Type\SIUnitType;
use App\Form\Type\StructuralEntityType; use App\Form\Type\StructuralEntityType;
use Doctrine\DBAL\Types\FloatType; use Doctrine\DBAL\Types\FloatType;
use Doctrine\ORM\EntityRepository;
use FOS\CKEditorBundle\Form\Type\CKEditorType; use FOS\CKEditorBundle\Form\Type\CKEditorType;
use Symfony\Bridge\Doctrine\Form\Type\EntityType; use Symfony\Bridge\Doctrine\Form\Type\EntityType;
use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\AbstractType;
@ -60,6 +62,7 @@ use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\OptionsResolver\OptionsResolver; use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Security\Core\Security; use Symfony\Component\Security\Core\Security;
use Symfony\Contracts\Translation\TranslatorInterface; use Symfony\Contracts\Translation\TranslatorInterface;
use function foo\func;
class PartBaseType extends AbstractType class PartBaseType extends AbstractType
{ {
@ -164,7 +167,26 @@ class PartBaseType extends AbstractType
'by_reference' => false 'by_reference' => false
]); ]);
//Attachment section $builder->add('master_picture_attachment', EntityType::class, [
'required' => false,
'label' => 'part.edit.master_attachment',
'class' => PartAttachment::class,
'attr' => ['class' => 'selectpicker'],
'choice_attr' => function ($choice, $key, $value) {
/** @var Attachment $choice */
return ['data-subtext' => $choice->getFilename() ?? "URL"];
},
'choice_label' => 'name',
'query_builder' => function (EntityRepository $er) use ($part) {
return $er->createQueryBuilder('u')
->where('u.element = ?1')
->andWhere("u.path <> ''")
->orderBy('u.name', 'ASC')
->setParameter(1, $part);
}
]);
//Orderdetails section
$builder->add('orderdetails', CollectionType::class, [ $builder->add('orderdetails', CollectionType::class, [
'entry_type' => OrderdetailType::class, 'entry_type' => OrderdetailType::class,
'allow_add' => true, 'allow_delete' => true, 'allow_add' => true, 'allow_delete' => true,

View file

@ -5,6 +5,7 @@
</button> </button>
{% endset %} {% endset %}
{{ form_row(form.master_picture_attachment) }}
<table class="table table-striped table-sm" id="attachments_table" data-prototype="{{ form_widget(form.attachments.vars.prototype)|e('html_attr') }}"> <table class="table table-striped table-sm" id="attachments_table" data-prototype="{{ form_widget(form.attachments.vars.prototype)|e('html_attr') }}">
<tbody> <tbody>

View file

@ -1,7 +1,7 @@
<div class="row"> <div class="row">
<div class="col-md-3"> <div class="col-md-3">
{% if part.masterPictureAttachement %} {% if part.masterPictureAttachment and part.masterPictureAttachment.picture %}
<img src="{{ part.masterPictureAttachement | entityURL('file_view') }}" class="img-fluid img-thumbnail bg-light" alt="Part main image" height="300" width="300"> <img src="{{ part.masterPictureAttachment | entityURL('file_view') }}" class="img-fluid img-thumbnail bg-light" alt="Part main image" height="300" width="300">
{% else %} {% else %}
<img src="{{ asset('img/part_placeholder.svg') }}" class="img-fluid img-thumbnail bg-light" alt="Part main image" height="300" width="300"> <img src="{{ asset('img/part_placeholder.svg') }}" class="img-fluid img-thumbnail bg-light" alt="Part main image" height="300" width="300">
{% endif %} {% endif %}