/* * File : $Source: /alkacon/cvs/alkacon/com.alkacon.opencms.v8.newsletter/src/com/alkacon/opencms/v8/newsletter/CmsNewsletterSubscriberCleanupJob.java,v $ * Date : $Date: 2009/07/09 09:30:12 $ * Version: $Revision: 1.5 $ * * This file is part of the Alkacon OpenCms Add-On Module Package * * Copyright (c) 2007 Alkacon Software GmbH (http://www.alkacon.com) * * The Alkacon OpenCms Add-On Module Package is free software: * you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * The Alkacon OpenCms Add-On Module Package 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 General Public License * along with the Alkacon OpenCms Add-On Module Package. * If not, see http://www.gnu.org/licenses/. * * For further information about Alkacon Software GmbH, please see the * company website: http://www.alkacon.com. * * For further information about OpenCms, please see the * project website: http://www.opencms.org. */ package com.alkacon.opencms.v8.newsletter; import org.opencms.file.CmsObject; import org.opencms.file.CmsUser; import org.opencms.main.CmsException; import org.opencms.main.CmsLog; import org.opencms.main.OpenCms; import org.opencms.scheduler.I_CmsScheduledJob; import org.opencms.security.CmsOrganizationalUnit; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.logging.Log; /** * A schedulable OpenCms job that deletes inactive newsletter subscriber users.<p> * * Job parameters:<p> * <dl> * <dt><code>maxage={time in hours}</code></dt> * <dd>Specifies the maximum age (in hours) subscribers can be inactive before they are removed from the system.</dd> * </dl> * * @author Andreas Zahner * * @version $Revision: 1.5 $ * * @since 7.0.3 */ public class CmsNewsletterSubscriberCleanupJob implements I_CmsScheduledJob { /** Maximum age parameter. */ public static final String PARAM_MAXAGE = "maxage"; /** The log object for this class. */ private static final Log LOG = CmsLog.getLog(CmsNewsletterSubscriberCleanupJob.class); /** * @see org.opencms.scheduler.I_CmsScheduledJob#launch(CmsObject, Map) */ public String launch(CmsObject cms, Map parameters) throws Exception { String maxAgeStr = (String)parameters.get(PARAM_MAXAGE); float maxAge; try { maxAge = Float.parseFloat(maxAgeStr); } catch (Exception e) { // in case of an error, use maxage of one week maxAge = 24f * 7f; } // calculate oldest possible date for the unconfirmed subscribers long expireDate = System.currentTimeMillis() - (long)(maxAge * 60f * 60f * 1000f); // now perform the image cache cleanup int count = removeInactiveSubscribers(cms, expireDate); return Messages.get().getBundle().key(Messages.LOG_NEWSLETTER_CLEANUP_FINISHED_COUNT_1, new Integer(count)); } /** * Removes the inactive subscribers from the newsletter organizational units that are not activated.<p> * * @param cms the configured job users context * @param expireDate the expiration date, if a subscriber user was created before that date, it will be deleted * @return the number of deleted subscribers */ private int removeInactiveSubscribers(CmsObject cms, long expireDate) { int count = 0; try { List newsletterUnits = CmsNewsletterManager.getOrgUnits(cms); Iterator i = newsletterUnits.iterator(); // loop the newsletter organizational units while (i.hasNext()) { CmsOrganizationalUnit ou = (CmsOrganizationalUnit)i.next(); List users = OpenCms.getOrgUnitManager().getUsers(cms, ou.getName(), false); Iterator k = users.iterator(); // loop subscribers found in the current newsletter ou while (k.hasNext()) { CmsUser user = (CmsUser)k.next(); // get the additional info value for the subscriber Boolean active = (Boolean)user.getAdditionalInfo(CmsNewsletterManager.USER_ADDITIONALINFO_ACTIVE); if ((active != null) && !active.booleanValue()) { // found additional info & value is false, check creation date if (user.getDateCreated() < expireDate) { // user is older than specified maximum age, delete it cms.deleteUser(user.getName()); count++; } } } } } catch (CmsException e) { // error removing users, log error if (LOG.isErrorEnabled()) { LOG.error(Messages.get().getBundle().key(Messages.LOG_NEWSLETTER_CLEANUP_ERROR_DELETING_0), e); } } return count; } }