File "settings.php"

Full Path: /www/wwwroot/shphe-en.com/wp-content/plugins/admin-columns-pro/codepress-admin-columns/classes/settings.php
File size: 37.13 KB
MIME-type: --
Charset: utf-8

<?php

/**
 * CPAC_Settings Class
 *
 * @since 2.0
 */
class CPAC_Settings {

	/**
	 * CPAC class
	 *
	 * @since 2.0
	 */
	private $cpac;

	/**
	 * Settings Page
	 *
	 * @since 2.0
	 */
	private $settings_page;

	/**
	 * @since 2.0
	 * @param object CPAC
	 */
	function __construct( $cpac ) {

		$this->cpac = $cpac;

		// register settings
		add_action( 'admin_menu', array( $this, 'settings_menu' ) );

		// handle requests gets a low priority so it will trigger when all other plugins have loaded their columns
		add_action( 'admin_init', array( $this, 'handle_column_request' ), 1000 );

		add_action( 'wp_ajax_cpac_column_refresh', array( $this, 'ajax_column_refresh' ) );

		add_action( 'cpac_messages', array( $this, 'maybe_display_addon_statuschange_message' ) );
	}

	/**
	 * @since 3.1.1
	 */
	public function get_settings_page() {
		return $this->settings_page;
	}

	/**
	 * Get available Admin Columns admin page URLs
	 *
	 * @since 2.2
	 * @return array Available settings URLs ([settings_page] => [url])
	 */
	public function get_settings_urls() {

		/**
		 * Filter the URLs for the different settings screens available in admin columns
		 *
		 * @since 2.2
		 *
		 * @param array $settings_urls Available settings URLs ([settings_page] => [url])
		 * @param CPAC_Settings $settings_instance Settings class instance
		 */
		$settings_urls = apply_filters( 'cac/settings/settings_urls', array(
			'admin'				=> admin_url( 'options-general.php?page=codepress-admin-columns' ),
			'settings'			=> admin_url( 'options-general.php?page=codepress-admin-columns&tab=settings' ),
			'network_settings'	=> network_admin_url( 'settings.php?page=codepress-admin-columns' ),
			'info'				=> admin_url( 'options-general.php?page=codepress-admin-columns&info=' ),
			'upgrade'			=> admin_url( 'options-general.php?page=cpac-upgrade' )
		), $this );

		return $settings_urls;
	}

	/**
	 * Get the settings URL for a page
	 *
	 * @since 2.2
	 * @param string $page Optional. Admin page to get the URL from. Defaults to the basic Admin Columns page
	 * @return string Settings page URL
	 */
	public function get_settings_url( $page = '' ) {

		$settings_urls = $this->get_settings_urls();

		if ( isset( $settings_urls[ $page ] ) ) {
			return $settings_urls[ $page ];
		}

		if ( ! $page ) {
			return $settings_urls['admin'];
		}

		return add_query_arg( 'tab', $page, $this->get_settings_url() );
	}

	/**
	 * Display an activation/deactivation message on the addons page if applicable
	 *
	 * @since 2.2
	 */
	public function maybe_display_addon_statuschange_message() {

		if ( empty( $_REQUEST['tab'] ) || $_REQUEST['tab'] != 'addons' ) {
			return;
		}

		$message = '';

		if ( ! empty( $_REQUEST['activate'] ) ) {
			$message = __( 'Add-on successfully activated.', 'codepress-admin-columns' );
		}
		else if ( ! empty( $_REQUEST['deactivate'] ) ) {
			$message = __( 'Add-on successfully deactivated.', 'codepress-admin-columns' );
		}

		if ( ! $message ) {
			return;
		}
		?>
		<div class="updated cac-notification below-h2">
			<p><?php echo $message; ?></p>
		</div>
		<?php
	}

