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

source: OpenPNE/branches/2.6.x/webapp/lib/mail/sns.php @ 2649

Last change on this file since 2649 was 2649, checked in by ogawa, 13 years ago

#616:日記メール投稿時にポイント加算されない(for 2.6.x):r2601

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