diff --git a/WebContent/css/zallery.css b/WebContent/css/zallery.css index 461dbc9..9ffc983 100644 --- a/WebContent/css/zallery.css +++ b/WebContent/css/zallery.css @@ -96,4 +96,15 @@ padding-top: 0px; .modmedia_edit{ display: none; +} + +.not-singular .entry-content .private{ + display: block; + position: absolute; + top: -6px; + right: 10px; + width: 74px; + height: 22px; + background: url("../img/private.png") no-repeat top left; + z-index: 200 } \ No newline at end of file diff --git a/WebContent/gallery.jsp b/WebContent/gallery.jsp index 8a1edec..bbb1d43 100644 --- a/WebContent/gallery.jsp +++ b/WebContent/gallery.jsp @@ -15,9 +15,15 @@ <%} %> - <%if( user.canEdit( folder ) && folder.getParent() != null ){ %> + <%if( user.canEdit( folder ) && folder.getParent() != null ){ %>
+ + <%if( !folder.isPrivate() ){ %> + + <%}else{ %> + + <%} %>
<%} %> @@ -27,9 +33,16 @@ for( Folder subfolder : ((List)request.getAttribute("subfolders")) ){ %>
- <%if( subfolder.getDate().after(new Timestamp(System.currentTimeMillis()-10*24*60*60*1000) )){ %><%} %> - <%=subfolder.getName()%> - <%=subfolder.getName()%> + <%if( subfolder.isPrivate() ){ %> + + <%} else if( subfolder.getDate().after(new Timestamp(System.currentTimeMillis()-10*24*60*60*1000) )){ %> + + <%} %> + + <%=subfolder.getName()%> + <%=subfolder.getName()%> +
<% } %> diff --git a/WebContent/img/private.png b/WebContent/img/private.png new file mode 100644 index 0000000..51bad17 Binary files /dev/null and b/WebContent/img/private.png differ diff --git a/WebContent/img/private.xcf b/WebContent/img/private.xcf new file mode 100644 index 0000000..99679b5 Binary files /dev/null and b/WebContent/img/private.xcf differ diff --git a/WebContent/img/user-share.png b/WebContent/img/user-share.png new file mode 100644 index 0000000..ed78419 Binary files /dev/null and b/WebContent/img/user-share.png differ diff --git a/WebContent/img/user-silhouette.png b/WebContent/img/user-silhouette.png new file mode 100644 index 0000000..f6e4dc8 Binary files /dev/null and b/WebContent/img/user-silhouette.png differ diff --git a/src/zall/Zallery.java b/src/zall/Zallery.java index db7d199..588c465 100644 --- a/src/zall/Zallery.java +++ b/src/zall/Zallery.java @@ -260,7 +260,7 @@ public class Zallery extends HttpServlet{ if(request.getParameter("folder") != null && !request.getParameter("folder").equalsIgnoreCase("null")) folder = Folder.load(db, Long.parseLong(request.getParameter("folder")) ); else{ - folder = Folder.loadRoot(db); + folder = Folder.loadRoot(db, user); // Setup new root folder if( folder == null ){ folder = Folder.genRoot(); @@ -268,7 +268,7 @@ public class Zallery extends HttpServlet{ } } List list = Media.load(db, folder); - List subFolders = Folder.loadSubFolders(db, folder.getId()); + List subFolders = Folder.loadSubFolders(db, folder.getId(), user); //session.setAttribute("user", user); request.setAttribute("folder", folder); diff --git a/src/zall/ZalleryAjax.java b/src/zall/ZalleryAjax.java index 30917ed..e91f87c 100644 --- a/src/zall/ZalleryAjax.java +++ b/src/zall/ZalleryAjax.java @@ -93,13 +93,18 @@ public class ZalleryAjax extends HttpServlet{ if( action.equalsIgnoreCase("verfemail") ){ User verfuser = User.load(db, Long.parseLong(request.getParameter("id"))); if( verfuser.verifyEmail(request.getParameter("hash")) ){ - sendEmailNewUserToAdmin(verfuser, db); + if( verfuser.isEnabled() ) + if(out != null) out.println("{ }"); + else msgs.add(MessageType.INFO, "Your email has been successfully verified"); + else { + sendEmailNewUserToAdmin(verfuser, db); + if(out != null) out.println("{ }"); + else msgs.add(MessageType.INFO, "Your email has been successfully verified, the account is waiting account activation by an admin."); + } verfuser.save(db); - if(out != null) out.println("{ }"); - else msgs.add(MessageType.INFO, "Your email has been successfully verified, the account is waiting account activation by an admin."); } - else if(out != null) out.println("{ \"error\":\"Email verification failed!\" }"); - else msgs.add(MessageType.ERROR, "Email verification failed!"); + else if(out != null) out.println("{ \"error\":\"Invalid email verification hash!\" }"); + else msgs.add(MessageType.ERROR, "Invalid email verification hash!"); return; } @@ -301,6 +306,33 @@ public class ZalleryAjax extends HttpServlet{ else if(out != null) out.println("{ \"error\": \"No such item!\"}"); else msgs.add(MessageType.ERROR, "The item does not exist!"); + } + // Toggle folder private + else if( action.equalsIgnoreCase("mkprivate") ){ + if( request.getParameter("id") == null){ + if(out != null) out.println("{ \"error\": \"Missing parameters!\"}"); + else msgs.add(MessageType.ERROR, "Missing parameters!"); + return; + } + long id = Long.parseLong(request.getParameter("id")); + Folder folder = Folder.load(db, id); + + if( folder != null ){ + if( user.canEdit(folder) ){ + folder.setPrivate( !folder.isPrivate() ); + folder.save(db); + if(out != null) out.println("{}"); + else{ + if(folder.isPrivate()) msgs.add(MessageType.INFO, "Folder is now private (not visible to other users)."); + else msgs.add(MessageType.INFO, "Folder is now public (can be viewed by other users)."); + } + } + else if(out != null) out.println("{ \"error\": \"You are not authorize to edit this folder!\"}"); + else msgs.add(MessageType.ERROR, "You are not authorize to edit this folder!"); + } + else if(out != null) out.println("{ \"error\": \"No such folder!\"}"); + else msgs.add(MessageType.ERROR, "The folder does not exist!"); + } else if( action.equalsIgnoreCase("rmdir") ){ if( request.getParameter("id") == null){ @@ -336,7 +368,7 @@ public class ZalleryAjax extends HttpServlet{ // parent folder if( folder == null ){ String[] dirs = path.split("/"); - Folder parent = Folder.loadRoot(db); + Folder parent = Folder.loadRoot(db, user); if( user.isSuperUser() && path.charAt(0) == '/' ) path = ""; else{ @@ -345,7 +377,7 @@ public class ZalleryAjax extends HttpServlet{ // Get root folder parent = Folder.load(db, path, user); // Get user root folder if( parent == null ){ // Create root folder - parent = Folder.loadRoot(db); // get root folder + parent = Folder.loadRoot(db, user); // get root folder folder = new Folder(); folder.setUser( user ); folder.setParent( parent ); @@ -409,7 +441,7 @@ public class ZalleryAjax extends HttpServlet{ smtpEmail.setSubject("Registration at "+Zallery.getWebsiteName()); smtpEmail.setContentType(ContentType.HTML); smtpEmail.setMessage("You receive this message because you have requested an account" + - "
at "+Zallery.getWebsiteName()+". Please click the link to verify your email address: " + + "
at "+Zallery.getWebsiteName()+". Please click the link to verify your email address: " + "

"+Zallery.getWebsiteURL()+"?action=verfemail&id="+user.getId()+"&hash="+user.getEmailVerificationHash()+"" + "

You will have to wait for an admin to activate your account after you have verified your email."); smtpEmail.send(); diff --git a/src/zall/bean/Folder.java b/src/zall/bean/Folder.java index 7dcbc88..611a89f 100644 --- a/src/zall/bean/Folder.java +++ b/src/zall/bean/Folder.java @@ -26,6 +26,7 @@ public class Folder extends DBBean{ protected String path; protected Folder parent; protected Timestamp date; + protected boolean isPrivate; //@DBLinkTable(name="FolderTree", beanClass=Folder.class, idColumn="parent") //protected LinkedList subFolders; @@ -34,15 +35,17 @@ public class Folder extends DBBean{ public static Folder load(DBConnection db, Long id) throws SQLException{ return load(db, Folder.class, id); } - public static List loadSubFolders(DBConnection db, Long id) throws SQLException{ - PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE parent=?"); + public static List loadSubFolders(DBConnection db, Long id, User user) throws SQLException{ + PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE parent=? AND (isPrivate=0 OR user=?)"); sql.setLong(1, id); + sql.setLong(2, user.getId()); return DBConnection.exec(sql, DBBeanSQLResultHandler.createList(Folder.class, db)); } - public static Folder loadRoot(DBConnection db) throws SQLException{ - PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE path=?"); + public static Folder loadRoot(DBConnection db, User user) throws SQLException{ + PreparedStatement sql = db.getPreparedStatement("SELECT * FROM Folder WHERE path=? AND (isPrivate=0 OR user=?)"); sql.setString(1, "/"); + sql.setLong(2, user.getId()); return DBConnection.exec(sql, DBBeanSQLResultHandler.create(Folder.class, db)); } @@ -85,6 +88,12 @@ public class Folder extends DBBean{ public void setUser(User user){ this.user = user; } + public boolean isPrivate(){ + return isPrivate; + } + public void setPrivate(boolean priv){ + this.isPrivate = priv; + } public String getPath(){ String tmp = path.replaceAll("\\{NAME\\}", user.getName()); return tmp; @@ -180,6 +189,6 @@ public class Folder extends DBBean{ } public boolean isEmpty(DBConnection db) throws SQLException { - return Folder.loadSubFolders(db, this.getId()).isEmpty() && Media.load(db, this).isEmpty(); + return Folder.loadSubFolders(db, this.getId(), user).isEmpty() && Media.load(db, this).isEmpty(); } }