r232 - in trunk: . bow-ui bow-ui/src/main/java/org/chorem/bow bow-ui/src/main/java/org/chorem/bow/action bow-ui/src/main/java/org/chorem/bow/interceptor bow-ui/src/main/resources bow-ui/src/main/resources/i18n bow-ui/src/main/webapp/css bow-ui/src/main/webapp/img bow-ui/src/main/webapp/jsp bow-ui/src/main/webapp/jsp/inc
Author: sletellier Date: 2011-03-10 12:29:17 +0100 (Thu, 10 Mar 2011) New Revision: 232 Url: http://chorem.org/repositories/revision/bow/232 Log: - Revert up version of struts (ticket #317) - Fix i18n file name - Fix javadoc - Fix #300 Importing bookmarks works with invalid files - Partial fix of evol #271 : move Import/Export to preference page - Fix css (msg dialog on Chromium) Modified: trunk/bow-ui/pom.xml trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java trunk/bow-ui/src/main/java/org/chorem/bow/interceptor/LoginInterceptor.java trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties trunk/bow-ui/src/main/resources/log4j.properties trunk/bow-ui/src/main/resources/struts.xml trunk/bow-ui/src/main/webapp/css/bookmark.css trunk/bow-ui/src/main/webapp/css/global.css trunk/bow-ui/src/main/webapp/img/fondconnexion.jpg trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp trunk/bow-ui/src/main/webapp/jsp/preferences.jsp trunk/pom.xml Modified: trunk/bow-ui/pom.xml =================================================================== --- trunk/bow-ui/pom.xml 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/pom.xml 2011-03-10 11:29:17 UTC (rev 232) @@ -56,7 +56,7 @@ </dependency> <dependency> - <groupId>org.apache.struts.xwork</groupId> + <groupId>com.opensymphony</groupId> <artifactId>xwork-core</artifactId> </dependency> @@ -70,11 +70,11 @@ <artifactId>commons-logging</artifactId> </dependency> - <!--dependency> + <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.2.1</version> - </dependency--> + </dependency> <dependency> <groupId>org.htmlparser</groupId> Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BookmarkUtils.java 2011-03-10 11:29:17 UTC (rev 232) @@ -23,17 +23,19 @@ */ package org.chorem.bow; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Set; +import java.text.ParseException; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; import org.nuiton.util.StringUtil; +import org.nuiton.wikitty.WikittyUtil; +import org.nuiton.wikitty.entities.Wikitty; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.FacetTopic; import org.nuiton.wikitty.search.PagedResult; @@ -43,6 +45,11 @@ public class BookmarkUtils { + /** + * Logger. + */ + public static Log log = LogFactory.getLog(BookmarkUtils.class); + static public Criteria getBookmarkListCriteriaByUser(BowPreference user, String searchLine) { Criteria criteria = null; if (user != null) { @@ -84,7 +91,7 @@ return bookmarkActions; } - static public List<FacetTopic> getBookmarksByImportDate(HttpServletRequest request, BowUser user) { + static public Map<String, Integer> getBookmarksByImportDate(HttpServletRequest request, BowUser user) throws ParseException { BowSession session = BowSession.getBowSession(request); WikittyProxy proxy = session.getProxy(); Criteria criteria = Search.query() @@ -92,14 +99,24 @@ .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria() .addFacetField(BowImport.FQ_FIELD_BOWIMPORT_IMPORTDATE) .setFirstIndex(0).setEndIndex(0); + List<FacetTopic> bookmarksImportDate = proxy.findAllByCriteria(BowImport.class, criteria) .getTopic(BowImport.FQ_FIELD_BOWIMPORT_IMPORTDATE); - request.setAttribute("bookmarksImportDate", bookmarksImportDate); - return bookmarksImportDate; + + // Extract imports + Map<String, Integer> result = new HashMap<String, Integer>(); + for (FacetTopic facet : bookmarksImportDate) { + String dateAsString = facet.getTopicName(); + + result.put(dateAsString, facet.getCount()); + } + + return result; } - /* @param html String html + /** + * @param html String html * @param name String name * @param user User user * @return Bookmark the bookmark filled @@ -112,7 +129,8 @@ return bookmark; } - /* @param html String html + /** + * @param html String html * @return Date from the html */ public static Date getDateFromHtml(String html) { @@ -131,7 +149,8 @@ return date; } - /* @param bookmarks List<Bookmarks> bookmarks + /** + * @param bookmarks List<Bookmarks> bookmarks * @return String the html file */ public static String getExportHtmlBookmark(List<BowBookmark> bookmarks) { @@ -163,8 +182,9 @@ return export; } - /* @param html String html - * + /** + * @param html String html + * @return url */ public static String getUrlFromHtml(String html) { String url = ""; @@ -190,12 +210,12 @@ return tags; } - /* @param url String which contains the bookmark url + /** + * @param url String which contains the bookmark url * @param nameAndTags String which contains the name and the tags of the * bookmark separated by '|' ==> name|tag1 tag2... * @param user bookmark user - * @return null if all fields are not correctly filled - * @return Bookmark the website bookmark + * @return Bookmark the website bookmark, null if all fields are not correctly filled */ public static BowBookmark createBookmark(String url, String nameAndTags, BowUser user) { @@ -257,16 +277,17 @@ /** * Create new Bookmark * - * @param url - * @param name - * @param tags - * @param user - * @param alias - * @param date - * @return + * @param url of bookmark + * @param name of bookmark + * @param tags of bookmark + * @param user creating bookmark + * @param alias of bookmark + * @param date of creation + * @return bookMarl created */ public static BowBookmark createBookmark(String url, String name, String tags, BowUser user, String alias, Date date) { + BowBookmark bookmark = new BowBookmarkImpl(); if (name != null) { name = name.trim(); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/BowUtils.java 2011-03-10 11:29:17 UTC (rev 232) @@ -23,7 +23,12 @@ */ package org.chorem.bow; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.UUID; + +import org.apache.commons.lang.time.DateUtils; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.WikittyProxy; @@ -31,10 +36,39 @@ public class BowUtils { + public static String BOW_DATE_PATTERN = "dd/MM/yyyy HH:mm:ss"; + private BowUtils() { } /** + * Convert bow formated date to date object + * + * @param dateAsString bow formated date + * @return Date parsed + * @throws ParseException if error occured on parsing date + */ + static public Date parseDate(String dateAsString) throws ParseException { + return DateUtils.parseDate(dateAsString, new String[]{BOW_DATE_PATTERN}); + } + + /** + * Convert date to bow format + * + * @param date date to format + * @return formated date + * @throws ParseException if error occured on parsing date + */ + static public String formatDate(Date date) throws ParseException { + if (date == null) { + return null; + } + SimpleDateFormat format = new SimpleDateFormat(BOW_DATE_PATTERN); + return format.format(date); + } + + + /** * Generates a random token * * @return the generated token @@ -49,8 +83,8 @@ /** * Redirects the user either on the home page or on the search page * - * @param searchLine - * @param fullTextLine + * @param searchLine search line + * @param fullTextLine full text search * @return the page where the user will be redirected */ static public String redirectTo(String searchLine, String fullTextLine) { @@ -67,8 +101,7 @@ * * @param session the session * @param token either the temporary or the permanent token - * @return null if the token doesn't exist - * @return the user if the token is valid + * @return the user if the token is valid, null if the token doesn't exist */ static public BowUser checkToken(BowSession session, String token) { BowUser result = null; @@ -81,9 +114,9 @@ /** * check if token exist, if true, put User associated with it, in BowSession * - * @param token String which contains the MD5 encoding token - * @return null the token doesn't exist - * @return User the token owner + * @param session bow session + * @param token which contains the MD5 encoding token + * @return User the token owner, null if the token doesn't exist */ protected static boolean checkPermanentToken(BowSession session, String token) { WikittyProxy proxy = session.getProxy(); @@ -103,9 +136,9 @@ /** * Check token with temporary token * - * @param token String which contains the MD5 encoding token - * @return null the token doesn't exist - * @return User the token owner + * @param session bow session + * @param token which contains the MD5 encoding token + * @return user the token owner, null if the token doesn't exist */ protected static boolean checkTemporaryToken(BowSession session, String token) { String temporaryToken = session.getTemporaryToken(); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/DeleteImportAction.java 2011-03-10 11:29:17 UTC (rev 232) @@ -37,9 +37,6 @@ /** * Supprime un import de bookmark * - * FIXME poussin 20110211 la suppression devrait se faire par rapport a l'id - * de l'import et non pas par rapport a la date :( - * * @author poussin */ public class DeleteImportAction extends BowBaseAction { @@ -72,7 +69,13 @@ .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()) .eq(BowImport.FQ_FIELD_BOWIMPORT_IMPORTDATE, date).criteria(); List<BowImport> bookmarks = proxy.findAllByCriteria(BowImport.class, criteria).getAll(); + + if (log.isDebugEnabled()) { + log.debug("Will delete " + bookmarks.size() + " bookmarks"); + } + proxy.delete(bookmarks); + addActionMessage(getText(n_("bow.bookmark.import.delete.successful"))); } } catch (Exception e) { Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ExportBookmarksAction.java 2011-03-10 11:29:17 UTC (rev 232) @@ -54,7 +54,7 @@ @Override public void setServletResponse(HttpServletResponse response) { - this.response = response; + this.response = response; } public InputStream getInputStream() { @@ -66,14 +66,22 @@ */ public String execute() { WikittyProxy proxy = getBowProxy(); + + // get current user BowUser user = getBowSession().getUser(); + + // Get all bookmark for user Criteria criteria = Search.query() .eq(BowBookmark.FQ_FIELD_BOWBOOKMARK_BOWUSER, user.getWikittyId()).criteria(); List<BowBookmark> bookmarks = proxy.findAllByCriteria(BowBookmark.class, criteria).getAll(); + + // Export all String export = BookmarkUtils.getExportHtmlBookmark(bookmarks); BufferedWriter out = null; try { + + // Write result in temp file File tmp = File.createTempFile("bookmarks", ".tmp.html"); tmp.deleteOnExit(); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/ImportBookmarksAction.java 2011-03-10 11:29:17 UTC (rev 232) @@ -32,15 +32,9 @@ import javax.servlet.http.HttpServletRequest; +import org.apache.commons.lang.StringUtils; import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.BowBookmark; -import org.chorem.bow.BookmarkUtils; -import org.chorem.bow.BowInit; -import org.chorem.bow.BowSearch; -import org.chorem.bow.BowUtils; -import org.chorem.bow.BowImportHelper; -import org.chorem.bow.BowPreference; -import org.chorem.bow.BowUser; +import org.chorem.bow.*; import org.htmlparser.Node; import org.htmlparser.Parser; import org.htmlparser.util.NodeList; @@ -58,7 +52,9 @@ */ public class ImportBookmarksAction extends BowBaseAction implements ServletRequestAware { + private static final long serialVersionUID = -5962680416570797028L; + protected File upfile; protected String upfileContentType; protected String upfileFileName; @@ -154,102 +150,77 @@ this.request = request; } - // protected void createImportExtension(List<Bookmark> bookmarks) { - // if (bookmarks != null && !bookmarks.isEmpty()) { - // WikittyProxy proxy = getBowProxy(); - // List<String> ids = new ArrayList<String>(); - // - // for (Bookmark bookmark : bookmarks) { - // String id = bookmark.getWikittyId(); - // ids.add(id); - // } - // Date date = new Date(); - // List<Import> imports = proxy.restore(Import.class, ids); - // - // for (Import imp : imports) { - // imp.setDate(date); - // } - // proxy.store(imports); - // } - // } - protected void parseHtmlToBookmarks(NodeList list, BowUser user, Date date, List<BowBookmark> bookmarks, List<String> tagList) throws ParserException { - if (list != null) { - boolean isFolder = false; - SimpleNodeIterator it = list.elements(); - while (it.hasMoreNodes()) { - Node node = it.nextNode(); - String plainText = node.toPlainTextString(); // The text between - // two heads ==> - // <toto>plainText</toto> - String text = node.getText(); // The text in the head ==> - // <text></toto> + boolean isFolder = false; + SimpleNodeIterator it = list.elements(); - if (text != null && text.startsWith("H3")) { // H3 = folder - if (plainText != null && !plainText.isEmpty()) { - tagList.add(plainText); // Adds the folder name to the - // tagList - isFolder = true; - } - } else if (text != null && text.startsWith("A HREF")) { // HREF - // = new - // bookmarks - BowBookmark bookmark = BookmarkUtils - .createBookmarkFromHtml(text, plainText, user); - Wikitty w = getBowProxy().getWikitty(bookmark); - BowImportHelper.addExtension(w); - BowImportHelper.setImportDate(w, date); - BookmarkUtils.addTagsToBookmark(tagList, bookmark); + while (it.hasMoreNodes()) { + Node node = it.nextNode(); + String plainText = node.toPlainTextString(); // The text between + // two heads ==> + // <toto>plainText</toto> + String text = node.getText(); // The text in the head ==> + // <text></toto> - if (bookmark != null) { - bookmarks.add(bookmark); - } + if (text != null && text.startsWith("H3")) { // H3 = folder + if (plainText != null && !plainText.isEmpty()) { + tagList.add(plainText); // Adds the folder name to the + // tagList + isFolder = true; } - NodeList children = node.getChildren(); + } else if (text != null && text.startsWith("A HREF")) { // HREF + // = new + // bookmarks + BowBookmark bookmark = BookmarkUtils + .createBookmarkFromHtml(text, plainText, user); + Wikitty w = getBowProxy().getWikitty(bookmark); + BowImportHelper.addExtension(w); + BowImportHelper.setImportDate(w, date); + BookmarkUtils.addTagsToBookmark(tagList, bookmark); - if (children != null) { - parseHtmlToBookmarks(children, user, date, bookmarks, - tagList); // If there is an under node = recursion - } + bookmarks.add(bookmark); } - if (isFolder) { // If we find a folder, we have to remove it - int index = tagList.size() - 1; + NodeList children = node.getChildren(); - if (index > -1) { - tagList.remove(index); - } + if (children != null) { + parseHtmlToBookmarks(children, user, date, bookmarks, + tagList); // If there is an under node = recursion } } + if (isFolder) { // If we find a folder, we have to remove it + int index = tagList.size() - 1; + + if (index > -1) { + tagList.remove(index); + } + } } public String execute() { + + log.info("Importing boormarks : " + upfile); try { BowPreference user = getBowSession().getPreference(); + // Struts limite to html files, is null if not one if (upfile != null) { - // try { - // List<?> lines = FileUtils.readLines(upfile); - // String content = ""; - // - // for (Object line : lines) { - // content += (String)line; - // } WikittyProxy proxy = getBowProxy(); try { URL url = upfile.toURI().toURL(); Parser parser = new Parser(url.openConnection()); NodeList list = parser.parse(null); + List<BowBookmark> bookmarks = new ArrayList<BowBookmark>(); parseHtmlToBookmarks(list, user, new Date(), bookmarks, new ArrayList<String>()); - bookmarks = proxy.store(bookmarks); - // createImportExtension(bookmarks); + proxy.store(bookmarks); + redirectTo = BowUtils.redirectTo(searchLine, fullTextLine); - if (searchLine == null || searchLine.isEmpty()) { + if (StringUtils.isEmpty(searchLine)) { BowInit.initHomePage(request, user); } else { BowSearch.search(request, user); @@ -266,11 +237,16 @@ } catch (IOException e2) { addActionError(getText(n_("bow.error.internal"))); log.error(e2.getMessage(), e2); + return ERROR; } + } else { + addActionError(getText(n_("bow.bookmark.badFileFormat"))); + return ERROR; } } catch (Exception e) { addActionError(getText(n_("bow.error.internal"))); log.error(e.getMessage(), e); + return ERROR; } return SUCCESS; } Modified: trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/action/PreferencesAction.java 2011-03-10 11:29:17 UTC (rev 232) @@ -23,16 +23,14 @@ */ package org.chorem.bow.action; +import java.util.Date; import java.util.List; +import java.util.Map; import javax.servlet.http.HttpServletRequest; import org.apache.struts2.interceptor.ServletRequestAware; -import org.chorem.bow.BookmarkUtils; -import org.chorem.bow.BowInit; -import org.chorem.bow.BowPreference; -import org.chorem.bow.BowProxy; -import org.chorem.bow.BowUser; +import org.chorem.bow.*; import org.nuiton.util.StringUtil; import org.nuiton.wikitty.search.Criteria; import org.nuiton.wikitty.search.FacetTopic; @@ -57,7 +55,7 @@ protected String currentPassword; protected String confirmNewPassword; protected String update; - protected List<FacetTopic> bookmarksImportDate; + protected Map<String, Integer> bookmarksImportDate; protected HttpServletRequest request; @@ -204,14 +202,14 @@ /** * @return the bookmarksImportDate */ - public List<FacetTopic> getBookmarksImportDate() { + public Map<String, Integer> getBookmarksImportDate() { return bookmarksImportDate; } /** * @param bookmarksImportDate the bookmarksImportDate to set */ - public void setBookmarksImportDate(List<FacetTopic> bookmarksImportDate) { + public void setBookmarksImportDate(Map<String, Integer> bookmarksImportDate) { this.bookmarksImportDate = bookmarksImportDate; } @@ -264,8 +262,13 @@ BowProxy proxy = getBowSession().getProxy(); // BowPreference extends BowUser, donc on l'utilise pour tout BowPreference preference = getBowSession().getPreference(); - - setBookmarksImportDate(BookmarkUtils.getBookmarksByImportDate(request, preference)); + + Map<String,Integer> bookmarksByImportDate = BookmarkUtils.getBookmarksByImportDate(request, preference); + + if (log.isDebugEnabled()) { + log.debug("bookmarksByImportDate found : " + (bookmarksByImportDate == null ? "null" : bookmarksByImportDate.size())); + } + setBookmarksImportDate(bookmarksByImportDate.isEmpty() ? null : bookmarksByImportDate); if (update != null) { //If the user submitted the form preference = changePreference(preference); preference = proxy.store(preference); Modified: trunk/bow-ui/src/main/java/org/chorem/bow/interceptor/LoginInterceptor.java =================================================================== --- trunk/bow-ui/src/main/java/org/chorem/bow/interceptor/LoginInterceptor.java 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/java/org/chorem/bow/interceptor/LoginInterceptor.java 2011-03-10 11:29:17 UTC (rev 232) @@ -72,7 +72,8 @@ //Authenticates the user bowSession.setUser(user); } - } else { //If the token is empty + } else { + //If the token is empty ServletActionContext.getResponse().sendRedirect(redirect); result = null; } Modified: trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties =================================================================== --- trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/resources/i18n/bow-ui_en_GB.properties 2011-03-10 11:29:17 UTC (rev 232) @@ -58,6 +58,10 @@ bow.preferences.confirmNewPassword=Confirm new password bow.preferences.currentPassword=Current password bow.preferences.emailAldyExists=This email address is already linked with another account +bow.preferences.export.bookmarks=Export bookmarks +bow.preferences.import.bookmarks=Import bookmarks +bow.preferences.import.submit=Import +bow.preferences.importExport=Import / Export bow.preferences.importedBookmarks=Imported bookmarks bow.preferences.newPassword=New password bow.preferences.noImportedBookmarks=No imported bookmarks @@ -92,7 +96,6 @@ bow.rightMenu.bookmark.temporaryLink=Bookmark add link (session) bow.rightMenu.bookmark.temporaryLinkDescription=Add this link to your favourites to bookmark others in the future. This link is only available while you are connected on the site\! bow.rightMenu.chromiumExtension=Chromium extension -bow.rightMenu.exportBookmarks=Export bookmarks bow.rightMenu.extensions=Extensions bow.rightMenu.find.submit=Find bow.rightMenu.fullTextSearch=Full text search Modified: trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties =================================================================== --- trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/resources/i18n/bow-ui_fr_FR.properties 2011-03-10 11:29:17 UTC (rev 232) @@ -8,7 +8,7 @@ bow.admin.panel=Panneau d''administration bow.admin.reIndexationDone=Les donn\u00E9es ont bien \u00E9t\u00E9 r\u00E9index\u00E9es bow.bookmark.add.successful=Marque-page ajout\u00E9 avec succ\u00E8s -bow.bookmark.badFileFormat=Mauvais format de fichier de favoris \: import impossible (le fichier doit avoir un format de type Netscape) +bow.bookmark.badFileFormat=Mauvais format de fichier de favoris \: import impossible (le format de type Netscape n'est pas support\u00E9) bow.bookmark.description=Description bow.bookmark.import.delete.successful=Les marque-pages import\u00E9s ont \u00E9t\u00E9 supprim\u00E9s avec succ\u00E8s bow.bookmark.import.successful=Les marque-pages ont \u00E9t\u00E9 import\u00E9s avec succ\u00E8s @@ -58,6 +58,10 @@ bow.preferences.confirmNewPassword=Confirmez votre mot de passe bow.preferences.currentPassword=Mot de passe actuel bow.preferences.emailAldyExists=Cette addresse email est d\u00E9j\u00E0 utilis\u00E9e par un autre compte +bow.preferences.export.bookmarks=Exporter les marque-pages +bow.preferences.import.bookmarks=Importer des marques-pages +bow.preferences.import.submit=Importer +bow.preferences.importExport=Import / Export bow.preferences.importedBookmarks=Marque-pages import\u00E9s bow.preferences.newPassword=Nouveau mot de passe bow.preferences.noImportedBookmarks=Aucun marque-page import\u00E9 @@ -92,7 +96,6 @@ bow.rightMenu.bookmark.temporaryLink=Ajouter un bookmark (session) bow.rightMenu.bookmark.temporaryLinkDescription=Ajoutez ce lien \u00E0 vos favoris pour pouvoir bookmarker vos liens dans le futur. Ce lien est seulement disponible tant que vous \u00EAtes connect\u00E9 sur le site \! bow.rightMenu.chromiumExtension=Extension pour chromium -bow.rightMenu.exportBookmarks=Exporter les marque-pages bow.rightMenu.extensions=Extensions bow.rightMenu.find.submit=Rechercher bow.rightMenu.fullTextSearch=Recherche full text Modified: trunk/bow-ui/src/main/resources/log4j.properties =================================================================== --- trunk/bow-ui/src/main/resources/log4j.properties 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/resources/log4j.properties 2011-03-10 11:29:17 UTC (rev 232) @@ -22,7 +22,7 @@ # #L% ### # Global logging configuration -log4j.rootLogger=WARN, stdout +log4j.rootLogger=FATAL, stdout # Console output... log4j.appender.stdout=org.apache.log4j.ConsoleAppender @@ -30,5 +30,5 @@ log4j.appender.stdout.layout.ConversionPattern=%d %5p [%t] (%F:%L) %M - %m%n # package level -log4j.logger.org.chorem.bow=INFO -log4j.logger.org.nuiton=INFO +log4j.logger.org.chorem.bow=DEBUG +#log4j.logger.org.nuiton.util.TimeLog=WARN \ No newline at end of file Modified: trunk/bow-ui/src/main/resources/struts.xml =================================================================== --- trunk/bow-ui/src/main/resources/struts.xml 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/resources/struts.xml 2011-03-10 11:29:17 UTC (rev 232) @@ -23,218 +23,237 @@ #L% --> -<!DOCTYPE struts PUBLIC - "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" - "http://struts.apache.org/dtds/struts-2.0.dtd"> +<!DOCTYPE struts PUBLIC + "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" + "http://struts.apache.org/dtds/struts-2.0.dtd"> <struts> - <constant name="struts.devMode" value="true" /> - <constant name="struts.ognl.allowStaticMethodAccess" value="true" /> - - <!-- <default-action-ref name="" />--><!-- TODO: action à lancer quand une action n'existe pas --> - <package name="login" extends="struts-default"> - <interceptors> - <interceptor name="aldyLogged" class="org.chorem.bow.interceptor.AldyLoggedInterceptor"> - <param name="redirect">home.action</param> - </interceptor> - <interceptor-stack name="aldyLoggedStack"> - <interceptor-ref name="aldyLogged" /> - <interceptor-ref name="defaultStack" /> - </interceptor-stack> - </interceptors> - <action name="register_*" method="{1}" class="org.chorem.bow.action.RegisterAction"> - <interceptor-ref name="aldyLoggedStack" /> - <result name="input">/jsp/register.jsp</result> - <result type="redirectAction">home</result> - </action> - <action name="forgotPassword_*" method="{1}" class="org.chorem.bow.action.ForgotPasswordAction"> - <interceptor-ref name="aldyLoggedStack" /> - <result name="input">/jsp/forgotPassword.jsp</result> - <result type="redirectAction">login_input</result> - </action> - <action name="login_*" method="{1}" class="org.chorem.bow.action.LoginAction"> - <interceptor-ref name="aldyLoggedStack" /> - <result name="input">/jsp/login.jsp</result> - <result name="login" type="redirectAction">home</result> - <result type="redirectAction">home</result> - </action> - <action name="logout" class="org.chorem.bow.action.LogoutAction"> - <result type="redirectAction">login_input</result> - </action> - </package> + <constant name="struts.devMode" value="true"/> + <constant name="struts.ognl.allowStaticMethodAccess" value="true"/> + <!-- <default-action-ref name="" />--><!-- TODO: action à lancer quand une action n'existe pas --> + <package name="login" extends="struts-default"> + <interceptors> + <interceptor name="aldyLogged" class="org.chorem.bow.interceptor.AldyLoggedInterceptor"> + <param name="redirect">home.action</param> + </interceptor> + <interceptor-stack name="aldyLoggedStack"> + <interceptor-ref name="aldyLogged"/> + <interceptor-ref name="defaultStack"/> + </interceptor-stack> + </interceptors> + <action name="register_*" method="{1}" class="org.chorem.bow.action.RegisterAction"> + <interceptor-ref name="aldyLoggedStack"/> + <result name="input">/jsp/register.jsp</result> + <result type="redirectAction">home</result> + </action> + <action name="forgotPassword_*" method="{1}" class="org.chorem.bow.action.ForgotPasswordAction"> + <interceptor-ref name="aldyLoggedStack"/> + <result name="input">/jsp/forgotPassword.jsp</result> + <result type="redirectAction">login_input</result> + </action> + <action name="login_*" method="{1}" class="org.chorem.bow.action.LoginAction"> + <interceptor-ref name="aldyLoggedStack"/> + <result name="input">/jsp/login.jsp</result> + <result name="login" type="redirectAction">home</result> + <result type="redirectAction">home</result> + </action> + <action name="logout" class="org.chorem.bow.action.LogoutAction"> + <result type="redirectAction">login_input</result> + </action> + </package> + <package name="bookmark" extends="struts-default"> - <interceptors> - <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> - <param name="redirect">login_input.action</param> - </interceptor> - <interceptor-stack name="loginStack"> - <interceptor-ref name="login" /> - <interceptor-ref name="defaultStack" /> - </interceptor-stack> - </interceptors> + <interceptors> + <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> + <param name="redirect">login_input.action</param> + </interceptor> + <interceptor-stack name="loginStack"> + <interceptor-ref name="login"/> + <interceptor-ref name="defaultStack"/> + </interceptor-stack> + </interceptors> <action name="importBookmarks" class="org.chorem.bow.action.ImportBookmarksAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirect">${redirectTo}</result> - <result name="input" type="redirect">${redirectTo}</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="login"/> + <interceptor-ref name="exception"/> + <interceptor-ref name="alias"/> + <interceptor-ref name="servletConfig"/> + <interceptor-ref name="i18n"/> + <interceptor-ref name="prepare"/> + <interceptor-ref name="chain"/> + <interceptor-ref name="debugging"/> + + <!-- TODO sletellier 20110310 : create own interceptor to define better error message --> + <interceptor-ref name="fileUpload"> + <param name="allowedExtensions">.html</param> + </interceptor-ref> + <interceptor-ref name="staticParams"/> + <interceptor-ref name="actionMappingParams"/> + <interceptor-ref name="params"> + <param name="excludeParams">dojo\..*,^struts\..*</param> + </interceptor-ref> + <interceptor-ref name="conversionError"/> + + <result type="redirectAction">preferences</result> + <result name="error">/jsp/preferences.jsp</result> </action> <action name="exportBookmarks" class="org.chorem.bow.action.ExportBookmarksAction"> - <interceptor-ref name="loginStack" /> - <result type="stream"> - <param name="contentType">application/octet-stream</param> - <param name="inputName">inputStream</param> - <param name="contentDisposition">attachment;filename="bookmarks.html"</param> - </result> + <interceptor-ref name="loginStack"/> + <result type="stream"> + <param name="contentType">application/octet-stream</param> + <param name="inputName">inputStream</param> + <param name="contentDisposition">attachment;filename="bookmarks.html"</param> + </result> </action> - <action name="modifyBookmark" class="org.chorem.bow.action.ModifyBookmarkAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirectAction">home</result> + <action name="modifyBookmark" class="org.chorem.bow.action.ModifyBookmarkAction"> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirectAction">home</result> </action> <action name="removeBookmark" class="org.chorem.bow.action.RemoveBookmarkAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirect">${redirectTo}</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirect">${redirectTo}</result> </action> - <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction"> - <interceptor-ref name="loginStack" /> - <result name="home" type="redirectAction">home</result> - <result name="search">/jsp/search.jsp</result> + <action name="editBookmark" class="org.chorem.bow.action.EditBookmarkAction"> + <interceptor-ref name="loginStack"/> + <result name="home" type="redirectAction">home</result> + <result name="search">/jsp/search.jsp</result> </action> <action name="deleteImport" class="org.chorem.bow.action.DeleteImportAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirectAction">preferences</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirectAction">preferences</result> </action> <action name="addUrl" class="org.chorem.bow.action.AddUrlAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirect">${redirectTo}</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirect">${redirectTo}</result> </action> </package> - + <package name="search" extends="struts-default"> - <interceptors> - <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> - <param name="redirect">login_input.action</param> - </interceptor> - <interceptor-stack name="loginStack"> - <interceptor-ref name="login" /> - <interceptor-ref name="defaultStack" /> - </interceptor-stack> - </interceptors> + <interceptors> + <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> + <param name="redirect">login_input.action</param> + </interceptor> + <interceptor-stack name="loginStack"> + <interceptor-ref name="login"/> + <interceptor-ref name="defaultStack"/> + </interceptor-stack> + </interceptors> <action name="search" class="org.chorem.bow.action.SearchAction"> - <interceptor-ref name="store"> - <param name="operationMode">RETRIEVE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result>/jsp/search.jsp</result> + <interceptor-ref name="store"> + <param name="operationMode">RETRIEVE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result>/jsp/search.jsp</result> </action> <action name="fullText" class="org.chorem.bow.action.FullTextSearchAction"> - <interceptor-ref name="loginStack" /> - <result>/jsp/search.jsp</result> + <interceptor-ref name="loginStack"/> + <result>/jsp/search.jsp</result> </action> <action name="order" class="org.chorem.bow.action.OrderAction"> - <interceptor-ref name="loginStack" /> - <result>/jsp/search.jsp</result> + <interceptor-ref name="loginStack"/> + <result>/jsp/search.jsp</result> </action> <action name="openSearchResult" class="org.chorem.bow.action.OpenSearchResultAction"> - <interceptor-ref name="loginStack" /> - <result type="redirect">${redirectTo}</result> + <interceptor-ref name="loginStack"/> + <result type="redirect">${redirectTo}</result> </action> <action name="openSearchSuggestion" class="org.chorem.bow.action.OpenSearchSuggestionAction"> - <interceptor-ref name="loginStack" /> - <result>/jsp/suggestions.jsp</result> + <interceptor-ref name="loginStack"/> + <result>/jsp/suggestions.jsp</result> </action> <action name="deleteSearchResults" class="org.chorem.bow.action.DeleteSearchResultsAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirectAction">home</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirectAction">home</result> </action> </package> <package name="misc" extends="struts-default"> - <interceptors> - <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> - <param name="redirect">login_input.action</param> - </interceptor> - <interceptor-stack name="loginStack"> - <interceptor-ref name="login" /> - <interceptor-ref name="defaultStack" /> - </interceptor-stack> - </interceptors> + <interceptors> + <interceptor name="login" class="org.chorem.bow.interceptor.LoginInterceptor"> + <param name="redirect">login_input.action</param> + </interceptor> + <interceptor-stack name="loginStack"> + <interceptor-ref name="login"/> + <interceptor-ref name="defaultStack"/> + </interceptor-stack> + </interceptors> <action name="home" class="org.chorem.bow.action.HomeAction"> - <interceptor-ref name="store"> - <param name="operationMode">RETRIEVE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result>/jsp/home.jsp</result> - <result name="input" type="redirectAction">home</result> + <interceptor-ref name="store"> + <param name="operationMode">RETRIEVE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result>/jsp/home.jsp</result> + <result name="input" type="redirectAction">home</result> </action> <action name="locale" class="org.chorem.bow.action.LocaleAction"> - <result type="redirect">/jsp/login.jsp</result> - </action> + <result type="redirect">/jsp/login.jsp</result> + </action> <action name="regenPermToken" class="org.chorem.bow.action.GenerateTokenAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirectAction">preferences</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirectAction">preferences</result> </action> <action name="deleteTag" class="org.chorem.bow.action.DeleteTagAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result type="redirect">${redirectTo}</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result type="redirect">${redirectTo}</result> </action> <action name="redirectToUrl" class="org.chorem.bow.action.RedirectToUrlAction"> - <interceptor-ref name="loginStack" /> - <result name="error" type="redirectAction">home</result> - <result type="redirect">${link}</result> + <interceptor-ref name="loginStack"/> + <result name="error" type="redirectAction">home</result> + <result type="redirect">${link}</result> </action> <action name="*Xml"> <result>/jsp/{1}Xml.jsp</result> </action> <action name="preferences" class="org.chorem.bow.action.PreferencesAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="store"> - <param name="operationMode">RETRIEVE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result name="update" type="redirectAction">preferences</result> - <result name="error">/jsp/preferences.jsp</result> - <result>/jsp/preferences.jsp</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="store"> + <param name="operationMode">RETRIEVE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result name="update" type="redirectAction">preferences</result> + <result name="error">/jsp/preferences.jsp</result> + <result>/jsp/preferences.jsp</result> </action> <action name="admin"> - <interceptor-ref name="loginStack" /> - <result name="error">/jsp/login.jsp</result> - <result>/jsp/admin.jsp</result> + <interceptor-ref name="loginStack"/> + <result name="error">/jsp/login.jsp</result> + <result>/jsp/admin.jsp</result> </action> <action name="reIndexation" class="org.chorem.bow.action.ReIndexationAction"> - <interceptor-ref name="store"> - <param name="operationMode">STORE</param> - </interceptor-ref> - <interceptor-ref name="loginStack" /> - <result>/jsp/admin.jsp</result> + <interceptor-ref name="store"> + <param name="operationMode">STORE</param> + </interceptor-ref> + <interceptor-ref name="loginStack"/> + <result>/jsp/admin.jsp</result> </action> <action name="migrate04To05" class="org.chorem.bow.action.Migrate04To05Action"> - <interceptor-ref name="loginStack" /> - <result>/jsp/admin.jsp</result> + <interceptor-ref name="loginStack"/> + <result>/jsp/admin.jsp</result> </action> </package> </struts> Modified: trunk/bow-ui/src/main/webapp/css/bookmark.css =================================================================== --- trunk/bow-ui/src/main/webapp/css/bookmark.css 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/webapp/css/bookmark.css 2011-03-10 11:29:17 UTC (rev 232) @@ -367,7 +367,7 @@ } .formFrame{ - width:365px; + width:400px; height:315px; background:url('../img/fondconnexion.jpg') no-repeat; position:relative; Modified: trunk/bow-ui/src/main/webapp/css/global.css =================================================================== --- trunk/bow-ui/src/main/webapp/css/global.css 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/webapp/css/global.css 2011-03-10 11:29:17 UTC (rev 232) @@ -117,7 +117,7 @@ #actionmessageHeader{ color:blue; - position:relative; + position:fixed; left:25%; top:12px; } Modified: trunk/bow-ui/src/main/webapp/img/fondconnexion.jpg =================================================================== (Binary files differ) Modified: trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/webapp/jsp/inc/header.jsp 2011-03-10 11:29:17 UTC (rev 232) @@ -26,19 +26,23 @@ <div id="header" xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" xmlns:jsp="http://java.sun.com/JSP/Page"> - <s:if test="%{#session.BowSession.user != null}"> - <s:url var="homeToken" action="home"> - <s:param name="token"><s:property value="%{#session.BowSession.getPermanentToken()}" /></s:param> - </s:url> - <s:a cssClass="logo" href="%{homeToken}">bow</s:a> - </s:if> - <s:else> - <s:a cssClass="logo" action="home">bow</s:a> - </s:else> - <span id="actionmessageHeader"> - <s:actionmessage /> - </span> - <span id="actionerrorHeader"> - <s:actionerror /> - </span> + <div> + <s:if test="%{#session.BowSession.user != null}"> + <s:url var="homeToken" action="home"> + <s:param name="token"><s:property value="%{#session.BowSession.getPermanentToken()}" /></s:param> + </s:url> + <s:a cssClass="logo" href="%{homeToken}">bow</s:a> + </s:if> + <s:else> + <s:a cssClass="logo" action="home">bow</s:a> + </s:else> + </div> + <div id="msg"> + <span id="actionmessageHeader"> + <s:actionmessage /> + </span> + <span id="actionerrorHeader"> + <s:actionerror /> + </span> + </div> </div> \ No newline at end of file Modified: trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/webapp/jsp/inc/rightMenu.jsp 2011-03-10 11:29:17 UTC (rev 232) @@ -103,17 +103,6 @@ </div> </s:form> </div> - <div id="import"> - <s:form action="importBookmarks" method="post" enctype="multipart/form-data"> - <div class="input"> - <s:file size="15%" name="upfile" key="bow.rightMenu.importBookmarks" labelSeparator="" /> - <s:hidden name="searchLine" value="%{searchLine}" /> - <s:hidden name="fullTextLine" value="%{fullTextLine}" /> - <s:submit key="bow.rightMenu.import.submit" name="submit" /> - </div> - </s:form> - <s:a action="exportBookmarks"><s:text name="bow.rightMenu.exportBookmarks" /></s:a> - </div> <div class="colonnebas"> <img src="img/piedmenu.jpg" width="401" height="77" alt="Pied de menu" /> </div> Modified: trunk/bow-ui/src/main/webapp/jsp/preferences.jsp =================================================================== --- trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/bow-ui/src/main/webapp/jsp/preferences.jsp 2011-03-10 11:29:17 UTC (rev 232) @@ -1,136 +1,147 @@ <!-- - #%L - bow - - $Id$ - $HeadURL$ - %% - Copyright (C) 2010 CodeLutin - %% - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see <http://www.gnu.org/licenses/>. - #L% - --> -<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> -<%@taglib prefix="s" uri="/struts-tags"%> -<%@page import="org.chorem.bow.BowImport" %> -<%@page import="org.nuiton.wikitty.search.FacetTopic" %> -<%@page import="java.util.List" %> +#%L +bow +$Id$ +$HeadURL$ +%% +Copyright (C) 2010 CodeLutin +%% +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Affero General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU Affero General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +#L% +--> +<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> +<%@taglib prefix="s" uri="/struts-tags" %> + <html xmlns:s="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" xmlns:jsp="http://java.sun.com/JSP/Page"> - <head> - <title><s:text name="bow.preferences.title" /></title> - <s:url var="css" value="/css/bookmark.css" /> - <link href="${css}" rel="stylesheet" type="text/css" /> - <s:head /> - </head> - <body> - <div id="content"> - <div class="menu clearfix"> - <h2><s:text name="bow.preferences.title" /></h2> - </div> - <s:actionerror /> - <s:form action="preferences"> - <div class="formFrame"> - <h3><s:text name="bow.preferences.userInfo"/></h3> +<head> + <title><s:text name="bow.preferences.title"/></title> + <s:url var="css" value="/css/bookmark.css"/> + <link href="${css}" rel="stylesheet" type="text/css"/> + <s:head/> +</head> +<body> +<div id="content"> + <div class="menu clearfix"> + <h2><s:text name="bow.preferences.title"/></h2> + </div> + <s:actionerror/> + <s:form action="preferences"> + <div class="formFrame"> + <h3><s:text name="bow.preferences.userInfo"/></h3> - <p> - <s:textfield key="bow.login.email" name="email" - labelposition="top"/><br/> - <s:password key="bow.preferences.currentPassword" - name="currentPassword" labelposition="top"/><br/> - <s:password key="bow.preferences.newPassword" name="newPassword" - labelposition="top"/><br/> - <s:password key="bow.preferences.confirmNewPassword" - name="confirmNewPassword" labelposition="top"/><br/> - <s:submit key="bow.preferences.submit" name="submit"/><br/> - </p> -<!-- - </p> - </div> - <div class="formFrame"> - <p> ---> - <p> - <ul> - <li><strong><s:text name="bow.rightMenu.token.permanent"/> - :</strong><s:property value="%{#session.BowSession.getPermanentToken()}" /> - </li> - <li><strong><s:text name="bow.rightMenu.token.temporary"/> - :</strong><s:property value="%{#session.BowSession.getTemporaryToken()}" /> - </li> - </ul> - <s:url var="regenPermToken" action="regenPermToken"/> - <s:a href="%{regenPermToken}" id="regenPermToken"><s:text - name="bow.preferences.regenPermToken"/></s:a> - </p> - </div> - <div class="formFrame"> - <h3><s:text name="bow.preferences.siteLook" /></h3> - <p> - <s:textfield key="bow.preferences.colors" name="colors" labelposition="top" /><br /> - <s:textfield key="bow.preferences.tagsNb" name="tagsNb" labelposition="top" /><br /> - <s:textfield key="bow.preferences.bookmarksHomePage" name="bookmarksHomePage" labelposition="top" /><br /> - <s:textfield key="bow.preferences.searchEngineUrlSuggestions" name="searchEngineUrlSuggestions" labelposition="top" /><br /> - <s:textfield key="bow.preferences.searchEngineUrlResults" name="searchEngineUrlResults" labelposition="top" /><br /> - <s:hidden name="update" value="1" /> - <s:submit key="bow.preferences.submit" name="submit" /> - <br /><br /> - <s:url var="home" action="home" /> - <s:a href="%{home}" id="homePage"><s:text name="bow.home.title" /></s:a> - </p> - </div> - </s:form> - <div class="menu clearfix"> - <h2><s:text name="bow.preferences.importedBookmarks" /></h2> - </div> - <% - List<FacetTopic> bookmarkImportList = (List<FacetTopic>)request.getAttribute("bookmarksImportDate"); + <p> + <s:textfield key="bow.login.email" name="email" + labelposition="top"/><br/> + <s:password key="bow.preferences.currentPassword" + name="currentPassword" labelposition="top"/><br/> + <s:password key="bow.preferences.newPassword" name="newPassword" + labelposition="top"/><br/> + <s:password key="bow.preferences.confirmNewPassword" + name="confirmNewPassword" labelposition="top"/><br/> + <s:submit key="bow.preferences.submit" name="submit"/><br/> + </p> - if (bookmarkImportList != null) { - if (bookmarkImportList.size() > 0) { - String bgColors[] = {"Pink", "White"}; - int i = 0; - int colorsNb = bgColors.length; + <br/> + <br/> + <br/> + <br/> + <ul> + <li> + <strong><s:text name="bow.rightMenu.token.permanent"/> :</strong> + <s:property value="%{#session.BowSession.getPermanentToken()}"/> + </li> + <li> + <strong><s:text name="bow.rightMenu.token.temporary"/> :</strong> + <s:property value="%{#session.BowSession.getTemporaryToken()}"/> + </li> + </ul> - for (FacetTopic bookmarkImport : bookmarkImportList) { - String date = bookmarkImport.getTopicName(); - String dateSave = date; + <s:url var="regenPermToken" action="regenPermToken"/> + <s:a href="%{regenPermToken}" id="regenPermToken"> + <s:text name="bow.preferences.regenPermToken"/> + </s:a> + </div> + <div class="formFrame"> + <h3><s:text name="bow.preferences.siteLook"/></h3> - date = date.replaceAll("[^0-9:-]+", " ").trim(); - date = date.substring(0, date.lastIndexOf(' ')); - %> - <div class="deleteImport deleteImport<%=bgColors[i % colorsNb]%>"> - <span><%= date + " (" + bookmarkImport.getCount() + " bookmarks)" %></span> - <s:url var="deleteImport" action="deleteImport"> - <s:param name="date"><%=dateSave%></s:param> - </s:url> - <s:set var="deleteImport" value="%{deleteImport}" /> - <a class="deleteImportButton" href="" onclick="deleteConfirmation('${deleteImport}','<%=bookmarkImport.getCount()%>','<%=date%>'); return(false);"></a> - </div> - <% - i++; - } - } else { - %> - <div class="deleteImport deleteImportWhite"> - <span><s:text name="bow.preferences.noImportedBookmarks" /></span> - </div> - <% - } - } - %> - </div> - </body> + <p> + <s:textfield key="bow.preferences.colors" name="colors" labelposition="top"/><br/> + <s:textfield key="bow.preferences.tagsNb" name="tagsNb" labelposition="top"/><br/> + <s:textfield key="bow.preferences.bookmarksHomePage" name="bookmarksHomePage" labelposition="top"/><br/> + <s:textfield key="bow.preferences.searchEngineUrlSuggestions" name="searchEngineUrlSuggestions" + labelposition="top"/><br/> + <s:textfield key="bow.preferences.searchEngineUrlResults" name="searchEngineUrlResults" + labelposition="top"/><br/> + <s:hidden name="update" value="1"/> + <s:submit key="bow.preferences.submit" name="submit"/> + <br/><br/> + <s:url var="home" action="home"/> + <s:a href="%{home}" id="homePage"><s:text name="bow.home.title"/></s:a> + </p> + </div> + <div class="menu clearfix"> + <h2><s:text name="bow.preferences.importExport"/></h2> + </div> + </s:form> + + <div class="formFrame"> + <s:a action="exportBookmarks"><s:text name="bow.preferences.export.bookmarks"/></s:a> + <br/> + + <h3><s:text name="bow.preferences.import.bookmarks"/></h3> + <br/> + <s:form action="importBookmarks" method="post" enctype="multipart/form-data"> + <s:file name="upfile" labelSeparator=""/> + <s:hidden name="searchLine" value="%{searchLine}"/> + <s:hidden name="fullTextLine" value="%{fullTextLine}"/> + <br/> + <s:submit key="bow.preferences.import.submit" name="submit"/> + </s:form> + + <br/><br/> + <br/><br/> + <br/><br/> + + <s:if test="bookmarksImportDate != null"> + <s:iterator value="bookmarksImportDate"> + <div class="deleteImport"> + <% + String date = (String) request.getAttribute("key"); + String dateSave = date; + + date = date.replaceAll("[^0-9:-]+", " ").trim(); + date = date.substring(0, date.lastIndexOf(' ')); + %> + <span><%=date%> (<s:property value="value"/> bookmarks)</span> + <s:url var="deleteImport" action="deleteImport"> + <s:param name="date"><%=dateSave%> + </s:param> + </s:url> + <s:set name="date" value="%{key}"/> + <s:set name="count" value="%{value}"/> + <a class="deleteImportButton" href="" + onclick="deleteConfirmation('${deleteImport}','${count}','<%=date%>'); return(false);"></a> + </div> + </s:iterator> + </s:if> + <s:else> + <span><s:text name="bow.preferences.noImportedBookmarks"/></span> + </s:else> + </div> + +</div> +</body> </html> \ No newline at end of file Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2011-03-09 13:29:17 UTC (rev 231) +++ trunk/pom.xml 2011-03-10 11:29:17 UTC (rev 232) @@ -51,11 +51,12 @@ <projectId>bow</projectId> <eugenePluginVersion>2.3.2</eugenePluginVersion> - <nuitonUtilsVersion>2.0</nuitonUtilsVersion> + <nuitonUtilsVersion>2.1-SNAPSHOT</nuitonUtilsVersion> <nuitonI18nVersion>2.3.1</nuitonI18nVersion> <wikittyVersion>3.0.5-SNAPSHOT</wikittyVersion> <slf4jVersion>1.6.1</slf4jVersion> - <struts2Version>2.2.1.1</struts2Version> + <struts2Version>2.1.8.1</struts2Version> + <xWorkCoreVersion>2.1.6</xWorkCoreVersion> <htmlParserVersion>1.6</htmlParserVersion> <javaxMailVersion>1.4.3</javaxMailVersion> <servletApiVersion>2.5</servletApiVersion> @@ -97,9 +98,9 @@ </dependency> <dependency> - <groupId>org.apache.struts.xwork</groupId> + <groupId>com.opensymphony</groupId> <artifactId>xwork-core</artifactId> - <version>${struts2Version}</version> + <version>${xWorkCoreVersion}</version> </dependency> <dependency> @@ -174,7 +175,7 @@ <artifactId>struts2-sitemesh-plugin</artifactId> <version>${struts2Version}</version> </dependency> - + </dependencies> </dependencyManagement>
participants (1)
-
sletellier@users.chorem.org