function qa_page_q_post_rules($post, $parentpost = null, $siblingposts = null, $childposts = null) { $rules = qa_page_q_post_rules_base($post, $parentpost, $siblingposts, $childposts); qa_db_query_sub('CREATE TABLE IF NOT EXISTS ^postmeta ( meta_id bigint(20) unsigned NOT NULL AUTO_INCREMENT, post_id bigint(20) unsigned NOT NULL, meta_key varchar(255) DEFAULT \'\', meta_value longtext, PRIMARY KEY (meta_id), KEY post_id (post_id), KEY meta_key (meta_key) ) ENGINE=MyISAM DEFAULT CHARSET=utf8'); $expert = qa_db_read_one_value(qa_db_query_sub("SELECT meta_value FROM ^postmeta WHERE meta_key='is_expert_question' AND post_id=#", $post['postid']), true); if ($expert) { if (!qa_permit_value_error(qa_opt('expert_question_roles'), qa_get_logged_in_userid(), qa_get_logged_in_level(), qa_get_logged_in_flags())) { $is_expert = true; } $users = qa_opt('expert_question_users'); $users = explode("\n", $users); $handle = qa_get_logged_in_handle(); foreach ($users as $idx => $user) { if ($user == $handle) { $is_expert = true; break; } if (strpos($user, '=')) { $user = explode('=', $user); if ($user[0] == $handle) { $catnames = explode(',', $user[1]); $cats = qa_db_read_all_values(qa_db_query_sub('SELECT categoryid FROM ^categories WHERE title IN ($)', $catnames)); $is_expert = $cats; } } } if (isset($is_expert) && !$rules['viewable']) { // experts that aren't allowed to change hidden questions if (is_array($is_expert)) { $in_cats = qa_db_read_one_value(qa_db_query_sub("SELECT COUNT(postid) FROM ^posts WHERE categoryid IN (#) AND postid=#", $is_expert, $post['postid']), true); if ($in_cats) { $rules['viewable'] = true; } } else { $rules['viewable'] = true; } } $rules['reshowable'] = false; $rules['answerbutton'] = true; $rules['commentbutton'] = true; $rules['commentable'] = true; } return $rules; }
function qa_page_q_post_rules($post, $parentpost = null, $siblingposts = null, $childposts = null) { // default function call $rules = qa_page_q_post_rules_base($post, $parentpost, $siblingposts, $childposts); $userid = qa_get_logged_in_userid(); $level = qa_get_logged_in_level(); // do not show answer button if spam-limit exceeded (git-suggest) if (!qa_limits_remaining($userid, QA_LIMIT_ANSWERS)) { $rules['answerbutton'] = false; } // users are never allowed to hide posts $rules['hideable'] = false; // normal users are not allowed to edit posts after x min $timestamp = time(); // edit time frame: 5 min (300s) for questions/comments + 20 min (1200s) for answers if ($post['type'] == 'A') { $rules['editable'] = $rules['editbutton'] = $rules['isbyuser'] && $timestamp - $post['created'] < 1200; } else { $rules['editable'] = $rules['editbutton'] = $rules['isbyuser'] && $timestamp - $post['created'] < 300; } // questions cannot be reopened, only admin $rules['reopenable'] = $rules['reopenable'] && $level >= QA_USER_LEVEL_ADMIN; // Moderator if ($level == QA_USER_LEVEL_EXPERT) { // allowed to edit own answers and all questions // time frame: allow edit after 5 min and up to 7 days (604800 sec), can edit his own answer immediately $rules['editable'] = $rules['editbutton'] = ($rules['isbyuser'] || $post['type'] == 'Q') && !isset($post['closedbyid']) && $post['userid'] != 1; // never allow question-posts of admin to be edited } else { if ($level == QA_USER_LEVEL_EDITOR) { // can edit all posts in forum, but not admin posts $rules['editable'] = $rules['editbutton'] = $post['userid'] != 1; // can clear flags $rules['clearflaggable'] = $post['flagcount'] >= (@$post['userflag'] ? 2 : 1); } } // && ( ($timestamp - $post['created'] > 300) || $rules['isbyuser'] ) // can edit question just after 5 min OR his own answer immediately // && ($timestamp - $post['created'] < 604800 || $level>=QA_USER_LEVEL_EDITOR) // do not allow edit of posts older than 7 days, Redakteur can // admin has all rights if ($level >= QA_USER_LEVEL_ADMIN) { $rules['editable'] = $rules['editbutton'] = $rules['hideable'] = true; } // experts, moderators, admins can close questions $rules['closeable'] = $level >= QA_USER_LEVEL_EXPERT && !$rules['closed']; // && ($timestamp - $post['created'] < 1209600) ); // within 7 days // do not show retag button as it does the same as edit button $rules['retagcatbutton'] = false; return $rules; }