edit_orm_one_to_many.html.twig 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. {#
  2. This file is part of the Sonata package.
  3. (c) Thomas Rabaix <thomas.rabaix@sonata-project.org>
  4. For the full copyright and license information, please view the LICENSE
  5. file that was distributed with this source code.
  6. #}
  7. {% if not sonata_admin.field_description.hasassociationadmin %}
  8. {% for element in value %}
  9. {{ element|render_relation_element(sonata_admin.field_description) }}
  10. {% endfor %}
  11. {% else %}
  12. <div id="field_container_{{ id }}">
  13. <span id="field_widget_{{ id }}" >
  14. {% if sonata_admin.edit == 'inline' %}
  15. {% if sonata_admin.inline == 'table' %}
  16. {% if form.children %}
  17. <table class="bordered-table">
  18. <thead>
  19. <tr>
  20. {% for field_name, nested_field in form.children[0].children %}
  21. {% if field_name == '_delete' %}
  22. <th>{% trans from 'SonataAdminBundle' %}action_delete{% endtrans %}</th>
  23. {% else %}
  24. <th>{{ nested_field.get('sonata_admin').admin.trans(nested_field.vars.label) }}</th>
  25. {% endif %}
  26. {% endfor %}
  27. </tr>
  28. </thead>
  29. <tbody class="sonata-ba-tbody">
  30. {% for nested_group_field_name, nested_group_field in form.children %}
  31. <tr>
  32. {% for field_name, nested_field in nested_group_field.children %}
  33. <td class="sonata-ba-td-{{ id }}-{{ field_name }}">
  34. {% if sonata_admin.field_description.associationadmin.formfielddescriptions[field_name] is defined %}
  35. {{ form_widget(nested_field) }}
  36. {% set dummy = nested_group_field.setrendered %}
  37. {% else %}
  38. {{ form_widget(nested_field) }}
  39. {% endif %}
  40. </td>
  41. {% endfor %}
  42. </tr>
  43. {% endfor %}
  44. </tbody>
  45. </table>
  46. {% endif %}
  47. {% else %}
  48. {% if form.children %}
  49. <div>
  50. {% for nested_group_field_name, nested_group_field in form.children %}
  51. {% for field_name, nested_field in nested_group_field.children %}
  52. {% if sonata_admin.field_description.associationadmin.formfielddescriptions[field_name] is defined %}
  53. {{ form_widget(nested_field, {
  54. 'inline': 'natural',
  55. 'edit' : 'inline'
  56. }) }}
  57. {% set dummy = nested_group_field.setrendered %}
  58. {% else %}
  59. {{ form_widget(nested_field) }}
  60. {% endif %}
  61. {% endfor %}
  62. {% endfor %}
  63. </div>
  64. {% endif %}
  65. {% endif %}
  66. {% else %}
  67. {{ form_widget(form) }}
  68. {% endif %}
  69. </span>
  70. {% if sonata_admin.edit == 'inline' %}
  71. {% if sonata_admin.field_description.associationadmin.hasroute('create') and sonata_admin.field_description.associationadmin.isGranted('CREATE') %}
  72. <span id="field_actions_{{ id }}" >
  73. <a
  74. href="{{ sonata_admin.field_description.associationadmin.generateUrl('create') }}"
  75. onclick="return start_field_retrieve_{{ id }}(this);"
  76. class="sonata-ba-action"
  77. >
  78. <img
  79. src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
  80. alt="{% trans from 'SonataAdminBundle' %}btn_add{% endtrans %}"
  81. />
  82. </a>
  83. </span>
  84. {% endif %}
  85. {# add code for the sortable options #}
  86. {% if sonata_admin.field_description.options.sortable is defined %}
  87. <script type="text/javascript">
  88. jQuery('div#field_container_{{ id }} tbody.sonata-ba-tbody').sortable({
  89. axis: 'y',
  90. opacity: 0.6,
  91. items: 'tr',
  92. stop: apply_position_value_{{ id }}
  93. });
  94. function apply_position_value_{{ id }}() {
  95. // update the input value position
  96. jQuery('div#field_container_{{ id }} tbody.sonata-ba-tbody td.sonata-ba-td-{{ id }}-position').each(function(index, element) {
  97. // remove the sortable handler and put it back
  98. jQuery('span.sonata-ba-sortable-handler', element).remove();
  99. jQuery(element).append('<span class="sonata-ba-sortable-handler ui-icon ui-icon-grip-solid-horizontal"></span>');
  100. jQuery('input', element).hide();
  101. });
  102. jQuery('div#field_container_{{ id }} tbody.sonata-ba-tbody td.sonata-ba-td-{{ id }}-position input').each(function(index, value) {
  103. jQuery(value).val(index + 1);
  104. });
  105. }
  106. // refresh the sortable option when a new element is added
  107. jQuery('#sonata-ba-field-container-{{ id }}').bind('sonata.add_element', function() {
  108. apply_position_value_{{ id }}();
  109. jQuery('div#field_container_{{ id }} tbody.sonata-ba-tbody').sortable('refresh');
  110. });
  111. apply_position_value_{{ id }}();
  112. </script>
  113. {% endif %}
  114. {# include association code #}
  115. {% include 'SonataDoctrineORMAdminBundle:CRUD:edit_orm_one_association_script.html.twig' %}
  116. {% else %}
  117. <span id="field_actions_{{ id }}" >
  118. {% if sonata_admin.field_description.associationadmin.hasroute('create') and sonata_admin.field_description.associationadmin.isGranted('CREATE') %}
  119. <a
  120. href="{{ sonata_admin.field_description.associationadmin.generateUrl('create') }}"
  121. onclick="return start_field_dialog_form_add_{{ id }}(this);"
  122. class="sonata-ba-action"
  123. >
  124. <img
  125. src="{{ asset('bundles/sonataadmin/famfamfam/add.png') }}"
  126. alt="{% trans from 'SonataAdminBundle' %}btn_add{% endtrans %}"
  127. />
  128. </a>
  129. {% endif %}
  130. </span>
  131. <div style="display: none" id="field_dialog_{{ id }}">
  132. </div>
  133. {% include 'SonataDoctrineORMAdminBundle:CRUD:edit_orm_many_association_script.html.twig' %}
  134. {% endif %}
  135. </div>
  136. {% endif %}