Implement guestbook settings #20
| @ -2,6 +2,7 @@ package models | |||||||
| 
 | 
 | ||||||
| import ( | import ( | ||||||
| 	"database/sql" | 	"database/sql" | ||||||
|  | 	"strconv" | ||||||
| 	"time" | 	"time" | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| @ -13,6 +14,14 @@ type GuestbookSettings struct { | |||||||
| 	AllowRemoteHostAccess bool | 	AllowRemoteHostAccess bool | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | const ( | ||||||
|  | 	SettingGbCommentingEnabled = "commenting_enabled" | ||||||
|  | 	SettingGbReenableComments  = "reenable_comments" | ||||||
|  | 	SettingGbVisible           = "is_visible" | ||||||
|  | 	SettingGbFilteredWords     = "filtered_words" | ||||||
|  | 	SettingGbAllowRemote       = "remote_enabled" | ||||||
|  | ) | ||||||
|  | 
 | ||||||
| type Guestbook struct { | type Guestbook struct { | ||||||
| 	ID        int64 | 	ID        int64 | ||||||
| 	ShortId   uint64 | 	ShortId   uint64 | ||||||
| @ -26,9 +35,42 @@ type Guestbook struct { | |||||||
| 
 | 
 | ||||||
| type GuestbookModel struct { | type GuestbookModel struct { | ||||||
| 	DB       *sql.DB | 	DB       *sql.DB | ||||||
|  | 	Settings map[string]Setting | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64) (int64, error) { | func (m *GuestbookModel) InitializeSettingsMap() error { | ||||||
|  | 	if m.Settings == nil { | ||||||
|  | 		m.Settings = make(map[string]Setting) | ||||||
|  | 	} | ||||||
|  | 	stmt := `SELECT settings.Id, settings.Description, Constrained, d.Id, d.Description, g.Id, g.Description, MinValue, MaxValue | ||||||
|  |         FROM settings | ||||||
|  |         LEFT JOIN setting_data_types d ON settings.DataType = d.Id | ||||||
|  |         LEFT JOIN setting_groups g ON settings.SettingGroup = g.Id | ||||||
|  |         WHERE SettingGroup = (SELECT Id FROM setting_groups WHERE Description = 'guestbook' LIMIT 1)` | ||||||
|  | 	result, err := m.DB.Query(stmt) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	for result.Next() { | ||||||
|  | 		var s Setting | ||||||
|  | 		var mn sql.NullString | ||||||
|  | 		var mx sql.NullString | ||||||
|  | 		err := result.Scan(&s.id, &s.description, &s.constrained, &s.dataType.id, &s.dataType.description, &s.settingGroup.id, &s.settingGroup.description, &mn, &mx) | ||||||
|  | 		if mn.Valid { | ||||||
|  | 			s.minValue = mn.String | ||||||
|  | 		} | ||||||
|  | 		if mx.Valid { | ||||||
|  | 			s.maxValue = mx.String | ||||||
|  | 		} | ||||||
|  | 		if err != nil { | ||||||
|  | 			return err | ||||||
|  | 		} | ||||||
|  | 		m.Settings[s.description] = s | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64, settings GuestbookSettings) (int64, error) { | ||||||
| 	stmt := `INSERT INTO guestbooks (ShortId, UserId, WebsiteId, Created, IsActive) | 	stmt := `INSERT INTO guestbooks (ShortId, UserId, WebsiteId, Created, IsActive) | ||||||
|     VALUES(?, ?, ?, ?, TRUE)` |     VALUES(?, ?, ?, ?, TRUE)` | ||||||
| 	result, err := m.DB.Exec(stmt, shortId, userId, websiteId, time.Now().UTC()) | 	result, err := m.DB.Exec(stmt, shortId, userId, websiteId, time.Now().UTC()) | ||||||
| @ -39,6 +81,10 @@ func (m *GuestbookModel) Insert(shortId uint64, userId int64, websiteId int64) ( | |||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return -1, err | 		return -1, err | ||||||
| 	} | 	} | ||||||
|  | 	err = m.initializeGuestbookSettings(id, settings) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return id, err | ||||||
|  | 	} | ||||||
| 	return id, nil | 	return id, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -80,35 +126,55 @@ func (m *GuestbookModel) GetAll(userId int64) ([]Guestbook, error) { | |||||||
| 	return guestbooks, nil | 	return guestbooks, nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *GuestbookModel) initializeGuestbookSettings(guestbookId int64, settings UserSettings) error { | func (m *GuestbookModel) initializeGuestbookSettings(guestbookId int64, settings GuestbookSettings) error { | ||||||
| 	stmt := `INSERT INTO guestbook_settings (GuestbookId, SettingId, AllowedSettingValueId, UnconstrainedValue) VALUES  | 	stmt := `INSERT INTO guestbook_settings (GuestbookId, SettingId, AllowedSettingValueId, UnconstrainedValue) VALUES  | ||||||
| 	(?, ?, ?, ?), | 	(?, ?, ?, ?), | ||||||
| 	(?, ?, ?, ?), | 	(?, ?, ?, ?), | ||||||
| 	(?, ?, ?, ?), | 	(?, ?, ?, ?), | ||||||
| 	(?, ?, ?, ?), | 	(?, ?, ?, ?), | ||||||
| 	(?, ?, ?, ?)` | 	(?, ?, ?, ?)` | ||||||
| 	_ = len(stmt) | 	_, err := m.DB.Exec(stmt, | ||||||
|  | 		guestbookId, m.Settings[SettingGbCommentingEnabled].id, settings.IsCommentingEnabled, nil, | ||||||
|  | 		guestbookId, m.Settings[SettingGbReenableComments].id, nil, settings.ReenableCommenting.String(), | ||||||
|  | 		guestbookId, m.Settings[SettingGbVisible].id, settings.IsVisible, nil, | ||||||
|  | 		guestbookId, m.Settings[SettingGbAllowRemote].id, settings.AllowRemoteHostAccess, nil) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| func (m *GuestbookModel) UpdateSetting(guestbookId int64, value string) { | func (m *GuestbookModel) UpdateGuestbookSettings(guestbookId int64, settings GuestbookSettings) error { | ||||||
|  | 	err := m.UpdateSetting(guestbookId, m.Settings[SettingGbCommentingEnabled], strconv.FormatBool(settings.IsCommentingEnabled)) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	err = m.UpdateSetting(guestbookId, m.Settings[SettingGbReenableComments], settings.ReenableCommenting.String()) | ||||||
|  | 	if err != nil { | ||||||
|  | 		return err | ||||||
|  | 	} | ||||||
|  | 	return nil | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func (m *GuestbookModel) UpdateSetting(guestbookId int64, setting Setting, value string) error { | ||||||
| 	stmt := `UPDATE guestbook_settings SET | 	stmt := `UPDATE guestbook_settings SET | ||||||
| 		AllowedSettingValueId=IFNULL((SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId),  | 				AllowedSettingValueId=IFNULL( | ||||||
|  | 					(SELECT Id FROM allowed_setting_values WHERE SettingId = guestbook_settings.SettingId AND ItemValue = ?), AllowedSettingValueId | ||||||
|  | 				),  | ||||||
| 				UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0) | 				UnconstrainedValue=(SELECT ? FROM settings WHERE settings.Id = guestbook_settings.SettingId AND settings.Constrained=0) | ||||||
| 			WHERE GuestbookId = ? | 			WHERE GuestbookId = ? | ||||||
| 			AND SettingId = (SELECT Id from Settings WHERE Description=?);` | 			AND SettingId = (SELECT Id from Settings WHERE Description=?);` | ||||||
| 	_ = len(stmt) | 	result, err := m.DB.Exec(stmt, value, value, guestbookId, setting.description) | ||||||
| } | 	if err != nil { | ||||||
| 
 | 		return err | ||||||
| func (m *GuestbookModel) SetCommentingEnabled(guestbookId int64, enabled bool) error { | 	} | ||||||
| 	return nil | 	rows, err := result.RowsAffected() | ||||||
| } | 	if err != nil { | ||||||
| 
 | 		return err | ||||||
| func (m *GuestbookModel) SetReenableCommentingDate(guestbookId int64, reenableTime time.Time) error { | 	} | ||||||
| 	return nil | 	if rows != 1 { | ||||||
| } | 		return ErrInvalidSettingValue | ||||||
| 
 | 	} | ||||||
| func (m *GuestbookModel) SetVisible(guestbookId int64, visible bool) error { |  | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| @ -119,7 +185,3 @@ func (m *GuestbookModel) AddFilteredWord(guestbookId int64, word string) error { | |||||||
| func (m *GuestbookModel) RemoveFilteredWord(guestbookId int64, word string) error { | func (m *GuestbookModel) RemoveFilteredWord(guestbookId int64, word string) error { | ||||||
| 	return nil | 	return nil | ||||||
| } | } | ||||||
| 
 |  | ||||||
| func (m *GuestbookModel) SetRemoteHostAccess(guestbookId int64, allowed bool) error { |  | ||||||
| 	return nil |  | ||||||
| } |  | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user