/**
 * プラグイン規定関数::ブロック型で呼び出された場合の処理
 * 認証済みの場合: 入金確認画面を生成する
 * 未認証の場合: エラー画面を生成する
 *
 * 引数: なし
 *
 * @return string 画面(html)
 */
function plugin_movieviewer_review_purchase_confirm_payment_convert()
{
    try {
        $user = plugin_movieviewer_get_current_user();
    } catch (MovieViewerRepositoryObjectNotFoundException $ex) {
        return plugin_movieviewer_convert_error_response("管理者でログインする必要があります。");
    }
    if (!$user->isAdmin()) {
        return plugin_movieviewer_convert_error_response("管理者でログインする必要があります。");
    }
    $requests = plugin_movieviewer_get_review_pack_purchase_request_repository()->findNotYetConfirmed();
    if (count($requests) === 0) {
        $content = <<<TEXT
        <h2>入金確認</h2>
        <p>入金確認が必要なデータはありません。</p>
TEXT;
        return $content;
    }
    $content_requests = plugin_movieviewer_review_purchase_confirm_payment_render_requests($requests);
    $page = plugin_movieviewer_get_current_page();
    $action_url = plugin_movieviewer_get_script_uri() . "?cmd=movieviewer_review_purchase_confirm_payment&page={$page}";
    $date_begin_cds = plugin_movieviewer_review_purchase_confirm_payment_render_begin_date_candidates();
    $hsc = "plugin_movieviewer_hsc";
    $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token";
    $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">
    <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
    <script src="plugin/movieviewer/assets/css/movieviewer_purchase_confirm_payment.js"></script>
    <h2>入金確認</h2>
    <p>
      入金が確認できたものにチェックを付けて、確認ボタンを押してください。
    </p>
    <h4>確認対象</h4>
    <p>
    <form action="{$action_url}" method="POST">
    <input type="hidden" name="ope_type" value="confirm">
    {$input_csrf_token()}
    {$content_requests}
    </p>
    <p>
    <h4>視聴開始日</h4>
    <div id="radio">
    <p>
    {$date_begin_cds}
    </p>
    </div>
    </p>
    <button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only">確認</button>
    </form>
TEXT;
    return $content;
}
コード例 #2
0
/**
 * プラグイン規定関数::ブロック型で呼び出された場合の処理
 * 認証済みの場合: 再視聴対象選択画面を生成する
 * 未認証の場合: エラー画面を生成する
 *
 * 引数: なし
 *
 * @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;
}
コード例 #3
0
/**
 * [ブロック] 視聴画面を生成する
 * 視聴可能な単元、受講済みの単元を一覧で表示する
 *
 * @param array $plugin_args プラグインに設定されている引数
 *
 * @return string 画面(html)
 */
function plugin_movieviewer_convert_show_contents($plugin_args)
{
    global $script;
    try {
        plugin_movieviewer_assert_plugin_arguments($plugin_args);
    } catch (Exception $ex) {
        return plugin_movieviewer_convert_error_response("プラグインの引数が設定されていません。");
    }
    $review_page = $plugin_args[0];
    $user_id = plugin_movieviewer_get_auth_manager()->getUserId();
    $current_user = plugin_movieviewer_get_user_repository()->findById($user_id);
    $viewing_periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($user_id);
    $body_valid_courses = plugin_movieviewer_convert_render_courses($viewing_periods->getValidPeriods());
    $body_expired_courses = plugin_movieviewer_convert_render_courses($viewing_periods->getExpiredPeriods());
    $hsc = "plugin_movieviewer_hsc";
    $message_env = "";
    if (PLUGIN_MOVIEVIEWER_ENV !== "") {
        $env = PLUGIN_MOVIEVIEWER_ENV;
        $message_env = <<<TEXT
        <div style="position:fixed;top:0px;right:0px;"><p class="caution">環境変更中: {$env}</p></div>
TEXT;
    }
    $uri_review = plugin_movieviewer_get_script_uri() . "?{$review_page}";
    $body = <<<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.11.4/themes/redmond/jquery-ui.css" rel="stylesheet">
        <script src="plugin/movieviewer/assets/js/movieviewer.js"></script>
        <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
        <link href="//vjs.zencdn.net/5.4/video-js.css" rel="stylesheet">
        {$message_env}
        <div>
            <h2>視聴可能な単元</h2>
        </div>
        <div class="movieviewer-sessions movieviewer-sessions-viewable">
        {$body_valid_courses}
        </div>
        <div>
            <h2>受講済みの単元</h2>
        </div>
        <a href="{$uri_review}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>再視聴の申し込み</a>
        <div class="movieviewer-sessions movieviewer-sessions-attended">
        {$body_expired_courses}
        </div>
        <div id="myModal" title="View Movie">
            <div id="myModal_body"></div>
        </div>
        <script src="https://vjs.zencdn.net/5.4/video.js"></script>
        <script src="{$base_uri}/plugin/movieviewer/assets/js/videojs-contrib-hls.min.js"></script>    
        <script type="text/javascript">
             window.movieviewer = {};
             window.movieviewer.baseUrl = "{$script}";
        </script>
TEXT;
    return $body;
}
/**
 * [ブロック] クレジット支払い用の申し込みフォームを生成する
 *
 * @param MovieViewerSettings                  $settings         プラグインの設定
 * @param MovieViewerUser                      $user             ログインユーザ
 * @param MovieViewerReviewPackPurchaseRequest $request          申し込み
 * @param string                               $request_stash_id 申し込み仮ID
 * @param string                               $current_page     画面名
 * 
 * @return string フォーム(html)
 */
