...
It is for DSpace 1.4.2 JSP UI only but it should not be too difficult to port it to newer DSpace versions.
Table of Contents |
---|
For the users:
- multiple tags can be added to any displayed item by any logged in user:
- in MyDSpace, the tags of the logged-in user are listed with their frequency. Clicking on any word brings the list of the items tagged with this word:
- In the left navigation bar, a "Tag" entry can appear. It gives access to the tags owned by the user but also to the tags of all the other users (collaborative tagging)
- a special tag "v" (viewed) is used to simply tick records. This special tag can be set/reset directly from a result list or from the top of a record.
For the application manager:
In dspace/config/dspace.cfg, you can define:
...
Wiki Markup |
---|
\# HTML code to show that a record is unticked (and can be ticked) webui.itemlist.notviewed = <a href="\[root\]/handle/\[handle\]?bookmarkadded=v\[framed\]"\[targetbibl_record\]><img src="\[root\]/image/notviewed.gif" border="0" align="left"/></a> |
Icons:
- You need one icon for "viewed" records (image/viewed.gif). Something looking like a tick mark in a colored circle.
- You need another one for unticked (but tickable). Something like an empty colored circle
For the developpers:
in the PostgreSQL database:
A new database table must be added:
Panel |
---|
CREATE SEQUENCE bookmark_seq CREATE TABLE bookmark |
In the Java Code:
New classes (java files attached to this page):
...
No Format |
---|
/* generate the (X)HTML required to show the thumbnail */
private String getThumbMarkup(HttpServletRequest hrq, Context c, Item item, LinkOut aLinkOut, String suffix)
throws JspException
{
String handle = item.getHandle();
Bundle[] original = null;
String tag = "";
String tagVu = ConfigurationManager.getProperty("webui.itemlist.tagviewed");
String htmlVu = ConfigurationManager.getProperty("webui.itemlist.viewed");
String htmlNotVu = ConfigurationManager.getProperty("webui.itemlist.notviewed");
String vu = "";
EPerson eperson = c.getCurrentUser();
if (eperson != null) {
tag = BookmarkManager.getBookmarkTag(c,eperson,item);
if (tag != null && (!"".equals(tag))) {
if ( tag.startsWith(tagVu+";") || (tag.indexOf("; "+tagVu+";")>=0) )
vu = aLinkOut.mainSubstitutions(htmlVu);
tag = " "+UIUtil.addLinksURL(hrq.getContextPath()+"/bookmark?tag=",";",tag);
}
if ("".equals(vu)) vu = aLinkOut.mainSubstitutions(htmlNotVu);
}
Collection colls[] = null;
try
{
original = item.getBundles("ORIGINAL");
colls = item.getCollections();
}
catch(SQLException sqle)
{
throw new JspException(sqle.getMessage());
}
...
|
in Java Server Pages (JSP):
New JSPs (attached to this page):
- mydspace/listtags.jsp
- mydspace/bookmarks.jsp
Modified JSPs:
in display-item.jsp:
Code Block |
---|
... Imports...
<%@ page import="org.dspace.eperson.BookmarkManager" %>
... Initialization...
// Show Bookmark or Unbookmark button?
String bookmarked = "";
// Marked as viewed?
boolean vu = false;
if (currentUser != null) {
bookmarked = BookmarkManager.getBookmarkTag(context, currentUser, item);
if (bookmarked != null && (!"".equals(bookmarked))) {
if ( bookmarked.startsWith("v;") || (bookmarked.indexOf("; v;")>=0) )
vu = true;
}
}
String otherBookmark = BookmarkManager.getBookmarkOtherTag(context, currentUser, item);
... Where you want to display "ticked" records:
<%
if (currentUser != null) {
if (vu) {
%>
<a href="<%= locationLink %>?bookmarkremoved=v"><img src="<%= request.getContextPath() %>/image/viewed.gif" border="0"/></a>
<%
} else {
%>
<a href="<%= locationLink %>?bookmarkadded=v"><img src="<%= request.getContextPath() %>/image/notviewed.gif" border="0"/></a>
<%
}
%>
... Where you want to display current tags:
<%
if (bookmarked != null && (! "".equals(bookmarked))) { %>
<b style="color:Orange;"><fmt:message key="jsp.mydspace.bookmarks.yours"/>: <%=UIUtil.addLinksURL(request.getContextPath()+"/bookmark?tag=",";",bookmarked)%></b>
<% }
if (otherBookmark != null && (! "".equals(otherBookmark))) { %>
<fmt:message key="jsp.mydspace.bookmarks.theirs"/>: <%=UIUtil.addLinksURL(request.getContextPath()+"/bookmark?allusers=on&tag=",";",otherBookmark)%>
<% } %>
... Where you want to edit current tags:
<form method="get" action="<%= locationLink %>" style="display:inline;">
<fmt:message key="jsp.mydspace.bookmarks.yours"/>: <input size=20 name="bookmarked" value="<%=bookmarked%>" />
<input type="submit" name="Bookmark-Flag" value="<fmt:message key="jsp.display-item.bookmark"/>"/>
<% if (otherBookmark != null && (!"".equals(otherBookmark))) { %>
<br/><fmt:message key="jsp.mydspace.bookmarks.theirs"/>: <%=otherBookmark%>
<% } %>
</form>
|
in mydspace/main.jsp (where you want to display user's tags):
Code Block |
---|
... Imports... <%@ page import="org.dspace.eperson.BookmarkManager" %> ... Initialization... Context context = UIUtil.obtainContext(request); Map taglist = null; if (user != null) taglist = BookmarkManager.getBookmarkTags(context,user); %> ... Display: <% if (taglist != null) { %> <li><a href="<%= request.getContextPath() %>/bookmark"><fmt:message key="jsp.mydspace.main.bookmarks.link"/></a> <ul> <% Iterator curTag = taglist.keySet().iterator(); while (curTag.hasNext()) { String aTag = (String) curTag.next(); Integer aFreq = (Integer) taglist.get(aTag); %><li><a href="<%= request.getContextPath() %>/bookmark?tag=<%= aTag %>"><%=aTag%> (<%=aFreq.intValue()%>)</a></li><% } %> </ul></li> <% } %> |
in WEB-INF/web.xml:
You must add the definitions for the two new servlets (tagging servlet and tags list servlet):
Panel |
---|
... |
...
mapping> |
...
For any help, I check the DSpace Developpers list.
...