2004-12-14 18:09:20 +00:00
< ? php //$Id$
2005-06-28 21:21:59 +00:00
/*******************************************************************
2005-08-11 15:27:47 +00:00
* This file contains no classes . It will display a list of existing feeds
* defined for the site and allow add / edit / delete of site feeds .
2005-06-28 21:21:59 +00:00
*
* @ author Daryl Hawes
* @ version $Id $
* @ license http :// www . gnu . org / copyleft / gpl . html GNU Public License
* @ package base
******************************************************************/
2005-08-11 15:27:47 +00:00
require_once ( '../../config.php' );
require_once ( $CFG -> libdir . '/rsslib.php' );
require_once ( MAGPIE_DIR . 'rss_fetch.inc' );
require_login ();
global $USER ;
//ensure that the logged in user is not using the guest account
if ( isset ( $_SERVER [ 'HTTP_REFERER' ])) {
$referrer = $_SERVER [ 'HTTP_REFERER' ];
} else {
$referrer = $CFG -> wwwroot ;
}
if ( isguest ()) {
error ( get_string ( 'noguestpost' , 'forum' ), $referrer );
}
$act = optional_param ( 'act' , 'none' );
$rssid = optional_param ( 'rssid' , 'none' );
$id = optional_param ( 'id' , SITEID , PARAM_INT );
$url = optional_param ( 'url' );
$preferredtitle = optional_param ( 'preferredtitle' , '' );
$item = optional_param ( 'item' );
if ( ! defined ( 'MAGPIE_OUTPUT_ENCODING' )) {
define ( 'MAGPIE_OUTPUT_ENCODING' , get_string ( 'thischarset' )); // see bug 3107
}
if ( ! empty ( $id )) {
// we get the complete $course object here because print_header assumes this is
// a complete object (needed for proper course theme settings)
$course = get_record ( 'course' , 'id' , $id );
}
$straddedit = get_string ( 'feedsaddedit' , 'block_rss_client' );
if ( isadmin () ) {
$stradmin = get_string ( 'administration' );
$strconfiguration = get_string ( 'configuration' );
$navigation = " <a href= \" $CFG->wwwroot / $CFG->admin /index.php \" > $stradmin </a> -> " .
" <a href= \" $CFG->wwwroot / $CFG->admin /configure.php \" > $strconfiguration </a> -> $straddedit " ;
} else if ( ! empty ( $course )) {
$navigation = " <a href= \" $CFG->wwwroot /course/view.php?id= $id\ " > $course -> shortname </ a > -> $straddedit " ;
} else {
$navigation = $straddedit ;
}
print_header ( get_string ( 'feedsaddedit' , 'block_rss_client' ),
get_string ( 'feedsaddedit' , 'block_rss_client' ),
$navigation );
//check to make sure that the user is allowed to post new feeds
$submitters = $CFG -> block_rss_client_submitters ;
$isteacher = false ;
if ( ! empty ( $course )) {
$isteacher = isteacher ( $id );
}
$rss_record = get_record ( 'block_rss_client' , 'id' , $rssid );
//if the user is an admin or course teacher then allow the user to
//assign categories to other uses than personal
if ( ! ( isadmin () || $submitters == SUBMITTERS_ALL_ACCOUNT_HOLDERS ||
( $submitters == SUBMITTERS_ADMIN_AND_TEACHER && $isteacher ) ||
2005-10-02 13:48:33 +00:00
( ( $act == 'rss_edit' || $act == 'delfeed' || $act == 'updfeed' ) && $USER -> id == $rss_record -> userid ) ) ) {
2005-08-11 15:27:47 +00:00
error ( get_string ( 'noguestpost' , 'forum' ) . ' You are not allowed to make modifications to this RSS feed at this time.' , $referrer );
}
2005-08-01 14:02:46 +00:00
2005-08-11 15:27:47 +00:00
if ( $act == 'none' ) {
rss_display_feeds ( $id );
rss_print_form ( $act , $url , $rssid , $preferredtitle , $id );
2005-05-04 14:28:46 +00:00
2005-08-11 15:27:47 +00:00
} else if ( $act == 'updfeed' ) {
if ( empty ( $url )) {
error ( 'url not defined for rss feed' );
2005-05-04 14:28:46 +00:00
}
2005-06-13 02:38:48 +00:00
2005-08-11 15:27:47 +00:00
// By capturing the output from fetch_rss this way
// error messages do not display and clutter up the moodle interface
// however, we do lose out on seeing helpful messages like "cache hit", etc.
$message = '' ;
ob_start ();
$rss = fetch_rss ( $url );
if ( $CFG -> debug ) {
$message .= ob_get_contents ();
2005-06-13 02:38:48 +00:00
}
2005-08-11 15:27:47 +00:00
ob_end_clean ();
2005-06-13 02:38:48 +00:00
2005-08-11 15:27:47 +00:00
$dataobject -> id = $rssid ;
if ( $rss === false ) {
$dataobject -> description = '' ;
$dataobject -> title = '' ;
$dataobject -> preferredtitle = '' ;
2005-01-24 02:58:19 +00:00
} else {
2005-08-11 15:27:47 +00:00
$dataobject -> description = addslashes ( rss_unhtmlentities ( $rss -> channel [ 'description' ]));
$dataobject -> title = addslashes ( rss_unhtmlentities ( $rss -> channel [ 'title' ]));
$dataobject -> preferredtitle = addslashes ( $preferredtitle );
2005-01-24 02:58:19 +00:00
}
2005-08-11 15:27:47 +00:00
$dataobject -> url = addslashes ( $url );
2005-08-11 12:45:38 +00:00
2005-08-11 15:27:47 +00:00
if ( ! update_record ( 'block_rss_client' , $dataobject )) {
error ( 'There was an error trying to update rss feed with id:' . $rssid );
2004-12-14 18:09:20 +00:00
}
2005-06-13 02:38:48 +00:00
2005-08-11 15:27:47 +00:00
$message .= '<br />' . get_string ( 'feedupdated' , 'block_rss_client' );
redirect ( $referrer , $message );
2005-08-01 14:02:46 +00:00
2005-08-11 15:27:47 +00:00
} else if ( $act == 'addfeed' ) {
2004-12-14 18:09:20 +00:00
2005-08-11 15:27:47 +00:00
if ( empty ( $url )) {
error ( 'url not defined for rss feed' );
}
$dataobject -> userid = $USER -> id ;
$dataobject -> description = '' ;
$dataobject -> title = '' ;
$dataobject -> url = addslashes ( $url );
$dataobject -> preferredtitle = addslashes ( $preferredtitle );
$rssid = insert_record ( 'block_rss_client' , $dataobject );
if ( ! $rssid ) {
error ( 'There was an error trying to add a new rss feed:' . $url );
}
2004-12-14 18:09:20 +00:00
2005-08-11 15:27:47 +00:00
// By capturing the output from fetch_rss this way
// error messages do not display and clutter up the moodle interface
// however, we do lose out on seeing helpful messages like "cache hit", etc.
$message = '' ;
ob_start ();
$rss = fetch_rss ( $url );
if ( $CFG -> debug ) {
$message .= ob_get_contents ();
}
ob_end_clean ();
2005-08-11 12:45:38 +00:00
2005-08-11 15:27:47 +00:00
if ( $rss === false ) {
$message .= '<br /><br />There was an error loading this rss feed. You may want to verify the url you have specified before using it.' ; //Daryl Hawes note: localize this line
} else {
2005-08-11 12:45:38 +00:00
2004-12-14 18:09:20 +00:00
$dataobject -> id = $rssid ;
2005-08-11 15:27:47 +00:00
if ( ! empty ( $rss -> channel [ 'description' ])) {
2005-01-27 01:43:29 +00:00
$dataobject -> description = addslashes ( rss_unhtmlentities ( $rss -> channel [ 'description' ]));
2005-01-23 19:40:33 +00:00
}
2005-08-11 15:27:47 +00:00
if ( ! empty ( $rss -> channel [ 'title' ])) {
$dataobject -> title = addslashes ( rss_unhtmlentities ( $rss -> channel [ 'title' ]));
}
2004-12-14 18:09:20 +00:00
if ( ! update_record ( 'block_rss_client' , $dataobject )) {
error ( 'There was an error trying to update rss feed with id:' . $rssid );
}
2005-08-11 15:27:47 +00:00
$message .= '<br />' . get_string ( 'feedadded' , 'block_rss_client' );
}
redirect ( $referrer , $message );
/*
rss_display_feeds ( $id );
rss_print_form ( $act , $dataobject -> url , $dataobject -> id , $dataobject -> preferredtitle , $id );
*/
} else if ( $act == 'rss_edit' ) {
2005-01-27 01:43:29 +00:00
2005-08-11 15:27:47 +00:00
$preferredtitle = stripslashes_safe ( $rss_record -> preferredtitle );
if ( empty ( $preferredtitle )) {
$preferredtitle = stripslashes_safe ( $rss_record -> title );
}
$url = stripslashes_safe ( $rss_record -> url );
rss_display_feeds ( $id , '' , $rssid );
rss_print_form ( $act , $url , $rssid , $preferredtitle , $id );
2005-06-28 21:21:59 +00:00
2005-08-11 15:27:47 +00:00
} else if ( $act == 'delfeed' ) {
2005-01-27 01:43:29 +00:00
2005-08-11 15:27:47 +00:00
$file = $CFG -> dataroot . '/cache/rsscache/' . $rssid . '.xml' ;
if ( file_exists ( $file )) {
unlink ( $file );
}
2005-01-27 01:43:29 +00:00
2005-08-11 15:27:47 +00:00
// echo "DEBUG: act = delfeed"; //debug
//Daryl Hawes note: convert this sql statement to a moodle function call
$sql = 'DELETE FROM ' . $CFG -> prefix . 'block_rss_client WHERE id=' . $rssid ;
$res = $db -> Execute ( $sql );
redirect ( $referrer , get_string ( 'feeddeleted' , 'block_rss_client' ) );
2005-01-27 01:43:29 +00:00
2005-08-11 15:27:47 +00:00
} else if ( $act == 'view' ) {
// echo $sql; //debug
// print_object($res); //debug
if ( ! $rss_record -> id ) {
print '<strong>' . get_string ( 'couldnotfindfeed' , 'block_rss_client' ) . ': ' . $rssid . '</strong>' ;
} else {
2005-01-23 19:40:33 +00:00
// By capturing the output from fetch_rss this way
// error messages do not display and clutter up the moodle interface
// however, we do lose out on seeing helpful messages like "cache hit", etc.
ob_start ();
2005-08-11 15:27:47 +00:00
$rss = fetch_rss ( $rss_record -> url );
2005-01-23 19:40:33 +00:00
ob_end_clean ();
2005-08-11 12:45:38 +00:00
2005-08-11 15:27:47 +00:00
if ( empty ( $rss_record -> preferredtitle )) {
$feedtitle = stripslashes_safe ( $rss_record -> preferredtitle );
2005-01-23 19:40:33 +00:00
} else {
2005-08-11 15:27:47 +00:00
$feedtitle = stripslashes_safe ( rss_unhtmlentities ( $rss -> channel [ 'title' ]));
2004-12-14 18:09:20 +00:00
}
2005-08-11 15:27:47 +00:00
print '<table align="center" width="50%" cellspacing="1">' . " \n " ;
print '<tr><td colspan="2"><strong>' . $feedtitle . '</strong></td></tr>' . " \n " ;
for ( $y = 0 ; $y < count ( $rss -> items ); $y ++ ) {
$rss -> items [ $y ][ 'title' ] = stripslashes_safe ( rss_unhtmlentities ( $rss -> items [ $y ][ 'title' ]));
$rss -> items [ $y ][ 'description' ] = stripslashes_safe ( rss_unhtmlentities ( $rss -> items [ $y ][ 'description' ]));
if ( $rss -> items [ $y ][ 'link' ] == '' ) {
$rss -> items [ $y ][ 'link' ] = $rss -> items [ $y ][ 'guid' ];
}
2004-12-14 18:09:20 +00:00
2005-08-11 15:27:47 +00:00
if ( $rss -> items [ $y ][ 'title' ] == '' ) {
$rss -> items [ $y ][ 'title' ] = '>>' ;
}
2004-12-14 18:09:20 +00:00
2005-08-11 15:27:47 +00:00
print '<tr><td valign="middle">' . " \n " ;
print '<a href="' . $rss -> items [ $y ][ 'link' ] . '" target="_blank"><strong>' . $rss -> items [ $y ][ 'title' ];
print '</strong></a>' . " \n " ;
print '</td>' . " \n " ;
if ( file_exists ( $CFG -> dirroot . '/blog/lib.php' )) {
//Blog module is installed - provide "blog this" link
print '<td align="right">' . " \n " ;
print '<img src="' . $CFG -> pixpath . '/blog/blog.gif" alt="' . get_string ( 'blogthis' , 'blog' ) . '" title="' . get_string ( 'blogthis' , 'blog' ) . '" border="0" align="middle" />' . " \n " ;
print '<a href="' . $CFG -> wwwroot . '/blog/blogthis.php?userid=' . $userid . '&act=use&item=' . $y . '&rssid=' . $rssid . '"><small><strong>' . get_string ( 'blogthis' , 'blog' ) . '</strong></small></a>' . " \n " ;
2005-01-27 22:47:13 +00:00
} else {
2005-08-11 15:27:47 +00:00
print '<td> ' ;
2005-01-27 22:47:13 +00:00
}
2005-08-11 15:27:47 +00:00
print '</td></tr>' . " \n " ;
print '<tr><td colspan=2><small>' ;
print $rss -> items [ $y ][ 'description' ] . '</small></td></tr>' . " \n " ;
2004-12-14 18:09:20 +00:00
}
2005-08-11 15:27:47 +00:00
print '</table>' . " \n " ;
2004-12-14 18:09:20 +00:00
}
2005-08-11 15:27:47 +00:00
} else {
rss_display_feeds ( $id );
rss_print_form ( $act , $url , $rssid , $preferredtitle , $id );
}
2004-12-14 18:09:20 +00:00
2005-08-11 15:27:47 +00:00
print_footer ();
2005-08-11 12:45:38 +00:00
?>