/** * Handles outputting the markup for a single row of the list table. * * @param string $plugin_file The filename of the plugin being handled * @param array $plugin_data Data from {@link https://core.trac.wordpress.org/browser/trunk/wp-admin/includes/plugin.php#L108}) for the plugin */ public function single_row($plugin_file) { $plugin = basename(dirname($plugin_file)); $plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file); $is_active = WPCOM_VIP_Plugins_UI()->is_plugin_active($plugin); $class = $is_active ? 'active' : 'inactive'; if ($is_active) { $class .= ' active-' . $is_active; } $actions = array(); $actions = WPCOM_VIP_Plugins_UI()->add_activate_or_deactive_action_link($actions, $plugin); $plugin_name = $plugin_data['Name']; $description = '<p>' . ($plugin_data['Description'] ? $plugin_data['Description'] : ' ') . '</p>'; echo '<tr class="' . esc_attr($class) . '">'; list($columns, $hidden) = $this->get_column_info(); foreach ($columns as $column_name => $column_display_name) { $style = ''; if (in_array($column_name, $hidden)) { $style = ' style="display:none;"'; } switch ($column_name) { case 'name': echo "<td class='plugin-title'{$style}><strong>{$plugin_name}</strong>"; echo $this->row_actions($actions, true); echo "</td>"; break; case 'description': echo "<td class='column-description desc'{$style}>\n\t\t\t\t\t\t<div class='plugin-description'>{$description}</div>\n\t\t\t\t\t\t<div class='{$class} second plugin-version-author-uri'>"; $plugin_meta = array(); $plugin_meta[] = '<a href="' . esc_url('//vip.wordpress.com/plugins/' . $plugin . '/') . '" title="' . esc_attr__('Visit our VIP Plugins Directory to learn more') . '" target="_blank">' . __('Learn More') . '</a>'; if (!empty($plugin_data['Author'])) { $author = $plugin_data['Author']; if (!empty($plugin_data['AuthorURI'])) { $author = '<a href="' . $plugin_data['AuthorURI'] . '" title="' . esc_attr__('Visit author homepage') . '">' . $plugin_data['Author'] . '</a>'; } $plugin_meta[] = sprintf(__('By %s'), $author); } echo implode(' | ', $plugin_meta); echo '</div></td>'; break; } } echo "</tr>"; }
/** * Returns the content for a row in the list table. * * @param array $slug Plugin slug. * @param string $column_name Name of the table column. * @return string */ public function column_default($slug, $column_name) { if (!isset($slug)) { return; } if (!isset(WPCOM_VIP_Plugins_UI()->fpp_plugins[$slug])) { return; } if (WPCOM_VIP_Plugins_UI()->is_plugin_active($slug) && 'inactive' === $this->filter) { return; } if (!WPCOM_VIP_Plugins_UI()->is_plugin_active($slug) && 'active' === $this->filter) { return; } $image_src = plugins_url('assets/img/featured-plugins/' . $slug . '-2x.png', __DIR__ . '/../vip-dashboard.php'); $lobby_url = '//vip.wordpress.com/plugins/' . $slug . '/'; $is_active = WPCOM_VIP_Plugins_UI()->is_plugin_active($slug); ob_start(); ?> <div class="plugin <?php if ($is_active) { ?> active<?php } ?> "> <img src="<?php echo esc_url($image_src); ?> " width="48" height="48" class="fp-icon" /> <div class="fp-content"> <h3 class="fp-title"><?php echo esc_html(WPCOM_VIP_Plugins_UI()->fpp_plugins[$slug]['name']); ?> </h3> <p class="fp-description"><?php echo esc_html(WPCOM_VIP_Plugins_UI()->fpp_plugins[$slug]['description']); ?> </p> </div> <div class="interstitial"> <div class="interstitial-inner"> <h3 class="fp-title"><?php echo esc_html(WPCOM_VIP_Plugins_UI()->fpp_plugins[$slug]['name']); ?> </h3> <?php if ($is_active) { if ('option' === $is_active) { echo '<a href="' . esc_url(WPCOM_VIP_Plugins_UI()->get_plugin_deactivation_link($slug)) . '" class="fp-button" title="' . esc_attr__('Deactivate this plugin') . '">' . esc_html__('Deactivate Plugin') . '</a>'; echo '<span class="fp-text">' . esc_html__('Deactivating Plugin') . '</span>'; } elseif ('manual' === $is_active) { echo '<span title="To deactivate this particular plugin, edit your theme\'s functions.php file" class="fp-text">' . esc_html__("Enabled via your theme's code") . '</span>'; } } elseif (!$this->activation_disabled) { echo '<a href="' . esc_url(WPCOM_VIP_Plugins_UI()->get_plugin_activation_link($slug)) . '" class="fp-button" title="' . esc_attr__('Activate this plugin') . '" class="edit">' . esc_html__('Activate Plugin') . '</a>'; echo '<span class="fp-text">' . esc_html__('Activating Plugin') . '</span>'; } ?> </div> <div class="more-info"> <a href="<?php echo esc_url($lobby_url); ?> " target="_blank" title="Learn More"> <div class="icon"></div> </a> </div> </div> </div> <?php return ob_get_clean(); }
/** * Filters an array of action links to add an activation or deactivation link. * * @param array $actions Existing actions. * @param string $plugin Plugin slug to generate the link for. * @return array List of actions, including the new one. */ public function add_activate_or_deactive_action_link($actions, $plugin) { $is_active = WPCOM_VIP_Plugins_UI()->is_plugin_active($plugin); if ($is_active) { if ('option' == $is_active) { $actions['deactivate'] = '<a href="' . esc_url(WPCOM_VIP_Plugins_UI()->get_plugin_deactivation_link($plugin)) . '" title="' . esc_attr__('Deactivate this plugin') . '">' . __('Deactivate') . '</a>'; } elseif ('manual' == $is_active) { $actions['deactivate-manually'] = '<span title="To deactivate this particular plugin, edit your theme\'s functions.php file">' . __("Enabled via your theme's code") . '</span>'; } } elseif (!$this->activation_disabled) { $actions['activate'] = '<a href="' . esc_url(WPCOM_VIP_Plugins_UI()->get_plugin_activation_link($plugin)) . '" title="' . esc_attr__('Activate this plugin') . '" class="edit">' . __('Activate') . '</a>'; } return $actions; }
<?php require __DIR__ . '/class.wpcom-vip-plugins-ui.php'; /** * The main function responsible for returning the one true WPCOM_VIP_Plugins_UI instance to functions everywhere. * * Use this function like you would a global variable, except without needing to declare the global. * Example: <?php $WPCOM_VIP_Plugins_UI = WPCOM_VIP_Plugins_UI(); ?> * * @return WPCOM_VIP_Plugins_UI The one true WPCOM_VIP_Plugins_UI Instance */ function WPCOM_VIP_Plugins_UI() { return WPCOM_VIP_Plugins_UI::instance(); } // Start up the class immediately. WPCOM_VIP_Plugins_UI();