fixed a bug in the hidden article module
[mir.git] / source / mircoders / servlet / ServletModuleUsers.java
index d9320a8..4d29ed4 100755 (executable)
 
 package mircoders.servlet;
 
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
+import mir.entity.adapter.EntityAdapterEngine;
 import mir.entity.adapter.EntityAdapterModel;
-import mir.entity.adapter.EntityIteratorAdapter;
 import mir.log.LoggerWrapper;
 import mir.servlet.ServletModule;
 import mir.servlet.ServletModuleExc;
 import mir.servlet.ServletModuleFailure;
 import mir.servlet.ServletModuleUserExc;
-import mir.storage.StorageObjectFailure;
-import mir.util.CachingRewindableIterator;
 import mir.util.HTTPRequestParser;
 import mir.util.URLBuilder;
 import mircoders.entity.EntityUsers;
@@ -54,19 +44,16 @@ import mircoders.global.MirGlobal;
 import mircoders.module.ModuleUsers;
 import mircoders.storage.DatabaseUsers;
 
-/*
- *  ServletModuleUsers -
- *  liefert HTML fuer Users
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.*;
+
+/**
  *
  *
- * @author RK
  */
-
 public class ServletModuleUsers extends ServletModule
 {
-  private String editTemplate;
-  private String listTemplate;
-
   private static ServletModuleUsers instance = new ServletModuleUsers();
   public static ServletModule getInstance() { return instance; }
   protected ModuleUsers usersModule;
@@ -75,15 +62,12 @@ public class ServletModuleUsers extends ServletModule
     super();
     logger = new LoggerWrapper("ServletModule.Users");
 
-    listTemplate = configuration.getString("ServletModule.Users.ListTemplate");
-    editTemplate = configuration.getString("ServletModule.Users.ObjektTemplate");
-    templateConfirmString = configuration.getString("ServletModule.Users.ConfirmTemplate");
-
     try {
-      usersModule = new ModuleUsers(DatabaseUsers.getInstance());
+      definition = "user";
+      usersModule = new ModuleUsers();
       mainModule = usersModule;
     }
-    catch (StorageObjectFailure e) {
+    catch (Throwable e) {
       logger.debug("initialization of ServletModuleUsers failed!: " + e.getMessage());
     }
   }
@@ -123,8 +107,8 @@ public class ServletModuleUsers extends ServletModule
   {
     if ( (aRequestParser.getParameter("newpassword") != null &&
           aRequestParser.getParameter("newpassword").length() > 0) ||
-        (aRequestParser.getParameter("newpassword2") != null &&
-         aRequestParser.getParameter("newpassword2").length() > 0)
+         (aRequestParser.getParameter("newpassword2") != null &&
+          aRequestParser.getParameter("newpassword2").length() > 0)
         ) {
       String newPassword = aRequestParser.getParameterWithDefault("newpassword", "");
       String newPassword2 = aRequestParser.getParameterWithDefault("newpassword2", "");
@@ -150,8 +134,7 @@ public class ServletModuleUsers extends ServletModule
 
       return newPassword;
     }
-    else
-      return null;
+               return null;
   }
 
   public void insert(HttpServletRequest aRequest, HttpServletResponse aResponse)
@@ -170,8 +153,11 @@ public class ServletModuleUsers extends ServletModule
         throw new ServletModuleUserExc("user.error.missingpassword", new String[] {});
 
       String id = mainModule.add(withValues);
+
+      logAdminUsage(aRequest, id, "object added");
+
       if (requestParser.hasParameter("returnurl"))
-        redirect(aResponse, requestParser.getParameter("returnurl"));
+        ServletHelper.redirect(aResponse, requestParser.getParameter("returnurl"));
       else
         list(aRequest, aResponse);
     }
@@ -184,19 +170,26 @@ public class ServletModuleUsers extends ServletModule
   {
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
-      EntityUsers user = (EntityUsers) mainModule.getById(requestParser.getParameter("id"));
+      String id = requestParser.getParameter("id");
+      EntityUsers user = (EntityUsers) mainModule.getById(id);
       MirGlobal.accessControl().user().assertMayEditUser(ServletHelper.getUser(aRequest), user);
 
       Map withValues = getIntersectingValues(aRequest, mainModule.getStorageObject());
+      if (!withValues.containsKey("is_admin"))
+        withValues.put("is_admin","0");
+      if (!withValues.containsKey("is_disabled"))
+        withValues.put("is_disabled","0");
 
       String newPassword=validatePassword(ServletHelper.getUser(aRequest), requestParser);
       if (newPassword!=null)
-        withValues.put("password", newPassword);
+        withValues.put("password", MirGlobal.localizer().adminInterface().makePasswordDigest(newPassword));
 
       mainModule.set(withValues);
 
+      logAdminUsage(aRequest, id, "object modified");
+
       if (requestParser.hasParameter("returnurl"))
-        redirect(aResponse, requestParser.getParameter("returnurl"));
+        ServletHelper.redirect(aResponse, requestParser.getParameter("returnurl"));
       else
         list(aRequest, aResponse);
     }
