function qa_page_q_edit_q_submit($question, $answers, $commentsfollows, $closepost, &$in, &$errors)
{
    $in = array();
    if ($question['editable']) {
        $in['title'] = qa_post_text('q_title');
        qa_get_post_content('q_editor', 'q_content', $in['editor'], $in['content'], $in['format'], $in['text']);
        $in['extra'] = qa_opt('extra_field_active') ? qa_post_text('q_extra') : null;
    }
    if ($question['retagcatable']) {
        if (qa_using_tags()) {
            $in['tags'] = qa_get_tags_field_value('q_tags');
        }
        if (qa_using_categories()) {
            $in['categoryid'] = qa_get_category_field_value('q_category');
        }
    }
    if (array_key_exists('categoryid', $in)) {
        // need to check if we can move it to that category, and if we need moderation
        $categories = qa_db_select_with_pending(qa_db_category_nav_selectspec($in['categoryid'], true));
        $categoryids = array_keys(qa_category_path($categories, $in['categoryid']));
        $userlevel = qa_user_level_for_categories($categoryids);
    } else {
        $userlevel = null;
    }
    if ($question['isbyuser']) {
        $in['name'] = qa_post_text('q_name');
        $in['notify'] = qa_post_text('q_notify') ? true : false;
        $in['email'] = qa_post_text('q_email');
    }
    if (!qa_user_post_permit_error('permit_edit_silent', $question)) {
        $in['silent'] = qa_post_text('q_silent');
    }
    // here the $in array only contains values for parts of the form that were displayed, so those are only ones checked by filters
    $errors = array();
    if (!qa_check_form_security_code('edit-' . $question['postid'], qa_post_text('code'))) {
        $errors['page'] = qa_lang_html('misc/form_security_again');
    } else {
        $in['queued'] = qa_opt('moderate_edited_again') && qa_user_moderation_reason($userlevel);
        $filtermodules = qa_load_modules_with('filter', 'filter_question');
        foreach ($filtermodules as $filtermodule) {
            $oldin = $in;
            $filtermodule->filter_question($in, $errors, $question);
            if ($question['editable']) {
                qa_update_post_text($in, $oldin);
            }
        }
        if (array_key_exists('categoryid', $in) && strcmp($in['categoryid'], $question['categoryid'])) {
            if (qa_user_permit_error('permit_post_q', null, $userlevel)) {
                $errors['categoryid'] = qa_lang_html('question/category_ask_not_allowed');
            }
        }
        if (empty($errors)) {
            $userid = qa_get_logged_in_userid();
            $handle = qa_get_logged_in_handle();
            $cookieid = qa_cookie_get();
            // now we fill in the missing values in the $in array, so that we have everything we need for qa_question_set_content()
            // we do things in this way to avoid any risk of a validation failure on elements the user can't see (e.g. due to admin setting changes)
            if (!$question['editable']) {
                $in['title'] = $question['title'];
                $in['content'] = $question['content'];
                $in['format'] = $question['format'];
                $in['text'] = qa_viewer_text($in['content'], $in['format']);
                $in['extra'] = $question['extra'];
            }
            if (!isset($in['tags'])) {
                $in['tags'] = qa_tagstring_to_tags($question['tags']);
            }
            if (!array_key_exists('categoryid', $in)) {
                $in['categoryid'] = $question['categoryid'];
            }
            if (!isset($in['silent'])) {
                $in['silent'] = false;
            }
            $setnotify = $question['isbyuser'] ? qa_combine_notify_email($question['userid'], $in['notify'], $in['email']) : $question['notify'];
            qa_question_set_content($question, $in['title'], $in['content'], $in['format'], $in['text'], qa_tags_to_tagstring($in['tags']), $setnotify, $userid, $handle, $cookieid, $in['extra'], @$in['name'], $in['queued'], $in['silent']);
            if (qa_using_categories() && strcmp($in['categoryid'], $question['categoryid'])) {
                qa_question_set_category($question, $in['categoryid'], $userid, $handle, $cookieid, $answers, $commentsfollows, $closepost, $in['silent']);
            }
            return true;
        }
    }
    return false;
}
function qa_page_q_edit_q_submit($question, $answers, $commentsfollows, $closepost, &$in, &$errors)
{
    $in = array();
    if ($question['editable']) {
        $in['title'] = qa_post_text('q_title');
        qa_get_post_content('q_editor', 'q_content', $in['editor'], $in['content'], $in['format'], $in['text']);
        $in['extra'] = qa_opt('extra_field_active') ? qa_post_text('q_extra') : null;
    }
    if ($question['retagcatable']) {
        if (qa_using_tags()) {
            $in['tags'] = qa_get_tags_field_value('q_tags');
        }
        if (qa_using_categories()) {
            $in['categoryid'] = qa_get_category_field_value('q_category');
        }
    }
    if ($question['isbyuser']) {
        $in['notify'] = qa_post_text('q_notify') ? true : false;
        $in['email'] = qa_post_text('q_email');
    }
    // here the $in array only contains values for parts of the form that were displayed, so those are only ones checked by filters
    $errors = array();
    $filtermodules = qa_load_modules_with('filter', 'filter_question');
    foreach ($filtermodules as $filtermodule) {
        $oldin = $in;
        $filtermodule->filter_question($in, $errors, $question);
        if ($question['editable']) {
            qa_update_post_text($in, $oldin);
        }
    }
    if (empty($errors)) {
        $userid = qa_get_logged_in_userid();
        $handle = qa_get_logged_in_handle();
        $cookieid = qa_cookie_get();
        // now we fill in the missing values in the $in array, so that we have everything we need for qa_question_set_content()
        // we do things in this way to avoid any risk of a validation failure on elements the user can't see (e.g. due to admin setting changes)
        if (!$question['editable']) {
            $in['title'] = $question['title'];
            $in['content'] = $question['content'];
            $in['format'] = $question['format'];
            $in['text'] = qa_viewer_text($in['content'], $in['format']);
            $in['extra'] = $question['extra'];
        }
        if (!isset($in['tags'])) {
            $in['tags'] = qa_tagstring_to_tags($question['tags']);
        }
        if (!array_key_exists('categoryid', $in)) {
            $in['categoryid'] = $question['categoryid'];
        }
        $setnotify = $question['isbyuser'] ? qa_combine_notify_email($question['userid'], $in['notify'], $in['email']) : $question['notify'];
        qa_question_set_content($question, $in['title'], $in['content'], $in['format'], $in['text'], qa_tags_to_tagstring($in['tags']), $setnotify, $userid, $handle, $cookieid, $in['extra']);
        if (qa_using_categories() && strcmp($in['categoryid'], $question['categoryid'])) {
            qa_question_set_category($question, $in['categoryid'], $userid, $handle, $cookieid, $answers, $commentsfollows, $closepost);
        }
        return true;
    }
    return false;
}
Пример #3
0
function qa_post_set_content($postid, $title, $content, $format = null, $tags = null, $notify = null, $email = null, $byuserid = null, $extravalue = null)
{
    $oldpost = qa_post_get_full($postid, 'QAC');
    if (!isset($title)) {
        $title = $oldpost['title'];
    }
    if (!isset($content)) {
        $content = $oldpost['content'];
    }
    if (!isset($format)) {
        $format = $oldpost['format'];
    }
    if (!isset($tags)) {
        $tags = qa_tagstring_to_tags($oldpost['tags']);
    }
    if (isset($notify) || isset($email)) {
        $setnotify = qa_combine_notify_email($oldpost['userid'], isset($notify) ? $notify : isset($oldpost['notify']), isset($email) ? $email : $oldpost['notify']);
    } else {
        $setnotify = $oldpost['notify'];
    }
    $byhandle = qa_post_userid_to_handle($byuserid);
    $text = qa_post_content_to_text($content, $format);
    switch ($oldpost['basetype']) {
        case 'Q':
            $tagstring = qa_post_tags_to_tagstring($tags);
            qa_question_set_content($oldpost, $title, $content, $format, $text, $tagstring, $setnotify, $byuserid, $byhandle, null, $extravalue);
            break;
        case 'A':
            $question = qa_post_get_full($oldpost['parentid'], 'Q');
            qa_answer_set_content($oldpost, $content, $format, $text, $setnotify, $byuserid, $byhandle, null, $question);
            break;
        case 'C':
            $parent = qa_post_get_full($oldpost['parentid'], 'QA');
            $question = qa_post_parent_to_question($parent);
            qa_comment_set_content($oldpost, $content, $format, $text, $setnotify, $byuserid, $byhandle, null, $question, $parent);
            break;
    }
}
     qa_redirect($qa_request, array('state' => 'edit-' . $questionid));
 } elseif (qa_clicked('dosaveq') && qa_page_q_permit_edit($question, 'permit_edit_q')) {
     $incategoryid = qa_get_category_field_value('category');
     $inqtitle = qa_post_text('qtitle');
     $inqtags = qa_get_tags_field_value('qtags');
     $tagstring = qa_using_tags() ? qa_tags_to_tagstring($inqtags) : $question['tags'];
     qa_get_post_content('editor', 'qcontent', $ineditor, $inqcontent, $inqformat, $inqtext);
     $innotify = qa_post_text('notify') ? true : false;
     $inemail = qa_post_text('email');
     $qerrors = qa_question_validate($inqtitle, $inqcontent, $inqformat, $inqtext, $tagstring, $innotify, $inemail);
     if (empty($qerrors)) {
         $setnotify = $question['isbyuser'] ? qa_combine_notify_email($question['userid'], $innotify, $inemail) : $question['notify'];
         if (qa_using_categories() && strcmp($incategoryid, $question['categoryid'])) {
             qa_question_set_category($question, $incategoryid, $qa_login_userid, qa_get_logged_in_handle(), $qa_cookieid, $answers, $commentsfollows);
         }
         qa_question_set_content($question, $inqtitle, $inqcontent, $inqformat, $inqtext, $tagstring, $setnotify, $qa_login_userid, qa_get_logged_in_handle(), $qa_cookieid);
         qa_report_write_action($qa_login_userid, $qa_cookieid, 'q_edit', $questionid, null, null);
         if (qa_q_request($questionid, $question['title']) != qa_q_request($questionid, $inqtitle)) {
             qa_redirect(qa_q_request($questionid, $inqtitle));
         } else {
             qa_redirect($qa_request);
         }
     } else {
         $formtype = 'q_edit';
     }
     // keep editing if an error
 } else {
     if ($qa_state == 'edit-' . $questionid && qa_page_q_permit_edit($question, 'permit_edit_q')) {
         $formtype = 'q_edit';
     }
 }