for ($i = 0; $i < count($mess['answers']); $i++) { $ok = !isset($request['question']); for ($j = 0; $j < count($exists); $j++) { if (!empty($exists[$mess['answers'][$i]['id']])) { $ok = TRUE; break; } } if ($ok) { $answers[] = array('id' => $mess['answers'][$i]['id'], 'answer' => $exists[$mess['answers'][$i]['id']] ? __htmlchars($exists[$mess['answers'][$i]['id']]) : $mess['answers'][$i]['answer']); } } } if (isset($request['answers']) && is_array($request['answers'])) { foreach ($request['answers'] as $answer) { $answers[] = array('id' => 0, 'answer' => __htmlchars($answer)); } } if (!$answers) { $answers[] = array('id' => 0, 'answer' => ''); } $h = $site == 'Topic' ? 'H1' : 'H2'; $header = !$message_id ? $site == 'Topic' ? 'Комментировать' : 'Создать новое сообщение' : 'Редактировать'; $button = !$message_id ? $site == 'Topic' ? 'Комментировать' : 'Создать' : 'Сохранить'; $tah = $site == 'Topic' ? '150' : '200'; $action = str_replace('do.', '', $action); $anchor = ''; if ($site != 'Topic') { if ($alert) { $anchor = $action == 'Edit.post' ? 'o' . ($message_id ? $message_id : $parent_id) : 'o'; } else {
/** * Рисует форму для создания/редактирования комментария. * * Пользователь создает комментарий. * 1. Вызывается данная форма с пустыми полями, подставляется под сообщение, * которое комментируется. При этом удаляется со страницы ранее вызванная форма, * если таковая была. * 2. Пользователь заполняет поля, вызывается POST. POST несет: * - id (ид. сообщества); * - action = do.Create.post; * - top_id; * - parent_id; * - om (закладка); * - title; * - msgtext; * - file; * Остальные поля NULL. * * 3. POST-запрос обрабатывается и: * - в случае успеха выдает текущую страницу (страницу с текущей темой), * движок прыгает на новый комментарий. * - в случае неудачи, обработчик возвращает объект $request (почти тот же $_POST, * только малость измененный) и $alert. Страница проверяет наличие $request и если * он не NULL и $request['message_id'] совпадает id текущего комментария, то * выводит данную форму под этим комментарием, заполняя ее данными из $request * и выдает ошибки через $alert. * Пользователь редактирует комментарий. * 1. AJAX-ом вызывается данная форма, $action='Edit.post'. Форма заполняется атрибутами редактируемого сообщения, * взятыми AJAX-ом из базы. * 2. Пользователь заполняет поля, вызывается POST. POST несет все параметры, action = do.Edit.post; * * @param integer $id ид. сообщества. * @param integer $om для поддержания параметров навигации. * @param integer $page страница * @param string $action тип операции при субмите. * @param integer $top_id ид. топа (не темы, а корневого сообщения в теме). Используется только когда $site=='Topic'. * @param integer $message_id если указан, значит это сообщение редактируется. * @param integer $parent_id комментируем данное сообщение (создаем новое). * @param string $request возвращается при ошибке при совершении операции. * @param string $alert ошибки операции. * @param string $site режим вывода. * @param integer $mod админ, модер и т.д. * @return string */ function __commPrntCommentForm($id, $om, $page = NULL, $action = NULL, $top_id = NULL, $message_id = NULL, $parent_id = NULL, $request = NULL, $alert = NULL, $site = NULL, $mod = NULL, $cat = 0, $draft_id = 0) { if (!$action) { $action = 'Create.post'; } $title = ''; $msgtext = ''; $attach = ''; $youtube_link = ''; $user_login = ''; // Чтобы в него загрузить картинку. $pos = NULL; $close_comments = NULL; $is_private = NULL; $category = 0; $mess = commune::GetMessage(intval($message_id)); if ($request) { // do... $parent_id = $request['parent_id']; $title = __htmlchars($request['title']); $category_id = $request['category_id']; $msgtext = __htmlchars($request['msgtext']); $attach = $request['attach']; $youtube_link = $request['youtube_link']; $user_login = $request['user_login']; $pos = $request['pos']; $close_comments = $request['close_comments'] ? true : false; $is_private = $request['is_private'] ? true : false; $question = __htmlchars($request['question']); $multiple = $request['multiple']; } else { if ($action == 'Edit.post') { // Edit.post if ($mess) { $parent_id = $mess['parent_id']; $title = $mess['title']; $category_id = $mess['category_id']; $msgtext = htmlspecialchars($mess['msgtext']); $attach = $mess['attach']; $youtube_link = $mess['youtube_link']; $user_login = $mess['user_login']; $pos = $mess['pos']; $close_comments = $mess['close_comments'] == 't' ? true : false; $is_private = $mess['is_private'] == 't' ? true : false; $question = $mess['question']; $multiple = $mess['multiple'] == 't' ? 1 : 0; } } } $answers = array(); $exists = isset($request['answers_exists']) && is_array($request['answers_exists']) ? $request['answers_exists'] : array(); if ($mess['question'] != '') { for ($i = 0; $i < count($mess['answers']); $i++) { $ok = !isset($request['question']); for ($j = 0; $j < count($exists); $j++) { if (!empty($exists[$mess['answers'][$i]['id']])) { $ok = TRUE; break; } } if ($ok) { $answers[] = array('id' => $mess['answers'][$i]['id'], 'answer' => $exists[$mess['answers'][$i]['id']] ? __htmlchars($exists[$mess['answers'][$i]['id']]) : $mess['answers'][$i]['answer']); } } } if (isset($request['answers']) && is_array($request['answers'])) { foreach ($request['answers'] as $answer) { $answers[] = array('id' => 0, 'answer' => __htmlchars($answer)); } } if (!$answers) { $answers[] = array('id' => 0, 'answer' => ''); } $h = $site == 'Topic' ? 'H1' : 'H2'; $header = !$message_id ? $site == 'Topic' ? 'Комментировать' : 'Создать новое сообщение' : 'Редактировать'; $button = !$message_id ? $site == 'Topic' ? 'Комментировать' : 'Создать' : 'Сохранить'; $tah = $site == 'Topic' ? '150' : '200'; $action = str_replace('do.', '', $action); $anchor = ''; if ($site != 'Topic') { if ($alert) { $anchor = $action == 'Edit.post' ? 'o' . ($message_id ? $message_id : $parent_id) : 'o'; } else { $anchor = 'bottom'; } } else { if ($alert) { $anchor = 'op'; } } $pt = $site == 'Topic' ? '25' : '0'; $pb = $site == 'Topic' ? '25' : '0'; $iid = mt_rand(1, 50000); $sub_cat = commune::getCategories($id, true); ob_start(); include TPL_COMMUNE_PATH . '/tpl.comment_form_new.php'; $str = ob_get_contents(); ob_end_clean(); return $str; }