/**
 * プラグイン規定関数::ブロック型で呼び出された場合の処理
 * 認証済みの場合: 再視聴対象選択画面を生成する
 * 未認証の場合: エラー画面を生成する
 *
 * 引数: なし
 *
 * @return string 画面(html)
 */
function plugin_movieviewer_review_convert()
{
    try {
        $user = plugin_movieviewer_get_current_user();
    } catch (MovieViewerRepositoryObjectNotFoundException $ex) {
        return plugin_movieviewer_convert_error_response("ログインが必要です。");
    }
    $plugin_args = func_get_args();
    try {
        plugin_movieviewer_review_assert_plugin_arguments($plugin_args);
    } catch (Exception $ex) {
        return plugin_movieviewer_convert_error_response("プラグインの引数が設定されていません。");
    }
    $start_page_bank = $plugin_args[0];
    $start_page_credit = $plugin_args[1];
    $viewing_periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($user->id);
    $requests_not_yet_confirmed = plugin_movieviewer_get_review_pack_purchase_request_repository()->findNotYetConfirmed($user->id);
    $hsc = "plugin_movieviewer_hsc";
    // 期限の切れているものをリストアップ
    $viewing_periods = $viewing_periods->getExpiredPeriods();
    // コースごとに分類
    $viewing_periods_by_course = MovieViewerViewingPeriod::sortByCourse($viewing_periods);
    $courses = plugin_movieviewer_get_courses_repository()->find();
    $content_courses = "";
    foreach ($viewing_periods_by_course as $course_id => $periods) {
        $course = $courses->getCourse($course_id);
        $content_periods = "";
        foreach ($periods as $period) {
            if (MovieViewerReviewPackPurchaseRequest::requestsHasItem($requests_not_yet_confirmed, $course_id, $period->session_id)) {
                continue;
            }
            $session = $course->getSession($period->session_id);
            $field_id = "{$hsc($course->id)}_{$hsc($session->id)}";
            $content_periods .= <<<TEXT
            <label class='movie-session' for="{$field_id}">{$session->describe()}</label>
            <input class='movie-session' type="checkbox" name="sessions" id="{$field_id}" value="{$field_id}">
TEXT;
        }
        if ($content_periods === "") {
            continue;
        }
        $content_course = <<<TEXT
        <div class='movieviewer-course'>
        <h3>{$hsc($course->name)}</h3>
        <fieldset style='border: none;'>
        {$content_periods}
        </fieldset>
        </div>
TEXT;
        $content_courses .= $content_course;
    }
    $uri_start_bank = plugin_movieviewer_get_script_uri() . "?{$start_page_bank}&purchase_method=bank";
    $uri_start_credit = plugin_movieviewer_get_script_uri() . "?{$start_page_credit}&purchase_method=credit";
    $buttons_payment = <<<TEXT
    <a href="{$uri_start_bank}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>銀行振り込みで申し込み</a>
TEXT;
    $settings = plugin_movieviewer_get_global_settings();
    if ($settings->payment->isCreditEnabled()) {
        $buttons_payment .= <<<TEXT
        <a href="{$uri_start_credit}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>クレジットカードで申し込み</a>
TEXT;
    }
    $content = <<<TEXT
    <script src="https://code.jquery.com/jquery-1.11.2.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
    <link href="https://code.jquery.com/ui/1.12.0/themes/cupertino/jquery-ui.css" rel="stylesheet">
    <script src="plugin/movieviewer/assets/js/movieviewer_review.js"></script>
    <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
    <link href="plugin/movieviewer/assets/css/movieviewer_review.css" rel="stylesheet">
    <style>
    </style>

    <h2>再視聴可能な単元</h2>

    <p>
    再視聴したい単元を選択して、申し込みボタンを押してください。
    </p>
    <p>
    <ul style='margin-left:0;'>
        <li>1回にお申込みいただける回数は最大4回分までです。
        <li>ご入金後のキャンセル、変更はできません。
        <li>視聴可能な単元(通常受講分)がある場合、平行してご覧いただけます。
    </ul>
    </p>

    {$content_courses}

    <div style="margin-top:10px;">
    {$buttons_payment}
    <ul style='margin-left:0;margin-top:1.5em;'>
        <li>再視聴が可能な期間は、1ヵ月のみです。ご入金確認後、約1週間後から視聴が 可能になります。<br>確定した期間については、マイページにてご確認ください。ご自身で期間を指 定することはできません。
        <li>複数回の再視聴をお申込みの場合、すべて同時視聴となり、視聴可能期間は 1ヵ月のみとなります。<br>第1回から第4回までを1回分1ヵ月ずつずらして4か月ご覧になりたい場合は、 お手数ですが1回分ずつお申込み下さい。<br>第1回の再視聴が終了してから第2回をお申込みいただくか、 再視聴期間が終わる頃に第2回をお申込み下さい。
    </ul>
    </div>
TEXT;
    return $content;
}
Ejemplo n.º 2
0
 private function assertIfRequestIsDuplicated($user, $request)
 {
     $requests_not_yet_confirmed = plugin_movieviewer_get_review_pack_purchase_request_repository()->findNotYetConfirmed($user->id);
     foreach ($request->getItems() as $item) {
         if (MovieViewerReviewPackPurchaseRequest::requestsHasItem($requests_not_yet_confirmed, $item->course_id, $item->session_id)) {
             throw new MovieViewerRequestIsDuplicatedException("指定した単元はすでに申し込み済みです。");
         }
     }
 }
