faq.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:28k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: faq.php,v $
  15. // | $Date: 2004/02/12 21:16:57 $
  16. // | $Revision: 1.71 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - FAQ display and search.
  20. // +-------------------------------------------------------------+
  21. require_once('./global.php');
  22. //Nullify WTN-WDYL Team
  23. // globalise variables
  24. $global = array (
  25. array('categoryid', 'number', '0'),
  26. array('articleid', 'number', '0'),
  27. );
  28. rg($global);
  29. $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');
  30. ############################### PERMISSIONS ###############################
  31. if ($settings[faq_restrict] AND !$session[userid]) {
  32. error('error_q_a_restrict');
  33. }
  34. // category permissions
  35. $db->query("SELECT catid FROM faq_permissions WHERE groupid = '$session[usergroup]'");
  36. while ($result = $db->row_array()) {
  37. $groups[] = $result[catid];
  38. }
  39. if (!is_array($groups)) {
  40. $error_nocats = 1;
  41. } else {
  42. $permission = " IN " . array2sql($groups);
  43. }
  44. ############################### PDF GENERATION ###############################
  45. if ($_REQUEST['do'] == 'pdf') {
  46. if ($_REQUEST['do'] == 'pdf') {
  47. define('PDF', '1');
  48. }
  49. if (!$_REQUEST['categoryid']) {
  50. $_REQUEST['categoryid'] = 0;
  51. }
  52. define('FPDF_FONTPATH','./includes/fpdf/font/');
  53. require('./includes/fpdf/fpdf.php');
  54. $pdf = new FPDF('P', 'mm', 'Letter');
  55. $pdf->Open();
  56. $pdf->AddPage();
  57. $pdf->SetTitle('Knowledge Base');
  58. $pdf->SetCreator('DeskPro v2.0');
  59. $pdf->SetFont('Times', 'B', 24);
  60. $pdf->Cell(0, 10, 'Knowledge Base', 0, 1, 'C');
  61. gen_pdf_faq($_REQUEST[categoryid]);
  62. $pdf->Output();
  63. exit;
  64. }
  65. ############################### START PAGE ###############################
  66. $page = 'qanda';
  67. $navigation = add_navigation('Questions and Answers', 'faq.php');
  68. // get templates
  69. $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');
  70. // default do
  71. $_REQUEST['do'] = trim($_REQUEST['do']);
  72. if (!isset($_REQUEST['do']) or $_REQUEST['do'] == "") {
  73. if ($categoryid) {
  74. $_REQUEST['do'] = "category";
  75. } else {
  76. $_REQUEST['do'] = "home";
  77. }
  78. }
  79. ############################### SORT CATEGORY DATA ###############################
  80. // create a category jump
  81. $db->query("SELECT * FROM faq_cats 
  82. " . iff ($permission, "WHERE id $permission") . "
  83. ORDER BY parent,show_order,id
  84. ");
  85. while ($cats = $db->row_array()) {
  86. // generates totals (based on permissions)
  87. $parents = explode(',', $cats[parentlist]);
  88. foreach ($parents AS $key => $var) {
  89. $cattotals[$var] += $cats[articles];
  90. }
  91. $cattotals[$cats[id]] += $cats[articles];
  92. // used for "nav bits"
  93. $categorycache_parent[$cats[parent]][$cats[show_order]][$cats[id]] = $cats[name];
  94. // used for category data display in templates
  95. $categorycache_data[$cats[parent]][] = $cats;
  96. // used for categry jump and getting data for category (e.g. name/parent etc)
  97. $categorycache[$cats[id]] = array(
  98. 'id' => $cats[id],
  99. 'parent' => $cats[parent], 
  100. 'order' => $cats[show_order], 
  101. 'name' => $cats[name],
  102. 'parentlist' =>$cats[parentlist],
  103. 'parentarray' => split(',', $cats[parentlist])
  104. );
  105. }
  106. $catarray = faq_categoryjump();
  107. $category_count = count($catarray) - 1;
  108. $cat_jump = form_select('categoryid', $catarray, $_REQUEST['categoryid']);
  109. ############################### SEARCH FAQ ###############################
  110. if ($_REQUEST['do'] == "search") {
  111. $catarray[0] = $dplang[all_categories];
  112. $search_cats = form_select('cat', $catarray, -1, '', '', 6);
  113. give_default($_REQUEST['search_in'], 'all');
  114. give_default($_REQUEST['search_by'], 'AND');
  115. if ($_REQUEST['search_by'] == 'AND') {
  116. $AND = 1;
  117. $search_option = 'AND';
  118. } elseif ($_REQUEST['search_by']  == 'OR') {
  119. $OR = 1;
  120. $search_option = 'OR';
  121. } else {
  122. $PHRASE = 1;
  123. $search_option = 'PHRASE';
  124. }
  125. ///////// sort search words /////////
  126. if ($_REQUEST['searchwords']) { 
  127. if ($OR OR $AND) {
  128. $tmp = split(' ', $_REQUEST['searchwords']);
  129. foreach ($tmp AS $key => $var) {
  130. if (trim($var)) {
  131. $searchwords[] = trim($var);
  132. }
  133. }
  134. } else {
  135. // make into an array for later processing
  136. if (!is_array($_REQUEST['searchwords'])) {
  137. $searchwords = array($_REQUEST['searchwords']);
  138. }
  139. }
  140. $number_searchwords = count($searchwords);
  141. ///////// make keywords /////////
  142. if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'keywords') {
  143. if ($AND OR $OR OR ($PHRASE AND $number_searchwords == 1)) {
  144. if (is_array($searchwords)) {
  145. $db->query("SELECT * FROM faq_keywords WHERE word IN " . array2sql($searchwords) . "");
  146. while ($result = $db->row_array()) {
  147. $articles = split(',', $result[articles]);
  148. foreach ($articles AS $key => $var) {
  149. if ($var) {
  150. $keywords[$var][] = $result['word'];
  151. }
  152. }
  153. }
  154. }
  155. // if matching all unset those that do not match
  156. if ($AND) {
  157. if (is_array($keywords)) {
  158. foreach ($keywords AS $key => $var) {
  159. if (count($var) != $number_searchwords) {
  160. unset($keywords[$key]);
  161. }
  162. }
  163. }
  164. }
  165. }
  166. }
  167. ///////// categories /////////
  168. if (is_array($_REQUEST['cat'])) {
  169. if (in_array('0', $_REQUEST['cat'])) {
  170. unset($_REQUEST['cat']);
  171. } else {
  172. $where_category .= "AND category IN " . array2sql($_REQUEST['cat']);
  173. }
  174. }
  175. ///////// articles / question / answer /////////
  176. unset($i);
  177. // will always be an array
  178. foreach ($searchwords AS $key => $var) {
  179. if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'titles') {
  180. $where_title .= iff($i, $search_option) . " title LIKE '%" . addslashes_like($var) . "%'";
  181. }
  182. if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in']  == 'questions') {
  183. $where_question .= iff($i, $search_option) . " question LIKE '%" . addslashes_like($var) . "%'";
  184. }
  185. if ($_REQUEST['search_in'] == 'all' OR $_REQUEST['search_in'] == 'answers') {
  186. $where_answer .= iff($i, $search_option) . " answer LIKE '%" . addslashes_like($var) . "%'";
  187. }
  188. $i++;
  189. }
  190. // the match can be on any component
  191. if ($where_title) {
  192. $where_title = "($where_title)";
  193. }
  194. if ($where_question) {
  195. $where_question = " OR ($where_question)";
  196. }
  197. if ($where_answer) {
  198. $where_answer = " OR ($where_answer)";
  199. }
  200. // add keyword article matches
  201. if (is_array($keywords)) {
  202. $where_keywords = " OR (faq_articles.id IN " . array2sql(array_keys($keywords)) . ")";
  203. }
  204. if (!$where_title) {
  205. $where_title = '1';
  206. }
  207. $query = "
  208. SELECT faq_articles.*, user.username AS username, tech.username AS username
  209. FROM faq_articles
  210. LEFT JOIN tech ON (tech.id = faq_articles.techid_made)
  211. LEFT JOIN user ON (user.id = faq_articles.userid)
  212. WHERE
  213. (
  214. $where_title
  215. $where_question
  216. $where_answer
  217. $where_keywords
  218. )
  219. $where_category
  220. ";
  221. $db->query($query);
  222. while ($result = $db->row_array()) {
  223. $article_cache[$result[id]] = $result;
  224. }
  225. }
  226. // final processing
  227. if (is_array($article_cache)) {
  228. // check permission
  229. foreach ($article_cache AS $key => $var) {
  230. if (is_array($categorycache[$var[category]])) {
  231. // sort votes
  232. if ($article_cache[$key]['votes']) {
  233. $article_cache[$key]['rating'] = $article_cache[$key]['rating'] . '%';
  234. } else {
  235. $article_cache[$key]['rating'] = ' - ';
  236. }
  237. // replace with category name
  238. $article_cache[$key]['category_name'] = $categorycache[$var[category]]['name'];
  239. $article[] = $article_cache[$key];
  240. }
  241. }
  242. }
  243. // show the search form
  244. $advancedsearch = 1;
  245. $navigation .= add_navigation('Search', 'faq.php');
  246. eval(makeeval('header', 'HF_header'));
  247. eval(makeeval('footer', 'HF_footer'));
  248. eval(makeeval('faq_header', 'FAQ_header'));
  249. eval(makeeval('echo', 'FAQ_search'));
  250. }
  251. ############################### HOME ###############################
  252. if ($_REQUEST['do'] == "home") {
  253. $time = mktime() - (60 * 60 * 24 * $settings[faq_days]);
  254. ///////// sub categories /////////
  255. if (is_array($categorycache_data[0])) {
  256. foreach ($categorycache_data[0] AS $key => $tempcat) {
  257. if ($tempcat[newdate] > $time) {
  258. $tempcat[is_new] = 1;
  259. } elseif ($tempcat[editdate] > $time) {
  260. $tempcat[is_modified] = 1;
  261. }
  262. $tempcat[totalarticles] = $cattotals[$tempcat[id]];
  263. $sub_category[] = $tempcat;
  264. }
  265. // column widths
  266. $columns = $settings[faq_columns];
  267. $catsno = count($sub_category);
  268. if ($catsno >= $columns) {
  269. if ($columns) {
  270. $percentage = 100 / $columns;
  271. }
  272. } else {
  273. if ($catsno) {
  274. $percentage = 100 / $catsno;
  275. }
  276. }
  277. }
  278. ///////// get new articles ///////// 
  279. if ($settings['faq_front_articles'] AND !$error_nocats) {
  280. $db->query("
  281. SELECT title, id, date_modified, date_made, category 
  282. FROM faq_articles 
  283. WHERE (date_made > '$time' OR
  284. date_modified > '$time')
  285. " . iff($permission, "AND category $permission") . "
  286. AND NOT to_validate
  287. ORDER BY date_made DESC, date_modified DESC
  288. LIMIT $settings[faq_front_articles]
  289. ");
  290. while ($result = $db->row_array()) {
  291. if ($result['date_made'] > $time) {
  292. $result['is_new'] = 1;
  293. } elseif ($result['date_modified'] > $time) {
  294. $result['is_modified'] = 1;
  295. }
  296. $result['category_name'] = $categorycache[$result['category']]['name'];
  297. if ($result['date_modified']) {
  298. $result['date'] = our_date($result['date_modified'], 'day');
  299. } else {
  300. $result['date'] = our_date($result['date_made'], 'day');
  301. }
  302. $changed_articles[] = $result;
  303. }
  304. }
  305. ///////// most popular articles ///////// 
  306. /*
  307. forumla for popular: (from ratings:)
  308. rating (0,20,40,60,80,100)
  309. (rating * votes / 10) + votes
  310. */
  311. if ($settings['faq_front_articles'] AND !$error_nocats) {
  312. $db->query("
  313. SELECT faq_articles.*, 
  314. ((rating * votes / 10) + views) AS score 
  315. FROM faq_articles 
  316. WHERE NOT to_validate
  317. ORDER BY score DESC 
  318. LIMIT $settings[faq_front_articles]
  319. ");
  320. while ($result = $db->row_array()) {
  321. $result[category_name] = $categorycache[$result[category]]['name'];
  322. if ($result['date_modified']) {
  323. $result['date'] = our_date($result['date_modified'], 'day');
  324. } else {
  325. $result['date'] = our_date($result['date_made'], 'day');
  326. }
  327. $toprate_articles[] = $result;
  328. }
  329. }
  330. ///////// finish up / display ///////// 
  331. $nav = breadcrumbs($categoryid);
  332. eval(makeeval('header', 'HF_header'));
  333. eval(makeeval('footer', 'HF_footer'));
  334. eval(makeeval('faq_header', 'FAQ_header'));
  335. eval(makeeval('echo', 'FAQ_home'));
  336. }
  337. ############################### CATEGORY ###############################
  338. if ($_REQUEST['do'] == "category") {
  339. $time = mktime() - (60 * 60 * 24 * $settings[faq_days]);
  340. // the category
  341. $category = $db->query_return("
  342. SELECT * FROM faq_cats 
  343. WHERE id = '" . intval($categoryid) . "'
  344. " . iff($permission, "AND id $permission") . "
  345. ");
  346. if (!$db->num_rows()) {
  347. error('error_q_a_category_exist');
  348. }
  349. ///////////////////////// subcategories /////////////////////////
  350. if (is_array($categorycache_data[$_REQUEST[categoryid]])) {
  351. foreach ($categorycache_data[$_REQUEST[categoryid]] AS $key => $tempcat) {
  352. if ($tempcat[newdate] > $time) {
  353. $tempcat[is_new] = 1;
  354. } elseif ($tempcat[editdate] > $time) {
  355. $tempcat[is_modified] = 1;
  356. }
  357. $tempcat[totalarticles] = $cattotals[$tempcat[id]];
  358. $sub_category[] = $tempcat;
  359. }
  360. // widths
  361. $columns = $settings[faq_columns];
  362. $catsno = count($sub_category);
  363. if ($catsno >= $columns) {
  364. if ($columns) {
  365. $percentage = 100 / $columns;
  366. }
  367. } else {
  368. if ($catsno) {
  369. $percentage = 100 / $catsno;
  370. }
  371. }
  372. }
  373. ///////////////////////// articles /////////////////////////
  374. $db->query("
  375. SELECT faq_articles.id, title, rating, date_made, date_modified, faq_cats.name as category FROM faq_articles, faq_cats
  376. WHERE category = '" . intval($categoryid) . "' AND NOT to_validate AND faq_cats.id = faq_articles.category
  377. ORDER BY faq_articles.show_order
  378. ");
  379. $article = array();
  380. while ($result = $db->row_array()) {
  381. if ($result[date_made] > $time) {
  382. $result[is_new] = 1;
  383. } elseif ($result[date_modified] > $time) {
  384. $result[is_modified] = 1;
  385. }
  386. $article[] = $result;
  387. }
  388. ///////////////////////// related categories /////////////////////////
  389. $db->query("
  390. SELECT related_cat 
  391. FROM faq_cats_related
  392. WHERE show_cat = '" . intval($categoryid) . "'
  393. ");
  394. while ($result = $db->row_array()) {
  395. $tempcat = $categorycache[$result[related_cat]];
  396. if (is_array($tempcat)) {
  397. if ($tempcat[newdate] > $time) {
  398. $tempcat[is_new] = 1;
  399. } elseif ($tempcat[editdate] > $time) {
  400. $tempcat[is_modified] = 1;
  401. }
  402. $tempcat[totalarticles] = $cattotals[$tempcat[id]];
  403. $related_category[] = $tempcat;
  404. }
  405. }
  406. // widths
  407. if (is_array($related_category)) {
  408. $columns = $settings[faq_columns];
  409. $catsno = count($related_category);
  410. if ($catsno >= $columns) {
  411. if ($columns) {
  412. $percentage = 100 / $columns;
  413. }
  414. } else {
  415. if ($catsno) {
  416. $percentage = 100 / $catsno;
  417. }
  418. }
  419. }
  420. ///////////////////////// display page /////////////////////////
  421. $navigation .= breadcrumbs($categoryid);
  422. eval(makeeval('header', 'HF_header'));
  423. eval(makeeval('footer', 'HF_footer'));
  424. eval(makeeval('faq_header', 'FAQ_header'));
  425. eval(makeeval('echo', 'FAQ_category'));
  426. }
  427. ############################### DOWNLOAD ARTICLE ###############################
  428. if ($_REQUEST['do'] == 'download') {
  429. $attachment = $db->query_return("
  430. SELECT * 
  431. FROM faq_attachments 
  432. WHERE id = '" . addslashes($_REQUEST['id']) . "'
  433. ");
  434. $article = $db->query_return("
  435. SELECT faq_articles.*
  436. FROM faq_articles
  437. WHERE faq_articles.id = '" . intval($attachment['articleid']) . "'
  438. " . iff($permission, "AND faq_articles.category $permission") . "
  439. AND NOT to_validate
  440. ");
  441. if ($db->num_rows() < 1) {
  442. error('error_q_a_article_exist');
  443. }
  444. get_attachment($_REQUEST['id'], 'faq_attachments');
  445. }
  446. ############################### VIEW ARTICLE / PRINTABLE ARTICLE ###############################
  447. if ($_REQUEST['do'] == "article" OR $_REQUEST['do'] == "printarticle") {
  448. if (!$articleid) {
  449. error('error_q_a_article_exist');
  450. }
  451. $article = $db->query_return("
  452. SELECT faq_articles.*
  453. FROM faq_articles
  454. WHERE faq_articles.id = '" . intval($articleid) . "'
  455. " . iff($permission, "AND faq_articles.category $permission") . "
  456. AND NOT to_validate
  457. ");
  458. if ($db->num_rows() < 1) {
  459. error('error_q_a_article_exist');
  460. }
  461. // update number of views
  462. $db->query("UPDATE faq_articles SET views = views+1 WHERE id = '" . intval($articleid) . "'");
  463. if ($article[date_made] > (mktime() - (60 * 60 * 24 * $settings[faq_days]))) {
  464. $article[is_new] = 1;
  465. }
  466. // sort article elements
  467. if ($article[date_modified]) {
  468. $article[date_modified] = our_date($article[date_modified]);
  469. }
  470. $article[title] = dp_code($article[title]);
  471. $article[question] = iff($article[question_html], $article[question], dp_code($article[question]));
  472. $article[answer] = iff($article[answer_html], $article[answer], dp_code($article[answer]));
  473. $article[date_made] = our_date($article[date_made]);
  474. // get names of tech/user who made
  475. if ($article[techid_made]) {
  476. $tmp = $db->query_return("SELECT username FROM tech WHERE id = '$article[techid_made]'");
  477. $article[tech_made] = $tmp['username'];
  478. } else {
  479. $tmp = $db->query_return("SELECT username FROM user WHERE id = '$article[userid]'");
  480. $article[tech_made] = $tmp['username'];
  481. }
  482. $tmp = $db->query_return("SELECT username FROM tech WHERE id = '$article[techid_modified]'");
  483. $article[tech_modified] = $tmp['username'];
  484. // faq attachments
  485. $attachments = $db->query_return_array("
  486. SELECT * FROM faq_attachments WHERE articleid = '" . intval($articleid) . "'
  487. ");
  488. // faq attachments
  489. $db->query("
  490. SELECT * 
  491. FROM faq_attachments 
  492. WHERE articleid = '" . intval($articleid) . "'
  493. ");
  494. while ($result = $db->row_array()) {
  495. $result['filesize'] = number_format($result['filesize'] / 1024, 2);
  496. $attachment[] = $result;
  497. }
  498. // related articles
  499. $db->query("
  500. SELECT faq_articles.*
  501. FROM faq_articles_related
  502. LEFT JOIN faq_articles ON (faq_articles_related.related_article = faq_articles.id)
  503. WHERE show_article = '" . intval($articleid) . "'
  504. " . iff($permission, "AND faq_articles.category $permission") . "
  505. AND NOT to_validate
  506. ");
  507. $related_article = array();
  508. while ($result = $db->row_array()) {
  509. if ($result['date_modified']) {
  510. $result['date'] = our_date($result['date_modified'], 'day');
  511. } else {
  512. $result['date'] = our_date($result['date_made'], 'day');
  513. }
  514. $related_article[] = $result;
  515. }
  516. $navigation .= breadcrumbs($article[category]);
  517. $navigation .= add_navigation($article[title], "faq.php?do=article&articleid=$article[id]");
  518. // Update the category jump widget to show the current category
  519. $cat_jump = form_select('categoryid', $catarray, $article['category']);
  520. $categoryid = $article['category'];
  521. if ($_REQUEST['do'] == 'printarticle') {
  522. eval(makeeval('echo', 'FAQ_article_print'));
  523. } else {
  524. eval(makeeval('header', 'HF_header'));
  525. eval(makeeval('footer', 'HF_footer'));
  526. eval(makeeval('faq_header', 'FAQ_header'));
  527. eval(makeeval('echo', 'FAQ_article'));
  528. }
  529. }
  530. ############################### NEW ARTICLE (2) ###############################
  531. if ($_REQUEST['do'] == "new2") {
  532. max_limits('faq');
  533. if (!$settings['faq_new']) {
  534. error('error_no_faq_submit');
  535. }
  536. if (!$_REQUEST[category]) {
  537. $error_category = 1;
  538. $stop = 1;
  539. }
  540. if (strlen($_REQUEST[title]) < 10) {
  541. $error_title = 1;
  542. $stop = 1;
  543. }
  544. if (strlen($_REQUEST[question]) < 10) {
  545. $error_question = 1;
  546. $stop = 1;
  547. }
  548. if (strlen($_REQUEST[answer]) < 10) {
  549. $error_answer = 1;
  550. $stop = 1;
  551. }
  552. if (!$stop) {
  553. $ref = make_ticket_ref('faq_articles');
  554. $db->query("INSERT INTO faq_articles SET
  555. title = '" . mysql_escape_string(htmlspecialchars_uni($_REQUEST[title])) . "',
  556. question = '" . mysql_escape_string(htmlspecialchars_uni($_REQUEST[question])) . "',
  557. answer = '" . mysql_escape_string(htmlspecialchars_uni($_REQUEST[answer])) . "',
  558. category = '" . mysql_escape_string(htmlspecialchars_uni($_REQUEST[category])) . "',
  559. to_validate = '1',
  560. date_made = " . mktime() . ",
  561. ref = '" . mysql_escape_string($ref) . "',
  562. userid = '$session[userid]'
  563. ");
  564. $id = $db->last_id();
  565. // now lets email techs
  566. $db->query("
  567. SELECT username, email 
  568. FROM tech
  569. WHERE email_faq
  570. ");
  571. while ($result = $db->row_array()) {
  572. eval(makeemaileval('message', 'TECHBODY_faq', $subject));
  573. dp_mail($result[email], $subject, $message);
  574. }
  575. jump('faq.php', 'redirect_faq_new', 5);
  576. // fix any errors
  577. } else { 
  578. $_REQUEST['do'] = "new";
  579. }
  580. }
  581. ############################### NEW ARTICLE ###############################
  582. if ($_REQUEST['do'] == "new") {
  583. max_limits('faq');
  584. if (!$settings['faq_new']) {
  585. error('error_no_faq_submit');
  586. }
  587. $subpage = 'newarticle';
  588. $catarray2 = $catarray;
  589. unset($catarray2[0]);
  590. if ($_POST['category']) {
  591. $thiscategory = $_POST['category'];
  592. } elseif ($categoryid) {
  593. $thiscategory = $categoryid; // from category
  594. }
  595. $category_select = form_select('category', $catarray2, $thiscategory);
  596. $navigation .= add_navigation($dplang[new_article], "faq.php?do=new");
  597. eval(makeeval('header', 'HF_header'));
  598. eval(makeeval('footer', 'HF_footer'));
  599. eval(makeeval('faq_header', 'FAQ_header'));
  600. eval(makeeval('echo', 'FAQ_new'));
  601. }
  602. ############################### ADD ARTICLE SUBSCRIPTION ###############################
  603. if ($_REQUEST['do'] == "addarticlesub") {
  604. check_user();
  605. $articleid = mysql_escape_string($articleid);
  606. $article = $db->query_return("SELECT category FROM faq_articles WHERE id = '" . intval($articleid) . "'");
  607. if (!$db->num_rows()) {
  608. error('error_q_a_article_exist');
  609. }
  610. $db->query("
  611. DELETE FROM faq_subscriptions 
  612. WHERE articleid = '" . intval($articleid) . "'
  613. AND userid = '$session[userid]'
  614. ");
  615. $db->query("
  616. INSERT INTO faq_subscriptions SET
  617. articleid = '" . intval($articleid) . "',
  618. userid = '$session[userid]',
  619. edit = 1
  620. ");
  621. jump('faq.php?do=subscriptions', 'redirect_faq_subscription');
  622. }
  623. ############################### ADD CATEGORY SUBSCRIPTION ###############################
  624. if ($_REQUEST['do'] == "addcategorysub") {
  625. check_user();
  626. $category = $db->query_return("
  627. SELECT * FROM faq_cats 
  628. WHERE id = '" . intval($categoryid) . "'" . iff($permission, "AND id $permission"));
  629. if (!$db->num_rows()) {
  630. error('error_q_a_category_exist');
  631. }
  632. $db->query("
  633. DELETE FROM faq_subscriptions WHERE 
  634. catid = '" . intval($categoryid) . "'
  635. AND userid = '$session[userid]'
  636. ");
  637. $db->query("
  638. INSERT INTO faq_subscriptions SET
  639. catid = '" . intval($categoryid) . "',
  640. new = 1,
  641. userid = '$session[userid]'
  642. ");
  643. jump('faq.php?do=subscriptions', 'redirect_faq_subscription');
  644. }
  645. ############################### SUBSCRIPTIONS (2) ###############################
  646. if ($_REQUEST['do'] == "subscriptions2") {
  647. check_user();
  648. $subpage = 'subscription';
  649. // need to be logged in
  650. if (!$session[userid]) {
  651. login_form();
  652. }
  653. // delete current data
  654. $db->query("DELETE FROM faq_subscriptions WHERE userid = '$session[userid]'");
  655. // deal with categories
  656. if (is_array($_REQUEST[cat])) {
  657. foreach($_REQUEST[cat] AS $key => $var) {
  658. if ($_REQUEST[cat_edit][$key] OR $_REQUEST[cat_new][$key]) {
  659. $data[] = array(
  660. $key, 
  661. $_REQUEST[cat_new][$key], 
  662. $_REQUEST[cat_edit][$key],
  663. $session[userid]
  664. );
  665. }
  666. }
  667. }
  668. if (is_array($data)) {
  669. $db->query(" INSERT INTO faq_subscriptions 
  670. (catid, new, edit, userid)
  671. VALUES " . insertsql($data) . "
  672. ");
  673. }
  674. unset($data);
  675. // deal with articles
  676. if (is_array($_REQUEST[article])) {
  677. foreach($_REQUEST[article] AS $key => $var) {
  678. if ($_REQUEST[article_edit][$key] OR $_REQUEST[article_comment][$key]) {
  679. $data[] = array(
  680. $key, 
  681. $_REQUEST[article_edit][$key], 
  682. $session[userid]
  683. );
  684. }
  685. }
  686. }
  687. if (is_array($data)) {
  688. $db->query(" INSERT INTO faq_subscriptions
  689. (articleid, edit , userid)
  690. VALUES " . insertsql($data) . "
  691. ");
  692. }
  693. // view subscriptions
  694. $_REQUEST['do'] = "subscriptions";
  695. }
  696. ############################### SUBSCRIPTIONS ###############################
  697. if ($_REQUEST['do'] == "subscriptions") {
  698. check_user();
  699. $subpage = 'subscription';
  700. // need to be logged in
  701. if (!$session[userid]) {
  702. login_form();
  703. }
  704. $category_select = form_select('category', $catarray, $thiscategory);
  705. function getcatpath($catid) {
  706. global $categorycache;
  707. $parent = $categorycache[$catid][parent];
  708. while ($parent > 0) {
  709. $nav = " >> " .  $categorycache[$parent]['name'] . $nav;
  710. $parent = $categorycache[$parent]['parent'];
  711. }
  712. return $nav;
  713. }
  714. // category subscriptions
  715. $db->query("
  716. SELECT faq_subscriptions.*, faq_cats.name AS name, faq_articles.*
  717. FROM faq_subscriptions
  718. LEFT JOIN faq_cats ON (faq_cats.id = faq_subscriptions.catid)
  719. LEFT JOIN faq_articles ON (faq_articles.id = faq_subscriptions.articleid)
  720. WHERE faq_subscriptions.userid = '$session[userid]'
  721. ORDER by faq_cats.show_order
  722. ");
  723. while ($result = $db->row_array()) {
  724. if (!$result['articleid']) {
  725. $cat_subscription[] = array(
  726. 'id' => $result['catid'],
  727. 'name' => $result['name'],
  728. 'path' => getcatpath($result['catid']) . " >> $result[name]",
  729. 'new' => iff($result['new'], ' checked=checked'),
  730. 'edit' => iff($result['edit'], ' checked=checked')
  731. );
  732. } else {
  733. $article_subscription[] = array(
  734. 'id' => $result['articleid'],
  735. 'name' => $result['title'],
  736. 'category' => $categorycache[$result[category]][name],
  737. 'category_id' => $result[category],
  738. 'category_path' => getcatpath($result['category']),
  739. 'edit' => iff($result['edit'], ' checked=checked')
  740. );
  741. }
  742. }
  743. $nav = breadcrumbs($cat);
  744. eval(makeeval('header', 'HF_header'));
  745. eval(makeeval('footer', 'HF_footer'));
  746. eval(makeeval('faq_header', 'FAQ_header'));
  747. eval(makeeval('echo', 'FAQ_subscriptions'));
  748. }
  749. #################################### FAQ ONLY FUNCTIONS ###################################
  750. ###################### FUNCTION FAQ_CATEGORYJUMP() #######################
  751. function faq_categoryjump($catid=0, $prepend='--') {
  752. global $categorycache_parent, $jumpbox, $x;
  753. if (!$x) {
  754. $jumpbox = array('0' => 'Top Level');
  755. $x=1;
  756. }
  757. if (is_array($categorycache_parent[$catid])) {
  758. while (list($key,$val) = each($categorycache_parent[$catid])) {
  759. while (list($categoryid, $category) = each($val)) {
  760. $jumpbox[$categoryid] = $prepend . " " . $category;
  761. if (is_array($categorycache_parent[$categoryid])) {
  762. faq_categoryjump($categoryid, $prepend . "--");
  763. }
  764. }
  765. }
  766. }
  767. return $jumpbox;
  768. }
  769. ###################### FUNCTION BREADCRUMBS() #######################
  770. /* creates a bread crumb navigation for categories */
  771. function breadcrumbs($catid='') {
  772. global $categorycache, $r;
  773. while ($catid > 0) {
  774. $name = $categorycache[$catid]['name'];
  775. $id = $catid;
  776. $tmp = add_navigation($name, "faq.php?categoryid=$catid") . $tmp;
  777. $catid = $categorycache[$catid]['parent'];
  778. }
  779. return $tmp;
  780. }
  781. ###################### FUNCTION gen_pdf_faq() #######################
  782. /* recursive function for creating the PDF documentation */
  783. function gen_pdf_faq($catid, $depth = 0, $section = '', $secnum = 1) {
  784. global $query, $pdf, $db, $groups;
  785. switch ($depth) {
  786. case 0:
  787. $font = 20;
  788. break;
  789. case 1:
  790. $font = 18;
  791. break;
  792. case 2:
  793. $font = 16;
  794. break;
  795. case 3:
  796. $font = 14;
  797. break;
  798. case 4:
  799. $font = 12;
  800. break;
  801. case 5:
  802. default:
  803. $font = 10;
  804. break;
  805. }
  806. if (!$catid) {
  807. $catid = 0;
  808. } else {
  809. $secnum = 1;
  810. }
  811. $pdepth = $depth + 1;
  812. if ($section != '') {
  813. $section .= '.';
  814. }
  815. if ($catid > 0 AND (in_array($catid, $groups))) {
  816. $db->query("SELECT id, name FROM faq_cats WHERE id = '" . mysql_escape_string($catid));
  817. $result = $db->row_array();
  818. $pdf->SetFont('Times', 'B', $font);
  819. $pdf->MultiCell(0, 8, "$section $result[name]n");
  820. }
  821. // First, get the subtopics and process them.
  822. $categories = array();
  823. $db->query("SELECT id, name FROM faq_cats WHERE parent  = '" . mysql_escape_string($catid));
  824. while ($result = $db->row_array()) {
  825. $categories[] = $result[id];
  826. }
  827. if (is_array($categories)) {
  828. foreach ($categories AS $key => $val) {
  829. if ($catid > 0) {
  830. gen_pdf_faq($val, $depth+1, "$section$secnum", $secnum);
  831. } else {
  832. gen_pdf_faq($val, $depth+1, "$secnum", $secnum);
  833. }
  834. $secnum++;
  835. }
  836. }
  837. if ($font > 10) { 
  838. $font = $font - 2;
  839. }
  840. // Then print all this category's FAQs
  841. $db->query("SELECT question, answer FROM faq_articles WHERE
  842. NOT to_validate AND category = '$catid' ORDER BY show_order");
  843. $count = 0;
  844. while ($result = $db->row_array()) {
  845. $count++;
  846. $pdf->SetFont('Times', 'B', $font);
  847. $pdf->MultiCell(0, 8, "$section$count: $result[question]n");
  848. $pdf->SetFont('Times', '', 10);
  849. $pdf->MultiCell(0, 4, "$result[answer]n");
  850. }
  851. return;
  852. }
  853. ?>