moodle/blocks/rss_client/block_rss_client_action.php

291 lines
10 KiB
PHP
Raw Normal View History

<?php //$Id$
/*******************************************************************
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.
*
* @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;
2006-09-12 06:57:05 +00:00
2005-08-11 15:27:47 +00:00
if (isset($_SERVER['HTTP_REFERER'])) {
$referrer = $_SERVER['HTTP_REFERER'];
} else {
$referrer = $CFG->wwwroot;
}
2006-09-12 06:57:05 +00:00
// Ensure that the logged in user is not using the guest account
2005-08-11 15:27:47 +00:00
if (isguest()) {
error(get_string('noguestpost', 'forum'), $referrer);
}
2006-09-12 06:57:05 +00:00
2006-05-08 07:09:28 +00:00
$url = optional_param('url','',PARAM_URL);
if (!empty($url)) {
// attempting to replace feed and rss url types with http
// it appears that the rss feed validator will validate these url types but magpie will not load them $url = str_replace ("feed://", "http://", "$url");
// Shifting this forward since PARAM_URL rejects these feed types as invalid entries!
$url = str_replace ("feed://", "http://", "$url");
$url = str_replace ("FEED://", "http://", "$url");
$url = str_replace ("rss://", "http://", "$url");
$url = str_replace ("RSS://", "http://", "$url");
}
$act = optional_param('act', NULL, PARAM_ALPHA);
$rssid = optional_param('rssid', NULL, PARAM_INT);
2005-08-11 15:27:47 +00:00
$id = optional_param('id', SITEID, PARAM_INT);
2006-05-08 07:09:28 +00:00
//$url = clean_param($url, PARAM_URL);
$preferredtitle = optional_param('preferredtitle', '', PARAM_ALPHA);
2006-09-12 06:57:05 +00:00
$shared = optional_param('shared', 0, PARAM_INT);
2005-08-11 15:27:47 +00:00
if (!defined('MAGPIE_OUTPUT_ENCODING')) {
define('MAGPIE_OUTPUT_ENCODING', current_charset()); // see bug 3107
2005-08-11 15:27:47 +00:00
}
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');
2006-09-12 06:57:05 +00:00
if (!empty($course)) {
$navigation = '<a href="'.$CFG->wwwroot.'/course/view.php?id='.$id.'">'.$course->shortname.'</a> -> '.$straddedit;
2005-08-11 15:27:47 +00:00
} else {
$navigation = $straddedit;
}
print_header($straddedit, $straddedit, $navigation);
2005-08-11 15:27:47 +00:00
if ( !isset($act) ) {
2006-09-12 06:57:05 +00:00
rss_display_feeds($id, $USER->id, '', $context);
rss_print_form($act, $url, $rssid, $preferredtitle, $shared, $id, $context);
print_footer();
die();
}
if ( isset($rssid) ) {
$rss_record = get_record('block_rss_client', 'id', $rssid);
}
2005-08-11 15:27:47 +00:00
2006-09-12 06:57:05 +00:00
$block = get_record('block', 'name', 'rss_client');
2006-09-13 02:59:20 +00:00
$blockinstance = get_record('block_instance', 'blockid', $block->id, 'pagetype', 'course-view', 'pageid', $id);
2006-09-12 06:57:05 +00:00
$context = get_context_instance(CONTEXT_BLOCK, $blockinstance->id);
if (isset($rss_record)) {
$managefeeds = ($rss_record->userid == $USER->id && has_capability('block/rss_client:manageownfeeds', $context))
|| ($rss_record->userid != $USER->id && has_capability('block/rss_client:manageanyfeeds', $context));
2005-08-11 15:27:47 +00:00
}
2005-08-01 14:02:46 +00:00
2006-09-12 06:57:05 +00:00
if ($act == 'updfeed') {
2006-09-12 06:57:05 +00:00
if (!$managefeeds) {
error(get_string('noguestpost', 'forum').
' You are not allowed to make modifications to this RSS feed at this time.',
$referrer);
}
2005-08-11 15:27:47 +00:00
if (empty($url)) {
2006-09-12 06:57:05 +00:00
error( 'URL not defined for rss feed' );
}
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-08-11 15:27:47 +00:00
ob_end_clean();
2006-09-12 06:57:05 +00:00
$canaddsharedfeeds = has_capability('block/rss_client:createsharedfeeds', $context);
2005-08-11 15:27:47 +00:00
$dataobject->id = $rssid;
if ($rss === false) {
$dataobject->description = '';
$dataobject->title = '';
$dataobject->preferredtitle = '';
2006-09-12 06:57:05 +00:00
$dataobject->shared = 0;
} else {
$dataobject->description = addslashes($rss->channel['description']);
$dataobject->title = addslashes($rss->channel['title']);
2005-08-11 15:27:47 +00:00
$dataobject->preferredtitle = addslashes($preferredtitle);
2006-09-12 06:57:05 +00:00
if ($shared == 1 && $canaddsharedfeeds) {
$dataobject->shared = 1;
} else {
$dataobject->shared = 0;
}
}
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);
}
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' ) {
2006-09-12 06:57:05 +00:00
$canaddprivfeeds = has_capability('block/rss_client:createprivatefeeds', $context);
$canaddsharedfeeds = has_capability('block/rss_client:createsharedfeeds', $context);
if (!$canaddprivfeeds && !$canaddsharedfeeds) {
error('You do not have the permission to add RSS feeds');
}
2005-08-11 15:27:47 +00:00
if (empty($url)) {
2006-09-12 06:57:05 +00:00
error('URL not defined for rss feed');
2005-08-11 15:27:47 +00:00
}
$dataobject->userid = $USER->id;
$dataobject->description = '';
$dataobject->title = '';
$dataobject->url = addslashes($url);
$dataobject->preferredtitle = addslashes($preferredtitle);
2006-09-12 06:57:05 +00:00
if ($shared == 1 && $canaddsharedfeeds) {
$dataobject->shared = 1;
} else {
$dataobject->shared = 0;
}
2005-08-11 15:27:47 +00:00
$rssid = insert_record('block_rss_client', $dataobject);
if (!$rssid) {
error('There was an error trying to add a new rss feed:'. $url);
}
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
$dataobject->id = $rssid;
2005-08-11 15:27:47 +00:00
if (!empty($rss->channel['description'])) {
$dataobject->description = addslashes($rss->channel['description']);
}
2005-08-11 15:27:47 +00:00
if (!empty($rss->channel['title'])) {
$dataobject->title = addslashes($rss->channel['title']);
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);
}
2005-08-11 15:27:47 +00:00
$message .= '<br />'. get_string('feedadded', 'block_rss_client');
}
redirect($referrer, $message);
/*
2006-09-12 06:57:05 +00:00
rss_display_feeds($id, $USER->id, '', $context);
rss_print_form($act, $dataobject->url, $dataobject->id, $dataobject->preferredtitle, $shared, $id, $context);
2005-08-11 15:27:47 +00:00
*/
} else if ( isset($rss_record) && $act == 'rssedit' ) {
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);
2006-09-12 06:57:05 +00:00
$shared = stripslashes_safe($rss_record->shared);
rss_display_feeds($id, $USER->id, $rssid, $context);
2006-09-12 06:57:05 +00:00
rss_print_form($act, $url, $rssid, $preferredtitle, $shared, $id, $context);
2005-08-11 15:27:47 +00:00
} else if ($act == 'delfeed') {
2006-09-12 06:57:05 +00:00
if (!$managefeeds) {
error(get_string('noguestpost', 'forum').
' You are not allowed to make modifications to this RSS feed at this time.',
$referrer);
}
2005-08-11 15:27:47 +00:00
$file = $CFG->dataroot .'/cache/rsscache/'. $rssid .'.xml';
if (file_exists($file)) {
unlink($file);
}
2005-08-11 15:27:47 +00:00
// echo "DEBUG: act = delfeed"; //debug
delete_records('block_rss_client', 'id', $rssid);
2005-08-11 15:27:47 +00:00
redirect($referrer, get_string('feeddeleted', 'block_rss_client') );
} else if ( isset($rss_record) && $act == 'view' ) {
2005-08-11 15:27:47 +00:00
// echo $sql; //debug
// print_object($res); //debug
if (!$rss_record->id) {
print '<strong>'. get_string('couldnotfindfeed', 'block_rss_client') .': '. $rssid .'</strong>';
} 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();
2005-08-11 15:27:47 +00:00
$rss = fetch_rss($rss_record->url);
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 = $rss_record->preferredtitle;
} else {
$feedtitle = $rss->channel['title'];
}
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++) {
if ($rss->items[$y]['link'] == '') {
$rss->items[$y]['link'] = $rss->items[$y]['guid'];
}
2005-08-11 15:27:47 +00:00
if ($rss->items[$y]['title'] == '') {
$rss->items[$y]['title'] = '&gt;&gt;';
}
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";
} else {
2005-08-11 15:27:47 +00:00
print '<td>&nbsp;';
}
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";
}
2005-08-11 15:27:47 +00:00
print '</table>'."\n";
}
2005-08-11 15:27:47 +00:00
} else {
2006-09-12 06:57:05 +00:00
rss_display_feeds($id, $USER->id, '', $context);
rss_print_form($act, $url, $rssid, $preferredtitle, $shared, $id, $context);
2005-08-11 15:27:47 +00:00
}
print_footer();
2006-09-12 06:57:05 +00:00
?>