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 ){ %>
<%} %>
@@ -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()%>
- 
+ <%if( subfolder.isPrivate() ){ %>
+
+ <%} else if( subfolder.getDate().after(new Timestamp(System.currentTimeMillis()-10*24*60*60*1000) )){ %>
+
+ <%} %>
+
+ <%=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();
}
}
|