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

source: OpenPNE/trunk/webapp/lib/mail/sns.php @ 4279

Last change on this file since 4279 was 4279, checked in by ebihara, 13 years ago

#1216:$target_numberの決定をadd_member_image()にあわせた

File size: 17.0 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
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                    // アフィリエイトIDが付いている場合
49                    $body = $this->decoder->get_text_body();
50
51                    m_debug_log('mail_sns::regist_get()', PEAR_LOG_INFO);
52                    return $this->regist_get($body);
53                }
54            }
55
56            m_debug_log('mail_sns::main() action not found');
57            return false;
58        }
59
60        //---
61
62        // ログインアドレス通知
63        if ($to_user == 'get') {
64            m_debug_log('mail_sns::login_get()', PEAR_LOG_INFO);
65            return $this->login_get();
66        }
67
68        //---
69
70        // コミュニティ掲示板投稿
71        elseif (
72            preg_match('/^t(\d+)$/', $to_user, $matches) ||
73            preg_match('/^t(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
74        ) {
75
76            // トピックIDのチェック
77            if (!$c_commu_topic_id = $matches[1]) {
78                return false;
79            }
80
81            if (MAIL_ADDRESS_HASHED) {
82                if (empty($matches[2])) return false;
83
84                // メンバーハッシュのチェック
85                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
86                    return false;
87                }
88            }
89
90            m_debug_log('mail_sns::add_commu_topic_comment()', PEAR_LOG_INFO);
91            return $this->add_commu_topic_comment($c_commu_topic_id);
92        }
93
94        //---
95
96        // 日記投稿
97        elseif (
98            $to_user == 'blog' ||
99            preg_match('/^b(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
100        ) {
101
102            if (MAIL_ADDRESS_HASHED) {
103                if (empty($matches[1]) || empty($matches[2])) return false;
104
105                // メンバーIDのチェック
106                if ($matches[1] != $this->c_member_id) {
107                    return false;
108                }
109                // メンバーハッシュのチェック
110                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
111                    return false;
112                }
113            }
114
115            m_debug_log('mail_sns::add_diary()', PEAR_LOG_INFO);
116            return $this->add_diary();
117        }
118
119        //---
120
121        //プロフィール画像変更
122        elseif (
123            preg_match('/^p(\d+)$/', $to_user, $matches) ||
124            preg_match('/^p(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
125        ) {
126
127            // メンバーIDのチェック
128            if ($matches[1] != $this->c_member_id) {
129                return false;
130            }
131
132            if (MAIL_ADDRESS_HASHED) {
133                if (empty($matches[2])) return false;
134
135                // メンバーハッシュのチェック
136                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
137                    return false;
138                }
139            }
140
141            m_debug_log('mail_sns::add_member_image()', PEAR_LOG_INFO);
142            return $this->add_member_image();
143        }
144
145        //---
146
147        // 日記画像変更
148        elseif (
149            preg_match('/^bi(\d+)$/', $to_user, $matches) ||
150            preg_match('/^bi(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
151        ) {
152            // 日記IDのチェック
153            if (!$c_diary_id = $matches[1]) {
154                return false;
155            }
156
157            if (MAIL_ADDRESS_HASHED) {
158                if (empty($matches[2])) return false;
159
160                // メンバーハッシュのチェック
161                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
162                    return false;
163                }
164            }
165
166            m_debug_log('mail_sns::add_diary_image()', PEAR_LOG_INFO);
167            return $this->add_diary_image($c_diary_id);
168        }
169
170        //---
171
172        // コミュニティ画像変更
173        elseif (
174            preg_match('/^ci(\d+)$/', $to_user, $matches) ||
175            preg_match('/^ci(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
176        ) {
177            // コミュニティIDのチェック
178            if (!$c_commu_id = $matches[1]) {
179                return false;
180            }
181
182            if (MAIL_ADDRESS_HASHED) {
183                if (empty($matches[2])) return false;
184
185                // メンバーハッシュのチェック
186                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
187                    return false;
188                }
189            }
190
191            m_debug_log('mail_sns::add_commu_image()', PEAR_LOG_INFO);
192            return $this->add_commu_image($c_commu_id);
193        }
194
195        //---
196
197        // トピック・イベント画像画像変更
198        elseif (
199            preg_match('/^ti(\d+)$/', $to_user, $matches) ||
200            preg_match('/^ti(\d+)-([0-9a-f]{12})$/', $to_user, $matches)
201        ) {
202            // トピックIDのチェック
203            if (!$c_commu_topic_id = $matches[1]) {
204                return false;
205            }
206
207            if (MAIL_ADDRESS_HASHED) {
208                if (empty($matches[2])) return false;
209
210                // メンバーハッシュのチェック
211                if ($matches[2] != t_get_user_hash($this->c_member_id)) {
212                    return false;
213                }
214            }
215
216            m_debug_log('mail_sns::add_topic_image()', PEAR_LOG_INFO);
217            return $this->add_topic_image($c_commu_topic_id);
218        }
219
220        m_debug_log('mail_sns::main() action not found(member)');
221        return false;
222    }
223
224    /**
225     * 新規登録のURL取得
226     */
227    function regist_get($aff_id)
228    {
229        // 招待者は c_member_id = 1 (固定)
230        $c_member_id_invite = 1;
231
232        // _pre に追加
233        $session = create_hash();
234        mail_insert_c_member_ktai_pre($session, $this->from, $c_member_id_invite);
235
236        do_common_send_mail_regist_get($session, $this->from, $aff_id);
237        return true;
238    }
239
240    /**
241     * ログインページのURL取得
242     */
243    function login_get()
244    {
245        do_mail_sns_login_get_mail_send($this->c_member_id, $this->from);
246        return true;
247    }
248
249    /**
250     * コミュニティ掲示板投稿
251     */
252    function add_commu_topic_comment($c_commu_topic_id)
253    {
254        if (!$topic = mail_c_commu_topic4c_commu_topic_id($c_commu_topic_id)) {
255            return false;
256        }
257
258        $c_commu_id = $topic['c_commu_id'];
259        if (!_db_is_c_commu_member($c_commu_id, $this->c_member_id)) {
260            $this->error_mail('コミュニティに参加していないため投稿できませんでした');
261            m_debug_log('mail_sns::add_commu_topic_comment() not a member');
262            return false;
263        }
264
265        $body = $this->decoder->get_text_body();
266        if ($body === '') {
267            $this->error_mail('本文が空のため投稿できませんでした');
268            m_debug_log('mail_sns::add_commu_topic_comment() body is empty');
269            return false;
270        }
271
272        // 書き込みをDBに追加
273        $ins_id = db_commu_insert_c_commu_topic_comment($c_commu_id, $topic['c_commu_topic_id'], $this->c_member_id, $body);
274
275        // 画像保存
276        $images = $this->decoder->get_images();
277        $image_num = 1;
278        foreach ($images as $image_data) {
279            $filename = 'tc_' . $ins_id . '_' . $image_num . '_' . time() . '.jpg';
280
281            db_image_insert_c_image($filename, $image_data);
282            mail_update_c_commu_topic_comment_image($ins_id, $filename, $image_num);
283            $image_num++;
284            if ($image_num > 3) {
285                break;
286            }
287        }
288
289        //お知らせメール送信(携帯へ)
290        send_bbs_info_mail($ins_id, $this->c_member_id);
291        //お知らせメール送信(PCへ)
292        send_bbs_info_mail_pc($ins_id, $this->c_member_id);
293
294        if (OPENPNE_USE_POINT_RANK) {
295            //トピック・イベントにコメントした人にポイント付与
296            $point = db_action_get_point4c_action_id(11);
297            db_point_add_point($u, $point);
298        }
299
300        return true;
301    }
302
303    /**
304     * 日記投稿
305     */
306    function add_diary()
307    {
308        $subject = $this->decoder->get_subject();
309        $body    = $this->decoder->get_text_body();
310
311        if ($subject === '') {
312            $subject = '無題';
313        }
314        if ($body === '') {
315            $this->error_mail('本文が空のため投稿できませんでした');
316            m_debug_log('mail_sns::add_diary() body is empty');
317            return false;
318        }
319
320        $c_member = db_common_c_member4c_member_id($this->c_member_id);
321        if (!$ins_id = db_diary_insert_c_diary($this->c_member_id, $subject, $body, $c_member['public_flag_diary'])) {
322            return false;
323        }
324
325        // 画像登録
326        $images = $this->decoder->get_images();
327        $image_num = 1;
328        foreach ($images as $image_data) {
329            $filename = 'd_' . $ins_id . '_' . $image_num . '_' . time() . '.jpg';
330
331            db_image_insert_c_image($filename, $image_data);
332            db_diary_update_c_diary_image_filename($ins_id, $filename, $image_num);
333            $image_num++;
334            if ($image_num > 3) {
335                break;
336            }
337        }
338
339        if (OPENPNE_USE_POINT_RANK) {
340            //日記を書いた人にポイント付与
341            $point = db_action_get_point4c_action_id(4);
342            db_point_add_point($this->c_member_id, $point);
343        }
344
345        return true;
346    }
347
348    /**
349     * プロフィール画像変更
350     */
351    function add_member_image()
352    {
353        $c_member = db_common_c_member4c_member_id($this->c_member_id);
354
355        // 登録する画像番号(1-3)を決める
356        $target_number = 0;
357        if ($c_member['image_filename']) {
358            if (!$c_member['image_filename_1']) {
359                $target_number = 1;
360            } elseif (!$c_member['image_filename_2']) {
361                $target_number = 2;
362            } elseif (!$c_member['image_filename_3']) {
363                $target_number = 3;
364            } else {
365                $this->error_mail('プロフィール画像の登録は最大三枚までです。');
366                m_debug_log('mail_sns::add_diary() image is full');
367                return false;
368            }
369        } else {
370            $target_number = 1;
371        }
372
373        // 画像登録
374        if ($images = $this->decoder->get_images()) {
375            $filename = 'm_' .$this->c_member_id.'_'. time() . '.jpg';
376
377            db_image_insert_c_image($filename, $images[0]);
378            mail_update_c_member_image($this->c_member_id, $filename, $target_number);
379            return true;
380        } else {
381            $this->error_mail('プロフィール画像が添付されていないか、ファイルサイズが大きすぎるため、取得できませんでした。');
382            m_debug_log('mail_sns::add_member_image() no images');
383            return false;
384        }
385    }
386
387    /**
388     * 日記画像変更
389     */
390    function add_diary_image($c_diary_id)
391    {
392        if (!$c_diary = db_diary_get_c_diary4id($c_diary_id)) {
393            return false;
394        }
395
396        if ($c_diary['c_member_id'] != $this->c_member_id) {
397            return false;
398        }
399
400        // 登録する画像番号(1-3)を決める
401        $target_number = 0;
402        if ($c_diary['image_filename_1'] || $c_diary['image_filename_2'] || $c_diary['image_filename_3']) {
403            if (!$c_diary['image_filename_1']) {
404                $target_number = 1;
405            } elseif (!$c_diary['image_filename_2']) {
406                $target_number = 2;
407            } elseif (!$c_diary['image_filename_3']) {
408                $target_number = 3;
409            } else {
410                $this->error_mail('日記画像の登録は最大三枚までです。');
411                m_debug_log('mail_sns::add_diary_image() image is full');
412                return false;
413            }
414        } else {
415            $target_number = 1;
416        }
417
418        // 画像登録
419        $images = $this->decoder->get_images();
420
421        if ($images = $this->decoder->get_images()) {
422            $filename = 'd_' . $c_diary_id . '_' . $target_number . '_' . time() . '.jpg';
423            db_image_insert_c_image($filename, $images[0]);
424            db_diary_update_c_diary_image_filename($c_diary_id, $filename, $target_number);
425            return true;
426        } else {
427            $this->error_mail('日記画像が添付されていないか、ファイルサイズが大きすぎるため、取得できませんでした。');
428            m_debug_log('mail_sns::add_diary_image() no images');
429            return false;
430        }
431    }
432
433    /**
434     * コミュニティ画像変更
435     */
436    function add_commu_image($c_commu_id)
437    {
438        if (!$c_commu = db_commu_c_commu4c_commu_id($c_commu_id)) {
439            return false;
440        }
441
442        if ($c_commu['c_member_id_admin'] != $this->c_member_id) {
443            return false;
444        }
445
446        if ($c_commu['image_filename']) {
447            $this->error_mail('コミュニティ画像の登録は最大一枚までです。');
448            m_debug_log('mail_sns::add_commu_image() image is full');
449            return false;
450        }
451
452        // 画像登録
453        if ($images = $this->decoder->get_images()) {
454            $filename = 'c_' . $c_commu_id . '_' .  time() . '.jpg';
455            db_image_insert_c_image($filename, $images[0]);
456            db_commu_update_c_commu_image_filename($c_commu_id, $filename);
457            return true;
458        } else {
459            $this->error_mail('コミュニティ画像が添付されていないか、ファイルサイズが大きすぎるため、取得できませんでした。');
460            m_debug_log('mail_sns::add_commu_image() no images');
461            return false;
462        }
463    }
464
465    /**
466     * トピック・イベント画像変更
467     */
468    function add_topic_image($c_commu_topic_id)
469    {
470        if (!$c_topic = db_commu_c_topic4c_commu_topic_id($c_commu_topic_id)) {
471            return false;
472        }
473
474        $c_commu_id = $c_topic['c_commu_id'];
475
476        if (!db_commu_is_c_topic_admin($c_commu_topic_id, $this->c_member_id) &&
477            !db_commu_is_c_commu_admin($c_commu_id, $this->c_member_id)) {
478            return false;
479        }
480
481        // 登録する画像番号(1-3)を決める
482        $target_number = 0;
483        if ($c_topic['image_filename1'] || $c_topic['image_filename2'] || $c_topic['image_filename3']) {
484            if (!$c_topic['image_filename1']) {
485                $target_number = 1;
486            } elseif (!$c_topic['image_filename2']) {
487                $target_number = 2;
488            } elseif (!$c_topic['image_filename3']) {
489                $target_number = 3;
490            } else {
491                $this->error_mail('トピック・イベント画像の登録は最大三枚までです。');
492                m_debug_log('mail_sns::add_topic_image() image is full');
493                return false;
494            }
495        } else {
496            $target_number = 1;
497        }
498
499        // 画像登録
500        $images = $this->decoder->get_images();
501
502        if ($images = $this->decoder->get_images()) {
503            $filename = 't_' . $c_commu_topic_id . '_' . $target_number . '_' . time() . '.jpg';
504            $c_topic['image_filename' . $target_number] = $filename;
505            db_image_insert_c_image($filename, $images[0]);
506            db_commu_update_c_commu_topic_comment_images($c_topic['c_commu_topic_comment_id'], $c_topic['image_filename1'], $c_topic['image_filename2'], $c_topic['image_filename3']);
507            return true;
508        } else {
509            $this->error_mail('トピック・イベント画像が添付されていないか、ファイルサイズが大きすぎるため、取得できませんでした。');
510            m_debug_log('mail_sns::add_topic_image() no images');
511            return false;
512        }
513       
514    }
515
516    /**
517     * エラーメールをメール送信者へ返信
518     */
519    function error_mail($body)
520    {
521        $subject = '['.SNS_NAME.']メール投稿エラー';
522        t_send_email($this->from, $subject, $body);
523    }
524}
525
526?>
Note: See TracBrowser for help on using the repository browser.