From 72035d793ef507bf22cc94e170c0e6da3c966830 Mon Sep 17 00:00:00 2001 From: dhawes Date: Tue, 14 Dec 2004 18:09:20 +0000 Subject: [PATCH] first add of new rss client block. please take a moment to test its features and provide feedback --- blocks/rss_client/block_rss_client.php | 132 ++++++++++++++ blocks/rss_client/block_rss_client_action.php | 171 ++++++++++++++++++ blocks/rss_client/config_global.html | 41 +++++ blocks/rss_client/config_instance.html | 73 ++++++++ blocks/rss_client/db/mysql.php | 16 ++ blocks/rss_client/db/mysql.sql | 21 +++ blocks/rss_client/db/postgres7.php | 13 ++ blocks/rss_client/db/postgres7.sql | 12 ++ .../rss_client/lang/en/block_rss_client.php | 36 ++++ 9 files changed, 515 insertions(+) create mode 100644 blocks/rss_client/block_rss_client.php create mode 100644 blocks/rss_client/block_rss_client_action.php create mode 100644 blocks/rss_client/config_global.html create mode 100644 blocks/rss_client/config_instance.html create mode 100644 blocks/rss_client/db/mysql.php create mode 100644 blocks/rss_client/db/mysql.sql create mode 100644 blocks/rss_client/db/postgres7.php create mode 100644 blocks/rss_client/db/postgres7.sql create mode 100755 blocks/rss_client/lang/en/block_rss_client.php diff --git a/blocks/rss_client/block_rss_client.php b/blocks/rss_client/block_rss_client.php new file mode 100644 index 0000000000..bc7b8fc719 --- /dev/null +++ b/blocks/rss_client/block_rss_client.php @@ -0,0 +1,132 @@ +title = get_string('block_rss_feeds_title', 'block_rss_client'); + $this->content_type = BLOCK_TYPE_TEXT; + $this->version = 2004112000; + } + + function specialization() { + if (!empty($this->config) && !empty($this->config->title)) { + $this->title = $this->config->title; + } + } + + function get_content() { + global $CFG, $editing; + + if($this->content !== NULL) { + return $this->content; + } + + $this->content = new stdClass; + $this->content->footer = ''; + + if (empty($this->instance) || empty($CFG->blog_version)) { + // Either we're being asked for content without + // an associated instance of the Blog module has never been installed. + $this->content->text = ''; + return $this->content; + } + + require_once($CFG->dirroot .'/rss/templib.php'); + $output = ''; + $rssid = -1; + $display_description = false; + if (isset($CFG->block_rss_client_num_entries) && is_numeric($CFG->block_rss_client_num_entries) ) { + $shownumentries = intval($CFG->block_rss_client_num_entries); + } else { + $shownumentries = 5; //default to 5 entries is not specified by admin or instance + } + + if (!empty($this->config)) { + if (!empty($this->config->rssid)) { + $rssid = intval($this->config->rssid); + } + if (!empty($this->config->display_description)) { + $display_description = intval($this->config->display_description); + } + if (!empty($this->config->shownumentries)) { + $shownumentries = intval($this->config->shownumentries); + } + } + + if ($editing) { + $submitters = $CFG->block_rss_client_submitters; + + $isteacher = false; + $courseid = ''; + if ($this->instance->pagetype == MOODLE_PAGE_COURSE) { + $isteacher = isteacher($this->instance->pageid); + $courseid = $this->instance->pageid; + } + + //if the user is an admin or course teacher then allow the user to + //assign categories to other uses than personal + if ( isadmin() || $submitters == 0 || ($submitters == 2 && $isteacher) ) { + $output .= '
'. get_string('block_rss_feeds_add_edit', 'block_rss_client') .'


'; + } + } + + $rss_record = get_record('block_rss_client', 'id', $rssid); + if (isset($rss_record) && isset($rss_record->id)) { + $rss = rss_get_feed($rss_record->id, $rss_record->url, $rss_record->type); + // print_object($rss); //debug + + if ($shownumentries > 0 && $shownumentries < count($rss->items) ) { + $count_to = $shownumentries; + } else { + $count_to = count($rss->items); + } + + for ($y = 0; $y < $count_to; $y++) { + if ($rss->items[$y]['title'] == '') { +// $rss->items[$y]['description'] = blog_unhtmlentities($rss->items[$y]['description']); + //can define an additional instance/admin config item for this (20) - max_description_length + $rss->items[$y]['title'] = substr(strip_tags($rss->items[$y]['description']), 0, 20) . '...'; + } + + if ($rss->items[$y]['link'] == '') { + $rss->items[$y]['link'] = $rss->items[$y]['guid']; + } + + $output .= ''. $rss->items[$y]['title'] . '
' ."\n"; + + if ($display_description){ + $output .= $rss->items[$y]['description'] . '
' ."\n"; + } + } + + $output .= '
'; + // print_object($rss); //debug + $feedtitle = get_string('block_rss_remote_news_feed', 'block_rss_client'); + + if ( isset($rss->channel['link']) && isset($rss->channel['title']) ) { + $feedtitle = ''. $rss->channel['title'] .''; + } + } + + //can we reset the title here? + if (isset($feedtitle) && $feedtitle != '') { + $this->title = $feedtitle; + } + + $this->content->text = $output; + return $this->content; + } + + function instance_allow_multiple() { + return true; + } + + function has_config() { + return true; + } + + function instance_allow_config() { + return true; + } +} +?> \ No newline at end of file diff --git a/blocks/rss_client/block_rss_client_action.php b/blocks/rss_client/block_rss_client_action.php new file mode 100644 index 0000000000..2c178528b5 --- /dev/null +++ b/blocks/rss_client/block_rss_client_action.php @@ -0,0 +1,171 @@ +dirroot .'/rss/templib.php'); + + 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($rsstype); + optional_variable($item); + + print_header('Add/Edit RSS Feeds','Add/Edit RSS Feeds','Add/Edit RSS Feeds' ); + + //check to make sure that the user is allowed to post new feeds + if (empty( $CFG->block_rss_client_submitters)) { + $CFG->block_rss_client_submitters = 0; + } + $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 == 0 || ($submitters == 2 && $isteacher) ) ) { + error(get_string('noguestpost', 'forum'), $referrer); + } + + if ($act == 'none') { + rss_display_feeds(); + rss_get_form($act, $url, $rssid, $rsstype); + + } else if ($act == 'updfeed') { + require_variable($url); + + $rss = rss_get_feed($rssid, $url, $rsstype); + + $dataobject->id = $rssid; + $dataobject->type = $rsstype; + $dataobject->description = addslashes($rss->channel['description']); + $dataobject->title = addslashes($rss->channel['title']); + $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); + print ''. get_string('block_rss_feed_updated', 'block_rss_client') .''; + rss_get_form($act, $url, $rssid, $rsstype); + + } else if ($act == 'addfeed' ) { + + require_variable($url); + require_variable($rsstype); + + $dataobject->userid = $USER->id; + $dataobject->type = $rsstype; + $dataobject->description = ''; + $dataobject->title = ''; + $dataobject->url = addslashes($url); + + $rssid = insert_record('block_rss_client', $dataobject); + if (!$rssid){ + error('There was an error trying to add a new rss feed:'. $url); + } + + $rss = rss_get_feed($rssid, $url, $rsstype); + + $dataobject->id = $rssid; + if (!empty($rss->channel['description'])) { + $dataobject->description = addslashes($rss->channel['description']); + } + if (!empty($rss->channel['title'])) { + $dataobject->title = addslashes($rss->channel['title']); + } + + if (!update_record('block_rss_client', $dataobject)) { + error('There was an error trying to update rss feed with id:'. $rssid); + } + + rss_display_feeds(); + print ''. get_string('block_rss_feed_added', 'block_rss_client') .''; + rss_get_form($act, $url, $rssid, $rsstype); + + } else if ( $act == 'rss_edit') { + + $rss_record = get_record('block_rss_client', 'id', $rssid); + $fname = stripslashes_safe($rss_record->title); + $url = stripslashes_safe($rss_record->url); + $rsstype = $rss_record->type; + rss_get_form($act, $url, $rssid, $rsstype); + + } 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, $rsstype); + + } else if ($act == 'view') { + global $THEME; + // 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 { + // echo 'rssid = '. $rssid .', url ='. $rss_record->url .', type = '. $rss_record->type; + $rss = rss_get_feed($rssid, $rss_record->url, $rss_record->type); + // echo print_object($rss); + print ''."\n"; + print ''."\n"; + for($y=0; $y < count($rss->items); $y++) { +// $rss->items[$y]['title'] = blog_unhtmlentities($rss->items[$y]['title']); + if ($rss->items[$y]['link'] == '') { + $rss->items[$y]['link'] = $rss->items[$y]['guid']; + } + + if ($rss->items[$y]['title'] == '') { + $rss->items[$y]['title'] = '>>'; + } + + print ''."\n"; + if (file_exists($CFG->dirroot .'/blog/lib.php')) { + print ''."\n"; +// $rss->items[$y]['description'] = blog_unhtmlentities($rss->items[$y]['description']); + print ''."\n"; + } + print '
'. $rss->channel['title'] .'
'."\n"; + print ''. $rss->items[$y]['title']; + print ''."\n"; + print ''."\n"; + print ''. get_string('blog_blog_this', 'blog').''."\n"; + print ''. get_string('blog_blog_this', 'blog') .''."\n"; + } else { + print ' '; + } + print '
'; + print $rss->items[$y]['description'] .'
'."\n"; + } + } else { + rss_display_feeds(); + rss_get_form($act, $url, $rssid, $rsstype); + } + + print_footer(); +?> \ No newline at end of file diff --git a/blocks/rss_client/config_global.html b/blocks/rss_client/config_global.html new file mode 100644 index 0000000000..9a50c90164 --- /dev/null +++ b/blocks/rss_client/config_global.html @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + +

block_rss_client_num_entries:

+ + + + +

block_rss_client_submitters:

+ block_rss_client_submitters)) { + $selected = $CFG->block_rss_client_submitters; + } else { + $selected = '0'; + $CFG->block_rss_client_submitters = 0; + } + $options = array ( '0' => 'All members', + '1' => 'Admins only', + '2' => 'Admins and teachers'); + + choose_from_menu ($options, 'block_rss_client_submitters', $selected); + ?> + + +
+
\ No newline at end of file diff --git a/blocks/rss_client/config_instance.html b/blocks/rss_client/config_instance.html new file mode 100644 index 0000000000..a378d6d0b9 --- /dev/null +++ b/blocks/rss_client/config_instance.html @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + block_rss_client_display_description) ) { + $CFG->block_rss_client_display_description = '0'; + } + $selected = $CFG->block_rss_client_display_description; + if (isset($this->config) && isset($this->config->display_description)) { + $selected = $this->config->display_description; + } + $options[0] = get_string('no'); + $options[1] = get_string('yes'); + choose_from_menu ($options, 'display_description', $selected); + ?> +
+ + + +
+ + + config) && isset($this->config->rssid)) { + $selected = $this->config->rssid; + } + if ($rssfeeds = get_records('block_rss_client')) { + foreach($rssfeeds as $rssfeed){ + $feedoptions[$rssfeed->id] = $rssfeed->title; + } + choose_from_menu ($feedoptions, 'rssid', $selected); + } else { + print_string('block_rss_no_feeds', 'block_rss_client'); + if ( isadmin() ){ + print '  '. get_string('block_rss_edit_news_feeds', 'block_rss_client') .'
'; + } + } + ?> +

:

+
+ +
\ No newline at end of file diff --git a/blocks/rss_client/db/mysql.php b/blocks/rss_client/db/mysql.php new file mode 100644 index 0000000000..2f9b98f8a9 --- /dev/null +++ b/blocks/rss_client/db/mysql.php @@ -0,0 +1,16 @@ + diff --git a/blocks/rss_client/db/mysql.sql b/blocks/rss_client/db/mysql.sql new file mode 100644 index 0000000000..7067cc9fd8 --- /dev/null +++ b/blocks/rss_client/db/mysql.sql @@ -0,0 +1,21 @@ +# This file contains a complete database schema for all the +# tables used by this module, written in SQL + +# It may also contain INSERT statements for particular data +# that may be used, especially new entries in the table log_display + +# -------------------------------------------------------- + +# +# Table structure for table `prefix_block_rss_client` +# + +CREATE TABLE prefix_block_rss_client ( + `id` int(11) NOT NULL auto_increment, + `userid` int(11) NOT NULL default '0', + `title` varchar(64) NOT NULL default '', + `description` varchar(128) NOT NULL default '', + `url` varchar(255) NOT NULL default '', + `type` char(1) NOT NULL default 'R', +PRIMARY KEY (`id`) +) TYPE=MyISAM COMMENT='Cached remote news feeds'; \ No newline at end of file diff --git a/blocks/rss_client/db/postgres7.php b/blocks/rss_client/db/postgres7.php new file mode 100644 index 0000000000..1f4e886b81 --- /dev/null +++ b/blocks/rss_client/db/postgres7.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/blocks/rss_client/db/postgres7.sql b/blocks/rss_client/db/postgres7.sql new file mode 100644 index 0000000000..e581e283b4 --- /dev/null +++ b/blocks/rss_client/db/postgres7.sql @@ -0,0 +1,12 @@ +# This file contains a complete database schema for all the +# tables used by this module, written in SQL + +# It may also contain INSERT statements for particular data +# that may be used, especially new entries in the table log_display + +# +# Table structure for table `block_rss_client` +# + +CREATE TABLE prefix_block_rss_client ( +); diff --git a/blocks/rss_client/lang/en/block_rss_client.php b/blocks/rss_client/lang/en/block_rss_client.php new file mode 100755 index 0000000000..d37c4959a6 --- /dev/null +++ b/blocks/rss_client/lang/en/block_rss_client.php @@ -0,0 +1,36 @@ + \ No newline at end of file -- 2.39.5