Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WordPress で Web サービスの構築

WordPress で Web サービスの構築

WordPress で「競技会採点システム」のプラグインを開発しWeb サービスを始めました。

Katsushi Kawamori

April 20, 2019
Tweet

More Decks by Katsushi Kawamori

Other Decks in Programming

Transcript

  1. 競技団体の新システム •LAN で、Windows10 の PC と、タブレットを繋いで構築さ れたシステム。 •長所 •受付システムが秀逸。 •受付からデータが一貫している。

    •短所 •機材が多い。 •データ作成が煩雑。(作成者は徹夜必至) •データや受付でトラブルがあると全てに影響する。
  2. /* ================================================== * Construct * @since 1.00 */ public function

    __construct() { add_action( 'user_register', array($this, 'action_add_user') ); add_action( 'BdcScoringAcountHook', array($this, 'delete_data_acount') ); add_action( 'delete_user', array($this, 'action_delete_user'), 10, 1 ); // User Mail Only Register filter add_filter( 'umor_not_register_message', array($this, 'bdcregister') ); if ( get_option( 'users_can_register' ) ) { add_filter( 'allow_minor_auto_core_updates', '__return_true' ); add_filter( 'auto_update_translation', '__return_true' ); add_filter( 'auto_update_plugin', '__return_true' ); add_filter( 'auto_update_theme', '__return_true' ); } else { add_filter( 'automatic_updater_disabled', '__return_true' ); } } /* ================================================== * Administrator Add User Hook * @param int $userid The user ID. * @since 1.00 */ public function action_add_user( $userid ){ $user = get_userdata($userid); $role = implode( ', ', $user->roles ); if ( $role === 'bdc_user' ) { update_option( 'bdc_user_id', $userid ); update_option( 'users_can_register', FALSE ); // 6days wp_schedule_single_event( time() + 518400, 'BdcScoringAcountHook' ); } } 採点システム側の登録時
  3. /* ================================================== * Administrator Add User Hook * @param int

    $userid The user ID. * @since 1.00 */ public function action_add_user( $userid ){ $amu_settings = get_option('addmultipleuser'); $user = get_userdata($userid); $unm = $user->user_login; $key = get_password_reset_key($user); $useremail = $user->user_email; $role = implode( ', ', $user->roles ); if ( $role === $amu_settings['def_role'] ) { $amu_meta = get_user_meta( $userid, 'amu_meta', TRUE ); if ( empty($amu_meta) ) { $prefix1 = substr($useremail, 0, 3); $prefix2 = date_i18n("ymdHi"); $prefix = $prefix1.$prefix2; $amu_meta = array( 'add' => 'def', 'number' => $amu_settings['def_number'], 'prefix' => $prefix ); update_user_meta( $userid, 'amu_meta', $amu_meta ); $this->message = $this->auto_insert_users($useremail, 1, $amu_meta['number'], $prefix, $amu_settings['add_role']); } } } Add Multiple User 側の登録時
  4. /* ================================================== * Create multiple user * @param string $e_mail

    * @param int $number_min * @param int $number_count * @param string $prefix * @param string $add_role * @return string $messgae * @since 1.00 */ private function auto_insert_users($e_mail, $number_min, $number_count, $prefix, $add_role) { $message = __('Multiple users added as follows.', 'add-multiple-user')."¥r¥n¥r¥n"; $user_ids = array(); for ( $i = $number_min; $i <= $number_count; $i++ ) { $unm = $prefix.sprintf( '%02d', $i ); $pswd = wp_generate_password(8, FALSE, FALSE); $userdata = array( 'user_login' => $unm, 'user_pass' => $pswd, 'role' => $add_role ); $user_ids[] = wp_insert_user( $userdata ); } global $wpdb; foreach ( $user_ids as $userid) { $result = $wpdb->query($wpdb->prepare("UPDATE $wpdb->users SET user_email = %s WHERE ID = %d",$e_mail,$userid)); $user_info = get_userdata($userid); $unm = $user_info->user_login; $key = get_password_reset_key($user_info); $message .= sprintf( __('Username').': %s', $unm )."¥n"; $message .= __('To reset your password, visit the following address:').': <'.network_site_url( "wp- login.php?action=rp&key=$key&login=" . rawurlencode( $unm ), 'login' ) . ">¥r¥n¥r¥n"; } return $message; } 複数ユーザーの登録とメール通知
  5. Webサービスの登録方式3 • 課金により、審査員端末のアカウント を、増やせるようにする。 • Add Multiple User と連携して、PayPal, Stripe

    で課金できるようにする。 • プラグイン化 > Simple PayPal Payment, Simple Stripe Payment • フィルターフックで連携
  6. // For Simple Stripe Payment add_filter('simple_stripe_payment_charge', 'stripe_chrage', 10, 7 );

    // For Simple PayPal Payment add_filter('simple_paypal_payment_charge', 'paypal_chrage', 10, 6 ); echo do_shortcode('[simplepaypalpayment locale="'.$locale.'" size="medium" amount='.$amount.' currency="'.$currency.'" after="'.htmlentities($terminals_paid_html).'" remove=".payment_html" remove2="#SPPcustomButton" email="'.$email.'" payname="add-multiple-user"]'); echo do_shortcode('[simplestripepayment amount='.$amount.' currency="'.$currency.'" name="BDC Scoring" description="'.sprintf(__('%d terminals', 'bdc-scoring'), $amu_settings['paid_number']).'" after="'.htmlentities($terminals_paid_html).'" remove=".payment_html" remove2="#simple_paypal_payment_paypal- button" email="'.$email.'" payname="add-multiple-user"]'); /* ================================================== * Filter of Simple PayPal Payment * @since 1.00 */ public function paypal_chrage( $data, $payment_data, $email, $amount, $currency, $payname ) { // Payment TRUE do_action( 'amu_paid_add_user', $payname ); } /* ================================================== * Filter of Simple Stripe Payment * @since 1.00 */ public function stripe_chrage( $token, $email, $amount, $currency, $name, $description, $payname ) { // Payment TRUE do_action( 'amu_paid_add_user', $payname ); } 採点システム側の課金時
  7. /* ================================================== * Construct * @since 1.00 */ public function

    __construct() { add_action( 'BdcScoringAcountHook', array($this, 'delete_data_acount') ); add_action( 'delete_user', array($this, 'action_delete_user'), 10, 1 ); } /* ================================================== * Delete User Hook * @param int $userid The user ID. * @since 1.00 */ public function action_delete_user( $userid ){ if ( $userid == get_option( 'bdc_user_id' ) ) { delete_option( 'bdc_user_id' ); update_option( 'users_can_register', TRUE ); wp_clear_scheduled_hook( 'BdcScoringAcountHook' ); } } /* ================================================== * Delete Acount * @param none * @return none * @since 1.00 */ public function delete_data_acount() { // Delete bdc_user require_once(ABSPATH.'wp-admin/includes/user.php' ); wp_delete_user(get_option('bdc_user_id')); } 採点システム側の削除時
  8. その他の Web サービスとしての機能 • 重複ログインの禁止 Ban Double Login 作者:小川果純様 •

    https://ja.wordpress.org/plugins/ban-double-login/ • 多国語対応 Locale Auto Switch • https://ja.wordpress.org/plugins/locale-auto-switch/ • セキュリティ対策 Loginizer 作者: Loginizer (会社) • https://ja.wordpress.org/plugins/loginizer/ • パスワードリセット対策 Password String Generator • https://ja.wordpress.org/plugins/password-string-generator/
  9. 汎用的な競技会採点システム • ボールルームダンス競技会採点システムをベースに作成 • 一般向け 期間限定 Web サービスとして公開 • 誰でも1回払い6日間の利用で登録可能。

    • 団体向け 無期限、月額制 Web サービスとして公開 • 初期費用は、初期設定、サーバー設置費用として。 • 団体独自の付加機能を開発費として。 • 月額料金をサービス使用料、サーバー管理料として。