You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							213 lines
						
					
					
						
							6.0 KiB
						
					
					
				
			
		
		
	
	
							213 lines
						
					
					
						
							6.0 KiB
						
					
					
				<?php
 | 
						|
 | 
						|
/**
 | 
						|
 * Formats in RSS the courses notices returned by CourseNoticeQuery.
 | 
						|
 * 
 | 
						|
 * View of CourseNotice
 | 
						|
 *
 | 
						|
 * @license see /license.txt
 | 
						|
 * @author Laurent Opprecht <laurent@opprecht.info> for the Univesity of Geneva
 | 
						|
 */
 | 
						|
class CourseNoticeRss
 | 
						|
{
 | 
						|
 | 
						|
    protected $query;
 | 
						|
 | 
						|
    function __construct($user_id = null, $limit = 20)
 | 
						|
    {
 | 
						|
        $this->query = CourseNoticeQuery::create($user_id, $limit);
 | 
						|
    }
 | 
						|
 | 
						|
    /**
 | 
						|
     * unique id used by the cache 
 | 
						|
     */
 | 
						|
    function get_unique_id()
 | 
						|
    {
 | 
						|
        return strtolower(__CLASS__) . $this->get_query()->get_user_id();
 | 
						|
    }
 | 
						|
    
 | 
						|
    /**
 | 
						|
     *
 | 
						|
     * @return CourseNoticeQuery
 | 
						|
     */
 | 
						|
    function get_query()
 | 
						|
    {
 | 
						|
        return $this->query;
 | 
						|
    }
 | 
						|
 | 
						|
    function get_title()
 | 
						|
    {
 | 
						|
        return get_lang('CourseRssTitle');
 | 
						|
    }
 | 
						|
 | 
						|
    function get_description()
 | 
						|
    {
 | 
						|
        return get_lang('CourseRssDescription');
 | 
						|
    }
 | 
						|
    
 | 
						|
    function to_string()
 | 
						|
    {
 | 
						|
        return (string)$this;
 | 
						|
    }
 | 
						|
    
 | 
						|
    function __toString()
 | 
						|
    {
 | 
						|
        ob_start();
 | 
						|
        $this->display();
 | 
						|
        $result = ob_get_clean();
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    function display()
 | 
						|
    {
 | 
						|
        $channel = $this->channel();
 | 
						|
 | 
						|
        echo <<<EOT
 | 
						|
<?xml version="1.0" encoding="UTF-8"?>
 | 
						|
<rss version="2.0"
 | 
						|
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
 | 
						|
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
 | 
						|
    xmlns:dc="http://purl.org/dc/elements/1.1/"
 | 
						|
    xmlns:atom="http://www.w3.org/2005/Atom"
 | 
						|
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
 | 
						|
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
 | 
						|
>
 | 
						|
 | 
						|
<channel>
 | 
						|
    <title>{$channel->title}</title>
 | 
						|
    <atom:link href="" rel="self" type="application/rss+xml" />
 | 
						|
    <link>{$channel->link}</link>
 | 
						|
    <description>{$channel->description}</description>
 | 
						|
    <lastBuildDate>{$channel->last_build_date}</lastBuildDate>
 | 
						|
    <language>{$channel->language}</language>
 | 
						|
    <sy:updatePeriod>{$channel->update_period}</sy:updatePeriod>
 | 
						|
    <sy:updateFrequency>{$channel->update_frequency}</sy:updateFrequency>
 | 
						|
    <generator>{$channel->generator}</generator>
 | 
						|
EOT;
 | 
						|
 | 
						|
        foreach ($channel->items as $item)
 | 
						|
        {
 | 
						|
            echo <<<EOT
 | 
						|
            
 | 
						|
    <item>
 | 
						|
        <title>{$item->title}</title>
 | 
						|
        <link>{$item->link}</link>
 | 
						|
        <pubDate>{$item->date}</pubDate>
 | 
						|
        <dc:creator>{$item->author}</dc:creator>
 | 
						|
        <category><![CDATA[{$item->course_title}]]></category>
 | 
						|
        <description><![CDATA[{$item->description}]]></description>
 | 
						|
    </item>
 | 
						|
 | 
						|
EOT;
 | 
						|
        }
 | 
						|
        echo '</channel></rss>';
 | 
						|
    }
 | 
						|
 | 
						|
    function channel()
 | 
						|
    {
 | 
						|
        $result = (object) array();
 | 
						|
        $result->title = $this->get_title();
 | 
						|
        $result->description = $this->get_description();
 | 
						|
        $result->link = Uri::www();
 | 
						|
        $result->last_build_date = time();
 | 
						|
        $result->language = api_get_language_isocode();
 | 
						|
        $result->update_period = 'hourly';
 | 
						|
        $result->update_frequency = 1;
 | 
						|
        $result->generator = Uri::chamilo();
 | 
						|
 | 
						|
        $items = $this->get_query()->get_items();
 | 
						|
        $items = $this->format($items);
 | 
						|
        $result->items = $items;
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format($items)
 | 
						|
    {
 | 
						|
        $result = array();
 | 
						|
        foreach ($items as $item)
 | 
						|
        {
 | 
						|
            $result[] = $this->format_item($item);
 | 
						|
        }
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format_item($item)
 | 
						|
    {
 | 
						|
        $result = (object) array();
 | 
						|
        $item = (object) $item;
 | 
						|
 | 
						|
        $author = (object) UserManager::get_user_info_by_id($item->lastedit_user_id);
 | 
						|
 | 
						|
        $result->title = $item->title;
 | 
						|
        $result->description = $item->description;
 | 
						|
        $result->description .= $result->description ? '<br/>' : '';
 | 
						|
        $result->description .= '<i>' . $item->course_title . ' > ' . $this->get_tool_lang($item->tool) . ' > ' . $item->title . '</i>';
 | 
						|
 | 
						|
        $result->date = date('r', strtotime($item->lastedit_date));
 | 
						|
        $result->author = htmlentities($author->firstname . ' ' . $author->lastname . ' <' . $author->email . '>');
 | 
						|
        $result->author_email = $author->email;
 | 
						|
        $result->tool = $item->tool;
 | 
						|
        $result->course_code = $item->code;
 | 
						|
        $result->course_title = $item->course_title;
 | 
						|
        $result->course_description = $item->course_description;
 | 
						|
        $result->course_id = $item->c_id;
 | 
						|
 | 
						|
        $tool = $item->tool;
 | 
						|
        $f = array($this, "format_$tool");
 | 
						|
        if (is_callable($f))
 | 
						|
        {
 | 
						|
            call_user_func($f, $result, $item);
 | 
						|
        }
 | 
						|
        return $result;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function get_tool_lang($tool_name)
 | 
						|
    {
 | 
						|
        if ($tool_name = TOOL_CALENDAR_EVENT)
 | 
						|
        {
 | 
						|
            return get_lang('Agenda');
 | 
						|
        }
 | 
						|
        else if ($tool_name = TOOL_DOCUMENT)
 | 
						|
        {
 | 
						|
            return get_lang('Document');
 | 
						|
        }
 | 
						|
        else if ($tool_name = TOOL_LINK)
 | 
						|
        {
 | 
						|
            return get_lang('Link');
 | 
						|
        }
 | 
						|
        else if ($tool_name = TOOL_ANNOUNCEMENT)
 | 
						|
        {
 | 
						|
            return get_lang('Announcement');
 | 
						|
        }
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format_document($result, $item)
 | 
						|
    {
 | 
						|
        $params = Uri::course_params($item->code, $item->session_id, $item->to_group_id);
 | 
						|
        $params['id'] = $item->ref;
 | 
						|
        $params['action'] = 'download';
 | 
						|
        $result->link = Uri::url('main/document/document.php', $params);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format_announcement($result, $item)
 | 
						|
    {
 | 
						|
        $params = Uri::course_params($item->code, $item->session_id, $item->to_group_id);
 | 
						|
        $params['id'] = $item->ref;
 | 
						|
        $params['action'] = 'view';
 | 
						|
        $result->link = Uri::url('main/announcements/announcements.php', $params);
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format_link($result, $item)
 | 
						|
    {
 | 
						|
        $result->link = $item->url;
 | 
						|
    }
 | 
						|
 | 
						|
    protected function format_calendar_event($result, $item)
 | 
						|
    {
 | 
						|
        $params = Uri::course_params($item->code, $item->session_id, $item->to_group_id);
 | 
						|
        // . 'calendar/agenda.php?cidReq=' . $item->code . '#' . $item->id;        
 | 
						|
        $result->link = Uri::url('main/calendar/agenda.php', $params);
 | 
						|
        //$result->description .= '<br/><i>' . $course->title . ' > ' . get_lang('Agenda') . ' > ' . $item->title . '</i>';
 | 
						|
    }
 | 
						|
 | 
						|
} |