libdir .'/rsslib.php');
require_once(MAGPIE_DIR .'rss_fetch.inc');
require_login();
//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);
}
optional_variable($act, 'none');
optional_variable($rssid, 'none');
optional_variable($courseid, 'none');
optional_variable($url);
optional_variable($preferredtitle, '');
optional_variable($item);
$straddedit = get_string('block_rss_feeds_add_edit', 'block_rss_client');
if ( isadmin() ) {
$stradmin = get_string('administration');
$strconfiguration = get_string('configuration');
$navigation = "wwwroot/$CFG->admin/index.php\">$stradmin -> ".
"wwwroot/$CFG->admin/configure.php\">$strconfiguration -> $straddedit";
} else if ($courseid != 'none' && $course = get_record('course', 'id', $courseid) ) {
$navigation = "wwwroot/course/view.php?id=$course->id\">$course->shortname -> $straddedit";
} else {
$navigation = $straddedit;
}
print_header(get_string('block_rss_feeds_add_edit', 'block_rss_client'),
get_string('block_rss_feeds_add_edit', '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 ($courseid != 'none'){
$isteacher = isteacher($courseid);
}
//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) ) ) {
error(get_string('noguestpost', 'forum'), $referrer);
}
if ($act == 'none') {
rss_display_feeds();
rss_get_form($act, $url, $rssid, $preferredtitle);
} else if ($act == 'updfeed') {
require_variable($url);
// 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();
$rss = fetch_rss($url);
$rsserror = ob_get_contents();
ob_end_clean();
$dataobject->id = $rssid;
if ($rss === false) {
$dataobject->description = '';
$dataobject->title = '';
$dataobject->preferredtitle = '';
} else {
$dataobject->description = addslashes(rss_unhtmlentities($rss->channel['description']));
$dataobject->title = addslashes(rss_unhtmlentities($rss->channel['title']));
$dataobject->preferredtitle = addslashes($preferredtitle);
}
$dataobject->url = addslashes($url);
if (!update_record('block_rss_client', $dataobject)) {
error('There was an error trying to update rss feed with id:'. $rssid);
}
// rss_display_feeds($rssid);
rss_display_feeds();
print ''. get_string('block_rss_feed_updated', 'block_rss_client') .'';
rss_get_form($act, $dataobject->url, $rssid, $dataobject->preferredtitle);
} else if ($act == 'addfeed' ) {
require_variable($url);
$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);
}
// 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();
$rss = fetch_rss($url);
$rsserror = ob_get_contents();
ob_end_clean();
if ($rss === false) {
print '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 {
$dataobject->id = $rssid;
if (!empty($rss->channel['description'])) {
$dataobject->description = addslashes(rss_unhtmlentities($rss->channel['description']));
}
if (!empty($rss->channel['title'])) {
$dataobject->title = addslashes(rss_unhtmlentities($rss->channel['title']));
}
if (!update_record('block_rss_client', $dataobject)) {
error('There was an error trying to update rss feed with id:'. $rssid);
}
print ''. get_string('block_rss_feed_added', 'block_rss_client') .'';
}
rss_display_feeds();
rss_get_form($act, $dataobject->url, $dataobject->id, $dataobject->preferredtitle);
} else if ( $act == 'rss_edit') {
$rss_record = get_record('block_rss_client', 'id', $rssid);
$preferredtitle = stripslashes_safe($rss_record->preferredtitle);
if (empty($preferredtitle)) {
$preferredtitle = stripslashes_safe($rss_record->title);
}
$url = stripslashes_safe($rss_record->url);
rss_display_feeds($rssid);
rss_get_form($act, $url, $rssid, $preferredtitle);
} else if ($act == 'delfeed') {
$file = $CFG->dataroot .'/cache/rsscache/'. $rssid .'.xml';
if (file_exists($file)) {
unlink($file);
}
// 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);
rss_display_feeds();
print ''. get_string('block_rss_feed_deleted', 'block_rss_client') .'';
rss_get_form($act, $url, $rssid, $preferredtitle);
} else if ($act == 'view') {
// echo $sql; //debug
// print_object($res); //debug
$rss_record = get_record('block_rss_client', 'id', $rssid);
if (!$rss_record->id){
print ''. get_string('block_rss_could_not_find_feed', 'block_rss_client') .': '. $rssid .'';
} else {
// 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();
$rss = fetch_rss($rss_record->url);
$rsserror = ob_get_contents();
ob_end_clean();
if (empty($rss_record->preferredtitle)) {
$feedtitle = stripslashes_safe($rss_record->preferredtitle);
} else {
$feedtitle = stripslashes_safe(rss_unhtmlentities($rss->channel['title']));
}
print '
'."\n";
print ''. $feedtitle .' |
'."\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'];
}
if ($rss->items[$y]['title'] == '') {
$rss->items[$y]['title'] = '>>';
}
print ''."\n";
print ''. $rss->items[$y]['title'];
print ''."\n";
print ' | '."\n";
if (file_exists($CFG->dirroot .'/blog/lib.php')) {
//Blog module is installed - provide "blog this" link
print ''."\n";
print ' '."\n";
print ''. get_string('blog_blog_this', 'blog') .''."\n";
} else {
print ' | ';
}
print ' |
'."\n";
print '';
print $rss->items[$y]['description'] .' |
'."\n";
}
print '
'."\n";
}
} else {
rss_display_feeds();
rss_get_form($act, $url, $rssid, $preferredtitle);
}
print_footer();
/**
* @param string $act .
* @param string $url .
* @param int $rssid .
* @param bool $printnow True if the generated form should be printed out, false if the string should be returned from this function quietly
*/
function rss_get_form($act, $url, $rssid, $preferredtitle, $printnow=true) {
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');
$strupdatefeed = get_string('block_rss_update_feed', 'block_rss_client');
$straddfeed = get_string('block_rss_add_feed', 'block_rss_client');
$returnstring = ''."\n";
$returnstring .= ''."\n";
$returnstring .= ' |
'."\n";
if ($printnow){
print $returnstring;
}
return $returnstring;
}
?>