1); $result = hesk_dbQuery('SELECT `parent`, COUNT(*) AS `num` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'kb_categories` GROUP BY `parent`'); while ($row = hesk_dbFetchAssoc($result)) { $parent[$row['parent']] = $row['num']; } $parent_copy = $parent; //print_r($parent); // Get Knowledgebase structure $kb_cat = array(); $result = hesk_dbQuery('SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'kb_categories` ORDER BY `parent` ASC, `cat_order` ASC'); while ($cat = hesk_dbFetchAssoc($result)) { // Can this category be moved at all? if ( $cat['id'] == 1 || // Main category cannot be moved ! isset($parent[$cat['parent']]) || // if the parent category isn't set $parent[$cat['parent']] < 2 // Less than 2 articles in category ) { $cat['move_up'] = false; $cat['move_down'] = false; } else { $cat['move_up'] = true; $cat['move_down'] = true; } $kb_cat[] = $cat; } //print_r($kb_cat); /* Translate main category "Knowledgebase" if needed */ $kb_cat[0]['name'] = $hesklang['kb_text']; require(HESK_PATH . 'inc/treemenu/TreeMenu.php'); $icon = 'folder.gif'; $expandedIcon = 'fa-folder-open" style="font-size:17px'; $menu = new HTML_TreeMenu(); $thislevel = array('0'); $nextlevel = array(); $i = 1; $j = 1; if (isset($_SESSION['KB_CATEGORY'])) { $selected_catid = intval($_SESSION['KB_CATEGORY']); } else { $selected_catid = 0; } while (count($kb_cat) > 0) { foreach ($kb_cat as $k=>$cat) { if (in_array($cat['parent'],$thislevel)) { $arrow = ($i - 2) % 10; $arrow = $arrow == 0 ? '' : $arrow; $up = $cat['parent']; $my = $cat['id']; $type = $cat['type'] ? '*' : ''; $selected = ($selected_catid == $my) ? 1 : 0; $cls = (isset($_SESSION['newcat']) && $_SESSION['newcat'] == $my) ? ' class="kbCatListON"' : ''; $text = str_replace('\\','\\\\',''.$cat['name'].'').$type.' ('.$cat['articles'].', '.$cat['articles_private'].', '.$cat['articles_draft'].') '; /* ' */ $text_short = $cat['name'].$type.' ('.$cat['articles'].', '.$cat['articles_private'].', '.$cat['articles_draft'].')'; $total_articles += $cat['articles']; // Generate KB menu icons $menu_icons = ' ' .' ' .' ' ; // Can this category be moved up? if ($cat['move_up'] == false || ($cat['move_up'] && $parent_copy[$cat['parent']] == $parent[$cat['parent']]) ) { $menu_icons .= ' '; } else { $menu_icons .= ' '; } // Can this category be moved down? if ($cat['move_down'] == false || ($cat['move_down'] && $parent_copy[$cat['parent']] == 1) ) { $menu_icons .= ' '; } else { $menu_icons .= ' '; } if (isset($node[$up])) { $node[$my] = &$node[$up]->addItem(new HTML_TreeNode(array('hesk_selected' => $selected, 'text' => $text, 'text_short' => $text_short, 'menu_icons' => $menu_icons, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true))); } else { $node[$my] = new HTML_TreeNode(array('hesk_selected' => $selected, 'text' => $text, 'text_short' => $text_short, 'menu_icons' => $menu_icons, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true)); } $nextlevel[] = $cat['id']; $parent_copy[$cat['parent']]--; $j++; unset($kb_cat[$k]); } } $thislevel = $nextlevel; $nextlevel = array(); /* Break after 20 recursions to avoid hang-ups in case of any problems */ if ($i > 20) { break; } $i++; } $menu->addItem($node[1]); // Create the presentation class $treeMenu = & ref_new(new HTML_TreeMenu_DHTML($menu, array('images' => '../img', 'defaultClass' => 'treeMenuDefault', 'isDynamic' => true))); $listBox = & ref_new(new HTML_TreeMenu_Listbox($menu)); /* Hide new article and new category forms by default */ if (!isset($_SESSION['hide'])) { $_SESSION['hide'] = array( //'treemenu' => 1, 'new_article' => 1, 'new_category' => 1, ); } echo ''; /* Hide tree menu? */ if (!isset($_SESSION['hide']['treemenu'])) { ?>

>



required>


 
.
 '; /* Clean unneeded session variables */ hesk_cleanSessionVars(array('hide','manage_cat','edit_article')); require_once(HESK_PATH . 'inc/footer.inc.php'); exit(); } // END list_draft() function list_private() { global $hesk_settings, $hesklang; $catid = 1; $kb_cat = hesk_getCategoriesArray(1); /* Translate main category "Knowledgebase" if needed */ $kb_cat[0]['name'] = $hesklang['kb_text']; /* Get list of private categories */ $private_categories = array(); $res = hesk_dbQuery("SELECT `id` FROM `". hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` WHERE `type`='1'"); $num = hesk_dbNumRows($res); if ($num) { while ($row = hesk_dbFetchAssoc($res)) { $private_categories[] = intval($row['id']); } } /* Print header */ require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); /* Print main manage users page */ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); $res = hesk_dbQuery("SELECT * FROM `". hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `type`='1' " . (count($private_categories) ? " OR `catid` IN('" . implode("','", $private_categories) . "') " : '') . " ORDER BY `catid` ASC, `id` ASC"); $num = hesk_dbNumRows($res); ?>

'.$hesklang['kb_no_part'].'

'; } else { ?> ' . mfh_get_stars(hesk_round_to_half($article['rating'])) . ' (' . $article['votes'] . ')'; } else { $rat = ''; } ?>
 
