templates/account/profiles/profile_form.html.twig line 173

Open in your IDE?
  1. {% extends 'account/grid.html.twig' %}
  2. {% block name_page %}account-profile-form{% endblock %}
  3. {% block title %}Добавление анкеты - Личный Кабинет{% endblock %}
  4. {# Обработка списка услуг. Получаем список переменных. Название группы и кол-во элементов внутри
  5. array:6 [▼
  6.   0 => array:2 [▼
  7.     0 => "Секс"
  8.     1 => 14
  9.   ]
  10.   1 => array:2 [▶]
  11.   2 => array:2 [▶]
  12.   3 => array:2 [▶]
  13.   4 => array:2 [▶]
  14.   5 => array:2 [▶]
  15. ]
  16. #}
  17. {% set photo_media_upload_url = oneup_uploader_endpoint('profile_photo') %}
  18. {% set selfie_media_upload_url = oneup_uploader_endpoint('profile_selfie') %}
  19. {% set approval_media_upload_url = oneup_uploader_endpoint(feature('approval_by_video') and feature('postprocess_video') ? 'tmp_media' : 'profile_media_approval') %}
  20. {% set video_media_upload_url = oneup_uploader_endpoint('process_queue') %}
  21. {% if approval_media_upload_domain %}
  22.     {% set photo_media_upload_url = 'https://' ~ approval_media_upload_domain ~ photo_media_upload_url %}
  23.     {% set selfie_media_upload_url = 'https://' ~ approval_media_upload_domain ~ selfie_media_upload_url %}
  24.     {% set approval_media_upload_url = 'https://' ~ approval_media_upload_domain ~ approval_media_upload_url %}
  25.     {% set video_media_upload_url = 'https://' ~ approval_media_upload_domain ~ video_media_upload_url %}
  26. {% endif %}
  27. {% set services_array = [] %}
  28. {% set count_in_group = 0 %}
  29. {% set current_group = 0 %}
  30. {% set title_group = 0 %}
  31. {% set services = services_list() %}
  32. {% for provided_service in form.provided_services %}
  33.     {% set service = services[provided_service.service.vars.value] %}
  34.     {% if current_group != service.group %}
  35.         {% if not loop.first %}
  36.             {% set services_array = services_array|merge([
  37.                 [title_group,count_in_group]
  38.             ]) %}
  39.         {% endif %}
  40.         {% set current_group = service.group %}
  41.         {% set title_group = current_group|service_group|trans({}, 'service_groups')  %} {#Заголовок группы#}
  42.         {% set count_in_group = 0 %}
  43.     {% endif %}
  44.     {% set count_in_group = count_in_group + 1 %}
  45. {% endfor %}
  46.  {% set services_array = services_array|merge([
  47.      [title_group,count_in_group]
  48.  ]) %}
  49.  {%- macro _service_block(provided_service, service) -%}
  50.     <div class="checkbox-form d-flex" data-id="{{ provided_service.vars.name }}">
  51.         <div class="checkbox-block d-flex{% if not provided_service.enabled.vars.checked %} not-selected{% endif %}">
  52.             <div class="conditions d-flex">
  53.                 {{ form_widget(provided_service.condition[0]) }}
  54.                 <label for="{{provided_service.condition[0].vars.id}}" title="Включено" class="d-flex include">
  55.                     <svg class="icon">
  56.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-include"></use>
  57.                     </svg>
  58.                 </label>
  59.                 {{ form_widget(provided_service.condition[1]) }}
  60.                 <label for="{{provided_service.condition[1].vars.id}}" title="По симпатии" class="d-flex sympathy">
  61.                     <svg class="icon">
  62.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-sympathy"></use>
  63.                     </svg>
  64.                 </label>
  65.                 {{ form_widget(provided_service.condition[2]) }}
  66.                 <label for="{{provided_service.condition[2].vars.id}}" title="За дополнительную плату" class="d-flex extra">
  67.                     <svg class="icon">
  68.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-with-price"></use>
  69.                     </svg>
  70.                 </label>
  71.             </div>
  72.             <div class="main-checkbox d-flex">
  73.                 {{ form_widget(provided_service.enabled) }}
  74.                 <label for="{{ provided_service.vars.id }}_enabled" class="">{{ service.name|trans({}, 'left_menu') }}</label>
  75.             </div>
  76.             <div class="price d-flex">
  77.                 <div class="input__sub">
  78.                     {{ form_widget(provided_service.extra_charge, {'attr': {
  79.                         'class': 'basic-view extra-price input__sub__input',
  80.                         maxlength: '6'
  81.                     }}) }}
  82.                     <span class="input__sub__text">₽</span>
  83.                 </div>
  84.             </div>
  85.         </div>
  86.         <div class="services__comment services__comment--empty d-none" data-services-comment>
  87.             {{ form_widget(provided_service.comment, {'attr': {
  88.                 'class': 'services__comment__textarea',
  89.                 'placeholder': 'Дополнительная информация по услуге (необязательно)',
  90.                 'data-services-comment-textarea':'',
  91.                 'maxlength': '80'
  92.             }}) }}
  93.             <div class="services__comment__count" data-services-comment-count>80</div>
  94.         </div>
  95.         {% set error_message = form_errors(provided_service.extra_charge) %}
  96.         <p class="field-error services-error{% if error_message|length > 0 %} show{% endif %}" id="{{ provided_service.extra_charge.vars.id }}_error">{{ error_message }}</p>
  97.         <div>{{ form_widget(provided_service.service) }}</div>
  98.     </div>
  99. {%- endmacro -%}
  100. {# {% form_theme form _self %}
  101. {% set city = app.request.attributes.get('city', default_city()) %}
  102. {% block _stations_widget %}
  103.     {% for choice in form.vars.choices %}
  104.         <div class="fake-checkbox-label" data-city-id="{{ choice.data.city.id }}">
  105.             <label class="checkbox" for="check{{ loop.index }}"></label>
  106.             <input class="input-for-valid" name="{{ form.vars.full_name }}" type="checkbox" id="check{{ loop.index }}" value="{{ choice.value }}" {% if choice is selectedchoice(value) %}checked{% endif %}>
  107.             <label for="check{{ loop.index }}">{{ choice.label }}</label>
  108.         </div>
  109.     {% endfor %}
  110. {% endblock %} #}
  111. {# переменная отвечает за отметку редактирование это или добавление #}
  112. {% set editCheck = form.vars.value ? true : false %}
  113. {% block specialPageClass %} girl-form{% endblock %}
  114. {% block mainContainer %}
  115.     <ul class="breadcrumbs" vocab="http://schema.org/" typeof="BreadcrumbList">
  116.         <li class="" property="itemListElement" typeof="ListItem">
  117.             <a href="{{ path('account') }}" property="item" typeof="WebPage">Личный кабинет</a>
  118.             <meta property="position" content="1">
  119.         </li>
  120.         <li class="last-crumb"><span>{% if editCheck %}Редактирование анкеты{% else %}Добавить новую анкету{% endif %}</span></li>
  121.     </ul>
  122.     <h1 class="border-line" role="heading">{% if editCheck %}Редактирование анкеты{% else %}Новая анкета{% endif %}</h1>
  123.     <div class="girl-form"
  124.         {# data-masseur-id="{{ form.is_masseur.vars.id }}"#}
  125.          {#data-masseur-exclude-service-groups="{{ form.masseur_exclude_service_groups.vars.value }}"#}>
  126.         {{ form_start(form, {'attr': {
  127.             'novalidate': 'novalidate',
  128.             'class': 'profile-form',
  129.             'data-edit': editCheck ? 'true' : 'false'
  130.         }}) }}
  131.         {% if form_errors(form) %}
  132.             <div class="field-error form-error is-flex level">
  133.                 <i><img src="{{ asset('assets/images/icons/alert.svg','basicConfig') }}"></i>
  134.                 <p>{{ form_errors(form) }}</p>
  135.             </div>
  136.         {% endif %}
  137.         {% include 'account/flashes.html.twig' %}
  138.         {# Главное фото анкеты + Основная информация + Основные параметры + Расценки + О себе #}
  139.         <div class="main-block">
  140.             <div class="block avatar">
  141.                 <h2 class="border-line">Главное фото анкеты</h2>
  142.                 {% set error_message = form_errors(form.avatar) %}
  143.                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.avatar.vars.id }}_error">{{ error_message }}</p>
  144.                 <div class="photo-data" style="display:none"></div>
  145.                 <div class="photo">
  146.                     {% if form.avatar.vars.value %}
  147.                         <div class="preview">
  148.                             <img src="{{ responsive_asset(form.avatar.vars.value, 'profile_media_avatar', "357x500", "jpg") }}" id="avatar_preview">
  149.                         </div>
  150.                     {% else %}
  151.                         <div class="empty-image">
  152.                             <svg class="icon mr-1">
  153.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-empty-girl"></use>
  154.                             </svg>
  155.                         </div>
  156.                         <div class="preview invisible">
  157.                             <img data-src="{{ responsive_asset(form.avatar.vars.value, 'profile_media_avatar', "357x500", "jpg") }}" id="avatar_preview">
  158.                         </div>
  159.                     {% endif %}
  160.                 </div>
  161.                 <div class="upload-photo">
  162.                     <p>Рекомендованный размер: 500х700px.</p>
  163.                     <div class="button">
  164.                         {{ form_widget(form.avatar) }}
  165.                         <input type="file"
  166.                             id="set_avatar"
  167.                             style="position:absolute;left:-999999px"
  168.                             accept="image/jpg,image/jpeg"
  169.                             data-url="{{ oneup_uploader_endpoint('profile_media_avatar') }}"
  170.                             data-id="{{ form.avatar.vars.id }}"
  171.                             data-original-path="{{ responsive_media_base_url }}"
  172.                             data-type="avatar">
  173.                         <label class="btn btn-secondary d-flex" for="set_avatar">
  174.                             <svg class="icon mr-2">
  175.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-profile"></use>
  176.                             </svg>
  177.                             <span>Загрузить аватар</span>
  178.                         </label>
  179.                     </div>
  180.                 </div>
  181.             </div>
  182.             <div class="block main-information">
  183.                 <h2 class="border-line">Основная информация</h2>
  184.                 <div class="field">
  185.                     <div class="wrap d-flex">
  186.                         <label class="name" for="{{ form.name.vars.id }}">Имя:</label>
  187.                         {{ form_widget(form.name, {'attr': {
  188.                             'class': 'basic-view',
  189.                             'maxlength': '30',
  190.                             'placeholder': 'Введите имя'
  191.                         }}) }}
  192.                     </div>
  193.                     {% set error_message = form_errors(form.name) %}
  194.                     <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.name.vars.id }}_error">{{ error_message }}</p>
  195.                 </div>
  196.                 {% if form.city is defined %}
  197.                     <div class="field">
  198.                         <div class="wrap d-flex">
  199.                             <label class="name" for="{{ form.name.vars.id }}">Город:</label>
  200.                             {% if editCheck %}
  201.                                 {{ form_widget(form.city, {'attr': {
  202.                                     'class': 'basic-view disabled',
  203.                                     "disabled": "disabled"
  204.                                 }}) }}
  205.                                 <input type="hidden" name="{{form.city.vars.name}}" value="{{form.city.vars.value}}">
  206.                             {% else %}
  207.                                 <div class="info selector">
  208.                                     <div class="selector-block">
  209.                                         <button class=""
  210.                                                 type="button"
  211.                                                 data-toggle="selector" data-noempty="true"></button>
  212.                                         <div class="tags"></div>
  213.                                     </div>
  214.                                     <div class="form-data">
  215.                                         {{ form_widget(form.city) }}
  216.                                     </div>
  217.                                 </div>
  218.                             {% endif %}
  219.                         </div>
  220.                         {% set error_message = form_errors(form.city) %}
  221.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.city.vars.id }}_error">{{ error_message }}</p>
  222.                     </div>
  223.                 {% endif %}
  224.                 <div class="field">
  225.                     <div class="wrap d-flex phone-block">
  226.                         <label class="name" for="phone_number">Телефон:</label>
  227.                         {{ form_widget(form.phone_number, {'attr': {
  228.                             'class': 'basic-view',
  229.                             'maxlength': '20',
  230.                             'minlength': '11',
  231.                             'placeholder': '+7 (___) ___ __ __'
  232.                         }}) }}
  233.                         <div class="additional d-flex">
  234.                             <div class="checkbox-form">
  235.                                 {{ form_widget(form.messengers.telegram) }}
  236.                                 <label for="messengers_telegram" class="level">Telegram</label>
  237.                             </div>
  238.                             <div class="checkbox-form">
  239.                                 {{ form_widget(form.messengers.whatsapp) }}
  240.                                 <label for="messengers_whatsapp" class="level">WhatsApp</label>
  241.                             </div>
  242.                         </div>
  243.                         <div class="messengers__tg{{ form.messengers.telegram.vars.checked ? ' show' : '' }}" id="messengers-telegram-root">
  244.                             <label for="messengers_telegram_username">Юзернейм Телеграм:</label>
  245.                             <div class="messengers__tg-wrap">
  246.                                 <span class="messengers__tg-pre">@</span>
  247.                                 {{ form_widget(form.messengers.telegram_username, {'attr': {
  248.                                     'class': 'messengers__tg-input basic-view',
  249.                                     'minlength': '5',
  250.                                     'maxlength': '32',
  251.                                     'placeholder': '',
  252.                                     'pattern': '[A-Za-z0-9_]{5,32}'
  253.                                 }}) }}
  254.                             </div>
  255.                             {% set error_message = form_errors(form.messengers.telegram_username) %}
  256.                             <p class="field-error for-messengers{% if error_message|length > 0 %} show{% endif %}" id="messengers_error">{{ error_message }}</p>
  257.                         </div>
  258.                     </div>
  259.                     {% set error_message = form_errors(form.phone_number) %}
  260.                     <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.phone_number.vars.id }}_error">{{ error_message }}</p>
  261.                 </div>
  262.                 <div class="field time-to-call">
  263.                     <label class="name">Время для звонка:</label>
  264.                     <div class="wrap d-flex">
  265.                         <div class="invisible">
  266.                             <input type="radio" name="time-to-call" id="time-all">
  267.                             <label for="time-all" class="level">Круглосуточно</label>
  268.                         </div>
  269.                         <div class="wrap {% if form_errors(form.phone_call_restrictions.time_from) %} have-error{% endif %}">
  270.                             <div class="radiobox-form invisible">
  271.                                 <input type="radio" name="time-to-call" id="time-sep">
  272.                                 <label for="time-sep" class="">В указанный  промежуток времени:</label>
  273.                                 {% set error_message = form_errors(form.phone_call_restrictions.time_from) %}
  274.                                 <p class="field-error for-time{% if error_message|length > 0 %} show{% endif %}" id="time-sep_error">{{ error_message }}</p>
  275.                             </div>
  276.                             <div class="time-to-call-cell d-flex">
  277.                                 <span>с</span>
  278.                                 <input type="number" class="basic-view"
  279.                                        id="{{form.phone_call_restrictions.time_from.vars.id}}"
  280.                                        name="{{form.phone_call_restrictions.time_from.vars.full_name}}"
  281.                                        placeholder="0"
  282.                                        min="0"
  283.                                        max="24"
  284.                                        {% if editCheck %}value="{{form.phone_call_restrictions.time_from.vars.value}}"{% endif %}>
  285.                                 <span>до</span>
  286.                                 <input type="number"
  287.                                        class="basic-view"
  288.                                        id="{{form.phone_call_restrictions.time_to.vars.id}}"
  289.                                        name="{{form.phone_call_restrictions.time_to.vars.full_name}}"
  290.                                        placeholder="24"
  291.                                        min="0"
  292.                                        max="24"
  293.                                        {% if editCheck %}value="{{form.phone_call_restrictions.time_to.vars.value}}"{% endif %}>
  294.                             </div>
  295.                             <div class="time-to-call-cell-hide invisible">
  296.                                 {{ form_widget(form.phone_call_restrictions.time_from) }}
  297.                                 {{ form_widget(form.phone_call_restrictions.time_to) }}
  298.                             </div>
  299.                         </div>
  300.                     </div>
  301.                 </div>
  302.                 <div class="field answer-only">
  303.                     <div class="wrap d-flex">
  304.                         <label class="name">Отвечаю на:</label>
  305.                         <div class="additional d-flex">
  306.                             {% for i in form.phone_call_restrictions.answering_to %}
  307.                                 <div class="checkbox-form">
  308.                                     {{ form_widget(i) }}
  309.                                     <label for="{{ i.vars.id }}" class="">{{ i.vars.label|trans({}, 'phone_call_restrictions') }}</label>
  310.                                 </div>
  311.                             {% endfor %}
  312.                         </div>
  313.                     </div>
  314.                 </div>
  315.             </div>
  316.             <div class="block main-parameters">
  317.                 <h2 class="border-line">Основные параметры</h2>
  318.                 <div class="input-group">
  319.                     <div class="field">
  320.                         <label>Возраст:</label>
  321.                         {{ form_widget(form.person_parameters.age, {'attr': {
  322.                             'class': 'basic-view',
  323.                             'min': '18',
  324.                             'max': '100',
  325.                             'placeholder': 'лет'
  326.                         }}) }}
  327.                         {% set error_message = form_errors(form.person_parameters.age) %}
  328.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.age.vars.id }}_error">{{ error_message }}</p>
  329.                     </div>
  330.                     <div class="field">
  331.                         <label>Вес:</label>
  332.                         {{ form_widget(form.person_parameters.weight, {'attr': {
  333.                             'class': 'basic-view',
  334.                             'placeholder': 'кг',
  335.                             'min': '25',
  336.                             'max': '250'
  337.                         }}) }}
  338.                         {% set error_message = form_errors(form.person_parameters.weight) %}
  339.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.weight.vars.id }}_error">{{ form_errors(form.person_parameters.weight) }}</p>
  340.                     </div>
  341.                     <div class="field">
  342.                         <label>Одежда:</label>
  343.                         {{ form_widget(form.person_parameters.cloth_size, {'attr': {
  344.                             'class': 'basic-view',
  345.                             'placeholder': 'Размер',
  346.                             'min': '38',
  347.                             'max': '80'
  348.                         }}) }}
  349.                         {% set error_message = form_errors(form.person_parameters.cloth_size) %}
  350.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.cloth_size.vars.id }}_error">{{ error_message }}</p>
  351.                     </div>
  352.                     <div class="field">
  353.                         <label>Рост:</label>
  354.                         {{ form_widget(form.person_parameters.height, {'attr': {
  355.                             'class': 'basic-view',
  356.                             'placeholder': 'см',
  357.                             'min': '120',
  358.                             'max': '220'
  359.                         }}) }}
  360.                         {% set error_message = form_errors(form.person_parameters.height) %}
  361.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.height.vars.id }}_error">{{ error_message }}</p>
  362.                     </div>
  363.                     <div class="field">
  364.                         <label>Грудь:</label>
  365.                         {{ form_widget(form.person_parameters.breast_size, {'attr': {
  366.                             'class': 'basic-view',
  367.                             'placeholder': 'Размер',
  368.                             'min': '1',
  369.                             'max': '12'
  370.                         }}) }}
  371.                         {% set error_message = form_errors(form.person_parameters.breast_size) %}
  372.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.breast_size.vars.id }}_error">{{ error_message }}</p>
  373.                     </div>
  374.                     <div class="field">
  375.                         <label>Обувь:</label>
  376.                         {{ form_widget(form.person_parameters.shoes_size, {'attr': {
  377.                             'class': 'basic-view',
  378.                             'placeholder': 'Размер',
  379.                             'min': '33',
  380.                             'max': '48'
  381.                         }}) }}
  382.                         {% set error_message = form_errors(form.person_parameters.shoes_size) %}
  383.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.person_parameters.shoes_size.vars.id }}_error">{{ error_message }}</p>
  384.                     </div>
  385.                 </div>
  386.                 <div class="checkboxes">
  387.                     <div class="field d-flex">
  388.                         <div class="additional d-flex">
  389.                             <div class="checkbox-form">
  390.                                 {{ form_widget(form.person_parameters.has_tattoo, {'attr': {}}) }}
  391.                                 <label for="person_parameters_has_tattoo" class="">Тату</label>
  392.                             </div>
  393.                             <div class="checkbox-form">
  394.                                 {{ form_widget(form.person_parameters.has_piercing, {'attr': {}}) }}
  395.                                 <label for="person_parameters_has_piercing" class="">Пирсинг</label>
  396.                             </div>
  397.                         </div>
  398.                     </div>
  399.                 </div>
  400.                 <div class="dropdown-elements">
  401.                     <div class="field">
  402.                         <div class="wrap is-flex level">
  403.                             <label class="name">Национальность:</label>
  404.                             <div class="info selector">
  405.                                 <div class="selector-block">
  406.                                     <button class=""
  407.                                             type="button"
  408.                                             data-toggle="selector" data-noempty="true"></button>
  409.                                     <div class="tags"></div>
  410.                                 </div>
  411.                                 <div class="form-data">
  412.                                     {{ form_widget(form.person_parameters.nationality, {'attr': {
  413.                                         'class': 'basic-view',
  414.                                     }}) }}
  415.                                 </div>
  416.                             </div>
  417.                         </div>
  418.                         {% set error_message = form_errors(form.person_parameters.nationality) %}
  419.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  420.                     </div>
  421.                     <div class="field">
  422.                         <div class="wrap is-flex level">
  423.                             <label class="name">Телосложение:</label>
  424.                             <div class="info selector">
  425.                                 <div class="selector-block">
  426.                                     <button class=""
  427.                                             type="button"
  428.                                             data-toggle="selector" data-noempty="true"></button>
  429.                                     <div class="tags"></div>
  430.                                 </div>
  431.                                 <div class="form-data">
  432.                                     {{ form_widget(form.person_parameters.body_type, {'attr': {
  433.                                         'class': 'basic-view',
  434.                                     }}) }}
  435.                                 </div>
  436.                             </div>
  437.                         </div>
  438.                         {% set error_message = form_errors(form.person_parameters.body_type) %}
  439.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  440.                     </div>
  441.                     <div class="field">
  442.                         <div class="wrap is-flex level">
  443.                             <label class="name">Цвет волос:</label>
  444.                             <div class="info selector">
  445.                                 <div class="selector-block">
  446.                                     <button class=""
  447.                                             type="button"
  448.                                             data-toggle="selector" data-noempty="true"></button>
  449.                                     <div class="tags"></div>
  450.                                 </div>
  451.                                 <div class="form-data">
  452.                                     {{ form_widget(form.person_parameters.hair_color, {'attr': {
  453.                                         'class': 'basic-view',
  454.                                     }}) }}
  455.                                 </div>
  456.                             </div>
  457.                         </div>
  458.                         {% set error_message = form_errors(form.person_parameters.hair_color) %}
  459.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  460.                     </div>
  461.                     <div class="field">
  462.                         <div class="wrap is-flex level">
  463.                             <label class="name">Интимная стрижка:</label>
  464.                             <div class="info selector">
  465.                                 <div class="selector-block">
  466.                                     <button class=""
  467.                                             type="button"
  468.                                             data-toggle="selector" data-noempty="true"></button>
  469.                                     <div class="tags"></div>
  470.                                 </div>
  471.                                 <div class="form-data">
  472.                                     {{ form_widget(form.person_parameters.private_haircut, {'attr': {
  473.                                         'class': 'basic-view',
  474.                                     }}) }}
  475.                                 </div>
  476.                             </div>
  477.                         </div>
  478.                         {% set error_message = form_errors(form.person_parameters.private_haircut) %}
  479.                         <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  480.                     </div>
  481.                 </div>
  482.             </div>
  483.             <div class="block prices">
  484.                 <h2 class="border-line">Расценки</h2>
  485.                 <div class="wrap d-flex">
  486.                     <div class="apartments">
  487.                         <h3>
  488.                             <svg class="icon mr-1">
  489.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-house"></use>
  490.                             </svg>
  491.                             <span>Апартаменты</span>
  492.                         </h3>
  493.                         <div class="input-group d-flex">
  494.                             <div class="field">
  495.                                 <label>1 час:</label>
  496.                                 {{ form_widget(form.apartments_pricing.one_hour_price, {'attr': {
  497.                                     'class': 'basic-view',
  498.                                     'min': '1',
  499.                                     maxlength: '6'
  500.                                 }}) }}
  501.                                 {% set error_message = form_errors(form.apartments_pricing.one_hour_price) %}
  502.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.apartments_pricing.one_hour_price.vars.id }}_error">{{ error_message }}</p>
  503.                             </div>
  504.                             <div class="field">
  505.                                 <label>2 часа:</label>
  506.                                 {{ form_widget(form.apartments_pricing.two_hours_price, {'attr': {
  507.                                     'class': 'basic-view',
  508.                                     'min': '1',
  509.                                     maxlength: '6'
  510.                                 }}) }}
  511.                                 {% set error_message = form_errors(form.apartments_pricing.two_hours_price) %}
  512.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.apartments_pricing.two_hours_price.vars.id }}_error">{{ error_message }}</p>
  513.                             </div>
  514.                             <div class="field">
  515.                                 <label>Ночь:</label>
  516.                                 {{ form_widget(form.apartments_pricing.night_price, {'attr': {
  517.                                     'class': 'basic-view',
  518.                                     'min': '1',
  519.                                     maxlength: '6'
  520.                                 }}) }}
  521.                                 {% set error_message = form_errors(form.apartments_pricing.night_price) %}
  522.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.apartments_pricing.night_price.vars.id }}_error">{{ error_message }}</p>
  523.                             </div>
  524.                         </div>
  525.                     </div>
  526.                     <div class="takeout">
  527.                         <h3>
  528.                             <svg class="icon mr-1">
  529.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-car"></use>
  530.                             </svg>
  531.                             <span>Выезд</span>
  532.                         </h3>
  533.                         <div class="input-group d-flex">
  534.                             <div class="field">
  535.                                 <label>1 час:</label>
  536.                                 {{ form_widget(form.take_out_pricing.one_hour_price, {'attr': {
  537.                                     'class': 'basic-view',
  538.                                     'min': '1',
  539.                                     maxlength: '6'
  540.                                 }}) }}
  541.                                 {% set error_message = form_errors(form.take_out_pricing.one_hour_price) %}
  542.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.take_out_pricing.one_hour_price.vars.id }}_error">{{ error_message }}</p>
  543.                             </div>
  544.                             <div class="field">
  545.                                 <label>2 часа:</label>
  546.                                 {{ form_widget(form.take_out_pricing.two_hours_price, {'attr': {
  547.                                     'class': 'basic-view',
  548.                                     'min': '1',
  549.                                     maxlength: '6'
  550.                                 }}) }}
  551.                                 {% set error_message = form_errors(form.take_out_pricing.two_hours_price) %}
  552.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.take_out_pricing.two_hours_price.vars.id }}_error">{{ error_message }}</p>
  553.                             </div>
  554.                             <div class="field">
  555.                                 <label>Ночь:</label>
  556.                                 {{ form_widget(form.take_out_pricing.night_price, {'attr': {
  557.                                     'class': 'basic-view',
  558.                                     'min': '1',
  559.                                     maxlength: '6'
  560.                                 }}) }}
  561.                                 {% set error_message = form_errors(form.take_out_pricing.night_price) %}
  562.                                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.take_out_pricing.night_price.vars.id }}_error">{{ error_message }}</p>
  563.                             </div>
  564.                         </div>
  565.                     </div>
  566.                 </div>
  567.                 <div class="express{% if not form.express_pricing.provided.vars.checked %} no-ex1press{% endif %}">
  568.                     <div class="wrap">
  569.                         <div class="field">
  570.                             {{ form_widget(form.express_pricing.provided) }}
  571.                             <label for="express_pricing_provided" class="level">Есть экспресс</label>
  572.                         </div>
  573.                         {{ form_widget(form.express_pricing.price, {'attr': {
  574.                             'class': 'express-price basic-view',
  575.                             'min': '1',
  576.                             maxlength: '6'
  577.                         }}) }}
  578.                     </div>
  579.                     {% set error_message = form_errors(form.express_pricing.price) %}
  580.                     <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.express_pricing.price.vars.id }}_error">{{ error_message }}</p>
  581.                 </div>
  582.                 <div class="services-special">
  583.                     <h3>Выезд:</h3>
  584.                     <div class="services-list">
  585.                         {% for take_out_location in form.take_out_pricing.locations %}
  586.                             <div class="checkbox-form">
  587.                                 {{ form_widget(take_out_location) }}
  588.                                 <label for="{{ take_out_location.vars.id }}" class="">{{ take_out_location.vars.label|trans({}, 'take_out_location') }}</label>
  589.                             </div>
  590.                         {% endfor %}
  591.                         <div class="checkbox-form">
  592.                             {{ form_widget(form.car_pricing.provided) }}
  593.                             <label for="{{ form.car_pricing.provided.vars.id }}" class="">В машине</label>
  594.                         </div>
  595.                     </div>
  596.                     {% set error_message = form_errors(form.take_out_pricing.locations) %}
  597.                     <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  598.                 </div>
  599.             </div>
  600.             <div class="block about">
  601.                 <h2 class="border-line">О себе</h2>
  602.                 <div class="textarea">
  603.                     {{ form_widget(form.about, {'attr': {
  604.                         'class': 'basic-view',
  605.                         'placeholder': 'Напишите о себе',
  606.                         'maxlength': '3000',
  607.                         'minlength': '100'
  608.                     }}) }}
  609.                 </div>
  610.                 <p class="info">Напишите о себе (минимум 100 символов):</p>
  611.                 {% set error_message = form_errors(form.about) %}
  612.                 <p class="field-error{% if error_message|length > 0 %} show{% endif %}" id="{{form.about.vars.id }}_error">{{ error_message }}</p>
  613.             </div>
  614.         </div>
  615.         {#<div class="additional-info masseur">
  616.             <div class="field is-flex level">
  617.                 <div class="additional">
  618.                     <div class="checkbox-form level">
  619.                         {{ form_widget(form.is_masseur, {'attr': {}}) }}
  620.                         <label for="is_masseur" class="level">Массажистка</label>
  621.                     </div>
  622.                     <p>Анкета будет показываться только в разделе "Массажистки"</p>
  623.                 </div>
  624.             </div>
  625.         </div>#}
  626.         <div class="block map-block">
  627.             <h2 class="border-line">Расположение</h2>
  628.             <div class="metro d-flex" id="metro-choice">
  629.                 <div class="info selector">
  630.                     <p>Выберите станции метро (максимум 3 станции):</p>
  631.                     <div class="selector-block">
  632.                         <button class=""
  633.                                 type="button"
  634.                                 data-toggle="selector"
  635.                                 data-limit="3"
  636.                                 data-empty-text="Выберите станции метро"></button>
  637.                         <div class="tags"></div>
  638.                     </div>
  639.                     <div class="form-data">
  640.                         {{ form_widget(form.stations) }}
  641.                     </div>
  642.                     {% set error_message = form_errors(form.stations) %}
  643.                     <p class="field-error{% if error_message|length > 0 %} show{% endif %}">{{ error_message }}</p>
  644.                 </div>
  645.             </div>
  646.             <div class="metro-selected-list" id="metro-selected">
  647.             </div>
  648.             {{ form_widget(form.primary_station) }}
  649.             <div class="map">
  650.                 <div style="display:none">
  651.                     {{ form_widget(form.map_coordinate.latitude) }}
  652.                     {{ form_widget(form.map_coordinate.longitude) }}
  653.                 </div>
  654.                 <div class="info">
  655.                     <div class="map-wrap"
  656.                          id="ya-map"
  657.                          data-lat="{% if city.mapCoordinate.latitude %}{{city.mapCoordinate.latitude}}{% else %}55.752{% endif %}"
  658.                          data-lon="{% if city.mapCoordinate.longitude %}{{city.mapCoordinate.longitude}}{% else %}37.61{% endif %}"></div>
  659.                 </div>
  660.             </div>
  661.         </div>
  662.         <div class="block services-block">
  663.             <h2 class="border-line">Предоставляемые услуги</h2>
  664.             <ul class="about-services d-flex">
  665.                 <li class="d-flex include">
  666.                     <svg class="icon">
  667.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-include"></use>
  668.                     </svg>
  669.                     <span>- включено в стоимость</span>
  670.                 </li>
  671.                 <li class="d-flex sympathy">
  672.                     <svg class="icon">
  673.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-sympathy"></use>
  674.                     </svg>
  675.                     <span>- по настроению</span>
  676.                 </li>
  677.                 <li class="d-flex price">
  678.                     <svg class="icon">
  679.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-with-price"></use>
  680.                     </svg>
  681.                     <span>- за дополнительную плату</span>
  682.                 </li>
  683.                 <li class="d-flex not-include">
  684.                     <svg class="icon">
  685.                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-condition-with-price"></use>
  686.                     </svg>
  687.                     <span>- услуга не предоставляется</span>
  688.                 </li>
  689.             </ul>
  690.             <div class="services">
  691.                 {# Пояснения
  692.                 Эти открывающие дивы создаются вначале итерации. Но чтобы их закрыть, проще всего пихать закрывающий див при создании нового блока.
  693.                 Так запутанней, но так легче работать.
  694.                 <div class="group-6">   <------- этот див открывает группу. Он создается при первой проверке. Там же он закрывается.
  695.                     <p>Разное</p>
  696.                     <div class="is-flex level"> <------ этот див открывает блок чекбоксов. Тоже создается при первой проверке в цикле. закрывается тоже вначале цикла.
  697.                         <div class="checkbox-form level">
  698.                             <input type="checkbox" id="services_42" name="services[]" service-group="6" class="input-for-valid" value="42">
  699.                             <label class="b-checkbox__text" for="services_42">Ролевые игры</label>
  700.                         </div>
  701.                         <div class="checkbox-form level">
  702.                             <input type="checkbox" id="services_43" name="services[]" service-group="6" class="input-for-valid" value="43">
  703.                             <label class="b-checkbox__text" for="services_43">Фото/видео съемка</label>
  704.                         </div>
  705.                         ---------------------------------------------
  706.                     </div>
  707.                 </div>
  708.                 #}
  709.                 {% set current_group = 0 %}
  710.                 {% set count_in_group = 0 %}
  711.                 {% set title_group = 0 %}
  712.                 {% set initional_group_2 = 0 %}
  713.                 {% set group_2_minet = [] %}
  714.                 {% set group_2_okon = [] %}
  715.                 {% set group_2_okon_trigger = ['Окончание на грудь','Окончание на лицо','Окончание в рот'] %} {# Слова триггеры в 2 категории для блока Окончание. Все остальные уйдут в минет #}
  716.                 {% for provided_service in form.provided_services %}
  717.                     {% set service = services[provided_service.service.vars.value] %}
  718.                     {% if current_group != service.group %}
  719.                         {# Первый див это окончание блока checkbox-group предыдущего. Второй - тоже самое но для обёртки группы #}
  720.                         {% if not loop.first and current_group != 2 %}</div></div>{% endif %}
  721.                         {% set current_group = service.group %}
  722.                         {# Нужно обернуть блок Заголовок+его чекбоксы в див #}
  723.                         {% set title_group = current_group|service_group|trans({}, 'service_groups')  %} {#Заголовок группы#}
  724.                         {% set count_in_group = (services_array[current_group-1][1]/2)|round %} {#Кол-во элементов в группе#}
  725.                         {% if current_group == 2 %}
  726.                         {% elseif current_group == 3 %}
  727.                             <div class="group-2-1" data-group="2-1">
  728.                                 <h3>Минет</h3>
  729.                                 <div class="checkbox-group count-{{ count_in_group }}">
  730.                                     {% for data in group_2_minet %}
  731.                                         {% set _form = data.form %}
  732.                                         {% set _service = data.service %}
  733.                                         {{ _self._service_block(_form, _service) }}
  734.                                     {% endfor %}
  735.                                 </div>
  736.                             </div>
  737.                             <div class="group-2-2" data-group="2-2">
  738.                                 <h3>Окончание</h3>
  739.                                 <div class="checkbox-group count-{{ count_in_group }}">
  740.                                     {% for data in group_2_okon %}
  741.                                         {% set _form = data.form %}
  742.                                         {% set _service = data.service %}
  743.                                         {{ _self._service_block(_form, _service) }}
  744.                                     {% endfor %}
  745.                                 </div>
  746.                             </div>
  747.                             {# Тут выводится третья категория #}
  748.                             <div class="group-{{ current_group }}" data-group="{{ current_group }}">
  749.                                 <h3>{{ title_group }}</h3>
  750.                                 <div class="checkbox-group count-{{ count_in_group }}">
  751.                         {% else %}
  752.                             <div class="group-{{ current_group }}" data-group="{{ current_group }}">
  753.                                 <h3>{{ title_group }}</h3>
  754.                                 <div class="checkbox-group count-{{ count_in_group }}">
  755.                         {% endif %}
  756.                     {% endif %}
  757.                             {% if current_group == 2 %}
  758.                                 {% if service.name|trans({}, 'left_menu') in group_2_okon_trigger %}
  759.                                     {% set group_2_okon = group_2_okon|merge([{form:provided_service, service: service}]) %}
  760.                                 {% else %}
  761.                                     {% set group_2_minet = group_2_minet|merge([{form:provided_service, service: service}]) %}
  762.                                 {% endif %}
  763.                             {% else %}
  764.                                 {{ _self._service_block(provided_service, service) }}
  765.                             {% endif %}
  766.                         {% endfor %}
  767.                     </div>
  768.                 </div>
  769.             </div>
  770.             <div class="services-special">
  771.                 <h3>Услуги для:</h3>
  772.                 <div class="services-list d-flex">
  773.                     {% for client_type in form.client_types %}
  774.                         <div class="checkbox-form{{ client_type.vars.label == 'TRANS' ? ' d-none': '' }}">
  775.                             {{ form_widget(client_type) }}
  776.                             <label for="{{ client_type.vars.id }}" class="">{{ client_type.vars.label|trans({}, 'client_types') }}</label>
  777.                         </div>
  778.                     {% endfor %}
  779.                 </div>
  780.             </div>
  781.             </div>
  782.             <div class="block additional-info">
  783.                 <h2 class="border-line">Дополнительная информация</h2>
  784.                 <div class="age-prevent">
  785.                     <div class="field d-flex">
  786.                         <div class="text d-flex">
  787.                             <input type="checkbox" id="age-prevent">
  788.                             <label for="age-prevent">Ограничение по возрасту партнёра:</label>
  789.                         </div>
  790.                         <div class="age-prevent-cell d-flex">
  791.                             <span>от</span>
  792.                             {{ form_widget(form.client_restrictions.min_age, {'attr': {
  793.                                 'class': 'basic-view',
  794.                                 'min': '18',
  795.                                 'max': '100',
  796.                                 'placeholder': '18'
  797.                             }}) }}
  798.                             <span>до</span>
  799.                             {{ form_widget(form.client_restrictions.max_age, {'attr': {
  800.                                 'class': 'basic-view',
  801.                                 'min': '18',
  802.                                 'max': '100',
  803.                                 'placeholder': '100'
  804.                             }}) }}
  805.                         </div>
  806.                     </div>
  807.                     {% set error_message = form_errors(form.client_restrictions.min_age) %}
  808.                     <p class="field-error field-error-min{% if error_message|length > 0 %} show{% endif %}" id="{{form.client_restrictions.min_age.vars.id }}_error">
  809.                         Ошибка ввода минимального значения: {{ error_message }}
  810.                     </p>
  811.                     {% set error_message = form_errors(form.client_restrictions.max_age) %}
  812.                     <p class="field-error field-error-max{% if error_message|length > 0 %} show{% endif %}" id="{{form.client_restrictions.max_age.vars.id }}_error">
  813.                         Ошибка ввода максимального значения: {{ error_message }}</p>
  814.                 </div>
  815.                 {# <div class="has-friend">
  816.                     <div class="checkbox-form level">
  817.                         <input type="checkbox" id="has-friend">
  818.                         <label for="has-friend" class="level">Есть подруга</label>
  819.                     </div>
  820.                     <a href="">Пригласить подругу</a>
  821.                 </div>
  822.                 <div class="work-in-saloon">
  823.                     <div class="checkbox-form level">
  824.                         <input type="checkbox" id="work-in-saloon">
  825.                         <label for="work-in-saloon" class="level">Работаю в салоне</label>
  826.                     </div>
  827.                 </div> #}
  828.             </div>
  829.             <div class="block media-block">
  830.                 <div class="tabs-block d-flex" id="media-tabs">
  831.                     <div class="tab-header d-flex">
  832.                         <button type="button" class="btn d-flex photo active" data-toggle="photo">
  833.                             <svg class="icon">
  834.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-photo"></use>
  835.                             </svg>
  836.                             <span>Фото</span>
  837.                         </button>
  838.                         {% if form.selfies is defined %}
  839.                             <button type="button" class="btn d-flex selfie" data-toggle="selfie">
  840.                             <svg class="icon">
  841.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-selfie"></use>
  842.                             </svg>
  843.                                 <span>Селфи</span>
  844.                             </button>
  845.                         {% endif %}
  846.                         <button type="button" class="btn d-flex video" data-toggle="video">
  847.                             <svg class="icon">
  848.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-video"></use>
  849.                             </svg>
  850.                             <span>Видео</span>
  851.                         </button>
  852.                         <button type="button" class="btn d-flex verify-photo" data-toggle="verify-photo">
  853.                             <svg class="icon">
  854.                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-approved"></use>
  855.                             </svg>
  856.                             <span>Проверочное фото</span>
  857.                         </button>
  858.                     </div>
  859.                     <div class="tab-content">
  860.                         <div class="tab photo active" data-id="photo">
  861.                             <div class="photos-block" id="photo-block">
  862.                                 <div style="display:none" id="photo_widget">{{ form_widget(form.photos) }}</div>
  863.                                 <template id="template_photo_element">
  864.                                     <div class="attach__element attach__element--loading" data-media-rotater-element>
  865.                                         <img class="attach__element__photo" data-image data-media-rotater-target/>
  866.                                         <button class="btn attach__element__button attach__element__move" type="button" data-button-move>
  867.                                             <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.39 6.6a1.02 1.02 0 0 1 0-1.45l2.81-2.82a1.12 1.12 0 0 1 1.6 0l2.81 2.82a1.02 1.02 0 1 1-1.44 1.44l-1.15-1.14v5.53h5.53l-1.14-1.15a1.02 1.02 0 1 1 1.44-1.44l2.82 2.82a1.12 1.12 0 0 1 0 1.58l-2.82 2.82a1.02 1.02 0 0 1-1.44-1.44l1.14-1.15h-5.53v5.53l1.15-1.14a1.02 1.02 0 0 1 1.44 1.44l-2.82 2.82a1.12 1.12 0 0 1-1.59 0L8.4 18.85a1.02 1.02 0 1 1 1.44-1.44l1.15 1.14v-5.53H5.45l1.14 1.15a1.02 1.02 0 1 1-1.44 1.44L2.33 12.8a1.12 1.12 0 0 1 0-1.58l2.82-2.82a1.02 1.02 0 0 1 1.44 1.44l-1.14 1.15h5.53V5.45L9.83 6.59a1.02 1.02 0 0 1-1.44 0Z" /></svg>
  868.                                         </button>
  869.                                         <button class="btn attach__element__button attach__element__remove" type="button" data-button-remove>
  870.                                            <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7.33 8h-.77v10.4c0 .42.16.83.45 1.13.3.3.69.47 1.1.47h7.78c.41 0 .8-.17 1.1-.47.3-.3.45-.7.45-1.13V8H7.34Zm3.11 9.6H8.9v-7.2h1.55v7.2Zm4.67 0h-1.55v-7.2h1.55v7.2Zm.48-12L14.33 4H9.67L8.4 5.6H5v1.6h14V5.6h-3.4Z"/></svg>
  871.                                         </button>
  872.                                         <button class="btn attach__element__button attach__element__rotate" type="button" data-button-rotate data-media-rotater-button>
  873.                                             <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3.86 18.46a8.98 8.98 0 0 0 10.74 2.8c.61-.28.74-1.1.27-1.57l-.05-.05a1 1 0 0 0-1.1-.19A7 7 0 0 1 5.19 9.1 6.95 6.95 0 0 1 11 6.03V7.8c0 .45.54.67.86.36l2.79-2.79a.5.5 0 0 0 0-.7l-2.8-2.8a.5.5 0 0 0-.85.35v1.8a8.98 8.98 0 0 0-7.14 14.45Z"/><path d="M17.7 7.71a1 1 0 0 0-1.41 0L11.7 12.3a1 1 0 0 0 0 1.41l4.59 4.6a1 1 0 0 0 1.41 0l4.59-4.6a1 1 0 0 0 0-1.4L17.7 7.7Z" /></svg>
  874.                                         </button>
  875.                                         <svg class="attach__element__progress" data-progress width="100" height="101" fill="none" xmlns="http://www.w3.org/2000/svg">
  876.                                             <circle cx="50" cy="50" r="50" fill="#F7901D"/>
  877.                                             <circle data-progress-animate cx="50" cy="50" r="47" transform="rotate(0 0 0)" fill="none" stroke-dashoffset="314" stroke-dasharray="314"  stroke="#F7901D" stroke-width="6" />
  878.                                             <circle cx="50" cy="50" r="45" fill="#ffffff"/>
  879.                                             <text data-progress-value x="33" y="55" font-family="Verdana" font-size="20" fill="#F7901D">0%</text>
  880.                                         </svg>
  881.                                     </div>
  882.                                 </template>
  883.                                 <div class="attach attach--empty" id="photo_list"></div>
  884.                                 <div class="attach__add">
  885.                                     <input
  886.                                         type="file"
  887.                                         class="visually_hidden"
  888.                                         id="profile-photo-input"
  889.                                         multiple=""
  890.                                         style="position:absolute;left:-999999px"
  891.                                         accept="image/jpg,image/jpeg"
  892.                                         data-url="{{ photo_media_upload_url }}"
  893.                                         data-type="photo"
  894.                                     />
  895.                                     <label class="attach__add__label" for="profile-photo-input">
  896.                                         <svg class="attach__add__icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.94 11.11A7 7 0 0 0 12 5a6.74 6.74 0 0 0-6.24 4.15A5.25 5.25 0 0 0 2 14a5 5 0 0 0 5 5h11a4 4 0 0 0 .94-7.89ZM13 14v3h-2v-3H8l4-5 4 5h-3Z"/></svg>
  897.                                         <span>Загрузить фото</span>
  898.                                     </label>
  899.                                 </div>
  900.                             </div>
  901.                             <p class="info">Загрузите фотографии. Не больше 2500px по большей из сторон и не менее 500px по меньшей. <br>Формат: JPG или PNG</p>
  902.                         </div>
  903.                         {% if form.selfies is defined %}
  904.                             <div class="tab selfie" data-id="selfie">
  905.                                 <div class="photos-block" id="selfie-block">
  906.                                     <div style="display:none" id="selfie_widget">{{ form_widget(form.selfies) }}</div>
  907.                                     <template id="template_selfie_element">
  908.                                         <div class="attach__element attach__element--loading" data-media-rotater-element>
  909.                                             <img class="attach__element__photo" data-image data-media-rotater-target/>
  910.                                             <button class="btn attach__element__button attach__element__move" type="button" data-button-move>
  911.                                                 <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12 22-4-4h8l-4 4Zm0-20 4 4H8l4-4Zm0 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4ZM2 12l4-4v8l-4-4Zm20 0-4 4V8l4 4Z" /></svg>
  912.                                             </button>
  913.                                             <button class="btn attach__element__button attach__element__remove" type="button" data-button-remove>
  914.                                                 <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m19.37 9-1 1.73-12.13-7 1-1.73 3.04 1.75 1.36-.37 4.33 2.5.37 1.37L19.37 9ZM5 19.09v-12h5.07l6.93 4v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2Zm2 0h8v-6.8l-5.54-3.2H7v10Z"/></svg>
  915.                                             </button>
  916.                                             <button class="btn attach__element__button attach__element__rotate" type="button" data-button-rotate data-media-rotater-button>
  917.                                                 <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 11h3l-4 4-4-4h3a6 6 0 0 0-6-6l-1 .08V3.06L11 3a8 8 0 0 1 8 8ZM8 7H4a2 2 0 0 0-2 2v9a2 2 0 0 0 2 2h6a2 2 0 0 0 2-2v-7L8 7Zm2 11H4V9h3v3h3v6Z" /></svg>
  918.                                             </button>
  919.                                             <svg class="attach__element__progress" data-progress width="100" height="101" fill="none" xmlns="http://www.w3.org/2000/svg">
  920.                                                 <circle cx="50" cy="50" r="50" fill="#F7901D"/>
  921.                                                 <circle data-progress-animate cx="50" cy="50" r="47" transform="rotate(0 0 0)" fill="none" stroke-dashoffset="314" stroke-dasharray="314"  stroke="#F7901D" stroke-width="6" />
  922.                                                 <circle cx="50" cy="50" r="45" fill="#ffffff"/>
  923.                                                 <text data-progress-value x="33" y="55" font-family="Verdana" font-size="20" fill="#F7901D">0%</text>
  924.                                             </svg>
  925.                                         </div>
  926.                                     </template>
  927.                                     <div class="attach attach--empty" id="selfie_list"></div>
  928.                                     <div class="attach__add">
  929.                                         <input
  930.                                             type="file"
  931.                                             class="visually_hidden"
  932.                                             id="profile-selfie-input"
  933.                                             multiple=""
  934.                                             style="position:absolute;left:-999999px"
  935.                                             accept="image/jpg,image/jpeg"
  936.                                             data-url="{{ selfie_media_upload_url }}"
  937.                                             data-type="selfie"
  938.                                         />
  939.                                         <label class="attach__add__label" for="profile-selfie-input">
  940.                                             <svg class="attach__add__icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.94 11.11A7 7 0 0 0 12 5a6.74 6.74 0 0 0-6.24 4.15A5.25 5.25 0 0 0 2 14a5 5 0 0 0 5 5h11a4 4 0 0 0 .94-7.89ZM13 14v3h-2v-3H8l4-5 4 5h-3Z"/></svg>
  941.                                             <span>Загрузить селфи</span>
  942.                                         </label>
  943.                                     </div>
  944.                                 </div>
  945.                                 <p class="info">Загрузите фотографии. Для удобства просмотра желательно что бы размер фотографии был не более 2500рх по большей стороне и не менее 1000рх по больше стороне.<br>Формат изображения: JPG или PNG</p>
  946.                             </div>
  947.                         {% endif %}
  948.                         <div class="tab video" data-id="video">
  949.                             <div class="photos-block videos-block" id="video-block">
  950.                                 <div style="display:none" id="video_widget" data-video-on-progress="{{videos_in_process}}">{{ form_widget(form.videos) }}</div>
  951.                                 <template id="template_video_element">
  952.                                     <div class="attach__element attach__element--loading attach__element-video" data-media-rotater-element>
  953.                                         <video class="attach__element__video" data-video data-media-rotater-target  ></video>
  954.                                         {# <button class="btn attach__element__button attach__element__move" type="button" data-button-move>
  955.                                             <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m12 22-4-4h8l-4 4Zm0-20 4 4H8l4-4Zm0 12a2 2 0 1 1 0-4 2 2 0 0 1 0 4ZM2 12l4-4v8l-4-4Zm20 0-4 4V8l4 4Z" /></svg>
  956.                                         </button> #}
  957.                                         <button class="btn attach__element__button attach__element__remove" type="button" data-button-remove>
  958.                                             <svg class="icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m19.37 9-1 1.73-12.13-7 1-1.73 3.04 1.75 1.36-.37 4.33 2.5.37 1.37L19.37 9ZM5 19.09v-12h5.07l6.93 4v8a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2Zm2 0h8v-6.8l-5.54-3.2H7v10Z"/></svg>
  959.                                         </button>
  960.                                         <button class="attach__element__video__button" type="button" data-button-play>
  961.                                             <svg class="attach__element__video__play" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" fill="none"><g fill="#fff" fill-rule="evenodd" clip-rule="evenodd" opacity=".6"><path d="M32 7.332c-13.623 0-24.667 11.044-24.667 24.667 0 13.623 11.044 24.666 24.667 24.666 13.623 0 24.666-11.043 24.666-24.666C56.666 18.376 45.623 7.332 32 7.332ZM3.333 31.999C3.333 16.167 16.168 3.332 32 3.332s28.666 12.834 28.666 28.667c0 15.832-12.834 28.666-28.666 28.666S3.333 47.831 3.333 32Z"/><path d="M25.723 19.569a2 2 0 0 1 2.053.099l16 10.667a2 2 0 0 1 0 3.328l-16 10.667a2 2 0 0 1-3.109-1.665V21.332a2 2 0 0 1 1.056-1.763Zm2.944 5.5v13.86l10.394-6.93-10.394-6.93Z"/></g></svg>
  962.                                         </button>
  963.                                         <svg class="attach__element__progress" data-progress xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" width="64" height="64" fill="none">
  964.                                             <circle cx="32" cy="32" r="29" fill="#fff" opacity=".5"/>
  965.                                             <circle data-progress-animate cx="32" cy="32" r="27" stroke="#383838" stroke-linecap="round" stroke-linejoin="round" stroke-width="4" stroke-dasharray="169.65" stroke-dashoffset="169.65"/>
  966.                                             <text data-progress-value x="22" y="38" font-size="16" fill="#252525">0%</text>
  967.                                         </svg>
  968.                                     </div>
  969.                                 </template>
  970.                                 <div class="attach attach--empty" id="video_list">
  971.                                     {% if videos_in_process > 0 -%}
  972.                                         {% for i in 1..videos_in_process %}
  973.                                         <div class="attach__element__container">
  974.                                             <div class="attach__element attach__element-video">
  975.                                                 <div class="item item-processing">
  976.                                                     <svg viewBox="0 0 100 100" width="100" width="100" height="100" fill="none"><path fill="#000" fill-opacity=".3" fill-rule="evenodd" d="M25 10c-8.284 0-15 6.716-15 15v50c0 8.284 6.716 15 15 15h50c8.284 0 15-6.716 15-15V25c0-8.284-6.716-15-15-15H25Zm33 26c2.206 0 4 1.794 4 4v6.666L70 40v20l-8-6.666V60c0 2.206-1.794 4-4 4H34c-2.206 0-4-1.794-4-4V40c0-2.206 1.794-4 4-4h24Z" clip-rule="evenodd"/></svg>
  977.                                                 </div>
  978.                                             </div>
  979.                                         </div>
  980.                                         {% endfor %}
  981.                                     {% endif %}
  982.                                 </div>
  983.                                 <div class="attach__add">
  984.                                     <input
  985.                                         type="file"
  986.                                         class="visually_hidden"
  987.                                         id="profile-video-input"
  988.                                         multiple=""
  989.                                         style="position:absolute;left:-999999px"
  990.                                         accept=".mp4, .mov"
  991.                                         data-url="{{ video_media_upload_url }}"
  992.                                         data-type="video"
  993.                                     />
  994.                                     <label class="attach__add__label" for="profile-video-input">
  995.                                         <svg class="attach__add__icon" fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.94 11.11A7 7 0 0 0 12 5a6.74 6.74 0 0 0-6.24 4.15A5.25 5.25 0 0 0 2 14a5 5 0 0 0 5 5h11a4 4 0 0 0 .94-7.89ZM13 14v3h-2v-3H8l4-5 4 5h-3Z"/></svg>
  996.                                         <span>Загрузить видео</span>
  997.                                     </label>
  998.                                 </div>
  999.                             </div>
  1000.                             <p class="info">Загрузите видео. До 400 МБ. Mp4, Mov, HEVC</p>
  1001.                         </div>
  1002.                         <div class="tab verify-photo" data-id="verify-photo" id="approval_block">
  1003.                             <div style="display:none" id="approval_widget" data-status="{{ form.approval_status.vars.value }}">
  1004.                                 {% if form.uploaded_approval_photo.vars.data is not null %}
  1005.                                     <img id="uploaded_approval_photo" src="{{ responsive_asset(form.uploaded_approval_photo.vars.data, "profile_media_approval", "357x500", "jpg") }}" width="100" height="100"/><video id="uploaded_approval_photo" src="{{ asset(form.uploaded_approval_photo.vars.data, "profile_media_approval") }}" width="100" height="100"></video>
  1006.                                 {% endif %}
  1007.                                 <div class="form-error">{{ form_errors(form.approval_photo) }}</div>
  1008.                                 {{ form_widget(form.approval_photo, {'attr': {
  1009.                                     'class': 'custom-file-input',
  1010.                                     'data-type': "verify",
  1011.                                     'accept':"image/jpg,image/jpeg",
  1012.                                     'data-url':"{{ approval_media_upload_url }}",
  1013.                                     'style': "position:absolute;left:-999999px"
  1014.                                 }}) }}
  1015.                             </div>
  1016.                             {% set classVerify = form.approval_status.vars.value ? form.approval_status.vars.value : 'NO_ADD' %}
  1017.                             <div class="photos-verify-block d-flex" id="approval_list">
  1018.                                 <div class="status-block">
  1019.                                     <div class="photo">
  1020.                                         <div class="empty-image" id="approval_empty">
  1021.                                             <svg class="icon">
  1022.                                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-empty-girl"></use>
  1023.                                             </svg>
  1024.                                         </div>
  1025.                                         <div class="current-image d-none status_image_{{ classVerify }}" id="approval_image">
  1026.                                             <img class="main" src="" >
  1027.                                             {# <img class="icon rejected" src="{{ asset('assets/images/icons/alert.svg') }}">
  1028.                                             <img class="icon" src="{{ asset('assets/images/icons/alert-grey.svg') }}"> #}
  1029.                                         </div>
  1030.                                     </div>
  1031.                                     <div class="status attach__approval__{{ classVerify }}" data-t="{{form.approval_status.vars.value}}" id="approval_photo_text">
  1032.                                         <div class="status-info status-info-empty" id="status-info-empty">
  1033.                                             <p class="colored">Ваша анкета ещё НЕ подтверждена.</p>
  1034.                                             <p class="sub">Рекомендуем загрузить проверочное фото.</p>
  1035.                                         </div>
  1036.                                         <div class="status-info status-info-wait" id="status-info-wait">
  1037.                                             <p class="colored">Ожидает модерации</p>
  1038.                                             <p class="sub">Ваша проверочная фотография ожидает подтверждения от администрации сайта.</p>
  1039.                                             <p class="sub-2">Проверка может занять до двух дней.<br>Пожалуйста, подождите.</p>
  1040.                                         </div>
  1041.                                         <div class="status-info status-info-rejected" id="status-info-rejected">
  1042.                                             <p class="colored">Фото отклонено</p>
  1043.                                             <p class="sub">К сожалению, <strong>Ваша анкета НЕ подтверждена</strong>.</p>
  1044.                                             <p class="sub-2">Попробуйте отправить новое фото</p>
  1045.                                         </div>
  1046.                                         <div class="status-info status-info-approved" id="status-info-approved">
  1047.                                             <p class="colored d-flex">
  1048.                                                 <svg class="icon">
  1049.                                                     <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-approved"></use>
  1050.                                                 </svg>
  1051.                                                 <span>Подтверждено</span>
  1052.                                             </p>
  1053.                                             <p class="sub">Поздравляем, Ваша анкета подтверждена.</p>
  1054.                                         </div>
  1055.                                         <div class="status-info status-info-wait-second-attempt" id="status-info-wait-second-attempt">
  1056.                                             <p class="colored">Проверяется</p>
  1057.                                             <p class="sub">Вы обновили свои фотографии. Знак верификации временно снят до проверки модератором.</p>
  1058.                                             <p class="sub-2">Если Вы хотите изменить проверочное фото - загрузите его заново.</p>
  1059.                                         </div>
  1060.                                         <div class="add-block" id="status-info-add">
  1061.                                             <div class="add">
  1062.                                                 <input class="custom-file-input d-none"
  1063.                                                     type="file"
  1064.                                                     id="profile-verify-input"
  1065.                                                     data-type="verify"
  1066.                                                     accept="image/jpg,image/jpeg"
  1067.                                                     data-url="{{ approval_media_upload_url }}"
  1068.                                                 />
  1069.                                                 <label class="add-photo btn btn-secondary d-flex" for="profile-verify-input">
  1070.                                                     <svg class="icon">
  1071.                                                         <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-upload"></use>
  1072.                                                     </svg>
  1073.                                                     <span>Загрузить фото</span>
  1074.                                                 </label>
  1075.                                             </div>
  1076.                                         </div>
  1077.                                     </div>
  1078.                                 </div>
  1079.                                 <div class="description">
  1080.                                     <p class="heading">Что такое проверочное фото?</p>
  1081.                                     <p>Чтобы анкета была с отметкой "<span class="colored-green">фото проверено</span>" и показывалась выше непроверенных анкет, <strong>Вам необходимо добавить проверочную фотографию</strong>.</p>
  1082.                                     <p>Проверочная фотография - это фотография девушки из анкеты с листком бумаги, на котором от руки написана свежая дата.</p>
  1083.                                     <p class="colored-red">Фотошоп, плохое качество фотографии запрещены на проверочной фотографии.</p>
  1084.                                     <p>Если Вы добавите новые фотографии к уже проверенной анкете - отметка "фото проверено" пропадёт, и Вам нужно будет снова присылать проверочную фотографию.</p>
  1085.                                     <p>Если Вы удалите одну или несколько фотографий из уже проверенной анкеты - отметка "фото проверено" останется</p>
  1086.                                     <div class="sale">
  1087.                                         <div class="info-box d-flex justify-content-center">
  1088.                                             <svg class="icon icon-verify">
  1089.                                                 <use xlink:href="{{ asset('assets_domain/images/icons/account/svg-library.svg', 'nodomainConfig') }}#icon-approval-check"></use>
  1090.                                             </svg>
  1091.                                             <span class="info-box-center d-flex">
  1092.                                                 <span class="sale">10%</span>
  1093.                                                 <span class="text">скидка за <span class="marked">Проверенные анкеты</span></span>
  1094.                                             </span>
  1095.                                         </div>
  1096.                                     </div>
  1097.                                 </div>
  1098.                             </div>
  1099.                         </div>
  1100.                     </div>
  1101.                 </div>
  1102.             </div>
  1103.             <div class="submit-block">
  1104.                 {{ form_widget(form.submit, {
  1105.                     'label': editCheck ? 'Сохранить изменения' : 'Сохранить',
  1106.                     'attr': {
  1107.                         'class': 'btn btn-danger'
  1108.                     }}) }}
  1109.             </div>
  1110.             <div>
  1111.         {{ form_end(form) }}
  1112.     </div>
  1113.      <div
  1114.         class="dialog-container"
  1115.         id="upload-dialog-id"
  1116.         aria-labelledby="upload-dialog-title-id"
  1117.         aria-hidden="true"
  1118.         >
  1119.         <!-- 2. The dialog overlay -->
  1120.         <div class="dialog-overlay" data-a11y-dialog-hide></div>
  1121.         <!-- 3. The actual dialog -->
  1122.         <div class="dialog-content" role="document">
  1123.             <!-- 4. The close button -->
  1124.             <button class="dialog-button" type="button" data-a11y-dialog-hide aria-label="Close dialog">
  1125.             &times;
  1126.             </button>
  1127.             <!-- 5. The dialog title -->
  1128.             <div class="dialog-title" id="upload_dialog-title">upload title</div>
  1129.             <div class="dialog-body" id="upload_dialog-content">upload content</div>
  1130.             <!-- 6. Dialog content -->
  1131.         </div>
  1132.     </div>
  1133. {% endblock %}
  1134. {% block javascripts %}
  1135.     {{ parent() }}
  1136.     {{ encore_entry_script_tags('scripts/uploader', null, 'basicConfig') }}
  1137.     <script>
  1138.     //     function is_click_masseur(load = false) {
  1139.     //         const checkBox = document.getElementById("is_masseur");
  1140.     //         let group1 = document.querySelector('.group-1');
  1141.     //         let group2 = document.querySelector('.group-5');
  1142.     //         let group3 = document.querySelector('.group-6');
  1143.     //         let group4 = document.querySelector('.group-7');
  1144.     //         if (!load) {
  1145.     //             if (checkBox.checked == true){
  1146.     //                 group1.style.display = "block";
  1147.     //                 group2.style.display = "block";
  1148.     //                 group3.style.display = "block";
  1149.     //                 group4.style.display = "block";
  1150.     //             } else {
  1151.     //                 group1.style.display = "none";
  1152.     //                 group2.style.display = "none";
  1153.     //                 group3.style.display = "none";
  1154.     //                 group4.style.display = "none";
  1155.     //             }
  1156.     //         } else {
  1157.     //             if (checkBox.checked == true) {
  1158.     //                 group1.style.display = "none";
  1159.     //                 group2.style.display = "none";
  1160.     //                 group3.style.display = "none";
  1161.     //                 group4.style.display = "none";
  1162.     //             }
  1163.     //         }
  1164.     //     }
  1165.     //     is_click_masseur(true);
  1166.     </script>
  1167. {% endblock %}
  1168. {% block javascriptss %}
  1169.     {{ parent() }}
  1170.     <script src="https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/16.0.4/js/intlTelInput.min.js"
  1171.             integrity="sha256-Gf8PGNhkyd/4AuPWG7theaqc8hAvHzocloCkDN9pXFw="
  1172.             crossorigin="anonymous"></script>
  1173.     <script>
  1174.         var input = document.querySelector("#phone"),
  1175.             errorMsg = document.querySelector("#error-msg"),
  1176.             validMsg = document.querySelector("#valid-msg");
  1177.         // here, the index maps to the error code returned from getValidationError - see readme
  1178.         var errorMap = ["Invalid number", "Invalid country code", "Too short", "Too long", "Invalid number"];
  1179.         var input = document.querySelector("#phone");
  1180.         var iti = window.intlTelInput(input, {
  1181.             onlyCountries: ["al", "ad", "at", "by", "be", "ba", "bg", "hr", "cz", "dk",
  1182.                 "ee", "fo", "fi", "fr", "de", "gi", "gr", "va", "hu", "is", "ie", "it", "lv",
  1183.                 "li", "lt", "lu", "mk", "mt", "md", "mc", "me", "nl", "no", "pl", "pt", "ro",
  1184.                 "ru", "sm", "rs", "sk", "si", "es", "se", "ch", "ua", "gb"],
  1185.             geoIpLookup: function(callback) {
  1186.                 $.get('https://ipinfo.io', function() {}, "jsonp").always(function(resp) {
  1187.                     var countryCode = (resp && resp.country) ? resp.country : "";
  1188.                     callback(countryCode);
  1189.                 });
  1190.             },
  1191.             utilsScript: "https://cdnjs.cloudflare.com/ajax/libs/intl-tel-input/16.0.4/js/utils.js" // just for formatting/placeholders etc
  1192.         });
  1193.         var reset = function() {
  1194.             input.classList.remove("error");
  1195.             errorMsg.innerHTML = "";
  1196.             errorMsg.classList.add("hide");
  1197.             validMsg.classList.add("hide");
  1198.         };
  1199.         // on blur: validate
  1200.         input.addEventListener('blur', function() {
  1201.             reset();
  1202.             if (input.value.trim()) {
  1203.                 if (iti.isValidNumber()) {
  1204.                     validMsg.classList.remove("hide");
  1205.                 } else {
  1206.                     input.classList.add("error");
  1207.                     var errorCode = iti.getValidationError();
  1208.                     errorMsg.innerHTML = errorMap[errorCode];
  1209.                     errorMsg.classList.remove("hide");
  1210.                 }
  1211.             }
  1212.         });
  1213.         // on keyup / change flag: reset
  1214.         input.addEventListener('change', reset);
  1215.         input.addEventListener('keyup', reset);
  1216.         //-----------
  1217.         document.addEventListener("DOMContentLoaded", function(event) {
  1218.             document.querySelector('.selector-menu .menu').fakeScroll();
  1219.         });
  1220.     </script>
  1221. {% endblock %}