[Phpbbkb-checkins] SF.net SVN: phpbbkb: [30] root
Status: Alpha
Brought to you by:
markthedaemon
From: <so...@us...> - 2006-12-15 14:33:37
|
Revision: 30 http://svn.sourceforge.net/phpbbkb/?rev=30&view=rev Author: softphp Date: 2006-12-15 06:33:32 -0800 (Fri, 15 Dec 2006) Log Message: ----------- -Removed the ucp class and just using functions.php now. Further things added in admin_kb.php. Hoping to work more on it sunday or later tonight. Modified Paths: -------------- root/admin/admin_kb.php root/kb/functions.php root/kb.php Removed Paths: ------------- root/kb/ucp_class.php Modified: root/admin/admin_kb.php =================================================================== --- root/admin/admin_kb.php 2006-12-14 00:13:52 UTC (rev 29) +++ root/admin/admin_kb.php 2006-12-15 14:33:32 UTC (rev 30) @@ -151,9 +151,11 @@ ////////////////// function generate_cat_parents($selected = false) { - global $db; + global $db, $lang; - $sql = "SELECT * FROM " . KB_CATEGORIES_TABLE . " WHERE cat_main = '0' ORDER BY cat_order"; // At the moment only one level of subcats + $sql = "SELECT cat_id, cat_title + FROM " . KB_CATEGORIES_TABLE . " + WHERE cat_main = '0' ORDER BY cat_order"; // At the moment only one level of subcats if(!$result = $db->sql_query($sql)) { message_die(GENERAL_ERROR, "Couldn't get categories from categories table", "", __LINE__, __FILE__, $sql); @@ -165,6 +167,36 @@ $cats[] = $row; } - $parent = ""; + if(!$selected) + { + $parent = '<select name="parent">\n<option value="0" selected="selected">' . $lang['kb_main'] . '</option>\n'; + } + else + { + $parent = '<select name="parent">\n<option value="0">' . $lang['kb_main'] . '</option>\n'; + } + + for($i = 0; $i < count($cats); $i++) + { + if(!$selected) + { + $parent .= '<option value="' . $cats[$i]['cat_id'] . '">' . $cats[$i]['cat_title'] . '</option>\n'; + } + else + { + if($cats[$i]['cat_id'] == $selected) + { + $parent .= '<option value="' . $cats[$i]['cat_id'] . '" selected="selected">' . $cats[$i]['cat_title'] . '</option>\n'; + } + else + { + $parent .= '<option value="' . $cats[$i]['cat_id'] . '">' . $cats[$i]['cat_title'] . '</option>\n'; + } + } + } + + $parent .= "</select>"; + + return $parent; } ?> Modified: root/kb/functions.php =================================================================== --- root/kb/functions.php 2006-12-14 00:13:52 UTC (rev 29) +++ root/kb/functions.php 2006-12-15 14:33:32 UTC (rev 30) @@ -144,10 +144,494 @@ return $cats; } -// These vars we need for making html safe +//////////////////////////////////////// +/// UCP FUNCTIONS /// +//////////////////////////////////////// $html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#'); $html_entities_replace = array('&', '<', '>', '"'); -/* +$unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#'); +$unhtml_specialchars_replace = array('>', '<', '"', '&'); + +// This is for posting articles, mostly cut out of the posting.php :) +function ucp_article_form($mode, $id, $review) +{ + global $template, $board_config, $db, $userdata, $lang, $phpbb_root_path, $phpEx, $HTTP_POST_VARS; + + $error_msg = ''; + $user_sig = $userdata['user_sig']; + + if(!empty($HTTP_POST_VARS['post'])) + { + if($mode == 'edit') + { + // Let's get the old article data + $article_id = ( !empty($HTTP_POST_VARS['id']) ) ? $HTTP_POST_VARS['id'] : false; + + $sql = "SELECT * + FROM " . KB_ARTICLES_TABLE . " + WHERE article_id = '$article_id'"; + if (!$result = $db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error while retrieving old article data.', '', __LINE__, __FILE__, $sql); + } + + $article = $db->sql_fetchrow($result); + + // if user editing set status = 0, else set status = old status :) + if($userdata['user_id'] == $article_author) + { + $article_status = "0"; + } + else + { + $article_status = $article['article_status']; + } + } + + // Add the new article + // Make all the variables :) + if ( !$board_config['allow_html'] ) + { + $html_on = 0; + } + else + { + $html_on = ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : 1; + } + + if ( !$board_config['allow_bbcode'] ) + { + $bbcode_on = 0; + } + else + { + $bbcode_on = ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : 1; + } + + if ( !$board_config['allow_smilies'] ) + { + $smilies_on = 0; + } + else + { + $smilies_on = ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : 1; + } + + $article_desc = ( !empty($HTTP_POST_VARS['desc']) ) ? trim($HTTP_POST_VARS['desc']) : ''; + $article_title = ( !empty($HTTP_POST_VARS['title']) ) ? trim($HTTP_POST_VARS['title']) : ''; + $message = ( !empty($HTTP_POST_VARS['message']) ) ? $HTTP_POST_VARS['message'] : ''; + $article_author = ($mode == 'edit') ? $article['article_author'] : $userdata['user_id']; + $article_authorname = ( $mode == 'edit' ) ? ( ( empty($HTTP_POST_VARS['authorname']) ) ? $article['article_authorname'] : $HTTP_POST_VARS['authorname'] ) : ( ( empty($HTTP_POST_VARS['authorname']) ) ? $userdata['username'] : $HTTP_POST_VARS['authorname'] ); + $bbcode_uid = ''; + $cat_id = $HTTP_POST_VARS['cats']; + $attach_sig = ( !empty($HTTP_POST_VARS['attach_sig']) ) ? 1 : 0; + + prepare_article($bbcode_on, $html_on, $smilies_on, $error_msg, $bbcode_uid, $article_title, $article_desc, $message, $cat_id); + + if ( $error_msg == '' ) + { + $current_time = time(); + + if($mode == 'post') + { + $sql = "INSERT INTO " . KB_ARTICLES_TABLE . " (article_id, article_title, article_desc, article_author, article_authorname, article_time, article_edittime, article_hits, article_editby, article_status, bbcode_uid, enable_sig, enable_html, enable_bbcode, enable_smilies, article_text) VALUES + ('', '$article_title', '$article_desc', '$article_author', '$article_authorname', '$current_time', '$current_time', '0', '" . $userdata['user_id'] . "', '0', '$bbcode_uid', '$attach_sig', '$html_on', '$bbcode_on', '$smilies_on', '$message');"; + if (!$db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error in adding article', '', __LINE__, __FILE__, $sql); + } + + $article_id = $db->sql_nextid(); + // Now make the categories + foreach($cat_id as $i => $cat) + { + $sql = "INSERT INTO " . KB_ARTICLECATS_TABLE . " VALUES ('$article_id', '$cat');\n"; + $sql2 = "UPDATE " . KB_CATEGORIES_TABLE . " SET cat_articles = cat_articles + 1 WHERE cat_id = '$cat';\n"; + + if (!$db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error in adding articles categories.', '', __LINE__, __FILE__, $sql); + } + + if (!$db->sql_query($sql2)) + { + message_die(GENERAL_ERROR, 'Error in adding updating categories articles count.', '', __LINE__, __FILE__, $sql); + } + } + + $meta = '<meta http-equiv="refresh" content="3;url=' . append_sid('kb.' . $phpEx . '?pid=view_article&id=' . $article_id) . '>"'; + $return_message = $lang['kb_added'] . '<br /><br />' . sprintf($lang['kb_click_view_article'], '<a href="' . append_sid('kb.' . phpEx . '?pid=view_article&id=' . $article_id) . '">', '</a>') . '<br /><br />' . sprintf($lang['kb_click_return_ucp'], '<a href="' . append_sid('kb.' . $phpEx . '?pid=ucp') . '">', '</a>'); + } + else + { + if(!$article_id) + { + message_die(GENERAL_ERROR, 'No article to edit.'); + } + + // First update the article table + $sql = "UPDATE " . KB_ARTICLES_TABLE . " + SET article_title = '$article_title', + article_desc = '$article_desc', + article_author = '$article_author', + article_authorname = '$article_authorname', + article_edittime = '$current_time', + article_editby = '" . $userdata['user_id'] . "', + article_status = '$article_status', + enable_sig = '$attach_sig', + enable_html = '$html_on', + enable_bbcode = '$bbcode_on', + enable_smilies = '$smilies_on', + article_text = '$message';"; + + if (!$db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error in editing article', '', __LINE__, __FILE__, $sql); + } + + // Now delete all articlecats + $sql = "DELETE FROM " . KB_ARTICLECATS_TABLE . " WHERE article_id = '$article_id'"; + + if (!$db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error in deleting articlecat entries.', '', __LINE__, __FILE__, $sql); + } + + // Last add them again doing the loop + foreach($cat_id as $i => $cat) + { + $sql = "INSERT INTO " . KB_ARTICLECATS_TABLE . " VALUES ('$article_id', '$cat');\n"; + $sql2 = "UPDATE " . KB_CATEGORIES_TABLE . " SET cat_articles = cat_articles + 1 WHERE cat_id = '$cat';\n"; + + if (!$db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Error in adding articles categories.', '', __LINE__, __FILE__, $sql); + } + + if (!$db->sql_query($sql2)) + { + message_die(GENERAL_ERROR, 'Error in adding updating categories articles count.', '', __LINE__, __FILE__, $sql); + } + } + + // Message here somewhere + } + return; + } + } + + $preview = ( !empty($HTTP_POST_VARS['preview']) ) ? true : false; + if($mode == "post" && !$preview && $error_msg == '') + { + $article_title = ''; + $article_text = ''; + $article_desc = ''; + $authorname = $userdata['username']; + $form_action = append_sid('kb.' . $phpEx . '?pid=ucp&action=post_article'); + $hidden_form_fields = ""; + $attach_sig = ( $userdata['user_id'] == ANONYMOUS ) ? 0 : $userdata['user_attachsig']; + + if ( !$board_config['allow_html'] ) + { + $html_on = 0; + } + else + { + $html_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_html'] : $userdata['user_allowhtml'] ); + } + + if ( !$board_config['allow_bbcode'] ) + { + $bbcode_on = 0; + } + else + { + $bbcode_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'] ); + } + + if ( !$board_config['allow_smilies'] ) + { + $smilies_on = 0; + } + else + { + $smilies_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'] ); + } + + if($preview) + { + // Do funny preview stuff + } + } + elseif($preview || $error_msg != '') + { + $article_title = $HTTP_POST_VARS['title']; + $article_text = $HTTP_POST_VARS['message']; + $article_desc = $HTTP_POST_VARS['desc']; + $authorname = $HTTP_POST_VARS['authorname']; + + $attach_sig = ( $HTTP_POST_VARS['enable_sig'] ) ? TRUE : 0; + + $html_on = ( $HTTP_POST_VARS['disable_html'] ) ? false : true; + $bbcode_on = ( $HTTP_POST_VARS['disable_bbcode'] ) ? false : true; + $smilies_on = ( $HTTP_POST_VARS['disable_smilies'] ) ? false : true; + + $form_action = append_sid("kb.php?pid=ucp&action=post_article"); + $hidden_form_fields = ""; + if($error_msg != "") + { + $template->set_filenames(array( + 'reg_header' => 'error_body.tpl') + ); + $template->assign_vars(array( + 'ERROR_MESSAGE' => $error_msg) + ); + $template->assign_var_from_handle('ERROR_BOX', 'reg_header'); + } + } + else + { + if(empty($id)) + { + message_die(GENERAL_ERROR, "No article defined."); + } + + $sql = "SELECT * + FROM " . KB_ARTICLES_TABLE . " + WHERE article_id = '$id'"; + if(!$result = $db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Could not query article data.', '', __LINE__, __FILE__, $sql); + } + + if($db->sql_numrows($result) == 1) + { + $article = $db->sql_fetchrow($result); + } + else + { + message_die(GENERAL_ERROR, "Article does not exist."); + } + + // Now make an array over the cats + $sql = "SELECT cat_id + FROM " . KB_ARTICLECATS_TABLE . " + WHERE article_id = '$id'"; + if(!$result = $db->sql_query($sql)) + { + message_die(GENERAL_ERROR, 'Could not query articlecats data.', '', __LINE__, __FILE__, $sql); + } + + $article_cats = array(); + while($row = $db->sql_fetchrow($result)) + { + $article_cats[] = $row; + } + + $article_title = $article['article_title']; + $article_text = $article['article_text']; + $article_desc = $article['article_desc']; + $authorname = $article['article_authorname']; + + $attach_sig = ( $article['enable_sig'] ) ? TRUE : 0; + + $html_on = ( $article['enable_html'] ) ? true : false; + $bbcode_on = ( $article['enable_bbcode'] ) ? true : false; + $smilies_on = ( $article['enable_smilies'] ) ? true : false; + + $form_action = append_sid("kb.php?pid=ucp&action=edit_article"); + $hidden_form_fields = '<input type="hidden" name="id" value="' . $id . '" />'; + } + + if ( $article['bbcode_uid'] != '' ) + { + $article_text = preg_replace('/\:(([a-z0-9]:)?)' . $article['bbcode_uid'] . '/s', '', $article_text); + } + + $article_text = str_replace('<', '<', $article_text); + $article_text = str_replace('>', '>', $article_text); + $article_text = str_replace('<br />', "\n", $article_text); + + // + // Signature toggle selection + // + if( $user_sig != '' ) + { + $template->assign_block_vars('switch_signature_checkbox', array()); + } + + // + // HTML toggle selection + // + if ( $board_config['allow_html'] ) + { + $html_status = $lang['HTML_is_ON']; + $template->assign_block_vars('switch_html_checkbox', array()); + } + else + { + $html_status = $lang['HTML_is_OFF']; + } + + // + // BBCode toggle selection + // + if ( $board_config['allow_bbcode'] ) + { + $bbcode_status = $lang['BBCode_is_ON']; + $template->assign_block_vars('switch_bbcode_checkbox', array()); + } + else + { + $bbcode_status = $lang['BBCode_is_OFF']; + } + + // Obtain categories structure + $cats = get_cats_structure(); + + // First lets sort main cats, yes i know there is a lot of loops, but i can't find a better way :S + $s_cats = '<option value="0">-' . $lang['kb_main'] . '</option>'; + if($mode == "edit") + { + for($i = 0; $i < count($cats); $i++) + { + $selected = ''; + for($k = 0; $k < count($article_cats); $k++) + { + if($article_cats[$k]['cat_id'] == $cats[$i]['cat_id']) + { + $selected = ' selected="selected"'; + } + } + $s_cats .= '<option' . $selected . ' value="' . $cats[$i]['cat_id'] . '"> --' . $cats[$i]['cat_title'] . '</option>'; + + // Sort subcats + for($j = 0; $j < count($cats[$i]['subcats']); $j++) + { + $selected = ''; + for($k = 0; $k < count($article_cats); $k++) + { + if($article_cats[$k]['cat_id'] == $cats[$i]['subcats'][$j]['cat_id']) + { + $selected = ' selected="selected"'; + } + } + $s_cats .= '<option' . $selected . ' value="' . $cats[$i]['subcats'][$j]['cat_id'] . '"> --' . $cats[$i]['subcats'][$j]['cat_title'] . '</option>'; + } + } + } + else + { + for($i = 0; $i < count($cats); $i++) + { + $s_cats .= '<option value="' . $cats[$i]['cat_id'] . '">--' . $cats[$i]['cat_title'] . '</option>'; + + // Sort subcats + for($j = 0; $j < count($cats[$i]['subcats']); $j++) + { + $s_cats .= '<option value="' . $cats[$i]['subcats'][$j]['cat_id'] . '">--' . $cats[$i]['subcats'][$j]['cat_title'] . '</option>'; + } + } + } + + // + // Smilies toggle selection + // + if ( $board_config['allow_smilies'] ) + { + $smilies_status = $lang['Smilies_are_ON']; + $template->assign_block_vars('switch_smilies_checkbox', array()); + } + else + { + $smilies_status = $lang['Smilies_are_OFF']; + } + + $template->set_filenames(array( + 'body' => 'kb_article_posting.tpl') + ); + + create_navigation("ucp", $action); + + // This is the template stuff we need no matter what + $template->assign_vars(array( + 'AUTHORNAME' => $authorname, + 'ARTICLE_TITLE' => $article_title, + 'ARTICLE' => $article_text, + 'DESC' => $article_desc, + 'HTML_STATUS' => $html_status, + 'BBCODE_STATUS' => sprintf($bbcode_status, '<a href="' . append_sid("faq." . $phpEx . "?mode=bbcode") . '" target="_phpbbcode">', '</a>'), + 'SMILIES_STATUS' => $smilies_status, + + 'L_POST_ARTICLE' => $lang['kb_post_article'], + 'L_AUTHORNAME' => $lang['kb_authorname'], + 'L_ARTICLE_NAME' => $lang['kb_articlename'], + 'L_ARTICLE_DESC' => $lang['kb_articledesc'], + 'L_ARTICLE_CATS' => $lang['kb_articlecats'], + 'L_ARTICLE_BODY' => $lang['kb_articletext'], + 'L_AUTHORNAME_DESC' => $lang['kb_authorname_desc'], + 'L_ARTICLEDESC_DESC' => $lang['kb_articledesc_desc'], // Funny one eh? + 'L_ARTICLECATS_DESC' => $lang['kb_articlecats_desc'], + + 'L_OPTIONS' => $lang['Options'], + 'L_PREVIEW' => $lang['Preview'], + 'L_SUBMIT' => $lang['Submit'], + 'L_DISABLE_HTML' => $lang['Disable_HTML_post'], + 'L_DISABLE_BBCODE' => $lang['Disable_BBCode_post'], + 'L_DISABLE_SMILIES' => $lang['Disable_Smilies_post'], + 'L_ATTACH_SIGNATURE' => $lang['Attach_signature'], + + 'L_BBCODE_B_HELP' => $lang['bbcode_b_help'], + 'L_BBCODE_I_HELP' => $lang['bbcode_i_help'], + 'L_BBCODE_U_HELP' => $lang['bbcode_u_help'], + 'L_BBCODE_Q_HELP' => $lang['bbcode_q_help'], + 'L_BBCODE_C_HELP' => $lang['bbcode_c_help'], + 'L_BBCODE_L_HELP' => $lang['bbcode_l_help'], + 'L_BBCODE_O_HELP' => $lang['bbcode_o_help'], + 'L_BBCODE_P_HELP' => $lang['bbcode_p_help'], + 'L_BBCODE_W_HELP' => $lang['bbcode_w_help'], + 'L_BBCODE_A_HELP' => $lang['bbcode_a_help'], + 'L_BBCODE_S_HELP' => $lang['bbcode_s_help'], + 'L_BBCODE_F_HELP' => $lang['bbcode_f_help'], + 'L_EMPTY_MESSAGE' => $lang['Empty_message'], + + 'L_FONT_COLOR' => $lang['Font_color'], + 'L_COLOR_DEFAULT' => $lang['color_default'], + 'L_COLOR_DARK_RED' => $lang['color_dark_red'], + 'L_COLOR_RED' => $lang['color_red'], + 'L_COLOR_ORANGE' => $lang['color_orange'], + 'L_COLOR_BROWN' => $lang['color_brown'], + 'L_COLOR_YELLOW' => $lang['color_yellow'], + 'L_COLOR_GREEN' => $lang['color_green'], + 'L_COLOR_OLIVE' => $lang['color_olive'], + 'L_COLOR_CYAN' => $lang['color_cyan'], + 'L_COLOR_BLUE' => $lang['color_blue'], + 'L_COLOR_DARK_BLUE' => $lang['color_dark_blue'], + 'L_COLOR_INDIGO' => $lang['color_indigo'], + 'L_COLOR_VIOLET' => $lang['color_violet'], + 'L_COLOR_WHITE' => $lang['color_white'], + 'L_COLOR_BLACK' => $lang['color_black'], + + 'L_FONT_SIZE' => $lang['Font_size'], + 'L_FONT_TINY' => $lang['font_tiny'], + 'L_FONT_SMALL' => $lang['font_small'], + 'L_FONT_NORMAL' => $lang['font_normal'], + 'L_FONT_LARGE' => $lang['font_large'], + 'L_FONT_HUGE' => $lang['font_huge'], + + 'L_BBCODE_CLOSE_TAGS' => $lang['Close_Tags'], + 'L_STYLES_TIP' => $lang['Styles_tip'], + + 'S_HTML_CHECKED' => ( !$html_on ) ? 'checked="checked"' : '', + 'S_BBCODE_CHECKED' => ( !$bbcode_on ) ? 'checked="checked"' : '', + 'S_SMILIES_CHECKED' => ( !$smilies_on ) ? 'checked="checked"' : '', + 'S_SIGNATURE_CHECKED' => ( $attach_sig ) ? 'checked="checked"' : '', + 'S_POST_ACTION' => $form_action, + 'CATS_HTML' => $s_cats, + 'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields) + ); +} + // // Prepare an article for the database // @@ -156,7 +640,6 @@ global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path; // Check title - $article_title = "BLABLA"; if (!empty($article_title)) { $article_title = htmlspecialchars(trim($article_title)); @@ -170,7 +653,7 @@ if(!empty($message)) { $bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : ''; - $message = prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid); + $message = prepare_article_text(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid); } else { @@ -188,21 +671,16 @@ } // Check categories - if(is_array($cat_id)) + if(!is_array($cat_id)) { - print_r($cat_id); - $cat_id = implode(",", $cat_id); - } - else - { $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['kb_empty_cats'] : $lang['kb_empty_cats']; } return; } -function prepare_message($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid = 0) +function prepare_article_text($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid = 0) { - global $board_config, $html_entities_match, $html_entities_replace; + global $board_config, $phpEx; // // Clean up the message @@ -223,6 +701,9 @@ $message = ''; + // Include functions_post for clean_html + include($phpbb_root_path . "includes/functions_post." . $phpEx); + foreach ($message_split as $part) { $tag = array(array_shift($matches[0]), array_shift($matches[1]), array_shift($matches[2])); @@ -244,5 +725,9 @@ return $message; } -*/ + +function unprepare_message($message) +{ + return preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, $message); +} ?> \ No newline at end of file Deleted: root/kb/ucp_class.php =================================================================== --- root/kb/ucp_class.php 2006-12-14 00:13:52 UTC (rev 29) +++ root/kb/ucp_class.php 2006-12-15 14:33:32 UTC (rev 30) @@ -1,693 +0,0 @@ -<?php -/*************************************************************************** - * ucp_class.php - * ------------------- - * - * copyright: phpBB KB Group - * site: http://www.phpbbknowledgebase.com - * SF Project Page: http://www.sourceforge.net/projects/phpbbkb - * - ***************************************************************************/ - -/*************************************************************************** - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - ***************************************************************************/ - -if (!defined('IN_PHPBB')) -{ - die('Hacking attempt'); -} - -// This contains the entire ucp class, so it's seperated from the rest of kb.php -class ucp -{ - var $action = ""; - var $html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#', '#"#'); - var $html_entities_replace = array('&', '<', '>', '"'); - var $unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#'); - var $unhtml_specialchars_replace = array('>', '<', '"', '&'); - - function generate_page($action, $id=0, $preview=false) - { - $this->action = $action; - switch($this->action) - { - case "articles": - break; - - case "comments": - break; - - case "post_article": - $this->article_form("post", false, $preview); - break; - - case "edit_article": - $this->article_form("edit", $id, $preview); - break; - - case "delete_article": - $this->article_delete(); - break; - - case "post_comment": // Only input - break; - - case "edit_comment": - break; - - case "delete_comment": - break; - - default: - break; - } - } - - function generate_page_title($action) - { - global $lang; - - $title = $lang['kb_ucp']; - - switch($action) - { - case "articles": - break; - - case "comments": - break; - - case "post_article": - $title .= ": " . $lang['kb_ucp_articlepost']; - break; - - case "edit_article": - $title .= ": " . $lang['kb_ucp_articleedit']; - break; - - case "delete_article": - - break; - - case "post_comment": // Only input - break; - - case "edit_comment": - break; - - case "delete_comment": - break; - - default: - break; - } - - return $title; - } - - // This is for posting articles, mostly cut out of the posting.php :) - function article_form($mode, $id, $review) - { - global $template, $board_config, $db, $userdata, $lang, $phpbb_root_path, $phpEx, $HTTP_POST_VARS; - - $error_msg = ''; - $user_sig = $userdata['user_sig']; - - if(!empty($HTTP_POST_VARS['post'])) - { - if($mode == 'edit') - { - // Let's get the old article data - $article_id = ( !empty($HTTP_POST_VARS['id']) ) ? $HTTP_POST_VARS['id'] : false; - - $sql = "SELECT * - FROM " . KB_ARTICLES_TABLE . " - WHERE article_id = '$article_id'"; - if (!$result = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error while retrieving old article data.', '', __LINE__, __FILE__, $sql); - } - - $article = $db->sql_fetchrow($result); - - // if user editing set status = 0, else set status = old status :) - if($userdata['user_id'] == $article_author) - { - $article_status = "0"; - } - else - { - $article_status = $article['article_status']; - } - } - - // Add the new article - // Make all the variables :) - if ( !$board_config['allow_html'] ) - { - $html_on = 0; - } - else - { - $html_on = ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : 1; - } - - if ( !$board_config['allow_bbcode'] ) - { - $bbcode_on = 0; - } - else - { - $bbcode_on = ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : 1; - } - - if ( !$board_config['allow_smilies'] ) - { - $smilies_on = 0; - } - else - { - $smilies_on = ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : 1; - } - - $article_desc = ( !empty($HTTP_POST_VARS['desc']) ) ? trim($HTTP_POST_VARS['desc']) : ''; - $article_title = ( !empty($HTTP_POST_VARS['title']) ) ? trim($HTTP_POST_VARS['title']) : ''; - $message = ( !empty($HTTP_POST_VARS['message']) ) ? $HTTP_POST_VARS['message'] : ''; - $article_author = ($mode == 'edit') ? $article['article_author'] : $userdata['user_id']; - $article_authorname = ( $mode == 'edit' ) ? ( ( empty($HTTP_POST_VARS['authorname']) ) ? $article['article_authorname'] : $HTTP_POST_VARS['authorname'] ) : ( ( empty($HTTP_POST_VARS['authorname']) ) ? $userdata['username'] : $HTTP_POST_VARS['authorname'] ); - $bbcode_uid = ''; - $cat_id = $HTTP_POST_VARS['cats']; - $attach_sig = ( !empty($HTTP_POST_VARS['attach_sig']) ) ? 1 : 0; - - $this->prepare_article($bbcode_on, $html_on, $smilies_on, $error_msg, $bbcode_uid, $article_title, $article_desc, $message, $cat_id); - - if ( $error_msg == '' ) - { - $current_time = time(); - - if($mode == 'post') - { - $sql = "INSERT INTO " . KB_ARTICLES_TABLE . " (article_id, article_title, article_desc, article_author, article_authorname, article_time, article_edittime, article_hits, article_editby, article_status, bbcode_uid, enable_sig, enable_html, enable_bbcode, enable_smilies, article_text) VALUES - ('', '$article_title', '$article_desc', '$article_author', '$article_authorname', '$current_time', '$current_time', '0', '" . $userdata['user_id'] . "', '0', '$bbcode_uid', '$attach_sig', '$html_on', '$bbcode_on', '$smilies_on', '$message');"; - if (!$db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error in adding article', '', __LINE__, __FILE__, $sql); - } - - $article_id = $db->sql_nextid(); - // Now make the categories - foreach($cat_id as $i => $cat) - { - $sql = "INSERT INTO " . KB_ARTICLECATS_TABLE . " VALUES ('$article_id', '$cat');\n"; - $sql2 = "UPDATE " . KB_CATEGORIES_TABLE . " SET cat_articles = cat_articles + 1 WHERE cat_id = '$cat';\n"; - - if (!$db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error in adding articles categories.', '', __LINE__, __FILE__, $sql); - } - - if (!$db->sql_query($sql2)) - { - message_die(GENERAL_ERROR, 'Error in adding updating categories articles count.', '', __LINE__, __FILE__, $sql); - } - } - - $meta = '<meta http-equiv="refresh" content="3;url=' . append_sid('kb.' . $phpEx . '?pid=view_article&id=' . $article_id) . '>"'; - $return_message = $lang['kb_added'] . '<br /><br />' . sprintf($lang['kb_click_view_article'], '<a href="' . append_sid('kb.' . phpEx . '?pid=view_article&id=' . $article_id) . '">', '</a>') . '<br /><br />' . sprintf($lang['kb_click_return_ucp'], '<a href="' . append_sid('kb.' . $phpEx . '?pid=ucp') . '">', '</a>'); - } - else - { - if(!$article_id) - { - message_die(GENERAL_ERROR, 'No article to edit.'); - } - - // First update the article table - $sql = "UPDATE " . KB_ARTICLES_TABLE . " - SET article_title = '$article_title', - article_desc = '$article_desc', - article_author = '$article_author', - article_authorname = '$article_authorname', - article_edittime = '$current_time', - article_editby = '" . $userdata['user_id'] . "', - article_status = '$article_status', - enable_sig = '$attach_sig', - enable_html = '$html_on', - enable_bbcode = '$bbcode_on', - enable_smilies = '$smilies_on', - article_text = '$message';"; - - if (!$db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error in editing article', '', __LINE__, __FILE__, $sql); - } - - // Now delete all articlecats - $sql = "DELETE FROM " . KB_ARTICLECATS_TABLE . " WHERE article_id = '$article_id'"; - - if (!$db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error in deleting articlecat entries.', '', __LINE__, __FILE__, $sql); - } - - // Last add them again doing the loop - foreach($cat_id as $i => $cat) - { - $sql = "INSERT INTO " . KB_ARTICLECATS_TABLE . " VALUES ('$article_id', '$cat');\n"; - $sql2 = "UPDATE " . KB_CATEGORIES_TABLE . " SET cat_articles = cat_articles + 1 WHERE cat_id = '$cat';\n"; - - if (!$db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Error in adding articles categories.', '', __LINE__, __FILE__, $sql); - } - - if (!$db->sql_query($sql2)) - { - message_die(GENERAL_ERROR, 'Error in adding updating categories articles count.', '', __LINE__, __FILE__, $sql); - } - } - - // Message here somewhere - } - return; - } - } - - $preview = ( !empty($HTTP_POST_VARS['preview']) ) ? true : false; - if($mode == "post" && !$preview && $error_msg == '') - { - $article_title = ''; - $article_text = ''; - $article_desc = ''; - $authorname = $userdata['username']; - $form_action = append_sid('kb.' . $phpEx . '?pid=ucp&action=post_article'); - $hidden_form_fields = ""; - $attach_sig = ( $userdata['user_id'] == ANONYMOUS ) ? 0 : $userdata['user_attachsig']; - - if ( !$board_config['allow_html'] ) - { - $html_on = 0; - } - else - { - $html_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_html'] : $userdata['user_allowhtml'] ); - } - - if ( !$board_config['allow_bbcode'] ) - { - $bbcode_on = 0; - } - else - { - $bbcode_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'] ); - } - - if ( !$board_config['allow_smilies'] ) - { - $smilies_on = 0; - } - else - { - $smilies_on = ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'] ); - } - - if($preview) - { - // Do funny preview stuff - } - } - elseif($preview || $error_msg != '') - { - $article_title = $HTTP_POST_VARS['title']; - $article_text = $HTTP_POST_VARS['message']; - $article_desc = $HTTP_POST_VARS['desc']; - $authorname = $HTTP_POST_VARS['authorname']; - - $attach_sig = ( $HTTP_POST_VARS['enable_sig'] ) ? TRUE : 0; - - $html_on = ( $HTTP_POST_VARS['disable_html'] ) ? false : true; - $bbcode_on = ( $HTTP_POST_VARS['disable_bbcode'] ) ? false : true; - $smilies_on = ( $HTTP_POST_VARS['disable_smilies'] ) ? false : true; - - $form_action = append_sid("kb.php?pid=ucp&action=post_article"); - $hidden_form_fields = ""; - if($error_msg != "") - { - $template->set_filenames(array( - 'reg_header' => 'error_body.tpl') - ); - $template->assign_vars(array( - 'ERROR_MESSAGE' => $error_msg) - ); - $template->assign_var_from_handle('ERROR_BOX', 'reg_header'); - } - } - else - { - if(empty($id)) - { - message_die(GENERAL_ERROR, "No article defined."); - } - - $sql = "SELECT * - FROM " . KB_ARTICLES_TABLE . " - WHERE article_id = '$id'"; - if(!$result = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Could not query article data.', '', __LINE__, __FILE__, $sql); - } - - if($db->sql_numrows($result) == 1) - { - $article = $db->sql_fetchrow($result); - } - else - { - message_die(GENERAL_ERROR, "Article does not exist."); - } - - // Now make an array over the cats - $sql = "SELECT cat_id - FROM " . KB_ARTICLECATS_TABLE . " - WHERE article_id = '$id'"; - if(!$result = $db->sql_query($sql)) - { - message_die(GENERAL_ERROR, 'Could not query articlecats data.', '', __LINE__, __FILE__, $sql); - } - - $article_cats = array(); - while($row = $db->sql_fetchrow($result)) - { - $article_cats[] = $row; - } - - $article_title = $article['article_title']; - $article_text = $article['article_text']; - $article_desc = $article['article_desc']; - $authorname = $article['article_authorname']; - - $attach_sig = ( $article['enable_sig'] ) ? TRUE : 0; - - $html_on = ( $article['enable_html'] ) ? true : false; - $bbcode_on = ( $article['enable_bbcode'] ) ? true : false; - $smilies_on = ( $article['enable_smilies'] ) ? true : false; - - $form_action = append_sid("kb.php?pid=ucp&action=edit_article"); - $hidden_form_fields = '<input type="hidden" name="id" value="' . $id . '" />'; - } - - if ( $article['bbcode_uid'] != '' ) - { - $article_text = preg_replace('/\:(([a-z0-9]:)?)' . $article['bbcode_uid'] . '/s', '', $article_text); - } - - $article_text = str_replace('<', '<', $article_text); - $article_text = str_replace('>', '>', $article_text); - $article_text = str_replace('<br />', "\n", $article_text); - - // - // Signature toggle selection - // - if( $user_sig != '' ) - { - $template->assign_block_vars('switch_signature_checkbox', array()); - } - - // - // HTML toggle selection - // - if ( $board_config['allow_html'] ) - { - $html_status = $lang['HTML_is_ON']; - $template->assign_block_vars('switch_html_checkbox', array()); - } - else - { - $html_status = $lang['HTML_is_OFF']; - } - - // - // BBCode toggle selection - // - if ( $board_config['allow_bbcode'] ) - { - $bbcode_status = $lang['BBCode_is_ON']; - $template->assign_block_vars('switch_bbcode_checkbox', array()); - } - else - { - $bbcode_status = $lang['BBCode_is_OFF']; - } - - // Obtain categories structure - $cats = get_cats_structure(); - - // First lets sort main cats, yes i know there is a lot of loops, but i can't find a better way :S - $s_cats = '<option value="0">-' . $lang['kb_main'] . '</option>'; - if($mode == "edit") - { - for($i = 0; $i < count($cats); $i++) - { - $selected = ''; - for($k = 0; $k < count($article_cats); $k++) - { - if($article_cats[$k]['cat_id'] == $cats[$i]['cat_id']) - { - $selected = ' selected="selected"'; - } - } - $s_cats .= '<option' . $selected . ' value="' . $cats[$i]['cat_id'] . '"> --' . $cats[$i]['cat_title'] . '</option>'; - - // Sort subcats - for($j = 0; $j < count($cats[$i]['subcats']); $j++) - { - $selected = ''; - for($k = 0; $k < count($article_cats); $k++) - { - if($article_cats[$k]['cat_id'] == $cats[$i]['subcats'][$j]['cat_id']) - { - $selected = ' selected="selected"'; - } - } - $s_cats .= '<option' . $selected . ' value="' . $cats[$i]['subcats'][$j]['cat_id'] . '"> --' . $cats[$i]['subcats'][$j]['cat_title'] . '</option>'; - } - } - } - else - { - for($i = 0; $i < count($cats); $i++) - { - $s_cats .= '<option value="' . $cats[$i]['cat_id'] . '">--' . $cats[$i]['cat_title'] . '</option>'; - - // Sort subcats - for($j = 0; $j < count($cats[$i]['subcats']); $j++) - { - $s_cats .= '<option value="' . $cats[$i]['subcats'][$j]['cat_id'] . '">--' . $cats[$i]['subcats'][$j]['cat_title'] . '</option>'; - } - } - } - - // - // Smilies toggle selection - // - if ( $board_config['allow_smilies'] ) - { - $smilies_status = $lang['Smilies_are_ON']; - $template->assign_block_vars('switch_smilies_checkbox', array()); - } - else - { - $smilies_status = $lang['Smilies_are_OFF']; - } - - $template->set_filenames(array( - 'body' => 'kb_article_posting.tpl') - ); - - create_navigation("ucp", $this->action); - - // This is the template stuff we need no matter what - $template->assign_vars(array( - 'AUTHORNAME' => $authorname, - 'ARTICLE_TITLE' => $article_title, - 'ARTICLE' => $article_text, - 'DESC' => $article_desc, - 'HTML_STATUS' => $html_status, - 'BBCODE_STATUS' => sprintf($bbcode_status, '<a href="' . append_sid("faq." . $phpEx . "?mode=bbcode") . '" target="_phpbbcode">', '</a>'), - 'SMILIES_STATUS' => $smilies_status, - - 'L_POST_ARTICLE' => $lang['kb_post_article'], - 'L_AUTHORNAME' => $lang['kb_authorname'], - 'L_ARTICLE_NAME' => $lang['kb_articlename'], - 'L_ARTICLE_DESC' => $lang['kb_articledesc'], - 'L_ARTICLE_CATS' => $lang['kb_articlecats'], - 'L_ARTICLE_BODY' => $lang['kb_articletext'], - 'L_AUTHORNAME_DESC' => $lang['kb_authorname_desc'], - 'L_ARTICLEDESC_DESC' => $lang['kb_articledesc_desc'], // Funny one eh? - 'L_ARTICLECATS_DESC' => $lang['kb_articlecats_desc'], - - 'L_OPTIONS' => $lang['Options'], - 'L_PREVIEW' => $lang['Preview'], - 'L_SUBMIT' => $lang['Submit'], - 'L_DISABLE_HTML' => $lang['Disable_HTML_post'], - 'L_DISABLE_BBCODE' => $lang['Disable_BBCode_post'], - 'L_DISABLE_SMILIES' => $lang['Disable_Smilies_post'], - 'L_ATTACH_SIGNATURE' => $lang['Attach_signature'], - - 'L_BBCODE_B_HELP' => $lang['bbcode_b_help'], - 'L_BBCODE_I_HELP' => $lang['bbcode_i_help'], - 'L_BBCODE_U_HELP' => $lang['bbcode_u_help'], - 'L_BBCODE_Q_HELP' => $lang['bbcode_q_help'], - 'L_BBCODE_C_HELP' => $lang['bbcode_c_help'], - 'L_BBCODE_L_HELP' => $lang['bbcode_l_help'], - 'L_BBCODE_O_HELP' => $lang['bbcode_o_help'], - 'L_BBCODE_P_HELP' => $lang['bbcode_p_help'], - 'L_BBCODE_W_HELP' => $lang['bbcode_w_help'], - 'L_BBCODE_A_HELP' => $lang['bbcode_a_help'], - 'L_BBCODE_S_HELP' => $lang['bbcode_s_help'], - 'L_BBCODE_F_HELP' => $lang['bbcode_f_help'], - 'L_EMPTY_MESSAGE' => $lang['Empty_message'], - - 'L_FONT_COLOR' => $lang['Font_color'], - 'L_COLOR_DEFAULT' => $lang['color_default'], - 'L_COLOR_DARK_RED' => $lang['color_dark_red'], - 'L_COLOR_RED' => $lang['color_red'], - 'L_COLOR_ORANGE' => $lang['color_orange'], - 'L_COLOR_BROWN' => $lang['color_brown'], - 'L_COLOR_YELLOW' => $lang['color_yellow'], - 'L_COLOR_GREEN' => $lang['color_green'], - 'L_COLOR_OLIVE' => $lang['color_olive'], - 'L_COLOR_CYAN' => $lang['color_cyan'], - 'L_COLOR_BLUE' => $lang['color_blue'], - 'L_COLOR_DARK_BLUE' => $lang['color_dark_blue'], - 'L_COLOR_INDIGO' => $lang['color_indigo'], - 'L_COLOR_VIOLET' => $lang['color_violet'], - 'L_COLOR_WHITE' => $lang['color_white'], - 'L_COLOR_BLACK' => $lang['color_black'], - - 'L_FONT_SIZE' => $lang['Font_size'], - 'L_FONT_TINY' => $lang['font_tiny'], - 'L_FONT_SMALL' => $lang['font_small'], - 'L_FONT_NORMAL' => $lang['font_normal'], - 'L_FONT_LARGE' => $lang['font_large'], - 'L_FONT_HUGE' => $lang['font_huge'], - - 'L_BBCODE_CLOSE_TAGS' => $lang['Close_Tags'], - 'L_STYLES_TIP' => $lang['Styles_tip'], - - 'S_HTML_CHECKED' => ( !$html_on ) ? 'checked="checked"' : '', - 'S_BBCODE_CHECKED' => ( !$bbcode_on ) ? 'checked="checked"' : '', - 'S_SMILIES_CHECKED' => ( !$smilies_on ) ? 'checked="checked"' : '', - 'S_SIGNATURE_CHECKED' => ( $attach_sig ) ? 'checked="checked"' : '', - 'S_POST_ACTION' => $form_action, - 'CATS_HTML' => $s_cats, - 'S_HIDDEN_FORM_FIELDS' => $hidden_form_fields) - ); - } - - // - // Prepare an article for the database - // - function prepare_article(&$bbcode_on, &$html_on, &$smilies_on, &$error_msg, &$bbcode_uid, &$article_title, &$article_desc, &$message, &$cat_id) - { - global $board_config, $userdata, $lang, $phpEx, $phpbb_root_path; - - // Check title - if (!empty($article_title)) - { - $article_title = htmlspecialchars(trim($article_title)); - } - else - { - $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['kb_empty_article_title'] : $lang['kb_empty_article_title']; - } - - // Check message - if(!empty($message)) - { - $bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : ''; - $message = $this->prepare_message(trim($message), $html_on, $bbcode_on, $smilies_on, $bbcode_uid); - } - else - { - $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['kb_empty_article'] : $lang['kb_empty_article']; - } - - // Check Desc - if (!empty($article_desc)) - { - $article_desc = htmlspecialchars(trim($article_desc)); - } - else - { - $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['kb_empty_article_desc'] : $lang['kb_empty_article_desc']; - } - - // Check categories - if(!is_array($cat_id)) - { - $error_msg .= (!empty($error_msg)) ? '<br />' . $lang['kb_empty_cats'] : $lang['kb_empty_cats']; - } - return; - } - - function prepare_message($message, $html_on, $bbcode_on, $smile_on, $bbcode_uid = 0) - { - global $board_config, $phpEx; - - // - // Clean up the message - // - $message = trim($message); - - if ($html_on) - { - // If HTML is on, we try to make it safe - // This approach is quite agressive and anything that does not look like a valid tag - // is going to get converted to HTML entities - $message = stripslashes($message); - $html_match = '#<[^\w<]*(\w+)((?:"[^"]*"|\'[^\']*\'|[^<>\'"])+)?>#'; - $matches = array(); - - $message_split = preg_split($html_match, $message); - preg_match_all($html_match, $message, $matches); - - $message = ''; - - // Include functions_post for clean_html - include($phpbb_root_path . "includes/functions_post." . $phpEx); - - foreach ($message_split as $part) - { - $tag = array(array_shift($matches[0]), array_shift($matches[1]), array_shift($matches[2])); - $message .= preg_replace($this->html_entities_match, $this->html_entities_replace, $part) . clean_html($tag); - } - - $message = addslashes($message); - $message = str_replace('"', '\"', $message); - } - else - { - $message = preg_replace($this->html_entities_match, $this->html_entities_replace, $message); - } - - if($bbcode_on && $bbcode_uid != '') - { - $message = bbencode_first_pass($message, $bbcode_uid); - } - - return $message; - } - - function unprepare_message($message) - { - return preg_replace($this->unhtml_specialchars_match, $this->unhtml_specialchars_replace, $message); - } -} -?> \ No newline at end of file Modified: root/kb.php =================================================================== --- root/kb.php 2006-12-14 00:13:52 UTC (rev 29) +++ root/kb.php 2006-12-15 14:33:32 UTC (rev 30) @@ -502,7 +502,7 @@ case "ucp": $action = ( isset($HTTP_GET_VARS['action']) ) ? $HTTP_GET_VARS['action'] : ""; - include($phpbb_root_path . "kb/ucp_class." . $phpEx); + /*include($phpbb_root_path . "kb/ucp_class." . $phpEx); $ucp = new ucp; // Start Page output @@ -510,7 +510,47 @@ include($phpbb_root_path . 'includes/page_header.' . $phpEx); $ucp->generate_page($action, $HTTP_GET_VARS['id'], $HTTP_GET_VARS['preview']); + */ + // The above have been removed and changed to functions.php + $id = isset($HTTP_GET_VARS['id']) ? $HTTP_GET_VARS['id'] : 0; + $preview = isset($HTTP_POST_VARS['preview']) ? true : false; + $page_title = ucp_generate_page_title($action); + include($phpbb_root_path . 'includes/page_header.' . $phpEx); + + switch($action) + { + case "articles": + break; + + case "comments": + break; + + case "post_article": + ucp_article_form("post", false, $preview); + break; + + case "edit_article": + ucp_article_form("edit", $id, $preview); + break; + + case "delete_article": + ucp_article_delete(); + break; + + case "post_comment": // Only input + break; + + case "edit_comment": + break; + + case "delete_comment": + break; + + default: + break; + } + // // Generate the page // This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |