/** * [アクション] 動画再生画面を生成し、クライアントに送信する * * 注意: 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; }
function plugin_movieviewer_get_current_user() { $user_id = plugin_movieviewer_get_auth_manager()->getUserId(); return plugin_movieviewer_get_user_repository()->findById($user_id); }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * ログアウトする * * 例: http://host:port/index.php?cmd=movieviewer_logout * * @return array ページ名、画面(html) */ function plugin_movieviewer_logout_action() { plugin_movieviewer_get_auth_manager()->logout(); return array("msg" => '会員ログアウト', "body" => "ログアウトしました。"); }
/** * 認証画面を生成する * * @param string $messages 認証画面に表示するメッセージ * * @return string 画面(html) */ function plugin_movieviewer_auth_generate_signin_page($messages) { $manager = plugin_movieviewer_get_auth_manager(); $manager->logout(); global $vars, $defaultpage; $page = isset($vars['page']) ? $vars['page'] : $defultpage; $show_messages = isset($_GET['messages']) ? plugin_movieviewer_hsc(filter_input(INPUT_GET, 'messages')) : ''; $messages = ""; if ($show_messages) { $messages = "ユーザ名またはパスワードに誤りがあります。"; } $body_messages = ""; if ($messages != null && $messages != "") { $body_messages = <<<TEXT <div class="ui-state-error ui-corner-all" style="margin: 5px;"> <p> <span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> {$messages} </p> </div> TEXT; } $hsc = "plugin_movieviewer_hsc"; $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token"; $auth_manager = plugin_movieviewer_get_auth_manager(); $label_for_username = $hsc($auth_manager->getLabelForUserName()); $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"> <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <h2>会員認証</h2> <p>以下に、{$label_for_username}、パスワードを入力し「ログインする」ボタンを押して下さい。</p> {$body_messages} <form class="movieviewer" action="index.php?{$page}" METHOD="POST"> <fieldset> <label for="movieviewer_user">{$label_for_username}</label> <input type="text" id="movieviewer_user" name="movieviewer_user" size=50> </fieldset> <fieldset> <label for="movieviewer_password">パスワード</label> <input type="password" id="movieviewer_password" name="movieviewer_password" size=50> </fieldset> {$input_csrf_token()} <button class="movieviewer-button" type="submit">ログインする</button> </form> TEXT; return $body; }
/** * [アクション] パスワードリセット画面を生成する * * @param string $token パスワードリセットトークン * @param MovieViewerUser $user 対象ユーザ * @param string $messages エラーメッセージ * * @return array ページ名, 画面(html) */ function plugin_movieviewer_reset_password_action_confirm_generate_page($token, $user, $messages = "") { $manager = plugin_movieviewer_get_auth_manager(); $manager->logout(); $page = plugin_movieviewer_get_current_page(); $body_messages = ""; if ($messages !== null && $messages !== "") { $body_messages = <<<TEXT <div class="ui-state-error ui-corner-all" style="margin: 5px;"> <p> <span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span> {$messages} </p> </div> TEXT; } $hsc = "plugin_movieviewer_hsc"; $input_csrf_token = "plugin_movieviewer_generate_input_csrf_token"; $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"> <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <h2>パスワードのリセット</h2> <div><span style="font-size:1.2em;font-weight:bold;">{$hsc($user->describe())}様</span></div> <p>以下に、パスワードを入力し「パスワードをリセットする」ボタンを押して下さい。</p> {$body_messages} <form class="movieviewer" action="index.php?cmd=movieviewer_reset_password" METHOD="POST"> <input type="hidden" name="ope_type" value="reset"> <input type="hidden" name="page" value="{$hsc($page)}"> <input type="hidden" name="token" value="{$hsc($token->id)}"> {$input_csrf_token()} <fieldset> <label for="movieviewer_password">パスワード</label> <input type="password" id="movieviewer_password" name="movieviewer_password" size=50> </fieldset> <fieldset> <label for="movieviewer_password_confirm">パスワード(確認)</label> <input type="password" id="movieviewer_password_confirm" name="movieviewer_password_confirm" size=50> </fieldset> <button class="movieviewer-button" type="submit">パスワードをリセットする</button> </form> TEXT; return $body; }