	/**
	 * @since 2.2
	 */
	public function ajax_column_refresh() {
		if ( ! empty( $_POST['formdata'] ) && ! empty( $_POST['column'] ) ) {
			parse_str( $_POST['formdata'], $formdata );
			$storagemodel_key = ! empty( $formdata['cpac_key'] ) ? $formdata['cpac_key'] : '';

			if ( $storagemodel_key && ! empty( $formdata[ $storagemodel_key ][ $_POST['column'] ] ) ) {
				$columndata = $formdata[ $formdata['cpac_key'] ][ $_POST['column'] ];
				$storage_model = $this->cpac->get_storage_model( $formdata['cpac_key'] );
				$registered_columns = $storage_model->get_registered_columns();

				if ( in_array( $columndata['type'], array_keys( $registered_columns ) ) ) {
					$column = clone $registered_columns[ $columndata['type'] ];
					$column->set_clone( $columndata['clone'] );

					foreach ( $columndata as $optionname => $optionvalue ) {
						$column->set_options( $optionname, $optionvalue );
					}

					$column->sanitize_label();

					$columns = array( $column->properties->name => $column );

					do_action( 'cac/columns', $columns );
					do_action( "cac/columns/storage_key={$storagemodel_key}", $columns );

					$column->display();
				}
			}
		}

		exit;
	}

	/**
	 * @since 1.0
	 */
	public function settings_menu() {
		// add settings page
		$this->settings_page = add_submenu_page( 'options-general.php', __( 'Admin Columns Settings', 'codepress-admin-columns' ), __( 'Admin Columns', 'codepress-admin-columns' ), 'manage_admin_columns', 'codepress-admin-columns', array( $this, 'display' ), false, 98 );

		// add help tabs
		add_action( "load-{$this->settings_page}", array( $this, 'help_tabs' ) );

		// register setting
		register_setting( 'cpac-general-settings', 'cpac_general_options' );

		// add cap to options.php
   		add_filter( 'option_page_capability_cpac-general-settings', array( $this, 'add_capability' ) );

		$this->enqueue_admin_scripts();
	}

	/**
	 * Print scripts and styles
	 *
	 * @since 2.4.7
	 */
	public function enqueue_admin_scripts() {
		add_action( 'admin_print_styles-' . $this->settings_page, array( $this, 'admin_styles' ) );
		add_action( 'admin_print_scripts-' . $this->settings_page, array( $this, 'admin_scripts' ) );
	}

	/**
	 * Allows the capaiblity 'manage_admin_columns' to store data through /wp-admin/options.php
	 *
	 * @since 2.0
	 */
	public function add_capability() {
		return 'manage_admin_columns';
	}

	/**
	 * @since 1.0
	 */
	public function admin_styles() {
		$minified = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';

		wp_enqueue_style( 'wp-pointer' );
		wp_enqueue_style( 'jquery-ui-lightness', CPAC_URL . 'assets/ui-theme/jquery-ui-1.8.18.custom.css', array(), CPAC_VERSION, 'all' );
		wp_enqueue_style( 'cpac-admin', CPAC_URL . "assets/css/admin-column{$minified}.css", array(), CPAC_VERSION, 'all' );
	}

	/**
	 * @since 1.0
	 */
	public function admin_scripts() {

		wp_enqueue_script( 'wp-pointer' );
		wp_enqueue_script( 'jquery-ui-slider' );

		$minified = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min';

		wp_enqueue_script( 'cpac-admin-settings', CPAC_URL . "assets/js/admin-settings{$minified}.js", array( 'jquery', 'dashboard', 'jquery-ui-slider', 'jquery-ui-sortable' ), CPAC_VERSION );

		// javascript translations
		wp_localize_script( 'cpac-admin-settings', 'cpac_i18n', array(
			'clone'	=> __( '%s column is already present and can not be duplicated.', 'codepress-admin-columns' ),
		));
	}

	/**
	 * @since 1.0
	 */
	public function handle_column_request() {

		// only handle updates from the admin columns page
		if ( ! ( isset($_GET['page'] ) && in_array( $_GET['page'], array( 'codepress-admin-columns' ) ) && isset( $_REQUEST['cpac_action'] ) ) ) {
			return false;
		}

		// use $_REQUEST because the values are send both over $_GET and $_POST
		$action = isset( $_REQUEST['cpac_action'] ) ? $_REQUEST['cpac_action'] 	: '';
		$nonce  = isset( $_REQUEST['_cpac_nonce'] ) ? $_REQUEST['_cpac_nonce'] 	: '';
		$key 	= isset( $_REQUEST['cpac_key'] ) 	? $_REQUEST['cpac_key'] 	: '';

		switch ( $action ) :

			case 'update_by_type' :
				if ( wp_verify_nonce( $nonce, 'update-type' ) && $key ) {
					if ( $storage_model = $this->cpac->get_storage_model( $key ) ) {
						$storage_model->store();
					}
				}
				break;

			case 'restore_by_type' :
				if ( wp_verify_nonce( $nonce, 'restore-type' ) && $key ) {
					if ( $storage_model = $this->cpac->get_storage_model( $key ) ) {
						$storage_model->restore();
					}
				}
				break;

			case 'restore_all' :
				if ( wp_verify_nonce( $nonce, 'restore-all' ) ) {
					$this->restore_all();
				}
				break;

		endswitch;
	}

	/**
	 * Restore all column defaults
	 *
	 * @since 1.0
	 */
	private function restore_all() {
		global $wpdb;

		$wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE 'cpac_options_%'" );

		cpac_admin_message( __( 'Default settings succesfully restored.',  'codepress-admin-columns' ), 'updated' );
	}

	/**
	 * Add help tabs to top menu
	 *
	 * @since 1.3.0
	 */
	public function help_tabs() {

		$screen = get_current_screen();

		if ( ! method_exists( $screen,'add_help_tab' ) )
			return;

		$tabs = array(
			array(
				'title'		=> __( "Overview", 'codepress-admin-columns' ),
				'content'	=>
					"<h5>Admin Columns</h5>
					<p>". __( "This plugin is for adding and removing additional columns to the administration screens for post(types), pages, media library, comments, links and users. Change the column's label and reorder them.", 'codepress-admin-columns' ) . "</p>"
			),
			array(
				'title'		=> __( "Basics", 'codepress-admin-columns' ),
				'content'	=> "
					<h5>" 	. __( "Change order", 'codepress-admin-columns' ) . "</h5>
					<p>" 	. __( "By dragging the columns you can change the order which they will appear in.", 'codepress-admin-columns' ) . "</p>
					<h5>" 	. __( "Change label", 'codepress-admin-columns' ) . "</h5>
					<p>" 	. __( "By clicking on the triangle you will see the column options. Here you can change each label of the columns heading.", 'codepress-admin-columns' ) . "</p>
					<h5>" 	. __( "Change column width", 'codepress-admin-columns' ) . "</h5>
					<p>" 	. __( "By clicking on the triangle you will see the column options. By using the draggable slider you can set the width of the columns in percentages.", 'codepress-admin-columns' ) . "</p>
				"
			),
			array(
				'title'		=> __( "Custom Field", 'codepress-admin-columns' ),
				'content'	=>
					"<h5>". __( "'Custom Field' column", 'codepress-admin-columns' ) . "</h5>
					<p>". __( "The custom field colum uses the custom fields from posts and users. There are 10 types which you can set.", 'codepress-admin-columns' ) . "</p>
					<ul>
						<li><strong>". __( "Default", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: Can be either a string or array. Arrays will be flattened and values are seperated by a ',' comma.", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Image", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: should contain an image URL or Attachment IDs ( seperated by a ',' comma ).", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Excerpt", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: This will show the first 20 words of the Post content.", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Multiple Values", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: should be an array. This will flatten any ( multi dimensional ) array.", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Numeric", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: Integers only.<br/>If you have the 'sorting addon' this will be used for sorting, so you can sort your posts on numeric (custom field) values.", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Date", 'codepress-admin-columns' ) . "</strong><br/>". sprintf( __( "Value: Can be unix time stamp or a date format as described in the <a href='%s'>Codex</a>. You can change the outputted date format at the <a href='%s'>general settings</a> page.", 'codepress-admin-columns' ), 'http://codex.wordpress.org/Formatting_Date_and_Time', get_admin_url() . 'options-general.php' ) . "</li>
						<li><strong>". __( "Post Titles", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: can be one or more Post ID's (seperated by ',').", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Usernames", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: can be one or more User ID's (seperated by ',').", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Checkmark", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: should be a 1 (one) or 0 (zero).", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Color", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: hex value color, such as #808080.", 'codepress-admin-columns' ) . "</li>
						<li><strong>". __( "Counter", 'codepress-admin-columns' ) . "</strong><br/>". __( "Value: Can be either a string or array. This will display a count of the number of times the meta key is used by the item.", 'codepress-admin-columns' ) . "</li>
					</ul>
				"
			)
		);

		foreach ( $tabs as $k => $tab ) {
			$screen->add_help_tab( array(
				'id'		=> 'cpac-tab-'.$k,
				'title'		=> $tab['title'],
				'content'	=> $tab['content'],
			));
		}
	}

	/**
	 * @since 1.0
	 * @param string $storage_model URL type.
	 * @return string Url.
	 */
	public function get_url( $type ) {

		$site_url = 'http://www.admincolumns.com';

		$urls = array(
			'main'				=> $site_url,
			'pricing'			=> $site_url . '/pricing-purchase/',
			'codepress'			=> 'http://www.codepresshq.com',
			'admincolumns'		=> $site_url,
			'admincolumnspro'	=> $site_url,
			'documentation'		=> $site_url . '/documentation/',
			'feedback'			=> 'http://www.codepresshq.com/contact',
			'plugins'			=> 'http://wordpress.org/extend/plugins/codepress-admin-columns/',
			'support'			=> 'http://wordpress.org/tags/codepress-admin-columns/',
		);

		if ( ! isset( $urls[ $type ] ) )
			return false;

		return $urls[ $type ];
	}

	/**
	 * @since 2.0
	 */
	public function uses_custom_fields() {

		$old_columns = get_option('cpac_options');

		if ( empty( $old_columns['columns'] ) ) return false;

		foreach ( $old_columns['columns'] as $columns ) {
			foreach ( $columns as $id => $values ) {
				if ( strpos( $id, 'column-meta-' ) !== false )
					return true;
			}
		}

		return false;
	}

	/**
	 * Welcome screen
	 *
	 * @since 2.0
	 */
	public function welcome_screen() {

		// Should only be set after upgrade
		$show_welcome = false !== get_transient('cpac_show_welcome');

		// Should only be set manual
		if ( isset( $_GET['info'] ) ) {
			$show_welcome = true;
		}

		if ( ! $show_welcome ) {
			return false;
		}

		// Set check that welcome should not be displayed.
		delete_transient('cpac_show_welcome');

		$tab = !empty( $_GET['info'] ) ? $_GET['info'] : 'whats-new';

		?>

		<div id="cpac-welcome" class="wrap about-wrap">

			<h1><?php _e( "Welcome to Admin Columns", 'codepress-admin-columns' ); ?> <?php echo CPAC_VERSION; ?></h1>

			<div class="about-text">
				<?php _e( "Thank you for updating to the latest version!", 'codepress-admin-columns' ); ?>
				<?php _e( "Admin Columns is more polished and enjoyable than ever before. We hope you like it.", 'codepress-admin-columns' ); ?>
			</div>

			<div class="cpac-content-body">
				<h2 class="nav-tab-wrapper">
					<a class="cpac-tab-toggle nav-tab <?php if( $tab == 'whats-new' ){ echo 'nav-tab-active'; } ?>" href="<?php echo $this->get_settings_url( 'info' ); ?>whats-new"><?php _e( "What’s New", 'codepress-admin-columns' ); ?></a>
					<a class="cpac-tab-toggle nav-tab <?php if( $tab == 'changelog' ){ echo 'nav-tab-active'; } ?>" href="<?php echo $this->get_settings_url( 'info' ); ?>changelog"><?php _e( "Changelog", 'codepress-admin-columns' ); ?></a>
				</h2>

			<?php if ( 'whats-new' === $tab ) : ?>

				<h3><?php _e( "Important", 'codepress-admin-columns' ); ?></h3>

				<h4><?php _e( "Database Changes", 'codepress-admin-columns' ); ?></h4>
				<p><?php _e("The database has been changed between versions 1 and 2. But we made sure you can still roll back to version 1x without any issues.", 'codepress-admin-columns' ); ?></p>

			<?php if ( get_option( 'cpac_version', false ) < CPAC_UPGRADE_VERSION ) : ?>
				<p><?php _e("Make sure you backup your database and then click", 'codepress-admin-columns' ); ?> <a href="<?php echo $this->get_settings_url( 'upgrade' ); ?>" class="button-primary"><?php _e( "Upgrade Database", 'codepress-admin-columns' );?></a></p>
			<?php endif; ?>

				<h4><?php _e( "Potential Issues", 'codepress-admin-columns' ); ?></h4>
				<p><?php _e( "Do to the sizable refactoring the code, surounding Addons and action/filters, your website may not operate correctly. It is important that you read the full", 'codepress-admin-columns' ); ?> <a href="<?php echo $this->get_url('admincolumns'); ?>migrating-from-v1-to-v2" target="_blank"><?php _e( "Migrating from v1 to v2", 'codepress-admin-columns' ); ?></a> <?php _e( "guide to view the full list of changes.", 'codepress-admin-columns' ); ?> <?php printf( __( "When you have found a bug please <a href='%s'>report them to us</a> so we can fix it in the next release.", 'codepress-admin-columns'), 'mailto:info@codepress.nl' ); ?></p>

				<div class="cpac-alert cpac-alert-error">
					<p><strong><?php _e( "Important!", 'codepress-admin-columns' ); ?></strong> <?php _e( "If you updated the Admin Columns plugin without prior knowledge of such changes, Please roll back to the latest", 'codepress-admin-columns' ); ?> <a href="http://downloads.wordpress.org/plugin/codepress-admin-columns.1.4.9.zip"> <?php _e( "version 1", 'codepress-admin-columns' ); ?></a> <?php _e( "of this plugin.", 'codepress-admin-columns' ); ?></p>
				</div>

			<?php endif; ?>
			<?php if ( 'changelog' === $tab ) : ?>

				<h3><?php _e("Changelog for", 'codepress-admin-columns'); ?> <?php echo CPAC_VERSION; ?></h3>
				<?php

				$items = file_get_contents( CPAC_DIR . 'readme.txt' );
				$items = explode('= ' . CPAC_VERSION . ' =', $items);
				$items = end( $items );
				$items = current( explode("\n\n", $items) );
				$items = current( explode("= ", $items) );
				$items = array_filter( array_map('trim', explode("*", $items)) );

				?>
				<ul class="cpac-changelog">
				<?php foreach( $items as $item ) :
					$item = explode('http', $item);
				?>
					<li><?php echo $item[0]; ?><?php if( isset($item[1]) ): ?><a href="http<?php echo $item[1]; ?>" target="_blank"><?php _e("Learn more", 'codepress-admin-columns'); ?></a><?php endif; ?></li>
				<?php endforeach; ?>
				</ul>

			<?php endif; ?>
				<hr/>

			</div><!--.cpac-content-body-->

			<div class="cpac-content-footer">
				<a class="button-primary button-large" href="<?php echo $this->get_settings_url( 'general' ); ?>"><?php _e("Start using Admin Columns", 'codepress-admin-columns' ); ?></a>
			</div><!--.cpac-content-footer-->

		</div>
		<?php

		return true;
	}

	/**
	 * @since 1.0
	 */
	public function display_settings() {
	?>
		<table class="form-table cpac-form-table settings">
			<tbody>

				<tr class="general">
					<th scope="row">
						<h3><?php _e( 'General Settings', 'codepress-admin-columns' ); ?></h3>
						<p><?php _e( 'Customize your Admin Columns settings.', 'codepress-admin-columns' ); ?></p>
					</th>
					<td class="padding-22">
						<div class="cpac_general">
							<form method="post" action="options.php">
								<?php settings_fields( 'cpac-general-settings' ); ?>
								<?php $options = get_option( 'cpac_general_options' ); ?>
								<p>
									<label for="show_edit_button">
										<input name="cpac_general_options[show_edit_button]" type="hidden" value="0" >
										<input name="cpac_general_options[show_edit_button]" id="show_edit_button" type="checkbox" value="1" <?php checked( ! isset( $options['show_edit_button'] ) || ( '1' == $options['show_edit_button'] ) ); ?>>
										<?php _e( "Show \"Edit Columns\" button on admin screens. Default is <code>on</code>.", 'codepress-admin-columns' ); ?>
									</label>
								</p>

								<?php do_action( 'cac/settings/general', $options ); ?>

								<p>
									<input type="submit" class="button" value="<?php _e( 'Save' ); ?>" />
								</p>
							</form>
						</div>
					</td>
				</tr><!--.general-->

				<?php

				/** Allow plugins to add their own custom settings to the settings page. */
				if ( $groups = apply_filters( 'cac/settings/groups', array() ) ) {

					foreach ( $groups as $id => $group ) {

						$title 			= isset( $group['title'] ) ? $group['title'] : '';
						$description 	= isset( $group['description'] ) ? $group['description'] : '';

						?>
				<tr>
					<th scope="row">
						<h3><?php echo $title; ?></h3>
						<p><?php echo $description; ?></p>
					</th>
					<td class="padding-22">
						<?php

						/** Use this Hook to add additonal fields to the group */
						do_action( "cac/settings/groups/row={$id}" );

						?>
					</td>
				</tr>
						<?php
					}
				}

				?>

				<tr class="restore">
					<th scope="row">
						<h3><?php _e( 'Restore Settings', 'codepress-admin-columns' ); ?></h3>
						<p><?php _e( 'This will delete all column settings and restore the default settings.', 'codepress-admin-columns' ); ?></p>
					</th>
					<td class="padding-22">
						<form method="post" action="">
							<?php wp_nonce_field( 'restore-all','_cpac_nonce'); ?>
							<input type="hidden" name="cpac_action" value="restore_all" />
							<input type="submit" class="button" name="cpac-restore-defaults" value="<?php _e( 'Restore default settings', 'codepress-admin-columns' ) ?>" onclick="return confirm('<?php _e("Warning! ALL saved admin columns data will be deleted. This cannot be undone. \'OK\' to delete, \'Cancel\' to stop", 'codepress-admin-columns' ); ?>');" />
						</form>
					</td>
				</tr><!--.restore-->

			</tbody>
		</table>

	<?php
	}

	/**
	 * @since 2.4.1
	 */
	private function get_menu_types() {
		$menu_types = array(
			'post' => __( 'Posttypes', 'codepress-admin-columns' ),
			'other' => __( 'Others', 'codepress-admin-columns' ),
			'taxonomy' => __( 'Taxonomies', 'codepress-admin-columns' ),
		);
		return apply_filters( 'cac/menu_types', $menu_types );
	}

	/**
	 * @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' ) . "&amp;tab={$name}"; ?>" class="nav-tab<?php if( $current_tab == $name ) echo ' nav-tab-active'; ?>"><?php echo $label; ?></a>
				<?php endforeach; ?>
			</h2>

			<?php do_action( 'cpac_messages' ); ?>

			<?php
			switch ( $current_tab ) :
				case 'general':

					$post_types = array_values( $this->cpac->get_post_types() );
					$first = array_shift( $post_types );

					$storage_models_by_type = array();
					foreach ( $this->cpac->storage_models as $k => $storage_model ) {
						$storage_models_by_type[ $storage_model->menu_type ][ $k ] = $storage_model;
					}

					?>
					<div class="cpac-menu">
					<?php
					foreach ( $this->get_menu_types() as $menu_type => $label ) {
						if ( ! empty( $storage_models_by_type[ $menu_type ] ) ) {
							$count = 0; ?>
							<ul class="subsubsub">
								<li class="first"><?php echo $label; ?>: </li>
							<?php foreach ( $storage_models_by_type[ $menu_type ] as $storage_model ) : ?>
								<li><?php echo $count++ != 0 ? ' | ' : ''; ?><a href="#cpac-box-<?php echo $storage_model->key; ?>" <?php echo $storage_model->is_menu_type_current( $first ) ? ' class="current"' : '';?> ><?php echo $storage_model->label; ?></a></li>
							<?php endforeach; ?>
							</ul>
						<?php
						}
					}
					?>
					</div>

					<?php do_action( 'cac/settings/after_menu' ); ?>

					<?php $count = 0; ?>
					<?php foreach ( $this->cpac->storage_models as $storage_model ) : ?>
						<div class="columns-container" data-type="<?php echo $storage_model->key ?>"<?php echo $storage_model->is_menu_type_current( $first ) ? '' : ' style="display:none"'; ?>>

							<div class="columns-left">
								<div id="titlediv">
									<h2>
										<?php echo $storage_model->label; ?>
										<?php $storage_model->screen_link(); ?>
									</h2>
								</div>

								<?php if ( $storage_model->is_using_php_export() ) : ?>
									<div class="error below-h2">
										<p><?php printf( __( 'The columns for %s are set up via PHP and can therefore not be edited in the admin panel.', 'codepress-admin-columns' ), '<strong>' . $storage_model->label . '</strong>' ); ?></p>
									</div>
								<?php endif; ?>
							</div>

							<div class="columns-right">
								<div class="columns-right-inside">
									<?php if ( ! $storage_model->is_using_php_export() ) : ?>
										<div class="sidebox" id="form-actions">
											<h3>
												<?php _e( 'Store settings', 'codepress-admin-columns' ) ?>
											</h3>
											<?php $has_been_stored = $storage_model->get_stored_columns() ? true : false; ?>
											<div class="form-update">
												<a href="javascript:;" class="button-primary submit-update"><?php echo $has_been_stored ? __( 'Update' ) : __('Save'); ?> <?php echo $storage_model->label; ?></a>
											</div>
											<?php if ( $has_been_stored ) : ?>
											<div class="form-reset">
												<a href="<?php echo add_query_arg( array( '_cpac_nonce' => wp_create_nonce('restore-type'), 'cpac_key' => $storage_model->key, 'cpac_action' => 'restore_by_type' ), $this->get_settings_url( 'admin' ) ); ?>" class="reset-column-type" onclick="return confirm('<?php printf( __( "Warning! The %s columns data will be deleted. This cannot be undone. \'OK\' to delete, \'Cancel\' to stop", 'codepress-admin-columns' ), $storage_model->label ); ?>');">
													<?php _e( 'Restore', 'codepress-admin-columns' ); ?> <?php echo $storage_model->label; ?> <?php _e( 'columns', 'codepress-admin-columns' ); ?>
												</a>
											</div>
											<?php endif; ?>

											<?php do_action( 'cac/settings/form_actions', $storage_model ); ?>

										</div><!--form-actions-->
									<?php endif; ?>

									<?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' ) ), $this->get_url( 'admincolumnspro' ) ); ?>"><?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' ) ), $this->get_url( 'admincolumnspro' ) ) ?>"><?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' ) ), $this->get_url( 'admincolumnspro' ) ) ?>"><?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' ) ), $this->get_url( 'admincolumnspro' ) ) ?>"><?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' ) ), $this->get_url( 'admincolumnspro' ) ) ?>"><?php _e( 'Add Direct Editing', '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' ) ), $this->get_url( 'admincolumnspro' ) ) ); ?>
												</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'
														), $this->get_url( 'admincolumnspro' ) ); ?>" 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 endif; ?>

									<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 endif; ?>
											<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">
								<div class="cpac-boxes">
									<?php if ( ! $storage_model->is_using_php_export() ) : ?>
										<div class="cpac-columns">

											<form method="post" action="">
												<?php wp_nonce_field( 'update-type', '_cpac_nonce'); ?>

												<input type="hidden" name="cpac_key" value="<?php echo $storage_model->key; ?>" />
												<input type="hidden" name="cpac_action" value="update_by_type" />

												<?php
												foreach ( $storage_model->columns as $column ) {
													$column->display();
												}
												?>
											</form>

										</div><!--.cpac-columns-->

										<div class="column-footer">
											<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 button-primary">+ <?php _e( 'Add Column', 'codepress-admin-columns' );?></a><br/>
											</div>

										</div><!--.cpac-column-footer-->
									<?php endif; ?>
								</div><!--.cpac-boxes-->
							</div><!--.columns-left-->
							<div class="clear"></div>

							<div class="for-cloning-only" style="display:none">
								<?php
								foreach ( $storage_model->get_registered_columns() as $column ) {
									$column->display();
								}
								?>
							</div>
						</div><!--.columns-container-->
					<?php endforeach; // storage_models ?>

					<div class="clear"></div>
					<?php
					break; // case: general
				case 'settings' :
					$this->display_settings();
					break;
				case 'addons' :
					$this->tab_addons();
					break;
				case 'help' :
					//$this->tab_addons();
					break;
				default:

					/**
					 * Action to add tab contents
					 *
					 */
					do_action( 'cac/settings/tab_contents/tab=' . $current_tab );

			endswitch;
			?>
		</div><!--.wrap-->
	<?php
	}

	/**
	 * @since 2.2
	 */
	public function tab_addons() {

		$addon_groups = $this->cpac->addons()->get_addon_groups();
		$grouped_addons = $this->cpac->addons()->get_available_addons( true );
		?>
		<?php foreach ( $grouped_addons as $group_name => $addons ) : ?>
			<h3><?php echo $addon_groups[ $group_name ]; ?></h3>

			<ul class="cpac-addons">
				<?php foreach ( $addons as $addon_name => $addon ) : ?>
					<li>
						<div class="cpac-addon-content">
							<?php if ( ! empty( $addon['image'] ) ) : ?>
								<img src="<?php echo $addon['image']; ?>" />
							<?php else : ?>
								<h3><?php echo $addon['title']; ?></h3>
							<?php endif; ?>
						</div>
						<div class="cpac-addon-header">
							<h3><?php echo $addon['title']; ?></h3>
							<p><?php echo $addon['description']; ?></p>
						</div>
						<div class="cpac-addon-actions">
							<?php

							// Installed..
							if ( ( $plugin_basename = $this->cpac->addons()->get_installed_addon_plugin_basename( $addon_name ) ) ) : ?>
								<?php if ( is_plugin_active( $plugin_basename ) ) : ?>
									<?php $deactivation_url = wp_nonce_url( add_query_arg( array(
										'action' => 'deactivate',
										'plugin' => urlencode( $plugin_basename ),
										'cpac-redirect' => true
									), admin_url( 'plugins.php' ) ), 'deactivate-plugin_' . $plugin_basename ); ?>
									<a href="#" class="button button-disabled cpac-installed"><?php _e( 'Active', 'codepress-admin-columns' ); ?></a>
									<a href="<?php echo esc_attr( $deactivation_url ); ?>" class="button right"><?php _e( 'Deactivate', 'codepress-admin-columns' ); ?></a>
								<?php else : ?>
									<?php $activation_url = wp_nonce_url( add_query_arg( array(
										'action' => 'activate',
										'plugin' => urlencode( $plugin_basename ),
										'cpac-redirect' => true
									), admin_url( 'plugins.php' ) ), 'activate-plugin_' . $plugin_basename ); ?>
									<a href="#" class="button button-disabled cpac-installed"><?php _e( 'Installed', 'codepress-admin-columns' ); ?></a>
									<a href="<?php echo esc_attr( $activation_url ); ?>" class="button right"><?php _e( 'Activate', 'codepress-admin-columns' ); ?></a>
								<?php endif; ?>
							<?php

							// Not installed...
							else :

								// Got ACP?
								if ( class_exists('CAC_Addon_Pro') ) :
									$install_url = wp_nonce_url( add_query_arg( array(
										'action' => 'install',
										'plugin' => $addon_name,
									), $this->get_settings_url( 'addons' ) ), 'install-cac-addon' );
									?>
									<a href="<?php echo esc_attr( $install_url ); ?>" class="button"><?php _e( 'Download & Install', 'codepress-admin-columns' ); ?></a>
								<?php

								// Get ACP?
								else : ?>
									<a target="_blank" href="<?php echo esc_attr( $this->get_url('pricing') ); ?>" class="button"><?php _e( 'Get this add-on', 'codepress-admin-columns' ); ?></a>
								<?php endif; ?>
							<?php endif; ?>
						</div>
					</li>
				<?php endforeach; // addons ?>
			</ul>
		<?php endforeach; // grouped_addons ?>
		<?php
	}
}