- generator in Definition::addItemToSet order: 50000 URL cap, lastmod from the record or the updates manifest (regular file, 5 MiB cap, fail safe), BeforeAddItem (skip) and AddItem (extra XML) festival events, tier or item priority, per-alternate expansion of list type children - priority tiers from golem15.sitemap.priority_tiers, compiled at boot, defaults equal to the PHP getPriorityForUrl rules - frontend_url rewrite of loc, xhtml:link href and the stylesheet href; GET /sitemap.xsl serves the PHP stylesheet byte for byte - golem15_sitemap_settings singleton and Settings model - sitemap:import (PHP ImportCommand) and sitemap:import-winter with the read-only Winter export SQL - urlto and full goldens generated from PHP; TestSitemapImportSmoke
50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
package classes
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
)
|
|
|
|
// The PHP routes.php patterns of the frontend rewrite.
|
|
var (
|
|
locElement = regexp.MustCompile(`<loc>(.*?)</loc>`)
|
|
xhtmlLinkRef = regexp.MustCompile(`(<xhtml:link[^>]*href=")([^"]*)(")`)
|
|
)
|
|
|
|
// Rewrite is the frontend_url rewrite of PHP routes.php: with frontendURL
|
|
// set, backendURL is replaced literally (str_replace) inside every loc
|
|
// element, inside every xhtml:link href and in the exact stylesheet href.
|
|
// Both URLs are right-trimmed of slashes first. An empty frontendURL (or
|
|
// "0", which PHP reads as false) leaves xml unchanged.
|
|
func Rewrite(xml, backendURL, frontendURL string) string {
|
|
if frontendURL == "" || frontendURL == "0" {
|
|
return xml
|
|
}
|
|
frontend := strings.TrimRight(frontendURL, "/")
|
|
backend := strings.TrimRight(backendURL, "/")
|
|
replace := func(s string) string {
|
|
if backend == "" {
|
|
return s
|
|
}
|
|
return strings.ReplaceAll(s, backend, frontend)
|
|
}
|
|
xml = locElement.ReplaceAllStringFunc(xml, func(m string) string {
|
|
inner := m[len("<loc>") : len(m)-len("</loc>")]
|
|
return "<loc>" + replace(inner) + "</loc>"
|
|
})
|
|
xml = xhtmlLinkRef.ReplaceAllStringFunc(xml, func(m string) string {
|
|
sub := xhtmlLinkRef.FindStringSubmatch(m)
|
|
return sub[1] + replace(sub[2]) + sub[3]
|
|
})
|
|
if backend != "" {
|
|
xml = strings.ReplaceAll(xml, `href="`+backend+`/sitemap.xsl"`, `href="`+frontend+`/sitemap.xsl"`)
|
|
}
|
|
return xml
|
|
}
|
|
|
|
// BackendURL is PHP rtrim(url('/'), '/') for a request whose root URL is
|
|
// root: the URL the rewrite replaces.
|
|
func BackendURL(root string) string {
|
|
return strings.TrimRight(URLTo(root, "/"), "/")
|
|
}
|