function allowView($user) { if ($user->isAdmin()) { return true; } if ($user->isMainte()) { return true; } $repos = plugin_movieviewer_get_viewing_periods_by_user_repository(); $viewing_periods = $repos->findById($user->id); $valid_periods = $viewing_periods->getValidPeriods(); return count($valid_periods) > 0; }
private function addViewingPeriods($payment_confirmation) { $periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($payment_confirmation->getUser()->id); $course_id = $payment_confirmation->getPack()->getCourse()->id; $sessions = $payment_confirmation->getPack()->getSessions(); $date_begin = $payment_confirmation->getViewingPeriod()->date_begin; $date_end = $payment_confirmation->getViewingPeriod()->date_end; foreach ($sessions as $session) { $periods->addPeriod($course_id, $session->id, $date_begin, $date_end); } return $periods; }
/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 認証済みの場合: 再視聴対象選択画面を生成する * 未認証の場合: エラー画面を生成する * * 引数: なし * * @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; }
private function addViewingPeriods($confirmation) { $periods = plugin_movieviewer_get_viewing_periods_by_user_repository()->findById($confirmation->getUser()->id); $date_begin = $confirmation->getViewingPeriod()->date_begin; $date_end = $confirmation->getViewingPeriod()->date_end; foreach ($confirmation->getPack()->getItems() as $item) { $periods->addPeriod($item->course_id, $item->session_id, $date_begin, $date_end); } return $periods; }
/** * [アクション] 動画再生画面を生成し、クライアントに送信する * * 注意: exitを呼ぶので、処理の最後に呼び出すこと * * @return void */ function plugin_movieviewer_action_show_movie() { date_default_timezone_set("Asia/Tokyo"); $settings = MovieViewerSettings::loadFromYaml(PLUGIN_MOVIEVIEWER_PATH_TO_SETTINGS); $cf_settings = $settings->aws['cloud_front']; $target = array("course" => filter_input(INPUT_POST, "course"), "session" => filter_input(INPUT_POST, "session"), "chapter" => filter_input(INPUT_POST, "chapter")); try { plugin_movieviewer_validate_course_id($target["course"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_session_id($target["session"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } try { plugin_movieviewer_validate_chapter_id($target["chapter"]); } catch (MovieViewerValidationException $ex) { plugin_movieviewer_abort("指定した内容に誤りがあります。"); } $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); $canView = $viewing_periods->canView($target['course'], $target['session']); if (!$canView) { plugin_movieviewer_abort("この動画は見ることができません。"); } $builder = new MovieViewerAwsCloudFrontUrlBuilder($cf_settings); $signed_path_rtmp = $builder->buildVideoRTMPUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $signed_path_hls = $builder->buildVideoHLSUrl($target['course'], $target['session'], $target['chapter'], 24 * 60 * 60); $base_uri = plugin_movieviewer_get_base_uri(); pkwk_common_headers(); header('Content-type: text/html'); print <<<EOC <video id="my_video_1" class="video-js vjs-default-skin vjs-big-play-centered" preload="auto" controls width="800" height="500" data-setup='{"techOrder":["flash","html5"]}'> <source src="rtmp://{$cf_settings['host']['video']['rtmp']}/cfx/st/&mp4:{$signed_path_rtmp}" type="rtmp/mp4"> <source src="{$signed_path_hls}" type="application/x-mpegURL"> </video> <p> 最大化ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-maximize.png"> は再生ボタン <img src="{$base_uri}/plugin/movieviewer/assets/images/button-play.png"> を押した後、表示されます。 </p> EOC; exit; }