function generateMessage($user, $context) { $settings = plugin_movieviewer_get_global_settings(); $offer_maker = new MovieViewerDealPackOfferMaker($settings->payment, $user); if (!$offer_maker->canOffer()) { return ''; } $offer = $offer_maker->getOffer(); $req_params = "&deal_pack_id={$offer->getPackId()}"; $start_uri_bank = plugin_movieviewer_get_script_uri() . "?{$context['start_page_bank']}&purchase_method=bank{$req_params}"; $start_uri_credit = plugin_movieviewer_get_script_uri() . "?{$context['start_page_credit']}&purchase_method=credit{$req_params}"; $hsc = "plugin_movieviewer_hsc"; $bank_names_with_notes = nl2br($offer->getPaymentGuide()->bank_transfer->bank_names_with_notes); $price_with_notes = plugin_movieviewer_render_dealpack_offer_price($offer); if ($settings->payment->isCreditEnabled()) { $acceptable_brands = ""; foreach ($offer->getPaymentGuide()->credit_card->acceptable_brands as $brand) { $file_name = "logo_" . strtolower($brand) . ".gif"; $acceptable_brand = <<<TEXT <img src="img/{$file_name}" ALT="{$brand}"> TEXT; $acceptable_brands .= $acceptable_brand; } $money_transfer_info = <<<TEXT <tr><th rowspan=2>振込先</th><th width=45%>利用可能な銀行</th><th width=45%>利用可能なクレジットカード</th></tr> <tr> <td>{$bank_names_with_notes}</td> <td style='vertical-align:top;'>{$acceptable_brands}</td> </tr> TEXT; } else { $money_transfer_info = <<<TEXT <tr><th>振込先</th><td colspan=2>{$bank_names_with_notes}</td></tr> TEXT; } $bank_transfer_info = <<<TEXT <p> <table class="movieviewer-payment-guide"> <tr><th>項目</th><td colspan=2>{$hsc($offer->describePack())}</td></tr> <tr><th>金額</th><td colspan=2>{$price_with_notes}</td></tr> {$money_transfer_info} <tr><th>振込期限</th><td colspan=2>{$hsc($offer->getPaymentGuide()->deadline->format("Y年m月d日"))}まで</td></tr> </table> </p> TEXT; $buttons_payment = <<<TEXT <a href="{$start_uri_bank}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>銀行振り込みで申し込み</a> TEXT; if ($settings->payment->isCreditEnabled()) { $buttons_payment .= <<<TEXT <a href="{$start_uri_credit}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>クレジットカードで申し込み</a> TEXT; } if ($offer->canDiscount()) { $discount_period = $offer->getDiscountPeriod(); if ($offer->isFirstPurchase()) { $discount_message = "新規特別割引は{$hsc($discount_period->date_end->format('m月d日'))}までになります。この機会にぜひお申し込みください。"; } else { $discount_message = "お得な継続割引は{$hsc($discount_period->date_end->format('m月d日'))}までになります。この機会にぜひ継続ください。"; } $offer_message = <<<TEXT <p> <h3 id='content_1_1'>{$hsc($offer->describePack())}の受講申し込みができるようになりました。<a class='anchor' id='p77e7264' name='p77e7264'></a></h3> </p> {$bank_transfer_info} <p> {$discount_message} </p> <p> {$buttons_payment} </p> TEXT; } else { $offer_message = <<<TEXT <p> <h3 id='content_1_1'>{$hsc($offer->describePack())}の受講申し込みができます。<a class='anchor' id='p77e7264' name='p77e7264'></a></h3> </p> {$bank_transfer_info} <p> {$buttons_payment} </p> TEXT; } $content = <<<TEXT <div class="movieviewer-notice movieviewer-notice-purchase-offer"> {$offer_message} </div> TEXT; return $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); }
function testGetOffersShouldReturnNextCourseOfferWhenFirstPackEndedBothRoutes() { $date_freeze = new DateTime("2015-10-15 00:00:00+09:00"); timecop_freeze($date_freeze->getTimestamp()); $user = new MovieViewerUser(); $user->id = "*****@*****.**"; $user->selected_routes = array(new MovieViewerCourseRoute(array("K1Kiso", "OABunka")), new MovieViewerCourseRoute(array("K2Kiso"))); $settings = plugin_movieviewer_get_global_settings(); $maker = new MovieViewerDealPackOfferMaker($settings->payment, $user); $offers = $maker->getOffers(); $this->assertCount(1, $offers); $this->assertEquals("OABunka-1", $offers[0]->getPackId()); }