2004-10-04 22:21:30 +00:00
< ? php // $Id$
2004-05-02 23:08:19 +00:00
// This file contains all the common stuff to be used in RSS System
2004-08-07 16:54:25 +00:00
//This function returns the icon (from theme) with the link to rss/file.php
2005-01-20 01:35:04 +00:00
function rss_get_link ( $courseid , $userid , $modulename , $id , $tooltiptext = '' ) {
2004-05-02 23:08:19 +00:00
2005-01-25 17:39:55 +00:00
global $CFG , $USER ;
2004-05-02 23:08:19 +00:00
static $pixpath = '' ;
static $rsspath = '' ;
2004-10-04 22:21:30 +00:00
//In site course, if no logged (userid), use admin->id. Bug 2048.
if ( $courseid == SITEID and empty ( $userid )) {
$admin = get_admin ();
$userid = $admin -> id ;
}
2006-03-03 08:03:45 +00:00
$rsspath = rss_get_url ( $courseid , $userid , $modulename , $id );
$rsspix = $CFG -> pixpath . '/i/rss.gif' ;
2007-01-08 12:47:41 +00:00
return '<a href="' . $rsspath . '"><img src="' . $rsspix . '" title="' . strip_tags ( $tooltiptext ) . '" alt="' . get_string ( 'rss' ) . '" /></a>' ;
2006-03-03 08:03:45 +00:00
}
//This function returns the URL for the RSS XML file.
function rss_get_url ( $courseid , $userid , $modulename , $id ) {
global $CFG ;
2004-05-02 23:08:19 +00:00
if ( $CFG -> slasharguments ) {
2006-02-10 03:16:59 +00:00
$rsspath = " $CFG->wwwroot /rss/file.php/ $courseid / $userid / $modulename / $id /rss.xml " ;
2004-05-02 23:08:19 +00:00
} else {
2006-02-10 03:16:59 +00:00
$rsspath = " $CFG->wwwroot /rss/file.php?file=/ $courseid / $userid / $modulename / $id /rss.xml " ;
2006-02-10 03:03:29 +00:00
}
2006-03-03 08:03:45 +00:00
return $rsspath ;
2004-05-02 23:08:19 +00:00
}
2004-08-07 16:54:25 +00:00
//This function prints the icon (from theme) with the link to rss/file.php
2005-01-20 01:35:04 +00:00
function rss_print_link ( $courseid , $userid , $modulename , $id , $tooltiptext = '' ) {
2004-08-07 16:54:25 +00:00
2005-01-27 22:45:50 +00:00
print rss_get_link ( $courseid , $userid , $modulename , $id , $tooltiptext );
2004-08-07 16:54:25 +00:00
}
2004-05-02 23:08:19 +00:00
//This function iterates over each module in the server to see if
//it supports generating rss feeds, searching for a MODULENAME_rss_feeds()
//function and invoking it foreach activity as necessary
function cron_rss_feeds () {
global $CFG ;
$status = true ;
2005-01-20 01:35:04 +00:00
mtrace ( ' Generating rssfeeds...' );
2004-05-02 23:08:19 +00:00
2004-05-20 15:19:19 +00:00
//Check for required functions...
if ( ! function_exists ( 'utf8_encode' )) {
2005-01-20 01:35:04 +00:00
mtrace ( ' ERROR: You need to add XML support to your PHP installation!' );
2004-05-20 15:19:19 +00:00
return true ;
}
2005-01-20 01:35:04 +00:00
if ( $allmods = get_records ( 'modules' ) ) {
2004-05-02 23:08:19 +00:00
foreach ( $allmods as $mod ) {
2004-08-05 17:25:15 +00:00
mtrace ( ' ' . $mod -> name . ': ' , '' );
2004-05-02 23:08:19 +00:00
$modname = $mod -> name ;
$modfile = " $CFG->dirroot /mod/ $modname /rsslib.php " ;
//If file exists and we have selected to restore that type of module
if ( file_exists ( $modfile )) {
include_once ( $modfile );
$generaterssfeeds = $modname . '_rss_feeds' ;
if ( function_exists ( $generaterssfeeds )) {
if ( $status ) {
2004-08-05 17:25:15 +00:00
mtrace ( 'generating ' , '' );;
2004-05-02 23:08:19 +00:00
$status = $generaterssfeeds ();
if ( ! empty ( $status )) {
2005-01-20 01:35:04 +00:00
mtrace ( '...OK' );
2004-05-02 23:08:19 +00:00
} else {
2005-01-20 01:35:04 +00:00
mtrace ( '...FAILED' );
2004-05-02 23:08:19 +00:00
}
} else {
2005-01-20 01:35:04 +00:00
mtrace ( '...SKIPPED (failed above)' );
2004-05-02 23:08:19 +00:00
}
} else {
2005-01-20 01:35:04 +00:00
mtrace ( '...NOT SUPPORTED (function)' );
2004-05-02 23:08:19 +00:00
}
} else {
2005-01-20 01:35:04 +00:00
mtrace ( '...NOT SUPPORTED (file)' );
2004-05-02 23:08:19 +00:00
}
}
}
2005-01-20 01:35:04 +00:00
mtrace ( ' Ending rssfeeds...' , '' );
2004-05-02 23:08:19 +00:00
if ( ! empty ( $status )) {
2005-01-20 01:35:04 +00:00
mtrace ( '...OK' );
2004-05-02 23:08:19 +00:00
} else {
2005-01-20 01:35:04 +00:00
mtrace ( '...FAILED' );
2004-05-02 23:08:19 +00:00
}
return $status ;
}
//This function saves to file the rss feed specified in the parameters
2005-01-20 01:35:04 +00:00
function rss_save_file ( $modname , $mod , $result ) {
2004-05-02 23:08:19 +00:00
global $CFG ;
$status = true ;
2005-01-20 01:35:04 +00:00
if ( ! $basedir = make_upload_directory ( 'rss/' . $modname )) {
2004-05-26 16:12:58 +00:00
//Cannot be created, so error
$status = false ;
}
2004-05-02 23:08:19 +00:00
if ( $status ) {
2004-08-05 18:06:55 +00:00
$file = rss_file_name ( $modname , $mod );
2005-01-20 01:35:04 +00:00
$rss_file = fopen ( $file , " w " );
2004-05-02 23:08:19 +00:00
if ( $rss_file ) {
2005-01-20 01:35:04 +00:00
$status = fwrite ( $rss_file , $result );
2004-05-02 23:08:19 +00:00
fclose ( $rss_file );
2004-05-26 16:12:58 +00:00
} else {
$status = false ;
2004-05-02 23:08:19 +00:00
}
}
return $status ;
}
2004-08-05 18:06:55 +00:00
function rss_file_name ( $modname , $mod ) {
global $CFG ;
return " $CFG->dataroot /rss/ $modname / $mod->id .xml " ;
}
2004-05-02 23:08:19 +00:00
//This function return all the common headers for every rss feed in the site
function rss_standard_header ( $title = NULL , $link = NULL , $description = NULL ) {
2005-01-25 17:39:55 +00:00
global $CFG , $USER ;
2004-05-02 23:08:19 +00:00
static $pixpath = '' ;
$status = true ;
$result = " " ;
if ( ! $site = get_site ()) {
$status = false ;
}
if ( $status ) {
//Calculate title, link and description
if ( empty ( $title )) {
$title = $site -> fullname ;
}
if ( empty ( $link )) {
$link = $CFG -> wwwroot ;
}
if ( empty ( $description )) {
$description = $site -> summary ;
}
//xml headers
$result .= " <?xml version= \" 1.0 \" encoding= \" UTF-8 \" ?> \n " ;
$result .= " <rss version= \" 2.0 \" > \n " ;
//open the channel
2005-01-27 22:45:50 +00:00
$result .= rss_start_tag ( 'channel' , 1 , true );
2004-05-02 23:08:19 +00:00
//write channel info
2006-09-05 03:15:09 +00:00
$result .= rss_full_tag ( 'title' , 2 , false , strip_tags ( $title ));
2005-01-27 22:45:50 +00:00
$result .= rss_full_tag ( 'link' , 2 , false , $link );
$result .= rss_full_tag ( 'description' , 2 , false , $description );
2005-12-02 07:07:44 +00:00
$result .= rss_full_tag ( 'generator' , 2 , false , 'Moodle' );
2004-12-01 19:51:45 +00:00
if ( ! empty ( $USER -> lang )) {
2005-01-27 22:45:50 +00:00
$result .= rss_full_tag ( 'language' , 2 , false , substr ( $USER -> lang , 0 , 2 ));
2004-12-01 19:51:45 +00:00
}
2004-05-02 23:08:19 +00:00
$today = getdate ();
2006-06-19 03:53:26 +00:00
$result .= rss_full_tag ( 'copyright' , 2 , false , '© ' . $today [ 'year' ] . ' ' . $site -> fullname );
2006-03-17 07:44:22 +00:00
/*
2006-03-21 20:54:50 +00:00
if ( ! empty ( $USER -> email )) {
2006-02-27 05:11:02 +00:00
$result .= rss_full_tag ( 'managingEditor' , 2 , false , fullname ( $USER ));
$result .= rss_full_tag ( 'webMaster' , 2 , false , fullname ( $USER ));
2004-12-01 19:51:45 +00:00
}
2006-03-21 20:54:50 +00:00
*/
2004-05-02 23:08:19 +00:00
//write image info
2005-01-25 17:39:55 +00:00
$rsspix = $CFG -> pixpath . " /i/rsssitelogo.gif " ;
2004-05-02 23:08:19 +00:00
//write the info
2005-01-27 22:45:50 +00:00
$result .= rss_start_tag ( 'image' , 2 , true );
$result .= rss_full_tag ( 'url' , 3 , false , $rsspix );
$result .= rss_full_tag ( 'title' , 3 , false , 'moodle' );
$result .= rss_full_tag ( 'link' , 3 , false , $CFG -> wwwroot );
$result .= rss_full_tag ( 'width' , 3 , false , '140' );
$result .= rss_full_tag ( 'height' , 3 , false , '35' );
$result .= rss_end_tag ( 'image' , 2 , true );
2004-05-02 23:08:19 +00:00
}
if ( ! $status ) {
return false ;
} else {
return $result ;
}
}
//This function returns the rss XML code for every item passed in the array
//item->title: The title of the item
2004-05-09 18:34:33 +00:00
//item->author: The author of the item. Optional !!
2004-05-02 23:08:19 +00:00
//item->pubdate: The pubdate of the item
//item->link: The link url of the item
//item->description: The content of the item
function rss_add_items ( $items ) {
global $CFG ;
2005-05-02 15:54:24 +00:00
$result = '' ;
2004-05-02 23:08:19 +00:00
if ( ! empty ( $items )) {
foreach ( $items as $item ) {
2005-05-02 15:54:24 +00:00
$result .= rss_start_tag ( 'item' , 2 , true );
2005-07-24 23:04:58 +00:00
//Include the category if exists (some rss readers will use it to group items)
if ( isset ( $item -> category )) {
$result .= rss_full_tag ( 'category' , 3 , false , $item -> category );
}
2006-09-05 03:15:09 +00:00
$result .= rss_full_tag ( 'title' , 3 , false , strip_tags ( $item -> title ));
2005-05-02 15:54:24 +00:00
$result .= rss_full_tag ( 'link' , 3 , false , $item -> link );
2006-03-21 22:35:23 +00:00
$result .= rss_add_enclosures ( $item );
2006-03-17 07:44:22 +00:00
$result .= rss_full_tag ( 'pubDate' , 3 , false , date ( 'D, d M Y H:i:s T' , $item -> pubdate ));
2004-05-09 18:34:33 +00:00
//Include the author if exists
if ( isset ( $item -> author )) {
2005-05-02 16:28:14 +00:00
//$result .= rss_full_tag('author',3,false,$item->author);
//We put it in the description instead because it's more important
//for moodle than most other feeds, and most rss software seems to ignore
//the author field ...
2006-03-28 18:46:07 +00:00
$item -> description = get_string ( 'byname' , '' , $item -> author ) . '. <p>' . $item -> description . '</p>' ;
2004-05-09 18:34:33 +00:00
}
2005-05-02 15:54:24 +00:00
$result .= rss_full_tag ( 'description' , 3 , false , $item -> description );
2006-03-28 18:46:07 +00:00
$result .= rss_full_tag ( 'guid' , 3 , false , $item -> link , array ( 'isPermaLink' => 'true' ));
2005-05-02 15:54:24 +00:00
$result .= rss_end_tag ( 'item' , 2 , true );
2004-05-02 23:08:19 +00:00
}
} else {
$result = false ;
}
return $result ;
}
//This function return all the common footers for every rss feed in the site
function rss_standard_footer ( $title = NULL , $link = NULL , $description = NULL ) {
global $CFG , $USER ;
$status = true ;
2005-05-02 15:54:24 +00:00
$result = '' ;
2004-05-02 23:08:19 +00:00
//Close the chanel
2005-01-27 22:45:50 +00:00
$result .= rss_end_tag ( 'channel' , 1 , true );
2004-05-02 23:08:19 +00:00
////Close the rss tag
2005-01-27 22:45:50 +00:00
$result .= '</rss>' ;
2004-05-02 23:08:19 +00:00
return $result ;
}
2004-12-01 19:51:45 +00:00
//This function return an error xml file (string)
//to be sent when a rss is required (file.php)
//and something goes wrong
function rss_geterrorxmlfile () {
global $CFG ;
$return = '' ;
//XML Header
$return = rss_standard_header ();
//XML item
if ( $return ) {
$item -> title = " RSS Error " ;
$item -> link = $CFG -> wwwroot ;
$item -> pubdate = time ();
$item -> description = get_string ( " rsserror " );
$return .= rss_add_items ( array ( $item ));
}
//XML Footer
if ( $return ) {
$return .= rss_standard_footer ();
}
return $return ;
}
2004-05-02 23:08:19 +00:00
// ===== This function are used to write XML tags =========
// [stronk7]: They are similar to the glossary export and backup generation
// but I've replicated them here because they have some minor
// diferences. Someday all they should go to a common place.
//Return the xml start tag
2006-03-28 18:46:07 +00:00
function rss_start_tag ( $tag , $level = 0 , $endline = false , $attributes = null ) {
2004-05-02 23:08:19 +00:00
if ( $endline ) {
$endchar = " \n " ;
} else {
$endchar = " " ;
}
2006-03-28 18:46:07 +00:00
$attrstring = '' ;
if ( ! empty ( $attributes ) && is_array ( $attributes )) {
foreach ( $attributes as $key => $value ) {
$attrstring .= " " . $key . " = \" " . $value . " \" " ;
}
}
return str_repeat ( " " , $level * 2 ) . " < " . $tag . $attrstring . " > " . $endchar ;
2004-05-02 23:08:19 +00:00
}
//Return the xml end tag
function rss_end_tag ( $tag , $level = 0 , $endline = true ) {
if ( $endline ) {
$endchar = " \n " ;
} else {
$endchar = " " ;
}
return str_repeat ( " " , $level * 2 ) . " </ " . $tag . " > " . $endchar ;
}
//Return the start tag, the contents and the end tag
2006-03-28 18:46:07 +00:00
function rss_full_tag ( $tag , $level = 0 , $endline = true , $content , $attributes = null ) {
global $CFG ;
$st = rss_start_tag ( $tag , $level , $endline , $attributes );
2004-05-02 23:08:19 +00:00
$co = " " ;
2006-11-11 17:23:20 +00:00
$co = preg_replace ( " / \r \n | \r / " , " \n " , htmlspecialchars ( $content ));
2004-05-02 23:08:19 +00:00
$et = rss_end_tag ( $tag , 0 , true );
2006-03-28 18:46:07 +00:00
2004-05-02 23:08:19 +00:00
return $st . $co . $et ;
}
2005-01-17 18:03:15 +00:00
//////////////////// LIBRARY FUNCTIONS FOR RSS_CLIENT BLOCK ////////////////
2005-01-23 15:37:47 +00:00
//initialize default config vars for rss_client block if needed
if ( ! isset ( $CFG -> block_rss_client_submitters ) ) {
2005-01-17 18:03:15 +00:00
$CFG -> block_rss_client_submitters = 1 ; //default to admin only
}
if ( empty ( $CFG -> block_rss_client_num_entries ) ) {
$CFG -> block_rss_client_num_entries = 5 ; //default to 5 entries per block
}
2005-01-23 15:37:47 +00:00
if ( ! isset ( $CFG -> block_rss_timeout ) ) {
2005-01-17 18:03:15 +00:00
$CFG -> block_rss_timeout = 30 ;
}
2005-01-23 15:37:47 +00:00
// Defines for moodle's use of magpierss classes
2006-04-05 02:43:41 +00:00
define ( 'MAGPIE_PROXY_HOST' , $CFG -> proxyhost ); // Could be empty, that's OK
define ( 'MAGPIE_PROXY_PORT' , $CFG -> proxyport ); // Could be empty, that's OK
2005-01-24 03:24:54 +00:00
define ( 'MAGPIE_DIR' , $CFG -> dirroot . '/lib/magpie/' );
2005-01-29 02:59:44 +00:00
define ( 'MAGPIE_CACHE_DIR' , $CFG -> dataroot . '/cache/rsscache' );
define ( 'MAGPIE_CACHE_ON' , true ); //might want to expose as an admin config option, but perhaps this is something that should truly just be on unless the code is tweaked
2005-01-23 15:37:47 +00:00
define ( 'MAGPIE_CACHE_FRESH_ONLY' , false ); //should be exposed as an admin config option
define ( 'MAGPIE_CACHE_AGE' , $CFG -> block_rss_timeout );
2006-09-13 09:45:07 +00:00
define ( 'MAGPIE_DEBUG' , $CFG -> debug ); // magpie, like moodle, takes an integer debug
2005-01-17 18:03:15 +00:00
2005-01-23 15:37:47 +00:00
// defines for config var block_rss_client_submitters
define ( 'SUBMITTERS_ALL_ACCOUNT_HOLDERS' , 0 );
define ( 'SUBMITTERS_ADMIN_ONLY' , 1 );
define ( 'SUBMITTERS_ADMIN_AND_TEACHER' , 2 );
2005-01-17 18:03:15 +00:00
/**
2005-08-01 14:02:46 +00:00
* @ param int $courseid The id of the course the user is currently viewing
2006-09-12 06:57:05 +00:00
* @ param int $userid We need this to know which feeds the user is allowed to manage
2005-05-15 02:46:15 +00:00
* @ param int $rssid If present the rss entry matching this id alone will be displayed
2006-09-12 06:57:05 +00:00
* as long as the user is allowed to manage this feed
* @ param object $context we need the context object to check what the user is allowed to do .
2005-01-17 18:03:15 +00:00
*/
2006-09-12 06:57:05 +00:00
function rss_display_feeds ( $courseid , $userid , $rssid = '' , $context ) {
2005-01-25 17:39:55 +00:00
global $db , $USER , $CFG ;
2005-01-17 18:03:15 +00:00
global $blogid ; //hackish, but if there is a blogid it would be good to preserve it
2005-05-17 23:35:58 +00:00
require_once ( $CFG -> libdir . '/tablelib.php' );
2005-01-20 01:35:04 +00:00
2005-05-18 00:49:45 +00:00
$select = '' ;
2006-09-28 15:06:07 +00:00
$managesharedfeeds = has_capability ( 'block/rss_client:manageanyfeeds' , $context );
2006-09-12 06:57:05 +00:00
$manageownfeeds = has_capability ( 'block/rss_client:manageownfeeds' , $context );
if ( $rssid != '' ) {
$select = 'id = ' . $rssid . ' AND ' ;
2005-05-17 23:35:58 +00:00
}
2006-09-12 06:57:05 +00:00
if ( $managesharedfeeds ) {
$select .= '(userid = ' . $userid . ' OR shared = 1)' ;
} else if ( $manageownfeeds ) {
$select .= 'userid = ' . $userid ;
2005-05-18 00:49:45 +00:00
}
2005-05-17 23:35:58 +00:00
$table = new flexible_table ( 'rss-display-feeds' );
2005-05-18 00:49:45 +00:00
$table -> define_columns ( array ( 'feed' , 'actions' ));
$table -> define_headers ( array ( get_string ( 'feed' , 'block_rss_client' ), get_string ( 'actions' , 'moodle' )));
2005-05-17 23:35:58 +00:00
$table -> set_attribute ( 'cellspacing' , '0' );
$table -> set_attribute ( 'id' , 'rssfeeds' );
$table -> set_attribute ( 'class' , 'generaltable generalbox' );
2005-05-18 00:49:45 +00:00
$table -> column_class ( 'feed' , 'feed' );
$table -> column_class ( 'actions' , 'actions' );
2005-05-17 23:35:58 +00:00
$table -> setup ();
2006-09-09 13:53:52 +00:00
$feeds = get_records_select ( 'block_rss_client' , $select , sql_order_by_text ( 'title' ));
2005-05-17 23:35:58 +00:00
if ( ! empty ( $feeds )) {
foreach ( $feeds as $feed ) {
if ( ! empty ( $feed -> preferredtitle )) {
$feedtitle = stripslashes_safe ( $feed -> preferredtitle );
} else {
$feedtitle = stripslashes_safe ( $feed -> title );
}
2006-09-12 06:57:05 +00:00
if ( ( $feed -> userid == $USER -> id && $manageownfeeds )
|| ( $feed -> shared && $managesharedfeeds ) ) {
2005-05-17 23:35:58 +00:00
2006-09-12 06:57:05 +00:00
$feedicons = '<a href="' . $CFG -> wwwroot . '/blocks/rss_client/block_rss_client_action.php?id=' . $courseid . '&act=rssedit&rssid=' . $feed -> id . '&shared=' . $feed -> shared . '&blogid=' . $blogid . '">' .
2005-05-17 23:35:58 +00:00
'<img src="' . $CFG -> pixpath . '/t/edit.gif" alt="' . get_string ( 'edit' ) . '" title="' . get_string ( 'edit' ) . '" /></a> ' .
2006-09-12 06:57:05 +00:00
'<a href="' . $CFG -> wwwroot . '/blocks/rss_client/block_rss_client_action.php?id=' . $courseid . '&act=delfeed&rssid=' . $feed -> id . '&shared=' . $feed -> shared . 'blogid=' . $blogid . ' "
2005-11-10 23:33:03 +00:00
onclick = " return confirm( \ ''. get_string('deletefeedconfirm', 'block_rss_client') .' \ '); " > ' .
2005-05-17 23:35:58 +00:00
'<img src="' . $CFG -> pixpath . '/t/delete.gif" alt="' . get_string ( 'delete' ) . '" title="' . get_string ( 'delete' ) . '" /></a>' ;
}
else {
$feedicons = '' ;
}
2005-11-10 23:33:03 +00:00
$feedinfo = '<div class="title"><a href="' . $CFG -> wwwroot . '/blocks/rss_client/block_rss_client_action.php?id=' . $courseid . '&act=view&rssid=' . $feed -> id . '&blogid=' . $blogid . '">' . $feedtitle . '</a></div><div class="url"><a href="' . $feed -> url . '">' . $feed -> url . '</a></div><div class="description">' . $feed -> description . '</div>' ;
2005-05-17 23:35:58 +00:00
$table -> add_data ( array ( $feedinfo , $feedicons ));
}
}
$table -> print_html ();
2005-01-17 18:03:15 +00:00
}
2005-01-27 01:24:33 +00:00
2005-10-02 13:59:12 +00:00
2005-08-01 14:02:46 +00:00
/**
2005-08-30 18:34:41 +00:00
* Wrapper function for rss_get_form
*/
2006-09-12 06:57:05 +00:00
function rss_print_form ( $act = 'none' , $url = '' , $rssid = '' , $preferredtitle = '' , $shared = 0 , $courseid = '' , $context ) {
print rss_get_form ( $act , $url , $rssid , $preferredtitle , $shared , $courseid , $context );
2005-08-01 14:02:46 +00:00
}
2005-10-02 13:59:12 +00:00
2005-05-15 02:46:15 +00:00
/**
* Prints or returns a form for managing rss feed entries .
2005-11-10 23:33:03 +00:00
* @ param string $act The current action . If " rssedit " then and " update " button is used , otherwise " add " is used .
2005-07-31 20:04:19 +00:00
* @ param string $url The url of the feed that is being updated or NULL
* @ param int $rssid The dataabse id of the feed that is being updated or NULL
2006-09-12 06:57:05 +00:00
* @ param string $preferredtitle The preferred title to display for this feed
* @ param int $shared Whether this feed is to be shared or not
* @ param int $courseid The id of the course that is currently being viewed if applicable
* @ param object $context The context that we will use to check for permissions
2005-07-31 20:04:19 +00:00
* @ return string Either the form is printed directly and nothing is returned or the form is returned as a string
2005-05-15 02:46:15 +00:00
*/
2006-09-12 06:57:05 +00:00
function rss_get_form ( $act = 'none' , $url = '' , $rssid = '' , $preferredtitle = '' , $shared = 0 , $courseid = '' , $context ) {
2005-05-15 02:46:15 +00:00
global $USER , $CFG , $_SERVER , $blockid , $blockaction ;
global $blogid ; //hackish, but if there is a blogid it would be good to preserve it
$stredit = get_string ( 'edit' );
$stradd = get_string ( 'add' );
2005-05-17 15:45:54 +00:00
$strupdatefeed = get_string ( 'updatefeed' , 'block_rss_client' );
$straddfeed = get_string ( 'addfeed' , 'block_rss_client' );
2005-05-15 02:46:15 +00:00
2005-08-01 14:02:46 +00:00
$returnstring = '<table align="center"><tbody><tr><td>' . " \n " ;
2007-01-04 21:32:36 +00:00
$returnstring .= '<form action="' . $CFG -> wwwroot . '/blocks/rss_client/block_rss_client_action.php" method="post" id="block_rss">' . " \n " ;
2005-08-01 14:02:46 +00:00
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= $strupdatefeed ;
} else {
$returnstring .= $straddfeed ;
}
2005-08-01 14:02:46 +00:00
2005-05-15 02:46:15 +00:00
$returnstring .= " \n " . '<br /><input type="text" size="60" maxlength="256" name="url" value="' ;
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= $url ;
}
2005-08-01 14:02:46 +00:00
2005-05-15 02:46:15 +00:00
$returnstring .= '" />' . " \n " ;
2005-05-17 15:45:54 +00:00
$returnstring .= '<br />' . get_string ( 'customtitlelabel' , 'block_rss_client' );
2005-11-10 23:33:03 +00:00
$returnstring .= '<br /><input type="text" size="60" maxlength="128" name="preferredtitle" value="' ;
2005-08-01 14:02:46 +00:00
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= $preferredtitle ;
}
2005-08-01 14:02:46 +00:00
$returnstring .= '" />' . " \n " ;
2006-09-12 06:57:05 +00:00
if ( has_capability ( 'block/rss_client:createsharedfeeds' , $context )) {
$returnstring .= '<br /><input type="checkbox" name="shared" value="1" ' ;
if ( $shared ) {
$returnstring .= 'checked="checked" ' ;
}
$returnstring .= '/> ' ;
$returnstring .= get_string ( 'sharedfeed' , 'block_rss_client' );
$returnstring .= '<br />' . " \n " ;
}
2005-05-15 02:46:15 +00:00
$returnstring .= '<input type="hidden" name="act" value="' ;
2005-08-01 14:02:46 +00:00
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= 'updfeed' ;
} else {
$returnstring .= 'addfeed' ;
}
2005-08-01 14:02:46 +00:00
2005-05-15 02:46:15 +00:00
$returnstring .= '" />' . " \n " ;
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= '<input type="hidden" name="rssid" value="' . $rssid . '" />' . " \n " ;
}
2005-08-01 14:02:46 +00:00
$returnstring .= '<input type="hidden" name="id" value="' . $courseid . '" />' . " \n " ;
2005-05-15 02:46:15 +00:00
$returnstring .= '<input type="hidden" name="blogid" value="' . $blogid . '" />' . " \n " ;
$returnstring .= '<input type="hidden" name="user" value="' . $USER -> id . '" />' . " \n " ;
$returnstring .= '<br /><input type="submit" value="' ;
$validatestring = " <a href= \" # \"
2007-01-08 19:34:16 +00:00
onClick = \ " window.open('http://feedvalidator.org/check.cgi?url='+getElementId('block_rss').elements['url'].value,'validate','width=640,height=480,scrollbars=yes,status=yes,resizable=yes');return true; \" /> " . get_string ( 'validatefeed' , 'block_rss_client' ) . " </a> " ;
2005-08-01 14:02:46 +00:00
2005-11-10 23:33:03 +00:00
if ( $act == 'rssedit' ) {
2005-05-15 02:46:15 +00:00
$returnstring .= $stredit ;
} else {
$returnstring .= $stradd ;
}
2005-08-01 14:02:46 +00:00
2005-05-15 02:46:15 +00:00
$returnstring .= '" /> ' . $validatestring . '</form>' . " \n " ;
$returnstring .= '</td></tr></tbody></table>' . " \n " ;
return $returnstring ;
}
2005-12-02 07:07:44 +00:00
/**
2006-03-21 22:35:23 +00:00
* Adds RSS Media Enclosures for " podcasting " by examining links to media files ,
* and attachments which are media files . Please note that the RSS that is
* produced cannot be strictly valid for the linked files , since we do not know
* the files ' sizes and cannot include them in the " length " attribute . At
* present , the validity ( and therefore the podcast working in most software )
* can only be ensured for attachments , and not for links .
* Note also that iTunes does some things very badly - one thing it does is
* refuse to download ANY of your files if you ' re using " file.php?file=blah "
* and can ' t use the more elegant " file.php/blah " slasharguments setting . It
* stops after " .php " and assumes the files are not media files , despite what
* is specified in the " type " attribute . Dodgy coding all round !
2005-12-02 07:07:44 +00:00
*
* @ param $item object representing an RSS item
* @ return string RSS enclosure tags
* @ author Hannes Gassert < hannes @ mediagonal . ch >
2006-03-21 22:35:23 +00:00
* @ author Dan Stowell
2005-12-02 07:07:44 +00:00
*/
function rss_add_enclosures ( $item ){
$returnstring = '' ;
$rss_text = $item -> description ;
// list of media file extensions and their respective mime types
// could/should we put this to some more central place?
$mediafiletypes = array (
'mp3' => 'audio/mpeg' ,
'm3u' => 'audio/x-mpegurl' ,
'pls' => 'audio/x-mpegurl' ,
'ogg' => 'application/ogg' ,
'm4b' => 'audio/x-m4b' ,
'mpeg' => 'video/mpg' ,
'mpg' => 'video/mpg' ,
'mov' => 'video/quicktime' ,
'avi' => 'video/x-msvideo' ,
'wmv' => 'video/x-msvideo'
);
// regular expression (hopefully) matching all links to media files
$medialinkpattern = '@href\s*=\s*(\'|")(\S+(' . implode ( '|' , array_keys ( $mediafiletypes )) . '))\1@Usie' ;
2006-03-17 07:44:22 +00:00
// take into account attachments (e.g. from forum) - with these, we are able to know the file size
if ( isset ( $item -> attachments ) && is_array ( $item -> attachments )) {
foreach ( $item -> attachments as $attachment ){
$type = $mediafiletypes [ substr ( $attachment -> url , strrpos ( $attachment -> url , '.' ) + 1 )];
2006-03-21 22:35:23 +00:00
$returnstring .= " \n <enclosure url= \" $attachment->url\ " length = \ " $attachment->length\ " type = \ " $type\ " /> \n " ;
2006-03-17 07:44:22 +00:00
}
}
2005-12-02 07:07:44 +00:00
if ( ! preg_match_all ( $medialinkpattern , $rss_text , $matches )){
return $returnstring ;
}
// loop over matches of regular expression
for ( $i = 0 ; $i < count ( $matches [ 2 ]); $i ++ ){
$url = htmlspecialchars ( $matches [ 2 ][ $i ]);
$type = $mediafiletypes [ strtolower ( $matches [ 3 ][ $i ])];
// the rss_*_tag functions can't deal with methods, unfortunately
$returnstring .= " \n <enclosure url=' $url ' type=' $type ' /> \n " ;
}
return $returnstring ;
}
2006-01-04 08:23:42 +00:00
?>