Making WordPress.org

Ticket #441: require-login.diff

File require-login.diff, 6.4 KB (added by nvwd, 11 years ago)

completed the require login and added the functions to utilize the new camptix hooks to add the username attendee meta

  • addons/require-login.php

    diff --git a/addons/require-login.php b/c:/xampp/htdocs/daytonwp/test/wp-content/plugins/camptix/addons/require-login.php
    index 93c04f9..4cf7ef7 100644
    old new class CampTix_Require_Login extends CampTix_Addon { 
    1111        public function camptix_init() {
    1212                add_action( 'template_redirect', array( $this, 'block_unauthenticated_actions' ), 8 );    // before CampTix_Plugin->template_redirect()
    1313                add_filter( 'tix_action_login',  array( $this, 'login' ) );
     14                add_action( 'camptix_notices', array( $this, 'ticket_form_message' ), 8 );
     15                add_action( 'camptix_attendee_form_additional_info', array( $this, 'get_attendee_form_username_field' ), 10, 3 );
     16                add_filter( 'camptix_form_register_complete_attendee_object', array( $this, 'add_username_to_attendee_object' ), 10, 2 );
     17                add_action( 'camptix_checkout_update_post_meta', array( $this, 'save_checkout_unsername_meta' ), 10, 2 );
     18                add_filter( 'camptix_save_attendee_post_add_search_meta', array( $this, 'get_attendee_search_meta' ) );
     19                add_filter( 'camptix_attendee_report_extra_columns', array( $this, 'get_attendee_report_extra_columns' ) );
     20                add_filter( 'camptix_attendee_report_column_value_username', array( $this, 'get_attendee_username_meta' ), 10, 2 );
     21                add_filter( 'camptix_metabox_attendee_info_additional_rows', array( $this, 'get_attendee_metabox_rows' ), 10, 2 );
     22                add_action( 'camptix_form_edit_attendee_update_post_meta', array( $this, 'update_attendee_post_meta' ), 10, 2 );
     23                add_action( 'camptix_form_edit_attendee_additional_info', array( $this, 'get_edit_attendee_username_field' ) );
    1424        }
    1525
    1626        /**
    class CampTix_Require_Login extends CampTix_Addon { 
    3646         * it will be overriden with the 'login' action so that they first have to login.
    3747         */
    3848        public function block_unauthenticated_actions() {
     49
    3950                if ( ! is_user_logged_in() && isset( $_REQUEST['tix_action'] ) && 'login' != $_REQUEST['tix_action'] ) {
     51
    4052                        //$_GET['tix_action'] = $_POST['tix_action'] = $_REQUEST['tix_action'] = 'login';
    4153
    42                         wp_safe_redirect( wp_login_url( site_url( $_SERVER['REQUEST_URI'] ) ) );
     54                        // merge the _post and _get for passing after successful login.
     55                        // new array should contain tix_action, tix_tickets_selected, and tix_coupon
     56                        // the 3 need to be passed to continue the purchase process after login
     57                        $urlData = array_merge( $_POST, $_GET );
     58
     59                        // had an issue with site_url( $_SERVER['REQUEST_URI'] ) when WP is in a subdirectory
     60                        // switched to $GLOBALS['camptix']->get_tickets_url() and appending the query vars to pass on after login
     61                        wp_safe_redirect( wp_login_url( $GLOBALS['camptix']->get_tickets_url() . '?' . http_build_query( $urlData ) ) );
    4362                        exit();
    4463
    4564                        // need to make default login message for standalone camptix installs, but filter it so wordcamp.org can override with special instructions
    class CampTix_Require_Login extends CampTix_Addon { 
    4968
    5069                        // what about edit token and access token, etc. should those be allowed without login?
    5170                        // should you save the previous action and post/get, then restore it once then login? v2 maybe
     71                } else if ( is_user_logged_in() && isset( $_REQUEST['tix_action'] ) && isset( $_GET['tix_tickets_selected'] ) ) {
     72                       
     73                        // if the ticket(s) requested are in the url, put them in _post so camptix can pick up and run after login
     74                        $_POST['tix_tickets_selected'] = $_GET['tix_tickets_selected'];
     75                }
     76        }
     77       
     78        public function ticket_form_message() {
     79                // add message to top of tickets initial form to alert them that they will have to login
     80                if ( ! is_user_logged_in() ) {
     81                        $GLOBALS['camptix']->notice( __( 'You will be prompted to login after clicking register.', 'camptix' ) );
     82                }
     83        }
     84       
     85        public function get_attendee_form_username_field( $form_data, $currentIteration, $totalCount ) {
     86                ?>
     87                <tr class="tix-row-username">
     88                        <td class="tix-required tix-left"><?php _e( 'Username', 'camptix' ); ?> <span class="tix-required-star">*</span></td>
     89                        <?php
     90                                $value = '';
     91                                if ( isset( $form_data['tix_attendee_info'][$currentIteration]['username'] ) ) {
     92                                        $value = $form_data['tix_attendee_info'][$currentIteration]['username'];
     93                                } else if ( $currentIteration == 1 ) {
     94                                        $current_user = wp_get_current_user();
     95                                        $value = $current_user->user_login;
     96                                }
     97                        ?>
     98                        <td class="tix-right"><input name="tix_attendee_info[<?php echo $currentIteration; ?>][username]" type="text" value="<?php echo esc_attr( $value ); ?>" /></td>
     99                </tr>
     100                <?php
     101        }
     102       
     103        public function add_username_to_attendee_object( $attendee, $attendee_info ) {
     104                $attendee->username = sanitize_text_field( $attendee_info['username'] );
     105                if ( empty( $attendee->username ) ) {
     106                        $GLOBALS['camptix']->error_flag( 'required_fields' );
    52107                }
     108                /* Need a way to send a better error message for when the provided username doesn't exist */
     109                $testUsername = username_exists( $attendee->username );
     110                if ( empty( $testUsername ) ) {
     111                        $GLOBALS['camptix']->error_flag( 'required_fields' );
     112                }
     113                return $attendee;
     114        }
     115       
     116        public function save_checkout_unsername_meta( $post_id, $attendee ) {
     117                update_post_meta( $post_id, 'tix_username', $attendee->username );
     118        }
     119       
     120        public function get_attendee_search_meta( $attendee_search_meta ) {
     121                $attendee_search_meta[] = 'tix_username';
     122                return $attendee_search_meta;
     123        }
     124       
     125        public function get_attendee_report_extra_columns( $extra_columns ) {
     126                $extra_columns['username'] = __( 'User Name', 'camptix' );
     127        }
     128       
     129        public function get_attendee_username_meta( $data, $attendee ) {
     130                return get_post_meta( $attendee->ID, 'tix_username', true );
     131        }
     132       
     133        public function get_attendee_metabox_rows( $rows, $post ) {
     134                $rows[] = array( __( 'User Name', 'camptix' ), esc_html( get_post_meta( $post->ID, 'tix_username', true ) ) );
     135                return $rows;
     136        }
     137       
     138        public function update_attendee_post_meta( $new_ticket_info, $attendee ) {
     139                update_post_meta( $attendee->ID, 'tix_username', sanitize_text_field( $new_ticket_info['username'] ) );
     140        }
     141       
     142        public function get_edit_attendee_username_field( $attendee ) {
     143                ?>
     144                <tr>
     145                        <td class="tix-required tix-left"><?php _e( 'Username', 'camptix' ); ?> <span class="tix-required-star">*</span></td>
     146                        <td class="tix-right"><input name="tix_ticket_info[username]" type="text" value="<?php echo esc_attr( get_post_meta( $attendee->ID, 'tix_username', true ) ); ?>" /></td>
     147                </tr>
     148                <?php
    53149        }
     150       
    54151}
    55152
    56153camptix_register_addon( 'CampTix_Require_Login' );