/** * Проверка данных из формы. */ function tu_validation(&$tservice, $is_exist_feedbacks = 0) { require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/city.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/tservices_categories.php'; require_once $_SERVER['DOCUMENT_ROOT'] . '/classes/tservices/validation.php'; $errors = array(); $validator = new validation(); $tservices_categories = new tservices_categories(); //--- //$tservice->title = trim(htmlspecialchars(InPost('title'),ENT_QUOTES,'cp1251')); //$tservice->title = antispam(__paramInit('string', NULL, 'name', NULL, 60, TRUE)); $tservice->title = sentence_case(__paramInit('html', null, 'title', null, 100, true)); $title = trim(stripslashes(InPost('title'))); if (!$validator->required($title)) { $errors['title'] = validation::VALIDATION_MSG_REQUIRED; } elseif (!$validator->symbols_interval($title, 4, 100)) { $errors['title'] = sprintf(validation::VALIDATION_MSG_SYMBOLS_INTERVAL, 4, 100); } //--- $tservice->price = intval(trim(InPost('price'))); if (!$validator->is_natural_no_zero($tservice->price)) { $errors['price'] = validation::VALIDATION_MSG_REQUIRED_PRICE; } elseif (!$validator->greater_than_equal_to($tservice->price, 300)) { $errors['price'] = sprintf(validation::VALIDATION_MSG_PRICE_GREATER_THAN_EQUAL_TO, '300 р.'); } elseif (!$validator->less_than_equal_to($tservice->price, 999999)) { $errors['price'] = sprintf(validation::VALIDATION_MSG_PRICE_LESS_THAN_EQUAL_TO, '999 999 р.'); } //--- $days_db_id = intval(trim(InPost('days_db_id'))); if (!$validator->is_natural_no_zero($days_db_id) || !in_array($days_db_id, array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 21, 30, 45, 60, 90))) { $errors['days'] = validation::VALIDATION_MSG_FROM_LIST; $days_db_id = 1; } $tservice->days = $days_db_id; //--- //Если есть отзывы то не даем изменить категорию if (!(InPost('action') == 'save' && $is_exist_feedbacks > 0)) { $category_id = intval(trim(InPost('category_db_id'))); $parent_category_id = $tservices_categories->getCategoryParentId($category_id); if ($parent_category_id === false) { $errors['category'] = validation::VALIDATION_MSG_CATEGORY_FROM_LIST; } else { $tservice->category_id = $category_id; //$this->property()->parent_category_id = $parent_category_id; } } //--- $str_tags = trim(preg_replace('/\\s+/s', ' ', strip_tags(InPost('tags')))); $tags = strlen($str_tags) > 0 ? array_unique(array_map('trim', explode(',', $str_tags))) : array(); $tags = array_filter($tags, function ($el) { $len = strlen(stripslashes($el)); return $len < 80 && $len > 2; }); $tags_cnt = count(array_unique(array_map('strtolower', $tags))); $tags = array_map(function ($value) { return htmlspecialchars($value, ENT_QUOTES, 'cp1251'); }, $tags); $tservice->tags = $tags; if (!$validator->required($str_tags)) { $errors['tags'] = validation::VALIDATION_MSG_REQUIRED; } elseif ($tags_cnt > 10) { $errors['tags'] = sprintf(validation::VALIDATION_MSG_MAX_TAGS, 10); } //--- $videos = __paramInit('array', null, 'videos', array()); $videos = is_array($videos) ? array_values($videos) : array(); if (count($videos)) { $tservice->videos = null; foreach ($videos as $key => $video) { if ($validator->required($video)) { $_video_data = array('url' => $video, 'video' => false, 'image' => false); //$_video = $validator->video_validate($video); $_video = $validator->video_validate($video); $is_error = true; if ($_video) { $_video_data['url'] = $_video; if ($_video_meta = $validator->video_validate_with_thumbs($_video, 0)) { $_video_data = array_merge($_video_data, $_video_meta); $is_error = false; } } if ($is_error) { $errors['videos'][$key] = validation::VALIDATION_MSG_BAD_LINK; } $tservice->videos[$key] = $_video_data; } } } //--- //$tservice->description = trim(htmlspecialchars(InPost('description'),ENT_QUOTES, "cp1251")); //$description = trim(InPost('description')); $tservice->description = trim(__paramInit('html', null, 'description', null, 5000, true)); $description = trim(stripslashes(InPost('description'))); if (!$validator->required($description)) { $errors['description'] = validation::VALIDATION_MSG_REQUIRED; } elseif (!$validator->symbols_interval($description, 4, 5000)) { $errors['description'] = sprintf(validation::VALIDATION_MSG_SYMBOLS_INTERVAL, 4, 5000); } //--- //$tservice->requirement = trim(htmlspecialchars(InPost('requirement'),ENT_QUOTES, "cp1251")); //$requirement = trim(InPost('requirement')); $tservice->requirement = trim(__paramInit('html', null, 'requirement', null, 5000, true)); $requirement = trim(stripslashes(InPost('requirement'))); if (!$validator->required($requirement)) { $errors['requirement'] = validation::VALIDATION_MSG_REQUIRED; } elseif (!$validator->symbols_interval($requirement, 4, 5000)) { $errors['requirement'] = sprintf(validation::VALIDATION_MSG_SYMBOLS_INTERVAL, 4, 5000); } //--- $extra = __paramInit('array', null, 'extra', array()); $extra = is_array($extra) ? array_values($extra) : array(); $total_extra_price = 0; if (count($extra)) { $key = 0; $tservice->extra = null; foreach ($extra as $el) { if (isset($el['title'], $el['price'], $el['days_db_id'])) { $el['title'] = stripslashes($el['title']); $title = trim(htmlspecialchars($el['title'], ENT_QUOTES, 'cp1251')); $title_native = trim($el['title']); $price = trim($el['price']); if (!$validator->required($title_native) && !$validator->required($price)) { continue; } $is_title = $validator->min_length($title_native, 4) && $validator->max_length($title_native, 255); $is_price = $validator->is_integer_no_zero($price) && $validator->numeric_interval($price, -999999, 999999); if (!$is_price) { $errors['extra'][$key]['price'] = validation::VALIDATION_MSG_REQUIRED_PRICE; } if (!$is_title) { $errors['extra'][$key]['title'] = sprintf(validation::VALIDATION_MSG_SYMBOLS_INTERVAL, 4, 255); } $days = trim($el['days_db_id']); $is_days = $validator->is_natural($days) && $validator->less_than_equal_to($days, 5); if (!$is_days) { $errors['extra'][$key]['days'] = sprintf(validation::VALIDATION_MSG_INTERVAL, '0', '5 дней'); $days = 1; } $price = intval($price); $days = intval($days); $tservice->extra[$key] = array('title' => $title, 'price' => $price, 'days' => $days); ++$key; if ($price < 0) { $total_extra_price += $price; } } } } //--- $tservice->is_express = 'f'; $tservice->express_price = 0; $tservice->express_days = 1; if (InPost('express_activate') == 1 && $tservice->days > 1) { $express = InPost('express'); $price = trim($express['price']); if (!$validator->is_natural_no_zero($price) || !$validator->less_than_equal_to($price, 999999)) { $errors['express']['price'] = validation::VALIDATION_MSG_REQUIRED_PRICE; } $days_db_id = intval(trim($express['days_db_id'])); if (!$validator->is_natural_no_zero($days_db_id) || !in_array($days_db_id, array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14, 21, 30, 45, 60, 90))) { $errors['express']['days'] = validation::VALIDATION_MSG_FROM_LIST; $days_db_id = 1; } $tservice->is_express = 't'; $tservice->express_price = intval($price); $tservice->express_days = $days_db_id; } //--- //Проверка общей суммы с учетом скидок, опций (срочность не учитываю так как она выбирается по желанию) if (!isset($errors['price']) && !$validator->greater_than_equal_to($tservice->price + $total_extra_price, 300)) { $errors['price'] = sprintf(validation::VALIDATION_MSG_PRICE_MIN_TOTAL, '300 р.'); } //--- //TODO: Есть проблема с контроллом выпадающего списка // он не отрабатывает новое значение укзанное по умолчанию if (!in_array(intval(InPost('distance')), array(1, 2))) { $errors['distance'] = validation::VALIDATION_MSG_FROM_RADIO; } elseif (intval(InPost('distance')) == 2) { $city_db_id = intval(InPost('city_db_id')); $city = new city(); if ($city_db_id <= 0 || !$city->getCityName($city_db_id)) { $errors['distance'] = validation::VALIDATION_MSG_CITY_FROM_LIST; } else { $tservice->city = intval(InPost('city_db_id')); $tservice->is_meet = 't'; } } else { $tservice->is_meet = 'f'; } //--- $tservice->agree = InPost('agree') == 1 ? 't' : 'f'; if ($tservice->agree === 'f') { $errors['agree'] = validation::VALIDATION_MSG_ONE_REQUIRED; } //--- if (in_array(InPost('active'), array(0, 1))) { $tservice->active = intval(InPost('active')) == 1 ? 't' : 'f'; if ($tservice->is_angry) { $tservice->active = 't'; } } //--- //Вырезаем слеши если ошибка if (count($errors) > 0) { $attrs = array('title', 'description', 'requirement', 'tags'); foreach ($attrs as $attr) { if (is_array($tservice->{$attr})) { foreach ($tservice->{$attr} as &$value) { $value = stripslashes($value); } } else { $tservice->{$attr} = stripslashes($tservice->{$attr}); } } } return $errors; }
/** * Редактирование стоимости и сроков заказа ТУ * * @param type $order_id * @param type $price * @param type $days * * @return \xajaxResponse */ function tservicesOrdersSetPrice($order_id, $price, $days, $paytype) { $objResponse =& new xajaxResponse(); $uid = get_uid(false); $price = intval($price); $days = intval($days); $paytype = intval($paytype); //Валидация входных параметров $validator = new validation(); $valid = $validator->is_natural_no_zero($price) && $validator->greater_than_equal_to($price, 300); $valid = $valid && $validator->is_natural_no_zero($days) && $validator->numeric_interval($days, 1, 730); $valid = $valid && in_array($valid, array(TServiceOrderModel::PAYTYPE_DEFAULT, TServiceOrderModel::PAYTYPE_RESERVE)); if (!$valid) { return $objResponse; } //Получение заказа $orderModel = TServiceOrderModel::model(); $order_id = intval($order_id); $old_order = $orderModel->getCard($order_id, $uid); if (!$old_order) { return $objResponse; } //Валидация возможности изменений $is_new_status = $old_order['status'] == TServiceOrderModel::STATUS_NEW; $is_owner = $old_order['emp_id'] == $uid; $is_reserve_accepted = isset($old_order['reserve_data']); if (!($is_new_status && $is_owner && !$is_reserve_accepted)) { return $objResponse; } //Проверка возможности смены типа оплаты $is_reserve = tservices_helper::isOrderReserve($paytype); if ($is_reserve && !tservices_helper::isAllowOrderReserve($old_order['category_id'])) { return $objResponse; } if (!$is_reserve) { $paytype = TServiceOrderModel::PAYTYPE_DEFAULT; } $data = array('order_price' => $price, 'order_days' => $days, 'pay_type' => $paytype); //Меняем if ($orderModel->edit($order_id, $data, $old_order['tax'])) { $order = $old_order; $order['order_price'] = $price; $order['order_days'] = $days; $order['pay_type'] = $paytype; //Сохранить действие в историю $history = new tservices_order_history($order_id); $history->save($order, $old_order); //Уведомление на почту $tservices_smail = new tservices_smail(); $tservices_smail->changeOrder2($order, $old_order); //Обновляем интерфейс цен и сроков $objResponse->script("\$('tu-container-price').set('html', '" . tservices_helper::cost_format($price) . "');"); $objResponse->script("\$('tu-container-days').set('html', '" . tservices_helper::days_format($days) . "');"); $objResponse->script("\$('tu_edit_budjet_price').set('value', '" . $price . "');"); $objResponse->script("\$('tu_edit_budjet_days').set('value', '" . $days . "');"); //Обновляем сообщение статуса, т.к. вторая сторона тоже могла его изменить $tserviceOrderStatusWidget = new TServiceOrderStatus(); $tserviceOrderStatusWidget->setIsEmp(true); $tserviceOrderStatusWidget->setOrder($order); $tserviceOrderStatusWidget->init(); ob_start(); $tserviceOrderStatusWidget->run(); $statusHtml = ob_get_contents(); ob_end_clean(); $objResponse->assign('tservices_order_status_' . $order_id, 'innerHTML', $statusHtml); $objResponse->script("\n \$('tu-container-price').getParent()\n .removeClass('b-layout__link_bordbot_dot_" . ($is_reserve ? '000' : 'ee1d16') . "')\n .addClass('b-layout__link_bordbot_dot_" . ($is_reserve ? 'ee1d16' : '000') . "');\n \$('tu-container-price').getPrevious('span').set('html','" . ($is_reserve ? 'Бюджет:' : 'Стоимость:') . "'); \n "); } return $objResponse; }