Ejemplo n.º 1
0
    /**
     * 新規ユーザー登録フォームの内容を検証
     * @return type
     */
    public function action_newUser()
    {
        //CSRFチェック
        if (!CSRFCheck::chkCSRFToken(__FILE__, __LINE__)) {
            // CSRF 攻撃または CSRF トークンの期限切れ
            return Response::redirect(Uri::base() . DS . '/index/newRegist');
        }
        //新規ユーザー登録フォームのバリデーションを行う
        $val = Validation::forge();
        $val->add_callable('MyValidationRules');
        $val->add_field('username', 'ユーザー名', 'required')->add_rule('max_length', 15)->add_rule('min_length', 4);
        $val->add_field('password', 'パスワード', 'required')->add_rule('max_length', 20)->add_rule('min_length', 4)->add_rule('no_tab_and_newline')->add_rule('valid_string', array('alpha', 'numeric'));
        $val->add_field('email_', 'E-Mail', 'required')->add_rule('max_length', 50)->add_rule('valid_email');
        $out = '';
        $result = false;
        if ($val->run()) {
            //既存ユーザーとの重複チェック
            //同一ユーザー名
            $query = Model_User::query()->where('username', $val->validated('username'));
            $count = $query->count();
            //同一E-mail
            $query2 = Model_User::query()->where('email', $val->validated('email_'));
            $count2 = $query2->count();
            /*			
            			//メール送信済み
            			$query3 = Model_MailUser::query()->where('userName',$val->validated('userName'));
            			$count3 = $query3->count();
            */
            if ($count) {
                $out .= 'そのユーザー名は既に使用されています。<BR>';
            } else {
                if ($count2) {
                    $out .= 'そのメールアドレスは既に使用されています。<BR>';
                } else {
                    $result = true;
                }
            }
        } else {
            //バリデーション異常
            $out = '';
            foreach ($val->error() as $error) {
                $out .= $error . '<br>';
            }
        }
        //バリデーション以上またはユーザー重複
        if ($result == false) {
            Session::set('errorMsg', $out);
            return Response::redirect(Uri::base() . DS . '/index/newRegist');
        }
        //mailuserに新レコードを造る(登録メール送信済み)
        $user = Model_MailUser::forge();
        $user->userName = $val->validated('username');
        $user->email = $val->validated('email_');
        $user->password = $val->validated('password');
        $user->token = $this->random() . $this->random();
        //確認メールを送る
        $mailDat = $this->buildMail($user);
        try {
            $this->sendMail($mailDat);
            $user->save();
        } catch (Exception $ex) {
            return Response::forge("メール送信に失敗しました。");
        }
        $dsc2 = <<<END
<BR>\t\t\t\t
登録したメールアドレス宛てに確認メールを送信しました。<BR>
メールの文中のリンクをクリックすると、登録完了となります。<BR>
<a href = "index">トップページに戻る</a>\t\t\t\t
END;
        return Response::forge($dsc2);
    }
