<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[Latest posts for the topic "Display the name of JForum's user as his real name instead of his username(login ID)"]]></title>
		<link>http://www.andowson.com/posts/list/7.page</link>
		<description><![CDATA[Latest messages posted in the topic "Display the name of JForum's user as his real name instead of his username(login ID)"]]></description>
		<generator>JForum - http://www.jforum.net</generator>
			<item>
				<title>Display the name of JForum's user as his real name instead of his username(login ID)</title>
				<description><![CDATA[ If we do an SSO integration with user's username as his social security number or identification number from another webapp, and it is not good to show this information to public. We need to display the name of JForum's user as his real name instead of his username(login ID).<br /> <br /> After finishing [url=http://www.andowson.com/posts/list/227.page]JForum SSO with user's first name and last name saved.[/url]<br /> Here is a guideline for doing this:<br /> <br /> 1.We need to get user's real name as first_name and last_name from the jfoum_users table. Modify net.jforum.dao.generic.GenericUserDAO.java:<br /> [code]<br /> protected void fillUserFromResultSet(User u, ResultSet rs) throws SQLException<br /> {<br /> 		...<br /> 		u.setFirstName(rs.getString("first_name"));<br /> 		u.setLastName(rs.getString("last_name"));<br /> }<br /> <br /> protected List processSelectAll(ResultSet rs) throws SQLException<br /> {<br /> 			...<br /> 			u.setFirstName(rs.getString("first_name"));<br /> 			u.setLastName(rs.getString("last_name"));<br /> 			...<br /> }<br /> <br /> public User getLastUserInfo()<br /> {<br /> 			...<br /> 			u.setUsername(rs.getString("username"));<br /> 			u.setId(rs.getInt("user_id"));<br /> 			u.setFirstName(rs.getString("first_name"));<br /> 			u.setLastName(rs.getString("last_name"));<br /> <br /> 			return u;<br /> 			...<br /> }<br /> [/code]<br /> 2.Modify WEB-INF/config/database/generic/generic_queries.sql, add first_name, last_name to the original SQL statement. Here are some queries needing modification:<br /> [code=sql]<br /> UserModel.selectAll = SELECT user_email, user_id, user_posts, user_regdate, username, deleted, user_karma, user_from, \<br /> 	user_website, user_viewemail, first_name, last_name FROM jforum_users ORDER BY user_id<br /> <br /> UserModel.selectAllByLimit = SELECT user_email, user_id, user_posts, user_regdate, username, deleted, user_karma, user_from, user_website, user_viewemail, first_name, last_name \<br /> 	FROM jforum_users ORDER BY username LIMIT ?, ?<br /> <br /> UserModel.selectAllByGroup = SELECT user_email, u.user_id, user_posts, user_regdate, username, deleted, user_karma, user_from, \<br /> 	user_website, user_viewemail, first_name, last_name \<br /> 	FROM jforum_users u, jforum_user_groups ug \<br /> 	WHERE u.user_id = ug.user_id \<br /> 	AND ug.group_id = ? \<br /> 	ORDER BY user_id LIMIT ?, ?<br /> <br /> UserModel.findByName = SELECT user_id, username, user_email, deleted, first_name, last_name FROM jforum_users WHERE UPPER(username) LIKE UPPER(?) <br /> <br /> UserModel.update = UPDATE jforum_users SET user_aim = ?, \<br /> 	user_avatar = ?,\<br /> 	gender = ?, \<br /> 	themes_id = ?,\<br /> 	user_allow_pm = ?, \<br /> 	user_allowavatar = ?, \<br /> 	user_allowbbcode = ?, \<br /> 	user_allowhtml = ?, \<br /> 	user_allowsmilies = ?, \<br /> 	user_email = ?, \<br /> 	user_from = ?, \<br /> 	user_icq = ?, \<br /> 	user_interests = ?, \<br /> 	user_occ = ?, \<br /> 	user_sig = ?, \<br /> 	user_website = ?, \<br /> 	user_yim = ?, \<br /> 	user_msnm = ?, \<br /> 	user_password = ?, \<br /> 	user_viewemail = ?, \<br /> 	user_viewonline = ?, \<br /> 	user_notify = ?, \<br /> 	user_attachsig = ?, \<br /> 	username = ?, \<br /> 	user_lang = ?, \<br /> 	user_notify_pm = ?, \<br /> 	user_biography = ?, \<br /> 	user_lastvisit = ?, \<br /> 	user_notify_always = ?, \<br /> 	user_notify_text = ?, \<br /> 	rank_id = ?, \<br /> 	first_name = ?, \<br /> 	last_name = ? \<br /> 	WHERE user_id = ?<br /> <br /> UserModel.lastUserRegistered=SELECT user_id, username, first_name, last_name FROM jforum_users ORDER BY user_regdate DESC LIMIT 1<br /> <br /> ForumModel.lastPostInfo = SELECT post_time, p.topic_id, t.topic_replies, post_id, u.user_id, username, first_name, last_name \<br /> 	FROM jforum_posts p, jforum_users u, jforum_topics t , jforum_forums f \<br /> 	WHERE t.forum_id = f.forum_id \<br /> 	AND t.topic_id = p.topic_id \<br /> 	AND f.forum_last_post_id = t.topic_last_post_id \<br /> 	AND t.topic_last_post_id = p.post_id \<br /> 	AND p.forum_id = ? \<br /> 	AND p.user_id = u.user_id \<br />     AND p.need_moderate = 0<br /> <br /> TopicModel.topicPosters = SELECT user_id, username, user_karma, user_avatar, user_allowavatar, user_regdate, user_posts, user_icq, \<br /> 	user_from, user_email, rank_id, user_sig, user_attachsig, user_viewemail, user_msnm, user_yim, user_website, user_sig, user_aim, first_name, last_name \<br /> 	FROM jforum_users \<br /> 	WHERE user_id IN (:ids:)<br /> <br /> TopicModel.getUserInformation = SELECT user_id, username, first_name, last_name FROM jforum_users WHERE user_id IN (#ID#)<br /> <br />  <br /> SearchModel.getPostsDataForLucene = SELECT p.post_id, p.forum_id, p.topic_id, p.user_id, u.username, p.enable_bbcode, p.enable_smilies, p.post_time, pt.post_subject, pt.post_text, t.topic_title, u.first_name, u.last_name \<br /> 	FROM jforum_posts p, jforum_posts_text pt, jforum_users u, jforum_topics t \<br /> 	WHERE p.post_id IN (:posts:) \<br /> 	AND p.post_id = pt.post_id  \<br /> 	AND p.topic_id = t.topic_id \<br /> 	AND p.user_id = u.user_Id<br /> <br /> PrivateMessageModel.baseListing = SELECT pm.privmsgs_type, pm.privmsgs_id, pm.privmsgs_date, pm.privmsgs_subject, u.user_id, u.username, u.first_name, u.last_name \<br /> 	FROM jforum_privmsgs pm, jforum_users u \<br /> 	#FILTER# \<br /> 	ORDER BY pm.privmsgs_date DESC<br /> <br /> ModerationModel.topicsByForum = SELECT p.post_id, t.topic_id, t.topic_title, t.topic_replies, p.user_id, enable_bbcode, p.attach, \<br /> 	enable_html, enable_smilies, pt.post_subject, pt.post_text, username, first_name, last_name \<br /> 	FROM jforum_posts p, jforum_posts_text pt, jforum_users u, jforum_topics t \<br /> 	WHERE p.post_id = pt.post_id \<br /> 	AND p.topic_id = t.topic_id \<br /> 	AND t.forum_id = ? \<br /> 	AND p.user_id = u.user_id \<br /> 	AND p.need_moderate = 1 \<br /> 	ORDER BY t.topic_id, post_time ASC<br /> <br /> ModerationLog.selectAll = SELECT l.*, u.username, u2.username AS poster_username, u2.first_name AS poster_first_name, u2.last_name AS poster_last_name FROM jforum_moderation_log l \<br /> 	LEFT JOIN jforum_users u2 ON u2.user_id = l.post_user_id \<br /> 	LEFT JOIN jforum_users u ON l.user_id = u.user_id \<br /> 	ORDER BY log_id DESC \<br /> 	LIMIT ?, ?<br /> [/code]<br /> 3.JForum provide a method getName() in net.jforum.entities.User.java, we can modify it as follows to change the order of first name and last name for some languages like zh_CN and zh_TW:<br /> [code]<br /> 	public String getName()<br /> 	{<br /> 		String defaultLang = SystemGlobals.getValue(ConfigKeys.I18N_DEFAULT);<br /> 		if ((this.lang != null && this.lang.startsWith("zh")) || defaultLang.startsWith("zh")) {<br /> 			return this.lastName + this.firstName;<br /> 		} else {<br /> 		    return this.firstName + " " + this.lastName;<br /> 		}<br /> 	}<br /> [/code]<br /> 4.Modify net.jforum.entities.UserSession.java, add a new attribute "name" and modify some method to store its value:<br /> private String name;<br /> public String getName()<br /> public String setName(String name)<br /> <br /> [code]<br /> public UserSession(UserSession us)<br /> {<br />                 ...<br /> 		this.name = us.getName();<br />                 ...<br /> }<br /> <br /> public void dataToUser(User user)<br /> {<br />                 ...<br /> 		this.setName(user.getName());<br />                 ...<br /> }<br /> [/code]<br /> 5.Modify net.jforum.dao.generic.GenericUserSessionDAO.java<br /> public UserSession selectById(UserSession us, Connection conn)<br /> [code]<br /> 	public UserSession selectById(UserSession us, Connection conn)<br /> 	{<br />                         ...<br /> 			if (rs.next()) {<br /> 				returnUs.setSessionTime(rs.getLong("session_time"));<br /> 				returnUs.setStartTime(rs.getTimestamp("session_start"));<br /> 				found = true;<br /> 			}<br /> 			rs.close();<br /> 			rs = null;<br /> 			p.close();			<br /> 			p = null;<br /> 			<br /> 			p = conn.prepareStatement(SystemGlobals.getSql("UserModel.selectById"));<br /> 			p.setInt(1, us.getUserId());<br /> 			rs = p.executeQuery();<br /> 			if (rs.next()) {<br /> 				String defaultLang = SystemGlobals.getValue(ConfigKeys.I18N_DEFAULT);<br /> 				String lang = returnUs.getLang();<br /> 				if ((lang != null && lang.startsWith("zh")) || defaultLang.startsWith("zh")) {				<br /> 				    returnUs.setName(rs.getString("last_name")+rs.getString("first_name"));<br /> 				} else {<br /> 					returnUs.setName(rs.getString("first_name") + " " + rs.getString("last_name"));<br /> 				}<br /> 			}<br /> 			return (found ? returnUs : null);<br /> 		}<br />                 ...<br /> 	}<br /> [/code]	<br /> 6.Modify net.jforum.entities.LastPostInfo.java<br /> private String name;<br /> public String getName()<br /> public String setName(String name)<br /> <br /> 7.Modify net.jforum.repository.ForumRepository.java<br /> [code]<br /> public static synchronized void updateForumStats(Topic t, User u, Post p)<br /> {<br />                         ...<br /> 			lpi.setUsername(u.getUsername());<br /> 			lpi.setName(u.getName());<br /> 			forum.setLastPostInfo(lpi);<br />                         ...<br /> }<br /> [/code]<br /> 8.Modify net.jforum.dao.generic.GenericForumDAO.java<br /> [code]<br /> private LastPostInfo getLastPostInfo(int forumId, boolean tryFix)<br /> {<br />                                 ...<br /> 			if (rs.next()) {<br />                                 ...<br /> 				String defaultLang = SystemGlobals.getValue(ConfigKeys.I18N_DEFAULT);<br /> 				if (defaultLang.startsWith("zh")) {<br /> 				    lpi.setName(rs.getString("last_name")+ rs.getString("first_name"));<br /> 				} else {<br /> 					lpi.setName(rs.getString("first_name")+ " " + rs.getString("last_name"));								<br /> 				}<br />                                 ...<br /> }<br /> [/code]<br /> 9.Modify net.jforum.view.forum.UserAction.java<br /> [code]<br /> public void edit()<br /> {<br />                         ...<br /> 			this.context.put("u", u);<br /> 			this.context.put("action", "editSave");<br /> 			this.context.put("pageTitle", I18n.getMessage("UserProfile.profileFor") + " " + u.getName());<br />                         ...<br /> }<br /> <br /> public void profile()<br /> {<br />                         ...<br /> 			this.context.put("pageTitle", I18n.getMessage("UserProfile.allAbout")+" "+u.getName());<br />                         ...<br /> }<br /> [/code]<br /> 10.Modify net.jforum.dao.generic.GenericTopicDAO.java<br /> [code]<br /> public List fillTopicsData(PreparedStatement p)<br /> {<br />                                ...<br /> 				while (rs.next()) {<br /> 					User u = new User();<br /> 					u.setId(rs.getInt("user_id"));<br /> 					u.setUsername(rs.getString("username"));<br /> 					u.setFirstName(rs.getString("first_name"));<br /> 					u.setLastName(rs.getString("last_name"));<br /> 					users.put(new Integer(rs.getInt("user_id")), u);<br /> 				}<br />                                  ...<br /> 				for (Iterator iter = l.iterator(); iter.hasNext();) {<br /> 					Topic t = (Topic) iter.next();					<br /> 					t.setPostedBy((User)users.get(new Integer(t.getPostedBy().getId())));<br /> 					t.setLastPostBy((User)users.get(new Integer(t.getLastPostBy().getId())));<br /> 				}<br />                                 ...<br /> }<br /> <br /> public Map topicPosters(int topicId)<br /> {<br />                                 ...<br /> 				u.setSignature(rs.getString("user_sig"));<br /> 				u.setFirstName(rs.getString("first_name"));<br /> 				u.setLastName(rs.getString("last_name"));<br /> <br /> 				m.put(new Integer(u.getId()), u);<br />                                 ...<br /> }<br /> [/code]<br /> 11.Modify net.jforum.dao.generic.GenericPrivateMessageDAO.java<br /> [code]<br /> public List selectFromInbox(User user)<br /> {<br />                                ...<br /> 				fromUser.setFirstName(rs.getString("first_name"));<br /> 				fromUser.setLastName(rs.getString("last_name"));<br />                                ...<br /> }<br /> <br /> public List selectFromSent(User user)<br /> {<br />                                 ...<br /> 				toUser.setFirstName(rs.getString("first_name"));<br /> 				toUser.setLastName(rs.getString("last_name"));<br />                                 ...<br /> }<br /> [/code]<br /> 12.Modify net.jforum.view.forum.PrivateMessageAction.java<br /> [code]<br /> public void sendTo()<br /> {<br />                         ...	<br /> 			this.context.put("toUsername", recipient.getName());<br /> 			this.context.put("pageTitle", I18n.getMessage("PrivateMessage.title") <br /> 				+ " " + I18n.getMessage("PrivateMessage.to") <br /> 				+ " " + recipient.getName());<br />                         ...<br /> }<br /> <br /> public void quote()<br /> {<br />                 ...<br /> 		this.context.put("quote", "true");<br /> 		this.context.put("quoteUser", pm.getFromUser().getNickname());<br /> 		this.context.put("post", pm.getPost());<br />                 ...<br /> }<br /> [/code]<br /> 13.Modify net.jforum.entities.Post.java<br /> private String authorName;<br /> public String getAuthorName()<br /> public void setAuthorName(String authorName)<br /> public Post(Post p) {<br />    ...<br />    this.setAuthorName(p.getAuthorName());<br /> }<br /> <br /> 14.Modify net.jforum.dao.generic.GenericLuceneDAO.java<br /> [code]<br /> public List getPostsData(int[] postIds)<br /> {<br />                                                 ...<br /> 			while (rs.next()) {<br /> 				Post post = this.makePost(rs);<br /> 				post.setPostUsername(rs.getString("username"));<br /> 				String lang = SystemGlobals.getValue(ConfigKeys.I18N_DEFAULT);<br /> 				if (lang.startsWith("zh")) {<br /> 				    post.setAuthorName(rs.getString("last_name") + rs.getString("first_name"));<br /> 				} else {<br /> 				    post.setAuthorName(rs.getString("first_name") + " " + rs.getString("last_name"));<br /> 				}<br /> 				<br /> 				l.add(post);<br /> 			}<br />                                                 ...<br /> }<br /> [/code]<br /> 15.Modify net.jforum.view.forum.PostAction.java<br /> [code]<br /> public void quote()<br /> {<br />                                 ...<br /> 		this.context.put("quoteUser", u.getName());<br />                                 ...<br /> }<br /> <br /> public void listByUser()<br /> {<br /> 		...<br /> 		this.context.put("pageTitle", I18n.getMessage("PostShow.userPosts") + " " + u.getName());<br /> 		...<br /> }<br /> [/code]<br /> 16.Modify net.jforum.view.forum.RecentTopicsAction.java<br /> [code]<br /> public void showTopicsByUser() <br /> {<br /> 		...<br /> 		this.context.put("pageTitle", I18n.getMessage("ForumListing.userTopics") + " " + u.getName());<br /> 		...<br /> }<br /> [/code]<br /> 17. Modify net.jforum.view.forum.HottestTopicsAction.java<br /> [code]<br /> public void showTopicsByUser() <br /> {<br />                 ...<br /> 		this.context.put("u", u);<br /> 		this.context.put("pageTitle", I18n.getMessage("ForumListing.userTopics") + " " + u.getNickname());<br />                 ...<br /> <br /> }<br /> [/code]<br /> 18. Modify net.jforum.dao.generic.GenericModerationDAO.java<br /> [code]	protected Post getPost(ResultSet rs) throws SQLException<br /> 	{<br /> 		Post p = new Post();<br /> 		<br /> 		p.setPostUsername(rs.getString("username"));<br />                                 String lang = SystemGlobals.getValue(ConfigKeys.I18N_DEFAULT);<br /> 		if (lang.startsWith("zh")) {<br /> 		    p.setAuthorName(rs.getString("last_name") + rs.getString("first_name"));<br /> 		} else {<br /> 		    p.setAuthorName(rs.getString("first_name") + " " + rs.getString("last_name"));<br /> 		}<br /> 		p.setId(rs.getInt("post_id"));<br /> 		p.setUserId(rs.getInt("user_id"));<br /> 		p.setBbCodeEnabled(rs.getInt("enable_bbcode") == 1);<br /> 		p.setHtmlEnabled(rs.getInt("enable_html") == 1);<br /> 		p.setSmiliesEnabled(rs.getInt("enable_smilies") == 1);<br /> 		p.setSubject(rs.getString("post_subject"));<br /> 		p.setText(this.getPostTextFromResultSet(rs));<br /> 		<br /> 		return p;<br /> 	}[/code]<br /> 19.Modify net.jforum.view.forum.BookmarkAction.java<br /> [code]<br /> 	private void addUser()<br /> 	{<br /> 		User u = DataAccessDriver.getInstance().newUserDAO().selectById(<br /> 				this.request.getIntParameter("relation_id"));<br /> 		String title = u.getName();<br />                 ...<br />         }<br />  <br /> 	public void list()<br /> 	{<br /> 		...<br /> 		this.context.put("pageTitle", I18n.getMessage("Bookmarks.for")+" "+u.getName());				<br /> 	}<br /> [/code]<br /> 20.Modify net.jforum.view.forum.ForumAction.java<br /> 	public void list()<br /> 	{<br />                 ...<br /> 		if (onlineUsersList.size() == 0) {<br /> 			UserSession us = new UserSession();<br /> <br /> 			us.setUserId(aid);<br /> 			us.setUsername(I18n.getMessage("Guest"));<br /> 			us.setFirstName(I18n.getMessage("Guest"));<br /> <br /> 			onlineUsersList.add(us);<br /> 		}<br />                 ...<br /> 	}<br /> 21.Replace ".username" with ".name" in the following files under templates/default/ diectory:<br /> forum_list.htm<br /> forum_show.htm<br /> recent_thread.htm<br /> hottest_thread.htm<br /> new_message.htm<br /> user_list.htm<br /> user_posts_show.htm<br /> user_topics_show.htm<br /> post_show_user_inc.htm<br /> topic_review.htm<br /> pm_list.htm<br /> pm_finduser.htm<br /> pm_read_message.htm<br /> pm_review_message.htm<br /> bookmark_list.htm<br /> <br /> 22.Replace ${topic.postedBy.username?html} with ${u.name?html} and replace ${topic.lastPostBy.username?html? with ${u.name?html}  in the following files under templates/default/ diectory:<br /> user_topics_show.htm<br /> new_message.htm<br /> <br /> 23.Replace ".postUsername" with ".authorName" in the following files under templates/default/ diectory:<br /> search_result.htm<br /> forum_show.htm<br /> ]]></description>
				<guid isPermaLink="true">http://www.andowson.com/posts/preList/228/344.page</guid>
				<link>http://www.andowson.com/posts/preList/228/344.page</link>
				<pubDate><![CDATA[Sat, 15 Mar 2008 13:28:49]]> GMT</pubDate>
				<author><![CDATA[ andowson]]></author>
			</item>
	</channel>
</rss>
