query("SELECT id, fpid, title FROM {$tablepre}faqs ORDER BY displayorder"); while($faq = $db->fetch_array($query)) { if(empty($faq['fpid'])) { $faqparent[$faq['id']] = $faq; } else { $faqsub[$faq['fpid']][] = $faq; } } if($action == 'faq') { $id = intval($id); if($ffaq = $db->fetch_first("SELECT title FROM {$tablepre}faqs WHERE fpid='$id'")) { $navigation = "» $ffaq[title]"; $faqlist = array(); $messageid = empty($messageid) ? 0 : $messageid; $query = $db->query("SELECT id,title,message FROM {$tablepre}faqs WHERE fpid='$id' ORDER BY displayorder"); while($faq = $db->fetch_array($query)) { if(!$messageid) { $messageid = $faq['id']; } $faqlist[] = $faq; } } else { showmessage("faq_content_empty", 'faq.php'); } } elseif($action == 'search') { if(submitcheck('searchsubmit')) { $keyword = isset($keyword) ? trim($keyword) : ''; if($keyword) { $sqlsrch = ''; $searchtype = in_array($searchtype, array('all', 'title', 'message')) ? $searchtype : 'all'; switch($searchtype) { case 'all': $sqlsrch = "WHERE title LIKE '%$keyword%' OR message LIKE '%$keyword%'"; break; case 'title': $sqlsrch = "WHERE title LIKE '%$keyword%'"; break; case 'message': $sqlsrch = "WHERE message LIKE '%$keyword%'"; break; } $keyword = stripslashes($keyword); $faqlist = array(); $query = $db->query("SELECT fpid, title, message FROM {$tablepre}faqs $sqlsrch ORDER BY displayorder"); while($faq = $db->fetch_array($query)) { if(!empty($faq['fpid'])) { $faq['title'] = preg_replace("/(?<=[\s\"\]>()]|[\x7f-\xff]|^)(".preg_quote($keyword, '/').")(([.,:;-?!()\s\"<\[]|[\x7f-\xff]|$))/siU", "\\1\\2", stripslashes($faq['title'])); $faq['message'] = preg_replace("/(?<=[\s\"\]>()]|[\x7f-\xff]|^)(".preg_quote($keyword, '/').")(([.,:;-?!()\s\"<\[]|[\x7f-\xff]|$))/siU", "\\1\\2", stripslashes($faq['message'])); $faqlist[] = $faq; } } } else { showmessage('faq_keywords_empty', 'faq.php'); } } } elseif($action == 'credits') { if(empty($extcredits)) { showmessage('credits_disabled'); } require_once DISCUZ_ROOT.'./include/forum.func.php'; $forumlist = forumselect(FALSE, 0, $fid); $extgroups = array(); if($forum) { $query = $db->query("SELECT * FROM {$tablepre}usergroups ORDER BY (creditshigher<>'0' || creditslower<>'0') DESC, creditslower"); while($group = $db->fetch_array($query)) { $extgroups[$group['groupid']] = $group; } $perms = array('viewperm', 'postperm', 'replyperm', 'getattachperm', 'postattachperm'); foreach($perms as $perm) { if($forum[$perm]) { $groupids = explode("\t", $forum[$perm]); foreach($groupids as $id) { if($id) { $extgroups[$id]['perm'][$perm] = 1; } } } else { foreach($extgroups as $id => $data) { if($id == 7 && ($perm == 'viewperm' || $perm == 'getattachperm') || $id != 7) { $extgroups[$id]['perm'][$perm] = 1; } } } } } $policyarray = array(); foreach($creditspolicy as $operation => $policy) { !$forum && $policyarray[$operation] = $policy; if(in_array($operation, array('post', 'reply', 'digest', 'postattach', 'getattach'))) { if($forum) { $policyarray[$operation] = $forum[$operation.'credits'] ? $forum[$operation.'credits'] : $creditspolicy[$operation]; } } } $creditsarray = array(); for($i = 1; $i <= 8; $i++) { if(isset($extcredits[$i])) { foreach($policyarray as $operation => $policy) { $addcredits = in_array($operation, array('getattach', 'forum_getattach', 'sendpm', 'search')) ? -$policy[$i] : $policy[$i]; if($operation != 'lowerlimit') { $creditsarray[$operation][$i] = empty($policy[$i]) ? 0 : (is_numeric($policy[$i]) ? ''.($addcredits > 0 ? '+'.$addcredits : $addcredits).' '.$extcredits[$i]['unit'] : $policy[$i]); } else { $creditsarray[$operation][$i] = ''.intval($addcredits).' '.$extcredits[$i]['unit']; } } } } if(!$forum) { $query = $db->query("SELECT * FROM {$tablepre}usergroups WHERE type='member' ORDER BY type"); while($group = $db->fetch_array($query)) { $extgroups[] = $group; } } include template('credits'); exit; } elseif($action == 'grouppermission') { require_once './include/forum.func.php'; require_once language('misc'); $permlang = $language; unset($language); $searchgroupid = isset($searchgroupid) ? intval($searchgroupid) : $groupid; $groups = $grouplist = $gids = array(); $query = $db->query("SELECT groupid, type, grouptitle, radminid FROM {$tablepre}usergroups ORDER BY (creditshigher<>'0' || creditslower<>'0'), creditslower"); $cgdata = $nextgid = ''; while($group = $db->fetch_array($query)) { $group['type'] = $group['type'] == 'special' && $group['radminid'] ? 'specialadmin' : $group['type']; $groups[$group['type']][] = array($group['groupid'], $group['grouptitle']); $grouplist[$group['type']] .= ''; if($group['groupid'] == $searchgroupid) { $cgdata = array($group['type'], count($groups[$group['type']]) - 1, $group['groupid']); } } if($cgdata[0] == 'member') { $nextgid = $groups[$cgdata[0]][$cgdata[1] + 1][0]; if($cgdata[1] > 0) { $gids[1] = $groups[$cgdata[0]][$cgdata[1] - 1]; } $gids[2] = $groups[$cgdata[0]][$cgdata[1]]; if($cgdata[1] < count($groups[$cgdata[0]]) - 1) { $gids[3] = $groups[$cgdata[0]][$cgdata[1] + 1]; if(count($gids) == 2) { $gids[4] = $groups[$cgdata[0]][$cgdata[1] + 2]; } } elseif(count($gids) == 2) { $gids[0] = $groups[$cgdata[0]][$cgdata[1] - 2]; } } else { $gids[1] = $groups[$cgdata[0]][$cgdata[1]]; } ksort($gids); $groupids = array(); foreach($gids as $row) { $groupids[] = $row[0]; } $query = $db->query("SELECT * FROM {$tablepre}usergroups u LEFT JOIN {$tablepre}admingroups a ON u.groupid=a.admingid WHERE u.groupid IN (".implodeids($groupids).")"); $groups = array(); while($group = $db->fetch_array($query)) { $group['maxattachsize'] = $group['maxattachsize'] / 1024; $group['maxsizeperday'] = $group['maxsizeperday'] / 1024; $group['maxbiosize'] = $group['maxbiosize'] ? $group['maxbiosize'] : 200; if($searchgroupid == $group['groupid']) { $currenti = $group['groupid']; } $groups[$group['groupid']] = $group; } $newgroups = $groupbperms = $grouppperms = $groupaperms = array(); foreach($groupids as $row) { $newgroups[$row] = $groups[$row]; } $groups = $newgroups;unset($newgroups); $group = $groups[$currenti]; $bperms = array('allowvisit','readaccess','allowviewpro','allowinvisible','allowsearch','allownickname','allowcstatus'); $pperms = array('allowpost','allowreply','allowpostpoll','allowvote','allowpostreward','allowpostactivity','allowpostdebate','allowposttrade','maxsigsize','allowsigbbcode','allowsigimgcode','maxbiosize','allowbiobbcode','allowbioimgcode','allowrecommend'); $aperms = array('allowgetattach', 'allowpostattach', 'allowsetattachperm', 'maxattachsize', 'maxsizeperday', 'attachextensions'); foreach(array('bperms', 'pperms', 'aperms') as $xperms) { foreach($$xperms as $xperm) { $prevv = ''; if(empty($view)) { $issame = TRUE; if($cgdata[0] == 'member') { $kn = 0; foreach($groups as $k => $row) { if($kn > 0) { if($prevv != $row[$xperm]) { $issame = FALSE; } } $prevv = $row[$xperm]; $kn++; } } else { $issame = FALSE; } } else { $issame = FALSE; } if(!$issame) { ${'group'.$xperms}[] = $xperm; } } } $viewextra = !empty($view) ? '&view=all' : ''; include_once DISCUZ_ROOT.'./forumdata/cache/cache_forums.php'; $perms = array('viewperm', 'postperm', 'replyperm', 'getattachperm', 'postattachperm'); $query = $db->query("SELECT fid, viewperm, postperm, replyperm, getattachperm, postattachperm FROM {$tablepre}forumfields"); while($forum = $db->fetch_array($query)) { foreach($perms as $perm) { if($forum[$perm]) { $groupids = explode("\t", $forum[$perm]); if(in_array($searchgroupid, $groupids)) { $forumperm[$forum['fid']][$perm] = 1; } } elseif($searchgroupid == 7 && ($perm == 'viewperm' || $perm == 'getattachperm') || $searchgroupid != 7) { $forumperm[$forum['fid']][$perm] = 1; } } } foreach($_DCACHE['forums'] as $fid => $tmpforum) { switch($tmpforum['type']) { case 'group': if(!$tmpforum['status']) { unset($_DCACHE['forums'][$fid]); } break; case 'forum': $fup = $tmpforum['fup']; if(!$tmpforum['status'] || !$_DCACHE['forums'][$fup]['status']) { unset($_DCACHE['forums'][$fid]); } break; case 'sub': $fup = $tmpforum['fup']; $fupup = $_DCACHE['forums'][$fup]['fup']; if(!$tmpforum['status'] || !$_DCACHE['forums'][$fup]['status'] || !$_DCACHE['forums'][$fupup]['status']) { unset($_DCACHE['forums'][$fid]); } break; } } include template('my_grouppermission'); exit; } elseif($action == 'plugin' && !empty($id)) { list($identifier, $module) = explode(':', $id); if(!is_array($plugins['faq']) || !array_key_exists($id, $plugins['faq'])) { showmessage('undefined_action'); } $directory = $plugins['faq'][$id]['directory']; if(empty($identifier) || !preg_match("/^[a-z]+[a-z0-9_]*\/$/i", $directory) || !preg_match("/^[a-z0-9_\-]+$/i", $module)) { showmessage('undefined_action'); } if(@!file_exists(DISCUZ_ROOT.($modfile = './plugins/'.$directory.$module.'.inc.php'))) { showmessage('plugin_module_nonexistence'); } if(@in_array($identifier, $pluginlangs)) { @include_once DISCUZ_ROOT.'./forumdata/cache/cache_scriptlang.php'; } $navigation = '» '.$plugins['faq'][$id]['name']; $faqtpl = $identifier.':'.$module; include DISCUZ_ROOT.$modfile; } include template('faq'); ?>