-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathgooglesitemapsmanager.cfc
326 lines (288 loc) · 11.6 KB
/
googlesitemapsmanager.cfc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
<cfcomponent component extends="mura.cfobject" displayname="GoogleSitemapsManager" output="false" hint="Google Sitemaps Manager">
<cffunction name="getSitemapXML" returntype="xml" access="public" output="false">
<cfargument name="$" type="any" required="true" />
<cfargument name="siteID" type="string" required="false" />
<cfreturn xmlParse( getSiteMap( argumentCollection=arguments ) ) />
</cffunction>
<cffunction name="getFeedList" returntype="query" access="public" output="false">
<cfargument name="$" type="any" required="true" />
<cfargument name="siteID" type="string" required="false" />
<cfset qFeedList = "" />
<cfquery name="qFeedList" datasource="#$.GlobalConfig().get('datasource')#" username="#$.GlobalConfig().get('dbusername')#" password="#$.GlobalConfig().get('dbpassword')#">
SELECT * from tcontentfeeds
</cfquery>
<cfreturn qFeedList />
</cffunction>
<cffunction name="schedule" access="public" output="false">
<cfargument name="$" type="any" required="true" />
<cfargument name="siteID" type="string" required="false" />
<cfargument name="enable" type="boolean" required="false" default="true" />
<cfset var settings = arguments.$.getBean('gsmsettings').loadBy(siteid = arguments.siteid) />
<cfset var pluginConfig = arguments.$.getPlugin("MuraGoogleSitemaps") />
<cfset var timeOfDay = createDateTime(2011,1,1,3,0,0) />
<cfset var processURL = "http://#arguments.$.siteConfig('domain')##arguments.$.globalConfig().getServerPort()##arguments.$.globalConfig('context')#/plugins/#pluginConfig.getDirectory()#/?gsm=process:&site=#siteID#" />
<cfif arguments.enable>
<cfschedule
action="update"
task="Mura Google Sitemaps #arguments.$.siteConfig('domain')# - #arguments.siteID#"
interval="#settings.get("frequency")#"
url="#processURL#"
operation="HTTPRequest"
startdate="#dateFormat(now(),"mm/dd/yy")#"
starttime="#timeFormat( timeOfDay,"hh:mm TT" )#"
resolveurl="true"
>
<cfelse>
<cfschedule
action="delete"
task="Mura Google Sitemaps #arguments.$.siteConfig('domain')# - #arguments.siteID#">
</cfif>
</cffunction>
<cffunction name="getSitemap" returntype="string" access="public" output="false">
<cfargument name="$" type="any" required="true" />
<cfargument name="siteID" type="string" required="false" />
<cfargument name="isNews" type="boolean" required="false" default="false" />
<cfset var site = $.getBean('site').loadby(siteid=siteid)>
<cfset var gsmsettings = $.getBean('gsmsettings').loadby(siteid=siteid)>
<cfset var translations = $.getPlugin('MuraTranslations')>
<cfset var translationsid = translations.getPluginID()>
<cfset var useSiteID = iif( structKeyExists(arguments,"siteID"),de(arguments.siteID),de(session.siteid) ) />
<cfset var qAtts = "" />
<cfset var qList = "" />
<cfset var qValues = "" />
<cfset var sValues = StructNew() />
<cfset var xmlStr = "" />
<cfset var isExempt = false />
<cfset var strXML = "" />
<cfset var strXMLBlock = "" />
<cfset var sitemapXML = XmlNew(true)>
<cfset var exemptHash = StructNew()>
<cfset var valueHash = StructNew()>
<cfset var langoutput = "" />
<cfset var langcontent = "" />
<cfset var sites = {} />
<cfset var siteProtocol = $.getBean('settingsManager').getSite(arguments.siteID).getUseSSL() ? 'https://' : 'http://'>
<cfif useSiteID neq arguments.$.event().getValue('siteid')>
<cfset arguments.$ = application.serviceFactory.getBean('muraScope').init(useSiteID) />
</cfif>
<cfsavecontent variable="strXML"><cfoutput><?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"></cfoutput></cfsavecontent>
<cfquery name="qAtts" datasource="#$.GlobalConfig().get('datasource')#" username="#$.GlobalConfig().get('dbusername')#" password="#$.GlobalConfig().get('dbpassword')#">
SELECT
tclassextenddata.baseID,tclassextenddata.attributeID,tclassextenddata.attributeValue,tclassextendattributes.name
FROM
tclassextenddata
JOIN
tclassextendattributes
ON
tclassextendattributes.attributeID = tclassextenddata.attributeID
JOIN
tclassextendsets
ON
tclassextendsets.extendSetID = tclassextendattributes.extendSetID
JOIN
tclassextend
ON
tclassextend.subTypeID = tclassextendsets.subTypeID
AND
tclassextend.subtype = 'Default'
AND
tclassextend.type = 'Base'
WHERE
tclassextendattributes.siteid = <cfqueryparam value="#useSiteID#" cfsqltype="cf_sql_varchar" maxlength="25">
AND
tclassextenddata.baseID != <cfqueryparam value="#useSiteID#" cfsqltype="cf_sql_varchar" maxlength="25">
</cfquery>
<cfquery name="qList" datasource="#$.GlobalConfig().get('datasource')#" username="#$.GlobalConfig().get('dbusername')#" password="#$.GlobalConfig().get('dbpassword')#">
SELECT
tcontent.contentID,tcontent.contentHistID,tcontent.filename,tcontent.lastupdate,attributeValue AS isExclude,tcontent.path
FROM
tcontent
JOIN
tclassextend
ON
tclassextend.siteID = <cfqueryparam value="#useSiteID#" cfsqltype="cf_sql_varchar" maxlength="25">
AND
tcontent.type IN ('Page','File','Folder','Portal','Calendar','Gallery','Link')
AND
tclassextend.subtype = 'Default'
JOIN
tclassextendsets
ON
tclassextend.subTypeID = tclassextendsets.subTypeID
JOIN
tclassextendattributes
ON
tclassextendsets.extendsetID = tclassextendattributes.extendsetID
AND
tclassextendattributes.name = 'exclude'
LEFT JOIN
tclassextenddata
ON
tclassextendattributes.attributeID = tclassextenddata.attributeID
AND
tclassextenddata.baseID = tcontent.contentHistID
WHERE
tcontent.siteid = <cfqueryparam value="#useSiteID#" cfsqltype="cf_sql_varchar" maxlength="25">
AND
tclassextend.type = 'Base'
AND
tcontent.approved = 1
AND
tcontent.active = 1
AND
(
tcontent.display = 1
OR
(
tcontent.display = 2
AND
<cfif application.configBean.getDbType() eq "mysql">
tcontent.displaystart <= CURDATE()
<cfelse>
tcontent.displaystart <= #CreateODBCDateTime( now() )#
</cfif>
)
)
</cfquery>
<cfloop query="qList">
<cfset sValues = StructNew() />
<cfif len(qList.isExclude)>
<cfif qList.isExclude eq 'inherit'>
<cfif qList.path eq qList.contentID>
<cfset isExempt = qList.contentHistID />
<cfelse>
<cfset isExempt = getInherit( qAtts,qList,qList.path,exemptHash )>
</cfif>
<cfelseif qList.isExclude eq 'no'>
<cfset isExempt = false />
<cfset sValues = getValues( qAtts,qList.contentHistID,valueHash ) />
<cfelse>
<cfset isExempt = true />
</cfif>
<cfelse>
<cfset isExempt = getInherit( qAtts,qList,qList.path,exemptHash )>
</cfif>
<cfif isExempt eq true>
<!--- skip, do nothing --->
<cfelseif isExempt eq false>
<cfset sValues = getValues( qAtts,qList.contentHistID,valueHash ) />
<cfelse>
<cfset sValues = getValues( qAtts,isExempt,valueHash ) />
</cfif>
<cfif not StructKeyExists( sValues,'priority' )>
<cfset sValues.priority = "0.5" />
</cfif>
<cfif not StructKeyExists( sValues,'changefrequency' )>
<cfset sValues.changefrequency = "monthly" />
</cfif>
<cfif len(gsmsettings.getSiteList())>
<cfquery name="qTrans" datasource="#$.GlobalConfig().get('datasource')#" username="#$.GlobalConfig().get('dbusername')#" password="#$.GlobalConfig().get('dbpassword')#">
SELECT
remoteid,remotesiteid
FROM
p#translationsid#_translationmaps
WHERE
p#translationsid#_translationmaps.localid =
<cfqueryparam value="#contentid#" cfsqltype="CF_SQL_VARCHAR" maxlength="35">
AND
p#translationsid#_translationmaps.remotesiteid IN
(<cfqueryparam value="#gsmsettings.getSiteList()#" cfsqltype="CF_SQL_VARCHAR" maxlength="250" list="true">)
</cfquery>
<cfset langcontent = "">
<cfset langoutput = "">
<cfif qTrans.recordcount>
<cfloop query="qTrans">
<cfset langcontent = $.getBean('content').loadBy(contentid = remoteid,siteid=remotesiteid)>
<cfif not structKeyExists(sites,remotesiteid)>
<cfset sites[remotesiteid] = $.getBean('site').loadBy(siteid = remotesiteid) />
</cfif>
<cfsavecontent variable="langoutput"><cfoutput>#langoutput#
<xhtml:link rel="alternate" hreflang = "#sites[remotesiteid].getJavaLocale()#" href="#langcontent.getAssocURL()#" /></cfoutput></cfsavecontent>
</cfloop>
</cfif>
</cfif>
<cfif isExempt neq true>
<cfsavecontent variable="strXMLBlock"><cfoutput>
<url><loc>#siteProtocol##arguments.$.getBean('settingsManager').getSite(arguments.siteID).getDomain()##arguments.$.globalConfig().getServerPort()##arguments.$.globalConfig().getContext()##arguments.$.getContentRenderer().getURLStem(useSiteID,qList.filename)#</loc>#langoutput#<lastmod>#dateformat(lastupdate,"yyyy-mm-dd")#</lastmod><changefreq>#sValues.changefrequency#</changefreq><priority>#sValues.priority#</priority></url></cfoutput></cfsavecontent>
<cfset strXML = strXML & strXMLBlock />
</cfif>
</cfloop>
<cfset strXML = strXML & "
</urlset>" />
<cfreturn trim(strXML) />
</cffunction>
<cffunction name="getValues" returntype="Struct" access="public" output="false">
<cfargument name="qAtts" type="query" required="true" />
<cfargument name="contentHistID" type="string" required="true" />
<cfargument name="valueHash" type="struct" required="true" />
<cfset var qValues = "" />
<cfset var sValues = StructNew() />
<cfquery name="qStatus" dbtype="query">
SELECT
attributeValue,name
FROM
arguments.qAtts
WHERE
baseID = <cfqueryparam value="#arguments.contentHistID#" cfsqltype="cf_sql_varchar" maxlength="35">
</cfquery>
<cfif qStatus.RecordCount>
<cfloop query="qStatus">
<cfset sValues[qStatus.name] = qStatus.attributeValue />
</cfloop>
</cfif>
<cfreturn sValues />
</cffunction>
<cffunction name="getInherit" returntype="string" access="public" output="false">
<cfargument name="qAtts" type="query" required="true" />
<cfargument name="qList" type="query" required="true" />
<cfargument name="contentHistIDList" type="string" required="true" />
<cfargument name="exemptHash" type="struct" required="true" />
<cfset var aIDList = listToArray( arguments.contentHistIDList ) />
<cfset var iiX = "" />
<cfset var qContentID = "" />
<cfset var qStatus = "" />
<cfset var isExempt = "" />
<cfloop from="#ArrayLen(aIDList)#" to="1" step="-1" index="iiX">
<cfif StructKeyExists( exemptHash,aIDList[iiX] )>
<cfset isExempt = exemptHash[ aIDList[iiX] ] />
<cfelse>
<cfquery name="qContentID" dbtype="query" maxrows="1">
SELECT
contentHistID
FROM
arguments.qList
WHERE
contentID = <cfqueryparam value="#aIDList[iiX]#" cfsqltype="cf_sql_varchar" maxlength="35">
</cfquery>
<cfquery name="qStatus" dbtype="query" maxrows="1">
SELECT
attributeValue AS isExclude
FROM
arguments.qAtts
WHERE
baseID = <cfqueryparam value="#qContentID.contentHistID#" cfsqltype="cf_sql_varchar" maxlength="35">
AND
name = 'exclude'
</cfquery>
<cfif qStatus.recordCount>
<cfset exemptHash[ aIDList[iiX] ] = qStatus.isExclude />
<cfelse>
<cfset exemptHash[ aIDList[iiX] ] = "null" />
</cfif>
</cfif>
<cfset isExempt = exemptHash[ aIDList[iiX] ] />
<cfif isExempt neq "null">
<cfif isExempt eq 'Yes'>
<cfreturn true />
<cfbreak />
<cfelseif isExempt eq 'No'>
<cfreturn isExempt />
<cfbreak />
</cfif>
</cfif>
</cfloop>
<cfreturn false />
</cffunction>
</cfcomponent>