@@ -209,22 +202,25 @@ public class ServletModuleUsers extends ServletModule
   {
     try {
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
-      EntityUsers user = (EntityUsers) mainModule.getById(requestParser.getParameter("id"));
+      String id = requestParser.getParameter("id");
+      EntityUsers user = (EntityUsers) mainModule.getById(id);
       MirGlobal.accessControl().user().assertMayChangeUserPassword(ServletHelper.getUser(aRequest), user);
 
       String newPassword=validatePassword(ServletHelper.getUser(aRequest), requestParser);
       if (newPassword!=null) {
-        user.setValueForProperty("password", newPassword);
+        user.setFieldValue("password", MirGlobal.localizer().adminInterface().makePasswordDigest(newPassword));
         user.update();
 
+        logAdminUsage(aRequest, id, "password changed");
+
         // hackish: to make sure the cached logged in user is up-to-date:
         ServletHelper.setUser(aRequest, (EntityUsers) mainModule.getById(ServletHelper.getUser(aRequest).getId()));
       }
 
       if (requestParser.hasParameter("returnurl"))
-        redirect(aResponse, requestParser.getParameter("returnurl"));
+        ServletHelper.redirect(aResponse, requestParser.getParameter("returnurl"));
       else
-        redirect(aResponse, "");
+        ServletHelper.redirect(aResponse, "");
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
@@ -245,27 +241,17 @@ public class ServletModuleUsers extends ServletModule
        HttpServletResponse aResponse,
        int anOffset) throws ServletModuleExc {
 
-    HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
     URLBuilder urlBuilder = new URLBuilder();
-    EntityAdapterModel model;
-    int count;
-    int nrUsersPerPage = 20;
 
     try {
       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
-      model = MirGlobal.localizer().dataModel().adapterModel();
 
-      Object userList =
-          new CachingRewindableIterator(
-            new EntityIteratorAdapter( "", "login", nrUsersPerPage,
-               MirGlobal.localizer().dataModel().adapterModel(), "user", nrUsersPerPage, anOffset)
-      );
+      List list =
+         EntityAdapterEngine.retrieveAdapterList(model, definition, "", "login", nrEntitiesPerListPage, anOffset);
 
       responseData.put("nexturl", null);
       responseData.put("prevurl", null);
 
-      count=mainModule.getSize("");
-
       urlBuilder.setValue("module", "Users");
       urlBuilder.setValue("do", "list");
 
@@ -273,27 +259,26 @@ public class ServletModuleUsers extends ServletModule
       responseData.put("offset" , new Integer(anOffset).toString());
       responseData.put("thisurl" , urlBuilder.getQuery());
 
-      if (count>=anOffset+nrUsersPerPage) {
-        urlBuilder.setValue("offset", (anOffset + nrUsersPerPage));
+      if (list.size()>=nrEntitiesPerListPage) {
+        urlBuilder.setValue("offset", (anOffset + nrEntitiesPerListPage));
         responseData.put("nexturl" , urlBuilder.getQuery());
       }
 
       if (anOffset>0) {
-        urlBuilder.setValue("offset", Math.max(anOffset - nrUsersPerPage, 0));
+        urlBuilder.setValue("offset", Math.max(anOffset - nrEntitiesPerListPage, 0));
         responseData.put("prevurl" , urlBuilder.getQuery());
       }
 
-      responseData.put("users", userList);
+      responseData.put("users", list);
       responseData.put("mayDeleteUsers", new Boolean(MirGlobal.accessControl().user().mayDeleteUsers(ServletHelper.getUser(aRequest))));
       responseData.put("mayAddUsers", new Boolean(MirGlobal.accessControl().user().mayAddUsers(ServletHelper.getUser(aRequest))));
       responseData.put("mayEditUsers", new Boolean(MirGlobal.accessControl().user().mayEditUsers(ServletHelper.getUser(aRequest))));
 
       responseData.put("from" , Integer.toString(anOffset+1));
-      responseData.put("count", Integer.toString(count));
-      responseData.put("to", Integer.toString(Math.min(anOffset+nrUsersPerPage, count)));
+      responseData.put("to", Integer.toString(anOffset+list.size()));
       responseData.put("offset" , Integer.toString(anOffset));
 
-      ServletHelper.generateResponse(aResponse.getWriter(), responseData, listTemplate);
+      ServletHelper.generateResponse(aResponse.getWriter(), responseData, listGenerator);
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
@@ -306,7 +291,7 @@ public class ServletModuleUsers extends ServletModule
       HTTPRequestParser requestParser = new HTTPRequestParser(aRequest);
       Map responseData = ServletHelper.makeGenerationData(aRequest, aResponse, new Locale[] { getLocale(aRequest), getFallbackLocale(aRequest)});
       EntityAdapterModel model = MirGlobal.localizer().dataModel().adapterModel();
-      Map user;
+      Object user;
       URLBuilder urlBuilder = new URLBuilder();
 
       urlBuilder.setValue("module", "Users");
@@ -322,15 +307,15 @@ public class ServletModuleUsers extends ServletModule
         user = model.makeEntityAdapter("user", mainModule.getById(anId));
       }
       else {
-        List fields = DatabaseUsers.getInstance().getFields();
+        List fields = DatabaseUsers.getInstance().getFieldNames();
         responseData.put("new", Boolean.TRUE);
-        user = new HashMap();
+        Map emptyUser = new HashMap();
         Iterator i = fields.iterator();
         while (i.hasNext()) {
-          user.put(i.next(), null);
+          emptyUser.put(i.next(), null);
         }
 
-        MirGlobal.localizer().adminInterface().initializeArticle(user);
+        user = emptyUser;
       }
       responseData.put("user", user);
       responseData.put("passwordonly", new Boolean(anOnlyPassword));
@@ -338,7 +323,7 @@ public class ServletModuleUsers extends ServletModule
       responseData.put("returnurl", requestParser.getParameter("returnurl"));
       responseData.put("thisurl", urlBuilder.getQuery());
 
-      ServletHelper.generateResponse(aResponse.getWriter(), responseData, editTemplate);
+      ServletHelper.generateResponse(aResponse.getWriter(), responseData, editGenerator);
     }
     catch (Throwable e) {
       throw new ServletModuleFailure(e);
@@ -375,6 +360,5 @@ public class ServletModuleUsers extends ServletModule
       throw new ServletModuleFailure(e);
     }
   }
-
 }