function plugin_movieviewer_review_purchase_start_convert_credit($settings, $user, $request, $request_stash_id, $current_page)
{
    // 取引IDに会員番号を利用するため、会員番号がない場合は、クレジットカード支払いはできない
    if (!$user->hasMemberId()) {
        return plugin_movieviewer_convert_error_response("クレジットカードの支払いには会員番号が必要です。");
    }
    $paygent_settings = $settings->payment->credit->paygent;
    $generator = new MovieViewerReviewPackPaygentParameterGenerator($paygent_settings, $user, $request);
    $return_params = array("cmd" => "movieviewer_review_purchase_start", "request_stash_id" => $request_stash_id);
    $return_uri = plugin_movieviewer_get_script_uri() . "?" . http_build_query($return_params);
    $hsc = "plugin_movieviewer_hsc";
    $request_details = plugin_movieviewer_review_purchase_start_convert_get_request_details($settings, $request);
    $content = <<<TEXT
    <h2>再視聴申し込み</h2>
    <p>
    申し込み内容を確認してください。<br>
    「申し込む」ボタンをクリックすると、クレジットカードの支払いページに移動します。<br>
    支払いページは、提携の決済代行会社ペイジェントのページになります。<br>
    </p>
    <p>
    決済の手続きが終了すると当サイトに再び戻ってきますので、それまで手続きを続けてください。
    当サイトに戻ってくる前に手続きを中断してしまった場合、購入完了となりませんのでご注意ください。<br>
    </p>
    <p>
    ※ 当研究所では、会員のみなさまのクレジットカード情報は一切お預かりいたしません。<br>
    </p>
    {$request_details}

    ※ クレジット決済画面の表示後、5日以内に入金を完了させてください。<br>
    期限が過ぎると、クレジット決済画面が表示されなくなり、入金できなくなります。
    </p>
    <form action="{$paygent_settings["request_uri"]}" method="post">
        <input type="hidden" name="trading_id" value="{$generator->getTradingId()}">
        <input type="hidden" name="id" value="{$generator->getId()}">
        <input type="hidden" name="seq_merchant_id" value="{$generator->getSeqMerchantId()}">
        <input type="hidden" name="hc" value="{$generator->getHash()}">
        <input type="hidden" name="payment_detail" value="{$generator->getPaymentDetail()}">
        <input type="hidden" name="return_url" value="{$return_uri}">
        <button type="submit" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>申し込む</button>
    </form>
TEXT;
    return $content;
}
/**
 * プラグイン規定関数::ブロック型で呼び出された場合の処理
 * 認証済みの場合: 入金確認画面を生成する
 * 未認証の場合: エラー画面を生成する
 *
 * 引数: なし
 *
 * @return string 画面(html)
 */
