<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[1024] sites/trunk/wordpress.tv/public_html: WordPress.tv: Open source WPTV theme.</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/1024">1024</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/1024","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>iandunn</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2014-12-03 20:10:33 +0000 (Wed, 03 Dec 2014)</dd>
</dl>
<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>WordPress.tv: Open source WPTV theme.
See <a href="http://meta.trac.wordpress.org/ticket/475">#475</a>
props obenland</pre>
<h3>Added Paths</h3>
<ul>
<li>sites/trunk/wordpress.tv/public_html/wp-content/</li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/</li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2404php">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/404.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2anonuploadtemplatephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/anon-upload-template.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2archivephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/archive.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2breadcrumbsphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/breadcrumbs.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2categorywordcamptvphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category-wordcamptv.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2categoryphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2commentsphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/comments.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2footerphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/footer.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2frontpagephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/front-page.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2functionsphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/functions.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2headerphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/header.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iarrowpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iautomatticpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ibgpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iheaderbgpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2imichaelpickstashesaguinnessgif">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2inoisepng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2inotfoundpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ivideopresspoweredpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ivideowrapperbgpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptv2xpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvbluepng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvgradpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvlogopng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvpng">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ie6css">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/ie6.css</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/inc/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2incwpcomphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/inc/wpcom.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2indexphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/index.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/js/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2jsdropdownsjs">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/js/dropdowns.js</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pagephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/page.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2paginationphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/pagination.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginsrewritephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/rewrite.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-anon-upload/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvanonuploadanonuploadphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-anon-upload/anon-upload.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-oembed/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvoembedwordpresstvoembedphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-oembed/wordpresstv-oembed.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvrestwordpresstvrestphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/wordpresstv-rest.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-unisubs/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvunisubswordpresstvunisubsphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-unisubs/wordpresstv-unisubs.php</a></li>
<li>sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-upload-subtitles/</li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvuploadsubtitleswordpresstvuploadsubtitlesphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-upload-subtitles/wordpresstv-upload-subtitles.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2searchphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/search.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebareventphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-event.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarsinglephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-single.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarwordcamptvphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-wordcamptv.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2singlephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/single.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2stylecss">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/style.css</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2taxonomyeventphp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/taxonomy-event.php</a></li>
<li><a href="#sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2uploadsubtitlestemplatephp">sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/upload-subtitles-template.php</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2404php"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/404.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/404.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/404.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,30 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * WordCamp.tv Index Fallback
+ *
+ * It will be weird if somebody sees this (but okay if 404)
+ */
+
+get_header();
+global $wp_query, $post, $wptv;
+?>
+ <div class="wptv-hero">
+ <h2 class="page-title"><?php esc_html_e( 'Whoops!', 'wptv' ); ?></h2>
+ </div>
+ <div class="container">
+ <div class="primary-content">
+ <div class="baron-von-pick">
+ <img src="<?php echo get_stylesheet_directory_uri(); ?>/i/michael-pick-stashes-a-guinness.gif" alt="" /><br />
+ <?php printf( __( 'Photo animation credit: %s.', 'wptv' ), '<a href="http://markjaquith.com/">Mark Jaquith</a>' ); ?>
+ </div>
+ <div class="message-404">
+ <h2><?php esc_html_e( 'Uh oh, someone made a mistake!', 'wptv' ); ?></h2>
+ <p><?php esc_html_e( 'These sorts of things happen…', 'wptv' ); ?></p>
+ <p><?php esc_html_e( 'Try searching for what you were looking for.', 'wptv' ); ?></p>
+ <p><?php echo get_search_form(); ?></p>
+ <p><?php printf( __( 'Or, <a href="%s">visit the homepage</a> to start a fresh journey.', 'wptv' ), '/' ); ?></p>
+ </div>
+ </div>
+ </div><!-- container -->
+<?php
+get_footer();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2anonuploadtemplatephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/anon-upload-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/anon-upload-template.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/anon-upload-template.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,402 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Template Name: Anon video upload
+ *
+ * A custom page template containing the "submit video" form
+ */
+
+
+function anon_upload_css() {
+ ?>
+ <style type="text/css">
+ <?php // theme structural css ?>
+ html,
+ body {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ }
+
+ .page-template-anon-upload-template-php #page {
+ height: auto;
+ min-height: 100%;
+ position: relative;
+ width: 100%;
+ }
+
+ .page-template-anon-upload-template-php #header {
+ margin: 0;
+ padding-top: 10px;
+ }
+
+ .page-template-anon-upload-template-php #footer {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ }
+
+ .video-upload {
+ padding-bottom: 70px;
+ }
+
+ .noscript-show p {
+ margin: 0 !important;
+ }
+ <?php // theme structural end ?>
+
+ .container {
+ overflow: hidden;
+ }
+
+ .video-upload-left {
+ max-width: 550px;
+ }
+
+ .video-upload-right {
+ float: right;
+ width: 390px;
+ margin: -25px 0 25px;
+ }
+
+ .video-upload p {
+ margin: 16px 0;
+ }
+
+ .video-upload h3 {
+ font-size: 22px;
+ }
+
+ .video-upload div.error {
+ border: 1px solid #c00;
+ border-radius: 3px;
+ background-color: #ffebe8;
+ padding: 0 10px;
+ margin: 10px 0;
+ }
+
+ .video-upload div.error p {
+ margin: 0.5em 0;
+ }
+
+ .video-upload-left p > label,
+ .video-upload-left div > label {
+ padding: 4px 0 0;
+ display: block;
+ width: 130px;
+ float: left;
+ font-weight: bold;
+ }
+
+ .video-upload-left p > label.wptv-video-wordcamp-cb {
+ display: inline;
+ float: none;
+ }
+
+ .video-upload-left p label .required {
+ line-height: 15px;
+ vertical-align: bottom;
+ margin: 0 3px;
+ }
+
+ .video-upload-left input[type="text"],
+ .video-upload-left textarea,
+ .video-upload-left ul.cats-checkboxes {
+ border-radius: 3px;
+ border: 1px solid #dfdfdf;
+ color: #333;
+ background-color: #fff;
+ padding: 4px;
+ width: 329px;
+ max-width: 329px;
+ }
+
+ .video-upload-left ul.cats-checkboxes {
+ margin-left: 130px;
+ height: 150px;
+ overflow: auto;
+ }
+
+ .video-upload-left ul.cats-checkboxes ul.children {
+ margin-left: 15px;
+ }
+
+ .video-upload-left input[type="text"]:focus,
+ .video-upload-left textarea:focus {
+ border-color: #bbb;
+ }
+
+ .video-upload-left #wptv_honey_container {
+ display: none;
+ }
+
+ #video-upload-form p.last {
+ margin: 5px 80px 25px;
+ text-align: right;
+ }
+
+ #video-upload-form p .invalid {
+ border: 1px solid red;
+ }
+
+ #video-upload-form input[type="submit"] {
+ font-size: 15px;
+ padding: 4px 12px;
+ }
+
+ .page-template-anon-upload-template-php .wptv-hero {
+ padding: 20px;
+ }
+
+ .page-template-anon-upload-template-php .wptv-hero h2 {
+ font-size: 24px;
+ }
+
+ .video-upload-right .accepted-formats {
+ margin-left: 16px;
+ }
+
+ .video-upload-right .accepted-formats li {
+ list-style: square;
+ }
+
+ .video-upload-right h3 {
+ padding-bottom: 4px;
+ }
+
+ .video-upload .pass-form label {
+ float: none;
+ display: inline;
+ width: auto;
+ }
+ </style>
+ <?php
+}
+
+add_action( 'wp_head', 'anon_upload_css' );
+
+get_header();
+
+$message = '';
+
+if ( !empty($_REQUEST['error']) ) {
+ $message = (int) $_REQUEST['error'];
+
+ switch ( $message ) {
+ case 1:
+ $message = 'Error: pleas select a video file.';
+ break;
+ case 2:
+ $message = 'Error: invalid file type.';
+ break;
+ case 3:
+ $message = 'Error: unknown file type.';
+ break;
+ case 4:
+ $message = 'Upload error: the video cannot be saved.';
+ break;
+ case 5:
+ $message = 'Unknown error. Please try again later.';
+ break;
+ case 6:
+ $message = 'Error: invalid submission.';
+ break;
+ // these shouldn't show, JS form validation should catch them
+ case 10:
+ $message = 'Error: pleas enter your name.';
+ break;
+ case 11:
+ $message = 'Error: pleas enter your email address.';
+ break;
+ case 12:
+ $message = 'Error: pleas enter a valid email address.';
+ break;
+ case 13:
+ $message = "Error: please leave the first field empty. (It helps us know you're not a spammer.)";
+ break;
+ }
+ $message = '<div class="error"><p>' . $message . '</p></div>';
+} elseif ( !empty($_REQUEST['success']) ) {
+ $message = '<h3>Thank you for submitting a video; it was uploaded successfully.</h3><p>Submit another?</p>';
+}
+
+?>
+
+<div class="wptv-hero">
+ <div class="single container">
+ <h2><?php esc_html_e( 'Submit a video' ); ?></h2>
+ </div>
+</div>
+
+<div class="container">
+<div class="video-upload">
+<?php
+
+ // temp pwd?
+ if ( post_password_required() ) {
+ echo '<div class="pass-form">';
+ echo get_the_password_form();
+ echo '</div></div></div>';
+ get_footer();
+ return;
+ } else {
+ echo $message;
+ }
+
+?>
+<noscript><div class="error"><p>This form requires JavaScript. Please enable it in your browser and reload the page.</p></div></noscript>
+<div class="video-upload-right">
+ <h3>Guidelines</h3>
+ <p>WordCamp videos: the audio is clear and easy to understand, the camera was on a tripod, the video shows the speaker and slides, divide the video by presentation if possible.</p>
+ <p>Screencasts: keep it concise, keep it clear, keep on track (no chock-full of personal promotion please), keep it current.</p>
+ <p>Vodcasts and other video-based content: if you have put together a video podcast or other WordPress focused, relevant video - let us <a href="http://wordpress.tv/contact/">know about it</a>.
+ <p>If this is the first time you're submitting a video, please check all <a href="http://blog.wordpress.tv/submission-guidelines/">Submission Guidelines</a>.</p>
+ <h3>Accepted formats</h3>
+ <p>Maximum upload file size: 1GB. You can upload the following video formats:</p>
+ <ul class="accepted-formats">
+ <li>avi</li>
+ <li>mov/qt</li>
+ <li>mpeg/mpg</li>
+ <li>mp4</li>
+ <li>ogv</li>
+ <li>wmv</li>
+ <li>3gp/3g2</li>
+ </ul>
+</div>
+
+<div class="video-upload-left">
+<?php if ( !$message ) { ?>
+ <p>Please review the guidelines listed on the right, then submit your video below:</p>
+<?php } ?>
+
+ <form method="post" action="<?php echo admin_url('admin-post.php'); ?>" id="video-upload-form" enctype="multipart/form-data">
+ <?php wp_nonce_field('wptv-upload-video', 'wptvvideon'); ?>
+ <input type="hidden" name="action" value="wptv_video_upload" />
+
+ <?php // This field only exists to trap spam bots that will automatically fill it in. It will be hidden from normal users. ?>
+ <p id="wptv_honey_container">
+ <label for="wptv_honey"><?php esc_html_e( 'Leave this empty' ); ?></label>
+ <input type="text" id="wptv_honey" name="wptv_honey" value="" />
+ </p>
+ <p>
+ <input type="checkbox" id="wptv_video_wordcamp" name="wptv_video_wordcamp" />
+ <label for="wptv_video_wordcamp" class="wptv-video-wordcamp-cb"><?php esc_html_e( 'This is a WordCamp video' ); ?></label>
+ </p>
+
+ <?php if ( ! is_user_logged_in() ) : ?>
+ <p>
+ <label for="wptv_uploaded_by"><?php esc_html_e( 'Uploaded by' ); ?><span class="required"> * </span></label>
+ <input type="text" id="wptv_uploaded_by" name="wptv_uploaded_by" value="" />
+ </p>
+ <p>
+ <label for="wptv_email"><?php esc_html_e( 'Email address' ); ?><span class="required"> * </span></label>
+ <input type="text" id="wptv_email" name="wptv_email" value="" />
+ </p>
+ <?php endif; ?>
+
+ <p>
+ <label for="wptv_video_title"><?php esc_html_e( 'Video title' ); ?></label>
+ <input type="text" id="wptv_video_title" name="wptv_video_title" value="" />
+ </p>
+ <p>
+ <label for="wptv_language"><?php esc_html_e( 'Language' ); ?></label>
+ <input type="text" id="wptv_language" name="wptv_language" value="" />
+ </p>
+
+ <div class="cats">
+ <label for="wptv_categories"><?php esc_html_e( 'Category' ); ?></label>
+ <ul class="cats-checkboxes">
+ <?php
+ include_once( ABSPATH . '/wp-admin/includes/template.php' );
+ wp_category_checklist();
+ ?>
+ </ul>
+ </div>
+
+ <p>
+ <label for="wptv_video_producer"><?php esc_html_e( 'Video producer' ); ?></label>
+ <input type="text" id="wptv_video_producer" name="wptv_video_producer" value="" />
+ </p>
+ <p>
+ <label for="wptv_speakers"><?php esc_html_e( 'Speakers' ); ?></label>
+ <input type="text" id="wptv_speakers" name="wptv_speakers" value="" />
+ </p>
+ <p>
+ <label for="wptv_event"><?php esc_html_e( 'Event' ); ?></label>
+ <input type="text" id="wptv_event" name="wptv_event" value="" />
+ </p>
+ <p>
+ <label for="wptv_video_description"><?php esc_html_e( 'Description' ); ?></label>
+ <textarea name="wptv_video_description" id="wptv_video_description" rows="8" cols="40"></textarea>
+ </p>
+ <p>
+ <label for="wptv_file"><?php esc_html_e( 'Video file' ); ?><span class="required"> * </span></label>
+ <input type="file" name="wptv_file" id="wptv_file" />
+ </p>
+ <p class="last">
+ <input type="submit" id="wptv_video_upload" style="display:none;" value="<?php esc_attr_e( 'Submit' ); ?>" />
+ </p>
+ </form>
+</div>
+</div>
+</div>
+
+<script type="text/javascript">
+jQuery( function($) {
+ var invalid,
+ val,
+ uploaded_by = $( '#wptv_uploaded_by' ),
+ email = $( '#wptv_email' ),
+ file = $( '#wptv_file' ),
+ honey = $( '#wptv_honey' );
+
+ invalid = function( el, e ) {
+ el.addClass( 'invalid' );
+ el.one( 'click', function() {
+ $( this ).removeClass( 'invalid' );
+ } );
+ e.preventDefault();
+ }
+
+ $( '#wptv_video_upload' ).show();
+ $( '#video-upload-form input[type="text"]' ).each( function() {
+ $( this ).attr( 'maxlength', '100' );
+ } );
+ $( 'ul.cats-checkboxes input' ).prop( 'disabled', false );
+
+ $( '#video-upload-form' ).submit( function( e ) {
+ var scroll = false;
+
+ if ( uploaded_by.length && ! uploaded_by.val() ) {
+ invalid( uploaded_by, e );
+ scroll = true;
+ }
+
+ if ( email.length ) {
+ val = email.val();
+
+ if ( !val || !/\S+@\S+\.\S+/.test( val ) ) {
+ invalid(email, e);
+ scroll = true;
+ }
+ }
+
+ if ( ! file.val() || !/\.(avi|mov|qt|mpeg|mpg|mpe|mp4|m4v|asf|asx|wax|wmv|wmx|ogv|3gp|3g2)$/.test( file.val() ) ) {
+ invalid(file, e);
+ }
+
+ // If there's any input in the honeypot field, it was probably put there by a bot, so reject the submission
+ if ( honey.val().length > 0 ) {
+ invalid( honey, e );
+ scroll = true;
+ }
+
+ if ( scroll && uploaded_by.length ) {
+ uploaded_by.get( 0 ).scrollIntoView();
+ }
+ } );
+} );
+</script>
+
+<?php get_footer();
+
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2archivephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/archive.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/archive.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/archive.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,90 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * WordCamp.tv Archives
+ *
+ * Yearly, monthly, daily, author and whatever falls back to archive.php.
+ */
+
+get_header();
+global $wp_query, $post, $wptv;
+?>
+<div class="wptv-hero">
+ <h2 class="page-title"><?php
+ if ( is_category() ) :
+ printf( __( '‘%s’ Videos', 'wptv' ), single_cat_title( '', false ) );
+
+ elseif ( is_tag() ) :
+ printf( __( '‘%s’ Videos', 'wptv' ), single_tag_title( '', false ) );
+
+ elseif ( is_day() ) :
+ printf( _x( 'Archive for %s', 'Daily archive page', 'wptv' ), get_the_time( __( 'F jS, Y', 'wptv' ) ) );
+
+ elseif ( is_month() ) :
+ printf( _x( 'Archive for %s', 'Monthly archive page', 'wptv' ), get_the_time( __( 'F, Y', 'wptv' ) ) );
+
+ elseif ( is_year() ) :
+ printf( _x( 'Archive for %s', 'Yearly archive page', 'wptv' ), get_the_time( __( 'Y', 'wptv' ) ) );
+
+ elseif ( is_author() ) :
+ esc_html_e( 'Author Archive', 'wptv' );
+
+ elseif ( isset( $wp_query->query_vars['taxonomy'] ) ) :
+ $tax = get_taxonomy( $wp_query->query_vars['taxonomy'] );
+ $terms = get_term_by( 'slug', $wp_query->query_vars['term'], $wp_query->query_vars['taxonomy'] );
+ print( "$tax->label: $terms->name" );
+
+ elseif ( is_search() ) :
+ printf( __( 'Search Results for ‘%s’', 'wptv' ), '<span>' . get_search_query() . '</span>' );
+
+ else :
+ esc_html_e( 'Archives', 'wptv' );
+
+ endif;
+ ?>
+ </h2>
+</div>
+<div class="container">
+ <div class="primary-content">
+
+ <?php if ( have_posts() ) : ?>
+ <ul class="archive video-list">
+
+ <?php while ( have_posts() ) : the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>" class="video-thumbnail">
+ <?php $wptv->the_video_image( 50, null, false ); ?>
+ </a>
+ <div class="video-description">
+ <h4 class="video-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h4>
+ <?php
+ $wptv->the_terms( 'event', '<span class="video-events">', ', ', '</span>', false );
+ $label = _n( 'Speaker:', 'Speakers:', count( get_the_terms( $post->ID, 'speakers' ) ), 'wptv' );
+ $wptv->the_terms( 'speakers', '<span class="video-speakers"><strong>' . $label . '</strong> ', ', ', '</span>', false );
+ ?>
+ <span class="video-excerpt">
+ <?php
+ $excerpt = get_the_time( get_option( 'date_format' ) );
+ if ( has_excerpt() ) {
+ $excerpt .= ' — ' . get_the_excerpt();
+ }
+ echo apply_filters( 'the_excerpt', $excerpt );
+ ?>
+ </span>
+ </div>
+ </li>
+ <?php endwhile; // have_posts ?>
+
+ </ul><!-- .archive.video-list -->
+ <?php else: // have_posts ?>
+
+ <h3><?php esc_html_e( 'No videos found.', 'wptv' ); ?></h3>
+
+ <?php endif; // have_posts ?>
+
+ <?php get_template_part( 'pagination' ); ?>
+
+ </div><!-- primary-content -->
+ <?php get_sidebar(); ?>
+</div><!-- .container -->
+<?php
+get_footer();
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2breadcrumbsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/breadcrumbs.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/breadcrumbs.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/breadcrumbs.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,14 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Breadcrumbs template part, use with get_template_part()
+ */
+
+global $wptv;
+?>
+<div class="breadcrumb">
+ <a href="<?php echo esc_attr( home_url() );?>">Home</a>
+ <?php
+ $wptv->the_category( '<span class="arrow">»</span>' );
+ $wptv->the_event( '<span class="arrow">»</span>' );
+ ?>
+</div>
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2categorywordcamptvphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category-wordcamptv.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category-wordcamptv.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category-wordcamptv.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,74 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * WordCampTV Category Archives
+ *
+ * Requires a special display, hence the template.
+ */
+
+$featured = new WP_Query( array(
+ 'posts_per_page' => 6,
+ 'category_name' => 'wordcamptv',
+ 'tag' => 'featured',
+) );
+
+get_header();
+global $wptv;
+?>
+<div class="wptv-hero group">
+ <div class="container">
+
+ <h2 class="page-title"><?php single_term_title(); ?></h2>
+ <div class="desc"><?php echo category_description(); ?></div>
+
+ <?php if ( $featured->have_posts() ) : $featured->the_post(); ?>
+ <div class="main-video">
+ <?php $wptv->the_video(); ?>
+ <h3>
+ <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>" class="video-title"><?php the_title(); ?></a>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </h3>
+ </div><!-- .main-video -->
+ <?php endif; // have_posts ?>
+
+ <div class="secondary-videos">
+ <ul>
+
+ <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
+ <li class="group">
+ <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>" >
+ <span class="video-thumbnail">
+ <img src="<?php $wptv->the_video( true, true ); ?>" />
+ </span>
+ <span class="video-title"><?php the_title(); ?></span>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </a>
+ </li>
+ <?php endwhile; // have_posts ?>
+
+ </ul>
+ </div><!-- .secondary-videos -->
+ </div><!-- .container -->
+</div><!-- .wptv-hero -->
+
+<div class="container">
+ <div class="primary-content">
+
+ <?php
+ /**
+ * The following is a very special navigation menu. It
+ * should contain Event taxonomy items only, and will list
+ * them with videos from the chosen event.
+ */
+ wp_nav_menu( array(
+ 'theme_location' => 'featured_wordcamps',
+ 'depth' => 1,
+ 'walker' => new WordCampTV_Walker_Nav_Menu,
+ ) );
+ ?>
+
+ </div><!-- .primary-content -->
+ <?php get_sidebar( 'wordcamptv' ); ?>
+</div><!-- container -->
+
+<?php
+get_footer();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2categoryphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/category.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,95 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * Category Archives
+ *
+ * Used for categories display, especially the to-do category.
+ * Fallback to others as well.
+ */
+
+global $wp_query, $wptv;
+get_header();
+
+/* The below if statement makes sure the hero is hidden on:
+ * - Second, third, etc pages.
+ * - If found posts is not more than 6
+ */
+
+if ( get_query_var( 'paged' ) < 2 && $wp_query->found_posts > 6 ) : ?>
+<div class="wptv-hero group">
+ <div class="container">
+
+ <h2 class="page-title"><?php single_term_title(); ?></h2>
+ <div class="desc"><?php echo category_description(); ?></div>
+
+ <?php if ( have_posts() ) : the_post(); ?>
+
+ <div class="main-video">
+ <?php $wptv->the_video(); ?>
+ <h3>
+ <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php echo esc_attr( sprintf( __('Permanent Link to %s', 'wptv'), get_the_title() ) ); ?>" class="video-title"><?php the_title(); ?></a>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </h3>
+ </div><!-- .main-video -->
+
+ <?php endif; // have_posts ?>
+
+ <div class="secondary-videos">
+ <ul>
+ <?php while ( have_posts() && $wp_query->current_post < 5 ) : the_post(); ?>
+ <li class="group">
+ <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php echo esc_attr( sprintf(__('Permanent Link to %s', ''), get_the_title() ) ); ?>" >
+ <span class="video-thumbnail">
+ <img src="<?php $wptv->the_video( true, true ); ?>" />
+ </span>
+ <span class="video-title"><?php the_title(); ?></span>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </a>
+ </li>
+ <?php endwhile; ?>
+ </ul>
+ </div><!-- .secondary-videos -->
+
+ </div>
+</div><!-- .wptv-hero -->
+
+<?php else : // get_query_var(paged) < 2 ?>
+
+<div class="wptv-hero group">
+ <div class="container">
+ <h2 class="page-title"><?php single_cat_title(); ?></h2>
+ <div class="desc"><?php echo category_description(); ?></div>
+ </div>
+</div>
+
+<?php endif; // paged ?>
+
+<div class="container">
+ <div class="primary-content">
+
+ <?php if ( have_posts() ) : ?>
+
+ <h3><?php esc_html_e( 'Latest Videos', 'wptv' ); ?></h3>
+ <ul class="video-list four-col">
+
+ <?php while ( have_posts() ) : the_post() ; ?>
+ <li>
+ <a href="<?php the_permalink(); ?>">
+ <span class="video-thumbnail"><?php $wptv->the_video_image( 50, null, false ); ?></span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+ <?php endwhile; ?>
+
+ </ul>
+
+ <?php get_template_part( 'pagination' ); ?>
+
+ <?php else : // have_posts ?>
+ <p><?php esc_html_e( 'Sorry, no posts were found in this category.', 'wptv' ); ?></p>
+ <?php endif; ?>
+
+ </div><!-- .primary-content -->
+ <?php get_sidebar(); ?>
+</div><!-- .container -->
+
+<?php get_footer(); ?>
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2commentsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/comments.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/comments.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/comments.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,40 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * WordPress.tv Comments Template
+ * @uses global $wptv->list_comments
+ */
+
+/*
+ * If the current post is protected by a password and
+ * the visitor has not yet entered the password we will
+ * return early without loading the comments.
+ */
+if ( post_password_required() ) {
+ return;
+}
+
+global $wptv;
+
+if ( have_comments() ) :
+?>
+ <h3 id="comments">
+ <?php
+ printf( _nx( 'One response on “%2$s”', '%1$s responses on “%2$s”', get_comments_number(), 'comments title', 'wptv' ),
+ number_format_i18n( get_comments_number() ), '<span>' . get_the_title() . '</span>' );
+ ?>
+ </h3>
+
+ <ol class="commentlist">
+ <?php wp_list_comments( array( 'callback' => array( $wptv, 'list_comments' ) ) ); ?>
+ </ol>
+<?php
+endif;
+
+if ( ! comments_open() && get_comments_number() && post_type_supports( get_post_type(), 'comments' ) ) :
+?>
+ <p class="nocomments"><?php esc_html_e( 'Comments are closed.', 'wptv' ); ?></p>
+<?php
+
+endif;
+
+comment_form();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2footerphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/footer.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/footer.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/footer.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,20 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * The Footer Template
+ *
+ * The header.php template opens the main container with a #page
+ * element, which is closed in the footer element. Everything else
+ * should go between the two.
+ */
+?>
+ <div id="footer">
+ <div class="container">
+ <?php wp_nav_menu( array( 'theme_location' => 'footer', 'depth' => 1, 'link_after' => '<span class="dot">•</span>' ) ); ?>
+ <p class="automattic">An <a href="http://automattic.com/"><img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNy4xLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkxvZ28iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgNDk0LjQgMzguMiIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgNDk0LjQgMzguMiIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBmaWxsPSIjODg4ODg4IiBkPSJNMTc5LjMsMzguMmMtMTIuNiwwLTIwLjctOS4xLTIwLjctMTguNXYtMS4yYzAtOS42LDguMi0xOC41LDIwLjctMTguNWMxMi42LDAsMjAuOCw4LjksMjAuOCwxOC41djEuMg0KCUMyMDAuMSwyOS4xLDE5MS45LDM4LjIsMTc5LjMsMzguMnogTTE5My4zLDE4LjZjMC02LjktNS0xMy0xNC4xLTEzYy05LjEs
MC0xNCw2LjEtMTQsMTN2MC45YzAsNi45LDUsMTMuMSwxNCwxMy4xDQoJYzkuMSwwLDE0LjEtNi4yLDE0LjEtMTMuMVYxOC42eiIvPg0KPHBhdGggZmlsbD0iIzg4ODg4OCIgZD0iTTM3LjEsMzYuOEwzMi40LDI4SDExLjZMNywzNi44SDBMMTkuMiwxLjNoNS41bDE5LjUsMzUuNUgzNy4xeiBNMjEuOCw4LjJsLTcuNywxNC45aDE1LjdMMjEuOCw4LjJ6Ii8+DQo8cGF0aCBmaWxsPSIjODg4ODg4IiBkPSJNNzQuNiwzOC4yYy0xMi43LDAtMTguNy02LjktMTguNy0xNi4yVjEuM2g2LjZ2MjAuOWMwLDYuNiw0LjMsMTAuNSwxMi41LDEwLjVjOC40LDAsMTEuOS0zLjksMTEuOS0xMC41VjEuMw0KCWg2LjdWMjJDOTMuNiwzMC44LDg3LjksMzguMiw3NC42LDM4LjJ6Ii8+DQo8cGF0aCBmaWxsPSIjODg4ODg4IiBkPSJNMTMwLjcsNi44djMwaC02Ljd2LTMwaC0xNS41VjEuM2gzNy43djUuNUgxMzAuN3oiLz4NCjxwYXRoIGZpbGw9IiM4ODg4ODgiIGQ9Ik0yNTkuNSwzNi44VjguN2wtMS44LDMuMWwtMTQuOSwyNWgtMy4zbC0xNC43LTI1bC0xLjgtMy4xdjI4LjFoLTYuNVYxLjNoOS4ybDE0LDI0LjRsMS43LDNsMS43LTNMMjU3LDEuMw0KCWg5LjF2MzUuNUgyNTkuNXoiLz4NCjxwYXRoIGZpbGw9IiM4ODg4ODgiIGQ9Ik0zMTYuNSwzNi44bC00LjctOC44SDI5MWwtNC41LDguOGgtN2wxOS4yLTM1LjVoNS41bDE5LjUsMzUuNUgzMTYuNXogTTMwMS4yLDguMmwtNy43LDE0LjloMTUuN0wzMDEuMiw4LjJ6DQoJIi8+DQo8cGF0aCBma
WxsPSIjODg4ODg4IiBkPSJNMzUwLjYsNi44djMwaC02Ljd2LTMwaC0xNS41VjEuM2gzNy43djUuNUgzNTAuNnoiLz4NCjxwYXRoIGZpbGw9IiM4ODg4ODgiIGQ9Ik0zOTkuNSw2Ljh2MzBoLTYuN3YtMzBoLTE1LjVWMS4zSDQxNXY1LjVIMzk5LjV6Ii8+DQo8cGF0aCBmaWxsPSIjODg4ODg4IiBkPSJNNDMxLjQsMzYuOFY0LjZjMi43LDAsMy43LTEuNCwzLjctMy40aDIuOHYzNS41SDQzMS40eiIvPg0KPHBhdGggZmlsbD0iIzg4ODg4OCIgZD0iTTQ5MC4yLDExLjNjLTMuMi0yLjktNy45LTUuNy0xNC4yLTUuN2MtOS41LDAtMTQuOCw2LjUtMTQuOCwxMy4zdjAuN2MwLDYuNyw1LjQsMTMsMTUuMywxMw0KCWM1LjksMCwxMC44LTIuOCwxMy45LTUuN2w0LDQuMmMtMy45LDMuOC0xMC41LDcuMS0xOC4zLDcuMWMtMTMuNCwwLTIxLjYtOC43LTIxLjYtMTguM3YtMS4yYzAtOS42LDguOS0xOC43LDIxLjktMTguNw0KCWM3LjUsMCwxNC4zLDMuMSwxOCw3LjFMNDkwLjIsMTEuM3oiLz4NCjxwYXRoIGZpbGw9IiM4ODg4ODgiIGQ9Ik0xODMuNiwxMi40YzEuMiwwLjgsMS41LDIuNCwwLjgsMy42bC02LjEsOS40Yy0wLjgsMS4yLTIuNCwxLjYtMy42LDAuOGwwLDBjLTEuMi0wLjgtMS41LTIuNC0wLjgtMy42DQoJbDYuMS05LjRDMTgwLjgsMTEuOSwxODIuNCwxMS42LDE4My42LDEyLjRMMTgzLjYsMTIuNHoiLz4NCjwvc3ZnPg0K" alt="Automattic" width="165" height="14"
/></a> <?php $words = array( 'Production', 'Joint', 'Medley', 'Experiment', 'Ruckus', 'Invention', 'Creation', 'Thingamajig', 'Opus', 'Brainchild', 'Contraption' ); echo $words[ mt_rand( 0, count( $words) -1 ) ]; ?></p>
+ </div>
+ </div><!-- #footer -->
+</div><!-- #page -->
+
+<?php wp_footer(); ?>
+</body>
+</html>
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2frontpagephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/front-page.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/front-page.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/front-page.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,128 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * WordPress.tv Front Page Template
+ */
+
+$featured_params = array(
+ 'posts_per_page' => 1,
+ 'tag' => 'featured',
+);
+if ( $sticky_posts = get_option( 'sticky_posts' ) ) {
+ $featured_params['post__in'] = $sticky_posts;
+}
+$featured = new WP_Query( $featured_params );
+
+global $wptv;
+get_header(); ?>
+
+<div class="wptv-hero group">
+ <div class="container">
+
+ <?php while ( $featured->have_posts() ) : $featured->the_post(); ?>
+ <div class="main-video">
+ <?php $wptv->the_video(); ?>
+ <h3>
+ <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title_attribute(); ?>" class="video-title"><?php the_title(); ?></a>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </h3>
+ </div><!-- .main-video -->
+ <?php endwhile; // $featured->have_posts ?>
+
+ <div class="secondary-videos">
+ <h3>
+ <?php esc_html_e( 'WordCampTV', 'wptv' ); ?>
+ <a href="<?php echo home_url( '/category/wordcamptv/' ); ?>" class="view-more"><?php _e( 'More →', 'wptv' ); ?></a>
+ </h3>
+ <ul>
+ <?php
+ $featured = new WP_Query( array( // WordCampTV Featured
+ 'posts_per_page' => 4,
+ 'post__not_in' => array( get_the_id() ), // In case the above video is the same
+ 'category_name' => 'wordcamptv',
+ 'tag' => 'featured',
+ ) );
+
+ while ( $featured->have_posts() ) :
+ $featured->the_post();
+ ?>
+
+ <li class="group">
+ <a href="<?php the_permalink(); ?>" rel="bookmark" title="<?php the_title_attribute(); ?>" >
+ <span class="video-thumbnail">
+ <img src="<?php $wptv->the_video( true, true ); ?>" />
+ </span>
+ <span class="video-title"><?php the_title(); ?></span>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </a>
+ </li>
+
+ <?php
+ endwhile; // $featured->have_posts
+ unset( $featured );
+ ?>
+ </ul>
+ </div><!-- .secondary-videos -->
+
+ </div><!-- .container -->
+</div><!-- .wptv-hero -->
+
+<div class="container">
+ <div class="primary-content">
+
+ <!-- Latest Videos -->
+ <?php
+ if ( have_posts() ) :
+ ?>
+ <h3><?php esc_html_e( 'Latest Videos', 'wptv' ); ?></h3>
+ <ul class="video-list four-col">
+
+ <?php while ( have_posts() ) : the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>">
+ <span class="video-thumbnail"><?php $wptv->the_video_image( 50, null, false ); ?></span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+ <?php endwhile; ?>
+
+ </ul>
+ <?php
+ endif; // $latest->have_posts
+
+ // Popular Videos
+ $popular = new WP_Query( array(
+ 'posts_per_page' => 8,
+ 'meta_key' => 'wptv_post_views',
+ 'orderby' => 'meta_value_num',
+ 'order' => 'DESC',
+ 'date_query' => array(
+ 'after' => '-180 days',
+ ),
+ ) );
+
+ if ( $popular->have_posts() ) :
+ ?>
+ <h3><?php esc_html_e( 'Popular Videos', 'wptv' ); ?></h3>
+ <ul class="video-list four-col">
+
+ <?php while ( $popular->have_posts() ) : $popular->the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>">
+ <span class="video-thumbnail"><?php $wptv->the_video_image( 50, null, false ); ?></span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+ <?php endwhile; ?>
+
+ </ul>
+ <?php
+ endif; // $popular->have_posts
+ unset( $popular );
+ ?>
+
+ </div><!-- .primary-content -->
+ <?php get_sidebar(); ?>
+</div><!-- .container-->
+
+<?php
+get_footer();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2functionsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/functions.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/functions.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/functions.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,754 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+/**
+ * WordPress.tv Functions
+ */
+class WordPressTV_Theme {
+ function __construct() {
+ if ( apply_filters( 'wptv_setup_theme', true ) ) {
+ // Load plugins and setup theme
+ require_once get_template_directory() . '/plugins/wordpresstv-oembed/wordpresstv-oembed.php';
+ require_once get_template_directory() . '/plugins/wordpresstv-unisubs/wordpresstv-unisubs.php';
+ require_once get_template_directory() . '/plugins/wordpresstv-upload-subtitles/wordpresstv-upload-subtitles.php';
+
+ add_action( 'after_setup_theme', array( $this, 'setup' ) );
+ }
+ }
+
+ /**
+ * Runs during after_setup_theme.
+ */
+ function setup() {
+ add_action( 'widgets_init', array( $this, 'widgets_init' ) );
+ add_action( 'init', array( $this, 'register_taxonomies' ), 0 );
+ add_action( 'pre_get_posts', array( $this, 'posts_per_page' ) );
+ add_action( 'init', array( $this, 'improve_search' ) );
+ add_action( 'publish_post', array( $this, 'publish_post' ), 10, 1 );
+ add_action( 'wp_footer', array( $this, 'videopress_flash_params' ) );
+ add_action( 'transition_post_status', array( $this, 'transition_post_status' ), 10, 2 );
+
+ add_filter( 'pre_option_blog_upload_space', array( $this, 'blog_upload_space' ) );
+
+ register_nav_menus( array(
+ 'primary' => __( 'Primary Menu', 'wptv' ),
+ 'footer' => __( 'Footer Menu', 'wptv' ),
+ 'featured_wordcamps' => __( 'Featured WordCamps', 'wptv' ),
+ ) );
+ }
+
+ /**
+ * Different posts_per_page settings for different views. Runs during pre_get_posts.
+ */
+ function posts_per_page( $query ) {
+ $posts_per_page = $query->get( 'posts_per_page' );
+ if ( ! $query->is_main_query() || ! empty( $posts_per_page ) ) {
+ return;
+ }
+
+ $queried_object = $query->get_queried_object();
+
+ if ( $query->is_front_page() ) { // category archives
+ $query->set( 'posts_per_page', 8 );
+ } elseif ( $query->is_category ) { // category archives
+ $query->set( 'posts_per_page', 22 );
+ } elseif ( $query->is_tax && $queried_object->taxonomy == 'event' ) { // event taxonomy
+ $query->set( 'posts_per_page', 22 );
+ } elseif ( $query->is_archive || $query->is_search ) {
+ $query->set( 'posts_per_page', 10 );
+ } else {
+ $query->set( 'posts_per_page', 22 );
+ }
+ }
+
+ /**
+ * Registers taxonomies, runs during init
+ */
+ function register_taxonomies() {
+ register_taxonomy( 'producer', array( 'post' ), array(
+ 'label' => __( 'Producer', 'wptv' ),
+ 'template' => __( 'Producer: %l.', 'wptv' ),
+ 'helps' => __( 'Separate producers with commas.', 'wptv' ),
+ 'sort' => true,
+ 'args' => array( 'orderby' => 'term_order' ),
+ 'rewrite' => array( 'slug' => 'producer' ),
+ ) );
+
+ register_taxonomy( 'speakers', array( 'post' ), array(
+ 'label' => __( 'Speakers', 'wptv' ),
+ 'template' => __( 'Speakers: %l.', 'wptv' ),
+ 'helps' => __( 'Separate speakers with commas.', 'wptv' ),
+ 'sort' => true,
+ 'args' => array( 'orderby' => 'term_order' ),
+ 'rewrite' => array( 'slug' => 'speakers' ),
+ ) );
+
+ register_taxonomy( 'flavor', array( 'post' ), array(
+ 'label' => __( 'Flavor', 'wptv' ),
+ 'template' => __( 'Flavor: %l.', 'wptv' ),
+ 'helps' => __( 'Separate flavors with commas.', 'wptv' ),
+ 'sort' => true,
+ 'args' => array( 'orderby' => 'term_order' ),
+ 'rewrite' => array( 'slug' => 'flavor' ),
+ ) );
+
+ register_taxonomy( 'language', array( 'post' ), array(
+ 'label' => __( 'Language', 'wptv' ),
+ 'template' => __( 'Language: %l.', 'wptv' ),
+ 'helps' => __( 'Separate languages with commas.', 'wptv' ),
+ 'sort' => true,
+ 'args' => array( 'orderby' => 'term_order' ),
+ 'rewrite' => array( 'slug' => 'language' ),
+ ) );
+
+ register_taxonomy( 'event', array( 'post' ), array(
+ 'label' => __( 'Event', 'wptv' ),
+ 'template' => __( 'Event: %l.', 'wptv' ),
+ 'helps' => __( 'Enter event', 'wptv' ),
+ 'sort' => true,
+ 'args' => array( 'orderby' => 'term_order' ),
+ 'rewrite' => array( 'slug' => 'event' ),
+ ) );
+ }
+
+ /**
+ * Runs during widgets_init, adds some sidebars.
+ */
+ function widgets_init() {
+ register_sidebars( 1 );
+ register_sidebar( array(
+ 'name' => __( 'WordCampTV Sidebar', 'wptv' ),
+ 'id' => 'wordcamptv-sidebar',
+ 'description' => __( 'Widgets in this area will be shown on the WordCampTV landing page.', 'wptv' ),
+ 'before_title' => '<h3>',
+ 'after_title' => '</h3>',
+ ) );
+ }
+
+ /**
+ * Filters the blog_upload_space option
+ */
+ function blog_upload_space() {
+ return 1024 * 1024 * 10; // 10 terabytes
+ }
+
+ /**
+ * Runs during publish_post
+ *
+ * Since a lot of queries depend on the wptv_post_views meta
+ * key, make sure that every published post has one.
+ *
+ * @param int $post_id Post ID.
+ */
+ function publish_post( $post_id ) {
+ if ( ! get_post_meta( $post_id, 'wptv_post_views', true ) ) {
+ update_post_meta( $post_id, 'wptv_post_views', 0 );
+ }
+ }
+
+ /**
+ * Activates the improved search, but not in admin.
+ */
+ function improve_search() {
+ if ( is_admin() ) {
+ return;
+ }
+
+ add_filter( 'posts_search', array( $this, 'search_posts_search' ), 10, 2 );
+ add_action( 'pre_get_posts', array( $this, 'search_pre_get_posts' ) );
+ }
+
+ /**
+ * @param WP_Query $query
+ */
+ function search_pre_get_posts( $query ) {
+ if ( ! $query->is_main_query() || ! $query->is_search ) {
+ return;
+ }
+
+ // Set custom sorting
+ $query->set( 'meta_key', 'wptv_post_views' );
+ $query->set( 'orderby', 'meta_value_num' );
+ $query->set( 'order', 'DESC' );
+ }
+
+ /**
+ * Improved Serach: posts_search filter
+ *
+ * Recreates the search SQL by including a taxonomy search.
+ * Relies on various other filters used once.
+ * @todo optimize the get_tax_query part.
+ *
+ * @param string $search
+ * @param WP_Query $query
+ *
+ * @return string
+ */
+ function search_posts_search( $search, &$query ) {
+ global $wpdb;
+ if ( ! $query->is_main_query() || ! $query->is_search || is_admin() ) {
+ return $search;
+ }
+
+ // Get the tax query and replace the leading AND with an OR
+ $tax_query = get_tax_sql( $this->get_tax_query( get_query_var( 's' ) ), $wpdb->posts, 'ID' );
+ if ( 'and' == substr( trim( strtolower( $tax_query['where'] ) ), 0, 3 ) ) {
+ $tax_query['where'] = ' OR ' . substr( trim( $tax_query['where'] ), 3 );
+ }
+
+ // Mostly taken from query.php
+ if ( isset( $query->query_vars['search_terms'] ) ) {
+ $search = $searchand = '';
+ $n = empty( $query->query_vars['exact'] ) ? '%' : '';
+
+ foreach ( (array) $query->query_vars['search_terms'] as $term ) {
+ $term = esc_sql( like_escape( $term ) );
+ $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))";
+ $searchand = ' AND ';
+ }
+
+ // Combine the search and tax queries.
+ if ( ! empty( $search ) ) {
+ // Add the tax search to the query
+ if ( ! empty( $tax_query['where'] ) ) {
+ $search .= $tax_query['where'];
+ }
+
+ $search = " AND ({$search}) ";
+ if ( ! is_user_logged_in() ) {
+ $search .= " AND ($wpdb->posts.post_password = '') ";
+ }
+ }
+ }
+
+ // These are single-use filters, they delete themselves right after they're used.
+ add_filter( 'posts_join', array( $this, 'search_posts_join' ), 10, 2 );
+ add_filter( 'posts_groupby', array( $this, 'search_posts_groupby' ), 10, 2 );
+
+ return $search;
+ }
+
+ /**
+ * Improved Search: posts_join filter
+ *
+ * This adds the JOIN clause resulting from the taxonomy
+ * search. Make sure this filter runs only once per WP_Query request.
+ *
+ * @param string $join
+ * @param WP_Query $query
+ *
+ * @return string
+ */
+ function search_posts_join( $join, &$query ) {
+ // Make sure this filter doesn't run again.
+ remove_filter( 'posts_join', array( $this, 'search_posts_join' ), 10, 2 );
+
+ if ( $query->is_main_query() ) {
+ global $wpdb;
+ $tax_query = get_tax_sql( $this->get_tax_query( get_query_var( 's' ) ), $wpdb->posts, 'ID' );
+ $join .= $tax_query['join'];
+ }
+
+ return $join;
+ }
+
+ /**
+ * Improved Search: posts_groupby filter
+ *
+ * Searching with taxonomies may include duplicates when
+ * search query matches content and one or more taxonomies.
+ * This filter glues all duplicates. Use only once per WP_Query.
+ *
+ * @param string $group_by
+ * @param WP_Query $query
+ *
+ * @return string
+ */
+ function search_posts_groupby( $group_by, &$query ) {
+ // Never run this again
+ remove_filter( 'posts_groupby', array( $this, 'search_posts_groupby' ), 10, 2 );
+
+ global $wpdb;
+ $group_by = "$wpdb->posts.ID";
+
+ return $group_by;
+ }
+
+ /**
+ * Returns a $tax_query array for an improved search.
+ *
+ * @param string $search
+ *
+ * @return array
+ */
+ function get_tax_query( $search ) {
+ $taxonomies = array(
+ 'producer',
+ 'speakers', /*'flavor', 'language',*/
+ 'event'
+ );
+
+ $terms = get_terms( $taxonomies, array(
+ 'search' => $search,
+ ) );
+ $term_ids = wp_list_pluck( $terms, 'term_id' );
+
+ $tax_query = array();
+ foreach ( $taxonomies as $taxonomy ) {
+ $tax_query[] = array(
+ 'taxonomy' => $taxonomy,
+ 'terms' => $term_ids,
+ );
+ }
+ $tax_query['relation'] = 'OR';
+
+ return $tax_query;
+ }
+
+ /**
+ * Change VideoPress Params, runs during wp_footer
+ */
+ function videopress_flash_params() {
+ echo '<script type="text/javascript">if(jQuery.VideoPress){jQuery.VideoPress.video.flash.params.wmode="opaque";}</script>';
+ }
+
+ /**
+ * List Comments Callback
+ *
+ * Used with wp_list_comments in the theme files,
+ * fired via the wptv_list_comments callback wrapper.
+ *
+ * @param object $comment
+ * @param array $args
+ * @param int $depth
+ */
+ function list_comments( $comment, $args, $depth ) {
+ $GLOBALS['comment'] = $comment;
+ if ( $comment->comment_type == 'pingback' ) {
+ return;
+ }
+ ?>
+ <li <?php comment_class(); ?> id="comment-<?php comment_ID(); ?>">
+ <cite class="authorinfo">
+ <?php echo get_avatar( $comment, 24 ); ?>
+ <?php comment_author_link(); ?>
+ </cite>
+
+ <br/>
+
+ <?php if ( $comment->comment_type != 'pingback' ) : ?>
+
+ <small class="commentmetadata">
+ <a href="#comment-<?php comment_ID() ?>" title=""><?php printf( __( '%1$s at %2$s', 'wptv' ), get_comment_date(), get_comment_time() ); ?></a>
+ <?php
+ edit_comment_link( __( 'edit', 'wptv' ), ' ', '' );
+ echo comment_reply_link( array(
+ 'depth' => $depth,
+ 'max_depth' => $args['max_depth'],
+ 'before' => ' | ',
+ ) );
+ ?>
+ </small>
+
+ <?php endif; // comment_type != 'pingback' ?>
+
+ <div class="commenttext">
+ <?php if ( $comment->comment_approved == '0' ) : ?>
+ <em><?php _e( 'Your comment is awaiting moderation.', 'wptv' ); ?></em>
+ <?php endif; // comment_approved == 0 ?>
+
+ <?php comment_text(); ?>
+ </div>
+ <div class="clear"></div>
+ </li>
+ <?php
+ }
+
+ /**
+ * Get VodPod Thumbnails, used by the_video_image
+ *
+ * @param string $code
+ *
+ * @return string
+ */
+ function get_vodpod_thumbnails( $code ) {
+ preg_match( '/((Groupvideo|ExternalVideo).[0-9]+)/', $code, $matches );
+ $id = $matches[1];
+
+ if ( ! $id ) {
+ return get_template_directory_uri() . '/i/notfound.png';
+ }
+
+ // Argh!!
+ $xml = file_get_contents( 'http://api.vodpod.com/api/video/details.xml?video_id=' . $id . '&api_key=03519ea5faf6a6ed' );
+
+ if ( preg_match( '/<large>(.*)<\/large>/', $xml, $thevideoid ) ) {
+ return $thevideoid[1];
+ } else {
+ return get_template_directory_uri() . '/i/notfound.png';
+ }
+ }
+
+ /**
+ * Renders the video or a video thumbnail
+ *
+ * @param bool $thumb
+ * @param bool $no_html
+ */
+ function the_video( $thumb = false, $no_html = false ) {
+ $image = $video = '';
+ global $post, $originalcontent;
+ $originalcontent = $post->post_content;
+
+ remove_filter( 'the_content', array( $this, 'remove_shortcodes' ) );
+
+ preg_match_all( '/\[wpvideo +([a-zA-Z0-9,\#,\&,\/,;,",=, ]*?)\]/i', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+
+ preg_match( '/([0-9A-Za-z]+)/i', $code, $m );
+ $guid = $m[1];
+
+ $image = '';
+ if ( function_exists( 'video_image_url_by_guid' ) ) {
+ $image = video_image_url_by_guid( $guid, 'fmt_dvd' ); //dvd image has width = 640
+ }
+ $video = apply_filters( 'the_content', '[wpvideo ' . $guid . ' w=605]' );
+
+ /*
+ // Comment out the $video= line above and uncomment the following code to enable Unisubs
+ $permalink = get_permalink( $post->ID );
+ $video = <<<HTML
+ <script type="text/javascript" src="http://unisubs.example.com:8000/site_media/embed.js">
+ ({
+ "video_url": "$permalink",
+ "video_config": {
+ "width": 648,
+ "height": 425
+ }
+ })
+ </script>
+ HTML;
+ $video .= apply_filters( 'the_content', '' );*/
+ }
+
+ preg_match_all( '|\[slideshare (.+?)]|ie', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ $code = '[slideshare ' . $code . ']';
+ if ( $thumb ) {
+ preg_match( '/id=([0-9]+).*/', $code, $matches );
+ $id = $matches[1];
+ $ssxml = file_get_contents( 'http://www.slideshare.net/api/2/get_slideshow/?slideshow_id=' . $id . '&api_key=sM0rzJvp&ts=' . time() . '&hash=' . sha1( 'vHs2uii6' . time() ) );
+ preg_match( '/<ThumbnailURL>(.+)<\/ThumbnailURL>/', $ssxml, $matches );
+ $image = $matches[1];
+ } else {
+ $slideshare = apply_filters( 'the_content', $code );
+ $slideshare = preg_replace( '/height\=\'[0-9]+?\'/', "height='430'", $slideshare );
+ $video = str_replace( "width='425'", "width='648'", $slideshare );
+ }
+ }
+
+ preg_match_all( '|\[vodpod (.+?)]|ie', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ $code = '[vodpod ' . $code . ']';
+ $vodpod = apply_filters( 'the_content', $code );
+ $id = trim( str_replace( '</div>','', preg_replace( '/.*key\=([^&]+)&.*/', '$1', $vodpod ) ) );
+
+ $image = $this->get_vodpod_thumbnails( $code );
+ $video = $vodpod;
+ }
+
+ if ( $thumb ) {
+ if ( ! $no_html ) {
+ $image = '<img width="650" src="' . esc_url( $image ) . '" alt="' . esc_attr( $post->post_title ) . '" />';
+ }
+ echo $image;
+ } else {
+ echo $video;
+ }
+ add_filter( 'the_content', array( $this, 'remove_shortcodes' ) );
+ }
+
+ /**
+ * Outputs the video image
+ *
+ * @param int $h
+ * @param int $w
+ * @param bool $arrow
+ * @param bool $html_code
+ */
+ function the_video_image( $h = 196, $w = 400, $arrow = true, $html_code = true ) {
+ $ret = '';
+ global $post;
+ remove_filter( 'the_content', array( $this, 'remove_shortcodes' ) );
+
+ preg_match_all( '/\[wpvideo +([a-zA-Z0-9,\#,\&,\/,;,",=, ]*?)\]/i', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ preg_match( '/([0-9A-Za-z]+)/i', $code, $m );
+ $guid = $m[1];
+ if ( function_exists( 'video_image_url_by_guid' ) ) {
+ $ret = video_image_url_by_guid( $guid, 'fmt_dvd' );
+ }
+ }
+
+ preg_match_all( '|\[wporg-screencast (.+?)]|ie', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ $wporg = apply_filters( 'the_content', '[wporg-screencast ' . $code . ']' );
+ $ret = $wporg;
+ }
+
+ preg_match_all( '|\[slideshare (.+?)]|ie', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ $code = '[slideshare ' . $code . ']';
+
+ preg_match( '/id=([0-9]+).*/', $code, $matches );
+ $id = $matches[1];
+ $url = 'http://www.slideshare.net/api/2/get_slideshow/?slideshow_id=' . $id . '&api_key=sM0rzJvp&ts=' . time() . '&hash=' . sha1( 'vHs2uii6' . time() );
+ $ssxml = wp_remote_retrieve_body( wp_remote_get( esc_url_raw( $url ) ) );
+ preg_match( '/<ThumbnailURL>(.+)<\/ThumbnailURL>/', $ssxml, $matches );
+ $ret = $matches[1];
+ }
+
+ preg_match_all( '|\[vodpod (.+?)]|ie', $post->post_content, $matches );
+ foreach ( $matches[1] as $key => $code ) {
+ $code = '[vodpod ' . $code . ']';
+ $ret = $this->get_vodpod_thumbnails( $code );
+ }
+
+ if ( $arrow ) {
+ ?><a href="<?php the_permalink() ?>" class="showarrow arrow"><?php the_title(); ?></a><?php
+ }
+ if ( $html_code ) {
+ $ret = '<img src="' . $ret . '" alt="' . esc_attr( $post->post_title ) . '" />';
+ }
+ echo $ret;
+
+ add_filter( 'the_content', array( $this, 'remove_shortcodes' ) );
+ }
+
+ /**
+ * Removes shortcodes from $originalcontent global
+ *
+ * @param string $content
+ *
+ * @return mixed
+ */
+ function remove_shortcodes( $content ) {
+ global $originalcontent;
+
+ return preg_replace( '/\[wpvideo +([a-zA-Z0-9,\#,\&,\/,;,",=, ]*?)\]/i', '', $originalcontent );
+ }
+
+ /**
+ * Returns the home URL
+ *
+ * @param string $path
+ *
+ * @return mixed|void
+ */
+ public function home_url( $path = '' ) {
+ return apply_filters( 'wptv_home_url', home_url( $path ), $path );
+ }
+
+ /**
+ * Prints a single category with custom priorities.
+ *
+ * @param string $before
+ */
+ public function the_category( $before = '' ) {
+ foreach ( array( 'wordcamptv', 'how-to' ) as $category_slug ) {
+ $category = get_category_by_slug( $category_slug );
+
+ if ( in_category( $category ) ) {
+ $link = get_category_link( $category );
+ echo $before . ' <a href="' . esc_url( $link ) . '">' . esc_html( $category->name ) . '</a>';
+ break; // only one category is printed
+ }
+ }
+ }
+
+ /**
+ * Prints a single event.
+ *
+ * @param string $before
+ * @param string $after
+ */
+ public function the_event( $before = '', $after = '' ) {
+ $terms = get_the_terms( get_post()->ID, 'event' );
+ if ( ! $terms || is_wp_error( $terms ) ) {
+ return;
+ }
+
+ foreach ( $terms as $term ) {
+ $link = get_term_link( $term, 'event' );
+ echo $before . '<a href="' . esc_url( $link ) . '">' . esc_html( $term->name ) . '</a>' . $after;
+ break; // only the first one event is printed
+ }
+ }
+
+ /**
+ * Display the Terms
+ *
+ * Give this a taxonomy
+ *
+ * @param string $taxonomy
+ * @param string $before
+ * @param string $sep
+ * @param string $after
+ * @param bool $display_count
+ */
+ public function the_terms( $taxonomy = 'post_tag', $before = '', $sep = '', $after = '', $display_count = true ) {
+ $terms = get_the_terms( get_post()->ID, $taxonomy );
+ if ( ! $terms || is_wp_error( $terms ) ) {
+ return false;
+ }
+
+ $links = array();
+ foreach ( $terms as $term ) {
+ $count = $display_count ? ' <span class="tag-count">' . absint( $term->count ) . '</span>' : '';
+ $links[] = '<a href="' . esc_url( get_term_link( $term, $taxonomy ) ) . '">' . esc_html( $term->name ) . $count . '</a>';
+ }
+ echo $before . join( $sep, $links ) . $after;
+ }
+
+ /**
+ * Runs during transition_post_status, bumps some stats.
+ *
+ * @param string $new_status
+ * @param string $old_status
+ */
+ function transition_post_status( $new_status, $old_status ) {
+ if ( 'publish' != $new_status || 'publish' == $old_status ) {
+ return;
+ }
+
+ // Make it easier to contribute to this theme by not assuming WP.com context.
+ if ( function_exists( 'bump_stats_extras' ) ) {
+ bump_stats_extras( 'wptv-activity', 'publish-video' );
+ }
+ }
+}
+
+global $wptv;
+$wptv = new WordPressTV_Theme;
+
+/**
+ * WordCampTV wp_nav_menu Walker Class
+ *
+ * Use this class with wp_nav_menu to output an event
+ * together with some videos from the event.
+ */
+class WordCampTV_Walker_Nav_Menu extends Walker {
+
+ /**
+ * @see Walker
+ */
+ var $tree_type = array( 'post_type', 'taxonomy', 'custom' );
+ var $db_fields = array( 'parent' => 'menu_item_parent', 'id' => 'db_id' );
+
+ /**
+ * @see Walker::start_el()
+ *
+ * If an item is an event, print the event heading,
+ * followed by a WP_Query that loops through some of the
+ * videos in the event. start_el does all the work and does not need end_el.
+ *
+ * @param string $output
+ * @param object $item
+ * @param int $depth
+ * @param array $args
+ * @param int $id
+ */
+ function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
+
+ // Skip if it's not an event item.
+ if ( $item->object != 'event' || $item->type != 'taxonomy' ) {
+ return;
+ }
+
+ global $wptv;
+
+ // Use this query to fetch event videos.
+ $query = new WP_Query( array(
+ 'posts_per_page' => 4,
+ 'tax_query' => array(
+ array(
+ 'taxonomy' => 'event',
+ 'field' => 'id',
+ 'terms' => $item->object_id,
+ ),
+ ),
+ ) );
+
+ ob_start();
+ ?>
+ <div>
+ <h3>
+ <?php echo apply_filters( 'the_title', $item->title ); ?>
+ <a href="<?php echo esc_url( $item->url ); ?>" class="view-more"><?php esc_html_e( 'More →' ); ?></a>
+ </h3>
+ <ul class="video-list four-col">
+ <?php while ( $query->have_posts() ) : $query->the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>">
+ <span class="video-thumbnail"><?php $wptv->the_video_image( 50, null, false ); ?></span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+ <?php endwhile; ?>
+ </ul>
+ </div>
+ <?php
+ $output .= ob_get_contents();
+ ob_end_clean();
+ }
+}
+
+
+function wptv_enqueue_scripts() {
+ wp_enqueue_style( 'wptv-style', get_stylesheet_uri() . '?s' );
+
+ // Load the Internet Explorer specific stylesheet.
+ wp_enqueue_style( 'wptv-ie', get_template_directory_uri() . '/ie6.css', array( 'wptv-style' ) );
+ wp_style_add_data( 'wptv-ie', 'conditional', 'IE 6' );
+
+ wp_register_script( 'wptv-dropdowns', get_template_directory_uri() . '/js/dropdowns.js' );
+ wp_enqueue_script( 'wptv-dropdowns', array( 'jquery' ) );
+
+ if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
+ wp_enqueue_script( 'comment-reply' );
+ }
+}
+add_action( 'wp_enqueue_scripts', 'wptv_enqueue_scripts' );
+
+/**
+ * Create a nicely formatted and more specific title element text for output
+ * in head of document, based on current view.
+ *
+ * @param string $title Default title text for current view.
+ * @param string $sep Optional separator.
+ *
+ * @return string The filtered title.
+ */
+function wptv_wp_title( $title, $sep ) {
+ if ( is_feed() ) {
+ return $title;
+ }
+
+ global $paged, $page;
+
+ // Add the site name.
+ $title .= get_bloginfo( 'name', 'display' );
+
+ // Add the site description for the home/front page.
+ $site_description = get_bloginfo( 'description', 'display' );
+ if ( $site_description && ( is_home() || is_front_page() ) ) {
+ $title = "$title $sep $site_description";
+ }
+
+ // Add a page number if necessary.
+ if ( ( $paged >= 2 || $page >= 2 ) && ! is_404() ) {
+ $title = "$title $sep " . sprintf( __( 'Page %s', 'wptv' ), max( $paged, $page ) );
+ }
+
+ return $title;
+}
+add_filter( 'wp_title', 'wptv_wp_title', 10, 2 );
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2headerphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/header.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/header.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/header.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,45 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * WordPress.tv Header Template
+ *
+ * @global $wptv
+ */
+
+global $wptv;
+?><!DOCTYPE html>
+<!--[if IE 6]> <html class="ie6" <?php language_attributes(); ?>> <![endif]-->
+<!--[if IE 7]> <html class="ie7" <?php language_attributes(); ?>> <![endif]-->
+<!--[if IE 8]> <html class="ie8" <?php language_attributes(); ?>> <![endif]-->
+<!--[if gt IE 8]><!--> <html <?php language_attributes(); ?>> <!--<![endif]-->
+
+<head>
+ <meta charset="<?php bloginfo( 'charset' ); ?>">
+ <title><?php wp_title( '|', true, 'right' ); ?></title>
+
+ <link rel="alternate" type="application/rss+xml" title="<?php esc_attr_e( 'WordPress.tv RSS Feed', 'wptv' ); ?>" href="http://wordpress.tv/feed/" />
+ <link rel="alternate" type="application/rss+xml" title="<?php esc_attr_e( 'WordPress.tv Blog RSS Feed', 'wptv' ); ?>" href="http://blog.wordpress.tv/feed/" />
+ <link rel="profile" href="http://gmpg.org/xfn/11">
+ <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" />
+
+ <script type="text/javascript" src="http://use.typekit.com/mgi6udv.js"></script>
+ <script type="text/javascript">try{Typekit.load();}catch(e){}</script>
+ <?php wp_head(); ?>
+</head>
+
+<body <?php body_class(); ?>>
+<div id="page">
+ <div id="header">
+ <div class="sleeve">
+
+ <h1><a rel="home" href="<?php echo $wptv->home_url( '/' ); ?>"><img src="<?php echo get_template_directory_uri(); ?>/i/wptv-2x.png" alt="<?php echo esc_attr( get_bloginfo( 'name' ) ); ?>" height="40" width="210" /></a></h1>
+
+ <form id="searchform" name="searchform" method="get" action="<?php echo $wptv->home_url( '/' ); ?>">
+ <input type="search" placeholder="<?php esc_attr_e( 'Search WordPress.tv', 'wptv' ); ?>" id="searchbox" name="s" value="<?php the_search_query(); ?>" />
+ </form>
+
+ <div id="menu">
+ <?php wp_nav_menu( array( 'theme_location' => 'primary' ) ); ?>
+ </div>
+
+ </div><!-- .sleeve -->
+ </div><!-- #header -->
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iarrowpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/arrow.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iautomatticpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/automattic.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ibgpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/bg.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iheaderbgpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/header-bg.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2imichaelpickstashesaguinnessgif"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/michael-pick-stashes-a-guinness.gif
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/gif
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2inoisepng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/noise.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2inotfoundpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/notfound.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ivideopresspoweredpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videopresspowered.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ivideowrapperbgpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/videowrapper-bg.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptv2xpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-2x.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvbluepng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-blue.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvgradpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-grad.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvlogopng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv-logo.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2iwptvpng"></a>
<div class="binary"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png</h4>
<pre class="diff"><span>
<span class="cx">(Binary files differ)
</span></span></pre></div>
<span class="cx" style="display: block; padding: 0 10px">Index: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png
</span><span class="cx" style="display: block; padding: 0 10px">===================================================================
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png 2014-12-03 19:29:57 UTC (rev 1023)
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png 2014-12-03 20:10:33 UTC (rev 1024)
</ins><span class="cx" style="display: block; padding: 0 10px">Property changes on: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/i/wptv.png
</span><span class="cx" style="display: block; padding: 0 10px">___________________________________________________________________
</span><a id="svnmimetype"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: svn:mime-type</h4></div>
<ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+image/png
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of property
</span><a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2ie6css"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/ie6.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/ie6.css (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/ie6.css 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,35 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+.videofeatured h3 {
+ position: absolute;
+ top: 0;
+ left: 0;
+}
+
+.videofeatured {
+ height: 175px;
+}
+
+.arrow {
+ background-position: -100px -100px;
+ top: 0;
+ left: 0;
+}
+
+.pagetitle {
+ height: 50px;
+}
+
+.videowrapper .sleeve {
+ padding-bottom: 14px;
+}
+
+.thirds {
+ width: 970px !important;
+}
+
+.blog .videowrapper {
+ display: none;
+}
+
+.blog .title {
+ border-bottom: 1px solid #333;
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2incwpcomphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/inc/wpcom.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/inc/wpcom.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/inc/wpcom.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,11 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+require_once WP_CONTENT_DIR . '/themes/vip/plugins/vip-init.php';
+wpcom_vip_load_plugin( 'taxonomy-list-widget' );
+
+if ( apply_filters( 'wptv_setup_theme', true ) ) {
+ // Load plugins and setup theme
+ require_once get_template_directory() . '/plugins/rewrite.php';
+ require_once get_template_directory() . '/plugins/wordpresstv-rest/wordpresstv-rest.php';
+ require_once get_template_directory() . '/plugins/wordpresstv-anon-upload/anon-upload.php';
+}
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2indexphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/index.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/index.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/index.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,85 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * WordCamp.tv Index Fallback
+ *
+ * It will be weird if somebody sees this (but okay if 404)
+ */
+
+get_header();
+global $wp_query, $post, $wptv;
+
+if ( have_posts() ) :
+?>
+
+ <div class="wptv-hero">
+ <h2 class="page-title"><?php esc_html_e( 'Archives', 'wptv' ); ?></h2>
+ </div>
+ <div class="container">
+ <div class="primary-content">
+
+ <ul class="archive video-list">
+
+ <?php while ( have_posts() ) : the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>" class="video-thumbnail">
+ <?php $wptv->the_video_image( 50, null, false ); ?>
+ </a>
+
+ <div class="video-description">
+ <div class="video-info">
+
+ <h5><?php esc_html_e( 'Published', 'wptv' ); ?></h5>
+ <p class="video-date"><?php the_date(); ?></p>
+
+ <?php if ( $post->post_excerpt ) : ?>
+ <div class="video-description"><?php the_excerpt(); ?></div>
+ <?php
+ endif;
+
+ $wptv->the_terms( 'event', '<h5>Event</h5><p class="video-event">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'speakers', '<h5>Speakers</h5><p class="video-speakers">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'post_tag', '<h5>Tags</h5><p class="video-tags">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'language', '<h5>Language</h5><p class="video-lang">', '<br /> ', '</p>' );
+ ?>
+ </div><!-- .video-info -->
+ </div>
+ </li>
+ <?php endwhile; // have_posts ?>
+
+ </ul><!-- .archive.video-list -->
+
+ <?php get_template_part( 'pagination' ); ?>
+
+ </div>
+
+ <div class="secondary-content">
+ <?php get_sidebar(); ?>
+ </div><!-- .secondary-content -->
+ </div><!-- .container -->
+
+<?php else : // have_posts ?>
+
+ <div class="wptv-hero">
+ <h2 class="page-title"><?php esc_html_e( 'Whoops!', 'wptv' ); ?></h2>
+ </div>
+ <div class="container">
+ <div class="primary-content">
+
+ <div class="fourOHfour">
+ <h2 class="center"><?php esc_html_e( 'Uh oh, someone made a mistake!' ); ?></h2>
+ <p><?php esc_html_e( 'These sorts of things happen…' ); ?></p>
+ <p class="center"><?php esc_html_e( 'Try searching for what you were looking for.' ); ?></p>
+ <p><?php echo get_search_form(); ?></p>
+ <p><?php printf ( __( 'Or, <a href="%s">visit the homepage</a> to start a fresh journey.', 'wptv' ), '/' ); ?></p>
+ <p>
+ <img src="<?php echo get_stylesheet_directory_uri(); ?>/i/michael-pick-stashes-a-guinness.gif" alt="" /><br />
+ Photo animation credit: <a href="http://markjaquith.com/">Mark Jaquith</a>.
+ </p>
+ </div>
+ </div>
+ </div><!-- container -->
+
+<?php
+endif;
+
+get_footer();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2jsdropdownsjs"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/js/dropdowns.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/js/dropdowns.js (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/js/dropdowns.js 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,9 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+jQuery(document).ready( function( $ ) {
+ $('#menu li').hover(
+ function() {
+ $(this).children('.sub-menu').slideDown('fast');
+ }, function () {
+ $(this).children('.sub-menu').fadeOut('fast');
+ }
+ );
+});
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pagephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/page.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/page.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/page.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,35 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Page Template
+ */
+get_header();
+the_post();
+?>
+<div class="wptv-hero">
+ <h2 class="page-title">
+ <?php the_title(); ?>
+ </h2>
+</div>
+
+<div class="container">
+ <div class="primary-content">
+
+ <div <?php post_class(); ?>>
+
+ <div class="entry">
+ <div class="sleeve">
+ <?php the_content(); ?><br />
+ <div id="comments">
+ <?php wp_link_pages(); ?>
+ <?php comments_template(); ?>
+ </div>
+ </div>
+ </div><!-- .entry -->
+
+ </div><!-- post_class() -->
+
+ </div><!-- .primary-content -->
+ <?php /*get_sidebar('page');*/ ?>
+</div><!-- .container -->
+
+<?php get_footer(); ?>
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2paginationphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/pagination.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/pagination.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/pagination.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,13 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Pagination template part, use with get_template_part()
+ */
+
+if ( $wp_query->max_num_pages > 1 ) :
+?>
+<div class="pagination">
+ <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">←</span> Older videos', 'wptv' ) ); ?></div>
+ <div class="nav-next"><?php previous_posts_link( __( 'Newer videos <span class="meta-nav">→</span>', 'wptv' ) ); ?></div>
+</div>
+<?php
+endif;
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginsrewritephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/rewrite.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/rewrite.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/rewrite.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,18 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * WordPress.tv Rewrites
+ *
+ * Some WordPress.tv plugins will add new rewrite rules during init, this plugin
+ * will allow a $_GET request to flush rules.
+ */
+function wptv_maybe_flush_rewrite_rules() {
+ global $wp_rewrite;
+
+ // Visit http://wordpress.tv/?flush_rules=1 as a super admin or kovshenin (4637740)
+ // to flush the rules for /unisubs/ endpoint to work.
+ if ( ( is_super_admin() || get_current_user_id() == 4637740 ) && !empty( $_GET['flush_rules'] ) ) {
+ $wp_rewrite->flush_rules();
+ exit( 'Rewrite rules flushed.' );
+ }
+}
+add_action( 'init', 'wptv_maybe_flush_rewrite_rules', 99 );
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvanonuploadanonuploadphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-anon-upload/anon-upload.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-anon-upload/anon-upload.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-anon-upload/anon-upload.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,547 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+// Anonnymous uploads of videos for WPTV
+class WPTV_Anon_Upload {
+ // hardcoded user_id for the fake contributor that owns the drafts (username: anonvideoupload, currently uses andrew.ozz@automattic email)
+ private $drafts_author = 34340661;
+ var $errors = false;
+ var $success = false;
+
+ function __construct() {
+ add_action( 'admin_post_wptv_video_upload', array( &$this, 'init' ) );
+ add_action( 'admin_post_nopriv_wptv_video_upload', array( &$this, 'init' ) );
+ add_action( 'dbx_post_sidebar', array( &$this, 'display' ) );
+ }
+
+ function init() {
+ if ( ! empty( $_POST['wptvvideon'] ) && wp_verify_nonce( $_POST['wptvvideon'], 'wptv-upload-video' ) ) {
+ $this->validate();
+
+ if ( ! $this->errors ) {
+ $this->success = $this->save();
+ }
+
+ $redir = home_url( 'submit-video' );
+
+ if ( $this->success ) {
+ $redir = add_query_arg( array( 'success' => 1 ), $redir );
+ } elseif ( $this->errors ) {
+ $redir = add_query_arg( array( 'error' => $this->errors ), $redir );
+ } else {
+ $redir = add_query_arg( array( 'error' => 5 ), $redir );
+ }
+
+ wp_redirect( $redir );
+ } else {
+ // no nonce, send them "home"?
+ wp_redirect( home_url() );
+ }
+
+ exit;
+ }
+
+ // This should never trigger in "proper" use as there's JS validation on the form and JS is required.
+ // If it triggers, consider it as a bot/improper use and exit?
+ function validate() {
+ $text_fields = array(
+ 'wptv_video_title',
+ 'wptv_video_producer',
+ 'wptv_speakers',
+ 'wptv_event',
+ );
+
+ // Normal users won't see the honeypot field, so if there's a value in it, then we can assume the submission is spam from a bot
+ if ( ! isset( $_POST['wptv_honey'] ) || ! empty( $_POST['wptv_honey'] ) ) {
+ if ( function_exists( 'bump_stats_extras' ) ) {
+ bump_stats_extras( 'wptv-spam', 'honeypot_trapped_anon_upload' );
+ }
+
+ return $this->error( 13 );
+ }
+
+ if ( ! is_user_logged_in() ) {
+ if ( empty( $_POST['wptv_uploaded_by'] ) ) {
+ return $this->error( 10 );
+ }
+
+ if ( empty( $_POST['wptv_email'] ) ) {
+ return $this->error( 11 );
+ } elseif ( ! is_email( $_POST['wptv_email'] ) ) {
+ return $this->error( 12 );
+ }
+
+ $text_fields[] = 'wptv_uploaded_by';
+ $text_fields[] = 'wptv_email';
+ }
+
+ foreach ( $text_fields as $field ) {
+ if ( strlen( (string) $field ) > 150 ) {
+ return $this->error( 6 );
+ }
+ }
+ }
+
+ function handle_upload( $parent_id ) {
+ // allow only video mimes
+ $overrides = array(
+ 'test_form' => false,
+ 'mimes' => array(
+ 'avi' => 'video/avi',
+ 'mov|qt' => 'video/quicktime',
+ 'mpeg|mpg|mpe' => 'video/mpeg',
+ 'mp4|m4v' => 'video/mp4',
+ 'asf|asx|wax|wmv|wmx' => 'video/asf',
+ 'ogv' => 'video/ogg',
+ '3gp' => 'video/3gpp',
+ '3g2' => 'video/3gpp2',
+ ),
+ );
+
+ unset( $_FILES['async-upload'] );
+
+ if ( empty( $_FILES['wptv_file']['name'] ) ) {
+ return new WP_Error( 'upload_error', 'Invalid file name.' );
+ }
+
+ $name = $_FILES['wptv_file']['name'];
+ add_filter( 'wp_handle_upload_prefilter', array( &$this, 'video_filename' ), 5 );
+
+ $file = wp_handle_upload( $_FILES['wptv_file'], $overrides );
+
+ if ( isset( $file['error'] ) ) {
+ return new WP_Error( 'upload_error', $file['error'] );
+ }
+
+ $filepath = $file['file'];
+
+ $attachment = array(
+ 'post_title' => $this->sanitize_text( $name ),
+ 'guid' => $file['url'],
+ 'post_mime_type' => $file['type'],
+ 'post_content' => '',
+ 'post_author' => $this->drafts_author,
+ );
+
+ // expects slashed
+ $attachment_id = wp_insert_attachment( add_magic_quotes( $attachment ), $filepath, $parent_id );
+
+ if ( ! is_wp_error( $attachment_id ) ) {
+ wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $filepath ) );
+ }
+
+ return $attachment_id;
+ }
+
+ // expects slashed, returns unslashed
+ function sanitize_text( $str, $remove_line_breaks = true ) {
+ $str = str_replace( '\\', '', $str );
+
+ if ( $remove_line_breaks ) {
+ $str = sanitize_text_field( $str );
+ } else {
+ $str = wp_check_invalid_utf8( $str );
+ $str = wp_strip_all_tags( $str );
+
+ $match = array();
+ while ( preg_match( '/%[a-f0-9]{2}/i', $str, $match ) ) {
+ $str = str_replace( $match[0], '', $str );
+ }
+ }
+
+ return htmlspecialchars( $str, ENT_QUOTES, 'UTF-8' );
+ }
+
+ function error( $msg ) {
+ $this->errors = $msg;
+
+ return false;
+ }
+
+ function video_filename( $file ) {
+ $name_parts = pathinfo( $file['name'] );
+
+ // this should never happen
+ if ( empty( $name_parts['extension'] ) ) {
+ die;
+ }
+
+ // random file name
+ $str = md5( time() . rand( 1, 1000000 ) );
+ $file['name'] = 'video-' . substr( $str, rand( 5, 20 ), 10 ) . '.' . $name_parts['extension'];
+
+ return $file;
+ }
+
+ function save() {
+ // check
+ if ( empty( $_FILES['wptv_file']['name'] ) ) {
+ return $this->error( 1 );
+ }
+
+ // quick file extension check
+ $name_parts = pathinfo( $_FILES['wptv_file']['name'] );
+
+ if ( ! empty( $name_parts['extension'] ) ) {
+ if ( ! in_array( strtolower( $name_parts['extension'] ), array(
+ 'avi',
+ 'mov',
+ 'qt',
+ 'mpeg',
+ 'mpg',
+ 'mpe',
+ 'mp4',
+ 'm4v',
+ 'asf',
+ 'asx',
+ 'wax',
+ 'wmv',
+ 'wmx',
+ 'ogv',
+ '3gp',
+ '3g2',
+ ), true )
+ ) {
+ return $this->error( 2 );
+ }
+ } else {
+ return $this->error( 3 );
+ }
+
+ // empty the globals just in case
+ $_posted = $_POST;
+ $_requested = $_REQUEST;
+ $_got = $_GET;
+ $_POST = $_REQUEST = $_GET = array();
+
+ $blog_id = get_current_blog_id();
+
+ $anon_post = get_default_post_to_edit( 'post' ); // without saving auto-draft
+ $anon_post = get_object_vars( $anon_post );
+
+ $anon_post['post_title'] = 'Uploaded video';
+ $anon_post['post_excerpt'] = '';
+ $anon_post['post_author'] = $this->drafts_author;
+ $anon_post['post_status'] = 'pending';
+
+ // Add default cat according to the "This is a WC video" checkbox
+ if ( ! empty( $_posted['wptv_video_wordcamp'] ) ) {
+ $anon_post['post_category'] = array( '12784353' ); // add the "WordCampTV" category
+ }
+ else {
+ $anon_post['post_category'] = array( '1' ); // Uncategorized
+ }
+
+ // Insert the post and attachment
+ $post_id = wp_insert_post( add_magic_quotes( $anon_post ) );
+
+ if ( is_wp_error( $post_id ) ) {
+ return $this->error( 5 );
+ }
+
+ $attachment_id = $this->handle_upload( $post_id );
+
+ if ( is_wp_error( $attachment_id ) ) {
+ return $this->error( 5 );
+ }
+
+ // Put the video shortcode in post_content (makes a standard post for wptv).
+ $video_data = function_exists( 'video_get_info_by_blogpostid' ) ? video_get_info_by_blogpostid( $blog_id, $attachment_id ) : false;
+
+ if ( ! $video_data || empty( $video_data->guid ) ) {
+ return $this->error( 4 );
+ }
+
+ wp_update_post( array( 'ID' => $post_id, 'post_content' => '[wpvideo ' . $video_data->guid . ']' ) );
+
+ // we have post_id, add post meta
+ $current_user = wp_get_current_user();
+
+ if ( ! empty( $current_user->ID ) ) {
+ // use the logged in user name and email
+ $anon_author = $current_user->display_name;
+ $anon_author_email = $current_user->user_email;
+ } else {
+ // validate these in the back-end?
+ $anon_author = $this->sanitize_text( $_posted['wptv_uploaded_by'] );
+ $anon_author_email = $this->sanitize_text( $_posted['wptv_email'] );
+ }
+
+ $video_title = $this->sanitize_text( $_posted['wptv_video_title'] );
+ $video_producer = $this->sanitize_text( $_posted['wptv_video_producer'] );
+ $speakers = $this->sanitize_text( $_posted['wptv_speakers'] );
+ $event = $this->sanitize_text( $_posted['wptv_event'] );
+ $description = $this->sanitize_text( $_posted['wptv_video_description'], false );
+ $language = $this->sanitize_text( $_posted['wptv_language'] );
+ $ip = $_SERVER['REMOTE_ADDR'];
+
+ $categories = '';
+ if ( ! empty( $_posted['post_category'] ) && is_array( $_posted['post_category'] ) ) {
+ foreach ( $_posted['post_category'] as $cat ) {
+ $cat = (int) $cat;
+ if ( $cat ) {
+ $categories .= "$cat,";
+ }
+ }
+ }
+
+ $post_meta = array(
+ 'attachment_id' => $attachment_id,
+ 'submitted_by' => $anon_author,
+ 'submitted_email' => $anon_author_email,
+ 'title' => $video_title,
+ 'producer' => $video_producer,
+ 'speakers' => $speakers,
+ 'event' => $event,
+ 'language' => $language,
+ 'categories' => $categories,
+ 'description' => $description,
+ 'ip' => $ip,
+ );
+
+ $post_meta['video_guid'] = $video_data->guid;
+ update_post_meta( $post_id, '_wptv_submitted_video', $post_meta );
+
+ // put back the globals
+ $_POST = $_posted;
+ $_REQUEST = $_requested;
+ $_GET = $_got;
+
+ return true;
+ }
+
+ function display() {
+ $post = get_post();
+
+ if ( $post->post_author == $this->drafts_author ) {
+ $meta = get_post_meta( $post->ID, '_wptv_submitted_video', true );
+ }
+
+ if ( empty( $meta ) ) {
+ return;
+ }
+
+ $attachment_post = get_post( $meta['attachment_id'] );
+
+ $embed_args = array(
+ 'format' => 'fmt_std',
+ 'width' => 600,
+ 'context' => 'admin',
+ );
+ $embed_args['blog_id'] = get_current_blog_id();
+ $embed_args['post_id'] = $meta['attachment_id'];
+
+ ?>
+ <div class="stuffbox" id="review-video">
+ <style type="text/css" scoped="scoped">
+ #poststuff #anon-data-wrap {
+ padding: 5px 15px;
+ }
+
+ #review-video h3.hndle {
+ cursor: pointer;
+ }
+
+ .anon-data {
+ padding: 15px 0 0;
+ }
+
+ .anon-data p {
+ margin: 8px 0;
+ }
+
+ .anon-data .label {
+ display: inline-block;
+ width: 23%;
+ }
+
+ .anon-data .data {
+ display: inline-block;
+ width: 75%;
+ }
+
+ .anon-data input[type="text"], .anon-data textarea {
+ width: 80%;
+ }
+
+ .anon-data a.anon-approve {
+ max-width: 19%;
+ margin-left: 1%;
+ }
+
+ .anon-data .txtarea .data a.anon-approve {
+ bottom: 6px;
+ position: relative;
+ }
+
+ .anon-data .txtarea .label {
+ padding: 10px 0;
+ vertical-align: top;
+ }
+
+ .anon-data a.disabled {
+ color: #888;
+ }
+ </style>
+ <h3 class="hndle"><span>Submitted video</span></h3>
+
+ <div id="anon-data-wrap" class="inside">
+
+ <p>To change the default thumbnail image, play the video and click "Capture Thumbnail" button.</p>
+ <table>
+ <tr>
+ <td>
+ <?php
+ if ( function_exists( 'video_embed' ) ) {
+ echo video_embed( $embed_args );
+ }
+ ?>
+ </td>
+ </tr>
+ </table>
+
+ <div class="anon-data">
+ <div class="row">
+ <p class="label">Submitted by:<br></p>
+ <p class="data">
+ <input type="text" readonly="readonly" value="<?php echo esc_attr( $meta['submitted_by'] ); ?>"/>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Email:</p>
+ <p class="data">
+ <a href="mailto:<?php echo esc_attr( $meta['submitted_email'] ); ?>?Subject=Your%20WordPress.tv%20submission"><?php echo esc_html( $meta['submitted_email'] ); ?></a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">IP Address:</p>
+ <p class="data">
+ <a href="<?php echo esc_url( add_query_arg( array( 'query' => $meta['ip'] ), 'http://en.utrace.de' ) ); ?>" target="_blank"><?php echo esc_html( $meta['ip'] ); ?></a> (opens in new tab, shows location of the IP)
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Title:</p>
+ <p class="data">
+ <input type="text" value="<?php echo esc_attr( $meta['title'] ); ?>"/>
+ <a class="button-secondary anon-approve" href="#title">Approve</a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Language:</p>
+ <p class="data">
+ <input type="text" value="<?php echo esc_attr( $meta['language'] ); ?>"/>
+ <a class="button-secondary anon-approve" href="#new-tag-language">Approve</a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Categories:</p>
+ <p class="data" id="anon-approve-cats">
+ <?php
+ $cats = preg_replace( '/[^0-9,]+/', '', trim( $meta['categories'], ' ,' ) );
+ $cats = explode( ',', $cats );
+ foreach ( $cats as $cat ) {
+ if ( intval( $cat ) ) {
+ echo '<a href="#in-category-' . $cat . '" class="anon-cat-link" title="Click to approve">Unknown?</a>, ';
+ }
+ }
+ ?>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Event:</p>
+ <p class="data">
+ <input type="text" value="<?php echo esc_attr( $meta['event'] ); ?>"/>
+ <a class="button-secondary anon-approve" href="#new-tag-event">Approve</a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Producer:</p>
+ <p class="data">
+ <input type="text" value="<?php echo esc_attr( $meta['producer'] ); ?>"/>
+ <a class="button-secondary anon-approve" href="#new-tag-producer">Approve</a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Speakers:</p>
+ <p class="data">
+ <input type="text" value="<?php echo esc_attr( $meta['speakers'] ); ?>"/>
+ <a class="button-secondary anon-approve" href="#new-tag-speakers">Approve</a>
+ </p>
+ </div>
+
+ <div class="row txtarea">
+ <p class="label">Description:</p>
+ <p class="data">
+ <textarea rows="10"><?php echo esc_html( $meta['description'] ); ?></textarea>
+ <a class="button-secondary anon-approve" href="#excerpt">Approve</a>
+ </p>
+ </div>
+
+ <div class="row">
+ <p class="label">Edit attachment:</p>
+ <p class="data">
+ <a href="<?php echo esc_url( get_edit_post_link( $meta['attachment_id'] ) ); ?>" target="_blank"><?php echo esc_html( $attachment_post->post_title ); ?></a>
+ </p>
+ </div>
+ </div>
+ </div>
+ </div>
+ <script type="text/javascript">
+ (function ($) {
+ $('#post-body-content').prepend($('#review-video'));
+
+ $(document).ready(function ($) {
+ var default_cat = true;
+
+ $('#review-video h3.hndle').bind('click.fold-anon-video', function (e) {
+ $('#anon-data-wrap').slideToggle();
+ });
+
+ $('#anon-approve-cats a.anon-cat-link').each(function (i, el) {
+ var id = el.href.replace(/.*?#/, '#');
+ if (id)
+ $(el).html($(id).parent().text());
+ });
+
+ $('div.anon-data a.anon-approve, #anon-approve-cats a.anon-cat-link').bind('click.anon-approve', function (e) {
+ var target = $(e.target), id = target.attr('href'), el = $(id);
+
+ if (target.hasClass('disabled'))
+ return;
+
+ target.addClass('disabled');
+
+ if (id.indexOf('#new-tag-') != -1) {
+ el.val(target.siblings('input[type="text"]').val());
+ el.siblings('.tagadd').click();
+ } else if (id == '#title') {
+ el.val(target.siblings('input[type="text"]').val());
+ } else if (id == '#excerpt') {
+ el.val(target.siblings('textarea').val());
+ } else if (target.is('a.anon-cat-link')) {
+ if (default_cat) {
+ // remove the default category only once
+ $('#in-category-12784353').prop('checked', false);
+ default_cat = false;
+ }
+
+ el.prop('checked', true);
+ }
+
+ e.preventDefault();
+ });
+ });
+ })(jQuery);
+ </script>
+ <?php
+ }
+}
+
+$_wptv_anon = new WPTV_Anon_Upload;
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvoembedwordpresstvoembedphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-oembed/wordpresstv-oembed.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-oembed/wordpresstv-oembed.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-oembed/wordpresstv-oembed.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,163 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php /*
+
+**************************************************************************
+
+Plugin Name: WordPress.tv oEmbed Provider
+Plugin URI: http://wordpress.tv/oembed/
+Description: Creates an oEmbed provider for WordPress.tv.
+Author: Viper007Bond
+
+**************************************************************************/
+
+class WordCampTV_oEmbed {
+
+ /**
+ * Class construct, duh.
+ *
+ * @global WP $wp
+ */
+ function __construct() {
+ global $wp;
+
+ add_action( 'template_redirect', array( $this, 'oembed_provider' ), 2 );
+ add_action( 'wp_head', array( $this, 'maybe_add_discovery_tags' ) );
+
+ // Set up WordPress to accept /oembed/
+ add_rewrite_rule( 'oembed/?(.*)', 'index.php?$matches[1]&oembed=1', 'top' );
+ // @see rewrite.php in plugins to flush rules
+
+ // Tell WordPress to not ignore the "oembed" query variable
+ $wp->add_query_var( 'oembed' );
+ }
+
+
+ // Invalid (404)
+ function fourohfour() {
+ status_header( 404 );
+ exit( 'Missing or invalid URL parameter.' );
+ }
+
+
+ // oEmbed output
+ function oembed_provider() {
+ if ( ! get_query_var( 'oembed' ) ) {
+ return false;
+ }
+
+ if ( empty( $_GET['url'] ) ) {
+ $this->fourohfour();
+ }
+
+ if ( is_ssl() ) {
+ $_lookup_url = str_replace( 'http:', 'https:', $_GET['url'] );
+ } else {
+ $_lookup_url = str_replace( 'https:', 'http:', $_GET['url'] );
+ }
+
+ // Do a quick check to see if the URL starts with the blog's URL
+ if ( get_bloginfo( 'url' ) != substr( $_lookup_url, 0, strlen( get_bloginfo( 'url' ) ) ) ) {
+ $this->fourohfour();
+ }
+
+ // Attempt to turn the URL into a post object
+ $post_ID = url_to_postid( $_lookup_url );
+ $post = get_post( $post_ID );
+ if ( empty( $post_ID ) || ! $post ) {
+ $this->fourohfour();
+ }
+
+ $defaults = array(
+ 'maxwidth' => '400',
+ 'maxheight' => '300',
+ );
+
+ if ( ! empty( $_GET['maxwidth'] ) ) {
+ $maxwidth = (int) $_GET['maxwidth'];
+ }
+ if ( empty( $maxwidth ) ) {
+ $maxwidth = $defaults['maxwidth'];
+ }
+
+ if ( ! empty( $_GET['maxheight'] ) ) {
+ $maxheight = (int) $_GET['maxheight'];
+ }
+ if ( empty( $maxheight ) ) {
+ $maxheight = $defaults['maxheight'];
+ }
+
+ $data = array(
+ 'type' => 'video',
+ 'version' => '1.0',
+ );
+
+ // Alright, let's see what kind of video is used
+ // VideoPress
+ if ( false !== stristr( $post->post_content, '[wpvideo' ) ) {
+ preg_match( '#\[wpvideo ([a-zA-Z0-9]+)#i', $post->post_content, $guid );
+ $guid = $guid[1];
+ $info = function_exists( 'video_get_info_by_guid' ) ? video_get_info_by_guid( $guid ) : new StdClass;
+ if ( empty( $guid ) || ! $info ) {
+ status_header( 500 );
+ exit( 'An error has occurred on our end. Please contact WordPress.com support.' );
+ }
+
+ list( $width, $height ) = wp_expand_dimensions( $info->width, $info->height, $maxwidth, $maxheight );
+
+ $data['title'] = $info->title;
+ $data['width'] = $width;
+ $data['height'] = $height;
+ $data['html'] = '<embed src="//v.wordpress.com/' . $info->guid . '" type="application/x-shockwave-flash" width="' . $width . '" height="' . $height . '" allowscriptaccess="always" allowfullscreen="true" wmode="transparent"></embed>';
+ } // Other video types aren't supported quite yet
+ else {
+ status_header( 501 );
+ exit( 'Support has not been added for this non-VideoPress type video yet.' );
+ }
+
+ // Figure out the format
+ $format = 'json';
+ if ( ! empty( $_GET['format'] ) ) {
+ $format = $_GET['format'];
+ }
+
+ // Output the response
+ switch ( $format ) {
+ case 'json':
+ header( 'Content-Type: application/json' );
+ echo json_encode( $data );
+ exit();
+ case 'xml':
+ header( 'Content-Type: text/xml' );
+ echo '<' . '?xml version="1.0" encoding="utf-8" standalone="yes"?>' . "\n";
+ echo "<oembed>\n";
+ foreach ( $data as $tag => $value ) {
+ echo " <{$tag}>" . htmlspecialchars( $value ) . "</{$tag}>\n";
+ }
+ echo '</oembed>';
+ exit();
+ default;
+ header( 'HTTP/1.0 501 Not Implemented' );
+ exit();
+ }
+ }
+
+
+ // If it's a single post that uses VideoPress, add discovery tags
+ function maybe_add_discovery_tags() {
+ if ( is_single() && stristr( get_post()->post_content, '[wpvideo' ) ) {
+ printf( '<link rel="alternate" type="application/json+oembed" href="%1$s" title="%2$s" />' . "\n",
+ esc_url( add_query_arg( array( 'url' => urlencode( get_permalink() ), 'format' => 'json' ), home_url( '/oembed/' ) ) ),
+ the_title_attribute( array( 'echo' => false ) )
+ );
+ printf( '<link rel="alternate" type="text/xml+oembed" href="%1$s" title="%2$s" />' . "\n",
+ esc_url( add_query_arg( array( 'url' => urlencode( get_permalink() ), 'format' => 'xml' ), home_url( '/oembed/' ) ) ),
+ the_title_attribute( array( 'echo' => false ) )
+ );
+ }
+ }
+}
+
+add_action( 'init', 'WordCampTV_oEmbed', 5 );
+function WordCampTV_oEmbed() {
+ global $WordCampTV_oEmbed;
+ $WordCampTV_oEmbed = new WordCampTV_oEmbed();
+}
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvrestwordpresstvrestphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/wordpresstv-rest.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/wordpresstv-rest.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-rest/wordpresstv-rest.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,106 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+/**
+ * WordPress.tv REST APi
+ *
+ */
+class WordPressTV_REST_API {
+
+ /**
+ * Constructor fired during init.
+ *
+ * @global WP $wp
+ */
+ function __construct() {
+ global $wp;
+
+ add_action( 'template_redirect', array( $this, 'template_redirect' ), 2 );
+ add_rewrite_rule( 'api/(.*)', 'index.php?wptvapi=$matches[1]', 'top' );
+ // @see rewrite.php in plugins to flush rules
+
+ // ?unisubs and ?guid query variables.
+ $wp->add_query_var( 'wptvapi' );
+ }
+
+ /**
+ * Returns a 404 status header and exits.
+ */
+ function fourohfour() {
+ status_header( 404 );
+ exit( 'Invalid request.' );
+ }
+
+ function template_redirect() {
+ global $wp_query, $post, $wptv;
+
+ if ( ! get_query_var( 'wptvapi' ) ) {
+ return;
+ }
+
+ $matches = array();
+ if ( ! preg_match( '/^(.+)\.(json|array)$/i', get_query_var( 'wptvapi' ), $matches ) ) {
+ $this->error( 'Invalid request.' );
+ }
+
+ $method = $matches[1];
+ $format = $matches[2];
+ $response = array();
+
+ switch ( $method ) {
+ case 'videos':
+ if ( isset( $_REQUEST['posts_per_page'] ) ) {
+ query_posts( array_merge( $wp_query->query, array( 'posts_per_page' => intval( $_REQUEST['posts_per_page'] ) ) ) );
+ }
+
+ $response['videos'] = array();
+ while ( have_posts() ) {
+ the_post();
+
+ // Super lame hack to get a thumbnail from VideoPress :)
+ ob_start();
+ $wptv->the_video_image( 50, null, false, false );
+ $thumbnail = esc_url_raw( trim( ob_get_contents() ) );
+ ob_end_clean();
+
+ $response['videos'][] = array(
+ 'title' => $post->post_title,
+ 'permalink' => get_permalink( get_the_ID() ),
+ 'thumbnail' => $thumbnail,
+ );
+ }
+
+ break;
+ default:
+ $this->error( 'Unknown method.' );
+ break;
+ }
+
+ if ( ! empty( $response ) ) {
+ switch ( $format ) {
+ case 'json':
+ echo json_encode( $response );
+ break;
+ case 'array':
+ if ( defined( 'WPCOM_SANDBOXED' ) && WPCOM_SANDBOXED ) {
+ print_r( $response );
+ }
+ break;
+ }
+ die();
+ }
+
+ $this->error( 'Empty response.' );
+ die();
+ }
+
+ function error( $message, $http_code = 404 ) {
+ status_header( $http_code );
+ exit( $message );
+ }
+}
+
+// Initialize the object.
+add_action( 'init', 'wptv_rest_api_init', 5 );
+function wptv_rest_api_init() {
+ $wptv_rest_api = new WordPressTV_REST_API();
+}
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvunisubswordpresstvunisubsphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-unisubs/wordpresstv-unisubs.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-unisubs/wordpresstv-unisubs.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-unisubs/wordpresstv-unisubs.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,207 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+/**
+ * Universal Subtitles for WordPress.tv
+ *
+ * This class is included from the WordPress.tv VIP theme's function.php file.
+ * Provides a /unisubs/ end-point for Universal Subtitles to access stuff via HTTP.
+ *
+ * @global WP $wp
+ */
+class WordCampTV_Unisubs {
+
+ /**
+ * Constructor fired during init.
+ */
+ function __construct() {
+ global $wp;
+
+ add_action( 'template_redirect', array( &$this, 'template_redirect' ), 2 );
+ add_rewrite_rule( 'unisubs/?(.*)', 'index.php?$matches[1]&unisubs=1', 'top' );
+ // @see rewrite.php in plugins to flush rules
+
+ // ?unisubs and ?guid query variables.
+ $wp->add_query_var( 'unisubs' );
+ $wp->add_query_var( 'guid' );
+
+ // Let's change the videopress.js file. @todo: Uncomment this before going live with Unisubs. OR dequeue it.
+ // add_filter( 'script_loader_src', array( &$this, 'script_loader_src' ), 10, 2 );
+ }
+
+ /**
+ * Returns a 404 status header and exits.
+ */
+ function fourohfour() {
+ status_header( 404 );
+ exit( 'Invalid request.' );
+ }
+
+ /**
+ * Returns a $post object by searching for the wpvideo guid or false.
+ *
+ * @param int $guid ID.
+ *
+ * @return bool
+ */
+ function get_post_by_guid( $guid ) {
+ $posts = get_posts( array( 's' => "[wpvideo $guid]", 'post_status' => 'publish' ) );
+ if ( $posts ) {
+ return $posts[0];
+ }
+
+ return false;
+ }
+
+ /**
+ * Unisubs API output and ?guid= redirect hook, fired during
+ * template_redirect, output in ?format=(json|xml)
+ */
+ function template_redirect() {
+
+ // If a ?guid has been specified, but not a /unisubs/ endpoint, redirect
+ // to the post permalink. Allows requests like http://wordpress.tv/?guid=nWoZmCPz
+ if ( get_query_var( 'guid' ) && ! get_query_var( 'unisubs' ) ) {
+ $post = $this->get_post_by_guid( get_query_var( 'guid' ) );
+ if ( $post ) {
+ wp_redirect( get_permalink( $post ) );
+ exit();
+ }
+ }
+
+ // Is this a /unisubs/ endpoint?
+ if ( ! get_query_var( 'unisubs' ) ) {
+ return false;
+ }
+
+ // Either ?guid or ?url must be present for /unisubs/
+ if ( ! isset( $_GET['guid'] ) && ! isset( $_GET['url'] ) ) {
+ $this->fourohfour();
+ }
+
+ $post = false;
+ $post_id = 0;
+
+ if ( isset( $_GET['guid'] ) ) {
+ $post = $this->get_post_by_guid( $_GET['guid'] );
+ if ( ! $post ) {
+ $this->fourohfour();
+ }
+ }
+
+ if ( isset( $_GET['url'] ) ) {
+ // Do a quick check to see if the URL starts with the blog's URL
+ if ( home_url() != substr( $_GET['url'], 0, strlen( home_url() ) ) ) {
+ $this->fourohfour();
+ }
+
+ $post_id = url_to_postid( $_GET['url'] );
+ if ( empty( $post_id ) || ! $post = get_post( $post_id ) ) {
+ $this->fourohfour();
+ }
+ }
+
+ // Works with VideoPress videos only.
+ if ( false == stristr( $post->post_content, '[wpvideo' ) ) {
+ status_header( 501 );
+ exit( 'Support has not been added for this non-VideoPress type video yet.' );
+ }
+
+ $data = array(
+ 'type' => 'video',
+ 'version' => '1.0',
+ 'permalink' => esc_url_raw( get_permalink( $post_id ) ),
+ );
+
+ // Search for VideoPress.
+ preg_match( '#\[wpvideo ([a-zA-Z0-9]+)#i', $post->post_content, $guid );
+ $guid = $guid[1];
+ $info = function_exists( 'video_get_info_by_guid' ) ? video_get_info_by_guid( $guid ) : new StdClass;
+ if ( empty( $guid ) || ! $info ) {
+ status_header( 500 );
+ exit( 'An error has occurred on our end. Please contact WordPress.com support.' );
+ }
+
+ list( $width, $height ) = array( $info->width, $info->height );
+
+ // Let's try and get the best thumbnail available.
+ $thumb = false;
+ foreach ( array( 'hd_files', 'dvd_files', 'std_files' ) as $key ) {
+ if ( isset( $info->{$key} ) && ! $thumb ) {
+ $files = maybe_unserialize( $info->{$key} );
+ $thumb = isset( $files['original_img'] ) ? $files['original_img'] : false;
+ }
+ }
+
+ $data['guid'] = $info->guid;
+ $data['post_id'] = $post->ID;
+ $data['title'] = ! empty( $post->post_title ) ? $post->post_title : 'Untitled';
+ $data['description'] = ! empty( $info->description ) ? $info->description : 'No description given.';
+ $data['thumbnail'] = esc_url_raw( sprintf( 'http://videos.videopress.com/%s/%s', $info->guid, $thumb ) );
+
+ $data['width'] = absint( $width );
+ $data['height'] = absint( $height );
+ $data['duration'] = absint( $info->duration );
+ $data['swf'] = esc_url_raw( sprintf( 'http://v.wordpress.com/wp-content/plugins/video/assets/player.wptv.swf?guid=%s', $info->guid ) );
+
+ // Redirect to the SWF file if we need to.
+ if ( isset( $_GET['redirect_to_swf'] ) ) {
+ wp_redirect( $data['swf'] );
+ exit();
+ }
+
+ $format = 'json';
+ if ( ! empty( $_GET['format'] ) ) {
+ $format = strtolower( $_GET['format'] );
+ }
+
+ // Output the response based on $format.
+ switch ( $format ) {
+ case 'json':
+ header( 'Content-Type: application/json' );
+ echo json_encode( $data );
+ exit();
+ case 'xml':
+ header( 'Content-Type: text/xml' );
+ echo '<' . '?xml version="1.0" encoding="utf-8" standalone="yes"?>' . "\n";
+ echo "<item>\n";
+ foreach ( $data as $tag => $value ) {
+ echo " <{$tag}>" . htmlspecialchars( $value ) . "</{$tag}>\n";
+ }
+ echo '</item>';
+ exit();
+ case 'array': // useful for debugging
+ if ( defined( 'WPCOM_SANDBOXED' ) && WPCOM_SANDBOXED ) {
+ print_r( $data );
+ exit();
+ }
+ break;
+ default:
+ header( 'HTTP/1.0 501 Not Implemented' );
+ exit();
+ }
+ }
+
+ /**
+ * Replaces the src= for VideoPress into a special videopress.wptv.js,
+ * filters script_loader_src. Note: not used yet.
+ *
+ * @param string $src
+ * @param string $handle
+ *
+ * @return string
+ */
+ function script_loader_src( $src, $handle ) {
+ if ( $handle == 'videopress' ) {
+ $src = plugins_url( '/video/assets/js/videopress.wptv.js' );
+ }
+
+ return $src;
+ }
+}
+
+// Initialize the object.
+add_action( 'init', 'wptv_unisubs_init', 5 );
+function wptv_unisubs_init() {
+ global $wptv_unisubs;
+ $wptv_unisubs = new WordCampTV_Unisubs();
+}
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2pluginswordpresstvuploadsubtitleswordpresstvuploadsubtitlesphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-upload-subtitles/wordpresstv-upload-subtitles.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-upload-subtitles/wordpresstv-upload-subtitles.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/plugins/wordpresstv-upload-subtitles/wordpresstv-upload-subtitles.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,529 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+
+/**
+ * Subtitles Upload Handling
+ *
+ * Works with the form in the upload-subtitles-template.php page template.
+ * Based on (copy pasted from) the anonymous video upload form by Androw Ozz.
+ */
+class WordPressTV_Subtitles_Upload {
+ // hardcoded user_id for the fake contributor that owns the drafts (username: anonvideoupload)
+ private $drafts_author = 34340661;
+
+ private $video_id;
+
+ function __construct() {
+ add_action( 'admin_post_wptv_video_upload_subtitles', array( $this, 'post' ) );
+ add_action( 'admin_post_nopriv_wptv_video_upload_subtitles', array( $this, 'post' ) );
+ add_action( 'edit_form_after_title', array( $this, 'in_post_edit_form' ) );
+ add_action( 'all_admin_notices', array( $this, 'pending_notice' ) );
+
+ add_filter( 'attachment_fields_to_save', array( $this, 'moderate' ) );
+ add_filter( 'views_upload', array( $this, 'views_links' ) );
+ add_filter( 'post_mime_types', array( $this, 'post_mime_types' ) );
+ }
+
+ /**
+ * Creates the attachment if it's a valid file
+ *
+ * @uses wp_handle_upload
+ */
+ function handle_upload() {
+ // allow only video mimes
+ $overrides = array(
+ 'test_form' => false,
+ 'mimes' => array(
+ 'ttml' => 'application/ttml+xml',
+ 'dfxp' => 'application/ttml+xml', // .dfxp is changed to .ttml in $this->generate_filename()
+ ),
+ );
+
+ unset( $_FILES['async-upload'] );
+
+ if ( empty( $_FILES['wptv_subtitles_file']['name'] ) ) {
+ return new WP_Error( 'upload_error', 'Invalid file name.' );
+ }
+
+ $name = $_FILES['wptv_subtitles_file']['name'];
+ add_filter( 'wp_handle_upload_prefilter', array( $this, 'generate_filename' ), 5 );
+
+ $file = wp_handle_upload( $_FILES['wptv_subtitles_file'], $overrides );
+
+ if ( isset( $file['error'] ) ) {
+ return new WP_Error( 'upload_error', $file['error'] );
+ }
+
+ $filepath = $file['file'];
+
+ $attachment = array();
+ $attachment['post_title'] = $this->sanitize_text( $name );
+ $attachment['guid'] = $file['url'];
+ $attachment['post_mime_type'] = $file['type'];
+ $attachment['post_content'] = '';
+ $attachment['post_author'] = $this->drafts_author;
+
+ // expects slashed
+ $attachment_id = wp_insert_attachment( add_magic_quotes( $attachment ), $filepath );
+
+ if ( ! is_wp_error( $attachment_id ) ) {
+ wp_update_attachment_metadata( $attachment_id, wp_generate_attachment_metadata( $attachment_id, $filepath ) );
+ }
+
+ return $attachment_id;
+ }
+
+ /**
+ * Generate a non-guessable filename for uploaded files.
+ *
+ * @param string $file
+ *
+ * @return string
+ */
+ function generate_filename( $file ) {
+ $name_parts = pathinfo( $file['name'] );
+
+ // this should never happen
+ if ( empty( $name_parts['extension'] ) ) {
+ die;
+ }
+
+ // Change .dfxp to .ttml
+ if ( 'dfxp' == strtolower( $name_parts['extension'] ) ) {
+ $name_parts['extension'] = 'ttml';
+ }
+
+ // random file name
+ $str = md5( time() . rand( 1, 1000000 ) );
+ $file['name'] = 'subtitles-' . substr( $str, rand( 5, 20 ), 10 ) . '.' . $name_parts['extension'];
+
+ return $file;
+ }
+
+ /**
+ * When the POST request is fired with the subtitles form and action.
+ */
+ function post() {
+ if ( empty( $_POST['wptv-upload-subtitles-nonce'] ) || ! wp_verify_nonce( $_POST['wptv-upload-subtitles-nonce'], 'wptv-upload-subtitles' ) ) {
+ wp_die( 'Invalid form data. Please go back and try again.' );
+ }
+
+ if ( empty( $_POST['wptv_video_id'] ) ) {
+ wp_die( 'Requires a video context.' );
+ }
+
+ $video_id = absint( $_POST['wptv_video_id'] );
+ $this->video_id = $video_id;
+
+ if ( function_exists( 'wp_attachment_is_video' ) && ! wp_attachment_is_video( $video_id ) ) {
+ wp_die( 'You can only subtitle videos.' );
+ }
+
+ if ( empty( $_POST['wptv_wporg_username'] ) || empty( $_POST['wptv_author_email'] ) || ! is_email( $_POST['wptv_author_email'] ) ) {
+ $this->error( 4 );
+ }
+
+ $wporg_username = $this->sanitize_text( $_POST['wptv_wporg_username'] );
+ $author_email = $this->sanitize_text( $_POST['wptv_author_email'] );
+
+ if ( empty( $_POST['wptv_language'] ) ) {
+ $this->error( 8 );
+ }
+
+ $language = $_POST['wptv_language'];
+ $available_languages = class_exists( 'VideoPress_Subtitles' ) ? VideoPress_Subtitles::get_languages() : array();
+
+ if ( ! array_key_exists( $language, $available_languages ) ) {
+ $this->error( 7 );
+ }
+
+ $language = $available_languages[ $language ];
+
+ $video_data = function_exists( 'video_get_info_by_blogpostid' ) ? video_get_info_by_blogpostid( get_current_blog_id(), $video_id ) : new StdClass;
+ $video_attachment = get_post( $video_id );
+ if ( empty( $video_data ) || empty( $video_attachment ) ) {
+ wp_die( 'Invalid form data.' );
+ }
+
+ $parent = get_post( $video_attachment->post_parent );
+
+ if ( ! $parent || 'publish' != $parent->post_status ) {
+ wp_die( 'You can not subtitle this video.' );
+ }
+
+ $tracks = class_exists( 'VideoPress_Subtitles' ) ? VideoPress_Subtitles::get_tracks( $video_data->guid ) : array();
+ if ( ! empty( $tracks[ $language['key'] ] ) ) {
+ $this->error( 8 );
+ }
+
+ if ( empty( $_FILES['wptv_subtitles_file']['name'] ) ) {
+ $this->error( 1 );
+ }
+
+ // quick file extension check
+ $name_parts = pathinfo( $_FILES['wptv_subtitles_file']['name'] );
+
+ if ( ! empty( $name_parts['extension'] ) ) {
+ if ( ! in_array( strtolower( $name_parts['extension'] ), array( 'ttml', 'dfxp' ), true ) ) {
+ $this->error( 2 );
+ }
+ } else {
+ $this->error( 3 );
+ }
+
+ // empty the globals just in case
+ $_POST = $_REQUEST = $_GET = array();
+
+ $subs_attachment_id = $this->handle_upload();
+
+ if ( is_wp_error( $subs_attachment_id ) ) {
+ $this->error( 5 );
+ }
+
+ // TODO: needed?? Better to test in $this->handle_upload() and return WP_Error
+ // Link the uploaded attachment
+ /* if ( get_post_mime_type( $subs_attachment_id ) != 'application/ttml+xml' ) {
+ wp_delete_attachment( $subs_attachment_id );
+ $this->error( 2 );
+ }
+ */
+ // TODO: needed??
+ // Not visible on wordpress.tv but is in the HTML source. However 'post_content' is public data.
+ // Used for <meta name="description" and "og:description".
+ $post_content = sprintf( "Uploaded by: %s\nLanguage: %s",
+ $wporg_username,
+ $language['label']
+ );
+
+ wp_update_post( array(
+ 'ID' => $subs_attachment_id,
+ 'post_content' => $post_content,
+ 'post_title' => sprintf( 'Subtitles: %s (%s)', $parent->post_title, $language['label'] ),
+ // 'post_parent' => $parent->ID, // easier to look for unapproved subtitles attachment if they are "unattached"?
+ ) );
+
+ $subs_attachment_meta = array(
+ 'video_attachment_id' => $video_attachment->ID,
+ 'video_post_id' => $parent->ID,
+ 'video_guid' => $video_data->guid,
+ 'submitted_by' => $wporg_username,
+ 'submitted_email' => $author_email,
+ 'language_key' => $language['key'],
+ // 'ip' => $_SERVER['REMOTE_ADDR'], // keep this for ref?
+ );
+
+ update_post_meta( $subs_attachment_id, '_wptv_submitted_subtitles', $subs_attachment_meta );
+
+ /* // TODO: can add this on upload to indicate that there is a file being moderated.
+ // This will block uploads of other files for the same language,
+ // but needs change in VideoPress_Subtitles::get_tracks() in /videopress/subtitles.php
+ // to bypass the trac when 'subtitles_post_id' == 0.
+ // Alternatively can add some meta on the video attachment post.
+ $subtitles = get_post_meta( $video_attachment->ID, '_videopress_subtitles', true );
+ if ( empty( $subtitles ) )
+ $subtitles = array();
+
+ $subtitles[ $language['key'] ] = array(
+ 'language' => $language['key'],
+ 'subtitles_post_id' => 0,
+ 'pending_subtitles_post_id' => $subs_attachment_id,
+ );
+
+ if ( ! update_post_meta( $video_attachment->ID, '_videopress_subtitles', $subtitles ) ) {
+ wp_delete_attachment( $subs_attachment_id );
+ $this->error( 5 );
+ }
+ */
+ // success() redirects to the 'subtitle' page with "Thank you for uploading" message and exits.
+ $this->success();
+ }
+
+ // Runs on 'attachment_fields_to_save' (an attachment post is being saved)
+ function moderate( $post_data ) {
+ if ( empty( $post_data['wptv-subtitles'] ) ) {
+ return $post_data;
+ }
+
+ $approve = ! empty( $post_data['wptv-approve-subtitles'] );
+ $attachment_id = $post_data['ID'];
+
+ $attachment_meta = get_post_meta( $attachment_id, '_wptv_submitted_subtitles', true );
+ if ( empty( $attachment_meta ) ) {
+ wp_die( 'Missing attachment metadata.' ); // Cannot show errors other than die(...)
+ }
+
+ $parent_id = (int) $attachment_meta['video_post_id'];
+ $video_attachment_id = (int) $attachment_meta['video_attachment_id'];
+ $language_key = $attachment_meta['language_key'];
+ $subtitles = $_subtitles = get_post_meta( $video_attachment_id, '_videopress_subtitles', true );
+
+ if ( empty( $subtitles ) ) {
+ $subtitles = array();
+ }
+
+ if ( $approve ) {
+ $subtitles[ $language_key ] = array(
+ 'language' => $language_key,
+ 'subtitles_post_id' => $attachment_id,
+ );
+ // Attach the attachment
+ $post_data['post_parent'] = $parent_id;
+ } else {
+ unset( $subtitles[ $language_key ] );
+ /*
+ $subtitles[ $language_key ] = array(
+ 'language' => $language_key,
+ 'subtitles_post_id' => 0,
+ 'pending_subtitles_post_id' => $attachment_id,
+ );
+ */
+ // Detach the attachment
+ $post_data['post_parent'] = 0;
+ }
+
+ if ( $subtitles != $_subtitles ) {
+ if ( empty( $subtitles ) ) {
+ delete_post_meta( $video_attachment_id, '_videopress_subtitles' );
+ } else {
+ update_post_meta( $video_attachment_id, '_videopress_subtitles', $subtitles );
+ }
+ }
+
+ return $post_data;
+ }
+
+ // Output the HTML for moderation
+ function in_post_edit_form( $attachment_post ) {
+ if ( $attachment_post->post_type != 'attachment' || $attachment_post->post_mime_type != 'application/ttml+xml' ) {
+ return;
+ }
+
+ // Added meta to these existing subtitles posts:
+ // done: 17732,21488,21578,21987,22063,22064,22065,22066,22144,
+ // remain: 17295,17297,22459 // all are tests
+
+ $file_content = file_get_contents( wp_get_attachment_url( $attachment_post->ID ) );
+ if ( ! $file_content ) {
+ echo '<div class="error"><p>ERROR: the attached file doesn\'t exist or is empty.</p></div>';
+
+ return;
+ }
+
+ $attachment_meta = get_post_meta( $attachment_post->ID, '_wptv_submitted_subtitles', true );
+ if ( empty( $attachment_meta ) ) {
+ echo '<div class="error"><p>ERROR: the attachment post metadata is missing.</p></div>';
+
+ return;
+ }
+
+ $is_approved = $another_approved = false;
+ $video_attachment_id = (int) $attachment_meta['video_attachment_id'];
+ $parent_id = (int) $attachment_meta['video_post_id'];
+ $language_key = $attachment_meta['language_key'];
+ $subtitles = get_post_meta( $video_attachment_id, '_videopress_subtitles', true );
+
+ if ( is_array( $subtitles ) && ! empty( $subtitles[ $language_key ]['subtitles_post_id'] ) ) {
+ if ( $subtitles[ $language_key ]['subtitles_post_id'] == $attachment_post->ID ) {
+ $is_approved = true;
+ } else {
+ // Has another approved subtitles file
+ $another_approved = (int) $subtitles[ $language_key ]['subtitles_post_id'];
+ }
+ }
+
+ // Add some line breaks to make it easier to read
+ $file_content = str_replace( array( "\r", '>', '<' ), array( '', ">\n", "\n<" ), $file_content );
+ $file_content = preg_replace( '/\n\n+/', "\n\n", trim( $file_content ) );
+
+ // Replace any urlencoded bits with '?'. Maybe flag this too, there shouldn't be any?
+ $match = array();
+ while ( preg_match( '/%[a-f0-9]{2}/i', $file_content, $match ) ) {
+ $file_content = str_replace( $match[0], '?', $file_content );
+ }
+
+ // Replace any escaped <br/> inside the subtitles strings. Makes it easier to read.
+ $file_content = str_replace( array( '<br />', '<br/>' ), "<br />\n", $file_content );
+
+ $file_content = htmlspecialchars( $file_content, ENT_QUOTES, 'UTF-8' );
+ $file_content = str_replace( "\n", '<br>', $file_content );
+
+ ?>
+ <div id="subs-wrapper">
+ <style type="text/css" scoped="">
+ #subs-wrapper {
+ margin: 20px 0;
+ }
+
+ #subs-content {
+ padding: 10px;
+ border: 1px solid #ccc;
+ margin-top: 0;
+ overflow: auto;
+ max-height: 400px;
+ background-color: #fff;
+ font-family: Consolas, Monaco, monospace;
+ }
+
+ #subs-wrapper .subs-approved {
+ background-color: #f9f9f9;
+ border: 1px solid #dfdfdf;
+ border-radius: 3px;
+ padding: 10px;
+ }
+
+ #subs-wrapper .subs-approved label {
+ font-size: 120%;
+ }
+
+ #subs-wrapper .subs-approved input[type="checkbox"] {
+ margin: 1px 5px;
+ }
+
+ #subs-wrapper .warning {
+ color: #dd0000;
+ }
+ </style>
+ <strong>Content of the subtitles file</strong><br>
+
+ <div id="subs-content"><?php echo $file_content; ?></div>
+
+ <div class="subs-info">
+ <input type="hidden" name="wptv-subtitles" value="1"/>
+
+ <p><a href="<?php echo esc_url( get_permalink( $parent_id ) ); ?>" target="_blank">Preview</a> the video (opens in
+ new tab).</p>
+
+ <p>Submitted by: <a
+ href="http://profiles.wordpress.org/<?php echo esc_attr( $attachment_meta['submitted_by'] ); ?>/"><?php echo esc_html( $attachment_meta['submitted_by'] ); ?></a>,
+ email: <a
+ href="mailto:<?php echo esc_attr( $attachment_meta['submitted_email'] ); ?>"><?php echo esc_html( $attachment_meta['submitted_email'] ); ?></a>
+ </p>
+
+ <p><a href="<?php echo esc_url( get_edit_post_link( $video_attachment_id ) ); ?>">Edit</a> the video attachment
+ post.</p>
+ <?php
+
+ if ( $another_approved ) {
+ ?>
+ <p class="subs-approved">
+ <span class="warning">WARNING:</span> There is <a href="<?php echo esc_url( get_edit_post_link( $another_approved ) ); ?>">another approved subtitles
+ file</a>
+ for this video and language. If you approve the current file, the other will be automatically
+ unapproved.</p>
+ <?php
+ }
+
+ ?>
+ <p class="subs-approved"><label><input type="checkbox"
+ name="wptv-approve-subtitles"<?php echo $is_approved ? ' checked="checked"' : ''; ?> />
+ Approved</label></p>
+ </div>
+ </div>
+ <?php
+ }
+
+ /**
+ * Add "Subtitles (..)" link to the view links on the Media Library screen.
+ *
+ * If post_mime_types in wp_match_mime_types() and
+ * class-wp-media-list-table.php were working well, this would not
+ * be needed.
+ *
+ * @param array $links
+ *
+ * @return array
+ */
+ function views_links( $links ) {
+ $mime_type = 'application/ttml+xml';
+
+ $all_subs = wp_count_attachments( $mime_type );
+ $class = '';
+
+ if ( ! empty( $_GET['post_mime_type'] ) && $mime_type == $_GET['post_mime_type'] ) {
+ $class = ' class="current"';
+ }
+
+ $links['wptv_subs'] = '<a href="upload.php?post_mime_type=' . urlencode( $mime_type ) . '"' . $class . '>Subtitles <span class="count">(' . $all_subs->$mime_type . ')</span></a>';
+
+ return $links;
+ }
+
+ /**
+ * Output "Need moderation" message
+ */
+ function pending_notice() {
+ global $wpdb, $pagenow;
+
+ $where_to_show = array( 'index.php', 'edit.php', 'upload.php' );
+
+ if ( in_array( $pagenow, $where_to_show, true ) ) {
+ $pending_subs = $wpdb->get_var( "SELECT COUNT( 1 ) FROM $wpdb->posts WHERE post_type = 'attachment' AND post_status != 'trash' AND post_parent = 0 AND post_mime_type = 'application/ttml+xml'" );
+
+ if ( $pending_subs ) {
+ echo '<div class="updated"><p><a href="upload.php?post_mime_type=' . urlencode( 'application/ttml+xml' ) .
+ '&detached=1">Subtitles awaiting moderation (' . $pending_subs . ')</a></p></div>';
+ }
+ }
+ }
+
+ /**
+ * Add support fot the subtitles mime type. This should work better in core...
+ *
+ * @param $mime_types
+ *
+ * @return mixed
+ */
+ function post_mime_types( $mime_types ) {
+ $mime_types['application/ttml+xml'] = array(
+ __( 'Subtitles' ),
+ __( 'Manage Subtitles' ),
+ _n_noop( 'Subtitles <span class="count">(%s)</span>', 'Subtitles <span class="count">(%s)</span>' )
+ );
+
+ return $mime_types;
+ }
+
+ /**
+ * Create an error and redirect.
+ *
+ * @param string $message
+ */
+ function error( $message ) {
+ wp_safe_redirect( add_query_arg( array(
+ 'video' => $this->video_id,
+ 'error' => $message,
+ ), home_url( 'subtitle' ) ) );
+ die();
+ }
+
+ /**
+ * Redirect to a success page.
+ */
+ function success() {
+ wp_safe_redirect( add_query_arg( array(
+ 'video' => $this->video_id,
+ 'success' => 1,
+ ), home_url( 'subtitle' ) ) );
+ exit;
+ }
+
+ // expects slashed, returns unslashed
+ function sanitize_text( $str, $remove_line_breaks = true ) {
+ $str = str_replace( '\\', '', $str );
+
+ if ( $remove_line_breaks ) {
+ $str = sanitize_text_field( $str );
+ } else {
+ $str = wp_check_invalid_utf8( $str );
+ $str = wp_strip_all_tags( $str );
+
+ $match = array();
+ while ( preg_match( '/%[a-f0-9]{2}/i', $str, $match ) ) {
+ $str = str_replace( $match[0], '', $str );
+ }
+ }
+
+ return htmlspecialchars( $str, ENT_QUOTES, 'UTF-8' );
+ }
+}
+
+new WordPressTV_Subtitles_Upload;
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2searchphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/search.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/search.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/search.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,11 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+global $wp_query;
+
+// See improved improved (yes, improved twice) search.
+/*if ( $wp_query->is_search() ) {
+ $query = wptv_search_taxonomies( $wp_query->query_vars['s'] );
+ $wp_query->posts = array_merge( $wp_query->posts, $query->posts );
+ $wp_query->post_count = count( $wp_query->posts );
+}*/
+
+get_template_part( 'archive' );
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebareventphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-event.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-event.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-event.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,5 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<div class="secondary-content">
+ <ul>
+ <?php dynamic_sidebar(); ?>
+ </ul>
+</div>
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarsinglephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-single.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-single.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-single.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,85 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php global $wptv, $originalcontent; ?>
+
+<div class="secondary-content video-info">
+ <h5>Published</h5>
+ <p class="video-date"><?php echo get_the_date(); ?></p>
+
+ <?php if ( $post->post_excerpt ) : ?>
+ <div class="video-description"><?php the_excerpt(); ?></div>
+ <?php
+ endif;
+
+ $wptv->the_terms( 'event', '<h5>Event</h5><p class="video-event">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'speakers', '<h5>Speakers</h5><p class="video-speakers">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'post_tag', '<h5>Tags</h5><p class="video-tags">', '<br /> ', '</p>' );
+ $wptv->the_terms( 'language', '<h5>Language</h5><p class="video-lang">', '<br /> ', '</p>' );
+
+ if ( function_exists( 'find_all_videopress_shortcodes' ) ) {
+ $videos = array_keys( find_all_videopress_shortcodes( $originalcontent ) );
+ if ( ! empty( $videos ) ) {
+ $video = video_get_info_by_guid( $videos[0] );
+ $formats = array( 'fmt_std' => 'Low', 'fmt_dvd' => 'Med', 'fmt_hd' => 'High', 'fmt1_ogg' => 'Low' );
+ $mp4_links = array();
+ $ogg_link = NULL;
+ foreach ( $formats as $format => $name ) {
+ if ( 'fmt1_ogg' == $format ) {
+ $link = video_highest_resolution_ogg( $video );
+ } else {
+ $link = video_url_by_format( $video, $format );
+ }
+
+ if ( empty( $link ) ) {
+ continue;
+ }
+
+ if ( 'fmt1_ogg' == $format ) {
+ $ogg_link = "<a href='$link'>$name</a>";
+ } else {
+ $mp4_links[] = "<a href='$link'>$name</a>";
+ }
+ }
+
+ if ( ! empty( $mp4_links ) || ! empty( $ogg_link ) ) {
+?>
+ <h5>Download</h5>
+ <div class="video-downloads">
+<?php
+ if ( ! empty( $mp4_links ) ) {
+ echo 'MP4: ' . join( ', ', $mp4_links ) . '<br/>';
+ }
+ if ( ! empty( $ogg_link ) ) {
+ echo "OGG: $ogg_link";
+ }
+?>
+ </div>
+<?php
+ }
+
+ echo '<h5>Subtitles</h5>';
+ $ttml_links = array();
+ $languages = VideoPress_Subtitles::get_languages();
+ $subtitles = (array) get_post_meta( $video->post_id, '_videopress_subtitles', true );
+
+ foreach ( $subtitles as $track ) {
+ if ( empty( $track['subtitles_post_id'] ) ) {
+ continue;
+ }
+
+ $tracks[ $track['language'] ] = new VideoPress_Subtitles_Track( array(
+ 'guid' => $video->guid,
+ 'language' => $track['language'],
+ 'subtitles_post_id' => $track['subtitles_post_id'],
+ ) );
+
+ $ttml_links[] = '<a href="'. $tracks[ $track['language'] ]->url() .'">'. $languages[ $track['language'] ]['localized_label'] .'</a>';
+ }
+
+ if ( ! empty( $ttml_links ) ) {
+ echo 'TTML: ' . join( ', ', $ttml_links ) . '<br />';
+ }
+
+ printf( '<a href="%s">Subtitle this video →</a>', esc_url( add_query_arg( 'video', $video->post_id, home_url( 'subtitle/' ) ) ) );
+ }
+ }
+ ?>
+</div><!-- .secondary-content -->
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarwordcamptvphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-wordcamptv.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-wordcamptv.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar-wordcamptv.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,5 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<div class="secondary-content">
+ <ul>
+ <?php dynamic_sidebar( 'WordCampTV Sidebar' ); ?>
+ </ul>
+</div>
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2sidebarphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/sidebar.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,35 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<div class="secondary-content">
+ <ul>
+ <li>
+ <h3><a href="http://blog.wordpress.tv"><?php esc_html_e( 'From the Blog', 'wptv' ); ?></a></h3>
+ <ul>
+ <?php
+ // Make it easier to contribute to this theme by not assuming multisite context.
+ if ( function_exists( 'switch_to_blog' ) ) {
+ switch_to_blog( 5310177 ); // blog.wordpress.tv
+ }
+
+ query_posts( 'posts_per_page=5' );
+
+ while ( have_posts() ) :
+ the_post();
+ ?>
+ <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
+ <?php
+ endwhile;
+
+ if ( function_exists( 'restore_current_blog' ) ) {
+ restore_current_blog();
+ }
+ ?>
+ </ul>
+ </li>
+ <li>
+ <h3><?php esc_html_e( 'Resources', 'wptv' ); ?></h3>
+
+ <ul>
+ <?php wp_list_bookmarks( 'title_li=&categorize=0' ); ?>
+ </ul>
+ </li>
+ <ul/>
+</div><!-- .secondary_content -->
</ins><span class="cx" style="display: block; padding: 0 10px">\ No newline at end of file
</span></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2singlephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/single.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/single.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/single.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,32 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Single Video Template
+ */
+global $wptv, $originalcontent;
+get_header(); the_post();
+?>
+<div class="wptv-hero group">
+ <div class="container">
+
+ <?php get_template_part( 'breadcrumbs' ); ?>
+ <h2 class="video-title"><?php the_title(); ?></h2>
+
+ <div class="the-video">
+ <?php $wptv->the_video(); ?>
+ </div>
+
+ </div><!-- .container -->
+</div><!-- .wptv-hero -->
+
+<div class="container">
+ <div class="primary-content">
+ <div id="content">
+ <div id="comments">
+ <?php comments_template(); ?>
+ </div>
+ </div><!-- #content -->
+ </div><!-- .primary-content -->
+ <?php get_sidebar( 'single' ); ?>
+</div><!-- .container -->
+
+<?php get_footer(); ?>
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2stylecss"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/style.css</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/style.css (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/style.css 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,2598 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+/*
+Theme Name: WordPress.tv v2
+Theme URI: http://wordpress.tv
+Description: WordPress.tv v2 Theme
+Version: 2.0
+Author: Automattic
+Author URI: http://automattic.com/
+*/
+
+/* meyerweb.com/eric/thoughts/2007/05/01/reset-reloaded/ */
+html, body, div, span, applet, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, big, cite, code,
+del, dfn, em, font, img, ins, kbd, q, s, samp,
+small, strike, strong, sub, sup, tt, var,
+dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+ outline: 0;
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+
+/* remember to define focus styles! */
+:focus {
+ outline: 0;
+}
+
+body {
+ line-height: 1;
+ color: black;
+ background: white;
+}
+
+ol, ul {
+ list-style: none;
+}
+
+/* tables still need 'cellspacing="0"' in the markup */
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+}
+
+caption, th, td {
+ text-align: left;
+ font-weight: normal;
+}
+
+blockquote:before, blockquote:after,
+q:before, q:after {
+ content: "";
+}
+
+blockquote, q {
+ quotes: "" "";
+}
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+table {
+ border-collapse: separate;
+ border-spacing: 0;
+}
+
+caption, th, td {
+ text-align: left;
+ font-weight: 400;
+}
+
+/* Remove possible quote marks (") from <q>,<blockquote>. */
+blockquote:before, blockquote:after, q:before, q:after {
+ content: "";
+}
+
+blockquote, q {
+ quotes: "" "";
+}
+
+a img {
+ border: none;
+}
+
+/* Contain floats */
+.group:before, .group:after {
+ content: "";
+ display: table;
+}
+
+.group:after {
+ clear: both;
+}
+
+.group {
+ *zoom: 1;
+}
+
+/*************************************/
+
+/* Defaults */
+body {
+ font-size: 75%; /* 16px * 0.75 = 12px */
+ line-height: 1.5em; /* 12x1.5 = 16 */
+ font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+ background: #fff;
+ color: #444;
+}
+
+.group:after {
+ content: ".";
+ display: block;
+ height: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+.clear {
+ clear: both;
+}
+
+a, a:link, a:visited {
+ color: #21759b;
+ text-decoration: none;
+}
+
+a:hover, a:active {
+ color: #d54e21;
+}
+
+em, cite {
+ font-style: italic;
+}
+
+strong {
+ font-weight: bold;
+}
+
+h1, h2, h3, h4, h5, h6 {
+ font-weight: normal;
+}
+
+p, pre, dl, ul, ol {
+}
+
+table, td, th, tr, thead, tbody, tfoot {
+}
+
+dd, dt, li {
+}
+
+blockquote {
+}
+
+form, fieldset, address {
+}
+
+/* Utility */
+.highlite, blockquote em {
+ background-color: #FFFCCE;
+}
+
+.none {
+ text-indent: -1000em;
+}
+
+/* Alignment */
+.alignleft, .alignright, .align-left, .align-right {
+}
+
+.alignright, .align-right, .inset {
+ float: right;
+}
+
+.alignleft, .align-left, .alternate {
+ float: left;
+}
+
+.aligncenter, .align-center {
+ margin: 0 auto;
+ text-align: center;
+}
+
+.text-left {
+ text-align: left;
+}
+
+.text-right {
+ text-align: right;
+}
+
+/* Figures & images */
+.image {
+}
+
+.figure {
+}
+
+.figure .caption {
+}
+
+/* Structure */
+#page {
+}
+
+#header {
+ margin-top: 10px;
+ height: 57px;
+}
+
+#header h1 {
+ padding-top: 8px;
+ float: left;
+}
+
+#header .sleeve {
+ width: 942px;
+ margin: 0 auto;
+}
+
+#menu ul {
+ float: right;
+ height: 57px;;
+}
+
+#menu li {
+ float: left;
+ display: block;
+ margin-left: 10px;
+ line-height: 57px;
+}
+
+#menu li a, #menu li a:link, #menu li a:visited {
+ padding: 5px;
+ color: #555;
+ text-decoration: none;
+ border: 0;
+}
+
+#menu li a:hover, #menu li a:active {
+ color: #21759b !important;
+}
+
+#menu .current-menu-item > a,
+#menu .current-menu-ancestor > a,
+#menu .current_page_item > a,
+#menu .current_page_ancestor > a {
+ font-weight: bold;
+ color: #000 !important;
+}
+
+#searchform {
+ float: right;
+ margin-left: 15px;
+}
+
+#searchform #searchbox,
+#searchform input#s {
+ box-sizing: content-box;
+ color: #AAAAAA;
+ float: left;
+ margin-right: 6px;
+ background: white;
+ border: 1px solid #ccc;
+ padding: 5px 6px;
+ margin-right: 3px;
+ -webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+ vertical-align: middle;
+ height: 15px;
+ line-height: 1;
+ width: 130px;
+}
+
+#searchform #searchbox {
+ margin-top: 15px;
+}
+
+input[type=submit], button, .button {
+ text-decoration: none;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #ccc;
+ border-bottom-color: #aaa;
+ border-right-color: #aaa;
+ background: #f5f5f5;
+ background: -webkit-gradient(linear, left top, left bottom, from(#f7f7f7), to(#e1e1e1));
+ background: -moz-linear-gradient(top, #f7f7f7, #e1e1e1);
+ padding: 4px 8px;
+ font-size: 12px;
+ font-weight: 400;
+ color: #555 !important;
+ text-shadow: 0 1px 0 #fff;
+ -webkit-transition: all 0.25s ease-in-out;
+ -moz-transition: all 0.25s ease-in-out;
+ -o-transition: all 0.25s ease-in-out;
+ transition: all 0.25s ease-in-out;
+ -webkit-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.7), 1px 1px 1px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.7), 1px 1px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 1px 1px 1px rgba(255, 255, 255, 0.7), 1px 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+input[type=submit]:hover, button:hover, .button:hover, input[type=submit]:focus, button:focus, .button:focus {
+ cursor: pointer;
+ color: #000 !important;
+ text-decoration: none;
+ border: 1px solid #bbb;
+ border-bottom-color: #888;
+ border-right-color: #888;
+ -webkit-box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 1), 1px 1px 1px rgba(0, 0, 0, 0.2);
+ -moz-box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 1), 1px 1px 1px rgba(0, 0, 0, 0.2);
+ box-shadow: inset 1px 1px 2px rgba(255, 255, 255, 1), 1px 1px 1px rgba(0, 0, 0, 0.2);
+ -webkit-transition: all 0.25s ease-in-out;
+ -moz-transition: all 0.25s ease-in-out;
+ -o-transition: all 0.25s ease-in-out;
+ transition: all 0.25s ease-in-out;
+}
+
+input[type=submit]:active, button:active, .button:active {
+ background: #ccc;
+ background: -webkit-gradient(linear, left top, left bottom, from(#bbb), to(#ddd));
+ background: -moz-linear-gradient(top, #bbb, #ddd);
+ -webkit-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.7), 0 0 0 rgba(0, 0, 0, 0);
+ -moz-box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.7), 0 0 0 rgba(0, 0, 0, 0);
+ box-shadow: inset 0 0 4px rgba(0, 0, 0, 0.7), 0 0 0 rgba(0, 0, 0, 0);
+}
+
+.disabled:hover {
+ -moz-box-shadow: none;
+ -webkit-box-shadow: none;
+ box-shadow: none;
+ border-color: #ccc;
+ cursor: default;
+}
+
+.disabled:active {
+ background: #e3e3e3 url(/images/button-light.png) top left repeat-x;
+ background: -webkit-gradient(
+ linear,
+ left top,
+ left bottom,
+ color-stop(0.0, #fff),
+ color-stop(1, #eee)
+ );
+ background: -moz-linear-gradient(
+ center top,
+ #fff 0%,
+ #eee 100%
+ );
+}
+
+.intro {
+ font-size: 30px;
+ height: 64px;
+ line-height: 64px;
+ margin-bottom: 12px;
+ margin-left: 5px;
+ font-family: Georgia, "Times New Roman", Times, serif;
+ text-align: center;
+ color: #666;
+ text-shadow: #fff 0px 1px 0px;
+}
+
+.intro em {
+ font-style: italic;
+ font-variant: normal;
+ text-shadow: #eee 0px 0px 1px;
+ letter-spacing: normal;
+}
+
+/* News */
+
+.blog #content {
+ width: 704px;
+ float: left;
+ margin-bottom: 30px;
+ padding-top: 20px;
+}
+
+.blog .post h3 .post-author {
+ display: block;
+
+ font-size: 12px;
+ font-weight: normal;
+
+ color: #888;
+ margin: 5px 0;
+}
+
+.blog .post .entry {
+ float: left;
+ width: 558px;
+ padding-left: 0;
+ margin: 0 0 30px 0;
+}
+
+.entry p {
+ margin: 0 0 20px 0
+}
+
+.blog .post .excerpt {
+ width: 600px;
+}
+
+.blog .post .entry .sleeve {
+ padding-left: 10px;
+ border-left: 1px solid #ddd;
+ padding-right: 10px;
+ border-right: 1px solid #ddd;
+}
+
+.blog .post .wpcom-author {
+ float: left;
+ text-align: center;
+ width: 56px;
+ padding-right: 30px;
+ margin-right: -1px;
+}
+
+.blog .post #wpcom-author {
+ float: left;
+ text-align: center;
+ width: 136px;
+}
+
+.blog .post #wpcom-author, .blog .wpcom-author {
+ padding-right: 30px;
+ margin-right: -1px;
+}
+
+.single .postmetadata {
+ border-top: 1px solid #F1F1F1;
+ clear: both;
+ color: #999999;
+ font-size: 9px;
+ margin: 20px 0 0 0;
+ padding: 15px 0 5px 0;
+ text-align: left;
+}
+
+.blog .post #wpcom-author .postmetadata p {
+ text-align: left;
+ margin-bottom: 10px;
+}
+
+.blog .post #wpcom-author .avatar, .blog .post .wpcom-author .avatar {
+ float: none;
+ margin: 0 auto;
+ padding: 0;
+}
+
+.blog .post #wpcom-author .avatar img, .blog .post .wpcom-author .avatar img {
+ padding: 3px;
+ border: 1px solid #ddd;
+}
+
+.blog .primary-content {
+ margin: -20px 0 0 0;
+}
+
+.blog #sidebar {
+ width: 227px;
+ float: left;
+ margin-left: -1px;
+}
+
+#sidebar #search {
+ clear: both;
+ height: 30px;
+}
+
+#sidebar #s {
+ width: 130px;
+ margin-right: 5px;
+ float: left;
+}
+
+#sidebar #searchsubmit {
+ margin-top: 0;
+}
+
+#sidebar .sleeve {
+ padding-left: 10px;
+ border-left: 1px solid #ddd;
+ margin-top: 40px;
+ margin-bottom: 20px;
+ text-align: left;
+}
+
+.excerpt .sleeve {
+ padding-bottom: 20px;
+}
+
+.excerpt .postmetadata {
+ font-style: italic;
+ font-size: 9px;
+ margin-bottom: 10px;
+}
+
+.page p, .blog p {
+ margin-bottom: 1em;
+ line-height: 1.5em;
+}
+
+.blog #comments textarea {
+ width: 90%;
+}
+
+/* .blog h3 {
+margin-right: 10px;
+font-size: 18px !important;
+font-family: Georgia,"Times New Roman",Times,serif !important;
+margin-bottom: 10px !important;
+padding-top: 18px !important;
+padding-bottom: 3px !important;
+border-bottom: 1px solid #ddd !important;
+padding-left: 5px !important;
+}
+.blog h3 small {
+font-size: 14px;
+}
+
+.blog p, .blog object {
+margin-bottom: 18px;
+} */
+
+/* Captions */
+.aligncenter,
+div.aligncenter {
+ display: block;
+ margin-left: auto;
+ margin-right: auto;
+}
+
+.wp-caption {
+ border: 1px solid #ddd;
+ text-align: center;
+ background-color: #f3f3f3;
+ padding-top: 4px;
+ margin: 10px;
+ -moz-border-radius: 3px;
+ -khtml-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ border-radius: 3px;
+}
+
+.wp-caption img {
+ margin: 0;
+ padding: 0;
+ border: 0 none;
+}
+
+.wp-caption p.wp-caption-text {
+ font-size: 11px;
+ line-height: 17px;
+ padding: 0 4px 5px;
+ margin: 0;
+}
+
+.tools h3 {
+
+}
+
+.tools p {
+ margin-bottom: 18px;
+ padding-left: 5px;
+}
+
+/* Title */
+
+.title h2 {
+ color: #000;
+ text-align: left;
+ margin-bottom: 10px;
+ font-size: 32px;
+ line-height: 1.1em;
+ font-family: Georgia, serif;
+}
+
+.title h2 a {
+ font-size: 18px;
+ line-height: 18px;
+ font-size: 16px;
+ font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+}
+
+.title h2 a, .title h2 a:link, .title h2 a:visited {
+ color: #21759b;
+}
+
+.title h2 a:hover, .title h2 a:active {
+}
+
+.title h2.pagetitle {
+ margin-top: 20px;
+ text-align: left;
+}
+
+.title .sleeve {
+ width: 937px;
+ margin: 0 auto;
+}
+
+.title .desc,
+.title.group h2.pagetitle {
+ color: #000;
+ font-family: Georgia, serif;
+ font-size: 32px;
+ line-height: 1.1;
+ margin-bottom: 10px;
+}
+
+.home .title {
+ padding: 5px 0;
+ height: 50px;
+}
+
+.home .desc {
+ float: none;
+ margin-left: 10px;
+ line-height: 50px;
+ color: #31ade5;
+ clear: both;
+}
+
+div.desc p {
+ font-size: 16px;
+ color: #666;
+}
+
+/* Video Wrapper */
+
+.videowrapper {
+ clear: both;
+
+ margin: 10px auto 14px auto;
+ padding-bottom: 4px;
+
+ background: #F0F0F0;
+ border: 1px #E2E2E2 solid;
+
+ box-shadow: inset 0 0 0 1px #fcfcfc;
+ -webkit-box-shadow: inset 0 0 0 1px #fcfcfc;
+ -moz-box-shadow: inset 0 0 0 1px #fcfcfc;
+}
+
+.blog .videowrapper {
+ height: 1px;
+ padding: 0;
+ margin: 0;
+}
+
+.videowrapper a, .videowrapper a:link, .videowrapper a:visited {
+ color: #f7f7f7;
+}
+
+.videowrapper a:hover, .videowrapper a:active {
+ color: #d54e21;
+}
+
+.videowrapper .sleeve {
+ width: 937px;
+ margin: 0 auto;
+ text-align: left;
+}
+
+.videowrapper .meta {
+ color: #333;
+ margin-top: -10px;
+ padding-bottom: 22px;
+ font-size: 10px;
+}
+
+h2.featured {
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ font-size: 9px;
+ width: 100%;
+ color: #444;
+ padding-left: 5px;
+ margin-bottom: 5px;
+}
+
+.secondcolumn h2.featured {
+ font-size: 18px;
+ line-height: 1.2em;
+ text-transform: none;
+ font-family: Georgia;
+ letter-spacing: 0;
+ font-style: italic;
+}
+
+.sharedaddy * {
+ color: #666;
+ font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif !important;
+}
+
+.video-player {
+ padding: 0 !important;
+ margin-top: 19px !important;
+ margin-bottom: 10px !important;
+}
+
+.videopress-placeholder {
+ margin-top: 65px;
+ margin-bottom: 0;
+}
+
+.videopress-placeholder div img {
+ display: none;
+}
+
+.thevideo {
+ float: left;
+ width: 648px;
+ text-align: center;
+ margin: 10px 0 6px 0;
+ position: relative;
+ overflow: hidden;
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ -khtml-border-radius: 6px;
+ border-radius: 6px;
+}
+
+.thevideo .avideo {
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ -khtml-border-radius: 6px;
+ border-radius: 6px;
+ position: relative;
+ bottom: 0;
+ background-position: top center;
+ background-repeat: no-repeat;
+
+}
+
+.thevideo img {
+ position: absolute;
+ bottom: 6px;
+ left: 0;
+}
+
+img.videothumb {
+ width: 100%;
+}
+
+.home .thevideo, .category .thevideo, .category .thevideo .avideo {
+ height: 350px;
+}
+
+.home .thevideo {
+ margin-bottom: 0;
+}
+
+.home .title {
+ margin-bottom: 0px;
+}
+
+#rotate {
+ width: 648px;
+ float: left;
+}
+
+#rotate.ui-tabs {
+ padding: 0;
+}
+
+#rotate .ui-tabs-panel {
+ margin: 0;
+ padding: 0;
+}
+
+#rotate .ui-tabs-nav {
+ text-align: center;
+ margin: 0 auto;
+ width: 150px;
+ padding: 0;
+}
+
+#rotate .ui-tabs-nav li {
+ display: inline;
+ float: none;
+ margin: 0;
+ padding: 0;
+ width: 30px;
+ text-align: center;
+}
+
+#rotate .ui-tabs-nav a {
+ display: block;
+ float: left;
+ width: 30px;
+ text-align: center;
+ padding: 10px 0;
+}
+
+#rotate .ui-tabs-nav a span {
+ display: block;
+ width: 30px;
+ text-align: center;
+ background: 0;
+ font-size: 30px;
+ padding: 0;
+ margin: 0;
+}
+
+#rotate .ui-tabs-selected,
+#rotate .ui-tabs-selected a {
+ color: #d54e21;
+ cursor: pointer;
+}
+
+.thevideo h3 {
+ position: absolute;
+ bottom: 0px;
+ left: 0px;
+ padding: 20px 0;
+ font-size: 20px;
+ line-height: 1.3em;
+ width: 100%;
+ text-align: center;
+ background: #000;
+ -webkit-border-bottom-left-radius: 6px;
+ -webkit-border-bottom-right-radius: 6px;
+ -moz-border-radius-bottomleft: 6px;
+ -moz-border-radius-bottomright: 6px;
+ -khtml-border-bottom-left-radius: 6px;
+ -khtml-border-bottom-right-radius: 6px;
+ border-bottom-left-radius: 6px;
+ border-bottom-right-radius: 6px;
+}
+
+.ui-tabs h3 a {
+ text-align: center;
+ color: white;
+ padding: 0 3px;
+ display: block;
+ width: 100%;
+}
+
+.ui-tabs h3 a, .ui-tabs h3 a:link, .ui-tabs h3 a:visited {
+ color: white;
+}
+
+.ui-tabs h3 a:hover, .ui-tabs h3 a:active {
+}
+
+.thevideo .ui-tabs-panel {
+ height: 350px;
+ overflow: hidden;
+ position: relative;
+}
+
+.thevideo a.hiddenpanel {
+ position: absolute;
+ z-index: 1000;
+ text-indent: -1000em;
+ height: 350px;
+ width: auto;
+ display: block;
+ width: 100%;
+}
+
+.supplementvideos {
+ float: left;
+ width: 279px;
+ margin-left: 10px;
+ text-align: center;
+ position: relative;
+ padding: 10px 0 0 0;
+ margin-bottom: -4px;
+}
+
+.supplementvideos img {
+ width: 279px;
+}
+
+.videofeatured {
+ margin-bottom: 14px;
+ position: relative;
+}
+
+.thirds .videofeatured {
+ width: 305px;
+ float: left;
+ margin-left: 10px;
+}
+
+.videofeatured h3 {
+ text-align: left
+}
+
+.supplementvideos .videofeatured h3 a {
+ padding: 0 5px;
+ color: #21759b;
+}
+
+.supplementvideos .videofeatured img,
+.supplementvideos .videofeatured embed {
+ width: 135px;
+ height: auto;
+ float: left;
+}
+
+.thirds .videofeatured img {
+ width: 305px;
+ bottom: 5px;
+ top: auto;
+}
+
+/* this holds the video and allows it to hide parts of the video that overflow */
+.videofeaturedcontainer {
+ position: relative;
+ height: 165px;
+ overflow: hidden;
+ border-radius: 6px;
+ -webkit-border-radius: 6px;
+ -khtml-border-radius: 6px;
+ -moz-border-radius: 6px;
+}
+
+/* fake link overlay */
+.videofeaturedcontainer .arrow {
+ display: block;
+ z-index: 1000;
+ position: absolute;
+ height: 169px;
+ width: 284px;
+ text-indent: -1000em;
+}
+
+.thirds .videofeaturedcontainer .arrow {
+ width: 305px;
+}
+
+/* add this css class if you want to show the arrow */
+.showarrow {
+ background: url(./i/arrow.png) no-repeat center center;
+}
+
+.thevideo .ui-tabs a:hover span {
+ background-color: none !important;
+}
+
+.thevideo .showarrow {
+ display: block;
+ z-index: 1000;
+ position: absolute;
+ height: 50px;
+ width: 100%;
+ top: 50%;
+ margin-top: -50px;
+ text-indent: -1000em;
+}
+
+.thevideotabs {
+ float: left;
+ width: 279px;
+ margin-left: 10px;
+ color: #ccc;
+ margin-top: 10px;
+ height: 100%;
+ overflow: auto;
+}
+
+.thevideotabs .sd-rating {
+ display: none;
+}
+
+div.sharedaddy.sd-rating-enabled .sd-like .post-likes-widget, div.sharedaddy.sd-sharing-enabled .sd-like .post-likes-widget {
+ width: 100% !important;
+}
+
+.thevideotabs h4 {
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ font-size: 9px;
+ color: #ccc;
+}
+
+.thevideotabs p {
+ margin-bottom: 10px;
+ color: #bbb;
+}
+
+#related {
+ width: 284px;
+ float: right;
+ margin-top: 10px;
+}
+
+#related ul a {
+ width: 274px;
+}
+
+.listedthumbs ul {
+ margin-bottom: 15px;
+}
+
+.listedthumbs ul span {
+ float: right;
+ height: 40px;
+ width: 40px;
+ overflow: hidden;
+ margin-left: 4px;
+ border: 1px solid #ccc;
+}
+
+.listedthumbs ul li {
+ font-size: 13px;
+ letter-spacing: -0.04em;
+ clear: both;
+ min-height: 40px;
+ padding-bottom: 10px;
+ padding-top: 5px;
+ border-bottom: 1px solid #dfdfdf;
+ border-top: 1px solid #fff;
+ padding-left: 5px;
+}
+
+.listedthumbs ul li:last-child {
+ border-bottom: none;
+}
+
+.listedthumbs ul a, .listedthumbs ul a:link, .listedthumbs ul a:visited {
+ position: relative;
+ z-index: 1000;
+ display: block;
+ width: 228px;
+}
+
+.home .listedthumbs ul a {
+ width: 289px;
+}
+
+.listedthumbs ul span {
+ position: relative;
+}
+
+.listedthumbs ul span img {
+ height: 50px;
+}
+
+.listedthumbs ul span embed {
+ z-index: 999;
+ position: absolute;
+ top: -100px;
+ left: -100px;
+}
+
+.listedthumbs .list {
+ padding-top: 0;
+}
+
+.listedthumbs .list li:last-child {
+ border-bottom: none;
+}
+
+/* Tabs for related stuffs */
+/* Caution! Ensure accessibility in print and other media types... */
+@media projection, screen {
+ /* Use class for showing/hiding tab content, so that visibility can be better controlled in different media types... */
+ .ui-tabs-hide {
+ display: none !important;
+ }
+}
+
+/* Hide useless elements in print layouts... */
+@media print {
+ .ui-tabs {
+ display: none;
+ }
+}
+
+/* Skin */
+.ui-tabs, .ui-tabs-panel {
+ font-size: 12px;
+}
+
+.ui-tabs {
+ list-style: none;
+ margin: 0;
+ padding: 0 0 0 3px;
+}
+
+.ui-tabs:after {
+ /* clearing without presentational markup, IE gets extra treatment */
+ display: block;
+ clear: both;
+ content: " ";
+}
+
+.ui-tabs li {
+ float: left;
+ margin: 0 0 0 2px;
+}
+
+.ui-tabs a, .ui-tabs a span {
+ float: left; /* fixes dir=ltr problem and other quirks IE */
+ padding: 0;
+}
+
+.ui-tabs a {
+ text-decoration: none;
+ white-space: nowrap; /* @ IE 6 */
+ outline: 0; /* @ Firefox, prevent dotted border after click */
+}
+
+.ui-tabs a:link, .ui-tabs a:visited {
+ color: #555;
+}
+
+.ui-tabs .ui-tabs-selected a {
+ position: relative;
+ top: 0px;
+ z-index: 2;
+ margin-top: 0;
+ color: #31ade5;
+}
+
+.ui-tabs a span {
+ /*border-radius-topright: .4em;
+ -webkit-border-radius-topright: .4em;
+ -moz-border-radius-topright: .4em;
+ border-radius-topleft: .4em;
+ -webkit-border-radius-topleft: .4em;
+ -moz-border-radius-topleft: .4em;
+ background: #444;*/
+ padding: 2px 5px;
+
+ text-transform: uppercase;
+ letter-spacing: 0.2em;
+ font-size: 9px;
+}
+
+.ui-tabs a:hover span {
+
+}
+
+.ui-tabs .ui-tabs-selected a span {
+ /*background: #333; */
+ cursor: pointer;
+}
+
+.ui-tabs .ui-tabs-selected a:link, .ui-tabs .ui-tabs-selected a:visited,
+.ui-tabs .ui-tabs-disabled a:link, .ui-tabs .ui-tabs-disabled a:visited {
+ /* @ Opera, use pseudo classes otherwise it confuses cursor... */
+ cursor: text;
+}
+
+.ui-tabs a:hover, .ui-tabs a:focus, .ui-tabs a:active,
+.ui-tabs .ui-tabs-unselect a:hover, .ui-tabs .ui-tabs-unselect a:focus, .ui-tabs .ui-tabs-unselect a:active {
+ /* @ Opera, we need to be explicit again here now... */
+ cursor: pointer;
+}
+
+.ui-tabs a:hover {
+ color: #d54e21;
+ cursor: pointer;
+}
+
+.ui-tabs-disabled {
+ opacity: .4;
+}
+
+.ui-tabs .ui-tabs-disabled a:link, .ui-tabs .ui-tabs-disabled a:visited {
+ color: #000;
+}
+
+.ui-tabs-panel {
+ padding: 10px;
+}
+
+/*.ui-tabs-loading em {
+ padding: 0 0 0 20px;
+ background: url(loading.gif) no-repeat 0 50%;
+}*/
+
+/* Additional IE specific bug fixes... */
+* html .ui-tabs {
+ /* auto clear @ IE 6 & IE 7 Quirks Mode */
+ display: inline-block;
+}
+
+*:first-child + html .ui-tabs {
+ /* auto clear @ IE 7 Standards Mode - do not group selectors, otherwise IE 6 will ignore complete rule (because of the unknown + combinator)... */
+ display: inline-block;
+}
+
+/* Wrap for main content */
+#wrap {
+ width: 937px;
+ margin: 0 auto 30px auto;
+}
+
+.searchwrap,
+.searchwordcamptv {
+ margin-bottom: 0em;
+}
+
+.languagewrap {
+ padding: 5px 10px;
+ margin-bottom: 2em;
+ border-radius: .4em;
+ -webkit-border-radius: .4em;
+ -moz-border-radius: .4em;
+ border: 1px solid #DFDFDF;
+ height: 2em;
+ position: relative;
+ background: #e8e8e8;
+}
+
+.searchwrap {
+ margin-top: 10px;
+ height: 2em;
+ margin-bottom: -2em;
+ position: relative;
+}
+
+.searchwrap form {
+ margin-bottom: -2em;
+}
+
+.searchwordcamptv form #wordcampsubmit,
+#setlanguage input {
+ background: #ccc;
+ border: 1px solid #888;
+ color: #666;
+ -moz-border-radius-bottomleft: 3px;
+ -moz-border-radius-bottomright: 3px;
+ -moz-border-radius-topleft: 3px;
+ -moz-border-radius-topright: 3px;
+ -webkit-border-radius: 3px;
+ cursor: pointer;
+ font-size: 10px;
+ height: 20px;
+ padding: 0 4px;
+}
+
+.searchwordcamptv form #wordcampsubmit:hover {
+ background: #B3B3B3;
+ color: #f7f7f7;
+}
+
+.searchwordcamptv #setlanguage {
+ margin-top: -20px;
+}
+
+#setlanguage select,
+.searchwordcamptv form select {
+ margin-right: 15px;
+}
+
+.image a {
+ background: url(./i/arrow.png) no-repeat 50% 50%;
+}
+
+#setlanguage {
+ float: right;
+ height: 2em;
+}
+
+.searchwordcamptv #setlanguage {
+ bottom: 10px;
+ top: auto;
+}
+
+#setlanguage input, #setlanguage select, #setlanguage p {
+ display: block;
+ float: left;
+}
+
+/* list for below content */
+
+/* this holds .linklist divs that have uls */
+.linklists {
+ width: 769px;
+ margin-left: -20px;
+}
+
+.secondcolumn {
+ margin-left: 20px;
+ float: left;
+ width: 739px;
+}
+
+.submenu {
+ width: 177px;
+ float: left;
+}
+
+.submenu .selected {
+ background: #f7f7f7;
+}
+
+.submenu ul {
+ margin-bottom: 20px;
+ border-top: 1px solid #ddd;
+ border-bottom: 1px solid #f5f5f5;
+}
+
+.submenu ul li a {
+ display: block;
+ height: 25px;
+ padding: 0 5px;
+ line-height: 25px;
+ border-bottom: 1px solid #ddd;
+ border-top: 1px solid #f5f5f5;
+
+}
+
+.home .linklists, .full {
+ float: none;
+ width: 967px;
+ margin-left: -20px;
+}
+
+/* to wrap around each list */
+.linklist {
+ width: 33%;
+ float: left;
+}
+
+.linklist ul {
+ border-top: 1px solid #ddd;
+ padding-top: 5px;
+}
+
+.linklist li {
+ font-size: 14px;
+ padding-bottom: 15px;
+ padding-left: 5px;
+ letter-spacing: -0.04em;
+}
+
+.linklist h3, .linklists h3 {
+ font-family: Georgia, Times, "Times New Roman", serif;
+ font-size: 20px;
+ line-height: 36px;
+ height: 36px;
+ padding-left: 5px;
+}
+
+.linklists h3 {
+ clear: both;
+ margin-left: 20px;
+}
+
+.linklist h3 {
+ margin-left: 0;
+}
+
+.linklist h3 a, .linklist h3 a:link, .linklist h3 a:visited {
+ color: #444;
+}
+
+.linklist h3 a:hover, .linklist h3 a:active {
+ color: #d54e21;
+}
+
+.linklist .more {
+ float: right;
+ line-height: 22px;
+ height: 22px;
+ font-size: 9px;
+}
+
+.linklist .more, .linklist .more:link, .linklist .more:visited {
+ color: #333;
+}
+
+.linklist .more:hover, .linklist .more:active {
+ color: #d54e21;
+}
+
+.linklist .sleeve {
+ margin-left: 20px;
+}
+
+.secondary_content {
+ width: 971px;
+ margin-bottom: 30px;
+ margin-left: -7px;
+}
+
+.secondary_content ul {
+ list-style: none;
+ border-top: 1px solid #ddd;
+}
+
+.secondary_content li {
+ padding: 5px;
+ list-style: none;
+ border-bottom: 1px solid #dfdfdf;
+ border-top: 1px solid #fff;
+}
+
+.secondary_content li:last-child {
+ border-bottom: none;
+}
+
+.secondary_content div.half {
+ width: 460px;
+ float: left;
+ padding: 15px 7px;
+}
+
+.miro {
+ text-align: right;
+ margin-bottom: -46px;
+}
+
+.secondary_content h3 {
+ font-family: Georgia, Times, "Times New Roman", serif;
+ font-size: 20px;
+ line-height: 36px;
+ padding-left: 5px;
+}
+
+#wpstats {
+ display: none;
+}
+
+#content {
+ width: 630px;
+ float: left;
+}
+
+#content .post {
+ margin-bottom: 20px;
+ clear: both;
+}
+
+#comments {
+ margin-top: 10px;
+}
+
+#comments .depth-2 {
+ margin-left: 20px;
+}
+
+#comments .depth-3 {
+ margin-left: 40px;
+}
+
+#comments a, #comments a:link, #comments a:visited {
+ color: #222;
+}
+
+#comments a:hover, #comments a:active {
+ color: #d54e21;
+}
+
+#comments .commenttext a, #comments .commenttext a:link, #comments .commenttext a:visited {
+ color: #21759b;;
+}
+
+#comments a:hover, #comments a:active {
+ color: #d54e21;
+}
+
+#respond {
+ border-top: 1px solid #dfdfdf !important;
+ margin-top: 0 !important;
+}
+
+#respond:first-child {
+ border-top: none !important;
+ padding-top: 0 !important;
+}
+
+#respond h3 {
+ border: none;
+ margin-top: 0 !important;
+}
+
+.children {
+ margin-left: 10px;
+}
+
+.children #respond {
+ margin-top: 10px;
+}
+
+.children #respond textarea {
+ width: 90%;
+}
+
+#commentform {
+ color: #222;
+ margin-bottom: 15px;
+ background: transparent !important;
+}
+
+#commentform, #commentform input, #commentform textarea {
+ font-family: "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+}
+
+#commentform textarea, #commentform input[type="text"] {
+ background: white;
+ border: 1px solid #ccc;
+ padding: 4px 6px;
+ margin-right: 3px;
+ -webkit-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: inset 1px 1px 1px rgba(0, 0, 0, 0.1);
+ border-radius: 2px;
+}
+
+#commentform textarea {
+ width: 600px;
+ height: 100px;
+ margin-bottom: 5px;
+}
+
+#commentform #submit {
+ margin-bottom: 10px;
+}
+
+#commentform p {
+ font-size: 10px;
+ margin-bottom: 5px;
+}
+
+.commentlist li {
+ list-style: none;
+ padding: 10px 2px;
+ border-top: 1px solid #dfdfdf;
+}
+
+.commentlist li small {
+ float: right;
+ font-size: 11px;
+ margin-top: -23px;
+}
+
+.commentlist li {
+ clear: both;
+}
+
+.commentlist li .authorinfo {
+ font-weight: bold;
+ font-style: normal;
+ line-height: 1.8em;
+}
+
+.commentmetadata {
+ line-height: 1.8em;
+}
+
+.avatar {
+ float: left;
+ margin: 0 10px 5px 0;
+ border-radius: 2px;
+ -webkit-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
+ -moz-box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
+ box-shadow: 1px 1px 1px rgba(0, 0, 0, 0.1);
+}
+
+.commenttext {
+ float: left;
+ padding-top: 5px;
+ clear: both;
+ width: 100%;
+}
+
+.commenttext p {
+ margin-bottom: 1em;
+}
+
+.comment .pd-rating {
+ float: right;
+ font-size: 10px;
+}
+
+#footer {
+ clear: both;
+ height: 3.5em;
+ margin-bottom: 15px;
+ color: #888;
+}
+
+#footer .automattic {
+ width: 400px;
+ float: right;
+ text-align: right;
+ font-size: 11px;
+ letter-spacing: 0.2em;
+ line-height: 3em;
+ padding-top: 13px;
+ padding-right: 2px;
+ text-transform: uppercase;
+ line-height: 28px;
+}
+
+.menu-footer-container {
+ float: left;
+ line-height: 4em;
+ margin-left: 2px;
+ font-size: 13px;
+ margin-bottom: 0;
+}
+
+.menu-footer-container li {
+ display: inline-block;
+}
+
+.menu-footer-container li:last-of-type .dot {
+ display: none;
+}
+
+.menu-footer-container a {
+ color: #888;
+}
+
+.menu-footer-container a:hover {
+ color: #21759b;
+}
+
+#footer .automattic img {
+ margin: 0 3px 1px 0;
+ opacity: 1;
+ transition: opacity 0.15s ease-in-out;
+}
+
+#footer .automattic img:hover {
+ opacity: 0.8;
+}
+
+#footer img.videopress {
+ display: inline;
+}
+
+#sidebar h2 {
+ margin: 5px 0 0;
+ padding: 0;
+ font-weight: bold;
+}
+
+#sidebar ul, #sidebar ul ol {
+ margin: 0;
+ padding: 0;
+}
+
+#sidebar ul li {
+ list-style-type: none;
+ list-style-image: none;
+ margin-bottom: 15px;
+}
+
+#sidebar ul p, #sidebar ul select {
+ margin: 5px 0 8px;
+}
+
+#sidebar ul ul, #sidebar ul ol {
+ margin: 5px 0 0 10px;
+}
+
+#sidebar ul ul ul, #sidebar ul ol {
+ margin: 0 0 0 10px;
+}
+
+ol li, #sidebar ul ol li {
+ list-style: decimal outside;
+}
+
+#sidebar ul ul li, #sidebar ul ol li {
+ margin: 3px 0 0;
+ padding: 0;
+}
+
+/* Begin Calendar */
+#sidebar #calendar h2 {
+ display: none;
+}
+
+#wp-calendar {
+ empty-cells: show;
+ margin: 10px auto;
+ width: 100%;
+}
+
+#wp-calendar table {
+ padding-right: 10px;
+}
+
+#wp-calendar #next a {
+ padding-right: 10px;
+ text-align: right;
+}
+
+#wp-calendar #prev a {
+ padding-left: 10px;
+ text-align: left;
+}
+
+#wp-calendar a {
+ display: block;
+}
+
+#wp-calendar caption {
+ text-align: center;
+ width: 100%;
+}
+
+#wp-calendar td {
+ padding: 3px 0;
+ text-align: right;
+}
+
+#wp-calendar td.pad:hover {
+ /* Doesn't work in IE */
+ background-color: #fff;
+}
+
+#wp-calendar #prev a, #wp-calendar #next a {
+ font-size: 9pt;
+}
+
+#wp-calendar a {
+ text-decoration: none;
+}
+
+#wp-calendar caption {
+ font: bold 1em/20px "Lucida Grande", "Lucida Sans Unicode", sans-serif;
+ text-align: center;
+ border-bottom: 1px solid #ddd;
+}
+
+#wp-calendar td, #wp-calendar th {
+ border-bottom: 1px solid #ddd;
+
+}
+
+#wp-calendar th {
+ font-style: normal;
+ text-transform: capitalize;
+ text-align: right;
+}
+
+/* End Calendar */
+
+.fourOHfour {
+ text-align: center;
+}
+
+.fourOHfour h2 {
+ margin-top: 20px;
+ margin-bottom: 20px;
+ font-size: 3em;
+ font-family: Georgia, serif;
+}
+
+.fourOHfour p {
+ font-size: 1.5em;
+ margin-bottom: 1em;
+}
+
+.pd-rating {
+ text-align: left;
+ padding: 2px 0 0;
+ float: left;
+}
+
+#about .pd-rating {
+ display: none;
+}
+
+/*
+=============================================================
+
+WordPress.tv Refresh
+
+=============================================================
+*/
+
+/* Globals
+============================================================= */
+
+a {
+ outline: none
+}
+
+.container {
+ width: 940px;
+ margin: auto;
+}
+
+.primary-content {
+ float: left;
+ width: 700px;
+ margin: 0;
+}
+
+.secondary-content {
+ float: right;
+ width: 170px;
+ margin: 0 0 50px 0;
+}
+
+.miro {
+ background: url('i/miro.png') no-repeat;
+
+ display: block;
+
+ width: 160px;
+ height: 46px;
+ margin: -40px 0 0 6px;
+
+ text-align: left;
+ text-indent: -9999px;
+}
+
+.tag-count {
+ border-radius: 20px;
+ background: #dedede;
+
+ font-size: 11px;
+ font-weight: bold;
+
+ padding: 1px 5px 0px 5px;
+ margin: 0 0 0 2px;
+}
+
+.pagination {
+ border-top: 1px #EEE solid;
+ clear: both;
+ padding: 10px 0;
+ margin: 0 0 50px 0;
+}
+
+.pagination div {
+ width: 40%
+}
+
+.nav-next {
+ float: right;
+ text-align: right;
+}
+
+.nav-previous {
+ float: left;
+}
+
+.primary-content #searchform {
+ float: none;
+ margin: 10px 0;
+}
+
+.primary-content #searchform #searchsubmit {
+ margin: 0
+}
+
+.primary-content #searchform input {
+ margin: 0
+}
+
+/* IE fixes
+============================================================= */
+
+.ie7 .view-more {
+ position: relative;
+ bottom: 42px;
+}
+
+.ie7 .secondary-videos {
+ clear: right;
+ margin: 3px 0;
+}
+
+.ie7 .secondary-content .video-list li {
+ min-height: 0;
+}
+
+/* Typography
+============================================================= */
+
+/* Menu */
+
+#menu {
+ margin-right: 5px;
+}
+
+#menu li {
+ font-size: 14px;
+}
+
+#menu li a,
+#menu li a:link,
+#menu li a:visited {
+ color: #21759b;
+}
+
+#menu li a.selected {
+ color: #545454;
+}
+
+#menu li a:hover {
+ color: #d54e21 !important;
+}
+
+#menu #searchform {
+ margin: 0 0 0 15px;
+}
+
+/* Titles and Body Text */
+
+body, td, p,
+.wpl-count,
+.desc,
+.automattic {
+ font-family: "ff-meta-web-pro", Helvetica Neue, Helvetica, sans-serif;
+ font-size: 13px;
+ line-height: 1.4;
+}
+
+.wpl-count {
+ line-height: 1.7;
+}
+
+.wptv-hero .page-title {
+ margin: -8px auto 10px auto;
+}
+
+.page-title {
+ width: 940px;
+ margin: auto;
+}
+
+.video-title {
+ font-size: 13px;
+ font-weight: bold;
+ -webkit-font-smoothing: antialiased;
+}
+
+h2 {
+ font-family: "ff-meta-web-pro", Helvetica Neue, Helvetica, sans-serif;
+ font-size: 28px;
+ font-weight: bold;
+}
+
+h3 {
+ font-family: "ff-meta-web-pro", Helvetica Neue, Helvetica, sans-serif;
+ border-bottom: 1px #e9e9e9 solid;
+
+ clear: both;
+
+ font-size: 18px;
+ font-weight: bold;
+
+ margin: 20px 0 20px;
+ padding: 0 0 9px;
+}
+
+.home .secondary-content h3 {
+ margin-top: 0;
+}
+
+h4 {
+ font-family: "ff-meta-web-pro", Helvetica Neue, Helvetica, sans-serif;
+ font-size: 16px;
+ font-weight: bold;
+
+ margin: 20px 0 10px;
+}
+
+h5 {
+ font-size: 12px;
+ font-weight: bold;
+ text-transform: uppercase;
+
+ margin: 10px 0 2px 0;
+}
+
+.view-more {
+ font-size: 13px;
+
+ display: block;
+ float: right;
+ margin: 5px 0 0 0;
+}
+
+.breadcrumb {
+ color: #8B8B8B;
+
+ font-size: 13px;
+ text-transform: uppercase;
+
+ margin: 0 0 10px 0;
+}
+
+.breadcrumb a {
+ color: #8B8B8B;
+}
+
+.breadcrumb a:hover {
+ color: #464646;
+}
+
+.breadcrumb .arrow {
+ font-family: Arial, Helvetica, sans-serif;
+ font-size: 12px;
+
+ margin: 0 5px;
+
+ position: relative;
+ top: -1px;
+}
+
+.breadcrumb .tag-count {
+ display: none;
+}
+
+/* Menu
+============================================================= */
+
+#menu li {
+ position: relative;
+}
+
+/* Dropdowns */
+
+#menu .sub-menu {
+ background: rgba(47, 47, 47, .95);
+
+ border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+
+ box-shadow: 0 2px 3px rgba(0, 0, 0, 0.2);
+
+ display: none;
+ z-index: 99;
+
+ position: absolute;
+ top: 50px;
+ left: -5px;
+
+ height: auto;
+ width: 200px;
+}
+
+#menu .sub-menu li {
+ border-top: 1px rgba(255, 255, 255, 0.1) solid;
+ border-bottom: 1px rgba(0, 0, 0, 0.2) solid;
+ float: none;
+ margin: 0;
+}
+
+#menu .sub-menu li a {
+ color: #ccc;
+ text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
+ -moz-text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
+ -webkit-text-shadow: 0 1px 0 rgba(0, 0, 0, 0.6);
+
+ font-size: 13px;
+ font-weight: normal;
+ line-height: 1.2;
+
+ padding: 10px;
+
+ display: block;
+ clear: both;
+}
+
+#menu .sub-menu li a:hover {
+ background: #1f1f1f;
+ color: #fff !important;
+}
+
+#menu .sub-menu .current-menu-item a,
+#menu .sub-menu .current_page_item a {
+ color: #ccc !important;
+}
+
+#menu .sub-menu ul {
+ left: 195px;
+ top: 5px;
+}
+
+/* Hero Area
+============================================================= */
+
+.wptv-hero {
+ clear: both;
+
+ margin: 10px auto 30px auto;
+ padding: 30px 0 10px 0;
+
+ background: #F0F0F0;
+}
+
+.wptv-hero .main-video {
+ background: #2f2f2f;
+ clear: both;
+
+ float: left;
+ width: 575px;
+}
+
+.wptv-hero .main-video .video-player {
+ width: 100% !important;
+ height: 323px !important;
+ margin: 0 !important;
+}
+
+.wptv-hero .main-video .video-player .videopress-placeholder {
+ margin: 0;
+ width: 100% !important;
+ height: 100% !important;
+}
+
+.wptv-hero .main-video .video-player .videopress-poster,
+.wptv-hero .main-video .video-player object {
+ width: 100% !important;
+ height: 100% !important;
+}
+
+.wptv-hero .main-video .video-player .videopress-title,
+.wptv-hero .main-video .video-player .videopress-watemark {
+ display: none !important;
+}
+
+.wptv-hero .main-video h3 {
+ border-bottom: 0;
+ border-top: 6px #464646 solid;
+
+ text-align: left;
+
+ margin: 0;
+ padding: 15px;
+}
+
+.wptv-hero .main-video .video-title {
+ display: block;
+ color: #eee;
+ font-size: 18px;
+}
+
+.wptv-hero .main-video .video-event {
+ display: block;
+ margin-top: 25px;
+ text-transform: capitalize;
+}
+
+.wptv-hero .main-video .video-event a {
+ color: #8e8e8e;
+ font-size: 14px;
+ font-weight: normal;
+}
+
+.wptv-hero .main-video .video-event a:hover {
+ color: #fff;
+}
+
+.wptv-hero .main-video .video-event .tag-count {
+ display: none;
+}
+
+.wptv-hero .secondary-videos {
+ float: right;
+ width: 345px;
+}
+
+.wptv-hero .secondary-videos h3 {
+ font-size: 18px;
+ font-weight: bold;
+ border-bottom: 1px #dfdfdf solid;
+
+ padding: 0 0 14px 0;
+ margin: 0 0 18px 0;
+}
+
+.wptv-hero .secondary-videos li {
+ font-size: 13px;
+
+ min-height: 75px;
+ position: relative;
+
+ margin: 0 auto 23px 0;
+ padding: 0 0 0 142px;
+}
+
+.wptv-hero .secondary-videos img {
+ width: 130px;
+ height: 75px;
+
+ position: absolute;
+ left: 0;
+}
+
+.wptv-hero .secondary-videos a:hover img {
+ opacity: 0.8;
+}
+
+/* Video lists
+============================================================= */
+
+.video-list {
+ clear: both;
+}
+
+.video-list li {
+ float: left;
+ min-height: 220px;
+ margin-bottom: 20px;
+}
+
+.video-list li img {
+ width: 100%;
+ min-height: 100px;
+}
+
+.video-list li .video-thumbnail {
+ display: block;
+ width: 100%;
+ height: 100px;
+
+ margin: 0 0 8px 0;
+
+ overflow: hidden;
+ position: relative;
+}
+
+.video-list.four-col {
+ width: 860px;
+}
+
+.video-list.four-col li {
+ width: 160px;
+ margin-right: 20px;
+}
+
+.secondary-content .video-list .video-title {
+ font-size: 13px;
+ display: block;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ width: 170px;
+}
+
+.secondary-content .video-list li {
+ min-height: inherit;
+ border: 0;
+}
+
+/* Archives
+============================================================= */
+
+.archive.video-list {
+ width: auto;
+ margin: 16px 0 0 0;
+}
+
+.archive .video-description span {
+ display: block;
+}
+
+.archive.video-list li {
+ margin: 0 0 40px 0;
+ min-height: 120px;
+
+ display: block;
+ float: none;
+ position: relative;
+}
+
+.archive.video-list .video-thumbnail {
+ position: absolute;
+ top: 0;
+ left: 0;
+
+ width: 220px;
+ height: 120px;
+
+ margin: 0 20px 0 0;
+}
+
+.archive.video-list .video-title {
+ font-size: 16px;
+ margin: 4px 0 8px;
+}
+
+.archive.video-list .video-description {
+ display: block;
+ padding-left: 240px;
+}
+
+.archive.video-list .video-date {
+ color: #aaa;
+ display: block;
+
+ margin: 10px 0 0 0;
+
+ font-size: 12px;
+}
+
+.archive.video-list .video-speakers {
+ margin: 7px 0 0 0;
+}
+
+.archive.video-list .video-excerpt {
+ margin: 7px 0 0 0;
+}
+
+/* Search */
+
+.search h4 {
+ margin: 0 0 10px 0;
+}
+
+.archive .video-events {
+ text-transform: uppercase;
+ font-size: 12px;
+ margin: 0 0 5px 0;
+}
+
+/* Category page
+============================================================= */
+
+.category.archive .video-list .video-title {
+ font-size: 13px;
+ line-height: 16px;
+}
+
+/* Individual Video Page
+============================================================= */
+
+.single .video-title {
+ font-size: 24px;
+}
+
+body:not(.single) .video-info {
+ width: 220px;
+ margin: 15px 0 0 0;
+ float: right;
+}
+
+.video-info p {
+ /*text-transform: capitalize;*/
+ margin: 0 0 12px 0;
+}
+
+/* Video Player and Placeholder */
+
+.single .video-player {
+ float: left;
+ width: 940px !important;
+ height: 529px !important;
+
+ overflow: hidden;
+}
+
+.videopress-placeholder,
+.video-player object {
+ width: 100% !important;
+ height: 100% !important;
+ margin: 0 !important;
+}
+
+.videopress-poster {
+ width: 100%;
+ height: auto;
+}
+
+.videopress-title {
+ display: none !important;
+}
+
+/* Sharedaddy, Likes, etc */
+
+#page .the-video div.jp-relatedposts {
+ clear: both;
+}
+
+#page div.sharedaddy div.sd-block {
+ border: 0;
+}
+
+div.sharedaddy .sd-content {
+ width: auto !important;
+ margin: 0 -5px 0 0 !important;
+}
+
+/* Sharing */
+
+#page .the-video .sharedaddy .sd-sharing-enabled {
+ clear: none;
+ float: right;
+}
+
+/* Ratings */
+
+.video-info .sd-block {
+ display: none !important;
+}
+
+div.sharedaddy div.sd-block.sd-rating {
+ float: left;
+ margin: 0;
+}
+
+div.sharedaddy .sd-rating .sd-content {
+ float: left;
+}
+
+div.sharedaddy .sd-title {
+ display: none !important;
+}
+
+.the-video div.sharedaddy .sd-rating .pd-rating {
+ width: 100%;
+}
+
+/* Likes */
+
+.wpl-likebox {
+ clear: both;
+ margin: 0 0 0 2px;
+}
+
+div.sharedaddy ul.wpl-avatars {
+ margin: 0 0 0 2px;
+}
+
+#page div.sharedaddy.sd-sharing-enabled .sd-like div.sd-content {
+ width: 100% !important;
+ margin: 0 !important;
+}
+
+#page div.sharedaddy ul.wpl-avatars li {
+ width: 15px;
+ height: 15px;
+}
+
+#page div.sharedaddy ul.wpl-avatars li img {
+ width: 100%;
+ height: 100%;
+}
+
+/* Related Posts */
+div#jp-relatedposts div.jp-relatedposts-items-visual {
+ margin-right: -9px;
+}
+
+div#jp-relatedposts div.jp-relatedposts-items-visual .jp-relatedposts-post:last-of-type {
+ padding: 0;
+}
+
+/* Comments */
+
+h3#comments {
+ border: 0;
+ margin: 20px 0 0 0;
+}
+
+/* WordCamp Category Page
+============================================================= */
+
+.category .secondary-videos li {
+ margin: 0 auto 13px 0
+}
+
+.secondary-videos .tag-count {
+ display: none;
+}
+
+.secondary-videos .video-event {
+ display: block;
+ margin: 5px 0 0 0;
+
+ font-size: 12px;
+ font-weight: normal;
+ text-transform: capitalize;
+}
+
+.secondary-videos .video-event,
+.secondary-videos .video-event a {
+ color: #818181;
+}
+
+.category .page-title {
+ float: left;
+ width: auto;
+ margin: -8px 0 20px 0;
+}
+
+.desc {
+ float: right;
+ color: #969696;
+ margin: 3px 0 20px 0;
+}
+
+.category-wordcamptv .secondary-content {
+ float: left;
+ width: 170px;
+}
+
+.category-wordcamptv .primary-content {
+ float: right;
+ margin: 0;
+}
+
+/* WordCamp Individual Page
+============================================================= */
+
+.tax-event .secondary-videos li {
+ margin: 0 auto 13px 0
+}
+
+/* Secondary Content
+============================================================= */
+
+.secondary-content ul {
+ margin: 0 0 40px 0;
+}
+
+.secondary-content li li {
+ border-bottom: 1px #e5e5e5 solid;
+ padding: 5px 0;
+}
+
+.secondary-content .widget-title,
+.secondary-content .widgettitle {
+ border-bottom: 1px #E9E9E9 solid;
+ clear: both;
+ font-size: 18px;
+ font-weight: bold;
+ margin: 20px 0 20px;
+ padding: 0 0 9px;
+}
+
+.secondary-content li.widget {
+ border: 0;
+}
+
+/* 404 page
+============================================================= */
+
+.error404 .primary-content {
+ width: 940px;
+}
+
+.error404 h2 {
+ margin: 0 0 30px 0;
+}
+
+.baron-von-pick {
+ float: left;
+ margin: 0 50px 20px 0;
+ font-size: 12px;
+ color: #888;
+}
+
+.baron-von-pick img {
+ border-radius: 3px;
+ -webkit-border-radius: 3px;
+ width: 200px;
+ margin-bottom: 10px;
+}
+
+.error404 .primary-content .message-404 p {
+ font-size: 16px;
+ margin: 0 0 20px 0;
+}
+
+.message-404 {
+ float: left;
+ width: 680px;
+}
+
+/* Footer
+============================================================= */
+
+#footer {
+ background: #F0F0F0;
+
+ margin: 10px 0 0 0;
+ padding: 10px 0;
+}
+
+#footer .dot {
+ margin: 0 10px;
+}
+
+#footer .automattic a {
+ position: relative;
+ top: 2px;
+ margin: 0 7px;
+}
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2taxonomyeventphp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/taxonomy-event.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/taxonomy-event.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/taxonomy-event.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,90 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/*
+ * Event Taxonomy Archives
+ *
+ * Displays for event listings like individual WordCamps.
+ *
+ * @todo cleanup and merge with category.php
+ */
+global $wp_query, $wptv;
+get_header();
+
+// If you're wondering why the below if statement, see category.php
+
+if ( get_query_var( 'paged' ) < 2 && $wp_query->found_posts > 6 ) : ?>
+<div class="wptv-hero group">
+ <div class="container">
+
+ <?php get_template_part( 'breadcrumbs' ); ?>
+ <h2 class="page-title"><?php single_term_title(); ?></h2>
+
+ <?php if ( have_posts() ) : the_post(); ?>
+
+ <div class="main-video">
+ <?php $wptv->the_video(); ?>
+ <h3>
+ <a href="<?php the_permalink(); ?>" rel="bookmark" class="video-title"><?php the_title(); ?></a>
+ <?php $wptv->the_event( '<strong class="video-event">', '</strong>' ); ?>
+ </h3>
+ </div><!-- .main-video -->
+
+ <?php endif; ?>
+
+ <div class="secondary-videos">
+ <ul>
+ <?php
+ for ( $i = 0 ; $i < 5 ; $i++ ) :
+ if ( ! have_posts() ) {
+ break; // just in case
+ }
+
+ the_post();
+ ?>
+
+ <li class="group">
+ <a href="<?php the_permalink(); ?>" rel="bookmark">
+ <span class="video-thumbnail">
+ <img src="<?php $wptv->the_video( true, true ); ?>" />
+ </span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+
+ <?php endfor; ?>
+ </ul>
+ </div><!-- .secondary-videos -->
+ </div>
+</div><!-- .wptv-hero -->
+
+<?php else : // get_query_var(paged) < 2 ?>
+
+<div class="wptv-hero group">
+ <div class="container">
+ <?php get_template_part( 'breadcrumbs' ); ?>
+ <h2 class="page-title"><?php single_term_title(); ?></h2>
+ </div>
+</div>
+
+<?php endif; // paged ?>
+
+<div class="container">
+ <div class="primary-content">
+
+ <ul class="video-list four-col">
+ <?php while ( have_posts() ) : the_post(); ?>
+ <li>
+ <a href="<?php the_permalink(); ?>">
+ <span class="video-thumbnail"><?php $wptv->the_video_image(50, null, false); ?></span>
+ <span class="video-title"><?php the_title(); ?></span>
+ </a>
+ </li>
+ <?php endwhile; ?>
+ </ul>
+
+ <?php get_template_part( 'pagination' ); ?>
+
+ </div><!-- .primary-content -->
+ <?php get_sidebar( 'event' ); ?>
+</div><!-- .container -->
+<?php
+get_footer();
</ins></span></pre></div>
<a id="sitestrunkwordpresstvpublic_htmlwpcontentthemeswptv2uploadsubtitlestemplatephp"></a>
<div class="addfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Added: sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/upload-subtitles-template.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/upload-subtitles-template.php (rev 0)
+++ sites/trunk/wordpress.tv/public_html/wp-content/themes/wptv2/upload-subtitles-template.php 2014-12-03 20:10:33 UTC (rev 1024)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -0,0 +1,331 @@
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+<?php
+/**
+ * Template Name: Upload Subtitles
+ */
+
+function subtitles_upload_css() {
+ ?>
+ <style type="text/css">
+ <?php // theme structural css ?>
+ html,
+ body {
+ width: 100%;
+ height: 100%;
+ margin: 0;
+ }
+
+ #page {
+ height: auto;
+ min-height: 100%;
+ position: relative;
+ width: 100%;
+ }
+
+ #header {
+ margin: 0;
+ padding-top: 10px;
+ }
+
+ #footer {
+ position: absolute;
+ bottom: 0;
+ right: 0;
+ left: 0;
+ }
+
+ .video-upload {
+
+ }
+
+ .noscript-show p {
+ margin: 0 !important;
+ }
+ <?php // theme structural end ?>
+
+ .container {
+ overflow: hidden;
+ }
+
+ .video-upload h3 {
+ font-size: 22px;
+ }
+
+ .video-upload div.error,
+ .video-upload div.success {
+ border: 1px solid #c00;
+ border-radius: 3px;
+ background-color: #ffebe8;
+ padding: 0 10px;
+ margin: 10px 0;
+ }
+
+ .video-upload div.success {
+ background-color: #edfcd5;
+ border-color: #d4ebaf;
+ }
+
+ .video-upload div.error p,
+ .video-upload div.success p {
+ margin: 0.5em 0;
+ }
+
+ .video-upload table tr th,
+ .video-upload table tr td {
+ padding: 7px 0;
+ line-height: 1.4em;
+ }
+
+ .video-upload table tr th {
+ width: 180px;
+ font-weight: bold;
+ }
+
+ .video-upload p > label.wptv-video-wordcamp-cb {
+ display: inline;
+ float: none;
+ }
+
+ .video-upload table tr th label .required {
+ line-height: 15px;
+ vertical-align: bottom;
+ margin: 0 3px;
+ }
+
+ .video-upload input[type="text"],
+ .video-upload textarea,
+ .video-upload ul.cats-checkboxes {
+ border-radius: 3px;
+ border: 1px solid #dfdfdf;
+ color: #333;
+ background-color: #fff;
+ padding: 4px;
+ width: 329px;
+ max-width: 329px;
+ }
+
+ .video-upload ul.cats-checkboxes {
+ margin-left: 130px;
+ height: 150px;
+ overflow: auto;
+ }
+
+ .video-upload ul.cats-checkboxes ul.children {
+ margin-left: 15px;
+ }
+
+ .video-upload input[type="text"]:focus,
+ .video-upload textarea:focus {
+ border-color: #bbb;
+ }
+
+ #subtitle-instructions {
+ overflow: auto;
+ }
+
+ #subtitle-instructions img {
+ border: 1px solid #808080;
+ max-width: 938px;
+ }
+
+ #video-upload-form p.last,
+ #video-upload-form table tr td.last {
+ padding: 15px 0;
+ text-align: left;
+ }
+
+ #video-upload-form p .invalid {
+ border: 1px solid red;
+ }
+
+ #video-upload-form input[type="submit"] {
+ font-size: 15px;
+ padding: 4px 12px;
+ }
+
+ .page-template-anon-upload-template-php .wptv-hero {
+ padding: 20px;
+ }
+
+ .page-template-anon-upload-template-php .wptv-hero h2 {
+ font-size: 24px;
+ }
+
+ .video-upload-right .accepted-formats {
+ margin-left: 16px;
+ }
+
+ .video-upload-right .accepted-formats li {
+ list-style: square;
+ }
+
+ .video-upload-right h3 {
+ padding-bottom: 4px;
+ }
+
+ .video-upload .pass-form label {
+ float: none;
+ display: inline;
+ width: auto;
+ }
+ </style>
+ <?php
+}
+
+add_action( 'wp_head', 'subtitles_upload_css' );
+
+// Password-protect this form.
+if ( post_password_required() ) :
+ get_header();
+?>
+ <div class="wptv-hero">
+ <div class="single container">
+ <h2><?php esc_html_e( 'Subtitle a Video', 'wptv' ); ?></h2>
+ </div>
+ </div>
+
+ <div class="container">
+ <div class="video-upload">
+ <p><?php printf( __( 'Hey there! If you’re interested in subtitling or captioning videos for WordPress.tv, please fill out the <a href="%s">contact form</a>, and we’ll be in touch.', 'wptv' ), 'http://wordpress.tv/contact/' ); ?></p>
+ <div class="pass-form">
+ <?php echo get_the_password_form(); ?>
+ </div>
+ </div>
+ </div>
+<?php
+ get_footer();
+ return;
+endif; // post_password_required
+
+if ( ! class_exists( 'VideoPress_Subtitles' ) )
+ wp_die( 'Not ready yet.' );
+
+if ( empty( $_GET['video'] ) )
+ wp_die( 'Needs a video context.' );
+
+$video_id = absint( $_GET['video'] );
+if ( ! wp_attachment_is_video( $video_id ) )
+ wp_die( 'You can only subtitle videos.' );
+
+$video = video_get_info_by_blogpostid( get_current_blog_id(), $video_id );
+$attachment = get_post( $video_id );
+$parent = get_post( $attachment->post_parent );
+
+if ( ! $parent || 'publish' != $parent->post_status )
+ wp_die( 'You can not subtitle this video, sorry.' );
+
+get_header();
+
+$message = '';
+
+if ( ! empty( $_REQUEST['error'] ) ) {
+ $message = (int) $_REQUEST['error'];
+
+ switch ( $message ) {
+ case 1:
+ $message = 'Error: please provide a subtitles file.';
+ break;
+ case 2:
+ $message = 'Error: invalid file type.';
+ break;
+ case 3:
+ $message = 'Error: unknown file type.';
+ break;
+ case 4:
+ $message = 'Error: please provide a WordPress.org username and a valid email address.';
+ break;
+ case 5:
+ $message = 'Unknown error. Please try again later.';
+ break;
+ case 6:
+ $message = 'Error: invalid submission.';
+ break;
+ case 7:
+ $message = 'Error: invalid language.';
+ break;
+ case 8:
+ $message = 'Error: it looks like there already is a subtitles file for the selected language.';
+ break;
+ }
+ $message = '<div class="error"><p>' . $message . '</p></div>';
+} elseif ( ! empty( $_REQUEST['success'] ) ) {
+ $message = '<div class="success"><p>Your subtitles file has been submitted successfully and is awaiting moderation. Thank you!</p></div>';
+}
+?>
+
+<div class="wptv-hero">
+<div class="single container">
+ <h2><?php esc_html_e( 'Subtitle a Video', 'wptv' ); ?></h2>
+</div>
+</div>
+
+<div class="container">
+ <div class="video-upload">
+ <?php echo $message; ?>
+
+ <p>Subtitling: <a href="<?php echo esc_url( get_permalink( $parent->ID ) ); ?>"><?php echo apply_filters( 'the_title', $parent->post_title ); ?></a></p>
+
+ <form method="post" action="<?php echo admin_url( 'admin-post.php' ); ?>" id="video-upload-form" enctype="multipart/form-data">
+
+ <?php wp_nonce_field( 'wptv-upload-subtitles', 'wptv-upload-subtitles-nonce' ); ?>
+ <input type="hidden" name="action" value="wptv_video_upload_subtitles" />
+ <input type="hidden" name="wptv_video_id" value="<?php echo absint( $video_id ); ?>" />
+
+ <table>
+ <tr>
+ <th><label for="wptv_wporg_username"><?php _e( 'WordPress.org Username' ); ?><span class="required"> * </span></label></th>
+ <td>
+ <input type="text" id="wptv_wporg_username" name="wptv_wporg_username" /><br />
+ To contribute subtitles, you must be a registered user at the <a href="http://wordpress.org">WordPress.org</a> website. Note that this is the username you use to log in at WordPress.org, not the username you use to log in on your own WordPress-powered site.<br />
+ If you think you are registered but aren't sure, you can try logging in at <a href="http://wordpress.org/support/bb-login.php">WordPress.org/support</a>.<br />
+ If you don't have a WordPress.org username yet, you can <a href="http://wordpress.org/support/register.php">sign up for a free account</a>.
+ </td>
+ </tr>
+
+ <tr>
+ <th><label for="wptv_author_email"><?php esc_html_e( 'Email Address', 'wptv' ); ?><span class="required"> * </span></label></th>
+ <td>
+ <input type="text" id="wptv_author_email" name="wptv_author_email" />
+ </td>
+ </tr>
+
+ <tr>
+ <th><label for="wptv_language"><?php _e( 'Language' ); ?><span class="required"> * </span></label></th>
+ <td>
+ <select name="wptv_language">
+ <?php $tracks = VideoPress_Subtitles::get_tracks( $video->guid ); ?>
+ <?php foreach ( VideoPress_Subtitles::get_languages() as $value => $language ) : ?>
+ <option value="<?php echo esc_attr( $value ); ?>" <?php disabled( ! empty( $tracks[ $value ] ) ); ?> ><?php echo esc_html( $language['localized_label'] ); ?></option>
+ <?php endforeach; ?>
+ </select>
+ </td>
+ </tr>
+
+ <tr>
+ <th><label for="wptv_subtitles_file"><?php _e( 'Subtitles File' ); ?><span class="required"> * </span></label></th>
+ <td><input type="file" name="wptv_subtitles_file" id="wptv_subtitles_file" /></td>
+ </tr>
+
+ <tr>
+ <td colspan="2"><em>* All field are required</em></td>
+ </tr>
+
+ <tr>
+ <td colspan="2" class="last"><input type="submit" id="wptv_subtitles_upload" value="<?php esc_attr_e( 'Submit' ); ?>" /></td>
+ </tr>
+ </table>
+ </form>
+ </div>
+
+ <div id="subtitle-instructions">
+ <h3><?php esc_html_e( 'Instructions', 'wptv' ); ?></h3>
+
+ <?php
+ $instructions = get_post( 17639 );
+ setup_postdata( $instructions );
+ the_content();
+ wp_reset_postdata();
+ ?>
+ </div>
+</div>
+
+<?php get_footer();
</ins></span></pre>
</div>
</div>
</body>
</html>