<!--- 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 output="false">

<cffunction name="init" access="public" returntype="any" output="false">
<cfargument name="configBean" type="any" required="yes"/>
<cfargument name="utility" type="any" required="yes"/>
<cfargument name="settingsGateway" type="any" required="yes"/>
<cfargument name="settingsDAO" type="any" required="yes"/>

		<cfset variables.instance.configBean=arguments.configBean />
		<cfset variables.instance.utility=arguments.utility />
		<cfset variables.instance.Gateway=arguments.settingsGateway />
		<cfset variables.instance.DAO=arguments.settingsDAO />
		
		<cfset setSites() />

<cfreturn this />
</cffunction>

<cffunction name="getList" access="public" output="false" returntype="query">

	<cfset var rs = variables.instance.gateway.getList() />
	
	<cfreturn rs />
	
</cffunction>

<cffunction name="publishSite" access="public" output="false" returntype="void">
<cfargument name="siteID" required="yes" default="">

	<cfset application.serviceFactory.getBean("publisher").start(arguments.siteid) />
	<cfset variables.instance.utility.broadcastAppreload() />
	
</cffunction>

<cffunction name="saveOrder" access="public" output="false" returntype="void">
<cfargument name="orderno" required="yes" default="">
<cfargument name="orderID" required="yes" default="">

<cfset var i=0/>
	
	<cfif arguments.orderID neq ''>
		<cfloop from="1" to="#listlen(arguments.orderid)#" index="i">
		<cfquery datasource="#variables.instance.configBean.getDatasource()#" username="#variables.instance.configBean.getDBUsername()#" password="#variables.instance.configBean.getDBPassword()#">
		update tsettings set orderno= #listgetat(arguments.orderno,i)# where siteid ='#listgetat(arguments.orderid,i)#'
		</cfquery>
		</cfloop>
	</cfif>
	
	<cfobjectcache action="clear"/>
	
</cffunction>

<cffunction name="saveDeploy" access="public" output="false" returntype="void">
<cfargument name="deploy" required="yes" default="">
<cfargument name="orderID" required="yes" default="">
 <cfset var i=0/>	
	<cfif arguments.deploy neq '' and arguments.orderID neq ''>
		<cfloop from="1" to="#listlen(arguments.orderid)#" index="i">
		<cfquery datasource="#variables.instance.configBean.getDatasource()#" username="#variables.instance.configBean.getDBUsername()#" password="#variables.instance.configBean.getDBPassword()#">
		update tsettings set deploy= #listgetat(arguments.deploy,i)# where siteid ='#listgetat(arguments.orderid,i)#'
		</cfquery>
		</cfloop>
	</cfif>
	
</cffunction>


<cffunction name="read" access="public" output="false" returntype="any">
<cfargument name="siteid" type="string" />

	<cfreturn variables.instance.DAO.read(arguments.siteid) />
	
</cffunction>

<cffunction name="update" access="public" output="false" returntype="any">
	<cfargument name="data" type="struct" />
	
	<cfset var bean=variables.instance.DAO.read(arguments.data.SiteID) />
	<cfset bean.set(arguments.data) />
	
	<cfif structIsEmpty(bean.getErrors())>
		<cfset variables.instance.utility.logEvent("SiteID:#bean.getSiteID()# Site:#bean.getSite()# was updated","sava-settings","Information",true) />
		<cfset variables.instance.DAO.update(bean) />
		<cfset setSites()/>
		<cfset variables.instance.utility.flushCache(arguments.data.siteid)/>
	</cfif>

	<cfreturn bean />

</cffunction>

<cffunction name="delete" access="public" output="false" returntype="void">
	<cfargument name="siteid" type="string" />
	
	<cfset var bean=read(arguments.siteid) />
	<cfset variables.instance.utility.logEvent("SiteID:#arguments.siteid# Site:#bean.getSite()# was deleted","sava-settings","Information",true) />
	<cfset variables.instance.DAO.delete(arguments.siteid) />
	<cfset variables.instance.utility.flushCache(arguments.siteid)/>
	<cfset setSites() />
	<cfset variables.instance.utility.deleteDir("#variables.instance.configBean.getWebRoot()##variables.instance.configBean.getFileDelim()##arguments.siteid##variables.instance.configBean.getFileDelim()#") />
	<cfset variables.instance.utility.deleteDir("#variables.instance.configBean.getFileDir()##variables.instance.configBean.getFileDelim()##arguments.siteid##variables.instance.configBean.getFileDelim()#") />
