001: /*
002: * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/admin/CategoryWebHandler.java,v 1.55 2008/01/16 08:34:14 minhnn Exp $
003: * $Author: minhnn $
004: * $Revision: 1.55 $
005: * $Date: 2008/01/16 08:34:14 $
006: *
007: * ====================================================================
008: *
009: * Copyright (C) 2002-2007 by MyVietnam.net
010: *
011: * All copyright notices regarding mvnForum MUST remain
012: * intact in the scripts and in the outputted HTML.
013: * The "powered by" text/logo with a link back to
014: * http://www.mvnForum.com and http://www.MyVietnam.net in
015: * the footer of the pages MUST remain visible when the pages
016: * are viewed on the internet or intranet.
017: *
018: * This program is free software; you can redistribute it and/or modify
019: * it under the terms of the GNU General Public License as published by
020: * the Free Software Foundation; either version 2 of the License, or
021: * any later version.
022: *
023: * This program is distributed in the hope that it will be useful,
024: * but WITHOUT ANY WARRANTY; without even the implied warranty of
025: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
026: * GNU General Public License for more details.
027: *
028: * You should have received a copy of the GNU General Public License
029: * along with this program; if not, write to the Free Software
030: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031: *
032: * Support can be obtained from support forums at:
033: * http://www.mvnForum.com/mvnforum/index
034: *
035: * Correspondence and Marketing Questions can be sent to:
036: * info at MyVietnam net
037: *
038: * @author: Minh Nguyen
039: * @author: Mai Nguyen
040: */
041: package com.mvnforum.admin;
042:
043: import java.sql.Timestamp;
044: import java.util.Collection;
045: import java.util.Locale;
046:
047: import com.mvnforum.*;
048: import com.mvnforum.auth.*;
049: import com.mvnforum.db.CategoryBean;
050: import com.mvnforum.db.CategoryCache;
051: import com.mvnforum.db.DAOFactory;
052: import com.mvnforum.service.CategoryService;
053: import com.mvnforum.service.MvnForumServiceFactory;
054:
055: import net.myvietnam.mvncore.exception.*;
056: import net.myvietnam.mvncore.filter.DisableHtmlTagFilter;
057: import net.myvietnam.mvncore.security.SecurityUtil;
058: import net.myvietnam.mvncore.service.MvnCoreServiceFactory;
059: import net.myvietnam.mvncore.service.EventLogService;
060: import net.myvietnam.mvncore.util.*;
061: import net.myvietnam.mvncore.web.GenericRequest;
062: import net.myvietnam.mvncore.web.GenericResponse;
063:
064: import com.mvnforum.categorytree.*;
065:
066: public class CategoryWebHandler {
067:
068: private OnlineUserManager onlineUserManager = OnlineUserManager
069: .getInstance();
070:
071: private static CategoryService categoryService = MvnForumServiceFactory
072: .getMvnForumService().getCategoryService();
073: private static EventLogService eventLogService = MvnCoreServiceFactory
074: .getMvnCoreService().getEventLogService();
075:
076: public CategoryWebHandler() {
077: }
078:
079: public void prepareAdd(GenericRequest request,
080: GenericResponse response) throws DatabaseException,
081: AuthenticationException {
082:
083: OnlineUser onlineUser = onlineUserManager
084: .getOnlineUser(request);
085: MVNForumPermission permission = onlineUser.getPermission();
086: permission.ensureCanAddCategory();
087:
088: CategoryBuilder builder = new DefaultCategoryBuilder();
089: CategoryTree tree = new CategoryTree(builder);
090: CategoryTreeListener listener = categoryService
091: .getManagementCategorySelector(request, response);
092: tree.addCategeoryTreeListener(listener);
093: request.setAttribute("Result", tree.build());
094: }
095:
096: public void processAdd(GenericRequest request,
097: GenericResponse response) throws BadInputException,
098: CreateException, DatabaseException, DuplicateKeyException,
099: ForeignKeyNotFoundException, AuthenticationException {
100:
101: SecurityUtil.checkHttpPostMethod(request);
102:
103: OnlineUser onlineUser = onlineUserManager
104: .getOnlineUser(request);
105: MVNForumPermission permission = onlineUser.getPermission();
106: permission.ensureCanAddCategory();
107:
108: MyUtil.saveVNTyperMode(request, response);
109:
110: Timestamp now = DateUtil.getCurrentGMTTimestamp();
111:
112: int parentCategoryID = GenericParamUtil
113: .getParameterUnsignedInt(request, "ParentCategoryID", 0);
114:
115: String categoryName = GenericParamUtil.getParameterSafe(
116: request, "CategoryName", true);
117: categoryName = DisableHtmlTagFilter.filter(categoryName);
118: String categoryDesc = GenericParamUtil.getParameterSafe(
119: request, "CategoryDesc", false);
120: categoryDesc = DisableHtmlTagFilter.filter(categoryDesc);
121: int categoryOption = 0; // @todo review and support it later
122: int categoryStatus = 0; // @todo review and support it later
123:
124: DAOFactory.getCategoryDAO().create(parentCategoryID,
125: categoryName, categoryDesc,
126: now/*categoryCreationDate*/,
127: now/*categoryModifiedDate*/, 0/*categoryOrder*/,
128: categoryOption, categoryStatus);
129:
130: String actionDesc = MVNForumResourceBundle.getString(
131: MVNForumConfig.getEventLogLocale(),
132: "mvnforum.eventlog.desc.AddCategory",
133: new Object[] { categoryName });
134: eventLogService.logEvent(onlineUser.getMemberName(), request
135: .getRemoteAddr(),
136: MVNForumConstant.EVENT_LOG_MAIN_MODULE,
137: MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN,
138: "add category", actionDesc, EventLogService.MEDIUM);
139:
140: // Now clear the cache
141: CategoryCache.getInstance().clear();
142:
143: request.setAttribute("CategoryName", categoryName);
144: }
145:
146: public void prepareDelete(GenericRequest request)
147: throws ObjectNotFoundException, BadInputException,
148: DatabaseException, AuthenticationException {
149:
150: OnlineUser onlineUser = onlineUserManager
151: .getOnlineUser(request);
152: MVNForumPermission permission = onlineUser.getPermission();
153: permission.ensureCanDeleteCategory();
154:
155: // primary key column(s)
156: int categoryID = GenericParamUtil.getParameterInt(request,
157: "category");
158:
159: Locale locale = I18nUtil.getLocaleInRequest(request);
160:
161: Collection forumsInCategory = DAOFactory.getForumDAO()
162: .getForums_inCategory(categoryID);
163: if (forumsInCategory.isEmpty() == false) {
164: String localizedMessage = MVNForumResourceBundle
165: .getString(locale,
166: "mvncore.exception.BadInputException.cannot_delete_not_empty_category");
167: throw new BadInputException(localizedMessage);
168: //throw new BadInputException("Cannot delete a not-empty category. Please delete all forums in this category first.");
169: }
170:
171: CategoryBean categoryBean = DAOFactory.getCategoryDAO()
172: .getCategory(categoryID);
173:
174: request.setAttribute("CategoryBean", categoryBean);
175: }
176:
177: public void processDelete(GenericRequest request)
178: throws BadInputException, ObjectNotFoundException,
179: DatabaseException, AuthenticationException {
180:
181: SecurityUtil.checkHttpPostMethod(request);
182:
183: OnlineUser onlineUser = onlineUserManager
184: .getOnlineUser(request);
185: MVNForumPermission permission = onlineUser.getPermission();
186:
187: // user must have been authenticated before he can delete
188: permission.ensureIsAuthenticated();
189:
190: permission.ensureCanDeleteCategory();
191:
192: Locale locale = I18nUtil.getLocaleInRequest(request);
193:
194: // primary key column(s)
195: int categoryID = GenericParamUtil.getParameterInt(request,
196: "category");
197:
198: Collection forumsInCategory = DAOFactory.getForumDAO()
199: .getForums_inCategory(categoryID);
200: if (forumsInCategory.isEmpty() == false) {
201: String localizedMessage = MVNForumResourceBundle
202: .getString(locale,
203: "mvncore.exception.BadInputException.cannot_delete_not_empty_category");
204: throw new BadInputException(localizedMessage);
205: //throw new BadInputException("Cannot delete a not-empty category. Please delete all forums in this category first.");
206: }
207:
208: // now check the password
209: MyUtil.ensureCorrectCurrentPassword(request);
210:
211: /*
212: try {
213: // NOTE: implement it when we add table GroupCategory
214: GroupCategoryWebHelper.deleteGroupCategory_inCategory(categoryID);
215: } catch (ObjectNotFoundException ex) {}
216: */
217: DAOFactory.getWatchDAO().delete_inCategory(categoryID);
218:
219: DAOFactory.getCategoryDAO().delete(categoryID);
220:
221: String actionDesc = MVNForumResourceBundle.getString(
222: MVNForumConfig.getEventLogLocale(),
223: "mvnforum.eventlog.desc.DeleteCategoryProcess",
224: new Object[] { new Integer(categoryID) });
225: eventLogService.logEvent(onlineUser.getMemberName(), request
226: .getRemoteAddr(),
227: MVNForumConstant.EVENT_LOG_MAIN_MODULE,
228: MVNForumConstant.EVENT_LOG_SUB_MODULE_ADMIN,
229: "delete category", actionDesc, EventLogService.HIGH);
230:
231: // Now clear the cache
232: CategoryCache.getInstance().clear();
233: }
234:
235: /*
236: * @todo: check permission
237: */
238: public void prepareEdit(GenericRequest request)
239: throws BadInputException, ObjectNotFoundException,
240: DatabaseException, AuthenticationException {
241:
242: OnlineUser onlineUser = onlineUserManager
243: .getOnlineUser(request);
244: MVNForumPermission permission = onlineUser.getPermission();
245: permission.ensureCanEditCategory();
246:
247: // primary key column(s)
248: int categoryID = GenericParamUtil.getParameterInt(request,
249: "category");
250:
251: CategoryBean categoryBean = DAOFactory.getCategoryDAO()
252: .getCategory(categoryID);
253:
254: request.setAttribute("CategoryBean", categoryBean);
255: }
256:
257: /*
258: * @todo: check permission
259: */
260: public void processUpdate(GenericRequest request,
261: GenericResponse response) throws BadInputException,
262: DatabaseException, DuplicateKeyException,
263: ObjectNotFoundException, AuthenticationException {
264:
265: SecurityUtil.checkHttpPostMethod(request);
266:
267: OnlineUser onlineUser = onlineUserManager
268: .getOnlineUser(request);
269: MVNForumPermission permission = onlineUser.getPermission();
270: permission.ensureCanEditCategory();
271:
272: MyUtil.saveVNTyperMode(request, response);
273:
274: Timestamp now = DateUtil.getCurrentGMTTimestamp();
275:
276: // primary key column(s)
277: int categoryID = GenericParamUtil.getParameterInt(request,
278: "CategoryID");
279:
280: // column(s) to update
281: String categoryName = GenericParamUtil.getParameterSafe(
282: request, "CategoryName", true);
283: categoryName = DisableHtmlTagFilter.filter(categoryName);
284: String categoryDesc = GenericParamUtil.getParameterSafe(
285: request, "CategoryDesc", false);
286: categoryDesc = DisableHtmlTagFilter.filter(categoryDesc);
287: int categoryOrder = GenericParamUtil.getParameterUnsignedInt(
288: request, "CategoryOrder");
289: int categoryOption = 0;// @todo review and support it later
290: int categoryStatus = 0;// @todo review and support it later
291:
292: DAOFactory.getCategoryDAO().update(
293: categoryID, // primary key
294: categoryName, categoryDesc,
295: now/*categoryModifiedDate*/, categoryOrder,
296: categoryOption, categoryStatus);
297:
298: // Now clear the cache
299: CategoryCache.getInstance().clear();
300: }
301:
302: /*
303: * @todo: check permission
304: */
305: public void processUpdateCategoryOrder(GenericRequest request)
306: throws BadInputException, DatabaseException,
307: ObjectNotFoundException, AuthenticationException {
308:
309: OnlineUser onlineUser = onlineUserManager
310: .getOnlineUser(request);
311: MVNForumPermission permission = onlineUser.getPermission();
312: permission.ensureCanEditCategory();
313:
314: Locale locale = I18nUtil.getLocaleInRequest(request);
315:
316: Timestamp now = DateUtil.getCurrentGMTTimestamp();
317:
318: // primary key column(s)
319: int categoryID = GenericParamUtil.getParameterInt(request,
320: "category");
321:
322: String action = GenericParamUtil.getParameterSafe(request,
323: "action", true);
324: if (action.equals("up")) {
325: DAOFactory.getCategoryDAO().decreaseCategoryOrder(
326: categoryID, now);
327: } else if (action.equals("down")) {
328: DAOFactory.getCategoryDAO().increaseCategoryOrder(
329: categoryID, now);
330: } else {
331: String localizedMessage = MVNForumResourceBundle
332: .getString(
333: locale,
334: "mvncore.exception.BadInputException.cannot_update_category.unknown_action",
335: new Object[] { action });
336: throw new BadInputException(localizedMessage);
337: //throw new BadInputException("Cannot update CategoryOrder: unknown action: " + action);
338: }
339:
340: // Now clear the cache
341: CategoryCache.getInstance().clear();
342: }
343: }
|