function plugin_movieviewer_purchase_confirm_payment_convert()
{
    $hsc = "plugin_movieviewer_hsc";
    try {
        $user = plugin_movieviewer_get_current_user();
    } catch (MovieViewerRepositoryObjectNotFoundException $ex) {
        return plugin_movieviewer_convert_error_response("管理者でログインする必要があります。");
    }
    if (!$user->isAdmin()) {
        return plugin_movieviewer_convert_error_response("管理者でログインする必要があります。");
    }
    $requests = plugin_movieviewer_get_deal_pack_purchase_request_repository()->findAll();
    $requestsNotConfirmed = array();
    foreach ($requests as $request) {
        if ($request->isPaymentConfirmed()) {
            continue;
        }
        $requestsNotConfirmed[] = $request;
    }
    if (count($requestsNotConfirmed) === 0) {
        $content = <<<TEXT
        <h2>入金確認</h2>
        <p>入金確認が必要なデータはありません。</p>
TEXT;
        return $content;
    }
    usort($requestsNotConfirmed, "MovieViewerDealPackPurchaseRequest::compareByMemberId");
    $content_rows = "";
    foreach ($requestsNotConfirmed as $request) {
        $ctrl_value = $hsc($request->getId());
        $ctrl_id = $hsc("pr_{$ctrl_value}");
        $content_row = <<<TEXT
        <tr>
          <td><input type="checkbox" name="purchase_requests[]" value="{$ctrl_value}" id="{$ctrl_id}"></td>
          <td><label for="{$ctrl_id}">{$hsc($request->getUser()->memberId)}</label></td>
          <td><label for="{$ctrl_id}">{$hsc($request->getUser()->lastName)} {$hsc($request->getUser()->firstName)}</label></td>
          <td><label for="{$ctrl_id}">{$hsc($request->getUser()->id)}</label></td>
          <td><label for="{$ctrl_id}">{$hsc($request->getPack()->describe())}</label></td>
          <td><label for="{$ctrl_id}">{$hsc($request->getDateRequested()->format("Y/m/d H:i:s"))}</label></td>
        </tr>
TEXT;
        $content_rows .= $content_row;
    }
    $content_list = <<<TEXT
    <div>
        <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>
    </div>
TEXT;
    $page = plugin_movieviewer_get_current_page();
    $action_url = plugin_movieviewer_get_script_uri() . "?cmd=movieviewer_purchase_confirm_payment&page={$page}";
    $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token";
    $date_begin = new DateTime();
    $date_begin = new DateTime($date_begin->format("Y-m-15 00:00:00"));
    $date_begin_cds = "";
    for ($index = 0; $index < 3; $index++) {
        $value = $date_begin->format("Y-m-d");
        $id = "viewing_period_date_begin_{$value}";
        $checked = "";
        if ($index === 1) {
            $checked = "checked";
        }
        $date_begin_cds .= <<<TEXT
        <input type=radio id="{$id}" name="viewing_perod_date_begin" value="{$value}" {$checked}><label for="{$id}">{$date_begin->format("m月d日")}から</label>
TEXT;
        $date_begin->modify("+1 month");
    }
    $date_begin_more_cds = "";
    for ($index = 0; $index < 3; $index++) {
        $value = $date_begin->format("Y-m-d");
        $id = "viewing_period_date_begin_{$value}";
        $date_begin_more_cds .= <<<TEXT
        <input type=radio id="{$id}" name="viewing_perod_date_begin" value="{$value}"><label for="{$id}">{$date_begin->format("m月d日")}から</label>
TEXT;
        $date_begin->modify("+1 month");
    }
    $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.11.4/themes/redmond/jquery-ui.css" rel="stylesheet">
    <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet">
    <script src="plugin/movieviewer/assets/css/movieviewer_purchase_confirm_payment.js"></script>
    <h2>入金確認</h2>
    <p>
      入金が確認できたものにチェックを付けて、確認ボタンを押してください。
    </p>
    <h4>確認対象</h4>
    <p>
    <form action="{$action_url}" method="POST">
    <input type="hidden" name="ope_type" value="confirm">
    {$input_csrf_token()}
    {$content_list}
    </p>
    <p>
    <h4>視聴開始日</h4>
    <div id="radio">
    <p>
    {$date_begin_cds}
    <button id="movieviewer-show-more-candidates"><span>もっと先を表示 >></span></button>
    </p>
    <p id="movieviewer-more-candidates" style="display:none;">
    {$date_begin_more_cds}
    </p>
    </div>
    </p>
    <button type="submit" class="ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only">確認</button>
    </form>
TEXT;
    return $content;
}
コード例 #6
0
function plugin_movieviewer_action_error_response($page, $message)
{
    $content = plugin_movieviewer_convert_error_response($message);
    return array("msg" => $page, "body" => $content);
}