codes 0ch_ownercmd
@@ -70,23 +70,63 @@ | ||
70 | 70 | # 書き込み直前の処理 |
71 | 71 | if ($type&16) { |
72 | 72 | |
73 | + # 属性情報を読み込む | |
73 | 74 | $Threads->LoadAttr($Sys); |
74 | 75 | |
75 | 76 | # ユーザー識別IDを取得 (表示されるIDとは別) |
76 | 77 | my $clientid = $Sys->Get('KOYUU'); |
77 | 78 | |
79 | + # スレ主かどうか | |
80 | + my $isowner = 0; | |
81 | + | |
78 | 82 | # スレ立て時の処理 |
79 | 83 | if ($Sys->Equal('MODE', 1)) { |
84 | + | |
85 | + $isowner = 1; | |
86 | + | |
87 | + # メール欄を取得 | |
88 | + my $mail = $Form->Get('mail'); | |
89 | + # メール欄からパスワードを取得 | |
90 | + if ($mail =~ s/!owner:([^:]+)://g) { | |
91 | + # メール欄を再設定 | |
92 | + $Form->Set('mail', $mail); | |
93 | + # パスワードを記録 | |
94 | + $Threads->SetAttr($threadid, 'ownerpass', $1); | |
95 | + } | |
96 | + | |
80 | 97 | # スレ主の識別IDを記録 |
81 | 98 | $Threads->SetAttr($threadid, 'owner', $clientid); |
82 | 99 | $Threads->SaveAttr($Sys); |
100 | + | |
101 | + # レス時の処理 | |
102 | + } else { | |
103 | + | |
104 | + # スレ主の識別IDを取得 | |
105 | + my $owner = $Threads->GetAttr($threadid, 'owner'); | |
106 | + # 記録されたパスワードを取得 | |
107 | + my $pass = $Threads->GetAttr($threadid, 'ownerpass'); | |
108 | + # メール欄を取得 | |
109 | + my $mail = $Form->Get('mail'); | |
110 | + | |
111 | + # ユーザーがスレ主と同じ識別IDなら | |
112 | + if ($clientid eq $owner) { | |
113 | + $isowner = 1; | |
114 | + | |
115 | + # そうでなければパスワードによる判定 | |
116 | + } elsif ($mail =~ s/!owner:([^:]+)://g) { | |
117 | + # メール欄を再設定 | |
118 | + $Form->Set('mail', $mail); | |
119 | + # パスワードを照合 | |
120 | + if ($pass ne '' && $pass eq $1) { | |
121 | + $isowner = 1; | |
122 | + } | |
123 | + } | |
83 | 124 | } |
84 | 125 | |
85 | - # スレ主の識別IDを取得 | |
86 | - my $owner = $Threads->GetAttr($threadid, 'owner'); | |
126 | + $this->SetConf('isowner', $isowner); | |
87 | 127 | |
88 | - # ユーザーがスレ主と同じならコマンド処理 | |
89 | - if ($clientid eq $owner) { | |
128 | + # スレ主ならコマンド処理 | |
129 | + if ($isowner) { | |
90 | 130 | |
91 | 131 | # メール欄を取得 |
92 | 132 | my $mail = $Form->Get('mail'); |
@@ -96,21 +136,22 @@ | ||
96 | 136 | # 書き込み直後の処理 |
97 | 137 | } elsif ($type&32) { |
98 | 138 | |
139 | + # スレッド情報を再読み込み | |
99 | 140 | $Threads->Load($Sys); |
100 | - $Threads->LoadAttr($Sys); | |
141 | + #$Threads->LoadAttr($Sys); | |
101 | 142 | |
102 | - # ユーザー識別IDを取得 | |
103 | - my $clientid = $Sys->Get('KOYUU'); | |
143 | + # スレッド情報を変更したかどうか | |
144 | + my $modified = 0; | |
104 | 145 | |
105 | - # スレ主の識別IDを取得 | |
106 | - my $owner = $Threads->GetAttr($threadid, 'owner'); | |
146 | + # スレ主かどうか | |
147 | + my $isowner = $this->GetConf('isowner', $isowner); | |
107 | 148 | |
108 | - # メール欄を取得 | |
109 | - my $mail = $Form->Get('mail'); | |
110 | - | |
111 | - # ユーザーがスレ主と同じならコマンド処理 | |
112 | - if ($clientid eq $owner) { | |
149 | + # スレ主ならコマンド処理 | |
150 | + if ($isowner) { | |
113 | 151 | |
152 | + # メール欄を取得 | |
153 | + my $mail = $Form->Get('mail'); | |
154 | + | |
114 | 155 | # メール欄に「!pool」でdat落ち処理 |
115 | 156 | if ($mail =~ /!pool/ && $this->GetConf('enable_pool')) { |
116 | 157 | #$Threads->Save($Sys); |
@@ -119,6 +160,7 @@ | ||
119 | 160 | $Pools->Add($threadid, $Threads->Get('SUBJECT', $threadid), $Threads->Get('RES', $threadid)); |
120 | 161 | $Pools->Save($Sys); |
121 | 162 | $Threads->Delete($threadid); |
163 | + $modified = 1; | |
122 | 164 | |
123 | 165 | require './module/earendil.pl'; |
124 | 166 | my $path = $Sys->Get('BBSPATH') . '/' . $Sys->Get('BBS'); |
@@ -136,7 +178,12 @@ | ||
136 | 178 | } |
137 | 179 | } |
138 | 180 | |
139 | - $Threads->Save($Sys); | |
181 | + # スレッド情報を再保存 | |
182 | + if ($modified) { | |
183 | + $Threads->Save($Sys); | |
184 | + } else { | |
185 | + $Threads->Close(); | |
186 | + } | |
140 | 187 | |
141 | 188 | } |
142 | 189 |