/** * [アクション] 入金を確定させ、結果画面を生成する * * @return array ページ名, 画面(html) */ function plugin_movieviewer_review_purchase_confirm_payment_action_execute() { $page = plugin_movieviewer_get_current_page(); try { plugin_movieviewer_validate_csrf_token(); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "不正なリクエストです。"); } $ids = filter_input(INPUT_POST, 'purchase_requests', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); foreach ($ids as $req_id) { try { plugin_movieviewer_validate_review_pack_request_id($req_id); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "指定した内容に誤りがあります。"); } } $requests = array(); foreach ($ids as $req_id) { try { $request = plugin_movieviewer_get_review_pack_purchase_request_repository()->findById($req_id); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return plugin_movieviewer_action_error_response($page, "指定した内容に誤りがあります。"); } $requests[] = $request; } if (count($requests) === 0) { return plugin_movieviewer_action_error_response($page, "申し込みが見つかりません。"); } $date_begin = filter_input(INPUT_POST, 'viewing_perod_date_begin', FILTER_DEFAULT); try { plugin_movieviewer_validate_ymd($date_begin); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "指定した内容に誤りがあります。"); } $date_begin = new DateTime($date_begin); $settings = plugin_movieviewer_get_global_settings(); $service = new MovieViewerReviewPackPurchaseConfirmationService($settings); $hsc = "plugin_movieviewer_hsc"; $content_rows = ""; foreach ($requests as $request) { $confirmation = $service->confirm($request, $date_begin); $content_row = <<<TEXT <tr> <td>{$hsc($request->getUser()->lastName)} {$hsc($request->getUser()->firstName)}</td> <td>{$hsc($request->getUser()->id)}</td> <td>{$hsc($request->describePack())}</td> <td>{$hsc($request->getDateRequested()->format("Y/m/d H:m:s"))}</td> <td>{$hsc($confirmation->getViewingPeriod()->date_begin->format("Y/m/d"))}</td> <td>{$hsc($confirmation->getViewingPeriod()->date_end->format("Y/m/d"))}</td> </tr> TEXT; $content_rows .= $content_row; } $content = <<<TEXT <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script> <script src="https://code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script> <link href="https://code.jquery.com/ui/1.12.0/themes/cupertino/jquery-ui.css" rel="stylesheet"> <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <h2>入金確認完了</h2> <p> 以下の申し込みの入金を確定しました。 </p> <p> <table class="table purchase-requests"> <thead> <tr> <th>名前</th> <th>メールアドレス</th> <th>受講対象</th> <th>申込日</th> <th>視聴期限(開始)</th> <th>視聴期限(終了)</th> </tr> </thead> <tbody> {$content_rows} <tbody> </table> </p> TEXT; return array('msg' => $page, 'body' => $content); }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * 申し込みを確定させる * * 引数: string purchase_method 支払い区分(bank, credit) * string deal_pack_id 受講パックID * * 注意: 単独で呼び出さないこと(convertの画面と連携している) * * @return array ページ名、画面(html) */ function plugin_movieviewer_purchase_start_action() { $page = plugin_movieviewer_get_current_page(); $from_external_link = false; $test_var = filter_input(INPUT_POST, "purchase_method"); if (empty($test_var)) { $from_external_link = true; } if ($from_external_link) { $deal_pack_id = filter_input(INPUT_GET, "deal_pack_id"); $purchase_method = filter_input(INPUT_GET, "purchase_method"); } else { $deal_pack_id = filter_input(INPUT_POST, "deal_pack_id"); $purchase_method = filter_input(INPUT_POST, "purchase_method"); } if (!$from_external_link) { try { plugin_movieviewer_validate_csrf_token(); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "不正なリクエストです。"); } } try { $user = plugin_movieviewer_get_current_user(); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return plugin_movieviewer_action_error_response($page, "ログインが必要です。"); } if ($user->mailAddress === null || $user->mailAddress === "") { return plugin_movieviewer_action_error_response($page, "メールアドレスが登録されていません。"); } try { plugin_movieviewer_validate_deal_pack_id($deal_pack_id); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_purchase_method($purchase_method); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "指定した内容に誤りがあります。"); } $settings = plugin_movieviewer_get_global_settings(); $offer_maker = new MovieViewerDealPackOfferMaker($settings->payment, $user); if (!$offer_maker->canOffer()) { return plugin_movieviewer_action_error_response($page, "ご指定のコースはすでに申し込み済み、または、受講できなくなりました。"); } $offer = $offer_maker->getOffer(); if ($offer->getPackId() !== $deal_pack_id) { return plugin_movieviewer_action_error_response($page, "ご指定のコースはすでに申し込み済み、または、受講できなくなりました。"); } $offer->accept(); if ($purchase_method === "bank") { $price_with_notes = plugin_movieviewer_render_dealpack_offer_price($offer, true); $mail_builder = new MovieViewerDealPackBankTransferInformationMailBuilder($settings->mail); $mail = $mail_builder->build($user, $offer->getPackName(), $price_with_notes, $offer->getPaymentGuide()->bank_transfer, $offer->getPaymentGuide()->deadline); $result = $mail->send(); if (!$result) { MovieViewerLogger::getLogger()->addError("案内通知エラー", array("error_statement" => $mail->ErrorInfo)); return plugin_movieviewer_action_error_response($page, "メールの送信に失敗しました。{$settings->contact['name']}に問い合わせしてください。"); } $messages = <<<TEXT ご登録のアドレスに振込先等のご案内をお送りしています。<br> ご確認の上、お振込を期限までに完了してください。<br> 現在の状況をマイページに戻って、ご確認ください。 TEXT; } else { if ($purchase_method === "credit") { $messages = <<<TEXT クレジットカードでの支払いが完了しました。<br> 現在の状況をマイページに戻って、ご確認ください。<br> なおシステムの関係上、入金の確認には、しばらくお時間がかかることがありますので、ご了承ください。 TEXT; } } $hsc = "plugin_movieviewer_hsc"; $back_uri = plugin_movieviewer_get_home_uri(); $content = <<<TEXT <link href="https://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet"> <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <h2>受講申し込み完了</h2> <p> {$messages} </p> <p> <a href="{$back_uri}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>マイページに戻る</a> </p> TEXT; return array("msg" => $page, "body" => $content); }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * 申し込みの確定と通知メール(ユーザ、スタッフ)を送り、結果画面を生成する * * 引数: string request_stash_id 申し込み仮ID * * 注意: 単独で呼び出さないこと(convertの画面と連携している) * * @return array ページ名、画面(html) */ function plugin_movieviewer_review_purchase_start_action() { $from_external_link = false; $test_var = filter_input(INPUT_POST, "request_stash_id"); if (empty($test_var)) { $from_external_link = true; } if ($from_external_link) { $request_stash_id = filter_input(INPUT_GET, "request_stash_id"); } else { $request_stash_id = filter_input(INPUT_POST, "request_stash_id"); } if (!$from_external_link) { try { plugin_movieviewer_validate_csrf_token(); } catch (MovieViewerValidationException $ex) { return plugin_movieviewer_action_error_response($page, "不正なリクエストです。"); } } try { $user = plugin_movieviewer_get_current_user(); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return plugin_movieviewer_action_error_response($page, "ログインが必要です。"); } if ($user->mailAddress === null || $user->mailAddress === "") { return plugin_movieviewer_action_error_response($page, "メールアドレスが登録されていません。"); } $settings = plugin_movieviewer_get_global_settings(); $service = new MovieViewerReviewPackPurchaseRequestService($settings); $request = null; try { $request = $service->doRequest($user, $request_stash_id); } catch (Exception $ex) { return plugin_movieviewer_action_error_response($page, $ex->getMessage()); } if ($request->purchase_method === "bank") { $messages = plugin_movieviewer_review_purchase_start_action_bank($settings, $user, $request); } else { if ($request->purchase_method === "credit") { $messages = plugin_movieviewer_review_purchase_start_action_credit($settings, $user, $request); } } $page = plugin_movieviewer_get_current_page(); $back_uri = plugin_movieviewer_get_home_uri(); $content = <<<TEXT <link href="https://code.jquery.com/ui/1.11.4/themes/redmond/jquery-ui.css" rel="stylesheet"> <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <h2>再視聴申し込み完了</h2> <p> {$messages} </p> <p> <a href="{$back_uri}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>マイページに戻る</a> </p> TEXT; return array("msg" => $page, "body" => $content); }
/** * [アクション] エラー処理(汎用) * * @param string $custom_message 処理に応じたエラーメッセージ * * @return array ページ名, 画面(html) */ function plugin_movieviewer_reset_password_error($custom_message) { $page = plugin_movieviewer_get_current_page(); $message = plugin_movieviewer_reset_password_generate_error_message($page, $custom_message); return array("msg" => $page, "body" => $message); }