function flatten_tree($tree_data, $depth, $exclude_depths = array())
 {
     $ret = array();
     $num = count($tree_data);
     $i = 1;
     foreach ($tree_data as $id => $info) {
         $last = $i >= $num;
         if ($last) {
             $exclude_depths[] = $depth + 1;
         }
         //echo $id.'.';
         $ret[$id] = $info['item'];
         $ret[$id]->set_value('prepped_name', $this->prep_name($ret[$id], $depth, $last, $exclude_depths));
         $ret[$id]->set_value('depth', $depth);
         if (!$ret[$id]->get_value('url')) {
             $base_url = rtrim(reason_get_site_url($this->site), '/');
             $nice_url = $this->tree->get_nice_url($id);
             $url = $base_url . $nice_url . '/';
             $ret[$id]->set_value('url', $url);
         }
         if (!empty($info['children'])) {
             $next_depth = $depth + 1;
             $ret = $ret + $this->flatten_tree($info['children'], $next_depth, $exclude_depths);
         }
         $i++;
     }
     return $ret;
 }
 protected function get_tags_html($course, $section)
 {
     $tags_str = '';
     if ($course && ($interest_tags = $course->get_categories($section))) {
         $tags_str .= '<ul class="tagList">' . "\n";
         foreach ($interest_tags as $slug => $tag) {
             $text = htmlspecialchars($tag);
             $tags_str .= '<li><a class="interestTag" href="' . reason_get_site_url(id_of('courses_site')) . 'explore/' . htmlspecialchars($slug) . '" title="Find others with this interest">' . htmlspecialchars($tag) . '</a></li>' . "\n";
         }
         $tags_str .= '</ul>' . "\n";
     }
     return $tags_str;
 }
	/**
	 * Accepts a news item by reference and adds the url and site name
	 *
	 */
	function augment_entity(&$news_item_entity, &$valid_page_types)
	{
		static $url_builder;
		$site_id = $news_item_entity->get_value('site_id');
		$site = new entity($site_id);
		$site_unique_name = $site->get_value('unique_name');
		if (isset($this->augment_entity_handlers[$site_unique_name]))
		{
			$method_name = $this->augment_entity_handlers[$site_unique_name];
			return $this->$method_name($news_item_entity, $valid_page_types);
		}
		
		$pub_id = $news_item_entity->get_value('pub_id');
		$pub_id_array = (!is_array($pub_id)) ? array($pub_id) : $pub_id;
		
		$es = new entity_selector($site_id);
		$es->add_type(id_of('minisite_page'));
		$es->limit_tables(array('page_node'));
		$es->limit_fields(array('page_node.url_fragment'));
		$es->add_left_relationship($pub_id_array, relationship_id_of('page_to_publication'));
		$es->add_relation('page_node.custom_page IN ('.implode(",", $valid_page_types).')');
		$result = $es->run_one();
		
		if ($result)
		{
			$my_url = '';
			if (!isset($url_builder)) $url_builder = new reasonPageUrl();
			foreach ($result as $k=>$item)
			{
				$url_builder->set_id($item->id());
				$url_builder->provide_page_entity($item);
				$page_url = $url_builder->get_url_most_secure();
				if (strlen($page_url) > strlen($my_url)) $my_url = $page_url;
			}
			$parameters['story_id'] = $news_item_entity->id();
			$news_item_entity->set_value('source_name', $site->get_value('name'));
			$news_item_entity->set_value('source_url', reason_get_site_url($site));
			$news_item_entity->set_value('page_url', $my_url);
			$news_item_entity->set_value('parameters', $parameters);
			return true;
		}
		return false;
	}