It appears that there is a feature already present in Q2A. I hope it gets fleshed out in a future release - add a form in the admin area or something. There are wonders you can do with categories. I am turning different Posts to questions, blog posts, discussion etc. Each post type will behave and look drastically different from the other.
In v1.8 and previous version go to:
q2a/qa-include/app/format.php
Find:
function qa_set_up_category_field(&$qa_content, &$field, $fieldname, $navcategories, $categoryid, $allownone, $allownosub, $maxdepth = null, $excludecategoryid = null)
Alter to this:
function qa_set_up_category_field(&$qa_content, &$field, $fieldname, $navcategories, $categoryid, $allownone, $allownosub, $maxdepth = null, $excludecategoryid = null)
{
$bigAdminsLevels = array(QA_USER_LEVEL_SUPER, QA_USER_LEVEL_ADMIN, QA_USER_LEVEL_MODERATOR);
$currentUserLevel = qa_get_logged_in_level();
//check if current user is SUPER ADMIN, ADMIN, MODERATOR
if(!in_array($currentUserLevel, $bigAdminsLevels)){
$excludecategoryid = 1;
//see q2a/qa-content/qa-global.js and qa-ask.js
//can be refactored to take multiple values
//and administered via a forked ProThoughts plugin
}
UPDATE
To allow multiple categories (by name, not id), you need a tiny alteration in global.js (anyone know how we can avoid touching core files???)
In format.php, use instead
$excludecategoryid = "adminCategory,announcement,notice";
In global.js, find:
for (var i = 2; i < lines.length; i++) { //find this line
Alter to:
var catsExcluded = String(qa_cat_exclude).split(','); //added
for (var i = 2; i < lines.length; i++) { //find this line
var parts = lines[i].split('/');
// if (String(qa_cat_exclude).length && (String(qa_cat_exclude) == parts[0])) //removed
if (catsExcluded.indexOf(parts[1]) > -1) //added
continue;
UPDATE
It so happens you can use your own global.js via a plugin file. Just annotate your changes carefully so that you can update it when you please, with ease.
$qa_content['script_rel'][] = 'qa-plugin/myPlugin/qa-global.js?' . QA_VERSION;