📄 faq.php
字号:
<?php
// +-------------------------------------------------------------+
// | DeskPRO v [2.0.1 Production]
// | Copyright (C) 2001 - 2004 Headstart Solutions Limited
// | Supplied by WTN-WDYL
// | Nullified by WTN-WDYL
// | Distribution via WebForum, ForumRU and associated file dumps
// +-------------------------------------------------------------+
// | DESKPRO IS NOT FREE SOFTWARE
// +-------------------------------------------------------------+
// | License ID : Full Enterprise License =) ...
// | License Owner : WTN-WDYL Team
// +-------------------------------------------------------------+
// | $RCSfile: faq.php,v $
// | $Date: 2004/02/12 21:16:57 $
// | $Revision: 1.71 $
// +-------------------------------------------------------------+
// | File Details:
// | - FAQ display and search.
// +-------------------------------------------------------------+
require_once('./global.php');
//Nullify WTN-WDYL Team
// globalise variables
$global = array (
array('categoryid', 'number', '0'),
array('articleid', 'number', '0'),
);
rg($global);
$template_cache = templatecache('HF_header,HF_footer,FAQ_header,FAQ_search,FAQ_home,FAQ_category,FAQ_article_print,FAQ_article,FAQ_subscriptions,FAQ_new,FAQ_search');
############################### PERMISSIONS ###############################
if ($settings[faq_restrict] AND !$session[userid]) {
error('error_q_a_restrict');
}
// category permissions
$db->query("SELECT catid FROM faq_permissions WHERE groupid = '$session[usergroup]'");
while ($result = $db->row_array()) {
$groups[] = $result[catid];
}
if (!is_array($groups)) {
$error_nocats = 1;
} else {
$permission = " IN " . array2sql($groups);
}
############################### PDF GENERATION ###############################
if ($_REQUEST['do'] == 'pdf') {
if ($_REQUEST['do'] == 'pdf') {
define('PDF', '1');
}
if (!$_REQUEST['categoryid']) {
$_REQUEST['categoryid'] = 0;
}
define('FPDF_FONTPATH','./includes/fpdf/font/');
require('./includes/fpdf/fpdf.php');
$pdf = new FPDF('P', 'mm', 'Letter');
$pdf->Open();
$pdf->AddPage();
$pdf->SetTitle('Knowledge Base');
$pdf->SetCreator('DeskPro v2.0');
$pdf->SetFont('Times', 'B', 24);
$pdf->Cell(0, 10, 'Knowledge Base', 0, 1, 'C');
gen_pdf_faq($_REQUEST[categoryid]);
$pdf->Output();
exit;
}
############################### START PAGE ###############################
$page = 'qanda';
$navigation = add_navigation('Questions and Answers', 'faq.php');
// get templates
$template_cache = templatecache('FAQ_search_category,FAQ_search_articles,FAQ_search,FAQ_related,FAQ_article,FAQ_category_alternate1,FAQ_category_alternate2,FAQ_main_category,FAQ_article_alternate1,FAQ_main,FAQ_main_article,FAQ_article_alternate2,FAQ_nav_bit_category,FAQ_nav_bit_article,FAQ_nav');
// default do
$_REQUEST['do'] = trim($_REQUEST['do']);
if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
if ($categoryid) {
$_REQUEST['do'] = "category";
} else {
$_REQUEST['do'] = "home";
}
}
############################### SORT CATEGORY DATA ###############################
// create a category jump
$db->query("SELECT * FROM faq_cats
" . iff ($permission, "WHERE id $permission") . "
ORDER BY parent,show_order,id
");
while ($cats = $db->row_array()) {
// generates totals (based on permissions)
$parents = explode(',', $cats[parentlist]);
foreach ($parents AS $key => $var) {
$cattotals[$var] += $cats[articles];
}
$cattotals[$cats[id]] += $cats[articles];
// used for "nav bits"
$categorycache_parent[$cats[parent]][$cats[show_order]][$cats[id]] = $cats[name];
// used for category data display in templates
$categorycache_data[$cats[parent]][] = $cats;
// used for categry jump and getting data for category (e.g. name/parent etc)
$categorycache[$cats[id]] = array(
'id' => $cats[id],
'parent' => $cats[parent],
'order' => $cats[show_order],
'name' => $cats[name],
'parentlist' =>$cats[parentlist],
'parentarray' => split(',', $cats[parentlist])
);
}
$catarray = faq_categoryjump();
$category_count = count($catarray) - 1;
$cat_jump = form_select('categoryid', $catarray, $_REQUEST['categoryid']);
############################### SEARCH FAQ ###############################
if ($_REQUEST['do'] == "search") {
$catarray[0] = $dplang[all_categories];
$search_cats = form_select('cat', $catarray, -1, '', '', 6);
give_default($_REQUEST['search_in'], 'all');
give_default($_REQUEST['search_by'], 'AND');
if ($_REQUEST['search_by'] == 'AND') {
$AND = 1;
$search_option = 'AND';
} elseif ($_REQUEST['search_by'] == 'OR') {
$OR = 1;
$search_option = 'OR';
} else {
$PHRASE = 1;
$search_option = 'PHRASE';
}
///////// sort search words /////////
if ($_REQUEST['searchwords']) {
if ($OR OR $AND) {
$tmp = split(' ', $_REQUEST['searchwords']);
foreach ($tmp AS $key => $var) {
if (trim($var)) {
$searchwords[] = trim($var);
}
}
} else {
// make into an array for later processing
if (!is_array($_REQUEST['searchwords'])) {
$searchwords = array($_REQUEST['searchwords']);
}
}
$number_searchwords = count($searchwords);
///////// make keywords /////////
if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'keywords') {
if ($AND OR $OR OR ($PHRASE AND $number_searchwords == 1)) {
if (is_array($searchwords)) {
$db->query("SELECT * FROM faq_keywords WHERE word IN " . array2sql($searchwords) . "");
while ($result = $db->row_array()) {
$articles = split(',', $result[articles]);
foreach ($articles AS $key => $var) {
if ($var) {
$keywords[$var][] = $result['word'];
}
}
}
}
// if matching all unset those that do not match
if ($AND) {
if (is_array($keywords)) {
foreach ($keywords AS $key => $var) {
if (count($var) != $number_searchwords) {
unset($keywords[$key]);
}
}
}
}
}
}
///////// categories /////////
if (is_array($_REQUEST['cat'])) {
if (in_array('0', $_REQUEST['cat'])) {
unset($_REQUEST['cat']);
} else {
$where_category .= "AND category IN " . array2sql($_REQUEST['cat']);
}
}
///////// articles / question / answer /////////
unset($i);
// will always be an array
foreach ($searchwords AS $key => $var) {
if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'titles') {
$where_title .= iff($i, $search_option) . " title LIKE '%" . addslashes_like($var) . "%'";
}
if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'questions') {
$where_question .= iff($i, $search_option) . " question LIKE '%" . addslashes_like($var) . "%'";
}
if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'answers') {
$where_answer .= iff($i, $search_option) . " answer LIKE '%" . addslashes_like($var) . "%'";
}
$i++;
}
// the match can be on any component
if ($where_title) {
$where_title = "($where_title)";
}
if ($where_question) {
$where_question = " OR ($where_question)";
}
if ($where_answer) {
$where_answer = " OR ($where_answer)";
}
// add keyword article matches
if (is_array($keywords)) {
$where_keywords = " OR (faq_articles.id IN " . array2sql(array_keys($keywords)) . ")";
}
if (!$where_title) {
$where_title = '1';
}
$query = "
SELECT faq_articles.*, user.username AS username, tech.username AS username
FROM faq_articles
LEFT JOIN tech ON (tech.id = faq_articles.techid_made)
LEFT JOIN user ON (user.id = faq_articles.userid)
WHERE
(
$where_title
$where_question
$where_answer
$where_keywords
)
$where_category
";
$db->query($query);
while ($result = $db->row_array()) {
$article_cache[$result[id]] = $result;
}
}
// final processing
if (is_array($article_cache)) {
// check permission
foreach ($article_cache AS $key => $var) {
if (is_array($categorycache[$var[category]])) {
// sort votes
if ($article_cache[$key]['votes']) {
$article_cache[$key]['rating'] = $article_cache[$key]['rating'] . '%';
} else {
$article_cache[$key]['rating'] = ' - ';
}
// replace with category name
$article_cache[$key]['category_name'] = $categorycache[$var[category]]['name'];
$article[] = $article_cache[$key];
}
}
}
// show the search form
$advancedsearch = 1;
$navigation .= add_navigation('Search', 'faq.php');
eval(makeeval('header', 'HF_header'));
eval(makeeval('footer', 'HF_footer'));
eval(makeeval('faq_header', 'FAQ_header'));
eval(makeeval('echo', 'FAQ_search'));
}
############################### HOME ###############################
if ($_REQUEST['do'] == "home") {
$time = mktime() - (60 * 60 * 24 * $settings[faq_days]);
///////// sub categories /////////
if (is_array($categorycache_data[0])) {
foreach ($categorycache_data[0] AS $key => $tempcat) {
if ($tempcat[newdate] > $time) {
$tempcat[is_new] = 1;
} elseif ($tempcat[editdate] > $time) {
$tempcat[is_modified] = 1;
}
$tempcat[totalarticles] = $cattotals[$tempcat[id]];
$sub_category[] = $tempcat;
}
// column widths
$columns = $settings[faq_columns];
$catsno = count($sub_category);
if ($catsno >= $columns) {
if ($columns) {
$percentage = 100 / $columns;
}
} else {
if ($catsno) {
$percentage = 100 / $catsno;
}
}
}
///////// get new articles /////////
if ($settings['faq_front_articles'] AND !$error_nocats) {
$db->query("
SELECT title, id, date_modified, date_made, category
FROM faq_articles
WHERE (date_made > '$time' OR
date_modified > '$time')
" . iff($permission, "AND category $permission") . "
AND NOT to_validate
ORDER BY date_made DESC, date_modified DESC
LIMIT $settings[faq_front_articles]
");
while ($result = $db->row_array()) {
if ($result['date_made'] > $time) {
$result['is_new'] = 1;
} elseif ($result['date_modified'] > $time) {
$result['is_modified'] = 1;
}
$result['category_name'] = $categorycache[$result['category']]['name'];
if ($result['date_modified']) {
$result['date'] = our_date($result['date_modified'], 'day');
} else {
$result['date'] = our_date($result['date_made'], 'day');
}
$changed_articles[] = $result;
}
}
///////// most popular articles /////////
/*
forumla for popular: (from ratings:)
rating (0,20,40,60,80,100)
(rating * votes / 10) + votes
*/
if ($settings['faq_front_articles'] AND !$error_nocats) {
$db->query("
SELECT faq_articles.*,
((rating * votes / 10) + views) AS score
FROM faq_articles
WHERE NOT to_validate
ORDER BY score DESC
LIMIT $settings[faq_front_articles]
");
while ($result = $db->row_array()) {
$result[category_name] = $categorycache[$result[category]]['name'];
if ($result['date_modified']) {
$result['date'] = our_date($result['date_modified'], 'day');
} else {
$result['date'] = our_date($result['date_made'], 'day');
}
$toprate_articles[] = $result;
}
}
///////// finish up / display /////////
$nav = breadcrumbs($categoryid);
eval(makeeval('header', 'HF_header'));
eval(makeeval('footer', 'HF_footer'));
eval(makeeval('faq_header', 'FAQ_header'));
eval(makeeval('echo', 'FAQ_home'));
}
############################### CATEGORY ###############################
if ($_REQUEST['do'] == "category") {
$time = mktime() - (60 * 60 * 24 * $settings[faq_days]);
// the category
$category = $db->query_return("
SELECT * FROM faq_cats
WHERE id = '" . intval($categoryid) . "'
" . iff($permission, "AND id $permission") . "
");
if (!$db->num_rows()) {
error('error_q_a_category_exist');
}
///////////////////////// subcategories /////////////////////////
if (is_array($categorycache_data[$_REQUEST[categoryid]])) {
foreach ($categorycache_data[$_REQUEST[categoryid]] AS $key => $tempcat) {
if ($tempcat[newdate] > $time) {
$tempcat[is_new] = 1;
} elseif ($tempcat[editdate] > $time) {
$tempcat[is_modified] = 1;
}
$tempcat[totalarticles] = $cattotals[$tempcat[id]];
$sub_category[] = $tempcat;
}
// widths
$columns = $settings[faq_columns];
$catsno = count($sub_category);
if ($catsno >= $columns) {
if ($columns) {
$percentage = 100 / $columns;
}
} else {
if ($catsno) {
$percentage = 100 / $catsno;
}
}
}
///////////////////////// articles /////////////////////////
$db->query("
SELECT faq_articles.id, title, rating, date_made, date_modified, faq_cats.name as category FROM faq_articles, faq_cats
WHERE category = '" . intval($categoryid) . "' AND NOT to_validate AND faq_cats.id = faq_articles.category
ORDER BY faq_articles.show_order
");
$article = array();
while ($result = $db->row_array()) {
if ($result[date_made] > $time) {
$result[is_new] = 1;
} elseif ($result[date_modified] > $time) {
$result[is_modified] = 1;
}
$article[] = $result;
}
///////////////////////// related categories /////////////////////////
$db->query("
SELECT related_cat
FROM faq_cats_related
WHERE show_cat = '" . intval($categoryid) . "'
");
while ($result = $db->row_array()) {
$tempcat = $categorycache[$result[related_cat]];
if (is_array($tempcat)) {
if ($tempcat[newdate] > $time) {
$tempcat[is_new] = 1;
} elseif ($tempcat[editdate] > $time) {
$tempcat[is_modified] = 1;
}
$tempcat[totalarticles] = $cattotals[$tempcat[id]];
$related_category[] = $tempcat;
}
}
// widths
if (is_array($related_category)) {
$columns = $settings[faq_columns];
$catsno = count($related_category);
if ($catsno >= $columns) {
if ($columns) {
$percentage = 100 / $columns;
}
} else {
if ($catsno) {
$percentage = 100 / $catsno;
}
}
}
///////////////////////// display page /////////////////////////
$navigation .= breadcrumbs($categoryid);
eval(makeeval('header', 'HF_header'));
eval(makeeval('footer', 'HF_footer'));
eval(makeeval('faq_header', 'FAQ_header'));
eval(makeeval('echo', 'FAQ_category'));
}
############################### DOWNLOAD ARTICLE ###############################
if ($_REQUEST['do'] == 'download') {
$attachment = $db->query_return("
SELECT *
FROM faq_attachments
WHERE id = '" . addslashes($_REQUEST['id']) . "'
");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -