123 lines
4.0 KiB
Go
123 lines
4.0 KiB
Go
package migration
|
|
|
|
import (
|
|
"database/sql"
|
|
"federated.computer/wp-sync-slowtwitch/services/slowtwitch"
|
|
"federated.computer/wp-sync-slowtwitch/services/wordpress"
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
type MigrateCategories struct {
|
|
SlowtwitchDatabase *sql.DB
|
|
ResultsDatabase *sql.DB
|
|
WordpressBaseUrl string
|
|
WordpressUser string
|
|
WordpressPassword string
|
|
}
|
|
|
|
func (migration *MigrateCategories) Execute() []CategoryResult {
|
|
categories := slowtwitch.GetCategories(migration.SlowtwitchDatabase)
|
|
var output []CategoryResult
|
|
for _, category := range categories {
|
|
hasBeenMigrated := HasBeenMigrated(category.Id, migration.ResultsDatabase)
|
|
|
|
if hasBeenMigrated {
|
|
continue
|
|
}
|
|
|
|
errorMessage := ""
|
|
|
|
wordpressParentId, err := getWordpressParentCategoryId(category, migration, errorMessage)
|
|
if err != nil {
|
|
errorMessage = errorMessage + err.Error()
|
|
err = nil
|
|
}
|
|
slowtwitchPath, slowtwitchUrl, httpStatus := getSlowtwitchUrlsAndVerify(category)
|
|
wordpressCategory, err := createInWordpress(category, wordpressParentId, migration)
|
|
if err != nil {
|
|
errorMessage = errorMessage + err.Error()
|
|
} else {
|
|
err, errorMessage = createRedirect(wordpressCategory, migration, slowtwitchPath, err, errorMessage)
|
|
}
|
|
overallResult := submitResults(wordpressCategory, category, slowtwitchUrl, httpStatus, errorMessage, migration)
|
|
fmt.Println("Successfully Created Category:", wordpressCategory.Name)
|
|
output = append(output, overallResult)
|
|
}
|
|
return output
|
|
}
|
|
|
|
func submitResults(wordpressCategory wordpress.CategoryData, category slowtwitch.SlowtwitchCategory, slowtwitchUrl string, httpStatus int, errorMessage string, migration *MigrateCategories) CategoryResult {
|
|
overallResult := CategoryResult{
|
|
WordpressId: wordpressCategory.Id,
|
|
SlowtwitchId: category.Id,
|
|
OldUrl: slowtwitchUrl,
|
|
OldUrlStatus: httpStatus,
|
|
NewUrl: wordpressCategory.Link,
|
|
IsSuccess: len(errorMessage) == 0,
|
|
ErrorMessage: errorMessage,
|
|
}
|
|
|
|
err := CreateCategoryResult(overallResult, migration.ResultsDatabase)
|
|
if err != nil {
|
|
fmt.Println(err)
|
|
err = nil
|
|
}
|
|
return overallResult
|
|
}
|
|
|
|
func createRedirect(wordpressCategory wordpress.CategoryData, migration *MigrateCategories, slowtwitchPath string, err error, errorMessage string) (error, string) {
|
|
redirectUrl := "/" + strings.ReplaceAll(wordpressCategory.Link, migration.WordpressBaseUrl, "")
|
|
createRedirect := wordpress.CreateRedirect{
|
|
Url: slowtwitchPath,
|
|
Title: "Category: " + wordpressCategory.Name,
|
|
MatchType: "page",
|
|
ActionType: "url",
|
|
ActionCode: 301,
|
|
GroupId: 1,
|
|
ActionData: wordpress.ActionData{
|
|
Url: redirectUrl,
|
|
},
|
|
}
|
|
_, err = createRedirect.Execute(migration.WordpressBaseUrl, migration.WordpressUser, migration.WordpressPassword)
|
|
if err != nil {
|
|
errorMessage = errorMessage + err.Error()
|
|
err = nil
|
|
}
|
|
return err, errorMessage
|
|
}
|
|
|
|
func createInWordpress(category slowtwitch.SlowtwitchCategory, wordpressParentId int, migration *MigrateCategories) (wordpress.CategoryData, error) {
|
|
createWordpressCategory := wordpress.CreateCategory{
|
|
Name: strings.Trim(category.Name, " "),
|
|
Description: "",
|
|
ParentId: wordpressParentId,
|
|
}
|
|
wordpressCategory, err := createWordpressCategory.Execute(migration.WordpressBaseUrl, migration.WordpressUser, migration.WordpressPassword)
|
|
if err != nil {
|
|
return wordpress.CategoryData{}, err
|
|
} else {
|
|
return wordpressCategory, nil
|
|
}
|
|
}
|
|
|
|
func getSlowtwitchUrlsAndVerify(category slowtwitch.SlowtwitchCategory) (string, string, int) {
|
|
slowtwitchPath := slowtwitch.ConvertUrlToCategoryFormat(category.FullName)
|
|
slowtwitchUrl := slowtwitch.GetURL(slowtwitchPath)
|
|
httpStatus := slowtwitch.GetPageStatus(slowtwitchUrl)
|
|
return slowtwitchPath, slowtwitchUrl, httpStatus
|
|
}
|
|
|
|
func getWordpressParentCategoryId(category slowtwitch.SlowtwitchCategory, migration *MigrateCategories, errorMessage string) (int, error) {
|
|
if category.FatherId != 0 {
|
|
parentCategory, err := GetSlowtwitchCategoryResult(category.FatherId, migration.ResultsDatabase)
|
|
if err != nil {
|
|
return 0, err
|
|
} else {
|
|
return parentCategory.WordpressId, nil
|
|
}
|
|
}
|
|
|
|
return 0, nil
|
|
}
|