Changeset 17904
- Timestamp:
- 08/19/08 13:42:11 (3 months ago)
- Files:
-
- trunk/core/src/net/project/document/MyDocumentsModified.java (modified) (3 diffs)
- trunk/core/src/net/project/view/pages/blog/ViewBlog.java (modified) (8 diffs)
- trunk/core/src/net/project/view/pages/personal/Profile.java (modified) (5 diffs)
- trunk/core/web/html/blog/ViewBlog.html (modified) (9 diffs)
- trunk/core/web/html/personal/Profile.html (modified) (2 diffs)
- trunk/core/web/jsp/business/include/xsl/buddy-list.xsl (modified) (2 diffs)
- trunk/core/web/jsp/project/Setup.jsp (modified) (1 diff)
- trunk/core/web/jsp/project/include/buddy-list.xsl (modified) (2 diffs)
- trunk/core/web/jsp/roster/xsl/roster.xsl (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/core/src/net/project/document/MyDocumentsModified.java
r15475 r17904 30 30 import java.util.Iterator; 31 31 32 import net.project.base.Module; 32 33 import net.project.base.ObjectType; 33 34 import net.project.base.URLFactory; … … 37 38 import net.project.persistence.IXMLPersistence; 38 39 import net.project.persistence.PersistenceException; 40 import net.project.security.SessionManager; 39 41 import net.project.security.User; 40 42 import net.project.space.Space; … … 257 259 258 260 String href = URLFactory.makeURL(document.documentID, ObjectType.DOCUMENT); 259 String modByHref = URLFactory.makeURL(document.modifiedByID, ObjectType.PERSON); 261 //String modByHref = URLFactory.makeURL(document.modifiedByID, ObjectType.PERSON); 262 263 String modByHref = SessionManager.getJSPRootURL() + "/blog/view/" + document.modifiedByID + "/" 264 + document.modifiedByID + "/" + ObjectType.PERSON + "/" + Module.PERSONAL_SPACE 265 + "?module=" + Module.PERSONAL_SPACE; 260 266 261 267 xml.append("<row>\n"); trunk/core/src/net/project/view/pages/blog/ViewBlog.java
r17896 r17904 213 213 214 214 private String filterResultMessage; 215 216 @Persist 217 private boolean blogVisitor = false; 218 219 private boolean isSpaceAdmin = false; 215 220 216 221 private enum BlogAction { … … 273 278 // if page called after adding weblog entry or weblog entry comment 274 279 // then call method with parameters spaceId, userId, spaceType and moduleId 275 if (webblogEntryAdded || webblogCommentAdded ) {280 if (webblogEntryAdded || webblogCommentAdded || isBlogVisitor()) { 276 281 webblogEntryAdded = false; 277 282 webblogCommentAdded = false; … … 445 450 onActivate(); 446 451 } 447 // user object from session 452 // user object from session 448 453 User user = SessionManager.getUser(); 449 454 // for history … … 592 597 } 593 598 594 Object onActionFromMyProfile() { 599 Object onActionFromMyProfile(Integer userId) { 600 profile.setUserId(userId); 595 601 return profile; 596 602 } … … 606 612 607 613 setSpaceId(Integer.parseInt(SessionManager.getUser().getCurrentSpace().getID())); 614 615 if(getSpaceType().equalsIgnoreCase(Space.PROJECT_SPACE)){ 616 setSpaceAdmin(true); 617 } else { 618 setSpaceAdmin(userWeblog.getPnPerson().getPersonId().intValue() == Integer.valueOf(SessionManager.getUser().getID()).intValue()); 619 } 608 620 609 621 // setting flag for important symbol, edit link and format for entry published time … … 623 635 } else { 624 636 entry.setIsEditable(false); 625 } 637 } 626 638 if(entry.getPnWeblogComment() != null && !entry.getPnWeblogComment().isEmpty()){ 627 639 Iterator iterator = entry.getPnWeblogComment().iterator(); … … 682 694 userWeblogEntries = new ArrayList<PnWeblogEntry>(); 683 695 for(PnWeblogEntry weblogEntry : entries){ 684 if( entry.getPubTime().after(previousDate) && entry.getPubTime().before(currentDate)){696 if(weblogEntry.getPubTime().after(previousDate) && weblogEntry.getPubTime().before(currentDate)){ 685 697 userWeblogEntries.add(weblogEntry); 686 698 } 687 699 } 688 700 } 689 } 701 } 690 702 691 703 @CleanupRender 692 704 void cleanValues(){ 693 //setFullView(true); 705 // setFullView(true); 706 setMessage(null); 694 707 } 695 708 … … 1201 1214 } 1202 1215 1216 /** 1217 * @return the blogVisitor 1218 */ 1219 public boolean isBlogVisitor() { 1220 return blogVisitor; 1221 } 1222 1223 /** 1224 * @param blogVisitor the blogVisitor to set 1225 */ 1226 public void setBlogVisitor(boolean blogVisitor) { 1227 this.blogVisitor = blogVisitor; 1228 } 1229 1230 /** 1231 * @return the isSpaceAdmin 1232 */ 1233 public boolean getIsSpaceAdmin() { 1234 return isSpaceAdmin; 1235 } 1236 1237 /** 1238 * @param isSpaceAdmin the isSpaceAdmin to set 1239 */ 1240 public void setSpaceAdmin(boolean isSpaceAdmin) { 1241 this.isSpaceAdmin = isSpaceAdmin; 1242 } 1243 1203 1244 } trunk/core/src/net/project/view/pages/personal/Profile.java
r17896 r17904 55 55 private RegistrationBean registrationBean; 56 56 57 @Persist 57 58 private Integer moduleId; 58 59 60 @Persist 59 61 private Integer spaceId; 60 62 … … 69 71 private boolean isSpaceAdmin = false; 70 72 73 @Persist 71 74 private User user; 75 76 private Integer userId; 72 77 73 78 @InjectPage … … 91 96 if (net.project.security.SessionManager.getUser() == null) { 92 97 throw new IllegalStateException("User is null"); 93 } 94 user = SessionManager.getUser(); 98 } 99 } 100 101 void onActivate(Integer userId) { 102 user = new User(); 103 user.setID(userId.toString()); 95 104 96 PersonalSpaceBean personalSpace = new PersonalSpaceBean();97 personalSpace.setID(user.getID());98 personalSpace.load();99 105 try { 100 user. setCurrentSpace(personalSpace);101 } catch (P netException pnetEx1) {102 pnetEx 1.printStackTrace();106 user.load(); 107 } catch (PersistenceException pnetEx2) { 108 pnetEx2.printStackTrace(); 103 109 } 104 110 105 isSpaceAdmin = user.isSpaceAdministrator(); 106 DateFormat userDateFormat = user.getDateFormatter(); 107 registrationBean = (RegistrationBean) requestGlobals.getHTTPServletRequest().getSession().getAttribute( 108 "registration"); 109 110 spaceId = new Integer(user.getCurrentSpace().getID()); 111 112 if (registrationBean == null) { 113 registrationBean = new RegistrationBean(); 114 // No security validation necessary since a user can only access their own Profile 115 registrationBean.setID(user.getID()); 116 registrationBean.setEmail(user.getEmail()); 117 // Load the registration information and the directory entry 111 if(user != null){ 112 PersonalSpaceBean personalSpace = new PersonalSpaceBean(); 113 personalSpace.setID(user.getID()); 114 personalSpace.load(); 118 115 try { 119 registrationBean.load(); 120 } catch (PersistenceException pnetEx) { 121 pnetEx.printStackTrace(); 116 user.setCurrentSpace(personalSpace); 117 } catch (PnetException pnetEx1) { 118 pnetEx1.printStackTrace(); 119 } 120 121 isSpaceAdmin = user.isSpaceAdministrator() && user.getID().equals(SessionManager.getUser().getID()); 122 123 DateFormat userDateFormat = user.getDateFormatter(); 124 125 registrationBean = (RegistrationBean) requestGlobals.getHTTPServletRequest().getSession().getAttribute( 126 "registration"); 127 128 spaceId = new Integer(user.getCurrentSpace().getID()); 129 130 if (registrationBean == null) { 131 registrationBean = new RegistrationBean(); 132 // No security validation necessary since a user can only access their own Profile 133 registrationBean.setID(user.getID()); 134 registrationBean.setEmail(user.getEmail()); 135 // Load the registration information and the directory entry 136 try { 137 registrationBean.load(); 138 } catch (PersistenceException pnetEx) { 139 pnetEx.printStackTrace(); 140 } 141 } 142 // Update the registration bean from the directory entry 143 registrationBean.populateFromDirectoryEntry(); 144 145 IPnProjectSpaceService projectSpaceService = ServiceFactory.getInstance().getPnProjectSpaceService(); 146 List<PnProjectSpace> projects = projectSpaceService.getProjectsByMemberId(Integer.parseInt(user.getID())); 147 148 if (projects != null && projects.size() > 0) { 149 projectList = ""; 150 for (PnProjectSpace projectSpace : projects) { 151 if (StringUtils.isNotEmpty(projectList)) { 152 projectList += ", "; 153 } 154 projectList += projectSpace.getProjectName(); 155 } 156 } 157 158 lastLoginDate = userDateFormat.formatDate(registrationBean.getLastLogin(), "hh:mm a, MMM dd, yyyy"); 159 160 lastBlogEntry = ServiceFactory.getInstance().getBlogProvider().getLastBlogEntryOfUser( 161 Integer.parseInt(user.getID())); 162 163 if (lastBlogEntry != null) { 164 isLastBlogEntryExist = true; 165 try { 166 lastBlogEntry.setPubTimeString(userDateFormat.formatDate(lastBlogEntry.getPubTime(), 167 "EEE, MMM dd, yyyy")); 168 if (ServiceFactory.getInstance().getBlogProvider().isWeblogEntryImportant( 169 lastBlogEntry.getWeblogEntryId(), "spaceId")) { 170 lastBlogEntry.setIsImportant("!"); 171 } 172 } catch (Exception e) { 173 log.error("Error occurred while setting blog entry values " + e.getMessage()); 174 } 122 175 } 123 176 } 124 // Update the registration bean from the directory entry125 registrationBean.populateFromDirectoryEntry();126 127 IPnProjectSpaceService projectSpaceService = ServiceFactory.getInstance().getPnProjectSpaceService();128 List<PnProjectSpace> projects = projectSpaceService.getProjectsByMemberId(Integer.parseInt(user.getID()));129 130 if (projects != null && projects.size() > 0) {131 projectList = "";132 for (PnProjectSpace projectSpace : projects) {133 if (StringUtils.isNotEmpty(projectList)) {134 projectList += ", ";135 }136 projectList += projectSpace.getProjectName();137 }138 }139 140 lastLoginDate = userDateFormat.formatDate(registrationBean.getLastLogin(), "hh:mm a, MMM dd, yyyy");141 142 lastBlogEntry = ServiceFactory.getInstance().getBlogProvider().getLastBlogEntryOfUser(143 Integer.parseInt(user.getID()));144 if (lastBlogEntry != null) {145 isLastBlogEntryExist = true;146 try {147 lastBlogEntry.setPubTimeString(userDateFormat.formatDate(lastBlogEntry.getPubTime(),148 "EEE, MMM dd, yyyy"));149 if (ServiceFactory.getInstance().getBlogProvider().isWeblogEntryImportant(150 lastBlogEntry.getWeblogEntryId(), "spaceId")) {151 lastBlogEntry.setIsImportant("!");152 }153 } catch (Exception e) {154 log.error("Error occurred while setting blog entry values " + e.getMessage());155 }156 }157 177 } 158 178 … … 162 182 blog.setSpaceType(Space.PERSONAL_SPACE); 163 183 blog.setModuleId(moduleId); 184 blog.setBlogVisitor(true); 164 185 return blog; 165 186 } … … 256 277 } 257 278 279 /** 280 * @return the userId 281 */ 282 public Integer getUserId() { 283 return userId; 284 } 285 286 /** 287 * @param userId the userId to set 288 */ 289 public void setUserId(Integer userId) { 290 this.userId = userId; 291 } 292 258 293 } trunk/core/web/html/blog/ViewBlog.html
r17896 r17904 4 4 <t:if test="linkToPersonSpace"> 5 5 <t:PersonalMenu /> 6 <t:ActionBox groupTitle="Personal Blog: ${blogName}" buttons="blogit" />7 6 <t:parameter name="else"> 8 7 <t:ProjectMenu /> 9 <t:ActionBox groupTitle="Project Blog: ${blogName}" buttons="blogit" />10 8 </t:parameter> 11 9 </t:if> 12 10 11 <span> 12 <t:if test="linkToPersonSpace"> 13 <div id='leftheading-person'>My Blog : ${blogName} </div> 14 <t:parameter name="else"> 15 <div id='leftheading-person'>Project Blog : ${blogName} </div> 16 </t:parameter> 17 </t:if> 18 <t:if test="isSpaceAdmin"> 19 <div style="clear: both"></div> 20 <div class="left_column_bottom"> 21 <div class="left_column_top"> 22 <div id="actionbox-item" class="actionbox-item"> 23 <span><a href="javascript:blogit();">BlogIt</a></span> <br/> 24 </div> 25 </div> 26 </div> 27 </t:if> 28 </span> 29 13 30 <div style="clear: both"></div> 14 31 <div class="left_column_bottom"> 15 <div class="left_column_top" style="margin-top: 25px;">32 <div class="left_column_top" style="margin-top: 50px;"> 16 33 <div id="group_heading" class="group_heading">Blog View<br /> 17 34 <t:if test="fullView"> 18 35 <span><a href="${jSPRootURL}/blog/view/get_titles_only?module=${moduleId}">Show Titles Only</a></span> <br /> 19 <t:parameter name="else"> 36 <t:parameter name="else"> 20 37 <span><a href="${jSPRootURL}/blog/view/get_full_entries?module=${moduleId}">Show Full Entries</a></span> <br /> 21 38 </t:parameter> 22 39 </t:if> 23 40 </div> 24 <div id="group_heading" class="group_heading">Go To<br /> 25 <span><t:actionlink t:id="myProfile">My Profile</t:actionlink></span> <br /> 26 </div> 41 <t:if test="linkToPersonSpace"> 42 <div id="group_heading" class="group_heading">Go To<br /> 43 <span> 44 <a href="${jSPRootURL}/personal/profile/${userId}?module=${moduleId}">My Profile</a> 45 </span> <br /> 46 </div> 47 </t:if> 27 48 </div> 28 49 </div> 29 <br />50 <br /> 30 51 <div style="position: absolute; top: 90px; left: 245px; color: #FF9900; font-family: Arial; font-weight: bold; font-size: 3;">${date}</div> 31 52 … … 64 85 </div> 65 86 </td></tr> 66 <tr valign="top">67 <td><br />68 <a href="javascript:blogit();" style="font-family: Arial; font-size: 10; position: relative; left: 90px; text-decoration: none; color: #FF9900;"><b> Blog It </b></a>69 </td>70 </tr>71 72 87 <tr><td height="20"></td></tr --> 73 74 <!-- tr valign="top"><td align="left"><h2>Search Project Blog </h2></td></tr>75 <tr>76 <td><img src="${jspRootURL}/images/rounded1.gif" border="0"/></td>77 <td height="1" bgcolor="green" width="45"></td>78 <td><img src="${jspRootURL}/images/rounded2.gif" border="0" /></td>79 </tr>80 <tr valign="top">81 <td height="5" width="1" bgcolor="green"></td>82 <td align="left"><input type="text" size="40" maxlength="60" style="border-style: none;" /></td>83 <td height="5" width="1" bgcolor="green"></td>84 </tr>85 <tr>86 <td><img src="${jspRootURL}/images/rounded3.gif" border="0"/></td>87 <td height="1" bgcolor="green" width="45"></td>88 <td><img src="${jspRootURL}/images/rounded4.gif" border="0" /></td>89 </tr>90 <tr><td height="10"></td></tr -->91 92 <!-- t:if test="fullView">93 <tr valign="top">94 <td align="left">95 View full entries96 | 97 <a href="${jspRootURL}/blog/view/get_titles_only?module=${moduleId}"> View titles only </a>98 </td>99 </tr>100 <t:parameter name="else">101 <tr valign="top">102 <td align="left">103 <a href="${jspRootURL}/blog/view/get_full_entries?module=${moduleId}"> View full entries </a>104 | 105 View titles only106 </td>107 </tr>108 </t:parameter>109 </t:if -->110 111 88 112 89 <!-- tr valign="top"><td align="left"><h3 style="color: #6699FF;">Filter by :</h3></td></tr --> … … 170 147 </t:parameter> 171 148 </t:if> 172 173 <!-- tr valign="top" align="right">174 <td>175 <label style="font-family: Arial; color: gray;">${filterResultMessage}</label> 176 <button name="filter" onclick="applyFilters();">Filter</button>177 </td>178 </tr -->179 149 </table> 180 150 </td> … … 199 169 <td width="0%"><!-- Space for photos --></td> 200 170 <td valign="top"> 201 <table width="100%"> 202 <!-- tr> 203 <td> 204 <table width="100%"> 205 <tr> 206 <td align="left" width="20%"> 207 <t:if test="linkToPersonSpace"> 208 <b><a href="javascript:openWin('${jspRootURL}/blog/AddWeblogEntry',650,350,'New')" style="color:#1264A7;text-decoration:none;">${postNewEntryLink}</a></b> 209 <t:parameter name="else"> 210 <b><a href="javascript:openWin('${jspRootURL}/blog/AddWeblogEntry',650,350,'New')" style="color:#1264A7;text-decoration:none;">${postNewEntryLink}</a></b> 211 </t:parameter> 212 </t:if> 213 </td> 214 </tr> 215 </table> 216 </td> 217 </tr --> 218 <tr> <td height="2"></td></tr> 171 <table width="100%"> 172 <tr> <td height="2"></td> </tr> 219 173 <tr> 220 174 <td> … … 312 266 <tr> 313 267 <td style="font-family:Arial;text-decoration:none;color:black;"> 314 ${entryPostedByLabel} 315 <a href="${jspRootURL}/blog/view/${pnWeblogEntry.pnPerson.personId}/${pnWeblogEntry.pnPerson.personId}/person/160?module=160" style="color:#1264A7;text-decoration:none;"> 316 ${pnWeblogEntry.pnPerson.displayName}</a></td> 268 ${entryPostedByLabel} 269 <a href="${jspRootURL}/blog/view/${pnWeblogEntry.pnPerson.personId}/${pnWeblogEntry.pnPerson.personId}/person/160?module=160" style="color:#1264A7;text-decoration:none;"> 270 ${pnWeblogEntry.pnPerson.displayName}</a> 271 </td> 317 272 </tr> 318 <tr> <td height="4" ></td> </tr>273 <tr> <td height="4"></td> </tr> 319 274 <tr> 320 275 <td> … … 368 323 369 324 <t:SpaceMainMenu /> 370 <!-- t:Footer /-->371 325 372 326 <script type="text/javascript"> … … 385 339 var validationMessageForBlogEntry = '${validationMessageForBlogEntry}'; 386 340 var validationMessageForBlogComment = '${validationMessageForBlogComment}'; 387 388 //document.getElementById('fixedRightTop').style.position = 'relative';389 //document.getElementById('fixedRightTop').style.left = '0px';390 //document.getElementById('fixedRightTop').style.top = '0px';391 341 392 342 // initializing content panel with html editor … … 576 526 showHtmlSelectTags(); 577 527 } 578 //window.document.body.style.overflow = 'visible';579 //window.document.body.style.overflowY = 'auto';580 528 if(otherUsersSpaceId != null && otherUsersSpaceId != 'null'){ 581 529 spaceId = userId = otherUsersSpaceId; … … 592 540 document.getElementById('blogPopupTitle').innerHTML = editEntryPopupTitle; 593 541 } 594 //window.document.body.style.overflowY = 'hidden';595 //window.document.body.style.overflow = 'hidden';596 542 597 543 if(navigator.userAgent.toLowerCase().indexOf("msie") >= 0) { trunk/core/web/html/personal/Profile.html
r17896 r17904 71 71 </head> 72 72 <body class="main" id="bodyWithFixedAreasSupport"> 73 <t:ActionBox groupTitle="Profile: ${registrationBean.displayName}" buttons="blogit" /> 73 <t:if test="isSpaceAdmin"> 74 <t:ActionBox groupTitle="Profile: ${registrationBean.displayName}" buttons="blogit" /> 75 </t:if> 74 76 75 77 <div style="clear: both"></div> … … 78 80 <div id="actionbox-item" class="actionbox-item"> 79 81 <span> 80 <t:actionlink t:id="blogLink">My Blog</t:actionlink> 81 <!-- a href="${JSPRootURL}/blog/view/user.getCurrentSpace().getID()/user.getID() 82 /Space.PERSONAL_SPACE/${moduleId}?module=${moduleId}">My Blog</a --> 82 <t:actionlink t:id="blogLink">My Blog</t:actionlink> 83 83 </span> <br /> 84 84 <t:if test="isSpaceAdmin"> trunk/core/web/jsp/business/include/xsl/buddy-list.xsl
r17679 r17904 38 38 <xsl:when test="string(./activity_status)=string('InActive')"> 39 39 <i> 40 <a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard"> 40 <a href="{$JSPRootURL}/blog/view/{user-id}/{user-id}/person/140?module=140"> 41 <!-- a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard" --> 41 42 <xsl:value-of select="./full-name"/> 42 43 <xsl:text disable-output-escaping="yes">&nbsp;(</xsl:text> … … 47 48 </xsl:when> 48 49 <xsl:otherwise> 49 <a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard"> 50 <a href="{$JSPRootURL}/blog/view/{user-id}/{user-id}/person/140?module=140"> 51 <!-- a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard" --> 50 52 <xsl:value-of select="./full-name"/> 51 53 </a> trunk/core/web/jsp/project/Setup.jsp
r17829 r17904 222 222 </td> 223 223 </tr> 224 < tr>224 <!-- tr> 225 225 <%--Avinash: bfd 3214 and 3234 Cancel button in the Personal Profile page navigates to Personal Work Space--%> 226 226 <%session.removeAttribute("referer"); %> 227 227 <td class="tableContentFontOnly"><a href="<%=SessionManager.getJSPRootURL()%>/personal/ProfileName.jsp?module=<%= Module.PERSONAL_SPACE %>&referer=project/Setup.jsp"><%= PropertyProvider.get("prm.project.setup.personalprofile.link")%></a></td> 228 228 <td class="tableContentFontOnly"><%= PropertyProvider.get("prm.project.setup.profileedit.label")%></td> 229 </tr >229 </tr --> 230 230 </table> 231 231 trunk/core/web/jsp/project/include/buddy-list.xsl
r17679 r17904 37 37 <xsl:when test="string(./activity_status)=string('InActive')"> 38 38 <i> 39 <a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard"> 39 <a href="{$JSPRootURL}/blog/view/{user-id}/{user-id}/person/140?module=140"> 40 <!-- a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard" --> 40 41 <xsl:value-of select="./full-name"/> 41 42 <xsl:text disable-output-escaping="yes">&nbsp;(</xsl:text> … … 46 47 </xsl:when> 47 48 <xsl:otherwise> 48 <a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard"> 49 <a href="{$JSPRootURL}/blog/view/{user-id}/{user-id}/person/140?module=140"> 50 <!-- a href="{$JSPRootURL}/roster/PersonalDirectoryView.htm?memberid={user-id}&module=140&referrer=dashboard" --> 49 51 <xsl:value-of select="./full-name"/> 50 52 </a> trunk/core/web/jsp/roster/xsl/roster.xsl
r17608 r17904 63 63 <xsl:choose> 64 64 <xsl:when test="$invitee_status_id != 'Deleted'"> 65 <a name="projectMember" href="{$translation[@name='JSPRootURL']}/roster/PersonalDirectoryView.htm?module=140&memberid={person_id}"><xsl:value-of select="full_name"/></a> 65 <!-- a name="projectMember" href="{$translation[@name='JSPRootURL']}/roster/PersonalDirectoryView.htm?module=140&memberid={person_id}"><xsl:value-of select="full_name"/></a --> 66 <a name="projectMember" href="{$translation[@name='JSPRootURL']}/blog/view/{person_id}/{person_id}/person/140?module=140"><xsl:value-
