public function maybe_display_review_notice() { if (cpac()->suppress_site_wide_notices()) { return; } if (current_user_can('manage_admin_columns') && !get_user_meta(get_current_user_id(), self::OPTION_ADMIN_NOTICE_KEY, true)) { if (time() - 86400 * absint($this->days_since_install) >= $this->get_install_timestamp()) { add_action('admin_notices', array($this, 'display_admin_review_notice')); } } }
public function register_column_labels() { // don't load this unless required by WPML if (!isset($_GET['page']) || 'wpml-string-translation/menu/string-translation.php' !== $_GET['page']) { return; } foreach (cpac()->get_storage_models() as $storage_model) { foreach ($storage_model->get_stored_columns() as $column_name => $options) { icl_register_string('Admin Columns', $storage_model->key . '_' . $column_name, stripslashes($options['label'])); } } }
} /** * Check whether the Advanced Custom Fields plugin is active * * @since 2.4.9 * * @return bool Whether the Advanced Custom Fields plugin is active */ public function is_plugin_acf_active() { return class_exists('acf', false); } /** * Check whether the WooCommerce plugin is active * * @since 2.4.9 * * @return bool Whether the WooCommerce plugin is active */ public function is_plugin_woocommerce_active() { return class_exists('WooCommerce', false); } } function cpac() { return CPAC::instance(); } // Global for backwards compatibility. $GLOBALS['cpac'] = cpac();
/** * Possibly adds an admin notice when a third party plugin supported by an addon is installed, but the addon isn't * * @since 2.4.9 */ public function missing_addon_notices() { if (cpac()->suppress_site_wide_notices()) { return; } if (get_user_meta(get_current_user_id(), self::OPTION_ADMIN_NOTICE_INSTALL_ADDONS_KEY, true)) { return; } $plugins = array(); if ($this->cpac->is_plugin_acf_active() && !class_exists('CPAC_Addon_ACF')) { $plugins[] = __('Advanced Custom Fields', 'codepress-admin-columns'); } if ($this->cpac->is_plugin_woocommerce_active() && !class_exists('CPAC_Addon_WC')) { $plugins[] = __('WooCommerce', 'codepress-admin-columns'); } if ($plugins) { $num_plugins = count($plugins); foreach ($plugins as $index => $plugin) { $plugins[$index] = '<strong>' . $plugin . '</strong>'; } $plugins_list = $plugins[0]; if ($num_plugins > 1) { if ($num_plugins > 2) { $plugins_list = implode(', ', array_slice($plugins, 0, $num_plugins - 1)); $plugins = array($plugins_list, $plugins[$num_plugins - 1]); } $plugins_list = sprintf(__('%s and %s', 'codepress-admin-columns'), $plugins[0], $plugins[1]); } ?> <div class="cpac_message updated"> <a href="#" class="hide-notice hide-install-addons-notice"></a> <p><?php printf(__("Did you know Admin Columns Pro has an integration addon for %s? With the proper Admin Columns Pro license, you can download them from %s!", 'codepress-admin-columns'), $plugins_list, '<a href="' . $this->cpac->settings()->get_settings_url('addons') . '">' . __('the addons page', 'codepress-admin-columns') . '</a>'); ?> </div> <style type="text/css"> body .wrap .cpac_message { position: relative; padding-right: 40px; } .cpac_message .spinner.right { visibility: visible; display: block; right: 8px; text-decoration: none; text-align: right; position: absolute; top: 50%; margin-top: -10px; } .cpac_message .hide-notice { right: 8px; text-decoration: none; width: 32px; text-align: right; position: absolute; top: 50%; height: 32px; margin-top: -16px; } .cpac_message .hide-notice:before { display: block; content: '\f335'; font-family: 'Dashicons'; margin: .5em 0; padding: 2px; } </style> <script type="text/javascript"> jQuery( function( $ ) { $( document ).ready( function() { $( '.updated a.hide-install-addons-notice' ).click( function( e ) { e.preventDefault(); var el = $( this ).parents( '.cpac_message' ); var el_close = el.find( '.hide-notice' ); el_close.hide(); el_close.after( '<div class="spinner right"></div>' ); el.find( '.spinner' ).show(); $.post( ajaxurl, { 'action': 'cpac_hide_install_addons_notice' }, function( data ) { el.find( '.spinner' ).remove(); el.slideUp(); } ); return false; } ); } ); } ); </script> <?php } }
/** * @since 1.0 */ public function display() { if ($this->welcome_screen()) { return; } $tabs = array('general' => __('Admin Columns', 'codepress-admin-columns'), 'settings' => __('Settings', 'codepress-admin-columns'), 'addons' => __('Add-ons', 'codepress-admin-columns')); /** * Filter the tabs on the settings screen * * @param array $tabs Available tabs */ $tabs = apply_filters('cac/settings/tabs', $tabs); $current_tab = empty($_GET['tab']) ? 'general' : sanitize_text_field(urldecode($_GET['tab'])); ?> <div id="cpac" class="wrap"> <?php screen_icon('codepress-admin-columns'); ?> <h2 class="nav-tab-wrapper cpac-nav-tab-wrapper"> <?php foreach ($tabs as $name => $label) { ?> <a href="<?php echo $this->get_settings_url('admin') . "&tab={$name}"; ?> " class="nav-tab<?php if ($current_tab == $name) { echo ' nav-tab-active'; } ?> "><?php echo $label; ?> </a> <?php } ?> </h2> <?php do_action('cpac_messages'); ?> <?php switch ($current_tab) { case 'general': $storage_model = $this->get_settings_storage_model(); $has_been_stored = $storage_model->get_stored_columns() ? true : false; // columns should not be editable when layout isn't if ($layout = $storage_model->get_layout_object()) { if (isset($layout->not_editable)) { $storage_model->enable_php_export(); } } // Grouped storage models $grouped = array(); foreach (cpac()->get_storage_models() as $_storage_model) { $grouped[$_storage_model->get_menu_type()][] = (object) array('key' => $_storage_model->key, 'link' => $_storage_model->settings_url(), 'label' => $_storage_model->label); usort($grouped[$_storage_model->get_menu_type()], array($this, 'sort_by_label')); } ?> <?php do_action('cac/settings/after_menu'); ?> <div class="columns-container<?php echo $has_been_stored ? ' stored' : ''; ?> " data-type="<?php echo $storage_model->key; ?> " data-layout="<?php echo $storage_model->get_layout(); ?> "> <div class="main"> <div class="menu"> <select id="cpac_storage_modal_select"> <?php foreach ($grouped as $menu_type => $models) { ?> <optgroup label="<?php echo esc_attr($menu_type); ?> "> <?php foreach ($models as $model) { ?> <option value="<?php echo esc_attr($model->link); ?> " <?php selected($model->key, $storage_model->key); ?> ><?php echo esc_html($model->label); ?> </option> <?php } ?> </optgroup> <?php } ?> </select> <span class="spinner"></span> <?php $storage_model->screen_link(); ?> </div> <?php do_action('cac/settings/after_title', $storage_model); ?> </div> <div class="columns-right"> <div class="columns-right-inside"> <?php if (!$storage_model->is_using_php_export()) { ?> <div class="sidebox form-actions"> <?php $label = __('Store settings', 'codepress-admin-columns'); ?> <h3> <span class="left"><?php echo $label; ?> </span> <?php if (18 > strlen($label) && ($truncated_label = $storage_model->get_truncated_side_label($label))) { ?> <span class="right contenttype"><?php echo esc_html($truncated_label); ?> </span> <?php } else { ?> <span class="clear contenttype"><?php echo esc_html($storage_model->label); ?> </span> <?php } ?> </h3> <div class="form-update"> <a href="javascript:;" class="button-primary submit update"><?php _e('Update'); ?> </a> <a href="javascript:;" class="button-primary submit save"><?php _e('Save'); ?> </a> </div> <form class="form-reset" method="post"> <input type="hidden" name="cpac_key" value="<?php echo $storage_model->key; ?> "/> <input type="hidden" name="cpac_action" value="restore_by_type"/> <input type="hidden" name="cpac_layout" value="<?php echo $storage_model->layout; ?> "/> <?php wp_nonce_field('restore-type', '_cpac_nonce'); ?> <?php $onclick = $this->cpac->use_delete_confirmation() ? ' onclick="return confirm(\'' . esc_attr(addslashes(sprintf(__("Warning! The %s columns data will be deleted. This cannot be undone. 'OK' to delete, 'Cancel' to stop", 'codepress-admin-columns'), "'" . $storage_model->get_label_or_layout_name() . "'"))) . '\');"' : ''; ?> <input class="reset-column-type" type="submit"<?php echo $onclick; ?> value="<?php _e('Restore columns', 'codepress-admin-columns'); ?> "> <span class="spinner"></span> </form> <?php do_action('cac/settings/form_actions', $storage_model); ?> </div><!--form-actions--> <?php } ?> <?php do_action('cac/settings/sidebox', $storage_model); ?> <?php if (!cpac_is_pro_active()) { ?> <?php $url_args = array('utm_source' => 'plugin-installation', 'utm_medium' => 'banner', 'utm_campaign' => 'plugin-installation'); ?> <div class="sidebox" id="pro-version"> <div class="padding-box cta"> <h3> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'title')), ac_get_site_url()); ?> "><?php _e('Get Admin Columns Pro', 'codepress-admin-columns'); ?> </a> </h3> <div class="inside"> <ul> <li> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'usp-sorting')), ac_get_site_url() . '/upgrade-to-admin-columns-pro/'); ?> "><?php _e('Add Sorting', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'usp-filtering')), ac_get_site_url() . '/upgrade-to-admin-columns-pro/'); ?> "><?php _e('Add Filtering', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'usp-import-export')), ac_get_site_url() . '/upgrade-to-admin-columns-pro/'); ?> "><?php _e('Add Import/Export', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'usp-editing')), ac_get_site_url() . '/upgrade-to-admin-columns-pro/'); ?> "><?php _e('Add Inline Edit', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array_merge($url_args, array('utm_content' => 'usp-columns-sets')), ac_get_site_url() . '/upgrade-to-admin-columns-pro/'); ?> "><?php _e('Multiple Column Sets', 'codepress-admin-columns'); ?> </a> </li> </ul> <p> <?php printf(__("Check out <a href='%s'>Admin Columns Pro</a> for more details!", 'codepress-admin-columns'), add_query_arg(array_merge($url_args, array('utm_content' => 'cta')), ac_get_site_url())); ?> </p> </div> </div> </div> <div class="sidebox" id="direct-feedback"> <div id="feedback-choice"> <h3><?php _e('Are you happy with Admin Columns?', 'codepress-admin-columns'); ?> </h3> <div class="inside"> <a href="#" class="yes">Yes</a> <a href="#" class="no">No</a> </div> </div> <div id="feedback-support"> <div class="inside"> <p><?php _e("What's wrong? Need help? Let us know!", 'codepress-admin-columns'); ?> </p> <p><?php _e('Check out our extensive documentation, or you can open a support topic on WordPress.org!', 'codepress-admin-columns'); ?> </p> <ul class="share"> <li> <a href="<?php echo add_query_arg(array('utm_source' => 'plugin-installation', 'utm_medium' => 'feedback-docs-button', 'utm_campaign' => 'plugin-installation'), $this->get_url('documentation')); ?> " target="_blank"> <div class="dashicons dashicons-editor-help"></div> <?php _e('Docs', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="https://wordpress.org/support/plugin/codepress-admin-columns" target="_blank"> <div class="dashicons dashicons-wordpress"></div> <?php _e('Forums', 'codepress-admin-columns'); ?> </a> </li> </ul> <div class="clear"></div> </div> </div> <div id="feedback-rate"> <div class="inside"> <p><?php _e("Woohoo! We're glad to hear that!", 'codepress-admin-columns'); ?> </p> <p><?php _e('We would really love it if you could show your appreciation by giving us a rating on WordPress.org or tweet about Admin Columns!', 'codepress-admin-columns'); ?> </p> <ul class="share"> <li> <a href="http://wordpress.org/support/view/plugin-reviews/codepress-admin-columns#postform" target="_blank"> <div class="dashicons dashicons-star-empty"></div> <?php _e('Rate', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array('hashtags' => 'admincolumns', 'text' => urlencode("I'm using Admin Columns for WordPress!"), 'url' => urlencode('http://wordpress.org/plugins/codepress-admin-columns/'), 'via' => 'wpcolumns'), 'https://twitter.com/intent/tweet'); ?> " target="_blank"> <div class="dashicons dashicons-twitter"></div> <?php _e('Tweet', 'codepress-admin-columns'); ?> </a> </li> <li> <a href="<?php echo add_query_arg(array('utm_source' => 'plugin-installation', 'utm_medium' => 'feedback-purchase-button', 'utm_campaign' => 'plugin-installation'), ac_get_site_url()); ?> " target="_blank"> <div class="dashicons dashicons-cart"></div> <?php _e('Buy Pro', 'codepress-admin-columns'); ?> </a> </li> </ul> <div class="clear"></div> </div> </div> </div> <?php } ?> <div class="sidebox" id="plugin-support"> <h3><?php _e('Support', 'codepress-admin-columns'); ?> </h3> <div class="inside"> <?php if (version_compare(get_bloginfo('version'), '3.2', '>')) { ?> <p><?php _e('Check the <strong>Help</strong> section in the top-right screen.', 'codepress-admin-columns'); ?> </p> <?php } ?> <p> <?php printf(__("For full documentation, bug reports, feature suggestions and other tips <a href='%s'>visit the Admin Columns website</a>", 'codepress-admin-columns'), $this->get_url('documentation')); ?> </p> </div> </div><!--plugin-support--> </div><!--.columns-right-inside--> </div><!--.columns-right--> <div class="columns-left"> <?php if (!$storage_model->get_default_stored_columns() && !$storage_model->is_using_php_export()) { ?> <div class="cpac-notice"> <p> <?php echo sprintf(__('Please visit the %s screen once to load all available columns', 'codepress-admin-columns'), "<a href='" . $storage_model->get_link() . "'>" . esc_html($storage_model->label) . "</a>"); ?> </p> </div> <?php } ?> <?php $this->messages(); ?> <div class="ajax-message"><p></p></div> <?php if ($storage_model->is_using_php_export()) { ?> <div class="notice notice-warning below-h2"> <p><?php printf(__('The columns for %s are set up via PHP and can therefore not be edited', 'codepress-admin-columns'), '<strong>' . $storage_model->label . '</strong>'); ?> </p> </div> <?php } ?> <div class="cpac-boxes<?php echo $storage_model->is_using_php_export() ? ' disabled' : ''; ?> "> <div class="cpac-columns"> <form method="post" action="<?php echo $storage_model->get_edit_link(); ?> "> <input type="hidden" name="cpac_key" value="<?php echo $storage_model->key; ?> "/> <input type="hidden" name="cpac_action" value="update_by_type"/> <input type="hidden" name="cpac_layout" value="<?php echo $storage_model->layout; ?> "/> <?php do_action('cac/settings/form_columns', $storage_model); ?> <?php wp_nonce_field('update-type', '_cpac_nonce'); ?> <?php foreach ($storage_model->get_columns() as $column) { $column->display(); } ?> </form> </div><!--.cpac-columns--> <div class="column-footer"> <?php if (!$storage_model->is_using_php_export()) { ?> <div class="order-message"> <?php _e('Drag and drop to reorder', 'codepress-admin-columns'); ?> </div> <div class="button-container"> <a href="javascript:;" class="add_column button-primary">+ <?php _e('Add Column', 'codepress-admin-columns'); ?> </a> <?php /*<a href="javascript:;" class="button-primary submit update"><?php _e( 'Update' ); ?></a>*/ ?> <?php /*<a href="javascript:;" class="button-primary submit save"><?php _e( 'Save' ); ?></a>*/ ?> </div> <?php } ?> </div><!--.cpac-column-footer--> </div><!--.cpac-boxes--> <?php do_action('cac/settings/after_columns', $storage_model); ?> </div><!--.columns-left--> <div class="clear"></div> <div class="for-cloning-only" style="display:none"> <?php foreach ($storage_model->get_column_types() as $column) { $column->display(); } ?> </div> </div><!--.columns-container--> <div class="clear"></div> <?php break; case 'settings': $this->display_settings(); break; case 'addons': $this->tab_addons(); break; default: /** * Action to add tab contents * */ do_action('cac/settings/tab_contents/tab=' . $current_tab); } ?> </div><!--.wrap--> <?php }
/** * @since 2.3.4 */ public function get_storage_model() { return cpac()->get_storage_model($this->storage_model); }