Как проверить даты бронирования с ранее заполненными?

Аватар пользователя fgvlasov fgvlasov 22 ноября 2016 в 21:45

Здравствуйте, уважаемые, друпалеры. Встрял с одной интересной задачкой:
Сделал форму бронирования коттеджа, вернее это форма создания ноды для типа материала Бронь, выведенная в блок на сайте.
Там надо заполнить даты бронирования. Стоит требование вводить только ранее не занятые даты...

Поставил модуль Field_validation, не пойму как в нем это сделать.
По идее можно сделать через функцию валидации в своем модуле, но для этого надо запрос к базе данных писать видимо в коде модуля, что сложновато, была мысль сделать views с вытаскиванием ранее заполненных интервалов бронирования и подсмотреть в нем код sql запроса.

Проверка там такая, что не должен совпадать ни один день в новом интервале с ранее заполненными.

Подскажите, каким путем двигаться и может какие подсказки дадите?

Лучший ответ

Аватар пользователя fgvlasov fgvlasov 23 ноября 2016 в 11:08

честно говоря пробовал модуль Rooms, уж очень оказался тяжеловесным для маленького регионального сайта с 6 вариантами размещения. Я все такие пошел путем создания модуля, в котором делаю валидацию формы перед отправкой.
Помогла статья: https://www.drupal.org/node/1302694
Зато познакомился с построением запросов в Базу данных с помощью DataBase API Drupal 7
http://php-include.ru/stati/database-api-drupal-7rabota-s-bazoi-dannykh-...

вот пример моей проверки вводимых дат:

foreach ($q as $value) {
        $dateStart = $value->field_date_bron_value;
        $dateEnd = $value->field_date_bron_value2;
        $dateEnterStart = $form_state['values']['field_date_bron']['und']['0']['value'];
        $dateEnterEnd = $form_state['values']['field_date_bron']['und']['0']['value2'];
        if($dateEnterEnd > $dateStart AND $dateEnterEnd < $dateEnd
        OR $dateEnterStart < $dateStart AND $dateEnterEnd > $dateEnd
        OR $dateEnterStart > $dateStart AND $dateEnterStart < $dateEnd
        OR $dateEnterStart > $dateStart AND $dateEnterEnd < $dateEnd ){
                form_set_error('field_date_bron', t('Выберите незанятые даты!'));
        }
}

Загадка: найдите лишнюю проверку из четырех Lol

Комментарии

Аватар пользователя fgvlasov fgvlasov 23 ноября 2016 в 11:08

честно говоря пробовал модуль Rooms, уж очень оказался тяжеловесным для маленького регионального сайта с 6 вариантами размещения. Я все такие пошел путем создания модуля, в котором делаю валидацию формы перед отправкой.
Помогла статья: https://www.drupal.org/node/1302694
Зато познакомился с построением запросов в Базу данных с помощью DataBase API Drupal 7
http://php-include.ru/stati/database-api-drupal-7rabota-s-bazoi-dannykh-...

вот пример моей проверки вводимых дат:

foreach ($q as $value) {
        $dateStart = $value->field_date_bron_value;
        $dateEnd = $value->field_date_bron_value2;
        $dateEnterStart = $form_state['values']['field_date_bron']['und']['0']['value'];
        $dateEnterEnd = $form_state['values']['field_date_bron']['und']['0']['value2'];
        if($dateEnterEnd > $dateStart AND $dateEnterEnd < $dateEnd
        OR $dateEnterStart < $dateStart AND $dateEnterEnd > $dateEnd
        OR $dateEnterStart > $dateStart AND $dateEnterStart < $dateEnd
        OR $dateEnterStart > $dateStart AND $dateEnterEnd < $dateEnd ){
                form_set_error('field_date_bron', t('Выберите незанятые даты!'));
        }
}

Загадка: найдите лишнюю проверку из четырех Lol