.  
 '; /* Clean unneeded session variables */ hesk_cleanSessionVars(array('hide','manage_cat','edit_article')); require_once(HESK_PATH . 'inc/footer.inc.php'); exit(); } // END list_private() function import_article() { global $hesk_settings, $hesklang, $listBox; $_SESSION['hide'] = array( 'treemenu' => 1, //'new_article' => 1, 'new_category' => 1, ); $_SESSION['KB_CATEGORY'] = 1; // Get ticket ID $trackingID = hesk_cleanID(); if (empty($trackingID)) { return false; } // Get ticket info $res = hesk_dbQuery("SELECT `id`,`category`,`subject`,`message`,`owner` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."tickets` WHERE `trackid`='".hesk_dbEscape($trackingID)."' LIMIT 1"); if (hesk_dbNumRows($res) != 1) { return false; } $ticket = hesk_dbFetchAssoc($res); // Permission to view this ticket? if ($ticket['owner'] && $ticket['owner'] != $_SESSION['id'] && ! hesk_checkPermission('can_view_ass_others',0)) { return false; } if ( ! $ticket['owner'] && ! hesk_checkPermission('can_view_unassigned',0)) { return false; } // Is this user allowed to view tickets inside this category? if ( ! hesk_okCategory($ticket['category'],0)) { return false; } // Set article contents if ($hesk_settings['kb_wysiwyg']) { // With WYSIWYG editor $_SESSION['new_article'] = array( 'html' => 1, 'subject' => $ticket['subject'], 'content' => hesk_htmlspecialchars($ticket['message']), ); } else { // Without WYSIWYG editor * $_SESSION['new_article'] = array( 'html' => 0, 'subject' => $ticket['subject'], 'content' => hesk_msgToPlain($ticket['message']), ); } // Get messages from replies to the ticket $res = hesk_dbQuery("SELECT `message` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."replies` WHERE `replyto`='".intval($ticket['id'])."' ORDER BY `id` ASC"); while ($reply=hesk_dbFetchAssoc($res)) { if ($hesk_settings['kb_wysiwyg']) { $_SESSION['new_article']['content'] .= "