</cffunction>

<cffunction name="create" access="public" output="false" returntype="any">
	<cfargument name="data" type="struct" />
	<cfset var rs=""/>
	<cfset var bean=application.serviceFactory.getBean("settingsBean") />
	<cfset bean.set(arguments.data) />
	
	<cfif structIsEmpty(bean.getErrors()) and  bean.getSiteID() neq ''>
		
		<cfquery name="rs" datasource="#variables.instance.configBean.getDatasource()#" username="#variables.instance.configBean.getDBUsername()#" password="#variables.instance.configBean.getDBPassword()#">
		select siteid from tsettings where siteid='#bean.getSiteID()#'
		</cfquery>
		
		<cfif rs.recordcount>
			<cfthrow message="The SiteID you entered is allready being used.">
			<cfabort>
		</cfif>
		
		<cfset variables.instance.utility.logEvent("SiteID:#bean.getSiteID()# Site:#bean.getSite()# was created","sava-settings","Information",true) />
		<cfset variables.instance.DAO.create(bean) />
		<cfset variables.instance.utility.copyDir("#variables.instance.configBean.getWebRoot()##variables.instance.configBean.getFileDelim()#default#variables.instance.configBean.getFileDelim()#", "#variables.instance.configBean.getWebRoot()##variables.instance.configBean.getFileDelim()##bean.getSiteID()##variables.instance.configBean.getFileDelim()#") />
		<cfset variables.instance.utility.createRequiredSiteDirectories(bean.getSiteID()) />
		<cfset setSites() />
	</cfif>

	<cfreturn bean />
</cffunction>

<cffunction name="setSites" access="public" output="false" returntype="void">
	<cfset var rs="" />
	<cfobjectcache action="clear">
	<cfset rs=getList() />
	<cfset variables.instance.sites=structNew() />

	<cfloop query="rs">
		<cfset variables.instance.sites['#rs.siteid#']=variables.instance.DAO.read(rs.siteid) />
		<cfset variables.instance.utility.createRequiredSiteDirectories(rs.siteid) />
 	</cfloop>
	
</cffunction>

<cffunction name="getSite" access="public" output="false" returntype="any">
	<cfargument name="siteid" type="string" />
	<cftry>
	<cfreturn variables.instance.sites['#arguments.siteid#'] />
	<cfcatch>
			<cfset setSites() />
			<cfreturn variables.instance.sites['#arguments.siteid#'] />	
	</cfcatch>
	</cftry>
</cffunction>

<cffunction name="getSites" access="public" output="false" returntype="any">
	<cfreturn variables.instance.sites />
</cffunction>

<cffunction name="getUserSites" access="public" output="false" returntype="query">
<cfargument name="siteArray" type="array" required="yes" default="#arrayNew(1)#">
<cfargument name="isS2" type="boolean" required="yes" default="false">
	<cfset var rs=""/>
	<cfset var counter=1/>
	<cfset var rsSites=getList()/>
	<cfset var s=0/>
	<cfquery name="rs" dbtype="query">
		select * from rsSites
		<cfif arrayLen(arguments.siteArray) and not arguments.isS2>
			where siteid in (
			<cfloop from="1" to="#arrayLen(arguments.siteArray)#" index="s">
			'#arguments.siteArray['#s#']#'
			<cfif counter lt arrayLen(arguments.siteArray)>,</cfif>
			<cfset counter=counter+1>
			</cfloop>)
		<cfelseif not arrayLen(arguments.siteArray) and not arguments.isS2>
		where 0=1
		</cfif>
		
	</cfquery>

	<cfreturn rs />
</cffunction>



</cfcomponent>