Index: wp-thank-you.php
--- wp-thank-you.php Locally New
+++ wp-thank-you.php Locally New
@@ -0,0 +1,315 @@
+<?php
+/**
+ * Plugin Name: WP About
+ * Plugin URI: 
+ * Description: Adds About TLM
+ * Author: 
+ * Version: 0.1
+ */
+
+function wph_about_page() { ?>
+	<div class="wrap">
+		<?php screen_icon( 'options-general' ); ?>
+		<h2><?php _e( 'About', 'wph' ); ?></h2>
+
+		<?php do_action( 'wph_about_page' ); ?>
+
+	</div>
+<?php
+}
+
+function wph_admin_menu() {
+	$base_page = 'wph-about-page';
+
+	// Top Level Page
+	add_utility_page( __( 'About', 'wph' ), __( 'About', 'wph' ), 'read_post', $base_page, array(), '' );
+
+	// Add About page to bottom
+	add_submenu_page( $base_page, __( 'About', 'wph' ), __( 'About', 'wph' ), 'read_post', 'wph-about-page', 'wph_about_page' );
+
+	// Allow plugins to hook in
+	do_action( 'wph_admin_menu' );
+}
+add_action( 'admin_menu', 'wph_admin_menu' );
+
+function wpty_admin_footer_text( $admin_footer_text ) {
+	$admin_footer_text .= sprintf( __( ' | <a href="%s">About</a>', 'wpl' ), add_query_arg( array( 'page' => 'wph-about-page' ), admin_url( 'admin.php') ) );
+
+	return $admin_footer_text;
+}
+add_filter( 'admin_footer_text', 'wpty_admin_footer_text' );
+
+function _wp_core_wpty_add() {
+	wpty_add( 'WordPress Core', 'Kind of a big deal...',     'http://wordpress.org/',         site_url() . '/license.txt',                     'GPL 2' );
+	wpty_add( 'TwentyTen',      'Default WordPress theme',   'http://wordpress.org/',         content_url() . '/themes/twentyten/license.txt', 'GPL 2' );
+	wpty_add( 'TinyMCE',        'WYSIWYG Editor',            'http://tinymce.moxiecode.com/', includes_url() . '/js/tinymce/license.txt',      'GPL 2.1' );
+}
+add_action( 'admin_init', '_wp_core_wpty_add' );
+
+function _wp_core_wpty_about_page() {
+
+	if ( wpty_has_projects() ) : ?>
+
+		<h3><?php _e( 'Projects', 'wph' ); ?></h3>
+		<p><?php _e( 'WordPress is made up of many smaller projects. Here are a few of them.', 'wph' ); ?></p>
+		<ol class="item-list" style="float: left; width: 20%;">
+		<?php while ( wpty_projects() ) : wpty_the_project(); ?>
+
+			<li>
+				<h4><a href="<?php wpty_project_link(); ?>" target="wph-license"><?php wpty_project_name(); ?></a></h4>
+				<div class="item">
+					<p class="description"><?php wpty_project_message(); ?></p>
+					<a href="<?php wpty_project_license_path(); ?>" target="wph-license"><?php _e( 'View License &rarr;', 'wph' ); ?></a>
+				</div>
+			</li>
+
+		<?php endwhile; ?>
+		</ol>
+
+		<iframe src="<?php echo site_url() . '/license.txt'; ?>" name="wph-license" width="65%" height="500px" style="border: 1px solid #bbb; background-color: #fff; margin-bottom: 15px;"></iframe>
+
+	<?php else : ?>
+
+		<div id="message" class="info">
+			<p><?php _e( 'There were no projects found. This is probably wrong.', 'wph' ); ?></p>
+		</div>
+
+	<?php endif;
+
+}
+add_action( 'wph_about_page', '_wp_core_wpty_about_page' );
+
+/**
+ * WP_Thank_You
+ *
+ * Container for internal WordPress projects and their licenses
+ */
+class WP_Thank_You {
+	var $projects = array();
+	var $total;
+
+	function WP_Thank_You() {
+		do_action( 'wp_thank_you' );
+	}
+
+	function add( $project, $message, $link, $license_path, $license_type ) {
+
+		if ( empty( $project ) || empty( $message ) || empty( $license_type ) )
+			return false;
+
+		if ( !in_array( $project, $this->projects ) )
+			$this->projects[] = array( $project, $message, $link, $license_path, $license_type );
+
+		$this->total = (int)$this->total + 1;
+	}
+
+	function remove( $project ) {
+		if ( isset( $this->projects[$project] ) )
+			unset( $this->projects[$project] );
+
+		$this->total = (int)$this->total - 1;
+	}
+}
+
+// I want to thank you, for giving me, time to breath... :)
+$wpty = new WP_Thank_You();
+
+/**
+ * wpty_add
+ *
+ * Add an internal project to the global Thank You
+ *
+ * @global WP_Thank_You $wph
+ * @param string $project
+ * @param string $message
+ * @param string $license_path
+ * @param string $license_type
+ */
+function wpty_add( $project, $message, $link, $license_path, $license_type ) {
+	global $wpty;
+
+	$wpty->add( $project, $message, $link, $license_path, $license_type );
+}
+
+/**
+ * wpty_remove
+ *
+ * Remove an internal project from the global Thank You
+ *
+ * @global WP_Thank_You $wph
+ * @param string $project
+ */
+function wpty_remove( $project ) {
+	global $wpty;
+
+	$wpty->remove( $project );
+}
+
+/** THANK YOU TEMPLATE TAGS **/
+
+class WP_Thank_You_Template {
+	var $current_project = -1;
+	var $project_count;
+	var $projects;
+	var $project;
+
+	var $in_the_loop;
+
+	var $pag_page;
+	var $pag_num;
+	var $pag_links;
+	var $total_project_count;
+
+	var $sort_by;
+	var $order;
+
+	function WP_Thank_You_Template( $page, $per_page, $max, $search_terms ) {
+		global $wpty;
+
+		$this->pag_page = isset( $_REQUEST['typage'] ) ? intval( $_REQUEST['typage'] ) : $page;
+		$this->pag_num  = isset( $_REQUEST['num'] ) ? intval( $_REQUEST['num'] ) : $per_page;
+
+		$this->projects = $wpty->projects;
+
+		if ( !$max || $max >= (int)$wpty->projects['total'] )
+			$this->total_project_count = (int)$wpty->projects['total'];
+		else
+			$this->total_project_count = (int)$max;
+
+		if ( $max ) {
+			if ( $max >= count($this->projects) ) {
+				$this->project_count = count( $this->projects );
+			} else {
+				$this->project_count = (int)$max;
+			}
+		} else {
+			$this->project_count = count( $this->projects );
+		}
+
+		// Build pagination links
+		if ( (int)$this->total_project_count && (int)$this->pag_num ) {
+			$this->pag_links = paginate_links( array(
+				'base'      => add_query_arg( array( 'typage' => '%#%', 'num' => $this->pag_num, 's' => $search_terms, 'sortby' => $this->sort_by, 'order' => $this->order ) ),
+				'format'    => '',
+				'total'     => ceil( (int)$this->total_project_count / (int)$this->pag_num ),
+				'current'   => $this->pag_page,
+				'prev_text' => '&larr;',
+				'next_text' => '&rarr;',
+				'mid_size'  => 1
+			) );
+		}
+	}
+
+	function has_projects() {
+		if ( $this->project_count )
+			return true;
+
+		return false;
+	}
+
+	function next_project() {
+		$this->current_project++;
+		$this->project = $this->projects[$this->current_project];
+
+		return $this->project;
+	}
+
+	function rewind_projects() {
+		$this->current_project = -1;
+		if ( $this->project_count > 0 )
+			$this->project = $this->projects[0];
+	}
+
+	function projects() {
+		if ( $this->current_project + 1 < $this->project_count ) {
+			return true;
+		} elseif ( $this->current_project + 1 == $this->project_count ) {
+			do_action( 'loop_end' );
+			// Do some cleaning up after the loop
+			$this->rewind_projects();
+		}
+
+		$this->in_the_loop = false;
+		return false;
+	}
+
+	function the_project() {
+		$this->in_the_loop = true;
+		$this->project     = $this->next_project();
+
+		if ( 0 == $this->current_project ) // loop has just started
+			do_action( 'loop_start' );
+	}
+}
+
+function wpty_has_projects ( $args = '' ) {
+	global $wpty, $wpty_template;
+
+	$defaults = array(
+		'page'         => 1,
+		'per_page'     => 20,
+		'max'          => false,
+		'search_terms' => '',
+	);
+
+	$r = wp_parse_args( $args, $defaults );
+	extract( $r );
+
+	$wpty_template = new WP_Thank_You_Template( $page, $per_page, $max, $search_terms );
+
+	return apply_filters( 'wpty_has_projects', $wpty_template->projects, &$wpty_template );
+}
+
+function wpty_the_project () {
+	global $wpty_template;
+	return $wpty_template->the_project();
+}
+
+function wpty_projects() {
+	global $wpty_template;
+	return $wpty_template->projects();
+}
+
+function wpty_project_name () {
+	echo wpty_get_project_name();
+}
+	function wpty_get_project_name () {
+		global $wpty_template;
+		return apply_filters( 'wpty_get_project_name', $wpty_template->project[0] );
+	}
+
+function wpty_project_message () {
+	echo wpty_get_project_message();
+}
+	function wpty_get_project_message () {
+		global $wpty_template;
+		return apply_filters( 'wpty_get_project_message', $wpty_template->project[1] );
+	}
+
+function wpty_project_link () {
+	echo wpty_get_project_link();
+}
+	function wpty_get_project_link () {
+		global $wpty_template;
+		return apply_filters( 'wpty_get_project_link', $wpty_template->project[2] );
+	}
+
+function wpty_project_license_path () {
+	echo wpty_get_project_license_path();
+}
+	function wpty_get_project_license_path () {
+		global $wpty_template;
+		return apply_filters( 'wpty_get_project_license_path', $wpty_template->project[3] );
+	}
+
+function wpty_project_license_type () {
+	echo wpty_get_project_license_type();
+}
+	function wpty_get_project_license_type () {
+		global $wpty_template;
+		return apply_filters( 'wpty_get_project_license_type', $wpty_template->project[4] );
+	}
+
+/** END THANK YOU TEMPLATE TAGS **/
+
+?>
