<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -3,7 +3,7 @@
 Plugin Name: ScreenSteps Live
 Plugin URI: http://screensteps.com/blog/2008/07/screensteps-live-wordpress-plugin/
 Description: This plugin will incorporate lessons from your ScreenSteps Live account into your WordPress Pages.
-Version: 1.0.5
+Version: 1.0.6
 Author: Blue Mango Learning Systems
 Author URI: http://www.screensteps.com
 */
@@ -12,6 +12,7 @@ Author URI: http://www.screensteps.com
 
 // Global var for SSLiveWordPress object. It is shared among multiple wp callbacks.
 $screenstepslivewp = NULL;
+$screenstepslivePages = NULL;
 
 
 // This plugin processes content of all posts
@@ -20,8 +21,11 @@ add_filter('the_content', 'screenstepslive_parseContent', 100);
 add_filter('the_title', 'screenstepslive_parseTitle', 100);
 add_filter('wp_list_pages', 'screenstepslive_listPages', 100);
 add_filter('delete_post', 'screenstepslive_checkIfDeletedPostIsReferenced', 100);
+add_filter('name_save_pre', 'screenstepslive_changePagePermalink', 100);
 add_action('admin_menu', 'screenstepslive_addPages');
 
+add_filter('request', 'screenstepslive_query_vars', 100);
+
 
 function screenstepslive_initializeObject()
 {
@@ -73,27 +77,39 @@ function screenstepslive_addHeader() {
 		// Get out if we have nothing to offer.
 		if (!isset($page)) wp_die('unable to find page for comment submission');
 		
-		$space_id = $page['space_id'];
+		global $screenstepslivePages;
+		
+		if (empty($screenstepslivePages)) {
+			$screenstepslivePages['space'] = empty($page['space_permalink']) ? $page['space_id'] : $page['space_permalink'];
+			$screenstepslivePages['manual'] = $sslivewp-&gt;CleanseID($_GET['manual_id']);
+			$screenstepslivePages['bucket'] = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+			$screenstepslivePages['lesson'] = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+		}
+		
+		/*$space_id = $page['space_id'];
 		$manual_id = $sslivewp-&gt;CleanseID($_GET['manual_id']);
 		$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+		*/
 		if ($page['resource_type'] == 'bucket' &amp;&amp; 
 			( (is_string($page['resource_id']) &amp;&amp; !empty($page['resource_id'])) || (is_int($page['resource_id']) &amp;&amp; $page['resource_id'] &gt; 0) )
 			)
 			
-			$bucket_id = $page['resource_id'];
+			$screenstepslivePages['bucket'] = $page['resource_id'];
 		else if ($page['resource_type'] == 'manual' &amp;&amp; 
 			( (is_string($page['resource_id']) &amp;&amp; !empty($page['resource_id'])) || (is_int($page['resource_id']) &amp;&amp; $page['resource_id'] &gt; 0) )
 			)
-			$manual_id = $page['resource_id'];
-		$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+			$screenstepslivePages['manual'] = $page['resource_id'];
+		
+		/* $lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);*/
+		
 		////////////
 		
 		if ($page['resource_type'] == 'manual') {
 			$resource_type = 'manual';
-			$resource_id = $manual_id;
+			$resource_id = $screenstepslivePages['manual'];
 		} else {
 			$resource_type = 'bucket';
-			$resource_id = $bucket_id;
+			$resource_id = $screenstepslivePages['bucket'];
 		}
 		
 		$name = $_POST['sslivecommment']['author'];
@@ -106,7 +122,7 @@ function screenstepslive_addHeader() {
 			$comment = stripslashes($comment);
 		}
 		
-		$errors = $sslivewp-&gt;SubmitLessonComment($space_id, $resource_type, $resource_id, $lesson_id, 
+		$errors = $sslivewp-&gt;SubmitLessonComment($screenstepslivePages['space'], $resource_type, $resource_id, $screenstepslivePages['lesson'], 
 			$name, $email, $comment, $_POST['sslivecommment']['subscribe']);
 		if ( count($errors) &gt; 0 ) {
 			foreach ($errors as $key=&gt;$value)
@@ -123,10 +139,101 @@ function screenstepslive_addHeader() {
 }
 
 
+// Support for mod-rewrite
+function screenstepslive_query_vars($request)
+{
+	global $screenstepslivePages;
+	
+	//print_r($request);
+	/*
+	Array
+	(
+		[page] =&gt; /4209
+		[pagename] =&gt; screensteps-live-page/space/4/manual/screensteps/lesson
+	)
+	*/
+	$pathParts = explode('/', $request['pagename']);
+	//print_r($pathParts);
+	
+	$pages = get_option('screenstepslive_pages');
+	
+	// Update permalink for page
+	if (is_array($pages))
+	{
+		foreach ($pages as $key =&gt; $page_entry) {
+			$newPageName = '';
+			foreach ($pathParts as $i =&gt; $name) {
+				if ($name == $page_entry['permalink']) {
+					if (isset($pathParts[$i+1]))
+					{
+						$screenstepslivePages['space'] = $pathParts[$i+1];
+						if ($pathParts[$i+2] == 'manual')
+							$screenstepslivePages['manual'] = $pathParts[$i+3];
+						else
+							$screenstepslivePages['bucket'] = $pathParts[$i+3];
+							
+						if (isset($request['page']) &amp;&amp; !empty($request['page']))
+							$screenstepslivePages['lesson'] = substr($request['page'], 1, strlen($request['page'])); // e.g. /4709
+						else if (isset($pathParts[$i+4]))
+							$screenstepslivePages['lesson'] = $pathParts[$i+4];
+							
+						$screenstepslivePages['lesson'] = explode('-', $screenstepslivePages['lesson']);
+						$screenstepslivePages['lesson'] = $screenstepslivePages['lesson'][0];
+						
+						$request['pagename'] = $newPageName . $name;
+						//print_r($screenstepslivePages);
+					}
+					break 2;
+				}
+				 else
+				{
+					// May include a parent page
+					$newPageName .= $name . '/';
+				}
+			}
+		}
+	}	
+	//print_r($request);
+	
+	return $request;
+}
+
+
+function screenstepslive_changePagePermalink($data)
+{
+	$pageID = (int) $_POST['post_ID'];
+	
+	// Find settings for this page
+	// Can't find way to determine if revision is being inserted other than this.
+	// ID doesn't seem to be available anywhere. Silly.
+	if ($pageID &gt; 0 &amp;&amp; $data != ($pageID . '-revision')) 
+	{
+		$pages = get_option('screenstepslive_pages');
+		
+		// Update permalink for page
+		foreach ($pages as $key =&gt; $page_entry) {
+			if ($page_entry['id'] == $pageID) {
+				if (empty($data)) {
+					// WordPress hasn't assigned permalink yet. Grab one.
+					$data = get_sample_permalink($pageID);
+					$data = $data[1];
+				}
+				$pages[$key]['permalink'] = $data;
+				update_option('screenstepslive_pages', $pages);
+				break;
+			}
+		}
+	}
+	
+	return $data;
+}
+
+
 function screenstepslive_listPages($the_output) {
 	// We remove the link to the current SS Live page from the list. It's $title will be rewritten
 	// by screenstepslive_parseTitle and since WordPress has one filter for ALL titles we don't have
 	// a lot of options.
+	global $screenstepslivePages;
 	$postID = get_the_ID();
 	$post = &amp;get_post($postID);
 			
@@ -142,67 +249,74 @@ function screenstepslive_listPages($the_output) {
 		
 	// Get out if we have nothing to offer.
 	if (!isset($page)) return ($the_output);
-	
+		
 	// Include necessary SS Live files
 	$sslivewp = screenstepslive_initializeObject();
 	
-	$space_id = $page['space_id'];
+	if (empty($screenstepslivePages)) {
+		$screenstepslivePages['space'] = empty($page['space_permalink']) ? $page['space_id'] : $page['space_permalink'];
+		$screenstepslivePages['manual'] = $sslivewp-&gt;CleanseID($_GET['manual_id']);
+		$screenstepslivePages['bucket'] = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+		$screenstepslivePages['lesson'] = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+	}
+	
+	/*$space_id = $page['space_id'];
 	$manual_id = $sslivewp-&gt;CleanseID($_GET['manual_id']);
-	$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+	$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);*/
 	if ($page['resource_type'] == 'bucket' &amp;&amp; $page['resource_id'] &gt; 0)
-		$bucket_id = $page['resource_id'];
+		$screenstepslivePages['bucket'] = $page['resource_id'];
 	else if ($page['resource_type'] == 'manual' &amp;&amp; $page['resource_id'] &gt; 0)
-		$manual_id = $page['resource_id'];
-	$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+		$screenstepslivePages['manual'] = $page['resource_id'];
+	/*$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);*/
 	
 	
 	// What has this page been renamed too?
-	if (empty($space_id))
+	if (empty($screenstepslivePages['space']))
 	{
 		// nothing to do	
-	}  else if (!empty($space_id) &amp;&amp; !empty($lesson_id)) {
-		if (!empty($manual_id)) {
+	}  else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['lesson'])) {
+		if (!empty( $screenstepslivePages['manual'] )) {
 			if ($page['resource_id'] == 0)
 			{
 				// Page is a 'space' page.
-				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToManual($post-&gt;ID, $space_id, $manual_id) . '&quot;&gt;' . 
-								$sslivewp-&gt;GetManualTitle($space_id, $manual_id) . '&lt;/a&gt;: ' .
-							$sslivewp-&gt;GetManualLessonTitle($space_id, $manual_id, $lesson_id);			
+				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToManual($post-&gt;ID, $screenstepslivePages['space'], $screenstepslivePages['manual']) . '&quot;&gt;' . 
+								$sslivewp-&gt;GetManualTitle($screenstepslivePages['space'], $screenstepslivePages['manual']) . '&lt;/a&gt;: ' .
+							$sslivewp-&gt;GetManualLessonTitle($screenstepslivePages['space'], $screenstepslivePages['manual'], $screenstepslivePages['lesson']);			
 			} else
 			{
 				// Page is a 'manual' page.
-				$the_title = $sslivewp-&gt;GetManualLessonTitle($space_id, $manual_id, $lesson_id);		
+				$the_title = $sslivewp-&gt;GetManualLessonTitle($screenstepslivePages['space'], $screenstepslivePages['manual'], $screenstepslivePages['lesson']);		
 			}
-		} else if (!empty($bucket_id)) {
+		} else if (!empty( $screenstepslivePages['bucket'])) {
 			if ($page['resource_id'] == 0)
 			{
 				// Page is a 'space' page.
-				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToBucket($post-&gt;ID, $space_id, $bucket_id) . '&quot;&gt;' . 
-								$sslivewp-&gt;GetBucketTitle($space_id, $bucket_id) . '&lt;/a&gt;: ' .
-							$sslivewp-&gt;GetBucketLessonTitle($space_id, $bucket_id, $lesson_id);				
+				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToBucket($post-&gt;ID, $screenstepslivePages['space'], $screenstepslivePages['bucket']) . '&quot;&gt;' . 
+								$sslivewp-&gt;GetBucketTitle($screenstepslivePages['space'], $screenstepslivePages['bucket']) . '&lt;/a&gt;: ' .
+							$sslivewp-&gt;GetBucketLessonTitle($screenstepslivePages['space'], $screenstepslivePages['bucket'], $screenstepslivePages['lesson']);				
 			} else
 			{
 				// Page is a 'manual' page.
-				$the_title = $sslivewp-&gt;GetBucketLessonTitle($space_id, $bucket_id, $lesson_id);		
+				$the_title = $sslivewp-&gt;GetBucketLessonTitle($screenstepslivePages['space'], $screenstepslivePages['bucket'], $screenstepslivePages['lesson']);		
 			}
 		}
 			
-	} else if (!empty($space_id) &amp;&amp; !empty($manual_id)) {
+	} else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['manual'])) {
 		if ($page['resource_id'] == 0)
 		{
 			// Page is a 'space' page.
-			$the_title = $sslivewp-&gt;GetManualTitle($space_id, $manual_id);	
+			$the_title = $sslivewp-&gt;GetManualTitle($screenstepslivePages['space'], $screenstepslivePages['manual']);	
 		} else
 		{
 			// Page is a 'manual' page.
 			// Nothing to do.
 		}
 		
-	} else if (!empty($space_id) &amp;&amp; !empty($bucket_id)) {		
+	} else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['bucket'])) {		
 		if ($page['resource_id'] == 0)
 		{
 			// Page is a 'space' page.
-			$the_title = $sslivewp-&gt;GetBucketTitle($space_id, $bucket_id);
+			$the_title = $sslivewp-&gt;GetBucketTitle($screenstepslivePages['space'], $screenstepslivePages['bucket']);
 		} else
 		{
 			// Page is a 'bucket' page.
@@ -226,7 +340,8 @@ function screenstepslive_listPages($the_output) {
 
 function screenstepslive_parseTitle($the_title) {
 	if (!is_page( $the_title)) return ($the_title); // cursed wp_list_pages calls this as well.
-		
+	
+	global $screenstepslivePages;
 	$postID = get_the_ID();
 	$post = &amp;get_post($postID);
 				
@@ -246,60 +361,67 @@ function screenstepslive_parseTitle($the_title) {
 	// Include necessary SS Live files
 	$sslivewp = screenstepslive_initializeObject();
 	
-	$space_id = $page['space_id'];
+	if (empty($screenstepslivePages)) {
+		$screenstepslivePages['space'] = empty($page['space_permalink']) ? $page['space_id'] : $page['space_permalink'];
+		$screenstepslivePages['manual'] = $sslivewp-&gt;CleanseID($_GET['manual_id']);
+		$screenstepslivePages['bucket'] = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+		$screenstepslivePages['lesson'] = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+	}
+	
+	/*$space_id = $page['space_id'];
 	$manual_id = $sslivewp-&gt;CleanseID($_GET['manual_id']);
-	$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+	$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);*/
 	if ($page['resource_type'] == 'bucket' &amp;&amp; $page['resource_id'] &gt; 0)
-		$bucket_id = $page['resource_id'];
+		$screenstepslivePages['bucket'] = $page['resource_id'];
 	else if ($page['resource_type'] == 'manual' &amp;&amp; $page['resource_id'] &gt; 0)
-		$manual_id = $page['resource_id'];
-	$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+		$screenstepslivePages['manual'] = $page['resource_id'];
+	/*$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']); */
 		
-	if (empty($space_id))
+	if (empty($screenstepslivePages['space']))
 	{
 		// nothing to do	
-	}  else if (!empty($space_id) &amp;&amp; !empty($lesson_id)) {
-		if (!empty($manual_id)) {
+	}  else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['lesson'])) {
+		if (!empty($screenstepslivePages['manual'])) {
 			if ($page['resource_id'] == 0)
 			{
 				// Default page is a space.
-				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToManual($post-&gt;ID, $space_id, $manual_id) . '&quot;&gt;' . 
-								$sslivewp-&gt;GetManualTitle($space_id, $manual_id) . '&lt;/a&gt;: ' .
-							$sslivewp-&gt;GetManualLessonTitle($space_id, $manual_id, $lesson_id);		
+				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToManual($post-&gt;ID, $screenstepslivePages['space'], $screenstepslivePages['manual']) . '&quot;&gt;' . 
+								$sslivewp-&gt;GetManualTitle($screenstepslivePages['space'], $screenstepslivePages['manual']) . '&lt;/a&gt;: ' .
+							$sslivewp-&gt;GetManualLessonTitle($screenstepslivePages['space'], $screenstepslivePages['manual'], $screenstepslivePages['lesson']);		
 			} else
 			{
 				// Default page is a manual.
-				$the_title = $sslivewp-&gt;GetManualLessonTitle($space_id, $manual_id, $lesson_id);		
+				$the_title = $sslivewp-&gt;GetManualLessonTitle($screenstepslivePages['space'], $screenstepslivePages['manual'], $screenstepslivePages['lesson']);		
 			}
-		} else if (!empty($bucket_id)) {
+		} else if (!empty($screenstepslivePages['bucket'])) {
 			if ($page['resource_id'] == 0)
 			{
 				// Default page is a space.
-				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToBucket($post-&gt;ID, $space_id, $bucket_id) . '&quot;&gt;' . 
-								$sslivewp-&gt;GetBucketTitle($space_id, $bucket_id) . '&lt;/a&gt;: ' .
-							$sslivewp-&gt;GetBucketLessonTitle($space_id, $bucket_id, $lesson_id);		
+				$the_title = '&lt;a href=&quot;' . $sslivewp-&gt;GetLinkToBucket($post-&gt;ID, $screenstepslivePages['space'], $screenstepslivePages['bucket']) . '&quot;&gt;' . 
+								$sslivewp-&gt;GetBucketTitle($screenstepslivePages['space'], $screenstepslivePages['bucket']) . '&lt;/a&gt;: ' .
+							$sslivewp-&gt;GetBucketLessonTitle($screenstepslivePages['space'], $screenstepslivePages['bucket'], $screenstepslivePages['lesson']);		
 			} else
 			{
 				// Default page is a bucket.
-				$the_title = $sslivewp-&gt;GetBucketLessonTitle($space_id, $bucket_id, $lesson_id);		
+				$the_title = $sslivewp-&gt;GetBucketLessonTitle($screenstepslivePages['space'], $screenstepslivePages['bucket'], $screenstepslivePages['lesson']);		
 			}
 		}
 			
-	} else if (!empty($space_id) &amp;&amp; !empty($manual_id)) {
+	} else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['manual'])) {
 		if ($page['resource_id'] == 0)
 		{
 			// Default page is a space. Get manual title.
-			$the_title = $sslivewp-&gt;GetManualTitle($space_id, $manual_id);	
+			$the_title = $sslivewp-&gt;GetManualTitle($screenstepslivePages['space'], $screenstepslivePages['manual']);	
 		} else
 		{
 			// Default page is a manual. Nothing to do.
 		}
 		
-	} else if (!empty($space_id) &amp;&amp; !empty($bucket_id)) {
+	} else if (!empty($screenstepslivePages['space']) &amp;&amp; !empty($screenstepslivePages['bucket'])) {
 		if ($page['resource_id'] == 0)
 		{
 			// Default page is a space. Get bucket title.
-			$the_title = $sslivewp-&gt;GetBucketTitle($space_id, $bucket_id);
+			$the_title = $sslivewp-&gt;GetBucketTitle($screenstepslivePages['space'], $screenstepslivePages['bucket']);
 		} else
 		{
 			// Default page is a bucket. Nothing to do.
@@ -316,6 +438,7 @@ function screenstepslive_parseTitle($the_title) {
 // Called by WordPress to process content
 function screenstepslive_parseContent($the_content)
 {	
+	global $screenstepslivePages;
 	$postID = get_the_ID();
 	$post = &amp;get_post($postID);
 
@@ -338,12 +461,23 @@ function screenstepslive_parseContent($the_content)
 		// Get out if we have nothing to offer.
 		if (!isset($page)) return false;
 		
+		//print_r($pages);
+		
 		// Include necessary SS Live files
 		$sslivewp = screenstepslive_initializeObject();
 		
-		$space_id = $page['space_id'];
-		$manual_id = $sslivewp-&gt;CleanseID($_GET['manual_id']);
-		$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+		if (empty($screenstepslivePages)) {
+			$space_id = empty($page['space_permalink']) ? $page['space_id'] : $page['space_permalink'];
+			$manual_id = $sslivewp-&gt;CleanseID($_GET['manual_id']);
+			$bucket_id = $sslivewp-&gt;CleanseID($_GET['bucket_id']);
+			$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+		} else {
+			$space_id = $screenstepslivePages['space'];
+			$manual_id = $screenstepslivePages['manual'];
+			$bucket_id = $screenstepslivePages['bucket'];
+			$lesson_id = $screenstepslivePages['lesson'];
+		}
+		
 		if ($page['resource_type'] == 'bucket' &amp;&amp; 
 			( (is_string($page['resource_id']) &amp;&amp; !empty($page['resource_id'])) || (is_int($page['resource_id']) &amp;&amp; $page['resource_id'] &gt; 0) )
 			)
@@ -353,7 +487,9 @@ function screenstepslive_parseContent($the_content)
 			( (is_string($page['resource_id']) &amp;&amp; !empty($page['resource_id'])) || (is_int($page['resource_id']) &amp;&amp; $page['resource_id'] &gt; 0) )
 			)
 			$manual_id = $page['resource_id'];
-		$lesson_id = $sslivewp-&gt;CleanseID($_GET['lesson_id']);
+		
+		////////////////////////
+		////////////////////////
 
 		if (empty($space_id))
 		{
@@ -389,7 +525,7 @@ function screenstepslive_parseContent($the_content)
 					$text .= '&lt;div class=&quot;alignright&quot;&gt;' . $next_link . '&lt;/div&gt;' . &quot;\n&quot;;
 				$text .= '&lt;div class=&quot;screenstepslive_nav_bottom&quot;&gt;&lt;/div&gt;';
 				$text .= '&lt;/div&gt;';
-				
+			
 				$text .= $sslivewp-&gt;GetLessonHTML($space_id, 'manual', $manual_id, $lesson_id);
 				
 				$text .= '&lt;div class=&quot;screenstepslive_navigation&quot;&gt;' . &quot;\n&quot;;
@@ -403,6 +539,8 @@ function screenstepslive_parseContent($the_content)
 			} else if (!empty($bucket_id)) {
 	
 				$text = $sslivewp-&gt;GetLessonHTML($space_id, 'bucket', $bucket_id, $lesson_id);
+				// Example of getting PDF link
+				// $text .= '&lt;a href=&quot;' . $sslivewp-&gt;GetManualLessonPDFURL($space_id, $manual_id, $lesson_id) . '&quot;&gt;PDF Link&lt;/a&gt;';
 			}
 			
 			$text .= $sslivewp-&gt;GetLessonComments($post-&gt;ID, $space_id, $resource_type, $resource_id, $lesson_id);
@@ -438,13 +576,16 @@ function screenstepslive_utf8_substr($str,$start)
 
 function screenstepslive_checkIfDeletedPostIsReferenced($postID) {
 	$pages = get_option('screenstepslive_pages');
-	foreach ($pages as $i =&gt; $value) {
-		if ($pages[$i]['id'] == $postID) {
-			unset($pages[$i]);
+	if (is_array($pages))
+	{
+		foreach ($pages as $i =&gt; $value) {
+			if ($pages[$i]['id'] == $postID) {
+				unset($pages[$i]);
+			}
 		}
+		update_option('screenstepslive_pages', $pages); // array_values reindexes
+		//update_option('screenstepslive_pages', array_values($pages)); // array_values reindexes
 	}
-	
-	update_option('screenstepslive_pages', array_values($pages)); // array_values reindexes
 }
 
 
@@ -493,11 +634,16 @@ function screenstepslive_optionPage()
 		$form_submitted = true;
 	}
 	
-	// Manuals form was subbmited
-	if ($_POST['pages_submitted'] == 1&amp;&amp; is_array($_POST['pages'])) {		
+	// Get list of spaces from SS Live
+	$spaces = $sslivewp-&gt;GetSpaces();
+	
+	// Manuals form was submited
+	if ($_POST['pages_submitted'] == 1 &amp;&amp; is_array($_POST['pages'])) {		
 		// Loop through posted pages, making sure they still exist. User could have deleted one.		
 		$pages = get_option('screenstepslive_pages');
 
+		//print_r($_POST['pages']);
+
 		foreach ($_POST['pages'] as $page_id =&gt; $new_page) {
 			if (isset($pages[$page_id])) {
 				if ($pages[$page_id]['space_id'] != $new_page['space_id']) {
@@ -507,9 +653,18 @@ function screenstepslive_optionPage()
 				}
 				$pages[$page_id]['space_id'] = $new_page['space_id'];
 				$pages[$page_id]['resource_type'] = 'manual';
+				
+				// Find permalink
+				foreach($spaces['space'] as $space) {
+					if ($pages[$page_id]['space_id'] == $space['id']) {
+						$pages[$page_id]['space_permalink'] = $space['permalink'];
+						break;
+					}
+				}
 			}
 		}
-			
+		
+		// print_r($pages);
 		update_option('screenstepslive_pages', $pages);
 		$form_submitted = true;
 	}
@@ -520,13 +675,15 @@ function screenstepslive_optionPage()
 			case 'create_page':
 				$postID = screenstepslive_createTemplatePage();
 				if (intval($postID) &gt; 0) {
-					$spaces = $sslivewp-&gt;GetSpaces();
+					$post = &amp;get_post($postID);
 					
 					$pages = get_option('screenstepslive_pages');
 					$pages[$postID]['id'] = $postID;
 					$pages[$postID]['space_id'] = $spaces['space'][0]['id'];
+					$pages[$postID]['space_permalink'] = $spaces['space'][0]['permalink'];
 					$pages[$postID]['resource_type'] = 'manual';
 					$pages[$postID]['resource_id'] = 0;
+					$pages[$postID]['permalink'] = $post-&gt;post_name; // this is empty
 					
 					update_option('screenstepslive_pages', $pages);
 				}
@@ -534,6 +691,10 @@ function screenstepslive_optionPage()
 		}
 	}
 	
+	// FOR TESTING
+	//$pages = get_option('screenstepslive_pages');
+	//print_r($pages);
+	
 	// UI	
 echo &lt;&lt;&lt;END
 &lt;div class=&quot;wrap&quot;&gt;
@@ -584,7 +745,7 @@ echo &lt;&lt;&lt;END
 			&lt;legend&gt;WordPress Page Settings&lt;/legend&gt;
 END;
 			
-			if (!isset($spaces)) $spaces = $sslivewp-&gt;GetSpaces();
+			//print_r($spaces);
 			if ($spaces) {
 				if (count($spaces['space']) == 0) {
 					print &quot;&lt;div&gt;No spaces were returned from the ScreenSteps Live server.&lt;/div&gt;&quot;;</diff>
      <filename>screenstepslive.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 &lt;?php
 
-// Version 1.0.2
+// Version 1.0.3
 
 // You need to get this from PEAR
 // http://pear.php.net/package/Crypt_HMAC
@@ -152,6 +152,27 @@ class SSLiveAPI {
 	}
 	
 	
+	function GetManualLessonPDFURL($space_id, $manual_id, $lesson_id) {
+		// Example URL: http://example.screensteps.com/spaces/ID/manuals/ID/lessons/ID/pdf
+		$data = '';
+	
+		/*
+		&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;	&lt;url&gt;http://s3.amazonaws.com/screensteps_dev/step_images/bmls/2380/Creating_a_Lesson.pdf?AWSAccessKeyId=19JMR1FABXNXQR79AGG2&amp;amp;Expires=1254933484&amp;amp;Signature=raqKFFhbp02cQd2kd8RQo0v51g4%3D&lt;/url&gt;
+		*/
+		
+		$lesson_id = intval($lesson_id);
+		$this-&gt;last_error = $this-&gt;requestURLData($this-&gt;getCompleteURL('/spaces/' . $space_id . '/manuals/'. $manual_id . '/lessons/' . $lesson_id . '/pdf'), $data);
+		if ($this-&gt;last_error == '') {
+			if ($this-&gt;use_simplexml)
+				return simplexml_load_string($data);
+			else
+				return $this-&gt;XMLToArray($data, 'url');
+		} else {
+			return NULL;
+		}
+	}
+	
+	
 	function GetBucketLesson($space_id, $bucket_id, $lesson_id) {
 		// Example URL: http://example.screensteps.com/spaces/ID/buckets/ID/lessons/ID
 		$data = '';
@@ -168,6 +189,22 @@ class SSLiveAPI {
 		}
 	}
 	
+	function GetBucketLessonPDFURL($space_id, $bucket_id, $lesson_id) {
+		// Example URL: http://example.screensteps.com/spaces/ID/buckets/ID/lessons/ID/pdf
+		$data = '';
+		
+		$lesson_id = intval($lesson_id);
+		$this-&gt;last_error = $this-&gt;requestURLData($this-&gt;getCompleteURL('/spaces/' . $space_id . '/buckets/'. $bucket_id . '/lessons/' . $lesson_id . '/pdf'), $data);
+		if ($this-&gt;last_error == '') {
+			if ($this-&gt;use_simplexml)
+				return simplexml_load_string($data);
+			else
+				return $this-&gt;XMLToArray($data, 'url');
+		} else {
+			return NULL;
+		}
+	}
+	
 	// Returns array of error strings (0 indexed)
 	function SubmitLessonComment($space_id, $resource_type, $resource_id, $lesson_id, $name, $email, $comment, $subscribe) {
 		
@@ -367,6 +404,9 @@ class SSLiveAPI {
 				case 'lesson':
 					$array = $this-&gt;xml_node_arrays[0]['lesson'];
 					break;
+				case 'url':
+					$array = $this-&gt;xml_node_arrays[0]['url'];
+					break;
 			}
 		}
 		
@@ -396,8 +436,8 @@ class SSLiveAPI {
 			$storeAsArrayIndex = TRUE;
 			
 			// Determine which nodes are stored as indexes and which are stored as simple keyed arrays.
-			//print '$this-&gt;xml_doc_type: ' . $this-&gt;xml_doc_type . &quot;\n&quot;;
-			//print '$parentTagName: ' . $parentTagName . &quot;\n&quot;;
+			// print '$this-&gt;xml_doc_type: ' . $this-&gt;xml_doc_type . &quot;\n&quot;;
+			// print '$parentTagName: ' . $parentTagName . &quot;\n&quot;;
 			switch ($this-&gt;xml_doc_type) {
 				case 'spaces':
 					switch ($parentTagName) {
@@ -451,6 +491,7 @@ class SSLiveAPI {
 						case 'lesson':
 						case 'manual':
 						case 'bucket':
+						case 'chapter':
 						case 'space':
 						case 'steps':
 						case 'comments':</diff>
      <filename>sslive_class.php</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,6 @@
 &lt;?php
 
-// Version 1.0.3
+// Version 1.0.4
 
 // Include ScreenSteps Live class file
 require_once(dirname(__FILE__) . '/sslive_class.php');
@@ -54,30 +54,51 @@ class SSLiveWordPress extends SSLiveAPI {
 	
 	function GetLinkToSpace($post_id, $space_id) {
 		$link_to_space = $this-&gt;GetLinkToWordPressPage($post_id);
-		return $link_to_space . 'space_id=' . $space_id;
+		if (!strstr($link_to_lesson, '?'))
+			return $link_to_space . $space_id;
+		else
+			return $link_to_space . 'space_id=' . $space_id;
 	}	
 	
 	function GetLinkToManual($post_id, $space_id, $manual_id) {
 		$link_to_manual = $this-&gt;GetLinkToWordPressPage($post_id);
-		return $link_to_manual . 'space_id=' . $space_id . '&amp;manual_id=' . $manual_id;
+		if (!strstr($link_to_lesson, '?'))
+			return $link_to_manual . $space_id . '/manual/' . $manual_id;		
+		else
+			return $link_to_manual . 'space_id=' . $space_id . '&amp;manual_id=' . $manual_id;
 	}
 	
 	
-	function GetLinkToManualLesson($post_id, $space_id, $manual_id, $lesson_id) {
+	function GetLinkToManualLesson($post_id, $space_id, $manual_id, $lesson_id, $lesson_title='') {
+		if (!empty($lesson_title)) {
+			$lesson_title = '-' . sanitize_title($lesson_title);
+		}
 		$link_to_lesson = $this-&gt;GetLinkToWordPressPage($post_id);
-		return $link_to_lesson . 'space_id=' . $space_id . '&amp;manual_id=' . $manual_id . '&amp;lesson_id=' . $lesson_id;
+		if (!strstr($link_to_lesson, '?'))
+			return $link_to_lesson . $space_id . '/manual/' . $manual_id . '/' . $lesson_id . $lesson_title;
+		else
+			return $link_to_lesson . 'space_id=' . $space_id . '&amp;manual_id=' . $manual_id . '&amp;lesson_id=' . $lesson_id . $lesson_title;
 	}
 	
 	
-	function GetLinkToBucketLesson($post_id, $space_id, $bucket_id, $lesson_id) {
+	function GetLinkToBucketLesson($post_id, $space_id, $bucket_id, $lesson_id, $lesson_title='') {
+	if (!empty($lesson_title)) {
+			$lesson_title = '-' . sanitize_title($lesson_title);
+		}
 		$link_to_lesson = $this-&gt;GetLinkToWordPressPage($post_id);
-		return $link_to_lesson . 'space_id=' . $space_id . '&amp;bucket_id=' . $bucket_id . '&amp;lesson_id=' . $lesson_id;
+		if (!strstr($link_to_lesson, '?'))
+			return $link_to_lesson . $space_id . '/bucket/' . $bucket_id . '/' . $lesson_id;
+		else
+			return $link_to_lesson . 'space_id=' . $space_id . '&amp;bucket_id=' . $bucket_id . '&amp;lesson_id=' . $lesson_id . $lesson_title;
 	}
 	
 	
 	function GetLinkToBucket($post_id, $space_id, $bucket_id) {
 		$link_to_bucket = $this-&gt;GetLinkToWordPressPage($post_id);
-		return $link_to_bucket . 'space_id=' . $space_id . '&amp;bucket_id=' . $bucket_id;
+		if (!strstr($link_to_lesson, '?'))
+			return $link_to_bucket . $space_id . '/bucket/' . $bucket_id;
+		else
+			return $link_to_bucket . 'space_id=' . $space_id . '&amp;bucket_id=' . $bucket_id;
 	}
 	
 	
@@ -152,10 +173,11 @@ class SSLiveWordPress extends SSLiveAPI {
 		if ($type == 'manual') {
 			$this-&gt;CacheManualLesson($space_id, $manual_id, $lesson_id);
 		
-			if ($this-&gt;arrays['lesson']) {		
+			if ($this-&gt;arrays['lesson']) {
 				$prevLessonID = intval($this-&gt;arrays['lesson']['manual']['previous_lesson']['id']);
 				if ($prevLessonID &gt; 0) {
-					$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $manual_id, $prevLessonID);
+					$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $manual_id, $prevLessonID, 
+						$this-&gt;arrays['lesson']['manual']['previous_lesson']['title']);
 					$link .= ('&lt;a href=&quot;' . $link_to_lesson . '&quot;&gt;' . $text . &quot;&lt;/a&gt;&quot;);
 				}
 			}
@@ -189,7 +211,8 @@ class SSLiveWordPress extends SSLiveAPI {
 			if ($this-&gt;arrays['lesson']) {
 				$nextLessonID = intval($this-&gt;arrays['lesson']['manual']['next_lesson']['id']);
 				if ($nextLessonID &gt; 0) {
-					$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $type_id, $nextLessonID);
+					$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $type_id, $nextLessonID, 
+						$this-&gt;arrays['lesson']['manual']['next_lesson']['title']);
 					$link .= ('&lt;a href=&quot;' . $link_to_lesson . '&quot;&gt;' . $text . &quot;&lt;/a&gt;&quot;);
 				}
 			}
@@ -330,7 +353,7 @@ class SSLiveWordPress extends SSLiveAPI {
 							$text .= (&quot;&lt;ul class=\&quot;screenstepslive_asset\&quot;&gt;\n&quot;);
 							foreach ($chapter['lessons']['lesson'] as $key =&gt; $lesson) {
 								$lessonID = intval($lesson['id']);
-								$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $manual_id, $lessonID);
+								$link_to_lesson = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $manual_id, $lessonID, $lesson['title']);
 								
 								$text .= ('&lt;li class=&quot;screenstepslive_asset screenstepslive_manual&quot;&gt;&lt;a href=&quot;' . $link_to_lesson . '&quot;&gt;' . $lesson['title'] . &quot;&lt;/a&gt;&lt;/li&gt;\n&quot;);
 							}
@@ -364,7 +387,7 @@ class SSLiveWordPress extends SSLiveAPI {
 					$text .= (&quot;&lt;ul class=\&quot;screenstepslive_asset\&quot;&gt;\n&quot;);
 					foreach ($array['lessons']['lesson'] as $key =&gt; $lesson) {						
 						$lessonID = intval($lesson['id']);
-						$link_to_lesson = $this-&gt;GetLinkToBucketLesson($post_id, $space_id, $bucket_id, $lessonID);
+						$link_to_lesson = $this-&gt;GetLinkToBucketLesson($post_id, $space_id, $bucket_id, $lessonID, $lesson['title']);
 						
 						$text .= ('&lt;li class=&quot;screenstepslive_asset screenstepslive_bucket&quot;&gt;&lt;a href=&quot;' . $link_to_lesson . '&quot;&gt;' . $lesson['title'] . &quot;&lt;/a&gt;&lt;/li&gt;\n&quot;);
 					}
@@ -457,7 +480,7 @@ class SSLiveWordPress extends SSLiveAPI {
 			}
 			
 			$array =&amp; $this-&gt;arrays['lesson'];
-						
+									
 			if ($array) {					
 				// Lesson Comments
 				// Use WordPress ids and layout
@@ -492,8 +515,8 @@ class SSLiveWordPress extends SSLiveAPI {
 				// Allow comments?
 				if (strtolower($array['allow_comments']) == 'true') {
 					$type_key = ($type == 'manual') ? 'manual_id' : 'bucket_id';
-					if ($type == 'manual') $formurl = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $type_id, $lesson_id);
-					else $formurl = $this-&gt;GetLinkToBucketLesson($post_id, $space_id, $type_id, $lesson_id);
+					if ($type == 'manual') $formurl = $this-&gt;GetLinkToManualLesson($post_id, $space_id, $type_id, $lesson_id, $array['title']);
+					else $formurl = $this-&gt;GetLinkToBucketLesson($post_id, $space_id, $type_id, $lesson_id, $array['title']);
 $text .= &lt;&lt;&lt;eof
 	&lt;h3 id=&quot;respond&quot;&gt;Add Your Comment&lt;/h3&gt;
 	&lt;form action=&quot;$formurl&quot; id=&quot;commentform&quot; method=&quot;post&quot;&gt;
@@ -565,10 +588,11 @@ eof;
 		$link = get_permalink($page_id);
 		if ($prepareForQuery) {
 			$urlParts = parse_url($link);
-			if ($urlParts['query'] == '')
-				$link .= '?';
-			else
+			if ($urlParts['query'] != '')
 				$link .= '&amp;';
+			// Now we support urls rather than query params
+			// else
+				//$link .= '?';
 		}
 		return $link;
 	}</diff>
      <filename>sslivewordpress_class.php</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>f498314654eab3f8d18af1b6092e082ff8f35d74</id>
    </parent>
  </parents>
  <author>
    <name>Trevor K DeVore</name>
    <email>trevordevore@Trevors-iMac-2.home</email>
  </author>
  <url>http://github.com/bluemango/screensteps-live-wordpress-plugin/commit/6daa5a66798cf242f867cad5f77f71175b5c8641</url>
  <id>6daa5a66798cf242f867cad5f77f71175b5c8641</id>
  <committed-date>2009-10-07T09:56:43-07:00</committed-date>
  <authored-date>2009-10-07T09:56:43-07:00</authored-date>
  <message>Function to get lesson PDF link, support for human readable urls, support for lesson chapter node in API XML</message>
  <tree>35580f6e431c28741a88870cf9801e3aad4c8ef1</tree>
  <committer>
    <name>Trevor K DeVore</name>
    <email>trevordevore@Trevors-iMac-2.home</email>
  </committer>
</commit>
