public function display_rows()
    {
        $plugins_allowedtags = array('a' => array('href' => array(), 'title' => array(), 'target' => array()), 'abbr' => array('title' => array()), 'acronym' => array('title' => array()), 'code' => array(), 'pre' => array(), 'em' => array(), 'strong' => array(), 'ul' => array(), 'ol' => array(), 'li' => array(), 'p' => array(), 'br' => array());
        $plugins_group_titles = array('Performance' => _x('Performance', 'Plugin installer group title'), 'Social' => _x('Social', 'Plugin installer group title'), 'Tools' => _x('Tools', 'Plugin installer group title'));
        $tab = !empty($_REQUEST['tab']) ? $_REQUEST['tab'] : '';
        $group = null;
        foreach ((array) $this->items as $kk => $plugin) {
            if (is_object($plugin)) {
                $plugin = (array) $plugin;
            }
            // Display the group heading if there is one
            if (isset($plugin['group']) && $plugin['group'] != $group) {
                if (isset($this->groups[$plugin['group']])) {
                    $group_name = $this->groups[$plugin['group']];
                    if (isset($plugins_group_titles[$group_name])) {
                        $group_name = $plugins_group_titles[$group_name];
                    }
                } else {
                    $group_name = $plugin['group'];
                }
                // Starting a new group, close off the divs of the last one
                if (!empty($group)) {
                    echo '</div></div>';
                }
                echo '<div class="plugin-group"><h3>' . esc_html($group_name) . '</h3>';
                // needs an extra wrapping div for nth-child selectors to work
                echo '<div class="plugin-items">';
                $group = $plugin['group'];
            }
            $title = wp_kses($plugin['name'], $plugins_allowedtags);
            // Remove any HTML from the description.
            $description = strip_tags($plugin['short_description']);
            $version = wp_kses($plugin['version'], $plugins_allowedtags);
            $name = strip_tags($title . ' ' . $version);
            $author = wp_kses($plugin['author'], $plugins_allowedtags);
            if (!empty($author)) {
                $author = ' <cite>' . sprintf(__('By %s'), $author) . '</cite>';
            }
            $action_links = array();
            $plugin_file = learn_press_plugin_basename_from_slug($plugin['slug']);
            if (current_user_can('install_plugins') || current_user_can('update_plugins')) {
                if ($this->test_mode) {
                    $status = array('status' => file_exists(WP_PLUGIN_DIR . '/' . $plugin['slug']) ? 'newer_installed' : 'install', 'url' => admin_url('admin-ajax.php?action=learnpress_plugin_install&plugin=' . $plugin['slug']));
                } else {
                    $status = install_plugin_install_status($plugin);
                }
                switch ($status['status']) {
                    case 'install':
                        if ($status['url']) {
                            /* translators: 1: Plugin name and version. */
                            $action_links[] = '<a class="install-now button thimpress" data-action="install-now" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url($status['url']) . '&learnpress=active" aria-label="' . esc_attr(sprintf(__('Install %s now'), $name)) . '" data-name="' . esc_attr($name) . '">' . __('Install and Active') . '</a>';
                        }
                        break;
                    case 'update_available':
                        if ($status['url']) {
                            /* translators: 1: Plugin name and version */
                            $action_links[] = '<a class="update-now button thimpress" data-action="update-now" data-plugin="' . esc_attr($status['file']) . '" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url($status['url']) . '&learnpress=active" aria-label="' . esc_attr(sprintf(__('Update %s now'), $name)) . '" data-name="' . esc_attr($name) . '">' . __('Update Now') . '</a>';
                        }
                        break;
                    case 'latest_installed':
                    case 'newer_installed':
                        if (is_plugin_active($plugin_file)) {
                            $action_links[] = '<span class="button button-disabled" title="">' . _x('Enabled', 'plugin') . '</span>';
                        } else {
                            $action_links[] = '<a class="active-now button thimpress" data-action="active-now" href="' . wp_nonce_url('plugins.php?action=activate&learnpress=active&plugin=' . $plugin_file, 'activate-plugin_' . $plugin_file) . '" >' . _x('Enable', 'plugin') . '</a>';
                        }
                        break;
                }
            }
            /*$details_link   = self_admin_url( 'plugin-install.php?tab=plugin-information&amp;plugin=' . $plugin['slug'] .
                            '&amp;TB_iframe=true&amp;width=600&amp;height=550' );
            
            
                        $action_links[] = '<a href="' . esc_url( $details_link ) . '" class="thickbox" aria-label="' . esc_attr( sprintf( __( 'More information about %s' ), $name ) ) . '" data-title="' . esc_attr( $name ) . '">' . __( 'More Details' ) . '</a>';
                        */
            if (!empty($plugin['icons']['svg'])) {
                $plugin_icon_url = $plugin['icons']['svg'];
            } elseif (!empty($plugin['icons']['2x'])) {
                $plugin_icon_url = $plugin['icons']['2x'];
            } elseif (!empty($plugin['icons']['1x'])) {
                $plugin_icon_url = $plugin['icons']['1x'];
            } else {
                $plugin_icon_url = $plugin['icons']['default'];
            }
            /**
             * Filter the install action links for a plugin.
             *
             * @since 2.7.0
             *
             * @param array $action_links An array of plugin action hyperlinks. Defaults are links to Details and Install Now.
             * @param array $plugin       The plugin currently being listed.
             */
            $action_links = apply_filters('plugin_install_action_links', $action_links, $plugin);
            $date_format = __('M j, Y @ H:i');
            $last_updated_timestamp = strtotime($plugin['last_updated']);
            $details_link = "";
            $message = null;
            if ('bundle_activate' == $tab) {
                if (learn_press_is_plugin_install($plugin_file)) {
                    if (is_plugin_active($plugin_file)) {
                        $message = sprintf('<span class="addon-status enabled">%s</span>', __('Enabled', 'learn_press'));
                    } else {
                        $message = sprintf('<span class="addon-status disabled">%s</span>', __('Disabled', 'learn_press'));
                    }
                } else {
                    $message = sprintf('<span class="addon-status not_install">%s</span>', __('Not Install', 'learn_press'));
                }
            }
            ?>
            <div class="plugin-card plugin-card-<?php 
            echo sanitize_html_class($plugin['slug']);
            ?>
">
                <div class="plugin-card-top">
                    <a href="<?php 
            echo esc_url($details_link);
            ?>
" class="thickbox plugin-icon"><img src="<?php 
            echo esc_attr($plugin_icon_url);
            ?>
" /></a>
                    <div class="name column-name">
                        <h4><a href="<?php 
            echo esc_url($details_link);
            ?>
" class="thickbox"><?php 
            echo $title;
            ?>
</a></h4>
                    </div>
                    <div class="action-links">
                        <?php 
            if ($action_links) {
                echo '<ul class="plugin-action-buttons"><li>' . implode('</li><li>', $action_links) . '</li></ul>';
            }
            //echo $message;
            ?>
                    </div>
                    <div class="desc column-description">
                        <p><?php 
            echo $description;
            ?>
</p>
                        <p class="authors"><?php 
            echo $author;
            ?>
</p>
                    </div>
                </div>
                <div class="plugin-card-bottom">
                    <div class="vers column-rating">
                        <?php 
            wp_star_rating(array('rating' => $plugin['rating'], 'type' => 'percent', 'number' => $plugin['num_ratings']));
            ?>
                        <span class="num-ratings">(<?php 
            echo number_format_i18n($plugin['num_ratings']);
            ?>
)</span>
                    </div>
                    <div class="column-updated">
                        <strong><?php 
            _e('Last Updated:');
            ?>
</strong> <span title="<?php 
            echo esc_attr(date_i18n($date_format, $last_updated_timestamp));
            ?>
">
						<?php 
            printf(__('%s ago'), human_time_diff($last_updated_timestamp));
            ?>
					</span>
                    </div>
                    <div class="column-downloaded">
                        <?php 
            if ($plugin['active_installs'] >= 1000000) {
                $active_installs_text = _x('1+ Million', 'Active plugin installs');
            } else {
                $active_installs_text = number_format_i18n($plugin['active_installs']) . '+';
            }
            printf(__('%s Active Installs'), $active_installs_text);
            ?>
                    </div>
                    <div class="column-compatibility">
                        <?php 
            if (!empty($plugin['tested']) && version_compare(substr($GLOBALS['wp_version'], 0, strlen($plugin['tested'])), $plugin['tested'], '>')) {
                echo '<span class="compatibility-untested">' . __('Untested with your version of WordPress') . '</span>';
            } elseif (!empty($plugin['requires']) && version_compare(substr($GLOBALS['wp_version'], 0, strlen($plugin['requires'])), $plugin['requires'], '<')) {
                echo '<span class="compatibility-incompatible">' . __('<strong>Incompatible</strong> with your version of WordPress') . '</span>';
            } else {
                echo '<span class="compatibility-compatible">' . __('<strong>Compatible</strong> with your version of WordPress') . '</span>';
            }
            ?>
                    </div>
                </div>
            </div>
        <?php 
        }
        // Close off the group divs of the last one
        if (!empty($group)) {
            echo '</div></div>';
        }
    }
/**
 * Install and active a plugin from slug name
 *
 * @param $slug
 * @return array
 */
function learn_press_install_and_active_add_on($slug)
{
    learn_press_require_plugins_api();
    if (!class_exists('Plugin_Upgrader', false)) {
        require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    }
    $api = plugins_api('plugin_information', array('slug' => $slug, 'fields' => array('sections' => false)));
    $title = sprintf(__('Installing Plugin: %s', 'learn_press'), $api->name . ' ' . $api->version);
    $nonce = 'install-plugin_' . $slug;
    $url = 'update.php?action=install-plugin&plugin=' . urlencode($slug);
    $plugin = learn_press_plugin_basename_from_slug($slug);
    $return = array();
    if (!learn_press_is_plugin_install($plugin)) {
        $upgrader = new Plugin_Upgrader(new Plugin_Installer_Skin(compact('title', 'url', 'nonce', 'plugin', 'api')));
        $result = $upgrader->install($api->download_link);
        if (is_wp_error($result)) {
            $return['error'] = $result;
            $return['status'] = 'not_install';
            $return['status_text'] = __('Not install', 'learn_press');
        } else {
            $return['result'] = $result;
            $return['status'] = 'installed';
            $return['status_text'] = __('Installed', 'learn_press');
        }
    }
    $plugin = learn_press_plugin_basename_from_slug($slug);
    //echo "[$plugin]";
    if (learn_press_is_plugin_install($plugin)) {
        activate_plugin($plugin, false, is_network_admin());
        // ensure that plugin is enabled
        $is_activate = is_plugin_active($plugin);
        $return['status'] = $is_activate ? 'activate' : 'deactivate';
        $return['status_text'] = $is_activate ? __('Enabled', 'learn_press') : __('Disabled', 'learn_press');
    }
    $return['plugin_file'] = $plugin;
    return $return;
}
function learn_press_get_add_on_action_link($plugin, $file)
{
    $action_links = array();
    if (current_user_can('install_plugins') || current_user_can('update_plugins')) {
        $name = '';
        if (!empty($plugin['source']) && $plugin['source'] == 'wp') {
            $status = install_plugin_install_status($plugin);
            switch ($status['status']) {
                case 'install':
                    if ($status['url']) {
                        /* translators: 1: Plugin name and version. */
                        $action_links[] = '<a class="install-now button" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url($status['url']) . '" aria-label="' . esc_attr(sprintf(__('Install %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Install Now') . '</span></a>';
                    }
                    break;
                case 'update_available':
                    if ($status['url']) {
                        /* translators: 1: Plugin name and version */
                        $action_links[] = '<a class="update-now button" data-plugin="' . esc_attr($status['file']) . '" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url($status['url']) . '" aria-label="' . esc_attr(sprintf(__('Update %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Update Now') . '</span></a>';
                    }
                    break;
                case 'latest_installed':
                case 'newer_installed':
                    $action_links[] = '<span class="button button-disabled" title="' . esc_attr__('This plugin is already installed and is up to date') . ' ">' . _x('Installed', 'plugin') . '</span>';
                    break;
            }
            if (learn_press_is_plugin_install($file)) {
                if (is_plugin_active($file)) {
                    $action_links[] = '<a class="button disable-now" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url(wp_nonce_url('plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file)) . '" aria-label="' . esc_attr(sprintf(__('Disable %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Disable Now', 'learn_press') . '</span></a>';
                } else {
                    $action_links[] = '<a class="button enable-now" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url(wp_nonce_url('plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file)) . '" aria-label="' . esc_attr(sprintf(__('Enable %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Enable Now', 'learn_press') . '</span></a>';
                }
            }
        } else {
            if (learn_press_is_plugin_install($file)) {
                if (is_plugin_active($file)) {
                    $action_links[] = '<a class="button disable-now" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url(wp_nonce_url('plugins.php?action=deactivate&plugin=' . $file, 'deactivate-plugin_' . $file)) . '" aria-label="' . esc_attr(sprintf(__('Disable %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Disable Now', 'learn_press') . '</span></a>';
                } else {
                    $action_links[] = '<a class="button enable-now" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url(wp_nonce_url('plugins.php?action=activate&plugin=' . $file, 'activate-plugin_' . $file)) . '" aria-label="' . esc_attr(sprintf(__('Enable %s now'), $name)) . '" data-name="' . esc_attr($name) . '"><span>' . __('Enable Now', 'learn_press') . '</span></a>';
                }
            } else {
                if ($plugin['url']) {
                    $action_links[] = '<a class="buy-now button" data-slug="' . esc_attr($plugin['slug']) . '" href="' . esc_url($plugin['url']) . '" aria-label="' . esc_attr(sprintf(__('Buy %s now'), $name)) . '" data-name="' . esc_attr($name) . '">' . __('Buy Now') . '</a>';
                }
            }
        }
        //$action_links[] = $file;
    }
    return $action_links;
}