Skip to content

Commit

Permalink
Added editing and deleting facilities for members. Also added TODO an…
Browse files Browse the repository at this point in the history
…d AUTHORS file and fixed some bugs.
  • Loading branch information
canol committed Dec 11, 2010
1 parent a9089d3 commit e8b8228
Show file tree
Hide file tree
Showing 15 changed files with 434 additions and 36 deletions.
1 change: 1 addition & 0 deletions AUTHORS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Canol Gökel <[email protected]>
246 changes: 246 additions & 0 deletions Buildables/EditMemberDetailsWidget.st
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
Iliad.ILWidget subclass: EditMemberDetailsWidget [
| member memberName password1 password2 emailAddress hideEmail |

<category: 'IyziForum-Buildables'>
<comment: nil>

initialize [
<category: 'initialization'>

super initialize.

self memberName: ''.
self password1: ''.
self password2: ''.
self emailAddress: ''.
self hideEmail: false.
]

member [
<category: 'accessing'>

^member
]

member: aMember [
<category: 'accessing'>

member := aMember
]

emailAddress [
<category: 'accessing'>

^emailAddress
]

emailAddress: aString [
<category: 'accessing'>

emailAddress := aString.
]

hideEmail [
<category: 'accessing'>

^hideEmail
]

hideEmail: aBoolean [
<category: 'accessing'>

hideEmail := aBoolean.
]

memberName [
<category: 'accessing'>

^memberName
]

memberName: aString [
<category: 'accessing'>

memberName := aString.
]

password1 [
<category: 'accessing'>

^password1
]

password1: aString [
<category: 'accessing'>

password1 := aString.
]

password2 [
<category: 'accessing'>

^password2
]

password2: aString [
<category: 'accessing'>

password2 := aString.
]

contents [
^[:e |
e form
build: [:form |
form table
class: 'EditMemberDetails';
cellspacing: self application settingList tableCellSpacings;
build: [:table |
| index |

table tr build: [:tr |
tr th
text: (self application translate: 'Edit Member Details');
colspan: 2.

(self application user loggedIn)
ifFalse: [
table tr td
class: 'Dark1';
style: 'height: 150px; text-align: center';
colspan: 2;
text: (self application translate: 'You should first login to edit member details.')]
ifTrue: [
(self member isNil)
ifTrue: [
table tr td
class: 'Dark1';
style: 'height: 150px; text-align: center';
colspan: 2;
text: (self application translate: 'No member specified.')]
ifFalse: [
(self member ~= self application user and: [(self application isBoardMember: self application user) not])
ifTrue: [
table tr td
class: 'Dark1';
style: 'height: 150px; text-align: center';
colspan: 2;
text: (self application translate: 'You don''t have permission to edit these details.')]
ifFalse: [
table tr build: [:tr |
tr td
text: (self application translate: 'Member Name:');
class: 'Dark1';
style: 'width: 30%'.

tr td
text: self member memberName;
class: 'Dark2'].

table tr build: [:tr |
tr td
text: (self application translate: 'Email Address:');
class: 'Light1'.

tr td
class: 'Light2';
build: [:td |
td input
maxlength: '255';
value: self member emailAddress;
action: [:emailAddress | self emailAddress: emailAddress].

(self application settingList shouldMembersEnterEmail)
ifTrue: [
td text: '*']]].

table tr build: [:tr |
tr td
text: (self application translate: 'New Password:');
class: 'Dark1'.

tr td
class: 'Dark2';
build: [:td |
td input
type: 'password';
maxlength: '255';
action: [:password1 | self password1: password1]]].

table tr build: [:tr |
tr td
text: (self application translate: 'New Password Again:');
class: 'Light1'.

tr td
class: 'Light2';
build: [:td |
td input
type: 'password';
maxlength: '255';
action: [:password2 | self password2: password2]]].

table tr build: [:tr |
tr td
colspan: 2;
class: 'Buttons';
build: [:td |
td button
text: (self application translate: 'Save');
action: [self save]]]]]]]]]]
]

save [
| errorDialogWidget |

errorDialogWidget := DialogWidget new.
errorDialogWidget addButton: DialogAnswerTypes okay.

(self password1 ~= '')
ifTrue: [
(self application settingList minPasswordCharacterCount ~= -1)
ifTrue: [
(self password1 size < self application settingList minPasswordCharacterCount)
ifTrue: [
| errorMessage |

errorMessage := (self application translate: 'The password cannot be shorter than {MinPasswordCharacterCount} characters.') copyReplaceAll: '{MinPasswordCharacterCount}' with: self application settingList minPasswordCharacterCount printString.

errorDialogWidget addMessage: errorMessage]]].

(self password1 ~= '' and: [self password2 = ''])
ifTrue: [
errorDialogWidget addMessage: (self application translate: 'Please don''t forget to fill in the password twice.')].

(self password1 = self password2)
ifFalse: [
errorDialogWidget addMessage: (self application translate: 'The passwords you entered do not match.')].

(self application settingList shouldMembersEnterEmail)
ifTrue: [
(self emailAddress = '')
ifTrue: [
errorDialogWidget addMessage: (self application translate: 'You cannot leave the email address empty.')].

((self application memberRepository members select: [:each | each emailAddress = self emailAddress]) size > 0)
ifTrue: [
| errorMessage |

errorMessage := (self application translate: 'The email address you entered has already been registered. Please enter another email address or contact the forum admin via {EmailAddress} email address.') copyReplaceAll: '{EmailAddress}' with: self application settingList emailAddress.

errorDialogWidget addMessage: errorMessage]].

(errorDialogWidget messages size > 0)
ifTrue: [
self lightbox: errorDialogWidget]
ifFalse: [
(self password1 ~= '')
ifTrue: [
self member password: (MD5 hexDigestOf: self password1)].
self member emailAddress: self emailAddress.
self member hideEmail: self hideEmail.

errorDialogWidget addMessage: (self application translate: 'Succesfully saved the member details.').
self lightbox: errorDialogWidget].
]
]
76 changes: 63 additions & 13 deletions Buildables/IyziForum.st
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
Iliad.ILApplication subclass: IyziForum [
| user title languageRepository memberRepository postRepository settingList
menuWidget navigationWidget topicListWidget postListWidget memberListWidget memberDetailsWidget |
menuWidget navigationWidget topicListWidget postListWidget memberListWidget memberDetailsWidget editMemberDetailsWidget |

<category: 'IyziForum-Buildables'>
<comment: nil>
Expand Down Expand Up @@ -162,17 +162,31 @@ Iliad.ILApplication subclass: IyziForum [
memberId := self router route next.
member := self memberRepository members at: memberId asInteger.

self navigationWidget
clear;
addUrl: 'members' text: (self translate: 'Members');
addText: member memberName.

self title: self settingList forumTitle, ' - ', (self translate: 'Member Details').

self menuWidget beNeutralMode.
self memberDetailsWidget member: member.

^self memberPageContents]
(self router route atEnd)
ifTrue: [
self navigationWidget
clear;
addUrl: 'members' text: (self translate: 'Members');
addText: member memberName.

self title: self settingList forumTitle, ' - ', (self translate: 'Member Details').

self memberDetailsWidget member: member.

^self memberDetailsPageContents]
ifFalse: [
self navigationWidget
clear;
addUrl: 'members' text: (self translate: 'Members');
addUrl: ('member/', (self application memberRepository members indexOf: member) printString) text: member memberName;
addText: (self translate: 'Edit Member Details').

self title: self settingList forumTitle, ' - ', (self translate: 'Edit Member Details').

self editMemberDetailsWidget member: member.

^self editMemberDetailsPageContents]]
]

