Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/helphub-front-page-blocks.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/helphub-front-page-blocks.php	(date 1519587542936)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/helphub-front-page-blocks.php	(date 1519587542936)
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Create linkable blocks on the front page of support pages.
+ *
+ * @package HelpHub
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+	exit; // Exit if accessed directly.
+}
+
+require_once( __DIR__ . '/includes/class-support-helphub-front-page-blocks-widget.php' );
+
+function helphub_register_front_page_blocks_widget() {
+	register_widget( 'Support_HelpHub_Front_Page_Blocks_Widget' );
+}
+add_action( 'widgets_init', 'helphub_register_front_page_blocks_widget' );
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/class-support-helphub-front-page-blocks-widget.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/class-support-helphub-front-page-blocks-widget.php	(date 1519587542877)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/class-support-helphub-front-page-blocks-widget.php	(date 1519587542877)
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Class for creationg front page blocks in HelpHub.
+ *
+ * @package HelpHub
+ */
+
+/**
+ * Class Support_HelpHub_Front_Page_blocks_Widget
+ */
+class Support_HelpHub_Front_Page_Blocks_Widget extends WP_Widget {
+	public function __construct() {
+		$widget_options = array(
+			'classname'   => 'helphub-front-page-block',
+			'description' => __( 'Add a link block to support pages', 'wporg-forums' ),
+		);
+
+		parent::__construct( 'helphub_front_page_block', __( '(HelpHub) Link block', 'wporg-forums' ), $widget_options );
+	}
+
+	/**
+	 * Output the widget on the front end.
+	 *
+	 * @param array $args     The widget arguments, passed on from the themes widget area.
+	 * @param array $instance This individual widgets settings.
+	 *
+	 * @return void
+	 */
+	public function widget( $args, $instance ) {
+		include( __DIR__ . '/widget-front-end.php' );
+	}
+
+	/**
+	 * Generate the widget settings.
+	 *
+	 * @param array $instance The widget instance and arguments.
+	 *
+	 * @return void
+	 */
+	public function form( $instance ) {
+		include( __DIR__ . '/widget-back-end.php' );
+	}
+
+	/**
+	 * Save the widget settings from the admin.
+	 *
+	 * @param array $new_instance The old widget instance, for comparison.
+	 * @param array $old_instance The new widget instance, to be saved.
+	 *
+	 * @return array
+	 */
+	public function update( $new_instance, $old_instance ) {
+		$save_instance = array();
+
+		$save_instance['icon']  = ( ! empty( $new_instance['icon'] ) ? strip_tags( $new_instance['icon'] ) : '' );
+		$save_instance['title'] = ( ! empty( $new_instance['title'] ) ? strip_tags( $new_instance['title'] ) : '' );
+		$save_instance['description'] = ( ! empty( $new_instance['description'] ) ? strip_tags( $new_instance['description'] ) : '' );
+		$save_instance['menu'] = ( ! empty( $new_instance['menu'] ) ? strip_tags( $new_instance['menu'] ) : '' );
+
+		return $save_instance;
+	}
+}
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-back-end.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-back-end.php	(date 1519575518756)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-back-end.php	(date 1519575518756)
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Back-end output for the widget.
+ *
+ * @package HelpHub
+ */
+
+?>
+
+<p>
+	<label for="<?php echo esc_attr( $this->get_field_id( 'icon' ) ); ?>">
+		<?php esc_html_e( 'icon (dashicon name)', 'wporg-forums' ); ?>
+	</label>
+	<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'icon' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'icon' ) ); ?>" type="text" value="<?php echo ( isset( $instance['icon'] ) && ! empty( $instance['icon'] ) ? esc_attr( $instance['icon'] ) : '' ); ?>">
+</p>
+
+<p>
+	<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">
+		<?php esc_html_e( 'Title', 'wporg-forums' ); ?>
+	</label>
+	<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo ( isset( $instance['title'] ) && ! empty( $instance['title'] ) ? esc_attr( $instance['title'] ) : esc_attr__( 'Title', 'wporg-forums' ) ); ?>">
+</p>
+
+<p>
+	<label for="<?php echo esc_attr( $this->get_field_id( 'description' ) ); ?>">
+		<?php esc_html_e( 'Description', 'wporg-forums' ); ?>
+	</label>
+	<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'description' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'description' ) ); ?>" type="text" value="<?php echo ( isset( $instance['description'] ) && ! empty( $instance['description'] ) ? esc_attr( $instance['description'] ) : esc_attr__( 'Block description', 'wporg-forums' ) ); ?>">
+</p>
+
+<p>
+	<label for="<?php echo esc_attr( $this->get_field_id( 'menu' ) ); ?>">
+		<?php esc_html_e( 'Link menu', 'wporg-forums' ); ?>
+	</label>
+	<select class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'menu' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'menu' ) ); ?>">
+		<?php
+		$nav_menus = wp_get_nav_menus();
+
+		foreach ( $nav_menus as $nav_menu ) {
+			printf(
+				'<option value="%s" %s>%s</option>',
+				esc_attr( $nav_menu->term_id ),
+				( isset( $instance['menu'] ) && ! empty( $instance['menu'] ) && $nav_menu->term_id === $instance['menu'] ? 'selected="selected"' : '' ),
+				esc_html( $nav_menu->name )
+			);
+		}
+		?>
+	</select>
+</p>
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-front-end.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-front-end.php	(date 1519575518756)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-front-page-blocks/includes/widget-front-end.php	(date 1519575518756)
@@ -0,0 +1,37 @@
+<?php
+/**
+ * Front-end output for the widget.
+ *
+ * @package HelpHub
+ */
+
+?>
+<?php
+echo $args['before_widget']; // WPCS: XSS OK.
+?>
+
+<div class="info-box">
+	<span class="dashicons
+	<?php echo esc_attr( $instance['icon'] ); ?>
+	"></span>
+	<h3><?php echo esc_html( $instance['title'] ); ?></h3>
+	<p><?php echo esc_html( $instance['description'] ); ?></p>
+
+	<ul class="meta-list">
+		<?php
+		$menu_items = wp_get_nav_menu_items( $instance['menu'] );
+		foreach ( $menu_items as $menu_item ) {
+			printf(
+				'<li><a href="%s">%s</a></li>',
+				esc_url( $menu_item->url ),
+				esc_html( $menu_item->title )
+			);
+		}
+		?>
+	</ul>
+
+</div>
+
+
+<?php
+echo $args['after_widget']; // WPCS: XSS OK.
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/css/admin.css
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/css/admin.css	(date 1519575518759)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/css/admin.css	(date 1519575518759)
@@ -0,0 +1,1194 @@
+.post-type.edit-php table.wp-list-table .column-image {
+	width: 120px;
+	text-align: center;
+}
+
+.post-type.edit-php table.wp-list-table .column-image img {
+	width: 60px;
+	height: auto;
+}
+
+
+/*!
+* jQuery UI CSS Framework 1.12.1
+* http://jqueryui.com
+*
+* Copyright jQuery Foundation and other contributors
+* Released under the MIT license.
+* http://jquery.org/license
+*
+* http://api.jqueryui.com/category/theming/
+*/
+
+
+/* Component containers
+----------------------------------*/
+.ui-widget {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 1em;
+}
+
+.ui-widget .ui-widget {
+	font-size: 1em;
+}
+
+.ui-widget input,
+.ui-widget select,
+.ui-widget textarea,
+.ui-widget button {
+	font-family: Arial, Helvetica, sans-serif;
+	font-size: 1em;
+}
+
+.ui-widget.ui-widget-content {
+	border: 1px solid #c5c5c5;
+}
+
+.ui-widget-content {
+	border: 1px solid #ddd;
+	background: #fff;
+	color: #333;
+}
+
+.ui-widget-content a {
+	color: #333;
+}
+
+.ui-widget-header {
+	border: 1px solid #ddd;
+	background: #e9e9e9;
+	color: #333;
+	font-weight: 700;
+}
+
+.ui-widget-header a {
+	color: #333;
+}
+
+/* Interaction states
+----------------------------------*/
+.ui-state-default,
+.ui-widget-content .ui-state-default,
+.ui-widget-header .ui-state-default,
+.ui-button,
+/* We use html here because we need a greater specificity to make sure
+  disabled works properly when clicked or hovered */
+html .ui-button.ui-state-disabled:hover,
+html .ui-button.ui-state-disabled:active {
+	border: 1px solid #c5c5c5;
+	background: #f6f6f6;
+	font-weight: 400;
+	color: #454545;
+}
+
+.ui-state-default a,
+.ui-state-default a:link,
+.ui-state-default a:visited,
+a.ui-button,
+a:link.ui-button,
+a:visited.ui-button,
+.ui-button {
+	color: #454545;
+	text-decoration: none;
+}
+
+.ui-state-hover,
+.ui-widget-content .ui-state-hover,
+.ui-widget-header .ui-state-hover,
+.ui-state-focus,
+.ui-widget-content .ui-state-focus,
+.ui-widget-header .ui-state-focus,
+.ui-button:hover,
+.ui-button:focus {
+	border: 1px solid #ccc;
+	background: #ededed;
+	font-weight: 400;
+	color: #2b2b2b;
+}
+
+.ui-state-hover a,
+.ui-state-hover a:hover,
+.ui-state-hover a:link,
+.ui-state-hover a:visited,
+.ui-state-focus a,
+.ui-state-focus a:hover,
+.ui-state-focus a:link,
+.ui-state-focus a:visited,
+a.ui-button:hover,
+a.ui-button:focus {
+	color: #2b2b2b;
+	text-decoration: none;
+}
+
+.ui-visual-focus {
+	box-shadow: 0 0 3px 1px rgb(94, 158, 214);
+}
+
+.ui-state-active,
+.ui-widget-content .ui-state-active,
+.ui-widget-header .ui-state-active,
+a.ui-button:active,
+.ui-button:active,
+.ui-button.ui-state-active:hover {
+	border: 1px solid #003eff;
+	background: #007fff;
+	font-weight: 400;
+	color: #fff;
+}
+
+.ui-icon-background,
+.ui-state-active .ui-icon-background {
+	border: #003eff;
+	background-color: #fff;
+}
+
+.ui-state-active a,
+.ui-state-active a:link,
+.ui-state-active a:visited {
+	color: #fff;
+	text-decoration: none;
+}
+
+/* Interaction Cues
+----------------------------------*/
+.ui-state-highlight,
+.ui-widget-content .ui-state-highlight,
+.ui-widget-header .ui-state-highlight {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+	color: #777620;
+}
+
+.ui-state-checked {
+	border: 1px solid #dad55e;
+	background: #fffa90;
+}
+
+.ui-state-highlight a,
+.ui-widget-content .ui-state-highlight a,
+.ui-widget-header .ui-state-highlight a {
+	color: #777620;
+}
+
+.ui-state-error,
+.ui-widget-content .ui-state-error,
+.ui-widget-header .ui-state-error {
+	border: 1px solid #f1a899;
+	background: #fddfdf;
+	color: #5f3f3f;
+}
+
+.ui-state-error a,
+.ui-widget-content .ui-state-error a,
+.ui-widget-header .ui-state-error a {
+	color: #5f3f3f;
+}
+
+.ui-state-error-text,
+.ui-widget-content .ui-state-error-text,
+.ui-widget-header .ui-state-error-text {
+	color: #5f3f3f;
+}
+
+.ui-priority-primary,
+.ui-widget-content .ui-priority-primary,
+.ui-widget-header .ui-priority-primary {
+	font-weight: 700;
+}
+
+.ui-priority-secondary,
+.ui-widget-content .ui-priority-secondary,
+.ui-widget-header .ui-priority-secondary {
+	opacity: 0.7;
+	filter: alpha(opacity=70); /* support: IE8 */
+	font-weight: 400;
+}
+
+.ui-state-disabled,
+.ui-widget-content .ui-state-disabled,
+.ui-widget-header .ui-state-disabled {
+	opacity: 0.35;
+	filter: alpha(opacity=35); /* support: IE8 */
+	background-image: none;
+}
+
+.ui-state-disabled .ui-icon {
+	filter: alpha(opacity=35); /* support: IE8 - See #6059 */
+}
+
+/* Icons
+----------------------------------*/
+
+/* states and images */
+.ui-icon {
+	width: 16px;
+	height: 16px;
+}
+
+/* positioning */
+.ui-icon-blank {
+	background-position: 16px 16px;
+}
+
+.ui-icon-caret-1-n {
+	background-position: 0 px;
+}
+
+.ui-icon-caret-1-ne {
+	background-position: -16px px;
+}
+
+.ui-icon-caret-1-e {
+	background-position: -32px px;
+}
+
+.ui-icon-caret-1-se {
+	background-position: -48px px;
+}
+
+.ui-icon-caret-1-s {
+	background-position: -65px px;
+}
+
+.ui-icon-caret-1-sw {
+	background-position: -80px px;
+}
+
+.ui-icon-caret-1-w {
+	background-position: -96px px;
+}
+
+.ui-icon-caret-1-nw {
+	background-position: -112px px;
+}
+
+.ui-icon-caret-2-n-s {
+	background-position: -128px px;
+}
+
+.ui-icon-caret-2-e-w {
+	background-position: -144px px;
+}
+
+.ui-icon-triangle-1-n {
+	background-position: 0 -16px;
+}
+
+.ui-icon-triangle-1-ne {
+	background-position: -16px -16px;
+}
+
+.ui-icon-triangle-1-e {
+	background-position: -32px -16px;
+}
+
+.ui-icon-triangle-1-se {
+	background-position: -48px -16px;
+}
+
+.ui-icon-triangle-1-s {
+	background-position: -65px -16px;
+}
+
+.ui-icon-triangle-1-sw {
+	background-position: -80px -16px;
+}
+
+.ui-icon-triangle-1-w {
+	background-position: -96px -16px;
+}
+
+.ui-icon-triangle-1-nw {
+	background-position: -112px -16px;
+}
+
+.ui-icon-triangle-2-n-s {
+	background-position: -128px -16px;
+}
+
+.ui-icon-triangle-2-e-w {
+	background-position: -144px -16px;
+}
+
+.ui-icon-arrow-1-n {
+	background-position: 0 -32px;
+}
+
+.ui-icon-arrow-1-ne {
+	background-position: -16px -32px;
+}
+
+.ui-icon-arrow-1-e {
+	background-position: -32px -32px;
+}
+
+.ui-icon-arrow-1-se {
+	background-position: -48px -32px;
+}
+
+.ui-icon-arrow-1-s {
+	background-position: -65px -32px;
+}
+
+.ui-icon-arrow-1-sw {
+	background-position: -80px -32px;
+}
+
+.ui-icon-arrow-1-w {
+	background-position: -96px -32px;
+}
+
+.ui-icon-arrow-1-nw {
+	background-position: -112px -32px;
+}
+
+.ui-icon-arrow-2-n-s {
+	background-position: -128px -32px;
+}
+
+.ui-icon-arrow-2-ne-sw {
+	background-position: -144px -32px;
+}
+
+.ui-icon-arrow-2-e-w {
+	background-position: -160px -32px;
+}
+
+.ui-icon-arrow-2-se-nw {
+	background-position: -176px -32px;
+}
+
+.ui-icon-arrowstop-1-n {
+	background-position: -192px -32px;
+}
+
+.ui-icon-arrowstop-1-e {
+	background-position: -208px -32px;
+}
+
+.ui-icon-arrowstop-1-s {
+	background-position: -224px -32px;
+}
+
+.ui-icon-arrowstop-1-w {
+	background-position: -240px -32px;
+}
+
+.ui-icon-arrowthick-1-n {
+	background-position: 1px -48px;
+}
+
+.ui-icon-arrowthick-1-ne {
+	background-position: -16px -48px;
+}
+
+.ui-icon-arrowthick-1-e {
+	background-position: -32px -48px;
+}
+
+.ui-icon-arrowthick-1-se {
+	background-position: -48px -48px;
+}
+
+.ui-icon-arrowthick-1-s {
+	background-position: -64px -48px;
+}
+
+.ui-icon-arrowthick-1-sw {
+	background-position: -80px -48px;
+}
+
+.ui-icon-arrowthick-1-w {
+	background-position: -96px -48px;
+}
+
+.ui-icon-arrowthick-1-nw {
+	background-position: -112px -48px;
+}
+
+.ui-icon-arrowthick-2-n-s {
+	background-position: -128px -48px;
+}
+
+.ui-icon-arrowthick-2-ne-sw {
+	background-position: -144px -48px;
+}
+
+.ui-icon-arrowthick-2-e-w {
+	background-position: -160px -48px;
+}
+
+.ui-icon-arrowthick-2-se-nw {
+	background-position: -176px -48px;
+}
+
+.ui-icon-arrowthickstop-1-n {
+	background-position: -192px -48px;
+}
+
+.ui-icon-arrowthickstop-1-e {
+	background-position: -208px -48px;
+}
+
+.ui-icon-arrowthickstop-1-s {
+	background-position: -224px -48px;
+}
+
+.ui-icon-arrowthickstop-1-w {
+	background-position: -240px -48px;
+}
+
+.ui-icon-arrowreturnthick-1-w {
+	background-position: 0 -64px;
+}
+
+.ui-icon-arrowreturnthick-1-n {
+	background-position: -16px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-e {
+	background-position: -32px -64px;
+}
+
+.ui-icon-arrowreturnthick-1-s {
+	background-position: -48px -64px;
+}
+
+.ui-icon-arrowreturn-1-w {
+	background-position: -64px -64px;
+}
+
+.ui-icon-arrowreturn-1-n {
+	background-position: -80px -64px;
+}
+
+.ui-icon-arrowreturn-1-e {
+	background-position: -96px -64px;
+}
+
+.ui-icon-arrowreturn-1-s {
+	background-position: -112px -64px;
+}
+
+.ui-icon-arrowrefresh-1-w {
+	background-position: -128px -64px;
+}
+
+.ui-icon-arrowrefresh-1-n {
+	background-position: -144px -64px;
+}
+
+.ui-icon-arrowrefresh-1-e {
+	background-position: -160px -64px;
+}
+
+.ui-icon-arrowrefresh-1-s {
+	background-position: -176px -64px;
+}
+
+.ui-icon-arrow-4 {
+	background-position: 0 -80px;
+}
+
+.ui-icon-arrow-4-diag {
+	background-position: -16px -80px;
+}
+
+.ui-icon-extlink {
+	background-position: -32px -80px;
+}
+
+.ui-icon-newwin {
+	background-position: -48px -80px;
+}
+
+.ui-icon-refresh {
+	background-position: -64px -80px;
+}
+
+.ui-icon-shuffle {
+	background-position: -80px -80px;
+}
+
+.ui-icon-transfer-e-w {
+	background-position: -96px -80px;
+}
+
+.ui-icon-transferthick-e-w {
+	background-position: -112px -80px;
+}
+
+.ui-icon-folder-collapsed {
+	background-position: 0 -96px;
+}
+
+.ui-icon-folder-open {
+	background-position: -16px -96px;
+}
+
+.ui-icon-document {
+	background-position: -32px -96px;
+}
+
+.ui-icon-document-b {
+	background-position: -48px -96px;
+}
+
+.ui-icon-note {
+	background-position: -64px -96px;
+}
+
+.ui-icon-mail-closed {
+	background-position: -80px -96px;
+}
+
+.ui-icon-mail-open {
+	background-position: -96px -96px;
+}
+
+.ui-icon-suitcase {
+	background-position: -112px -96px;
+}
+
+.ui-icon-comment {
+	background-position: -128px -96px;
+}
+
+.ui-icon-person {
+	background-position: -144px -96px;
+}
+
+.ui-icon-print {
+	background-position: -160px -96px;
+}
+
+.ui-icon-trash {
+	background-position: -176px -96px;
+}
+
+.ui-icon-locked {
+	background-position: -192px -96px;
+}
+
+.ui-icon-unlocked {
+	background-position: -208px -96px;
+}
+
+.ui-icon-bookmark {
+	background-position: -224px -96px;
+}
+
+.ui-icon-tag {
+	background-position: -240px -96px;
+}
+
+.ui-icon-home {
+	background-position: 0 -112px;
+}
+
+.ui-icon-flag {
+	background-position: -16px -112px;
+}
+
+.ui-icon-calendar {
+	background-position: -32px -112px;
+}
+
+.ui-icon-cart {
+	background-position: -48px -112px;
+}
+
+.ui-icon-pencil {
+	background-position: -64px -112px;
+}
+
+.ui-icon-clock {
+	background-position: -80px -112px;
+}
+
+.ui-icon-disk {
+	background-position: -96px -112px;
+}
+
+.ui-icon-calculator {
+	background-position: -112px -112px;
+}
+
+.ui-icon-zoomin {
+	background-position: -128px -112px;
+}
+
+.ui-icon-zoomout {
+	background-position: -144px -112px;
+}
+
+.ui-icon-search {
+	background-position: -160px -112px;
+}
+
+.ui-icon-wrench {
+	background-position: -176px -112px;
+}
+
+.ui-icon-gear {
+	background-position: -192px -112px;
+}
+
+.ui-icon-heart {
+	background-position: -208px -112px;
+}
+
+.ui-icon-star {
+	background-position: -224px -112px;
+}
+
+.ui-icon-link {
+	background-position: -240px -112px;
+}
+
+.ui-icon-cancel {
+	background-position: 0 -128px;
+}
+
+.ui-icon-plus {
+	background-position: -16px -128px;
+}
+
+.ui-icon-plusthick {
+	background-position: -32px -128px;
+}
+
+.ui-icon-minus {
+	background-position: -48px -128px;
+}
+
+.ui-icon-minusthick {
+	background-position: -64px -128px;
+}
+
+.ui-icon-close {
+	background-position: -80px -128px;
+}
+
+.ui-icon-closethick {
+	background-position: -96px -128px;
+}
+
+.ui-icon-key {
+	background-position: -112px -128px;
+}
+
+.ui-icon-lightbulb {
+	background-position: -128px -128px;
+}
+
+.ui-icon-scissors {
+	background-position: -144px -128px;
+}
+
+.ui-icon-clipboard {
+	background-position: -160px -128px;
+}
+
+.ui-icon-copy {
+	background-position: -176px -128px;
+}
+
+.ui-icon-contact {
+	background-position: -192px -128px;
+}
+
+.ui-icon-image {
+	background-position: -208px -128px;
+}
+
+.ui-icon-video {
+	background-position: -224px -128px;
+}
+
+.ui-icon-script {
+	background-position: -240px -128px;
+}
+
+.ui-icon-alert {
+	background-position: 0 -144px;
+}
+
+.ui-icon-info {
+	background-position: -16px -144px;
+}
+
+.ui-icon-notice {
+	background-position: -32px -144px;
+}
+
+.ui-icon-help {
+	background-position: -48px -144px;
+}
+
+.ui-icon-check {
+	background-position: -64px -144px;
+}
+
+.ui-icon-bullet {
+	background-position: -80px -144px;
+}
+
+.ui-icon-radio-on {
+	background-position: -96px -144px;
+}
+
+.ui-icon-radio-off {
+	background-position: -112px -144px;
+}
+
+.ui-icon-pin-w {
+	background-position: -128px -144px;
+}
+
+.ui-icon-pin-s {
+	background-position: -144px -144px;
+}
+
+.ui-icon-play {
+	background-position: 0 -160px;
+}
+
+.ui-icon-pause {
+	background-position: -16px -160px;
+}
+
+.ui-icon-seek-next {
+	background-position: -32px -160px;
+}
+
+.ui-icon-seek-prev {
+	background-position: -48px -160px;
+}
+
+.ui-icon-seek-end {
+	background-position: -64px -160px;
+}
+
+.ui-icon-seek-start {
+	background-position: -80px -160px;
+}
+
+/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
+.ui-icon-seek-first {
+	background-position: -80px -160px;
+}
+
+.ui-icon-stop {
+	background-position: -96px -160px;
+}
+
+.ui-icon-eject {
+	background-position: -112px -160px;
+}
+
+.ui-icon-volume-off {
+	background-position: -128px -160px;
+}
+
+.ui-icon-volume-on {
+	background-position: -144px -160px;
+}
+
+.ui-icon-power {
+	background-position: 0 -176px;
+}
+
+.ui-icon-signal-diag {
+	background-position: -16px -176px;
+}
+
+.ui-icon-signal {
+	background-position: -32px -176px;
+}
+
+.ui-icon-battery-0 {
+	background-position: -48px -176px;
+}
+
+.ui-icon-battery-1 {
+	background-position: -64px -176px;
+}
+
+.ui-icon-battery-2 {
+	background-position: -80px -176px;
+}
+
+.ui-icon-battery-3 {
+	background-position: -96px -176px;
+}
+
+.ui-icon-circle-plus {
+	background-position: 0 -192px;
+}
+
+.ui-icon-circle-minus {
+	background-position: -16px -192px;
+}
+
+.ui-icon-circle-close {
+	background-position: -32px -192px;
+}
+
+.ui-icon-circle-triangle-e {
+	background-position: -48px -192px;
+}
+
+.ui-icon-circle-triangle-s {
+	background-position: -64px -192px;
+}
+
+.ui-icon-circle-triangle-w {
+	background-position: -80px -192px;
+}
+
+.ui-icon-circle-triangle-n {
+	background-position: -96px -192px;
+}
+
+.ui-icon-circle-arrow-e {
+	background-position: -112px -192px;
+}
+
+.ui-icon-circle-arrow-s {
+	background-position: -128px -192px;
+}
+
+.ui-icon-circle-arrow-w {
+	background-position: -144px -192px;
+}
+
+.ui-icon-circle-arrow-n {
+	background-position: -160px -192px;
+}
+
+.ui-icon-circle-zoomin {
+	background-position: -176px -192px;
+}
+
+.ui-icon-circle-zoomout {
+	background-position: -192px -192px;
+}
+
+.ui-icon-circle-check {
+	background-position: -208px -192px;
+}
+
+.ui-icon-circlesmall-plus {
+	background-position: 0 -208px;
+}
+
+.ui-icon-circlesmall-minus {
+	background-position: -16px -208px;
+}
+
+.ui-icon-circlesmall-close {
+	background-position: -32px -208px;
+}
+
+.ui-icon-squaresmall-plus {
+	background-position: -48px -208px;
+}
+
+.ui-icon-squaresmall-minus {
+	background-position: -64px -208px;
+}
+
+.ui-icon-squaresmall-close {
+	background-position: -80px -208px;
+}
+
+.ui-icon-grip-dotted-vertical {
+	background-position: 0 -224px;
+}
+
+.ui-icon-grip-dotted-horizontal {
+	background-position: -16px -224px;
+}
+
+.ui-icon-grip-solid-vertical {
+	background-position: -32px -224px;
+}
+
+.ui-icon-grip-solid-horizontal {
+	background-position: -48px -224px;
+}
+
+.ui-icon-gripsmall-diagonal-se {
+	background-position: -64px -224px;
+}
+
+.ui-icon-grip-diagonal-se {
+	background-position: -80px -224px;
+}
+
+
+/* Misc visuals
+----------------------------------*/
+
+/* Corner radius */
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-left,
+.ui-corner-tl {
+	border-top-left-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-top,
+.ui-corner-right,
+.ui-corner-tr {
+	border-top-right-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-left,
+.ui-corner-bl {
+	border-bottom-left-radius: 3px;
+}
+
+.ui-corner-all,
+.ui-corner-bottom,
+.ui-corner-right,
+.ui-corner-br {
+	border-bottom-right-radius: 3px;
+}
+
+/* Overlays */
+.ui-widget-overlay {
+	background: #aaa;
+	opacity: 0.3;
+	filter: alpha(opacity=30); /* support: IE8 */
+}
+
+.ui-widget-shadow {
+	-webkit-box-shadow: 0 0 5px #666;
+	box-shadow: 0 0 5px #666;
+}
+
+
+/* Overlays */
+.ui-widget-overlay {
+	position: fixed;
+	top: 0;
+	left: 0;
+	width: 100%;
+	height: 100%;
+}
+
+.ui-datepicker {
+	width: 17em;
+	padding: 0.2em 0.2em 0;
+	display: none;
+	background-color: #fff;
+}
+
+.ui-datepicker .ui-datepicker-header {
+	position: relative;
+	padding: 0.2em 0;
+}
+
+.ui-datepicker .ui-datepicker-prev,
+.ui-datepicker .ui-datepicker-next {
+	position: absolute;
+	top: 2px;
+	width: 1.8em;
+	height: 1.8em;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover,
+.ui-datepicker .ui-datepicker-next-hover {
+	top: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev {
+	left: 2px;
+}
+
+.ui-datepicker .ui-datepicker-next {
+	right: 2px;
+}
+
+.ui-datepicker .ui-datepicker-prev-hover {
+	left: 1px;
+}
+
+.ui-datepicker .ui-datepicker-next-hover {
+	right: 1px;
+}
+
+.ui-datepicker .ui-datepicker-prev span,
+.ui-datepicker .ui-datepicker-next span {
+	display: block;
+	position: absolute;
+	left: 50%;
+	margin-left: -8px;
+	top: 50%;
+	margin-top: -8px;
+}
+
+.ui-datepicker .ui-datepicker-title {
+	margin: 0 2.3em;
+	line-height: 1.8;
+	text-align: center;
+}
+
+.ui-datepicker .ui-datepicker-title select {
+	font-size: 1em;
+	margin: 1px 0;
+}
+
+.ui-datepicker select.ui-datepicker-month,
+.ui-datepicker select.ui-datepicker-year {
+	width: 45%;
+}
+
+.ui-datepicker table {
+	width: 100%;
+	font-size: 0.9em;
+	border-collapse: collapse;
+	margin: 0 0 0.4em;
+}
+
+.ui-datepicker th {
+	padding: 0.7em 0.3em;
+	text-align: center;
+	font-weight: 700;
+	border: 0;
+}
+
+.ui-datepicker td {
+	border: 0;
+	padding: 1px;
+}
+
+.ui-datepicker td span,
+.ui-datepicker td a {
+	display: block;
+	padding: 0.2em;
+	text-align: right;
+	text-decoration: none;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane {
+	background-image: none;
+	margin: 0.7em 0 0;
+	padding: 0 0.2em;
+	border-left: 0;
+	border-right: 0;
+	border-bottom: 0;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button {
+	float: right;
+	margin: 0.5em 0.2em 0.4em;
+	cursor: pointer;
+	padding: 0.2em 0.6em 0.3em;
+	width: auto;
+	overflow: visible;
+}
+
+.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {
+	float: left;
+}
+
+/* with multiple calendars */
+.ui-datepicker.ui-datepicker-multi {
+	width: auto;
+}
+
+.ui-datepicker-multi .ui-datepicker-group {
+	float: left;
+}
+
+.ui-datepicker-multi .ui-datepicker-group table {
+	width: 95%;
+	margin: 0 auto 0.4em;
+}
+
+.ui-datepicker-multi-2 .ui-datepicker-group {
+	width: 50%;
+}
+
+.ui-datepicker-multi-3 .ui-datepicker-group {
+	width: 33.3%;
+}
+
+.ui-datepicker-multi-4 .ui-datepicker-group {
+	width: 25%;
+}
+
+.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {
+	border-left-width: 0;
+}
+
+.ui-datepicker-multi .ui-datepicker-buttonpane {
+	clear: left;
+}
+
+.ui-datepicker-row-break {
+	clear: both;
+	width: 100%;
+	font-size: 0;
+}
+
+/* RTL support */
+.ui-datepicker-rtl {
+	direction: rtl;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev {
+	right: 2px;
+	left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next {
+	left: 2px;
+	right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-prev:hover {
+	right: 1px;
+	left: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-next:hover {
+	left: 1px;
+	right: auto;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane {
+	clear: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button {
+	float: left;
+}
+
+.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,
+.ui-datepicker-rtl .ui-datepicker-group {
+	float: right;
+}
+
+.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,
+.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {
+	border-right-width: 0;
+	border-left-width: 1px;
+}
+
+/* Icons */
+.ui-datepicker .ui-icon {
+	display: block;
+	text-indent: -99999px;
+	overflow: hidden;
+	background-repeat: no-repeat;
+	left: 0.5em;
+	top: 0.3em;
+}
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/admin.js
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/admin.js	(date 1519575518761)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/admin.js	(date 1519575518761)
@@ -0,0 +1,58 @@
+/* globals HelphubAdmin */
+jQuery( document ).ready( function( $ ) {
+
+	// Instantiates the variable that holds the media library frame.
+	var GalleryDataFrame;
+
+	// Runs when the image button is clicked.
+	jQuery( '.postbox' ).on( 'click', '.helphub-upload', function( event ) {
+
+        // Store button object.
+        var $button = $( this ),
+			Title,
+			Button,
+			Library;
+
+		// Prevents the default action from occuring.
+		event.preventDefault();
+
+		// If the frame already exists, re-open it.
+		if ( GalleryDataFrame ) {
+			GalleryDataFrame.open();
+			return;
+		}
+
+		Title = $button.data( 'title' ) ? $button.data( 'title' ) : HelphubAdmin.default_title;
+		Button = $button.data( 'button' ) ? $button.data( 'button' ) : HelphubAdmin.default_button;
+		Library = $button.data( 'library' ) ? $button.data( 'library' ) : '';
+
+		// Sets up the media library frame.
+		GalleryDataFrame = wp.media.frames.gallery_data_frame = wp.media({
+			title: Title,
+			button: { text: Button },
+			library: { type: Library }
+		});
+
+		// Runs when an image is selected.
+		GalleryDataFrame.on( 'select', function() {
+
+			// Grabs the attachment selection and creates a JSON representation of the model.
+			var MediaAttachment = GalleryDataFrame.state().get( 'selection' ).first().toJSON();
+
+			// Sends the attachment URL to our custom image input field.
+			$button.prev( 'input.helphub-upload-field' ).val( MediaAttachment.url );
+
+		});
+
+		// Opens the media library frame.
+		GalleryDataFrame.open();
+	});
+
+	if ( $( 'input[type="date"]' ).hasClass( 'helphub-meta-date' ) ) {
+		$( '.helphub-meta-date' ).datepicker({
+			changeMonth: true,
+			changeYear: true,
+			formatDate: 'MM, dd, yy'
+		});
+	} // Bust cache.
+});
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/gallery.js
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/gallery.js	(date 1519575518762)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/assets/js/gallery.js	(date 1519575518762)
@@ -0,0 +1,104 @@
+/* globals HelphubGallery */
+jQuery( document ).ready( function( $ ) {
+
+	// Uploading files
+	var HelphubGalleryFrame;
+	var $GalleryContainer  = $( '#helphub_images_container' );
+	var $ImageGalleryIds  = $( '#helphub_image_gallery' );
+	var $GalleryImages     = $GalleryContainer.find( 'ul.product_images' );
+	var $GalleryUl         = $GalleryContainer.find( 'ul li.image' );
+
+	jQuery( '.add_helphub_images' ).on( 'click', 'a', function( event ) {
+
+		var AttachmentIds  = $ImageGalleryIds.val();
+
+		event.preventDefault();
+
+		// If the media frame already exists, reopen it.
+		if ( HelphubGalleryFrame ) {
+			HelphubGalleryFrame.open();
+			return;
+		}
+
+		// Create the media frame.
+		HelphubGalleryFrame = wp.media.frames.downloadable_file = wp.media({
+
+			// Set the title of the modal.
+			title: HelphubGallery.gallery_title,
+			button: {
+				text: HelphubGallery.gallery_button
+			},
+			multiple: true
+		});
+
+		// When an image is selected, run a callback.
+		HelphubGalleryFrame.on( 'select', function() {
+
+			var selection = HelphubGalleryFrame.state().get( 'selection' );
+
+			selection.map( function( attachment ) {
+
+				attachment = attachment.toJSON();
+
+				if ( attachment.id ) {
+					AttachmentIds = AttachmentIds ? AttachmentIds + ',' + attachment.id : attachment.id;
+
+					$GalleryImages.append( '<li class="image" data-attachment_id="' + attachment.id + '">' +
+								'<img src="' + attachment.sizes.thumbnail.url + '" />' +
+									'<ul class="actions">' +
+										'<li><a href="#" class="delete" title="' + HelphubGallery.delete_image + '">&times;</a></li>' +
+									'</ul>' +
+								'</li>' );
+				}
+
+			} );
+
+			$ImageGalleryIds.val( AttachmentIds );
+		});
+
+		// Finally, open the modal.
+		HelphubGalleryFrame.open();
+	});
+
+	// Image ordering
+	$GalleryImages.sortable({
+		items: 'li.image',
+		cursor: 'move',
+		scrollSensitivity: 40,
+		forcePlaceholderSize: true,
+		forceHelperSize: false,
+		helper: 'clone',
+		opacity: 0.65,
+		placeholder: 'helphub-metabox-sortable-placeholder',
+		start: function( event, ui ) {
+			ui.item.css( 'background-color', '#f6f6f6' );
+		},
+		stop: function( event, ui ) {
+			ui.item.removeAttr( 'style' );
+		},
+		update: function() {
+			var AttachmentIds = '';
+			$GalleryContainer.find( 'ul li.image' ).css( 'cursor', 'default' ).each( function() {
+				var AttachmentId = jQuery( this ).attr( 'data-attachment_id' );
+				AttachmentIds = AttachmentIds + AttachmentId + ',';
+			});
+			$ImageGalleryIds.val( AttachmentIds );
+		}
+	});
+
+	// Remove images
+	$GalleryContainer.on( 'click', 'a.delete', function() {
+        var AttachmentIds = '';
+
+		$( this ).closest( 'li.image' ).remove();
+
+		$GalleryUl.css( 'cursor', 'default' ).each( function() {
+			var AttachmentId = jQuery( this ).attr( 'data-attachment_id' );
+			AttachmentIds = AttachmentIds + AttachmentId + ',';
+		});
+
+		$ImageGalleryIds.val( AttachmentIds );
+
+		return false;
+	} );
+} );
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-post-type.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-post-type.php	(date 1519575518764)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-post-type.php	(date 1519575518764)
@@ -0,0 +1,765 @@
+<?php
+/**
+ * This file is part of the Helphub Post Types plugin
+ *
+ * @package WordPress
+ * @author Jon Ang
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+	exit; // Exit if accessed directly.
+}
+
+/**
+ * Helphub Post Types, Post Type Class
+ *
+ * All functionality pertaining to post types in Helphub Post Types.
+ *
+ * @package WordPress
+ * @subpackage HelpHub_Post_Types
+ * @category Plugin
+ * @author Jon Ang
+ * @since 1.0.0
+ */
+class HelpHub_Post_Types_Post_Type {
+	/**
+	 * The post type token.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @var    string
+	 */
+	public $post_type;
+
+	/**
+	 * The post type singular label.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @var    string
+	 */
+	public $singular;
+
+	/**
+	 * The post type plural label.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @var    string
+	 */
+	public $plural;
+
+	/**
+	 * The post type args.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @var    array
+	 */
+	public $args;
+
+	/**
+	 * The taxonomies for this post type.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @var    array
+	 */
+	public $taxonomies;
+
+	/**
+	 * Constructor function.
+	 *
+	 * @access public
+	 * @since 1.0.0
+	 *
+	 * @param string $post_type The post type id/handle.
+	 * @param string $singular The singular pronunciation of the post type name.
+	 * @param string $plural The plural pronunciation of the post type name.
+	 * @param array $args The typical arguments allowed to register a post type.
+	 * @param array $taxonomies The list of taxonomies that the post type is associated with.
+	 */
+	public function __construct( $post_type = 'thing', $singular = '', $plural = '', $args = array(), $taxonomies = array() ) {
+		$this->post_type  = $post_type;
+		$this->singular   = $singular;
+		$this->plural     = $plural;
+		$this->args       = $args;
+		$this->taxonomies = $taxonomies;
+
+		add_action( 'init', array( $this, 'register_post_type' ) );
+		add_action( 'init', array( $this, 'register_taxonomy' ) );
+
+		if ( is_admin() ) {
+			global $pagenow;
+
+			add_action( 'admin_menu', array( $this, 'meta_box_setup' ), 20 );
+			add_action( 'save_post', array( $this, 'meta_box_save' ), 50 );
+			add_filter( 'enter_title_here', array( $this, 'enter_title_here' ) );
+			add_filter( 'post_updated_messages', array( $this, 'updated_messages' ) );
+
+			if ( 'edit.php' === $pagenow && isset( $_GET['post_type'] ) && $this->post_type === $_GET['post_type'] ) { // WPCS: input var ok; CSRF ok.
+				add_filter( 'manage_edit-' . $this->post_type . '_columns', array(
+					$this,
+					'register_custom_column_headings',
+				), 10, 1 );
+				add_action( 'manage_posts_custom_column', array( $this, 'register_custom_columns' ), 10, 2 );
+			}
+		}
+		add_action( 'admin_init', array( $this, 'add_menu_order' ) );
+		add_action( 'after_setup_theme', array( $this, 'ensure_post_thumbnails_support' ) );
+	} // End __construct()
+
+	/**
+	 * Register the post type.
+	 *
+	 * @access public
+	 * @return void
+	 */
+	public function register_post_type() {
+
+		if ( post_type_exists( $this->post_type ) ) {
+			return;
+		}
+
+		$labels = array(
+			'name'               => $this->plural,
+			'singular_name'      => $this->singular,
+			'add_new'            => _x( 'Add New', 'add new helphub post', 'wporg-forums' ),
+			/* translators: %s: Post type name. */
+			'add_new_item'       => sprintf( __( 'Add New %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'edit_item'          => sprintf( __( 'Edit %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'new_item'           => sprintf( __( 'New %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Plural post type name. */
+			'all_items'          => sprintf( __( 'All %s', 'wporg-forums' ), $this->plural ),
+			/* translators: %s: Post type name. */
+			'view_item'          => sprintf( __( 'View %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Plural post type name. */
+			'search_items'       => sprintf( __( 'Search %a', 'wporg-forums' ), $this->plural ),
+			/* translators: %s: Plural post type name. */
+			'not_found'          => sprintf( __( 'No %s Found', 'wporg-forums' ), $this->plural ),
+			/* translators: %s: Plural post type name. */
+			'not_found_in_trash' => sprintf( __( 'No %s Found In Trash', 'wporg-forums' ), $this->plural ),
+			'parent_item_colon'  => '',
+			'menu_name'          => $this->plural,
+		);
+
+		$single_slug  = apply_filters( 'helphub_single_slug', sanitize_title_with_dashes( $this->singular ) );
+		$archive_slug = apply_filters( 'helphub_archive_slug', sanitize_title_with_dashes( $this->plural ) );
+
+		$defaults = array(
+			'labels'                => $labels,
+			'public'                => true,
+			'publicly_queryable'    => true,
+			'show_ui'               => true,
+			'show_in_menu'          => true,
+			'query_var'             => true,
+			'rewrite'               => array(
+				'slug' => $single_slug,
+			),
+			'capability_type'       => 'post',
+			'has_archive'           => $archive_slug,
+			'hierarchical'          => false,
+			'supports'              => array( 'title', 'editor', 'excerpt', 'thumbnail', 'page-attributes', 'revisions' ),
+			'menu_position'         => 5,
+			'menu_icon'             => 'dashicons-smiley',
+			'show_in_rest'          => true,
+			'rest_base'             => $archive_slug,
+			'rest_controller_class' => 'WP_REST_Posts_Controller',
+		);
+
+		$args = wp_parse_args( $this->args, $defaults );
+
+		register_post_type( $this->post_type, $args );
+	} // End register_post_type()
+
+	/**
+	 * Register the post-type taxonomy.
+	 *
+	 * @access public
+	 * @since  1.3.0
+	 * @return void
+	 */
+	public function register_taxonomy() {
+		foreach ( $this->taxonomies as $taxonomy ) {
+			$taxonomy = new HelpHub_Post_Types_Taxonomy( esc_attr( $this->post_type ), $taxonomy, '', '', array() ); // Leave arguments empty, to use the default arguments.
+			$taxonomy->register();
+		}
+	} // End register_taxonomy()
+
+	/**
+	 * Add custom columns for the "manage" screen of this post type.
+	 *
+	 * @access public
+	 *
+	 * @param string $column_name The name of the column.
+	 * @param int $id The ID.
+	 *
+	 * @since  1.0.0
+	 * @return void
+	 */
+	public function register_custom_columns( $column_name, $id ) {
+		switch ( $column_name ) {
+			case 'image':
+				// Displays img tag.
+				echo $this->get_image( $id, 40 );
+				/* @codingStandardsIgnoreLine */
+				break;
+			default:
+				break;
+		}
+	} // End register_custom_columns()
+
+	/**
+	 * Add custom column headings for the "manage" screen of this post type.
+	 *
+	 * @access public
+	 *
+	 * @param array $defaults The default value.
+	 *
+	 * @since  1.0.0
+	 * @return array $defaults
+	 */
+	public function register_custom_column_headings( $defaults ) {
+		$new_columns = array(
+			'image' => __( 'Image', 'wporg-forums' ),
+		);
+
+		$last_item = array();
+
+		if ( isset( $defaults['date'] ) ) {
+			unset( $defaults['date'] );
+		}
+
+		if ( count( $defaults ) > 2 ) {
+			$last_item = array_slice( $defaults, - 1 );
+
+			array_pop( $defaults );
+		}
+		$defaults = array_merge( $defaults, $new_columns );
+
+		if ( is_array( $last_item ) && 0 < count( $last_item ) ) {
+			foreach ( $last_item as $k => $v ) {
+				$defaults[ $k ] = $v;
+				break;
+			}
+		}
+
+		return $defaults;
+	} // End register_custom_column_headings()
+
+	/**
+	 * Update messages for the post type admin.
+	 *
+	 * @since  1.0.0
+	 *
+	 * @param  array $messages Array of messages for all post types.
+	 *
+	 * @return array           Modified array.
+	 */
+	public function updated_messages( $messages ) {
+		global $post, $post_ID; /* @codingStandardsIgnoreLine */
+
+		$permalink = get_permalink( $post_ID ); /* @codingStandardsIgnoreLine */
+
+		$messages[ $this->post_type ] = array(
+			0  => '',
+			// Unused. Messages start at index 1.
+			/* translators: %1$s: Post link tag. %2$s: Close post link tag. %3$s: Post type name. %4$s: Lowercase post type name. */
+			1  => sprintf( __( '%3$s updated. %1$sView %4$s%2$s', 'wporg-forums' ), '<a href="' . esc_url( $permalink ) . '">', '</a>', $this->singular, strtolower( $this->singular ) ),
+			2  => __( 'Custom field updated.', 'wporg-forums' ),
+			3  => __( 'Custom field deleted.', 'wporg-forums' ),
+			/* translators: %s: Post type name. */
+			4  => sprintf( __( '%s updated.', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: date and time of the revision */
+			5  => isset( $_GET['revision'] ) ? sprintf( __( '%1$s restored to revision from %2$s', 'wporg-forums' ), $this->singular, wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
+			// WPCS: CSRF ok; input var ok.
+			/* translators: %1$s Post type name. %2$s: Lowercase post type name. %3$s: Post link tag. %4$s: Close post link tag. */
+			6  => sprintf( __( '%1$s published. %3$sView %2$s%4$s', 'wporg-forums' ), $this->singular, strtolower( $this->singular ), '<a href="' . esc_url( $permalink ) . '">', '</a>' ),
+			/* translators: %s: Post type name. */
+			7  => sprintf( __( '%s saved.', 'wporg-forums' ), $this->singular ),
+			/* translators: %1$s: Post type name. %2$s: Lowercase post type name. %3$s: Post link tag. %4$s: Close post link tag. */
+			8  => sprintf( __( '%1$s submitted. %2$sPreview %3$s%4$s', 'wporg-forums' ), $this->singular, strtolower( $this->singular ), '<a target="_blank" href="' . esc_url( add_query_arg( 'preview', 'true', $permalink ) ) . '">', '</a>' ),
+			/* translators: %1$s: Post type name. %2$s: Lowercase post type name. */
+			9  => sprintf( __( '%1$s scheduled for: %1$s. %2$sPreview %2$s%3$s', 'wporg-forums' ), $this->singular, strtolower( $this->singular ), '<strong>' . date_i18n( __( 'M j, Y @ G:i', 'wporg-forums' ), strtotime( $post->post_date ) ) . '</strong>', '<a target="_blank" href="' . esc_url( $permalink ) . '">', '</a>' ),
+			/* translators: %1$s: Post type name. %2$s: Lowercase post type name. %3$s: Close post link tag. %4$s: Close post link tag. */
+			10 => sprintf( __( '%1$s draft updated. %3$sPreview %2$s%4$s', 'wporg-forums' ), $this->singular, strtolower( $this->singular ), '<a target="_blank" href="' . esc_url( add_query_arg( 'preview', 'true', $permalink ) ) . '">', '</a>' ),
+		);
+
+		return $messages;
+	} // End updated_messages()
+
+	/**
+	 * Setup the meta box.
+	 * You can use separate conditions here to add different meta boxes for different post types
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return void
+	 */
+	public function meta_box_setup() {
+		if ( 'post' === $this->post_type ) {
+			add_meta_box( $this->post_type . '-display', __( 'Display Settings', 'wporg-forums' ), array(
+				$this,
+				'meta_box_content',
+			), $this->post_type, 'normal', 'high' );
+		} elseif ( 'helphub_version' === $this->post_type ) {
+			add_meta_box( $this->post_type . '-version-meta', __( 'Display Settings', 'wporg-forums' ), array(
+				$this,
+				'meta_box_version_content',
+			), $this->post_type, 'normal', 'high' );
+		}
+	} // End meta_box_setup()
+
+	/**
+	 * The contents of our post meta box.
+	 * Duplicate this function for more callbacks
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return void
+	 */
+	public function meta_box_content() {
+		$field_data = $this->get_custom_fields_post_display_settings();
+		$this->meta_box_content_render( $field_data );
+	}
+
+	/**
+	 * The contents of our post meta box.
+	 * Duplicate this function for more callbacks
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return void
+	 */
+	public function meta_box_version_content() {
+		$field_data = $this->get_custom_fields_version_display_settings();
+		$this->meta_box_content_render( $field_data );
+	}
+
+	/**
+	 * The rendering of fields in meta boxes
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 *
+	 * @param array $field_data The field data to populate the rendering function.
+	 *
+	 * @return void
+	 */
+	public function meta_box_content_render( $field_data ) {
+		global $post_id;
+		$fields = get_post_custom( $post_id );
+
+		$html = '';
+
+		$html .= '<input type="hidden" name="helphub_' . $this->post_type . '_noonce" id="helphub_' . $this->post_type . '_noonce" value="' . wp_create_nonce( plugin_basename( dirname( HelpHub_Post_Types()->plugin_path ) ) ) . '" />';
+
+		if ( 0 < count( $field_data ) ) {
+			$html .= '<table class="form-table">' . "\n";
+			$html .= '<tbody>' . "\n";
+
+			foreach ( $field_data as $k => $v ) {
+				$data = $v['default'];
+				if ( isset( $fields[ '_' . $k ] ) && isset( $fields[ '_' . $k ][0] ) ) {
+					$data = $fields[ '_' . $k ][0];
+				}
+
+				switch ( $v['type'] ) {
+					case 'hidden':
+						$field = '<input name="' . esc_attr( $k ) . '" type="hidden" id="' . esc_attr( $k ) . '" value="' . esc_attr( $data ) . '" />';
+						$html  .= '<tr valign="top">' . $field . "\n";
+						$html  .= '</tr>' . "\n";
+						break;
+					case 'text':
+					case 'url':
+						$field = '<input name="' . esc_attr( $k ) . '" type="text" id="' . esc_attr( $k ) . '" class="regular-text" value="' . esc_attr( $data ) . '" />';
+						$html  .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'textarea':
+						$field = '<textarea name="' . esc_attr( $k ) . '" id="' . esc_attr( $k ) . '" class="large-text">' . esc_attr( $data ) . '</textarea>';
+						$html  .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'editor':
+						ob_start();
+						wp_editor( $data, $k, array(
+							'media_buttons' => false,
+							'textarea_rows' => 10,
+						) );
+						$field = ob_get_contents();
+						ob_end_clean();
+						$html .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'upload':
+						$data_atts = '';
+						if ( isset( $v['media-frame']['title'] ) ) {
+							$data_atts .= sprintf( 'data-title="%s" ', esc_attr( $v['media-frame']['title'] ) );
+						}
+						if ( isset( $v['media-frame']['button'] ) ) {
+							$data_atts .= sprintf( 'data-button="%s" ', esc_attr( $v['media-frame']['button'] ) );
+						}
+						if ( isset( $v['media-frame']['library'] ) ) {
+							$data_atts .= sprintf( 'data-library="%s" ', esc_attr( $v['media-frame']['library'] ) );
+						}
+
+						$field = '<input name="' . esc_attr( $k ) . '" type="file" id="' . esc_attr( $k ) . '" class="regular-text helphub-upload-field" />';
+						$field .= '<button id="' . esc_attr( $k ) . '" class="helphub-upload button" ' . $data_atts . '>' . $v['label'] . '</button>';
+						$html  .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'radio':
+						$field = '';
+						if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
+							foreach ( $v['options'] as $val => $option ) {
+								$field .= '<p><label for="' . esc_attr( $k . '-' . $val ) . '"><input id="' . esc_attr( $k . '-' . $val ) . '" type="radio" name="' . esc_attr( $k ) . '" value="' . esc_attr( $val ) . '" ' . checked( $val, $data, false ) . ' />' . $option . '</label></p>' . "\n";
+							}
+						}
+						$html .= '<tr valign="top"><th><label>' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'checkbox':
+						$field = '<p><input id="' . esc_attr( $v['name'] ) . '" type="checkbox" name="' . esc_attr( $k ) . '" value="1" ' . checked( 'yes', $data, false ) . ' / ></p>' . "\n";
+						if ( isset( $v['description'] ) ) {
+							$field .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '<tr valign="top"><th><label for="' . esc_attr( $v['name'] ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'multicheck':
+						$field = '';
+						if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
+							foreach ( $v['options'] as $val => $option ) {
+								$field .= '<p><label for="' . esc_attr( $k . '-' . $val ) . '"><input id="' . esc_attr( $k . '-' . $val ) . '" type="checkbox" name="' . esc_attr( $k ) . '[]" value="' . esc_attr( $val ) . '" ' . checked( 1, in_array( $val, (array) $data, true ), false ) . ' />' . $option . '</label></p>' . "\n";
+							}
+						}
+						$html .= '<tr valign="top"><th><label>' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'select':
+						$field = '<select name="' . esc_attr( $k ) . '" id="' . esc_attr( $k ) . '" >' . "\n";
+						if ( isset( $v['options'] ) && is_array( $v['options'] ) ) {
+							foreach ( $v['options'] as $val => $option ) {
+								$field .= '<option value="' . esc_attr( $val ) . '" ' . selected( $val, $data, false ) . '>' . $option . '</option>' . "\n";
+							}
+						}
+						$field .= '</select>' . "\n";
+						$html  .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					case 'date':
+						if ( ! intval( $data ) ) {
+							$data = time();
+						}
+						$field = '<input name="' . esc_attr( $k ) . '" type="date" id="' . esc_attr( $k ) . '" class="helphub-meta-date" value="' . esc_attr( date_i18n( 'F d, Y', $data ) ) . '" />';
+						$html  .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+						if ( isset( $v['description'] ) ) {
+							$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+						}
+						$html .= '</td></tr>' . "\n";
+						break;
+					default:
+						$field = apply_filters( 'helphub_data_field_type_' . $v['type'], null, $k, $data, $v );
+						if ( $field ) {
+							$html .= '<tr valign="top"><th><label for="' . esc_attr( $k ) . '">' . $v['name'] . '</label></th><td>' . $field . "\n";
+							if ( isset( $v['description'] ) ) {
+								$html .= '<p class="description">' . $v['description'] . '</p>' . "\n";
+							}
+							$html .= '</td></tr>' . "\n";
+						}
+						break;
+				} // End switch().
+			} // End foreach().
+
+			$html .= '</tbody>' . "\n";
+			$html .= '</table>' . "\n";
+		} // End if().
+
+		echo $html;
+		/* @codingStandardsIgnoreLine */
+	} // End meta_box_content()
+
+	/**
+	 * Save meta box fields.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 *
+	 * @param int $post_id The post ID.
+	 *
+	 * @return int $post_id
+	 */
+	public function meta_box_save( $post_id ) {
+		// Verify.
+		$plugin_basename = plugin_basename( dirname( HelpHub_Post_Types()->plugin_path ) );
+		$nonce_key       = 'helphub_' . $this->post_type . '_noonce';
+		/* @codingStandardsIgnoreLine */
+		if ( empty( $_POST[ $nonce_key ] ) || ( get_post_type() != $this->post_type ) || ! wp_verify_nonce( $_POST[ $nonce_key ], $plugin_basename ) ) {
+			return $post_id;
+		}
+
+		if ( isset( $_POST['post_type'] ) && 'page' === $_POST['post_type'] ) {
+			/* @codingStandardsIgnoreLine */
+			if ( ! current_user_can( 'edit_page', $post_id ) ) {
+				return $post_id;
+			}
+		} else {
+			if ( ! current_user_can( 'edit_post', $post_id ) ) {
+				return $post_id;
+			}
+		}
+
+		$field_data = $this->get_custom_fields_settings();
+		$fields     = array_keys( $field_data );
+
+		foreach ( $fields as $f ) {
+
+			switch ( $field_data[ $f ]['type'] ) {
+				case 'url':
+					${$f} = isset( $_POST[ $f ] ) ? esc_url( $_POST[ $f ] ) : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+				case 'textarea':
+				case 'editor':
+					${$f} = isset( $_POST[ $f ] ) ? wp_kses_post( trim( $_POST[ $f ] ) ) : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+				case 'checkbox':
+					${$f} = isset( $_POST[ $f ] ) ? 'yes' : 'no';
+					/* @codingStandardsIgnoreLine */
+					break;
+				case 'multicheck':
+					// Ensure checkbox is array and whitelist accepted values against options.
+					${$f} = isset( $_POST[ $f ] ) && is_array( $field_data[ $f ]['options'] ) ? (array) array_intersect( (array) $_POST[ $f ], array_flip( $field_data[ $f ]['options'] ) ) : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+				case 'radio':
+				case 'select':
+					// Whitelist accepted value against options.
+					$values = array();
+					if ( is_array( $field_data[ $f ]['options'] ) ) {
+						$values = array_keys( $field_data[ $f ]['options'] );
+					}
+					${$f} = isset( $_POST[ $f ] ) && in_array( $_POST[ $f ], $values ) ? $_POST[ $f ] : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+				case 'date':
+					${$f} = isset( $_POST[ $f ] ) ? strtotime( wp_strip_all_tags( $_POST[ $f ] ) ) : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+				default:
+					${$f} = isset( $_POST[ $f ] ) ? strip_tags( trim( $_POST[ $f ] ) ) : '';
+					/* @codingStandardsIgnoreLine */
+					break;
+			}
+
+			// Save it.
+			if ( 'read_time' !== $f ) {
+				update_post_meta( $post_id, '_' . $f, ${$f} );
+			}
+		} // End foreach().
+
+		// Save the project gallery image IDs.
+		if ( isset( $_POST['helphub_image_gallery'] ) ) : /* @codingStandardsIgnoreLine */
+			$attachment_ids = array_filter( explode( ',', sanitize_text_field( $_POST['helphub_image_gallery'] ) ) );
+			/* @codingStandardsIgnoreLine */
+			update_post_meta( $post_id, '_helphub_image_gallery', implode( ',', $attachment_ids ) );
+		endif;
+
+		return $post_id;
+	} // End meta_box_save()
+
+	/**
+	 * Customise the "Enter title here" text.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 *
+	 * @param string $title The title.
+	 *
+	 * @return string $title
+	 */
+	public function enter_title_here( $title ) {
+		if ( get_post_type() === $this->post_type ) {
+			if ( 'post' === get_post_type() ) {
+				$title = __( 'Enter the article title here', 'wporg-forums' );
+			}
+		}
+
+		return $title;
+	} // End enter_title_here()
+
+	/**
+	 * Get the settings for the custom fields.
+	 * Use array merge to get a unified fields array
+	 * eg. $fields = array_merge( $this->get_custom_fields_post_display_settings(), $this->get_custom_fields_post_advertisement_settings(), $this->get_custom_fields_post_spacer_settings() );
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return array
+	 */
+	public function get_custom_fields_settings() {
+
+		$fields = array();
+		if ( 'post' === get_post_type() ) {
+			$fields = $this->get_custom_fields_post_display_settings();
+		} elseif ( 'helphub_version' === get_post_type() ) {
+			$fields = $this->get_custom_fields_version_display_settings();
+		}
+
+		return $fields;
+
+	} // End get_custom_fields_settings()
+
+	/**
+	 * Get the settings for the post display custom fields.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return array
+	 */
+	public function get_custom_fields_post_display_settings() {
+		$fields = array();
+
+		$fields['read_time'] = array(
+			'name'        => __( 'Article Read Time', 'wporg-forums' ),
+			'description' => __( 'Leave this empty, calculation is automatic', 'wporg-forums' ),
+			'type'        => 'text',
+			'default'     => '',
+			'section'     => 'info',
+		);
+
+		$fields['custom_read_time'] = array(
+			'name'        => __( 'Custom Read Time', 'wporg-forums' ),
+			'description' => __( 'Only fill up this field if the automated calculation is incorrect', 'wporg-forums' ),
+			'type'        => 'text',
+			'default'     => '',
+			'section'     => 'info',
+		);
+
+		return $fields;
+	}
+
+	/**
+	 * Get the settings for the post display custom fields.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 * @return array
+	 */
+	public function get_custom_fields_version_display_settings() {
+		$fields = array();
+
+		$fields['version_date'] = array(
+			'name'        => __( 'Date Released', 'wporg-forums' ),
+			'description' => __( 'Date this WordPress Version was released', 'wporg-forums' ),
+			'type'        => 'date',
+			'default'     => '',
+			'section'     => 'info',
+		);
+
+		$fields['musician_codename'] = array(
+			'name'        => __( 'Musician', 'wporg-forums' ),
+			'description' => __( 'The Jazz Musician this release was named after', 'wporg-forums' ),
+			'type'        => 'text',
+			'default'     => '',
+			'section'     => 'info',
+		);
+
+		return $fields;
+	}
+
+
+	/**
+	 * Get the image for the given ID.
+	 *
+	 * @param  int $id The post ID.
+	 * @param  mixed $size Image dimension. (default: "thing-thumbnail").
+	 *
+	 * @since  1.0.0
+	 * @return string <img> tag.
+	 */
+	protected function get_image( $id, $size = 'thing-thumbnail' ) {
+		$response = '';
+
+		if ( has_post_thumbnail( $id ) ) {
+			// If not a string or an array, and not an integer, default to 150x9999.
+			if ( ( is_int( $size ) || ( 0 < intval( $size ) ) ) && ! is_array( $size ) ) {
+				$size = array( intval( $size ), intval( $size ) );
+			} elseif ( ! is_string( $size ) && ! is_array( $size ) ) {
+				$size = array( 150, 9999 );
+			}
+			$response = get_the_post_thumbnail( intval( $id ), $size );
+		}
+
+		return $response;
+	} // End get_image()
+
+	/**
+	 * Run on activation.
+	 *
+	 * @access public
+	 * @since 1.0.0
+	 */
+	public function activation() {
+		$this->flush_rewrite_rules();
+	} // End activation()
+
+	/**
+	 * Flush the rewrite rules
+	 *
+	 * @access public
+	 * @since 1.0.0
+	 */
+	private function flush_rewrite_rules() {
+		$this->register_post_type();
+		flush_rewrite_rules();
+	} // End flush_rewrite_rules()
+
+	/**
+	 * Ensure that "post-thumbnails" support is available for those themes that don't register it.
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 */
+	public function ensure_post_thumbnails_support() {
+		if ( ! current_theme_supports( 'post-thumbnails' ) ) {
+			add_theme_support( 'post-thumbnails' );
+		}
+	} // End ensure_post_thumbnails_support()
+
+	/**
+	 * Add menu order
+	 *
+	 * @access public
+	 * @since  1.0.0
+	 */
+	public function add_menu_order() {
+		add_post_type_support( 'post', 'page-attributes' );
+	} // End ens
+
+} // End Class
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-taxonomy.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-taxonomy.php	(date 1519575518766)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types-taxonomy.php	(date 1519575518766)
@@ -0,0 +1,162 @@
+<?php
+/**
+ * This file is part of the Helphub Post Types plugin
+ *
+ * @package WordPress
+ * @author Jon Ang
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+	exit; // Exit if accessed directly.
+}
+
+/**
+ * Helphub Post Types Taxonomy Class
+ *
+ * Re-usable class for registering post type taxonomies.
+ *
+ * @package WordPress
+ * @subpackage HelpHub_Post_Types
+ * @category Plugin
+ * @author Jon Ang
+ * @since 1.0.0
+ */
+class HelpHub_Post_Types_Taxonomy {
+	/**
+	 * The post type to register the taxonomy for.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @var     array
+	 */
+	private $post_type;
+
+	/**
+	 * The key of the taxonomy.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @var     string
+	 */
+	private $token;
+
+	/**
+	 * The singular name for the taxonomy.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @var     string
+	 */
+	private $singular;
+
+	/**
+	 * The plural name for the taxonomy.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @var     string
+	 */
+	private $plural;
+
+	/**
+	 * The arguments to use when registering the taxonomy.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @var     string
+	 */
+	private $args;
+
+	/**
+	 * Class constructor.
+	 *
+	 * @access  public
+	 * @since   1.3.0
+	 * @param   array $post_type The post type key.
+	 * @param   string $token     The taxonomy key.
+	 * @param   string $singular  Singular name.
+	 * @param   string $plural    Plural name.
+	 * @param   array  $args      Array of argument overrides.
+	 */
+	public function __construct( $post_type = array(), $token = 'thing-category', $singular = '', $plural = '', $args = array() ) {
+		$this->post_type = $post_type;
+		$this->token = esc_attr( $token );
+		$this->singular = esc_html( $singular );
+		$this->plural = esc_html( $plural );
+
+		if ( '' === $this->singular ) {
+			$this->singular = __( 'Category', 'wporg-forums' );
+		}
+		if ( '' === $this->plural ) {
+			$this->plural = __( 'Categories', 'wporg-forums' );
+		}
+
+		$this->args = wp_parse_args( $args, $this->_get_default_args() );
+
+		add_action( 'init', array( $this, 'register' ) );
+	} // End __construct()
+
+	/**
+	 * Return an array of default arguments.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @return  array Default arguments.
+	 */
+	private function _get_default_args() {
+		return array(
+			'labels'                => $this->_get_default_labels(),
+			'public'                => true,
+			'hierarchical'          => true,
+			'show_ui'               => true,
+			'show_admin_column'     => true,
+			'query_var'             => true,
+			'show_in_nav_menus'     => false,
+			'show_tagcloud'         => false,
+			'rewrite'               => array(
+				'slug' => str_replace( 'helphub_', '', esc_attr( $this->token ) ),
+			),
+		);
+	} // End _get_default_args()
+
+	/**
+	 * Return an array of default labels.
+	 *
+	 * @access  private
+	 * @since   1.3.0
+	 * @return  array Default labels.
+	 */
+	private function _get_default_labels() {
+		return array(
+			'name'                => sprintf( _x( '%s', 'taxonomy general name', 'wporg-forums' ), $this->plural ), /* @codingStandardsIgnoreLine */
+			'singular_name'       => sprintf( _x( '%s', 'taxonomy singular name', 'wporg-forums' ), $this->singular ), /* @codingStandardsIgnoreLine */
+			'search_items'        => sprintf( __( 'Search %s', 'wporg-forums' ), $this->plural ),
+			/* translators: %s: Plural name of the post type. */
+			'all_items'           => sprintf( __( 'All %s', 'wporg-forums' ), $this->plural ),
+			/* translators: %s: Post type name. */
+			'parent_item'         => sprintf( __( 'Parent %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'parent_item_colon'   => sprintf( __( 'Parent %s:', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'edit_item'           => sprintf( __( 'Edit %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'update_item'         => sprintf( __( 'Update %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'add_new_item'        => sprintf( __( 'Add New %s', 'wporg-forums' ), $this->singular ),
+			/* translators: %s: Post type name. */
+			'new_item_name'       => sprintf( __( 'New %s Name', 'wporg-forums' ), $this->singular ),
+			'menu_name'           => $this->plural,
+		);
+	} // End _get_default_labels()
+
+	/**
+	 * Register the taxonomy.
+	 *
+	 * @access  public
+	 * @since   1.3.0
+	 * @return  void
+	 */
+	public function register() {
+		register_taxonomy( esc_attr( $this->token ), (array) $this->post_type, (array) $this->args );
+	} // End register()
+} // End Class
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types.php	(date 1519587813089)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/class-helphub-post-types.php	(date 1519587813089)
@@ -0,0 +1,258 @@
+<?php
+/**
+ * This file is part of the Helphub Post Types plugin
+ *
+ * @package WordPress
+ */
+
+/**
+ * Main HelpHub_Post_Types Class
+ *
+ * @class   HelpHub_Post_Types
+ * @version 1.0.0
+ * @since   1.0.0
+ * @package HelpHub_Post_Types
+ * @author  Jon Ang
+ */
+final class HelpHub_Post_Types {
+	/**
+	 * HelpHub_Post_Types The single instance of HelpHub_Post_Types.
+	 *
+	 * @var    object
+	 * @access private
+	 * @since  1.0.0
+	 */
+	private static $_instance = null;
+
+	/**
+	 * The token.
+	 *
+	 * @var     string
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $token;
+
+	/**
+	 * The version number.
+	 *
+	 * @var     string
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $version;
+
+	/**
+	 * The plugin directory URL.
+	 *
+	 * @var     string
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $plugin_url;
+
+	/**
+	 * The plugin directory path.
+	 *
+	 * @var     string
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $plugin_path;
+
+	/* Admin - Start */
+
+	/**
+	 * The admin object.
+	 *
+	 * @var     object
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $admin;
+
+	/**
+	 * The settings object.
+	 *
+	 * @var     object
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $settings;
+
+	/* Admin - End */
+
+	/* Post Types - Start */
+
+	/**
+	 * The post types we're registering.
+	 *
+	 * @var     array
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $post_types = array();
+
+	/* Post Types - End */
+
+	/* Taxonomies - Start */
+
+	/**
+	 * The taxonomies we're registering.
+	 *
+	 * @var     array
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public $taxonomies = array();
+
+	/* Taxonomies - End */
+
+
+	/**
+	 * Constructor function.
+	 *
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public function __construct() {
+		$this->token       = 'helphub';
+		$this->plugin_url  = plugin_dir_url( __FILE__ );
+		$this->plugin_path = plugin_dir_path( __FILE__ );
+		$this->version     = '1.0.0';
+
+		/* Post Types - Start */
+
+		require_once( __DIR__ . '/class-helphub-post-types-post-type.php' );
+		require_once( __DIR__ . '/class-helphub-post-types-taxonomy.php' );
+
+		$this->post_types['post']               = new HelpHub_Post_Types_Post_Type( 'post', __( 'Post', 'wporg-forums' ), __( 'Posts', 'wporg-forums' ), array(
+			'menu_icon' => 'dashicons-post',
+		) );
+		$this->post_types['helphub_article']    = new HelpHub_Post_Types_Post_Type( 'helphub_article', __( 'Article', 'wporg-forums' ), __( 'Articles', 'wporg-forums' ), array(
+			'menu_icon' => 'dashicons-media-document',
+		) );
+		$this->post_types['helphub_version']    = new HelpHub_Post_Types_Post_Type( 'helphub_version', __( 'WordPress Version', 'wporg-forums' ), __( 'WordPress Versions', 'wporg-forums' ), array(
+			'menu_icon' => 'dashicons-wordpress',
+		) );
+
+		/* Post Types - End */
+
+		// Register an example taxonomy. To register more taxonomies, duplicate this line.
+		$this->taxonomies['helphub_persona']       = new HelpHub_Post_Types_Taxonomy( array( 'post', 'helphub_article' ), 'helphub_persona', __( 'Persona', 'wporg-forums' ), __( 'Personas', 'wporg-forums' ) );
+		$this->taxonomies['helphub_experience']    = new HelpHub_Post_Types_Taxonomy( array( 'post', 'helphub_article' ), 'helphub_experience', __( 'Experience', 'wporg-forums' ), __( 'Experiences', 'wporg-forums' ) );
+		$this->taxonomies['helphub_major_release'] = new HelpHub_Post_Types_Taxonomy( 'helphub_version', 'helphub_major_release', __( 'Major Release', 'wporg-forums' ), __( 'Major Releases', 'wporg-forums' ) );
+
+		register_activation_hook( __FILE__, array( $this, 'install' ) );
+
+		add_action( 'init', array( $this, 'load_plugin_textdomain' ) );
+		add_action( 'admin_enqueue_scripts', array( $this, 'enqueue_admin_styles' ) );
+	} // End __construct()
+
+	/**
+	 * Main HelpHub_Post_Types Instance
+	 *
+	 * Ensures only one instance of HelpHub_Post_Types is loaded or can be loaded.
+	 *
+	 * @since 1.0.0
+	 * @static
+	 * @see HelpHub_Post_Types()
+	 * @return HelpHub_Post_Types instance
+	 */
+	public static function instance() {
+
+		if ( is_null( self::$_instance ) ) {
+			self::$_instance = new self();
+		}
+
+		return self::$_instance;
+	} // End instance()
+
+	/**
+	 * Load the localisation file.
+	 *
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public function load_plugin_textdomain() {
+		load_plugin_textdomain( 'wporg-forums', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
+	} // End load_plugin_textdomain()
+
+	/**
+	 * Enqueue post type admin Styles.
+	 *
+	 * @access public
+	 * @since   1.0.0
+	 * @return   void
+	 */
+	public function enqueue_admin_styles() {
+		global $pagenow;
+
+		wp_enqueue_style( 'helphub-post-types-admin-style', $this->plugin_url . 'assets/css/admin.css', array(), '1.0.0' );
+
+		if ( ( 'post.php' === $pagenow || 'post-new.php' === $pagenow ) ) :
+			if ( array_key_exists( get_post_type(), $this->post_types ) ) :
+				wp_enqueue_script( 'helphub-post-types-admin', $this->plugin_url . 'assets/js/admin.js', array( 'jquery' ), '1.0.1', true );
+				wp_enqueue_script( 'helphub-post-types-gallery', $this->plugin_url . 'assets/js/gallery.js', array( 'jquery' ), '1.0.0', true );
+				wp_enqueue_script( 'jquery-ui-datepicker' );
+				wp_enqueue_style( 'jquery-ui-datepicker' );
+			endif;
+		endif;
+		wp_localize_script( 'helphub-post-types-admin', 'HelphubAdmin',
+			array(
+				'default_title'  => __( 'Upload', 'wporg-forums' ),
+				'default_button' => __( 'Select this', 'wporg-forums' ),
+			)
+		);
+
+		wp_localize_script( 'helphub-post-types-gallery', 'HelphubGallery',
+			array(
+				'gallery_title'  => __( 'Add Images to Product Gallery', 'wporg-forums' ),
+				'gallery_button' => __( 'Add to gallery', 'wporg-forums' ),
+				'delete_image'   => __( 'Delete image', 'wporg-forums' ),
+			)
+		);
+
+	} // End enqueue_admin_styles()
+
+	/**
+	 * Cloning is forbidden.
+	 *
+	 * @access public
+	 * @since 1.0.0
+	 */
+	public function __clone() {
+		_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'wporg-forums' ), '1.0.0' );
+	} // End __clone()
+
+	/**
+	 * Unserializing instances of this class is forbidden.
+	 *
+	 * @access public
+	 * @since 1.0.0
+	 */
+	public function __wakeup() {
+		_doing_it_wrong( __FUNCTION__, esc_html__( 'Cheatin&#8217; huh?', 'wporg-forums' ), '1.0.0' );
+	} // End __wakeup()
+
+	/**
+	 * Installation. Runs on activation.
+	 *
+	 * @access  public
+	 * @since   1.0.0
+	 */
+	public function install() {
+		$this->_log_version_number();
+	} // End install()
+
+	/**
+	 * Log the plugin version number.
+	 *
+	 * @access  private
+	 * @since   1.0.0
+	 */
+	private function _log_version_number() {
+		// Log the version number.
+		update_option( $this->token . '-version', $this->version );
+	} // End _log_version_number()
+} // End Class
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/index.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/index.php	(date 1519575518769)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/classes/index.php	(date 1519575518769)
@@ -0,0 +1,5 @@
+<?php
+/**
+ * Silence is golden.
+ * @codingStandardsIgnoreFile
+ */
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/helphub-post-types.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/helphub-post-types.php	(date 1519587599312)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/inc/helphub-post-types/helphub-post-types.php	(date 1519587599312)
@@ -0,0 +1,24 @@
+<?php
+/**
+ * Create Custom Post Types used by HelpHub.
+ *
+ * @package HelpHub
+ */
+
+if ( ! defined( 'ABSPATH' ) ) {
+	exit; // Exit if accessed directly.
+}
+
+require_once( __DIR__ . '/classes/class-helphub-post-types.php' );
+
+/**
+ * Returns the main instance of HelpHub_Post_Types to prevent the need to use globals.
+ *
+ * @since  1.0.0
+ * @return object HelpHub_Post_Types
+ */
+function helphub_post_types() {
+	return HelpHub_Post_Types::instance();
+} // End HelpHub_Post_Types()
+
+add_action( 'plugins_loaded', 'helphub_post_types' );
Index: sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/support-helphub.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/support-helphub.php	(date 1519587542967)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/support-helphub/support-helphub.php	(date 1519587542967)
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Plugin Name: Support HelpHub
+ * Plugin URI: https://wordpress.org/support/
+ * Description: Introduces HelpHub functionality to the WordPress.org support structure.
+ * Version: 1.0
+ * Author: WordPress.org
+ * Author URI: https://wordpress.org/
+ * Text Domain: wporg-forums
+ * License: GPLv2
+ * License URI: http://opensource.org/licenses/gpl-2.0.php
+ */
+
+namespace WordPressdotorg\HelpHub;
+
+require_once( __DIR__ . '/inc/helphub-post-types/helphub-post-types.php' );
+require_once( __DIR__ . '/inc/helphub-front-page-blocks/helphub-front-page-blocks.php' );
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_archive.scss
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_archive.scss	(date 1519574492873)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_archive.scss	(date 1519574492873)
@@ -0,0 +1,37 @@
+body.archive {
+
+	#main {
+
+		article {
+
+			&:before {
+
+				display: block;
+				width: 100%;
+				height: 1px;
+				background-color: #e2dddd;
+				content: '';
+				margin-top: 20px;
+			}
+
+			&:first-of-type {
+
+				&:before {
+
+					display: none;
+				}
+			}
+
+			.entry-title {
+
+				margin-top: 20px;
+			}
+		}
+
+		.archive-pagination {
+
+			margin-top: 20px;
+			text-align: center;
+		}
+	}
+}
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_bbpress.scss
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_bbpress.scss	(revision 6741)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_bbpress.scss	(date 1519575519060)
@@ -16,9 +16,10 @@
 	
 	@media (min-width: $ms-breakpoint) {
 		> div {
-			float:left;
+			display: inline-block;
+			vertical-align: top;
 			width:30%;
-			margin-right:5%;
+			margin-right:4.5%;
 			font-size:ms(-2);
 			&:nth-child(3n) {
 				margin-right:0;
@@ -61,7 +62,7 @@
 			@media (min-width: $ms-breakpoint) {
 				height: 200px;
 				border-bottom: none;
-				margin: 2rem 5% 0 0;
+				margin: 2rem 4.5% 0 0;
 
 				&:nth-child(3n) {
 					margin-right:0;
@@ -667,6 +668,7 @@
 # Homepage
 --------------------------------------------------------------*/
 
+.forum-archive.wporg-support,
 .home.wporg-support {
 
 	.info-box {
@@ -691,8 +693,14 @@
 		}
 	}
 
-	#bbpress-forums div.odd {
-		background: transparent;
+	#bbpress-forums {
+		.bbp-forums {
+			border: none;
+		}
+
+		div.odd {
+			background: transparent;
+		}
 	}
 
 	.col-8 {
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_helphub.scss
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_helphub.scss	(date 1519575519061)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/site/_helphub.scss	(date 1519575519061)
@@ -0,0 +1,15 @@
+.three-up {
+
+	&.helphub-front-page {
+
+		p,
+		ul {
+			text-align: left;
+		}
+
+		> div {
+
+			margin-bottom: 5rem;
+		}
+	}
+}
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/style.scss
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/style.scss	(revision 6741)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/sass/style.scss	(date 1519574916718)
@@ -76,11 +76,21 @@
 --------------------------------------------------------------*/
 @import "site/site";
 
+/*--------------------------------------------------------------
+# Archives
+--------------------------------------------------------------*/
+@import "site/archive";
+
 /*--------------------------------------------------------------
 # bbPress Specific 
 --------------------------------------------------------------*/
 @import "site/bbpress";
 
+/*--------------------------------------------------------------
+# HelpHub Specific
+--------------------------------------------------------------*/
+@import "site/helphub";
+
 /*--------------------------------------------------------------
 # Infinite scroll
 --------------------------------------------------------------*/
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/bbpress-front.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/bbpress-front.php	(date 1519575519090)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/bbpress-front.php	(date 1519575519090)
@@ -0,0 +1,70 @@
+<?php
+/**
+ * Template part for displaying bbPress topics on the front page.
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WPBBP
+ */
+
+?>
+
+<?php do_action( 'bbp_before_main_content' ); ?>
+
+<?php do_action( 'bbp_template_notices' ); ?>
+
+<section class="three-up" id="forum-welcome">
+	<div>
+		<div class="info-box">
+					<span class="dashicons
+					<?php
+					/* translators: dashicon class name for 'Welcome to Support' section. Do not translate into your own language. */
+					esc_attr_e( 'dashicons-sos', 'wporg-forums' );
+					?>
+					"></span>
+			<h3><?php _e( 'Welcome to Support', 'wporg-forums' ); ?></h3>
+			<p><?php _e( 'Our community-based Support Forums are a great place to learn, share, and troubleshoot.', 'wporg-forums' ); ?></p>
+			<p><?php _e( '<a href="https://wordpress.org/support/welcome/">Get started</a>', 'wporg-forums' ); ?></p>
+		</div>
+	</div>
+	<div>
+		<div class="info-box">
+					<span class="dashicons
+					<?php
+					/* translators: dashicon class name for 'Documentation' section. Do not translate into your own language. */
+					esc_attr_e( 'dashicons-portfolio', 'wporg-forums' );
+					?>
+					"></span>
+			<h3><?php _e( 'Documentation', 'wporg-forums' ); ?></h3>
+			<p><?php _e( 'Your first stop where you\'ll find information on everything from installing to creating plugins.', 'wporg-forums' ); ?></p>
+			<p><?php _e( '<a href="https://codex.wordpress.org/">Explore documentation</a>', 'wporg-forums' ); ?></p>
+		</div>
+	</div>
+	<div>
+		<div class="info-box">
+					<span class="dashicons
+					<?php
+					/* translators: dashicon class name for 'Get Involved' section. Do not translate into your own language. */
+					esc_attr_e( 'dashicons-hammer', 'wporg-forums' );
+					?>
+					"></span>
+			<h3><?php _e( 'Get Involved', 'wporg-forums' ); ?></h3>
+			<p><?php _e( 'The Support Handbook is great for tips, tricks, and advice regarding giving the best support possible.', 'wporg-forums' ); ?></p>
+			<p><?php _e( '<a href="https://make.wordpress.org/support/handbook/">Explore the Handbook</a>', 'wporg-forums' ); ?></p>
+		</div>
+	</div>
+</section>
+
+<hr />
+
+<section>
+	<?php bbp_get_template_part( 'content', 'archive-forum' ); ?>
+
+	<div id="viewdiv">
+		<ul id="views">
+			<?php wporg_support_get_views(); ?>
+		</ul>
+	</div><!-- #viewdiv -->
+</section>
+
+<?php do_action( 'bbp_after_main_content' ); ?>
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-archive.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-archive.php	(date 1519573330304)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-archive.php	(date 1519573330304)
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Template part for displaying single posts in an archive list.
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WPBBP
+ */
+
+?>
+
+<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
+	<header class="entry-header">
+		<h2 class="entry-title">
+			<a href="<?php echo esc_url( get_the_permalink() ); ?>">
+				<?php the_title(); ?>
+			</a>
+		</h2>
+	</header><!-- .entry-header -->
+
+	<div class="entry-content">
+		<div class="container">
+			<?php the_excerpt(); ?>
+		</div>
+	</div><!-- .entry-content -->
+</article><!-- #post-## -->
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-single.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-single.php	(date 1519575519093)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/template-parts/content-single.php	(date 1519575519093)
@@ -0,0 +1,47 @@
+<?php
+/**
+ * Template part for displaying page content in page.php.
+ *
+ * @link https://codex.wordpress.org/Template_Hierarchy
+ *
+ * @package WPBBP
+ */
+
+?>
+
+<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
+	<?php if ( is_page_template( 'page-forums-sidebar.php' ) ) : ?>
+		<?php bbp_breadcrumb(); ?>
+	<?php endif; ?>
+
+	<header class="entry-header">
+		<?php the_title( '<h1 class="entry-title">', '</h1>' ); ?>
+	</header><!-- .entry-header -->
+
+	<div class="entry-content">
+		<div class="container">
+			<?php
+			the_content();
+
+			wp_link_pages( array(
+				'before' => '<div class="page-links">' . esc_html__( 'Pages:', 'wporg-forums' ),
+				'after'  => '</div>',
+			) );
+			?>
+		</div>
+	</div><!-- .entry-content -->
+
+	<footer class="entry-footer">
+		<?php
+		edit_post_link(
+			sprintf(
+				/* translators: %s: Name of current post */
+				esc_html__( 'Edit %s', 'wporg-forums' ),
+				the_title( '<span class="screen-reader-text">"', '"</span>', false )
+			),
+			'<span class="edit-link">',
+			'</span>'
+		);
+		?>
+	</footer><!-- .entry-footer -->
+</article><!-- #post-## -->
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive-forum.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive-forum.php	(date 1519575518954)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive-forum.php	(date 1519575518954)
@@ -0,0 +1,21 @@
+<?php
+
+/**
+ * Template Name: bbPress - Support (Index)
+ *
+ * @package bbPress
+ * @subpackage Theme
+ */
+
+get_header(); ?>
+
+
+	<main id="main" class="site-main" role="main">
+
+		<?php get_template_part( 'template-parts/bbpress', 'front' ); ?>
+
+	</main>
+
+
+<?php
+get_footer();
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive.php	(date 1519574409983)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/archive.php	(date 1519574409983)
@@ -0,0 +1,33 @@
+<?php
+/**
+ * The catchall archive template.
+ *
+ * If no specific archive layout is defined, we'll go with
+ * a generic simplistic one, like this, just to actually
+ * be able to show some content.
+ *
+ * @package WPBBP
+ */
+
+get_header(); ?>
+
+
+	<main id="main" class="site-main" role="main">
+		<?php
+		while ( have_posts() ) :
+			the_post();
+		?>
+
+		<?php get_template_part( 'template-parts/content', 'archive' ); ?>
+
+		<?php endwhile; ?>
+
+		<div class="archive-pagination">
+			<?php posts_nav_link(); ?>
+		</div>
+
+	</main>
+
+
+<?php
+get_footer();
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/front-page.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/front-page.php	(date 1519575519011)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/front-page.php	(date 1519575519011)
@@ -0,0 +1,24 @@
+<?php
+
+/**
+ * The front page of the site.
+ *
+ * @package WPBBP
+ */
+
+get_header(); ?>
+
+	<main id="main" class="site-main" role="main">
+
+		<?php if ( ! is_active_sidebar( 'front-page-blocks' ) ) : ?>
+			<?php get_template_part( 'template-parts/bbpress', 'front' ); ?>
+		<?php else : ?>
+			<div class="three-up helphub-front-page">
+				<?php dynamic_sidebar( 'front-page-blocks' ); ?>
+			</div>
+		<?php endif; ?>
+
+	</main>
+
+<?php
+get_footer();
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/functions.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/functions.php	(revision 6741)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/functions.php	(date 1519588015681)
@@ -27,6 +27,22 @@
 }
 add_action( 'wp_enqueue_scripts', 'wporg_support_scripts' );
 
+/**
+ * Register widget areas used by the theme.
+ *
+ * @uses register_sidebar()
+ */
+function wporg_support_register_widget_areas() {
+	register_sidebar( array(
+		'name'          => __( 'Front page blocks', 'wporg-forums' ),
+		'id'            => 'front-page-blocks',
+		'description'   => __( 'Contains blocks to display on the front page of this site', 'wporg-forums' ),
+		'before_widget' => '<div id="%1$s" class="widget %2$s">',
+		'after_widget'  => '</div>',
+	) );
+}
+add_action( 'widgets_init', 'wporg_support_register_widget_areas' );
+
 /**
  * Customized breadcrumb arguments
  * Breadcrumb Root Text: "WordPress Support"
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/searchform.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/searchform.php	(revision 6741)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/searchform.php	(date 1519588015689)
@@ -20,7 +20,7 @@
 			$placeholder = _x( 'Search this forum', 'placeholder', 'wporg-forums' );
 			$project     = wporg_support_get_compat_object();
 		} else {
-			$placeholder = _x( 'Search forums', 'placeholder', 'wporg-forums' );
+			$placeholder = _x( 'Search support resources', 'placeholder', 'wporg-forums' );
 			$project     = null;
 		}
 	?>
Index: sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/single.php
===================================================================
--- sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/single.php	(date 1519575519082)
+++ sites/trunk/wordpress.org/public_html/wp-content/themes/pub/wporg-support/single.php	(date 1519575519082)
@@ -0,0 +1,23 @@
+<?php
+/**
+ * The template for displaying all single post or CPT entry.
+ *
+ * @package WPBBP
+ */
+
+get_header(); ?>
+
+	<main id="main" class="site-main" role="main">
+
+		<?php
+		while ( have_posts() ) :
+			the_post();
+
+			get_template_part( 'template-parts/content', 'single' );
+		endwhile; // End of the loop.
+		?>
+
+	</main><!-- #main -->
+
+<?php
+get_footer();
