/home/arranoyd/telegastro/wp-content/plugins/restrict-user-access/list-members.php
<?php
/**
 * @package Restrict User Access
 * @author Joachim Jensen <joachim@dev.institute>
 * @license GPLv3
 * @copyright 2020 by Joachim Jensen
 */

defined('ABSPATH') || exit;

if (! class_exists('WP_List_Table')) {
    require_once(ABSPATH . 'wp-admin/includes/class-wp-list-table.php');
}

final class RUA_Members_List extends WP_List_Table
{
    /**
     * @var int
     */
    private $level_id;

    public function __construct()
    {
        parent::__construct(array(
            'singular' => __('Member', 'restrict-user-access'),
            'plural'   => __('Members', 'restrict-user-access'),
            'ajax'     => false,
            'screen'   => RUA_App::TYPE_RESTRICT.'_members'
        ));
        //adds suffix to bulk name to avoid clash
        $this->_actions = $this->get_bulk_actions();
        $this->level_id = get_the_ID();
    }

    /**
     * Text for no members
     *
     * @since  0.4
     * @return void
     */
    public function no_items()
    {
        _e('No members found.', 'restrict-user-access');
    }

    /**
     * Table columns with titles
     *
     * @since  0.4
     * @return array
     */
    public function get_columns()
    {
        return array(
            'cb'           => '<input type="checkbox" />',
            'user_login'   => __('Username'),
            'user_email'   => __('E-mail'),
            'status'       => __('Status', 'restrict-user-access'),
            'member_start' => __('Member Since'),
            'member_end'   => __('Expiration'),
        );
    }

    /**
     * Columns to make sortable.
     *
     * @return array
     */
    public function get_sortable_columns()
    {
        return array();
    }

    /**
     * Primary column used for responsive view
     *
     * @since  0.4
     * @return string
     */
    protected function get_default_primary_column_name()
    {
        return 'user_login';
    }

    /**
     * Default fallback for column render
     *
     * @since  0.4
     * @param  WP_Level_Membership_Interface  $membership
     * @param  string  $column_name
     * @return mixed
     */
    protected function column_default($membership, $column_name)
    {
        $attribute = $membership->user()->get_attribute($column_name);
        echo '<a href="mailto:'.$attribute.'">'.$attribute.'</a>';
    }

    /**
     * Render checkbox column
     *
     * @since  0.4
     * @param  RUA_User_Level_Interface  $membership
     * @return string
     */
    protected function column_cb($membership)
    {
        printf(
            '<input type="checkbox" name="user[]" value="%s" />',
            $membership->get_user_id()
        );
    }

    /**
     * Render user_login column
     *
     * @since  0.4
     * @param  RUA_User_Level_Interface  $membership
     * @return string
     */
    protected function column_user_login(RUA_User_Level_Interface $membership)
    {
        $title = '<strong>' . $membership->user()->get_attribute('user_login') . '</strong>';
        $admin_url = admin_url(sprintf(
            'admin.php?page=wprua-edit&level_id=%s&user=%s',
            $_REQUEST['level_id'],
            $membership->get_user_id()
        ));
        $actions = array(
            'delete' => '<a href="'.wp_nonce_url($admin_url.'&action=remove_user', 'update-post_'.$_REQUEST['level_id']).'">'.__('Remove').'</a>'
        );
        $actions = apply_filters('rua/member-list/actions', $actions, $membership);
        echo $title . $this->row_actions($actions);
    }

    /**
     * Render expiry date column
     *
     * @since  0.5
     * @param  RUA_User_Level_Interface  $membership
     * @return string
     */
    protected function column_status(RUA_User_Level_Interface $membership)
    {
        $status = $membership->get_status();
        switch ($status) {
            case RUA_User_Level::STATUS_ACTIVE:
                _e('Active');
                break;
            case RUA_User_Level::STATUS_EXPIRED:
                _e('Expired');
                break;
            default:
                echo $status;
        }
    }

    /**
     * @since 1.2
     * @param RUA_User_Level_Interface $membership
     *
     * @return void
     */
    protected function column_member_start(RUA_User_Level_Interface $membership)
    {
        $time = $membership->get_start();
        if ($time) {
            $m_time = date_i18n('Y-m-d', $time);

            $t_time = date_i18n('Y-m-d H:i:s T', $time);

            $time_diff = time() - $time;

            if ($time_diff >= 0 && $time_diff <= MONTH_IN_SECONDS) {
                $h_time = sprintf(__('%s ago'), human_time_diff($time));
            } else {
                $h_time = $m_time;
            }

            echo '<abbr title="' . $t_time . '">'.$h_time. '</abbr>';
        }
    }

    /**
     * @since 1.2
     * @param RUA_User_Level_Interface $membership
     *
     * @return void
     */
    protected function column_member_end(RUA_User_Level_Interface $membership)
    {
        $expiry = $membership->get_expiry();
        if ($expiry == 0) {
            echo __('Lifetime', 'restrict-user-access');
        } else {
            $t_time = date_i18n('Y-m-d H:i:s T', $expiry);
            echo '<abbr title="' . $t_time . '">'.sprintf(__('%s from now', 'restrict-user-access'), human_time_diff($expiry)). '</abbr>';
        }
    }


    /**
     * Bulk actions
     *
     * @since  0.4
     * @return array
     */
    public function get_bulk_actions()
    {
        return array(
            'remove_user' => __('Remove', 'restrict-user-access')
        );
    }

    /**
     * Generate the table navigation above or below the table
     *
     * @since 0.4
     * @param string $which
     */
    public function display_tablenav($which)
    {
        ?>
<div class="tablenav <?php echo esc_attr($which); ?>">

    <?php if ($this->has_items() && $which == 'top'): ?>
    <div class="alignleft actions bulkactions">
        <?php $this->bulk_actions($which); ?>
    </div>
    <?php endif;
        $this->extra_tablenav($which);
        $this->pagination($which); ?>

    <br class="clear" />
</div>
<?php
    }

    /**
     * Get data and set pagination
     *
     * @since  0.4
     * @return void
     */
    public function prepare_items()
    {
        $this->_column_headers = $this->get_column_info();

        $per_page = $this->get_items_per_page('members_per_page', 20);
        $current_page = $this->get_pagenum();
        $user_query = new WP_User_Query(array(
            'meta_key'   => RUA_App::META_PREFIX.'level',
            'meta_value' => $this->level_id,
            'number'     => $per_page,
            'offset'     => ($current_page - 1) * $per_page
        ));
        $total_items = (int)$user_query->get_total();

        $this->set_pagination_args(array(
            'total_items' => $total_items,
            'total_pages' => ceil($total_items / $per_page),
            'per_page'    => $per_page
        ));

        $this->items = array();
        foreach ($user_query->get_results() as $user) {
            $this->items[] = rua_get_user_level($this->level_id, $user);
        }
    }

    /**
     * @since 1.3
     * @param string $url
     * @param string $scheme
     * @param string $orig_scheme
     *
     * @return string
     */
    public function add_url_suffix($url, $scheme, $orig_scheme)
    {
        return $url . '#top#section-members';
    }

    /**
     * Display pagination
     * Adds hashtag to current url
     *
     * @since  0.6
     * @param  string  $which
     * @return void
     */
    public function pagination($which)
    {
        add_filter('set_url_scheme', array($this, 'add_url_suffix'), 10, 3);
        parent::pagination($which);
        remove_filter('set_url_scheme', array($this, 'add_url_suffix'), 10, 3);
    }
}