<!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>[1333] sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php: WordCamp Post Type: Implement [schedule session_link="anchor"].</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/1333">1333</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/1333","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>2015-02-25 23:44:44 +0000 (Wed, 25 Feb 2015)</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'>WordCamp Post Type: Implement [schedule session_link="anchor"].

The shortcode parameter has existed since the plugin was created, but up until now it just output "noop" as the session title. Now it outputs the title of the session, linked to the on-page anchor of the corresponding session post (from the [sessions] shortcode).

get_wcpt_anchor_permalink() was refactored into a generic function that can be used for all the WCPT post types.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordcamporgpublic_htmlwpcontentpluginswcposttypeswcposttypesphp">sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordcamporgpublic_htmlwpcontentpluginswcposttypeswcposttypesphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php   2015-02-25 23:39:32 UTC (rev 1332)
+++ sites/trunk/wordcamp.org/public_html/wp-content/plugins/wc-post-types/wc-post-types.php     2015-02-25 23:44:44 UTC (rev 1333)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -644,7 +644,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( 'permalink' == $attr['session_link'] && 'session' == $session_type )
</span><span class="cx" style="display: block; padding: 0 10px">                                        $session_title_html = sprintf( '<a class="wcpt-session-title" href="%s">%s</a>', esc_url( get_permalink( $session->ID ) ), $session_title );
</span><span class="cx" style="display: block; padding: 0 10px">                                elseif ( 'anchor' == $attr['session_link'] && 'session' == $session_type )
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        $session_title_html = 'noop';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 $session_title_html = sprintf( '<a class="wcpt-session-title" href="%s">%s</a>', esc_url( $this->get_wcpt_anchor_permalink( $session->ID ) ), $session_title );
</ins><span class="cx" style="display: block; padding: 0 10px">                                 else
</span><span class="cx" style="display: block; padding: 0 10px">                                        $session_title_html = sprintf( '<span class="wcpt-session-title">%s</span>', $session_title );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -655,7 +655,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                        $speaker_name = apply_filters( 'the_title', $speaker->post_title );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ( 'anchor' == $attr['speaker_link'] ) // speakers/#wcorg-speaker-slug
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                $speaker_permalink = $this->get_speaker_anchor_permalink( $speaker->ID );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                         $speaker_permalink = $this->get_wcpt_anchor_permalink( $speaker->ID );
</ins><span class="cx" style="display: block; padding: 0 10px">                                         elseif ( 'wporg' == $attr['speaker_link'] ) // profiles.wordpress.org/user
</span><span class="cx" style="display: block; padding: 0 10px">                                                $speaker_permalink = $this->get_speaker_wporg_permalink( $speaker->ID );
</span><span class="cx" style="display: block; padding: 0 10px">                                        elseif ( 'permalink' == $attr['speaker_link'] ) // year.city.wordcamp.org/speakers/slug
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -728,24 +728,49 @@
</span><span class="cx" style="display: block; padding: 0 10px">        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * Returns a speaker's anchor permalink
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * Returns an anchor permalink for a Speaker or Session
</ins><span class="cx" style="display: block; padding: 0 10px">          *
</span><span class="cx" style="display: block; padding: 0 10px">         * If the speakers page is rendered with the [speakers] shortcode, it will
</span><span class="cx" style="display: block; padding: 0 10px">         * contain IDs that can be used as anchors. This function will attempt to find
</span><span class="cx" style="display: block; padding: 0 10px">         * a speakers page and link to the appropriate anchor.
</span><span class="cx" style="display: block; padding: 0 10px">         *
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-         * @param $speaker_id int The speaker's post id.
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+  * @param $post_id int The speaker/session's post ID.
+        *
+        * @return string
</ins><span class="cx" style="display: block; padding: 0 10px">          */
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        function get_speaker_anchor_permalink( $speaker_id ) {
-               $post = get_post( $speaker_id );
-               if ( $post->post_type != 'wcb_speaker' || $post->post_status != 'publish' )
-                       return;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ function get_wcpt_anchor_permalink( $post_id ) {
+               $post = get_post( $post_id );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                $speakers_permalink = $this->get_speakers_permalink();
-               if ( ! $speakers_permalink )
-                       return;
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         if ( 'publish' != $post->post_status ) {
+                       return '';
+               }
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return $speakers_permalink . '#wcorg-speaker-' . sanitize_html_class( $post->post_name );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         switch( $post->post_type ) {
+                       case 'wcb_speaker':
+                               $permalink = $this->get_speakers_permalink();
+                               $anchor_id = $post->post_name;
+                               break;
+
+                       case 'wcb_session':
+                               $permalink = $this->get_sessions_permalink();
+                               $anchor_id = $post->ID;
+                               break;
+
+                       default:
+                               $permalink = $anchor_id = false;
+                               break;
+               }
+
+               if ( ! $permalink ) {
+                       return '';
+               }
+
+               return sprintf(
+                       '%s#wcorg-%s-%s',
+                       $permalink,
+                       str_replace( 'wcb_', '', $post->post_type ),
+                       sanitize_html_class( $anchor_id )
+               );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        /**
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -755,6 +780,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">         * returns the permalink of whichever comes first.
</span><span class="cx" style="display: block; padding: 0 10px">         */
</span><span class="cx" style="display: block; padding: 0 10px">        function get_speakers_permalink() {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                // todo combine this, get_sessions_permalink, and get_organizers_permalink into a DRY function
+               
</ins><span class="cx" style="display: block; padding: 0 10px">                 if ( isset( $this->speakers_permalink ) )
</span><span class="cx" style="display: block; padding: 0 10px">                        return $this->speakers_permalink;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -938,7 +965,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                        $speaker_name = apply_filters( 'the_title', $speaker->post_title );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if ( 'anchor' == $attr['speaker_link'] ) // speakers/#wcorg-speaker-slug
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                                $speaker_permalink = $this->get_speaker_anchor_permalink( $speaker->ID );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                         $speaker_permalink = $this->get_wcpt_anchor_permalink( $speaker->ID );
</ins><span class="cx" style="display: block; padding: 0 10px">                                                         elseif ( 'wporg' == $attr['speaker_link'] ) // profiles.wordpress.org/user
</span><span class="cx" style="display: block; padding: 0 10px">                                                                $speaker_permalink = $this->get_speaker_wporg_permalink( $speaker->ID );
</span><span class="cx" style="display: block; padding: 0 10px">                                                        elseif ( 'permalink' == $attr['speaker_link'] ) // year.city.wordcamp.org/speakers/slug
</span></span></pre>
</div>
</div>

</body>
</html>