<!--- This file is part of Sava CMS.

    Sava CMS 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, Version 2 of the License.

    Sava CMS 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 Sava CMS.  If not, see <http://www.gnu.org/licenses/>. --->
<cfcomponent name="memberManager" output="false">

<cffunction name="init" access="public" returntype="any" output="false">
	<cfargument name="configBean" type="any" required="yes"/>
	<cfargument name="memberDAO" type="any" required="yes"/>
	<cfargument name="settingsManager" type="any" required="yes"/>
	<cfargument name="contentRenderer" type="any" required="yes"/>
	<cfargument name="mailer" type="any" required="yes"/>
		<cfset variables.instance.configBean=arguments.configBean />
		<cfset variables.instance.memberDAO=arguments.memberDAO />
		<cfset variables.instance.settingsManager=arguments.settingsManager />
		<cfset variables.instance.contentRenderer=arguments.contentRenderer />
		<cfset variables.mailer=arguments.mailer />
		
	<cfreturn this />
</cffunction>

<cffunction name="delete" access="public" output="false" returntype="void" >
	<cfargument name="data" type="struct" />
	
	<cfset var memberBean=application.serviceFactory.getBean("memberBean") />
	<cfset memberBean.set(arguments.data) />
	
	<cfset variables.instance.memberDAO.delete(memberBean) />
	
</cffunction>

<cffunction name="deleteAll" access="public" output="false" returntype="void" >
	<cfargument name="data" type="struct" />
	
	<cfset var memberBean=application.serviceFactory.getBean("memberBean") />
	<cfset memberBean.set(arguments.data) />
	
	<cfset variables.instance.memberDAO.deleteAll(memberBean) />
	
</cffunction>

<cffunction name="create" access="public" output="false" returntype="void" >
	<cfargument name="data" type="struct" />
	<cfargument name="mailingListManager" type="any" required="yes"/>
	
	<cfset var memberBean=""/>
	<cfset var listBean=""/>
	
	<cfif arguments.data.mlid neq ''>
		<cftry>
		<cfset memberBean=variables.instance.memberDAO.read(arguments.data.email,arguments.data.siteid) />
		<cfset memberBean.set(arguments.data) />
		<cfif memberBean.getIsVerified() eq 0>
			<cfset listBean=arguments.mailingListManager.read(arguments.data.mlid,arguments.data.siteid) />
			<cfset sendVerification(arguments.data.email,arguments.data.mlid,arguments.data.siteid,listBean.getName())>
		</cfif>
		<cfset variables.instance.memberDAO.update(memberBean) />
		<cfset variables.instance.memberDAO.create(memberBean) />
		<cfcatch type="database"></cfcatch>
		</cftry>
	</cfif>

</cffunction>

<cffunction name="read" access="public" output="false" returntype="any" >
	<cfargument name="data" type="struct" />
	
	<cfset var memberBean = variables.instance.memberDAO.read(arguments.data.email,arguments.data.siteid) />
	
	<cfreturn memberBean />
	
</cffunction>

<cffunction name="masterSubscribe" access="public" output="false" returntype="void" >
	<cfargument name="data" type="struct" />
	<cfargument name="mailingListManager" type="any" required="yes"/>

	<cfset deleteAll(arguments.data) />
	<cfset create(arguments.data,arguments.mailingListManager) />

</cffunction>

<cffunction name="sendVerification" returntype="void" output="false">
<cfargument name="sendto" type="string" default="">
<cfargument name="mlid" type="string" default="">
<cfargument name="siteid" type="string" default="">
<cfargument name="mailingListName" type="string" default="">

<cfset var rsReturnForm=""/>
<cfset var mailingListConfirmScript=""/>
<cfset var mailText=""/>
<cfset var listName=arguments.mailingListName/>
<cfset var returnURL=""/>
<cfset var contactEmail=variables.instance.settingsManager.getSite(arguments.siteid).getContact()/>
<cfset var contactName=variables.instance.settingsManager.getSite(arguments.siteid).getSite()/>
<cfset var finder=""/>
<cfset var theString=""/>

<cfquery name="rsReturnForm" datasource="#variables.instance.configBean.getDatasource()#"  username="#variables.instance.configBean.getDBUsername()#" password="#variables.instance.configBean.getDBPassword()#">
select filename from tcontent where siteid='#arguments.siteid#'  and active =1 and ((display=1) or (display=2  and tcontent.DisplayStart <= #createodbcdate(now())# AND tcontent.DisplayStop >= #createodbcdate(now())#)) 
and contenthistid in (select contenthistid from tcontentobjects where object='mailing_list_master')	
</cfquery>

<cfset returnURL="http://#variables.instance.settingsManager.getSite(arguments.siteid).getDomain()##variables.instance.configBean.getServerPort()##variables.instance.configBean.getContext()##variables.instance.contentRenderer.getURLStem(arguments.siteid,rsreturnform.filename)#?doaction=validateMember&mlid=#arguments.mlid#&siteid=#arguments.siteid#&email=#arguments.sendto#&nocache=1"/>
<cfset mailingListConfirmScript = variables.instance.settingsManager.getSite(arguments.siteid).getmailingListConfirmScript()/>

<cfoutput>
<cfif mailingListconfirmScript neq ''>
	<cfset theString = mailingListConfirmScript/>
	<cfset finder=refind('##.+?##',theString,1,"true")>
	<cfloop condition="#finder.len[1]#">
		<cftry>
			<cfset theString=replace(theString,mid(theString, finder.pos[1], finder.len[1]),'#trim(evaluate(mid(theString, finder.pos[1], finder.len[1])))#')>
			<cfcatch>
				<cfset theString=replace(theString,mid(theString, finder.pos[1], finder.len[1]),'')>
			</cfcatch>
		</cftry>
		<cfset finder=refind('##.+?##',theString,1,"true")>
	</cfloop>
	<cfset mailingListConfirmScript = theString/>

	<cfsavecontent variable="mailText">
#mailingListConfirmScript#
	</cfsavecontent>

<cfelse>

	<cfsavecontent variable="mailText">
You've requested to be signed up for the mailing list: #listName#

If this is correct, please verify your email address by entering the following url into your browser window:

#returnURL#

Please contact #contactEmail# if you have any questions or comments on this process.

Thank you,

The #contactName# staff
	</cfsavecontent>

</cfif>
</cfoutput>

<cfset variables.mailer.sendText(mailText,
				arguments.sendto,
				"Mailing List Manager",
				"Mailing List Verification",
				arguments.siteid) />

	
</cffunction>

<cffunction name="validateMember" access="public" output="false" returntype="void" >
	<cfargument name="data" type="struct" />
	
	<cfquery datasource="#variables.instance.configBean.getDatasource()#"  username="#variables.instance.configBean.getDBUsername()#" password="#variables.instance.configBean.getDBPassword()#">
		update tmailinglistmembers
		set isVerified = 1 
		where email = '#data.email#' and
		mlid = '#data.mlid#' and
		siteid = '#data.siteid#'
	</cfquery>
	
</cffunction>

</cfcomponent>