Example #1
0
     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 {
Example #2
0
/**
 * Рисует форму для создания/редактирования комментария.
 *
 * Пользователь создает комментарий.
 * 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;
}