function plugin_movieviewer_qhmcommu_patch_allow_post() { plugin_movieviewer_qhmcommu_patch_set_global_settings(); try { $movieviewer_user = plugin_movieviewer_get_current_user(); $access_rule = new MovieViewerForumAccessRule(); return $access_rule->allowPost($movieviewer_user); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return false; } }
/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 認証済みの場合: ユーザ情報画面を生成する * 未認証の場合: 何もしない * * 引数: なし * * @return string 画面(html) */ function plugin_movieviewer_show_userinfo_convert() { try { $user = plugin_movieviewer_get_current_user(); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return ''; } $hsc = "plugin_movieviewer_hsc"; $content = <<<TEXT <link href="plugin/movieviewer/assets/css/movieviewer.css" rel="stylesheet"> <div><span class="movieviewer-lead">{$hsc($user->describe())}様</span></div> TEXT; return $content; }
/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 認証済みの場合: お知らせ画面を生成する * 未認証の場合: 何もしない * * 引数: string 購入申し込み(銀行振込)用ページ名 * string 購入申し込み(クレジットカード)用ページ名 * * 例: #movieviewer_notify_user("購入申し込み_銀行","購入申し込み_クレジット"); * * @return string 画面(html) */ function plugin_movieviewer_notify_user_convert() { try { $user = plugin_movieviewer_get_current_user(); } catch (MovieViewerRepositoryObjectNotFoundException $ex) { return ''; } if ($user->isAdmin()) { return ''; } $page_args = func_get_args(); $params = array(); $params['start_page_bank'] = $page_args[0]; $params['start_page_credit'] = $page_args[1]; $notifiers = array(); $notifiers[] = new MovieViewerReportNotifier(); $notifiers[] = new MovieViewerPurchaseOfferNotifier(); $notifiers[] = new MovieViewerPurchaseStatusNotifier(); $messages = array(); foreach ($notifiers as $notifier) { $message = $notifier->generateMessage($user, $params); if ($message !== "") { $messages[] = $message; } } if (count($messages) === 0) { return ''; } $messages_flat = implode("\r\n", $messages); $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"> <h2>お知らせ</h2> <div class="movieviewer-notices"> {$messages_flat} </div> TEXT; return $content; }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * パラメータ ope_type の値により、以下の処理を行う * confirm: 入金確定対象の申し込み一覧画面を生成する * execute: 入金を確定させ、結果画面を生成する * * 引数: string ope_type 処理区分 * string purchase_requests 対象の申し込みIDの一覧(カンマ区切り) * * 注意: 単独で呼び出さないこと(convertの画面と連携している) * @return array ページ名、画面(html) */ function plugin_movieviewer_review_purchase_confirm_payment_action() { $page = plugin_movieviewer_get_current_page(); 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->isAdmin()) { return plugin_movieviewer_action_error_response($page, "管理者でログインする必要があります。"); } $ope_type = filter_input(INPUT_POST, 'ope_type'); if ($ope_type === 'confirm') { return plugin_movieviewer_review_purchase_confirm_payment_action_confirm(); } if ($ope_type === 'execute') { return plugin_movieviewer_review_purchase_confirm_payment_action_execute(); } return plugin_movieviewer_action_error_response($page, "処理ができません。最初からやり直してください。"); }
/** * プラグイン規定関数::ブロック型で呼び出された場合の処理 * 認証済みの場合: 再視聴対象選択画面を生成する * 未認証の場合: エラー画面を生成する * * 引数: なし * * @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; }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * 申し込みの確定と通知メール(ユーザ、スタッフ)を送り、結果画面を生成する * * 引数: string request_stash_id 申し込み仮ID * * 注意: 単独で呼び出さないこと(convertの画面と連携している) * * @return array ページ名、画面(html) */ function plugin_movieviewer_review_purchase_start_action() { $from_external_link = false; $test_var = filter_input(INPUT_POST, "request_stash_id"); if (empty($test_var)) { $from_external_link = true; } if ($from_external_link) { $request_stash_id = filter_input(INPUT_GET, "request_stash_id"); } else { $request_stash_id = filter_input(INPUT_POST, "request_stash_id"); } 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, "メールアドレスが登録されていません。"); } $settings = plugin_movieviewer_get_global_settings(); $service = new MovieViewerReviewPackPurchaseRequestService($settings); $request = null; try { $request = $service->doRequest($user, $request_stash_id); } catch (Exception $ex) { return plugin_movieviewer_action_error_response($page, $ex->getMessage()); } if ($request->purchase_method === "bank") { $messages = plugin_movieviewer_review_purchase_start_action_bank($settings, $user, $request); } else { if ($request->purchase_method === "credit") { $messages = plugin_movieviewer_review_purchase_start_action_credit($settings, $user, $request); } } $page = plugin_movieviewer_get_current_page(); $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); }
/** * プラグイン規定関数::アクション型で呼び出された場合の処理 * 申し込みを確定させる * * 引数: 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 plugin_movieviewer_convert_error_response($message) { $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"> <p class="caution">{$hsc($message)}</p> TEXT; try { $user = plugin_movieviewer_get_current_user(); if (!$user->isAdmin()) { $content = <<<TEXT {$content} <p> <a href="{$back_uri}" class='ui-button ui-widget ui-state-default ui-corner-all ui-button-text-only'>マイページに戻る</a> </p> TEXT; } } catch (MovieViewerRepositoryObjectNotFoundException $ex) { // ログインしていない場合は情報を出さない } return $content; }