Linux SRV-16 6.18.44-paas #1 SMP PREEMPT_DYNAMIC Thu Aug 13 10:08:12 UTC 2026 x86_64
/
proc
/
212
/
root
/
proc
/
self
/
root
/
proc
/
212
/
root
/
proc
/
70528
/
cwd
/
templates
/
back
/
product
/
//proc/212/root/proc/self/root/proc/212/root/proc/70528/cwd/templates/back/product/edit.html.twig
{% extends 'back/layout.html.twig' %} {% block title %}Ajouter un produit {% endblock %} {% block content %} <h1>modifier le produit <u>{{ product.name }}</u> </h1> {{ form_start(form) }} <div class="row"> <div class="col-md-6"> {{ form_row(form.name) }} {{ form_row(form.description) }} {{ form_row(form.availableForDelivery) }} {{ form_row(form.mockupAvailable) }} {{ form_row(form.category) }} <div class="mb-3 mx-0 px-3 pt-2" style="background: #EEE"> <label for="" class="form-label mb-0">Images secondaires</label> <div class="row py-3 px-0"> {% for image in product.productImages %} <div class="col-md-3" id="container-{{ image.id }}"> <div class="border p-3"> <img src="{{ vich_uploader_asset(image, "imageFile") }}" alt="Image du produit"> <p>{{ image.name }}</p> <a class="btn btn-danger delete-image mt-3" data-id="{{ image.id }}">Supprimer</a> </div> </div> {% endfor %} </div> <a href="{{ path("back_product_image", { id : product.id }) }}" class="btn btn-secondary mb-3">Ajouter / supprimer des images</a> </div> </div> <div class="col-md-6"> {{ form_row(form.imageFile) }} </div> </div> <input type="submit" value="Confirmer les modifications" class="btn btn-success float-end ms-2"><br><br> {{ form_end(form) }} <h1>Configurer le produit {{ product.name }} <a href="{{ path("back_product_price", { id: product.id }) }}" class="btn btn-primary" style="float: right"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewbox="0 0 16 16"> <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/> <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/> </svg> Voir les prix</a> <a href="{{ path("back_product_price_fill", { id: product.id }) }}" class="btn btn-primary" style="float: right; margin-right: 15px"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-pencil-square" viewbox="0 0 16 16"> <path d="M15.502 1.94a.5.5 0 0 1 0 .706L14.459 3.69l-2-2L13.502.646a.5.5 0 0 1 .707 0l1.293 1.293zm-1.75 2.456-2-2L4.939 9.21a.5.5 0 0 0-.121.196l-.805 2.414a.25.25 0 0 0 .316.316l2.414-.805a.5.5 0 0 0 .196-.12l6.813-6.814z"/> <path fill-rule="evenodd" d="M1 13.5A1.5 1.5 0 0 0 2.5 15h11a1.5 1.5 0 0 0 1.5-1.5v-6a.5.5 0 0 0-1 0v6a.5.5 0 0 1-.5.5h-11a.5.5 0 0 1-.5-.5v-11a.5.5 0 0 1 .5-.5H9a.5.5 0 0 0 0-1H2.5A1.5 1.5 0 0 0 1 2.5v11z"/> </svg> Remplir les prix manquants</a> </h1> <div class="configuration-card mt-4"> <h2>Quantité</h2> <div class="choices"> {% for quantity in product.quantities %} {% if quantity.active %} {% if quantity.quantity == "Autre formats sur commande" %} <div class="choice is-handled" data-value="{{ quantity.id }}" data-option="quantity">{{ quantity.quantity }} <a onclick="deleteElem('{{ path("back_quantity_delete", { id : quantity.id }) }}', this)" title="Supprimer la quantité" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% else %} <div class="choice is-handled" data-value="{{ quantity.id }}" data-option="quantity">{{ quantity.quantity }} <a onclick="deleteElem('{{ path("back_quantity_delete", { id : quantity.id }) }}', this)" title="Supprimer la quantité" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endif %} {% endfor %} <div id="quantity-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" id="newQuantity" class="form-control" placeholder="Quantité"> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addQuantity()">Ajouter</button> </div> </div> </div> <div class="configuration-card mt-4"> <h2>Support</h2> <div class="choices"> {% for grammage in product.grammages %} {% if grammage.active %} <div class="choice is-handled" data-value="{{ grammage.id }}" data-option="grammage">{{ grammage.name }} <a onclick="deleteElem('{{ path("back_product_grammage_delete", { id : product.id, grammageId : grammage.id }) }}', this)" title="Supprimer le grammage" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endfor %} <div id="grammage-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <select name="grammage" id="newGrammage" class="form-control"> {% if grammages|length == product.grammages|length %} <option selected disabled>Aucun grammage disponible</option> {% endif %} {% for grammage in grammages %} {% if grammage.active %} {% if grammage not in product.grammages %} <option value="{{ grammage.id }}">{{ grammage.name }}</option> {% endif %} {% endif %} {% endfor %} </select> </div> <div class="col-md-4"> {% if product.grammages|length == grammages|length %} <button class="btn btn-primary w-100" disabled>Ajouter</button> {% else %} <button class="btn btn-primary w-100" onclick="addGrammage()">Ajouter</button> {% endif %} </div> </div> </div> <div class="configuration-card mt-4"> <h2>Nombre de pages</h2> <div class="choices"> {% for page in product.pages %} {% if page.active %} <div class="choice is-handled" data-value="{{ page.id }}" data-option="pages">{{ page.name }} <a onclick="deleteElem('{{ path("back_product_page_delete", { id : page.id }) }}', this)" title="Supprimer la page" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endfor %} <div id="page-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" id="newPage" class="form-control" placeholder="Recto, Verso, 15 pages..."> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addPage()">Ajouter</button> </div> </div> </div> <div class="configuration-card mt-4"> <h2>Couleurs</h2> <div class="choices"> {% for color in product.colors %} {% if color.active %} <div class="choice is-handled" data-value="{{ color.id }}" data-option="color">{{ color.name }} <a onclick="deleteElem('{{ path("back_product_color_delete", { id : color.id }) }}', this)" title="Supprimer la color" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endfor %} <div id="color-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" id="newColor" class="form-control" placeholder="Bleu, rouge..."> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addColor()">Ajouter</button> </div> </div> </div> <div class="configuration-card mt-4"> <h2>Format</h2> <div class="choices"> {% for size in product.sizes %} {% if size.active %} {% if size.name == "Autre formats sur commande" %} <div class="choice is-handled" data-value="{{ size.id }}" data-option="size" style="display: flex; flex-direction: column; justify-content: center"> <div>{{ size.name }}</div> <a onclick="deleteElem('{{ path("back_size_delete", { id : size.id }) }}', this)" title="Supprimer la taille" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% else %} <div class="choice is-handled" data-value="{{ size.id }}" data-option="size">{{ size.name }} <a onclick="deleteElem('{{ path("back_size_delete", { id : size.id }) }}', this)" title="Supprimer la taille" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endif %} {% endfor %} <div id="size-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <h3>Ajouter</h3> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" class="form-control" id="newSizeName" placeholder="Dénomination (A4, A5, DL...)"> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addSize()">Ajouter</button> </div> </div> </div> <div class="configuration-card mt-4"> <h2>Finition du papier</h2> <div class="choices"> {% for finishing in product.finishings %} {% if finishing.active %} <div class="choice is-handled" data-value="{{ finishing.id }}" data-option="finishing">{{ finishing.name }} <a onclick="deleteElem('{{ path("back_finishing_delete", { id : finishing.id }) }}', this)" title="Supprimer la finition" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% endif %} {% endfor %} <div id="finishing-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" id="newFinishing" class="form-control" placeholder="Mat, Satin..."> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addFinishing()">Ajouter</button> </div> </div> </div> <div class="configuration-card mt-4"> <h2>Pliage</h2> <div class="choices"> {% for fold in product.folds %} {% if fold.active %} <div class="choice is-handled" data-value="{{ fold.id }}" data-option="fold">{{ fold.name }} <a onclick="deleteElem('{{ path("back_product_fold_delete", { productId : product.id, id : fold.id }) }}', this)" title="Supprimer le pliage" style="text-decoration: none; cursor: pointer"> <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-trash3" viewbox="0 0 16 16"> <path d="M6.5 1h3a.5.5 0 0 1 .5.5v1H6v-1a.5.5 0 0 1 .5-.5ZM11 2.5v-1A1.5 1.5 0 0 0 9.5 0h-3A1.5 1.5 0 0 0 5 1.5v1H2.506a.58.58 0 0 0-.01 0H1.5a.5.5 0 0 0 0 1h.538l.853 10.66A2 2 0 0 0 4.885 16h6.23a2 2 0 0 0 1.994-1.84l.853-10.66h.538a.5.5 0 0 0 0-1h-.995a.59.59 0 0 0-.01 0H11Zm1.958 1-.846 10.58a1 1 0 0 1-.997.92h-6.23a1 1 0 0 1-.997-.92L3.042 3.5h9.916Zm-7.487 1a.5.5 0 0 1 .528.47l.5 8.5a.5.5 0 0 1-.998.06L5 5.03a.5.5 0 0 1 .47-.53Zm5.058 0a.5.5 0 0 1 .47.53l-.5 8.5a.5.5 0 1 1-.998-.06l.5-8.5a.5.5 0 0 1 .528-.47ZM8 4.5a.5.5 0 0 1 .5.5v8.5a.5.5 0 0 1-1 0V5a.5.5 0 0 1 .5-.5Z"/> </svg> </a> </div> {% set active = "" %} {% endif %} {% endfor %} <div id="fold-box"></div> <div class="choice add-elem-toggle active">Ajouter</div> </div> <div class="row mt-3 add-elem"> <div class="col-md-8"> <input type="text" class="form-control" id="newFoldName" placeholder="Plié, Rainé.."> </div> <div class="col-md-4"> <button class="btn btn-primary w-100" onclick="addFold()">Ajouter</button> </div> </div> </div> </div></div><style> .vich-image a+a { display: none; } legend { padding-top: 0 !important; }</style><script> const PRODUCTID = {{ product.id }};</script><script src="{{ asset("js/product-edit.js") }}"></script><style> .btn-primary { color: #fff !important; background-color: #0d6efd !important; border-color: #0d6efd !important; } .add-elem { display: none; } .add-elem.show { display: flex; }</style>{% endblock %}{% block stylesheets %}{{ encore_entry_link_tags('app_front') }}{{ parent() }}{% endblock %}