2024-09-29 14:57:21 +00:00
|
|
|
|
package tools
|
|
|
|
|
|
|
|
|
|
import (
|
2024-10-22 20:48:50 +00:00
|
|
|
|
"fmt"
|
2024-09-29 14:57:21 +00:00
|
|
|
|
"penahub.gitlab.yandexcloud.net/backend/quiz/bitrix/internal/models"
|
|
|
|
|
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
|
|
|
|
|
"strconv"
|
2024-10-22 20:48:50 +00:00
|
|
|
|
"strings"
|
|
|
|
|
"unicode/utf8"
|
2024-09-29 14:57:21 +00:00
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
func ToPipeline(bitrixPipelines []models.Category, bitrixID string) []model.PipelineBitrix {
|
|
|
|
|
var pipelines []model.PipelineBitrix
|
|
|
|
|
for _, p := range bitrixPipelines {
|
|
|
|
|
pipelines = append(pipelines, model.PipelineBitrix{
|
|
|
|
|
BitrixID: p.ID,
|
|
|
|
|
Name: p.Name,
|
|
|
|
|
EntityTypeId: p.EntityTypeId,
|
|
|
|
|
AccountID: bitrixID,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return pipelines
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ToStep(bitrixPipelines []models.Steps, bitrixID string) ([]model.StepBitrix, error) {
|
|
|
|
|
var pipelines []model.StepBitrix
|
|
|
|
|
for _, p := range bitrixPipelines {
|
|
|
|
|
pipelineID, err := strconv.ParseInt(p.ID, 10, 64)
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
pipelines = append(pipelines, model.StepBitrix{
|
|
|
|
|
BitrixID: p.ID,
|
|
|
|
|
AccountID: bitrixID,
|
|
|
|
|
EntityID: p.EntityID,
|
|
|
|
|
StatusID: p.StatusID,
|
|
|
|
|
Name: p.Name,
|
|
|
|
|
NameInit: p.NameInit,
|
|
|
|
|
Color: p.Color,
|
|
|
|
|
PipelineID: int32(pipelineID),
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return pipelines, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func ToField(bitrixFields []models.Fields, bitrixID string) []model.BitrixField {
|
|
|
|
|
var fields []model.BitrixField
|
|
|
|
|
for _, f := range bitrixFields {
|
|
|
|
|
fields = append(fields, model.BitrixField{
|
|
|
|
|
AccountID: bitrixID,
|
|
|
|
|
BitrixID: f.ID,
|
|
|
|
|
EntityID: f.EntityID,
|
|
|
|
|
FieldName: f.FieldName,
|
|
|
|
|
EditFromLabel: f.EditFormLabel,
|
|
|
|
|
FieldType: f.UserTypeID,
|
|
|
|
|
})
|
|
|
|
|
}
|
|
|
|
|
return fields
|
|
|
|
|
}
|
2024-10-22 20:48:50 +00:00
|
|
|
|
|
|
|
|
|
func isEmoji(r rune) bool {
|
|
|
|
|
// https://symbl.cc/ru/unicode/blocks/emoticons/
|
|
|
|
|
|
|
|
|
|
return (r >= 0x1F600 && r <= 0x1F64F) || // эмотикоины
|
|
|
|
|
(r >= 0x1F650 && r <= 0x1F67F) || // орнаментные символы
|
|
|
|
|
(r >= 0x1F680 && r <= 0x1F6FF) || // Транспортные и картографические символы
|
|
|
|
|
(r >= 0x1F700 && r <= 0x1F77F) || // Алхимические символы
|
|
|
|
|
(r >= 0x1F780 && r <= 0x1F7FF) || // Расширенные геометрические фигуры
|
|
|
|
|
(r >= 0x1F800 && r <= 0x1F8FF) || // Дополнительные стрелки — С
|
|
|
|
|
(r >= 0x1F900 && r <= 0x1F9FF) || // Дополнительные символы и пиктограммы
|
|
|
|
|
(r >= 0x1FA00 && r <= 0x1FA6F) || // Шахматные символы
|
|
|
|
|
(r >= 0x1FA70 && r <= 0x1FAFF) || // Расширенные символы и пиктограммы — A
|
|
|
|
|
(r >= 0x1FB00 && r <= 0x1FBFF) || // Символы наследия вычислительной техники
|
|
|
|
|
(r >= 0x20000 && r <= 0x2A6DF) || // Унифицированные идеограммы ККЯ. Расширение B
|
|
|
|
|
(r >= 0x2A700 && r <= 0x2B73F) || // Унифицированные идеограммы ККЯ. Расширение C
|
|
|
|
|
(r >= 0x2B740 && r <= 0x2B81F) || // Унифицированные идеограммы ККЯ. Расширение D
|
|
|
|
|
(r >= 0x2B820 && r <= 0x2CEAF) || // Унифицированные идеограммы ККЯ. Расширение E
|
|
|
|
|
(r >= 0x2CEB0 && r <= 0x2EBEF) || // Унифицированные идеограммы ККЯ. Расширение F
|
|
|
|
|
(r >= 0x2EBF0 && r <= 0x2EE5F) || // CJK Unified Ideographs Extension I
|
|
|
|
|
(r >= 0x2F800 && r <= 0x2FA1F) || // Дополнение к совместимым идеограммам ККЯ
|
|
|
|
|
(r >= 0x30000 && r <= 0x3134F) || // Унифицированные идеограммы ККЯ. Расширение G
|
|
|
|
|
(r >= 0x31350 && r <= 0x323AF) || // Унифицированные идеограммы ККЯ. Расширение H
|
|
|
|
|
(r >= 0xE0000 && r <= 0xE007F) || // Теги
|
|
|
|
|
(r >= 0xE0100 && r <= 0xE01EF) // Дополнение к селекторам вариантов начертания
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func EmojiUnicode(text string) string {
|
|
|
|
|
var result strings.Builder
|
|
|
|
|
for len(text) > 0 {
|
|
|
|
|
r, size := utf8.DecodeRuneInString(text)
|
|
|
|
|
if size == -1 {
|
|
|
|
|
result.WriteString(text[:1])
|
|
|
|
|
text = text[1:]
|
|
|
|
|
} else {
|
|
|
|
|
if isEmoji(r) {
|
|
|
|
|
result.WriteString(fmt.Sprintf(`"0x%x"`, r))
|
|
|
|
|
} else {
|
|
|
|
|
result.WriteRune(r)
|
|
|
|
|
}
|
|
|
|
|
text = text[size:]
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return result.String()
|
|
|
|
|
}
|