footerContents [
Expand Down Expand Up @@ -265,7 +279,7 @@ Iliad.ILApplication subclass: IyziForum [
build: self footerContents]
]

memberPageContents [
memberDetailsPageContents [
<category: 'building'>

^[:e |
Expand All @@ -279,6 +293,20 @@ Iliad.ILApplication subclass: IyziForum [
build: self footerContents]
]

editMemberDetailsPageContents [
<category: 'building'>

^[:e |
e div
class: 'MainWrapper';
build: self headerContents;
build: self menuWidget;
build: self application navigationWidget;
build: self editMemberDetailsWidget;
build: self application navigationWidget;
build: self footerContents]
]

menuWidget [
<category: 'accessing'>

Expand Down Expand Up @@ -351,6 +379,18 @@ Iliad.ILApplication subclass: IyziForum [
memberDetailsWidget := aMemberDetailsWidget.
]

editMemberDetailsWidget [
<category: 'accessing'>

^editMemberDetailsWidget ifNil: [editMemberDetailsWidget := EditMemberDetailsWidget new]
]

editMemberDetailsWidget: anEditMemberDetailsWidget [
<category: 'accessing'>

editMemberDetailsWidget := anEditMemberDetailsWidget.
]

memberRepository [
<category: 'accessing'>

Expand Down Expand Up @@ -446,7 +486,10 @@ Iliad.ILApplication subclass: IyziForum [

cookie := Iliad.ILCookie key: 'Password' value: self user password.
cookie expireIn: (Duration days: 365).
aResponse addCookie: cookie]].
aResponse addCookie: cookie].

(self user status = MemberStatuses deleted)
ifTrue: [self logout]].

super respondOn: aResponse.
]
Expand All @@ -463,9 +506,16 @@ Iliad.ILApplication subclass: IyziForum [
self user: Guest new.
self menuWidget markDirty.
self memberDetailsWidget markDirty.
self editMemberDetailsWidget markDirty.
self application postListWidget markDirty.
]

deleteMember: aMember [
<category: 'actions'>

aMember status: MemberStatuses deleted.
]

isAdmin: aMember [
<category: 'testing'>

Expand Down
3 changes: 2 additions & 1 deletion Buildables/LoginWidget.st
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ FormOnMenuWidget subclass: LoginWidget [

members := self application memberRepository members select: [:each | each memberName = self memberName].

((self application memberRepository members select: [:each | each memberName = self memberName]) isEmpty)
((self application memberRepository members select: [:each | (each memberName = self memberName) and: [each status ~= MemberStatuses deleted]]) isEmpty)
ifTrue: [
errorDialogWidget addMessage: (self application translate: 'You entered a wrong member name or a member with this member name is not registered.')]
ifFalse: [
Expand All @@ -127,6 +127,7 @@ FormOnMenuWidget subclass: LoginWidget [
self application user: member.
self application menuWidget markDirty.
self application memberDetailsWidget markDirty.
self application editMemberDetailsWidget markDirty.
self application postListWidget markDirty]
ifFalse: [
self lightbox: errorDialogWidget].
Expand Down
Loading

0 comments on commit e8b8228

Please sign in to comment.