Ejemplo n.º 2
0
Archivo: bbs.php Proyecto: katsuwo/bbs
 /**
  * 投稿実行コントローラ
  * @return
  */
 public function action_post()
 {
     $result = false;
     //掲示板を得る
     $board = Model_Board::find(Input::post('bbsId_'));
     if ($board == null) {
         $log = new Logging();
         $log->writeLog_Warning('Invalid parameters at post(Board is missing) BBSID=' . $bbsId, __FILE__, __LINE__);
         return Response::forge('パラメータ異常');
     }
     //2ch型掲示板の場合は、バリデーションルールを変える
     $val = $this->doValidate($board);
     //コメントの場合、スレッド番号を求める
     if (isset($_POST['commentOf_'])) {
         $threadNum = $_POST['commentOf_'];
     } else {
         $threadNum = 0;
     }
     $out = '';
     //CSRFチェック
     if (!CSRFCheck::chkCSRFToken(__FILE__, __LINE__)) {
         // CSRF 攻撃または CSRF トークンの期限切れ
         $out = 'ページロードから時間が経過している為、投稿失敗しました。<BR>リロードして再投稿して下さい。';
         goto INVALIDPOST;
     }
     //添付ファイルを検証
     // エラーを処理する
     $out = '';
     $aReasult = true;
     try {
         foreach (Upload::get_errors() as $file) {
             if ($file['size'] != 0) {
                 foreach ($file['errors'] as $error) {
                     $out .= $error['message'] . '<br>';
                 }
                 $aReasult = false;
             }
         }
     } catch (Exception $ex) {
         $aReasult = false;
     }
     if ($val->run()) {
         $bbsId = $val->validated('bbsId_');
         $article = Model_Article::forge();
         $article->bbsId = $bbsId;
         $article->authorName = $val->validated('authorName');
         $article->authorAge = $val->validated('authorAge');
         $article->authorPrefecture = $val->validated('authorPrefecture');
         $article->authorIsMale = $val->validated('authorIsMale');
         $article->authorProfile = $val->validated('authorProfile');
         $article->authorEmail = $val->validated('authorEmail');
         $article->commentOf = $threadNum;
         $article->title = $val->validated('title');
         $article->body = $val->validated('body');
         $article->password = $val->validated('password');
         $article->numberOfLike = 0;
         $article->numberOfView = 0;
         $article->authorAgent = $_SERVER['HTTP_USER_AGENT'];
         $article->authorIP = Input::ip();
         $article->reserve1 = -1;
         $article->isDeleted = 0;
         if ($board->allowXvideos == true) {
             $article->xvideosURL = $val->validated('xvideosURL');
         }
         $article->save();
         //新規投稿ではUpdate_atが付かないため、一度修正して再度保存
         $article->reserve1 = 0;
         $article->save();
         if ($aReasult == true) {
             if (Upload::is_valid()) {
                 $image = Image::forge();
                 $files = Upload::get_Files();
                 $tmpDir = DOCROOT . 'assets/img/tmp';
                 foreach ($files as $file) {
                     $fileName = $file['file'];
                     $img_file = file_get_contents($fileName);
                     if ($img_file) {
                         //一時ファイルを拡張子付きにリネーム
                         $fileWithExt = $fileName . '.' . $file['extension'];
                         rename($fileName, $fileWithExt);
                         //PC用としても大きすぎる場合はリサイズ
                         $imgInfo = getimagesize($fileWithExt);
                         if ($imgInfo[0] > FULL_SIZE_X) {
                             $image->load($fileWithExt);
                             $image->config('bgcolor', '#FFF')->resize(FULL_SIZE_X, FULL_SIZE_X, true, false);
                             $image->save($fileWithExt);
                             $img_file = file_get_contents($fileWithExt);
                         }
                         //サムネイル作成
                         $thumbName = $tmpDir . DS . date('_ymdhis') . $this->random() . $file['name'];
                         $image->load($fileWithExt);
                         $image->config('bgcolor', '#FFF')->resize(THUMBNAIL_SIZE_X, THUMBNAIL_SIZE_Y, true, false);
                         $image->save($thumbName);
                         $attach = Model_Attach::forge();
                         $attach->bbsId = $bbsId;
                         $attach->mime = $file['mimetype'];
                         $attach->attachOf = $article->id;
                         $attach->rawData = $img_file;
                         if ($threadNum != 0) {
                             $attach->threadId = $threadNum;
                         } else {
                             $attach->threadId = $article->id;
                         }
                         $thumb_file = file_get_contents($thumbName);
                         if ($thumb_file) {
                             $attach->thumbData = $thumb_file;
                             $attach->save();
                             unlink($thumbName);
                             unlink($fileWithExt);
                         } else {
                             $attach->save();
                             unlink($fileWithExt);
                         }
                     }
                 }
             }
         }
         //掲示板のupdate_at更新
         $bd = Model_Board::find($bbsId);
         $bd->postCount = $bd->postCount + 1;
         $bd->save();
         //スレッド元のupdated_at更新
         $query = Model_Article::query();
         $query->where('id', '=', $threadNum);
         $query->and_where_open();
         $query->where('bbsId', $bbsId);
         $query->and_where_close();
         $th = $query->get_one();
         if ($th != null) {
             $th->commentCount = $th->commentCount + 1;
             $th->save();
         }
         //新しいスレッドをTweet
         if ($bd->type != 3 && $bd->twitter) {
             $tw = new Twitter();
             $tw->tweet_newArticleBuild($board, $article);
         }
         $out = '投稿完了しました。';
         $result = true;
     } else {
         foreach ($val->error() as $error) {
             $out .= $error . '<br>';
         }
         $result = false;
     }
     //正常系
     if ($result == true) {
         $this->showPostSucessPage($bbsId, $threadNum);
         return;
     }
     //異常系
     INVALIDPOST:
     //Boardを取得
     $board = Model_Board::find($_POST['bbsId_']);
     if ($threadNum == 0) {
         //新規スレッド投稿
         $redirectURL = 'bbs/index/' . $board->shortName;
     } else {
         //コメント投稿
         $redirectURL = 'bbs/thread/' . $board->shortName . DS . $threadNum;
     }
     //エラーメッセージと、POSTをsessionで渡す
     Session::set('errorMsg', $out);
     Session::set('oldPost', $_POST);
     Response::redirect($redirectURL);
 }