" . hesk_htmlspecialchars($reply['message']); } else { $_SESSION['new_article']['content'] .= "\n\n" . hesk_msgToPlain($reply['message']); } } hesk_process_messages($hesklang['import'],'NOREDIRECT','NOTICE'); } // END add_article() function add_article() { global $hesk_settings, $hesklang; $_SESSION['hide'] = array( 'treemenu' => 1, //'new_article' => 1, 'new_category' => 1, ); $_SESSION['KB_CATEGORY'] = intval( hesk_GET('catid', 1) ); } // END add_article() function add_category() { global $hesk_settings, $hesklang; $_SESSION['hide'] = array( 'treemenu' => 1, 'new_article' => 1, //'new_category' => 1, 'cat_treemenu' => 1, ); $_SESSION['KB_CATEGORY'] = intval( hesk_GET('parent', 1) ); } // END add_category() function remove_kb_att() { global $hesk_settings, $hesklang; // A security check hesk_token_check(); $att_id = intval( hesk_GET('kb_att') ) or hesk_error($hesklang['inv_att_id']); $id = intval( hesk_GET('id', 1) ); // Get attachment details $res = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` WHERE `att_id`='".intval($att_id)."'"); // Does the attachment exist? if ( hesk_dbNumRows($res) != 1 ) { hesk_process_messages($hesklang['inv_att_id'], 'manage_knowledgebase.php'); } $att = hesk_dbFetchAssoc($res); // Delete the file if it exists hesk_unlink(HESK_PATH.$hesk_settings['attach_dir'].'/'.$att['saved_name']); hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` WHERE `att_id`='".intval($att_id)."'"); $res = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `id`='".intval($id)."'"); $art = hesk_dbFetchAssoc($res); // Make log entry $revision = sprintf($hesklang['thist12'],hesk_date(),$att['real_name'],$_SESSION['name'].' ('.$_SESSION['user'].')'); // Remove attachment from article $art['attachments'] = str_replace($att_id.'#'.$att['real_name'].',','',$art['attachments']); hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `attachments`='".hesk_dbEscape($art['attachments'])."', `history`=CONCAT(`history`,'".hesk_dbEscape($revision)."') WHERE `id`='".intval($id)."'"); hesk_process_messages($hesklang['kb_att_rem'],'manage_knowledgebase.php?a=edit_article&id='.$id,'SUCCESS'); } // END remove_kb_att() function edit_category() { global $hesk_settings, $hesklang; /* A security check */ hesk_token_check('POST'); $_SESSION['hide'] = array( 'article_list' => 1, ); $hesk_error_buffer = array(); $catid = intval( hesk_POST('catid') ) or hesk_error($hesklang['kb_cat_inv']); $title = hesk_input( hesk_POST('title') ) or $hesk_error_buffer[] = $hesklang['kb_cat_e_title']; $parent = intval( hesk_POST('parent', 1) ); $type = empty($_POST['type']) ? 0 : 1; /* Category can't be it's own parent */ if ($parent == $catid) { $hesk_error_buffer[] = $hesklang['kb_spar']; } /* Any errors? */ if (count($hesk_error_buffer)) { $_SESSION['manage_cat'] = array( 'type' => $type, 'parent' => $parent, 'title' => $title, ); $tmp = ''; foreach ($hesk_error_buffer as $error) { $tmp .= "
  • $error
  • \n"; } $hesk_error_buffer = $tmp; $hesk_error_buffer = $hesklang['rfm'].'

    '; hesk_process_messages($hesk_error_buffer,'./manage_knowledgebase.php?a=manage_cat&catid='.$catid); } /* Delete category or just update it? */ if ( hesk_POST('dodelete')=='Y') { // Delete contents if ( hesk_POST('movearticles') == 'N') { // Delete all articles and all subcategories delete_category_recursive($catid); } // Move contents else { // -> Update category of articles in the category we are deleting hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `catid`=".intval($parent)." WHERE `catid`='".intval($catid)."'"); // -> Update parent category of subcategories hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `parent`=".intval($parent)." WHERE `parent`='".intval($catid)."'"); // -> Update article counts to make sure they are correct update_count(); } // Now delete the category hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` WHERE `id`='".intval($catid)."'"); $_SESSION['hide'] = array( //'treemenu' => 1, 'new_article' => 1, 'new_category' => 1, ); hesk_process_messages($hesklang['kb_cat_dlt'],'./manage_knowledgebase.php','SUCCESS'); } hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `name`='".hesk_dbEscape($title)."',`parent`=".intval($parent).",`type`='".intval($type)."' WHERE `id`='".intval($catid)."'"); unset($_SESSION['hide']); hesk_process_messages($hesklang['your_cat_mod'],'./manage_knowledgebase.php?a=manage_cat&catid='.$catid,'SUCCESS'); } // END edit_category() function save_article() { global $hesk_settings, $hesklang, $hesk_error_buffer; /* A security check */ hesk_token_check('POST'); $hesk_error_buffer = array(); $id = intval( hesk_POST('id') ) or hesk_error($hesklang['kb_art_id']); $catid = intval( hesk_POST('catid', 1) ); $type = intval( hesk_POST('type') ); $type = ($type < 0 || $type > 2) ? 0 : $type; $html = $hesk_settings['kb_wysiwyg'] ? 1 : (empty($_POST['html']) ? 0 : 1); $now = hesk_date(); $old_catid = intval( hesk_POST('old_catid') ); $old_type = intval( hesk_POST('old_type') ); $old_type = ($old_type < 0 || $old_type > 2) ? 0 : $old_type; $from = hesk_POST('from'); $subject = hesk_input( hesk_POST('subject') ) or $hesk_error_buffer[] = $hesklang['kb_e_subj']; if ($html) { if (empty($_POST['content'])) { $hesk_error_buffer[] = $hesklang['kb_e_cont']; } $content = hesk_getHTML( hesk_POST('content') ); // Clean the HTML code require(HESK_PATH . 'inc/htmlpurifier/HTMLPurifier.php'); $purifier = new HeskHTMLPurifier(); $content = $purifier->heskPurify($content); } else { $content = hesk_input( hesk_POST('content') ) or $hesk_error_buffer[] = $hesklang['kb_e_cont']; $content = nl2br($content); $content = hesk_makeURL($content); } $sticky = isset($_POST['sticky']) ? 1 : 0; $keywords = hesk_input( hesk_POST('keywords') ); $extra_sql = ''; if ( hesk_POST('resetviews')=='Y') { $extra_sql .= ',`views`=0 '; } if (hesk_POST('resetvotes')=='Y') { $extra_sql .= ',`votes`=0, `rating`=0 '; } /* Article attachments */ define('KB',1); require_once(HESK_PATH . 'inc/posting_functions.inc.php'); $attachments = array(); $use_legacy_attachments = hesk_POST('use-legacy-attachments', 0); $myattachments=''; if ($hesk_settings['attachments']['use']) { require_once(HESK_PATH . 'inc/attachments.inc.php'); if ($use_legacy_attachments) { for ($i=1; $i<=$hesk_settings['attachments']['max_number']; $i++) { $att = hesk_uploadFile($i); if ( ! empty($att)) { $attachments[$i] = $att; } } } else { // The user used the new drag-and-drop system. $temp_attachment_ids = hesk_POST_array('attachment-ids'); foreach ($temp_attachment_ids as $temp_attachment_id) { // Simply get the temp info and move it to the attachments table $temp_attachment = mfh_getTemporaryAttachment($temp_attachment_id); $attachments[] = $temp_attachment; mfh_deleteTemporaryAttachment($temp_attachment_id); } } } /* Any errors? */ if (count($hesk_error_buffer)) { // Remove any successfully uploaded attachments if ($hesk_settings['attachments']['use']) { hesk_removeAttachments($attachments); } $_SESSION['edit_article'] = array( 'type' => $type, 'html' => $html, 'subject' => $subject, 'content' => hesk_input( hesk_POST('content') ), 'keywords' => $keywords, 'catid' => $catid, 'sticky' => $sticky, 'resetviews' => (isset($_POST['resetviews']) ? 'Y' : 0), 'resetvotes' => (isset($_POST['resetvotes']) ? 'Y' : 0), ); $tmp = ''; foreach ($hesk_error_buffer as $error) { $tmp .= "
  • $error
  • \n"; } $hesk_error_buffer = $tmp; $hesk_error_buffer = $hesklang['rfm'].'

    '; hesk_process_messages($hesk_error_buffer,'./manage_knowledgebase.php?a=edit_article&id='.$id.'&from='.$from); } /* Add to database */ if (!empty($attachments)) { foreach ($attachments as $myatt) { hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` (`saved_name`,`real_name`,`size`) VALUES ('".hesk_dbEscape($myatt['saved_name'])."', '".hesk_dbEscape($myatt['real_name'])."', '".intval($myatt['size'])."')"); $myattachments .= hesk_dbInsertID() . '#' . $myatt['real_name'] .','; } $extra_sql .= ", `attachments` = CONCAT(`attachments`, '".$myattachments."') "; } /* Update article in the database */ $revision = sprintf($hesklang['revision2'],$now,$_SESSION['name'].' ('.$_SESSION['user'].')'); hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `catid`=".intval($catid).", `subject`='".hesk_dbEscape($subject)."', `content`='".hesk_dbEscape($content)."', `keywords`='".hesk_dbEscape($keywords)."' $extra_sql , `type`='".intval($type)."', `html`='".intval($html)."', `sticky`='".intval($sticky)."', `history`=CONCAT(`history`,'".hesk_dbEscape($revision)."') WHERE `id`='".intval($id)."'"); $_SESSION['artord'] = $id; // Update proper category article count // (just do them all to be sure, don't compliate...) update_count(); // Update article order update_article_order($catid); // Redirect to the correct page switch ($from) { case 'draft': $redirect_action = 'a=list_draft'; break; case 'private': $redirect_action = 'a=list_private'; break; default: $redirect_action = 'a=manage_cat&catid='.$catid; break; } hesk_process_messages($hesklang['your_kb_mod'],'./manage_knowledgebase.php?'.$redirect_action,'SUCCESS'); } // END save_article() function edit_article() { global $hesk_settings, $hesklang, $listBox; $hesk_error_buffer = array(); $id = intval( hesk_GET('id') ) or hesk_process_messages($hesklang['kb_art_id'],'./manage_knowledgebase.php'); /* Get article details */ $result = hesk_dbQuery("SELECT * FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `id`='".intval($id)."' LIMIT 1"); if (hesk_dbNumRows($result) != 1) { hesk_process_messages($hesklang['kb_art_id'],'./manage_knowledgebase.php'); } $article = hesk_dbFetchAssoc($result); if ($hesk_settings['kb_wysiwyg'] || $article['html']) { $article['content'] = hesk_htmlspecialchars($article['content']); } else { $article['content'] = hesk_msgToPlain($article['content']); } $catid = $article['catid']; $from = hesk_GET('from'); if (isset($_SESSION['edit_article'])) { $_SESSION['edit_article'] = hesk_stripArray($_SESSION['edit_article']); $article['type'] = $_SESSION['edit_article']['type']; $article['html'] = $_SESSION['edit_article']['html']; $article['subject'] = $_SESSION['edit_article']['subject']; $article['content'] = $_SESSION['edit_article']['content']; $article['keywords'] = $_SESSION['edit_article']['keywords']; $article['catid'] = $_SESSION['edit_article']['catid']; $article['sticky'] = $_SESSION['edit_article']['sticky']; } /* Get categories */ $result = hesk_dbQuery('SELECT * FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'kb_categories` ORDER BY `parent` ASC, `cat_order` ASC'); $kb_cat = array(); while ($cat = hesk_dbFetchAssoc($result)) { $kb_cat[] = $cat; if ($cat['id'] == $article['catid']) { $this_cat = $cat; $this_cat['parent'] = $article['catid']; } } /* Translate main category "Knowledgebase" if needed */ $kb_cat[0]['name'] = $hesklang['kb_text']; require(HESK_PATH . 'inc/treemenu/TreeMenu.php'); $icon = HESK_PATH . 'img/folder.gif'; $expandedIcon = 'fa-folder-open" style="font-size:17px'; $menu = new HTML_TreeMenu(); $thislevel = array('0'); $nextlevel = array(); $i = 1; $j = 1; while (count($kb_cat) > 0) { foreach ($kb_cat as $k=>$cat) { if (in_array($cat['parent'],$thislevel)) { $up = $cat['parent']; $my = $cat['id']; $type = $cat['type'] ? '*' : ''; $text_short = $cat['name'].$type.' ('.$cat['articles'].', '.$cat['articles_private'].', '.$cat['articles_draft'].')'; if (isset($node[$up])) { $node[$my] = &$node[$up]->addItem(new HTML_TreeNode(array('hesk_parent' => $this_cat['parent'], 'text' => 'Text', 'text_short' => $text_short, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true))); } else { $node[$my] = new HTML_TreeNode(array('hesk_parent' => $this_cat['parent'], 'text' => 'Text', 'text_short' => $text_short, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true)); } $nextlevel[] = $cat['id']; $j++; unset($kb_cat[$k]); } } $thislevel = $nextlevel; $nextlevel = array(); /* Break after 20 recursions to avoid hang-ups in case of any problems */ if ($i > 20) { break; } $i++; } $menu->addItem($node[1]); // Create the presentation class $listBox = & ref_new(new HTML_TreeMenu_Listbox($menu)); /* Print header */ require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); /* Print main manage users page */ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); ?>

    >


    '.$hesklang['dela'].' '; echo ''.$hesklang['dnl'].' '.$att_name.' '; echo ''.$att_name.'
    '; } echo '
    '; } ?>

    0) { foreach ($kb_cat as $k=>$cat) { if (in_array($cat['parent'],$thislevel)) { $up = $cat['parent']; $my = $cat['id']; $type = $cat['type'] ? '*' : ''; $text_short = $cat['name'].$type.' ('.$cat['articles'].', '.$cat['articles_private'].', '.$cat['articles_draft'].')'; if (isset($node[$up])) { $node[$my] = &$node[$up]->addItem(new HTML_TreeNode(array('hesk_parent' => $this_cat['parent'], 'text' => 'Text', 'text_short' => $text_short, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true))); } else { $node[$my] = new HTML_TreeNode(array('hesk_parent' => $this_cat['parent'], 'text' => 'Text', 'text_short' => $text_short, 'hesk_catid' => $cat['id'], 'hesk_select' => 'option'.$j, 'icon' => $icon, 'expandedIcon' => $expandedIcon, 'expanded' => true)); } $nextlevel[] = $cat['id']; $j++; unset($kb_cat[$k]); } } $thislevel = $nextlevel; $nextlevel = array(); /* Break after 20 recursions to avoid hang-ups in case of any problems */ if ($i > 20) { break; } $i++; } $menu->addItem($node[1]); // Create the presentation class $listBox = & ref_new(new HTML_TreeMenu_Listbox($menu)); /* Print header */ require_once(HESK_PATH . 'inc/headerAdmin.inc.php'); /* Print main manage users page */ require_once(HESK_PATH . 'inc/show_admin_nav.inc.php'); ?>

    '.$this_cat['name']).''; ?>

    '.$hesklang['kb_no_art'].'

    '; } else { /* Get number of sticky articles */ $res2 = hesk_dbQuery("SELECT COUNT(*) FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `catid`='{$catid}' AND `sticky` = '1' "); $num_sticky = hesk_dbResult($res2); $num_nosticky = $num - $num_sticky; ?> ' . $hesklang['kb_private'] . ''; break; case '2': $type = '' . $hesklang['kb_draft'] . ''; break; default: $type = '' . $hesklang['kb_published'] . ''; } if ($hesk_settings['kb_rating']) { $alt = $article['rating'] ? sprintf($hesklang['kb_rated'], sprintf("%01.1f", $article['rating'])) : $hesklang['kb_not_rated']; $rat = ''; } else { $rat = ''; } ?>
        
    ' . mfh_get_stars(hesk_round_to_half($article['rating'])) . ' (' . $article['votes'] . ')
    . 1) { if ($k == 1) { ?> 1 || $num_nosticky > 1 ) { echo ' '; } ?>  
    1, 'new_article' => 1, //'new_category' => 1, ); $parent = intval( hesk_POST('parent', 1) ); $type = empty($_POST['type']) ? 0 : 1; $_SESSION['KB_CATEGORY'] = $parent; $_SERVER['PHP_SELF'] = 'manage_knowledgebase.php'; /* Check that title is valid */ $title = hesk_input( hesk_POST('title') ); if (!strlen($title)) { $_SESSION['new_category'] = array( 'type' => $type, ); hesk_process_messages($hesklang['kb_cat_e_title'],$_SERVER['PHP_SELF']); } /* Get the latest reply_order */ $res = hesk_dbQuery('SELECT `cat_order` FROM `'.hesk_dbEscape($hesk_settings['db_pfix']).'kb_categories` ORDER BY `cat_order` DESC LIMIT 1'); $row = hesk_dbFetchRow($res); $my_order = $row[0]+10; $result = hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` (`name`,`parent`,`cat_order`,`type`) VALUES ('".hesk_dbEscape($title)."','".intval($parent)."','".intval($my_order)."','".intval($type)."')"); $_SESSION['newcat'] = hesk_dbInsertID(); $_SESSION['hide'] = array( 'treemenu' => 1, 'new_article' => 1, //'new_category' => 1, 'cat_treemenu' => 1, ); hesk_process_messages($hesklang['kb_cat_added2'],$_SERVER['PHP_SELF'],'SUCCESS'); } // End new_category() function new_article() { global $hesk_settings, $hesklang, $listBox; global $hesk_error_buffer; /* A security check */ # hesk_token_check('POST'); $_SESSION['hide'] = array( 'treemenu' => 1, //'new_article' => 1, 'new_category' => 1, ); $hesk_error_buffer = array(); $catid = intval( hesk_POST('catid', 1) ); $type = empty($_POST['type']) ? 0 : (hesk_POST('type') == 2 ? 2 : 1); $html = $hesk_settings['kb_wysiwyg'] ? 1 : (empty($_POST['html']) ? 0 : 1); $now = hesk_date(); // Prevent submitting duplicate articles by reloading manage_knowledgebase.php page if (isset($_SESSION['article_submitted'])) { header('Location:manage_knowledgebase.php?a=manage_cat&catid=' . $catid); exit(); } $_SESSION['KB_CATEGORY'] = $catid; $subject = hesk_input( hesk_POST('subject') ) or $hesk_error_buffer[] = $hesklang['kb_e_subj']; if ($html) { if (empty($_POST['content'])) { $hesk_error_buffer[] = $hesklang['kb_e_cont']; } $content = hesk_getHTML( hesk_POST('content') ); // Clean the HTML code require(HESK_PATH . 'inc/htmlpurifier/HTMLPurifier.php'); $purifier = new HeskHTMLPurifier(); $content = $purifier->heskPurify($content); } else { $content = hesk_input( hesk_POST('content') ) or $hesk_error_buffer[] = $hesklang['kb_e_cont']; $content = nl2br($content); $content = hesk_makeURL($content); } $sticky = isset($_POST['sticky']) ? 1 : 0; $keywords = hesk_input( hesk_POST('keywords') ); /* Article attachments */ define('KB',1); require_once(HESK_PATH . 'inc/posting_functions.inc.php'); $attachments = array(); $use_legacy_attachments = hesk_POST('use-legacy-attachments', 0); $myattachments=''; if ($hesk_settings['attachments']['use']) { require_once(HESK_PATH . 'inc/attachments.inc.php'); if ($use_legacy_attachments) { for ($i=1; $i<=$hesk_settings['attachments']['max_number']; $i++) { $att = hesk_uploadFile($i); if ( ! empty($att)) { $attachments[$i] = $att; } } } else { // The user used the new drag-and-drop system. $temp_attachment_ids = hesk_POST_array('attachment-ids'); foreach ($temp_attachment_ids as $temp_attachment_id) { // Simply get the temp info and move it to the attachments table $temp_attachment = mfh_getTemporaryAttachment($temp_attachment_id); $attachments[] = $temp_attachment; mfh_deleteTemporaryAttachment($temp_attachment_id); } } } /* Any errors? */ if (count($hesk_error_buffer)) { // Remove any successfully uploaded attachments if ($hesk_settings['attachments']['use']) { hesk_removeAttachments($attachments); } $_SESSION['new_article'] = array( 'type' => $type, 'html' => $html, 'subject' => $subject, 'content' => hesk_input( hesk_POST('content') ), 'keywords' => $keywords, 'sticky' => $sticky, ); $tmp = ''; foreach ($hesk_error_buffer as $error) { $tmp .= "
  • $error
  • \n"; } $hesk_error_buffer = $tmp; $hesk_error_buffer = $hesklang['rfm'].'

    '; hesk_process_messages($hesk_error_buffer,'manage_knowledgebase.php'); } $revision = sprintf($hesklang['revision1'],$now,$_SESSION['name'].' ('.$_SESSION['user'].')'); /* Add to database */ if ( ! empty($attachments)) { foreach ($attachments as $myatt) { hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` (`saved_name`,`real_name`,`size`) VALUES ('".hesk_dbEscape($myatt['saved_name'])."','".hesk_dbEscape($myatt['real_name'])."','".intval($myatt['size'])."')"); $myattachments .= hesk_dbInsertID() . '#' . $myatt['real_name'] .','; } } /* Get the latest reply_order */ $res = hesk_dbQuery("SELECT `art_order` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `catid`='".intval($catid)."' AND `sticky` = '" . intval($sticky) . "' ORDER BY `art_order` DESC LIMIT 1"); $row = hesk_dbFetchRow($res); $my_order = $row[0]+10; /* Insert article into database */ hesk_dbQuery("INSERT INTO `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` (`catid`,`dt`,`author`,`subject`,`content`,`keywords`,`type`,`html`,`sticky`,`art_order`,`history`,`attachments`) VALUES ( '".intval($catid)."', NOW(), '".intval($_SESSION['id'])."', '".hesk_dbEscape($subject)."', '".hesk_dbEscape($content)."', '".hesk_dbEscape($keywords)."', '".intval($type)."', '".intval($html)."', '".intval($sticky)."', '".intval($my_order)."', '".hesk_dbEscape($revision)."', '".hesk_dbEscape($myattachments)."' )"); $_SESSION['artord'] = hesk_dbInsertID(); // Update category article count if ($type == 0) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles`=`articles`+1 WHERE `id`='".intval($catid)."'"); } else if ($type == 1) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles_private`=`articles_private`+1 WHERE `id`='".intval($catid)."'"); } else { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles_draft`=`articles_draft`+1 WHERE `id`='".intval($catid)."'"); } unset($_SESSION['hide']); $_SESSION['article_submitted']=1; hesk_process_messages($hesklang['your_kb_added'],'NOREDIRECT','SUCCESS'); $_GET['catid'] = $catid; manage_category(); } // End new_article() function remove_article() { global $hesk_settings, $hesklang; /* A security check */ hesk_token_check(); $id = intval( hesk_GET('id') ) or hesk_error($hesklang['kb_art_id']); /* Get article details */ $result = hesk_dbQuery("SELECT `catid`, `type`, `attachments` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `id`='".intval($id)."' LIMIT 1"); if (hesk_dbNumRows($result) != 1) { hesk_error($hesklang['kb_art_id']); } $article = hesk_dbFetchAssoc($result); $catid = intval($article['catid']); $from = hesk_GET('from'); $result = hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `id`='".intval($id)."'"); // Remove any attachments delete_kb_attachments($article['attachments']); // Update category article count if ($article['type'] == 0) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles`=`articles`-1 WHERE `id`='{$catid}'"); } else if ($article['type'] == 1) { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles_private`=`articles_private`-1 WHERE `id`='{$catid}'"); } else { hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles_draft`=`articles_draft`-1 WHERE `id`='{$catid}'"); } // Redirect to the correct page switch ($from) { case 'draft': $redirect_action = 'a=list_draft'; break; case 'private': $redirect_action = 'a=list_private'; break; default: $redirect_action = 'a=manage_cat&catid='.$catid; break; } hesk_process_messages($hesklang['your_kb_deleted'],'./manage_knowledgebase.php?'.$redirect_action,'SUCCESS'); } // End remove_article() function order_category() { global $hesk_settings, $hesklang; /* A security check */ hesk_token_check(); $catid = intval( hesk_GET('catid') ) or hesk_error($hesklang['kb_cat_inv']); $move = intval( hesk_GET('move') ); $_SESSION['newcat'] = $catid; $result = hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `cat_order`=`cat_order`+".intval($move)." WHERE `id`='".intval($catid)."'"); if (hesk_dbAffectedRows() != 1) { hesk_error($hesklang['kb_cat_inv']); } update_category_order(); header('Location: manage_knowledgebase.php'); exit(); } // End order_category() function order_article() { global $hesk_settings, $hesklang; /* A security check */ hesk_token_check(); $id = intval( hesk_GET('id') ) or hesk_error($hesklang['kb_art_id']); $catid = intval( hesk_GET('catid') ) or hesk_error($hesklang['kb_cat_inv']); $move = intval( hesk_GET('move') ); $_SESSION['artord'] = $id; $result = hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `art_order`=`art_order`+".intval($move)." WHERE `id`='".intval($id)."'"); if (hesk_dbAffectedRows() != 1) { hesk_error($hesklang['kb_art_id']); } /* Update article order */ update_article_order($catid); header('Location: manage_knowledgebase.php?a=manage_cat&catid='.$catid); exit(); } // End order_article() function show_treeMenu() { global $hesk_settings, $hesklang, $treeMenu; ?>

    printMenu(); ?> =
    =
    =
    (1, 2, 3) =
    '.$hesklang['gopr'].' | '; $link['newa'] = ' '.$hesklang['kb_i_art'].' | '; $link['newc'] = ' '.$hesklang['kb_i_cat'].' | '; if ($hide && isset($link[$hide])) { $link[$hide] = preg_replace('##', '', $link[$hide]); $link[$hide] = str_replace('','',$link[$hide]); } ?>

    :

     
    $value) { $value['articles'] = isset($value['articles']) ? $value['articles'] : 0; $value['articles_private'] = isset($value['articles_private']) ? $value['articles_private'] : 0; $value['articles_draft'] = isset($value['articles_draft']) ? $value['articles_draft'] : 0; hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` SET `articles`={$value['articles']}, `articles_private`={$value['articles_private']}, `articles_draft`={$value['articles_draft']} WHERE `id`='{$catid}'"); } // Show a success message? if ($show_success) { hesk_process_messages($hesklang['acv'], 'NOREDIRECT','SUCCESS'); } return true; } // END update_count() function delete_category_recursive($catid) { global $hesk_settings, $hesklang; $catid = intval($catid); // Don't allow infinite loops... just in case $hesk_settings['recursive_loop'] = isset($hesk_settings['recursive_loop']) ? $hesk_settings['recursive_loop'] + 1 : 1; if ($hesk_settings['recursive_loop'] > 20) { return false; } // Make sure any attachments are deleted $result = hesk_dbQuery("SELECT `attachments` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `catid`='{$catid}'"); while ($article = hesk_dbFetchAssoc($result)) { delete_kb_attachments($article['attachments']); } // Remove articles from database hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` WHERE `catid`='{$catid}'"); // Delete all sub-categories $result = hesk_dbQuery("SELECT `id` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_categories` WHERE `parent`='{$catid}'"); while ($cat = hesk_dbFetchAssoc($result)) { delete_category_recursive($cat['id']); } return true; } // END delete_category_recursive() function delete_kb_attachments($attachments) { global $hesk_settings, $hesklang; // If nothing to delete just return if (empty($attachments)) { return true; } // Do the delete $att = explode(',',substr($attachments, 0, -1)); foreach ($att as $myatt) { list($att_id, $att_name) = explode('#', $myatt); // Get attachment saved name $result = hesk_dbQuery("SELECT `saved_name` FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` WHERE `att_id`='".intval($att_id)."' LIMIT 1"); if (hesk_dbNumRows($result) == 1) { $file = hesk_dbFetchAssoc($result); hesk_unlink(HESK_PATH.$hesk_settings['attach_dir'].'/'.$file['saved_name']); } $result = hesk_dbQuery("DELETE FROM `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_attachments` WHERE `att_id`='".intval($att_id)."'"); } return true; } // delete_kb_attachments() function hesk_stray_article($id) { global $hesk_settings, $hesklang, $article; // Set article to category ID 1 $article['catid'] = 1; // Update database hesk_dbQuery("UPDATE `".hesk_dbEscape($hesk_settings['db_pfix'])."kb_articles` SET `catid`=1 WHERE `id`='".intval($id)."'"); // Update count of articles in categories update_count(); // Return new category ID return 1; } // END hesk_stray_article() ?>