ここの情報は古いです。ご理解頂いた上でお取り扱いください。

source: OpenPNE/branches/stable-2.8.x/webapp/lib/mail/sns.php @ 5247

Last change on this file since 5247 was 5247, checked in by ebihara, 12 years ago

#1563:mail_snsのコンストラクタではメールアドレスに二重引用符がある場合を考慮しないようにした

File size: 10.3 KB
Line 
1<?php
2/**
3 * @copyright 2005-2007 OpenPNE Project
4 * @license   http://www.php.net/license/3_01.txt PHP License 3.01
5 */
6
7class mail_sns
8{
9    var $decoder;
10    var $from;
11    var $to;
12
13    var $c_member_id;
14
15    function mail_sns(&$decoder)
16    {
17        $this->decoder =& $decoder;
18        $this->from = $decoder->get_from();
19        $this->to = $decoder->get_to();
20
21        $this->c_member_id = do_common_c_member_id4ktai_address($this->from);
22
23        // メンバーIDが見つからない場合は、ローカルパートに二重引用符を付加してリトライ
24        if (!$this->c_member_id) {
25            list($local, $domain) = explode('@', $this->from, 2);
26            $this->c_member_id = do_common_c_member_id4ktai_address('"' . $local . '"' . '@' . $domain);
27        }
28    }
29
30    function main()
31    {
32        $matches = array();
33        list($from_user, $from_host) = explode('@', $this->from, 2);
34        list($to_user, $to_host) = explode('@', $this->to, 2);
35
36        // from_host が携帯ドメイン以外はエラー
37        if (!is_ktai_mail_address($this->from)) {
38            m_debug_log('mail_sns::main() from wrong host');
39            return false;
40        }
41
42        if (MAIL_ADDRESS_PREFIX) {
43            if (strpos($to_user, MAIL_ADDRESS_PREFIX) === 0) {
44                $to_user = substr($to_user, strlen(MAIL_ADDRESS_PREFIX));
45            }
46        }
47
48        if (!$this->c_member_id) {
49            // 送信者がSNSメンバーでない場合
50
51            if (!IS_CLOSED_SNS) {
52                // get 新規登録
53                if ($to_user == 'get') {
54                    // アフィリエイトIDが付いている場合
55                    $body = $this->decoder->get_text_body();
56
57                    m_debug_log('mail_sns::regist_get()', PEAR_LOG_INFO);
58                    return $this->regist_get($body);
59                }
60            }
61
62            m_debug_log('mail_sns::main() action not found');
63            return false;
64        }
65
66        //---
67
68        // ログインアドレス通知
69        if ($to_user == 'get') {
70            m_debug_log('mail_sns::login_get()', PEAR_LOG_INFO);
71            return $this->login_get();
72        }
73
74        //---
75
76        // コミュニティ掲示板投稿
77        elseif (
78            preg_match('/^t(\d+)$/', $to_user, $matches) ||
79            preg_match('/^t(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
80        ) {
81
82            // トピックIDのチェック
83            if (!$c_commu_topic_id = $matches[1]) {
84                return false;
85            }
86
87            if (MAIL_ADDRESS_HASHED) {
88                if (empty($matches[2])) return false;
89
90                // メンバーハッシュのチェック
91                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
92                    return false;
93                }
94            }
95
96            m_debug_log('mail_sns::add_commu_topic_comment()', PEAR_LOG_INFO);
97            return $this->add_commu_topic_comment($c_commu_topic_id);
98        }
99
100        //---
101
102        // 日記投稿
103        elseif (
104            $to_user == 'blog' ||
105            preg_match('/^b(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
106        ) {
107
108            if (MAIL_ADDRESS_HASHED) {
109                if (empty($matches[1]) || empty($matches[2])) return false;
110
111                // メンバーIDのチェック
112                if ($matches[1] != $this->c_member_id) {
113                    return false;
114                }
115                // メンバーハッシュのチェック
116                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
117                    return false;
118                }
119            }
120
121            m_debug_log('mail_sns::add_diary()', PEAR_LOG_INFO);
122            return $this->add_diary();
123        }
124
125        //---
126
127        //プロフィール画像変更
128        elseif (
129            preg_match('/^p(\d+)$/', $to_user, $matches) ||
130            preg_match('/^p(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
131        ) {
132
133            // メンバーIDのチェック
134            if ($matches[1] != $this->c_member_id) {
135                return false;
136            }
137
138            if (MAIL_ADDRESS_HASHED) {
139                if (empty($matches[2])) return false;
140
141                // メンバーハッシュのチェック
142                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
143                    return false;
144                }
145            }
146
147            m_debug_log('mail_sns::add_member_image()', PEAR_LOG_INFO);
148            return $this->add_member_image();
149        }
150
151        m_debug_log('mail_sns::main() action not found(member)');
152        return false;
153    }
154
155    /**
156     * 新規登録のURL取得
157     */
158    function regist_get($aff_id)
159    {
160        // 招待者は c_member_id = 1 (固定)
161        $c_member_id_invite = 1;
162
163        // _pre に追加
164        $session = create_hash();
165        mail_insert_c_member_ktai_pre($session, $this->from, $c_member_id_invite);
166
167        do_common_send_mail_regist_get($session, $this->from, $aff_id);
168        return true;
169    }
170
171    /**
172     * ログインページのURL取得
173     */
174    function login_get()
175    {
176        do_mail_sns_login_get_mail_send($this->c_member_id, $this->from);
177        return true;
178    }
179
180    /**
181     * コミュニティ掲示板投稿
182     */
183    function add_commu_topic_comment($c_commu_topic_id)
184    {
185        if (!$topic = mail_c_commu_topic4c_commu_topic_id($c_commu_topic_id)) {
186            return false;
187        }
188
189        $c_commu_id = $topic['c_commu_id'];
190        if (!_db_is_c_commu_member($c_commu_id, $this->c_member_id)) {
191            $this->error_mail('コミュニティに参加していないため投稿できませんでした');
192            m_debug_log('mail_sns::add_commu_topic_comment() not a member');
193            return false;
194        }
195
196        $body = $this->decoder->get_text_body();
197        if ($body === '') {
198            $this->error_mail('本文が空のため投稿できませんでした');
199            m_debug_log('mail_sns::add_commu_topic_comment() body is empty');
200            return false;
201        }
202
203        // 書き込みをDBに追加
204        $ins_id = db_commu_insert_c_commu_topic_comment($c_commu_id, $topic['c_commu_topic_id'], $this->c_member_id, $body);
205
206        // 画像保存
207        $images = $this->decoder->get_images();
208        $image_num = 1;
209        foreach ($images as $image) {
210            $image_ext = $image['ext'];
211            $image_data = $image['data'];
212            $filename = 'tc_' . $ins_id . '_' . $image_num . '_' . time() . '.' . $image_ext;
213
214            db_image_insert_c_image($filename, $image_data);
215            mail_update_c_commu_topic_comment_image($ins_id, $filename, $image_num);
216            $image_num++;
217            if ($image_num > 3) {
218                break;
219            }
220        }
221
222        //お知らせメール送信(携帯へ)
223        send_bbs_info_mail($ins_id, $this->c_member_id);
224        //お知らせメール送信(PCへ)
225        send_bbs_info_mail_pc($ins_id, $this->c_member_id);
226
227        if (OPENPNE_USE_POINT_RANK) {
228            //トピック・イベントにコメントした人にポイント付与
229            $point = db_action_get_point4c_action_id(11);
230            db_point_add_point($this->c_member_id, $point);
231        }
232
233        return true;
234    }
235
236    /**
237     * 日記投稿
238     */
239    function add_diary()
240    {
241        $subject = $this->decoder->get_subject();
242        $body    = $this->decoder->get_text_body();
243
244        if ($subject === '') {
245            $subject = '無題';
246        }
247        if ($body === '') {
248            $this->error_mail('本文が空のため投稿できませんでした');
249            m_debug_log('mail_sns::add_diary() body is empty');
250            return false;
251        }
252
253        $c_member = db_common_c_member4c_member_id($this->c_member_id);
254        if (!$ins_id = db_diary_insert_c_diary($this->c_member_id, $subject, $body, $c_member['public_flag_diary'])) {
255            return false;
256        }
257
258        // 画像登録
259        $images = $this->decoder->get_images();
260        $image_num = 1;
261        foreach ($images as $image) {
262            $image_ext = $image['ext'];
263            $image_data = $image['data'];
264            $filename = 'd_' . $ins_id . '_' . $image_num . '_' . time() . '.' . $image_ext;
265
266            db_image_insert_c_image($filename, $image_data);
267            db_diary_update_c_diary_image_filename($ins_id, $filename, $image_num);
268            $image_num++;
269            if ($image_num > 3) {
270                break;
271            }
272        }
273
274        if (OPENPNE_USE_POINT_RANK) {
275            //日記を書いた人にポイント付与
276            $point = db_action_get_point4c_action_id(4);
277            db_point_add_point($this->c_member_id, $point);
278        }
279
280        return true;
281    }
282
283    /**
284     * プロフィール画像変更
285     */
286    function add_member_image()
287    {
288        $c_member = db_common_c_member4c_member_id($this->c_member_id);
289
290        // 登録する画像番号(1-3)を決める
291        $target_number = 0;
292        if ($c_member['image_filename']) {
293            if (!$c_member['image_filename_1']) {
294                $target_number = 1;
295            } elseif (!$c_member['image_filename_2']) {
296                $target_number = 2;
297            } elseif (!$c_member['image_filename_3']) {
298                $target_number = 3;
299            } else {
300                $this->error_mail('プロフィール画像の登録は最大三枚までです。');
301                m_debug_log('mail_sns::add_diary() image is full');
302                return false;
303            }
304        } else {
305            $target_number = 1;
306        }
307
308        // 画像登録
309        if ($images = $this->decoder->get_images()) {
310            $image = $images[0];
311            $image_ext = $image['ext'];
312            $image_data = $image['data'];
313            $filename = 'm_' . $this->c_member_id . '_' . time() . '.' . $image_ext;
314
315            db_image_insert_c_image($filename, $image_data);
316            mail_update_c_member_image($this->c_member_id, $filename, $target_number);
317            return true;
318        } else {
319            m_debug_log('mail_sns::add_member_image() no images');
320            return false;
321        }
322    }
323
324    /**
325     * エラーメールをメール送信者へ返信
326     */
327    function error_mail($body)
328    {
329        $subject = '['.SNS_NAME.']メール投稿エラー';
330        t_send_email($this->from, $subject, $body);
331    }
332}
333
334?>
Note: See TracBrowser for help on using the repository browser.