__( 'Invitation Code', 'ashuwp' ), 'plural' => __( 'Invitation Codes', 'ashuwp' ), 'ajax' => false ) ); } function column_default( $item, $column_name ) { switch ( $column_name ){ case 'code': case 'counter': case 'users': case 'expiration': case 'status': case 'actions': return $item[ $column_name ]; default: return print_r($item,true); } } function column_cb( $item ) { return sprintf( '', 'invitationcode', $item['id'] ); } function get_columns() { $columns = array( 'cb' => '', 'code' => __( 'Invitation Codes', 'ashuwp' ), 'counter' => __( 'Counter(Max/Used)', 'ashuwp' ), 'users' => __( 'User(s)', 'ashuwp' ), 'expiration' => __( 'Expiration Time', 'ashuwp' ), 'status' => __( 'Status', 'ashuwp' ), 'actions' => __( 'Actions', 'ashuwp' ), ); return $columns; } function get_bulk_actions() { $actions = array( 'active' => 'Active', 'deactive' => 'Disable', 'delete' => 'Delete' ); return $actions; } function format_datas( $codes ) { $datas = array(); foreach( $codes as $code ){ $item_array = array(); $users = array(); if(!empty($code['users'])){ $users = code_users_string_to_array($code['users']); } $used = count($users); if( ($code['max']<=$used) && ($code['status']=='available') ){ $code['status'] = 'finish'; ashuwp_update_invitation_code( $code['id'], 'status', 'finish' ); } $user_output = array(); foreach( $users as $user_id ){ $user = get_user_by('id', $user_id); if(!empty($user)){ $user_output[] = ''.$user->user_login .''; } } $expiration = ''; if( !empty( $code['expiration'] ) && $code['expiration']!='0000-00-00 00:00:00' ){ $expiration = date_i18n( get_option( 'date_format' ).' '.get_option( 'time_format' ), strtotime($code['expiration']) ); $now = time() + ( get_option( 'gmt_offset' ) * 3600 ); if( ($now >= strtotime($code['expiration'])) && ($code['status'] == 'available') ){ $code['status'] = 'expired'; ashuwp_update_invitation_code( $code['id'], 'status', 'expired' ); } } $status = ''; switch($code['status']){ case 'available': $status = sprintf( '%s', __('Available', 'ashuwp') ); break; case 'disabled': $status = sprintf( '%s', __('Disabled', 'ashuwp') ); break; case 'finish': $status = sprintf( '%s', __('Use Up', 'ashuwp') ); break; case 'expired': $status = sprintf( '%s', __('Expired', 'ashuwp') ); break; default: $status = ''; } $actions = ''.__('Delete', 'ashuwp').''; if( $code['status'] == 'disabled' ){ $actions .= ' | '.__('Active', 'ashuwp').''; } if( $code['status'] == 'available'){ $actions .= ' | '.__('Disable', 'ashuwp').''; } $item_array['id'] = $code['id']; $item_array['code'] = $code['code']; $item_array['counter'] = $code['max'].'/'.$used; $item_array['users'] = implode( ',', $user_output ); $item_array['expiration'] = $expiration; $item_array['status'] = $status; $item_array['actions'] = $actions; $datas[] = $item_array; } return $datas; } function prepare_items() { $this->_column_headers = $this->get_column_info(); $this->process_bulk_action(); $per_page = $this->get_items_per_page( 'customers_per_page', 30 ); $current_page = $this->get_pagenum(); $total_items = 0; $args = array( 'per_page' => $per_page, 'paged' => $current_page, ); if( !empty( $_GET['s'] ) ){ $words = trim($_GET['s']); if($words != ''){ $args['s'] = strtoupper( trim($_GET['s']) ); } } if( !empty( $_GET['status'] ) && in_array( trim($_GET['status']), array('available','disabled','finish','expired') ) ){ $args['status'] = trim($_GET['status']); } $total_items = ashuwp_count_invitation_code($args); $datas = ashuwp_get_invitation_codes($args); $this->items = $this->format_datas($datas); $this->set_pagination_args( array( 'total_items' => $total_items, 'per_page' => $per_page, 'total_pages' => ceil($total_items/$per_page) ) ); } } class ashuwp_invitation_code_admin { static public $instance; public $invitation_code_obj; private function __construct(){ add_filter( 'set-screen-option', array( $this, 'set_screen' ), 10, 3 ); add_action( is_multisite() ? 'network_admin_menu' : 'admin_menu', array( $this, 'ashuwp_invitation_code_menu') ); //add_action( 'admin_menu', array( $this, 'ashuwp_invitation_code_menu') ); add_action( 'admin_enqueue_scripts', array( $this, 'invitation_code_css') ); } private function __clone() { } function ashuwp_invitation_code_menu() { $hook = add_menu_page( __('Invitation Codes', 'ashuwp'), __('Invitation Codes', 'ashuwp'), 'manage_options', 'invitation_code', array(&$this, 'invitation_code_list'),'dashicons-admin-network',27); add_submenu_page('invitation_code', __('Add New', 'ashuwp'), __('Add New', 'ashuwp'), 'manage_options', 'invitation_code_add', array(&$this, 'invitation_code_add')); add_submenu_page('invitation_code', __('Options', 'ashuwp'), __('Options', 'ashuwp'), 'manage_options', 'invitation_code_options', array(&$this, 'invitation_code_options')); add_action( "load-$hook", array( $this, 'invitation_code_update' ) ); add_action( "load-$hook", array( $this, 'screen_option' ) ); } function invitation_code_css() { wp_enqueue_style( 'invitation-style', plugin_dir_url( __FILE__ ) . '/css/styles.css' ); } function set_screen( $status, $option, $value ) { return $value; } function screen_option() { $option = 'per_page'; $args = array( 'label' => 'Customers', 'default' => 30, 'option' => 'customers_per_page' ); add_screen_option( $option, $args ); $this->invitation_code_obj = new Ashuwp_Invitation_Code_List_Table(); } function invitation_code_update() { if ( ( isset( $_GET['action'] ) && in_array($_GET['action'],array('active', 'deactive', 'delete') ) ) || ( isset( $_GET['action2'] ) && in_array($_GET['action2'],array('active', 'deactive', 'delete') ) ) ) { if( isset( $_GET['action'] ) && in_array($_GET['action'],array('active', 'deactive', 'delete') ) ){ $action = $_GET['action']; } if( isset( $_GET['action2'] ) && in_array($_GET['action2'],array('active', 'deactive', 'delete') ) ){ $action = $_GET['action2']; } $success = array(); $failed = array(); $code_ids = esc_sql( $_GET['invitationcode'] ); foreach ( $code_ids as $id ) { $re = ashuwp_operation_invitation_code( $id, $action ); if($re){ $success[] = $id; }else{ $failed[] = $id; } } $query = array( 'page'=>'invitation_code' ); $query['paged'] = get_query_var( 'paged', 1 ); if( !empty($success) ){ $query['status'] = 'success'; $query['success'] = implode( ',', $success ); } if( !empty($failed) ){ $query['status'] = 'failed'; $query['failed'] = implode( ',', $failed ); } $redirect_to = add_query_arg( $query, network_admin_url('admin.php') ); wp_safe_redirect( $redirect_to ); exit(); } } function invitation_code_list(){ $all = ashuwp_count_invitation_code(); $available = ashuwp_count_invitation_code( array( 'status'=>'available' ) ); $disabled = ashuwp_count_invitation_code( array( 'status'=>'disabled' ) ); $finish = ashuwp_count_invitation_code( array( 'status'=>'finish' ) ); $expired = ashuwp_count_invitation_code( array( 'status'=>'expired' ) ); ?>
invitation_code_generate(); ?>