/**
 * [ブロック] 申し込みの詳細を生成する
 *
 * @param MovieViewerSettings                  $settings プラグインの設定
 * @param MovieViewerReviewPackPurchaseRequest $request  申し込み
 * 
 * @return string 申し込みの詳細(html)
 */
function plugin_movieviewer_review_purchase_start_convert_get_request_details($settings, $request)
{
    $courses = plugin_movieviewer_get_courses_repository()->find();
    $itemsByCourse = $request->getItemsByCourse();
    $item_description = "";
    foreach ($itemsByCourse as $course_id => $items) {
        $course = $courses->getCourse($course_id);
        $session_list = "";
        foreach ($items as $item) {
            $session = $course->getSession($item->session_id);
            $session_list .= "<li>{$session->describe()}</li>";
        }
        $item_description .= <<<TEXT
        {$course->describe()}
        <ul style='margin-left:0;'>
            {$session_list}
        </ul>
TEXT;
    }
    $payment_guide = MovieViewerReviewPackPurchasePaymentGuide::create($settings->payment, $request);
    $hsc = "plugin_movieviewer_hsc";
    if ($request->purchase_method === 'bank') {
        $bank_accounts_with_notes = nl2br($payment_guide->bank_transfer->bank_accounts_with_notes);
        $content_header_payment = <<<TEXT
        <tr><th>振込先</th><td>{$bank_accounts_with_notes}</td></tr>
TEXT;
    } else {
        $acceptable_brands = "";
        foreach ($payment_guide->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;
        }
        $content_header_payment = <<<TEXT
        <tr><th>振込先<br>(利用可能なクレジットカード)</th>
        <td style='vertical-align:top;'>{$acceptable_brands}</td>
        </tr>
TEXT;
    }
    $price_with_notes = plugin_movieviewer_render_price_with_notes($request->getPrice(), "回", false);
    $content = <<<TEXT
    <p>
    <table class="movieviewer-purchase-request-details">
        <tr><th>項目</th><td>{$item_description}</td></tr>
        <tr><th>金額</th><td>{$price_with_notes}</td></tr>
        {$content_header_payment}
        <tr><th>振込期限</th><td>{$hsc($payment_guide->deadline->format("Y年m月d日"))}まで</td></tr>
    </table>
    </p>
TEXT;
    return $content;
}