diff options
Diffstat (limited to 'modules')
-rw-r--r-- | modules/aggregator.module | 4 | ||||
-rw-r--r-- | modules/aggregator/aggregator.module | 4 | ||||
-rw-r--r-- | modules/cloud.module | 163 | ||||
-rw-r--r-- | modules/import.module | 4 |
4 files changed, 169 insertions, 6 deletions
diff --git a/modules/aggregator.module b/modules/aggregator.module index 30f350300..c8afe7c5a 100644 --- a/modules/aggregator.module +++ b/modules/aggregator.module @@ -107,7 +107,7 @@ function import_update($feed) { db_query("UPDATE feed SET timestamp = '". time() ."' WHERE fid = '". $feed[fid] ."'"); } else { - watchdog("error", "failed to syndicate from '$feed[title]'"); + watchdog("error", "import: failed to syndicate from '$feed[title]'"); } } @@ -213,7 +213,7 @@ function import_view_feed() { $output .= "<h3>Feed overview</h3>"; $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n"; - $output .= " <tr><th>title</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; + $output .= " <tr><th>site</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; while ($feed = db_fetch_object($result)) { $output .= " <tr><td>". check_output($feed->title) ."</td><td>". check_output($feed->attributes) ."</td><td>". format_plural($feed->items, "item", "items") ."</td><td>". ($feed->timestamp ? format_interval(time() - $feed->timestamp) ." ago" : "never") ."</td><td>". ($feed->timestamp ? format_interval($feed->timestamp + $feed->refresh - time()) ." left" : "never") ."</td><td><a href=\"admin.php?mod=import&type=feed&op=edit&id=$feed->fid\">edit feed</a></td><td><a href=\"admin.php?mod=import&type=feed&op=remove&id=$feed->fid\">remove items</a></td><td><a href=\"admin.php?mod=import&type=feed&op=update&id=$feed->fid\">update items</a></td></tr>\n"; } diff --git a/modules/aggregator/aggregator.module b/modules/aggregator/aggregator.module index 30f350300..c8afe7c5a 100644 --- a/modules/aggregator/aggregator.module +++ b/modules/aggregator/aggregator.module @@ -107,7 +107,7 @@ function import_update($feed) { db_query("UPDATE feed SET timestamp = '". time() ."' WHERE fid = '". $feed[fid] ."'"); } else { - watchdog("error", "failed to syndicate from '$feed[title]'"); + watchdog("error", "import: failed to syndicate from '$feed[title]'"); } } @@ -213,7 +213,7 @@ function import_view_feed() { $output .= "<h3>Feed overview</h3>"; $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n"; - $output .= " <tr><th>title</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; + $output .= " <tr><th>site</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; while ($feed = db_fetch_object($result)) { $output .= " <tr><td>". check_output($feed->title) ."</td><td>". check_output($feed->attributes) ."</td><td>". format_plural($feed->items, "item", "items") ."</td><td>". ($feed->timestamp ? format_interval(time() - $feed->timestamp) ." ago" : "never") ."</td><td>". ($feed->timestamp ? format_interval($feed->timestamp + $feed->refresh - time()) ." left" : "never") ."</td><td><a href=\"admin.php?mod=import&type=feed&op=edit&id=$feed->fid\">edit feed</a></td><td><a href=\"admin.php?mod=import&type=feed&op=remove&id=$feed->fid\">remove items</a></td><td><a href=\"admin.php?mod=import&type=feed&op=update&id=$feed->fid\">update items</a></td></tr>\n"; } diff --git a/modules/cloud.module b/modules/cloud.module new file mode 100644 index 000000000..a384f0fde --- /dev/null +++ b/modules/cloud.module @@ -0,0 +1,163 @@ +<? + +function cloud_help() { +} + +function cloud_cron() { + if (time() % 250 == 0) { + $result = db_query("SELECT * FROM site"); + } + else { + $result = db_query("SELECT * FROM site WHERE timestamp > ". (time() - 604800)); + } + + while ($site = db_fetch_array($result)) { + cloud_update($site); + } +} + +function cloud_perm() { + return array("access site cloud", "administer site cloud"); +} + +function cloud_link($type) { + if ($type == "page" && user_access("access site cloud")) { + $links[] = "<a href=\"module.php?mod=cloud\">". t("site cloud") ."</a>"; + } + + if ($type == "admin" && user_access("administer site cloud")) { + $links[] = "<a href=\"admin.php?mod=cloud\">". t("site cloud") ."</a>"; + } + + return $links ? $links : array(); +} + +function cloud_update($site) { + // open socket: + $url = parse_url($site[url]); + $fp = fsockopen($url[host], ($url[port] ? $url[port] : 80), $errno, $errstr, 15); + + if ($fp) { + // fetch data: + fputs($fp, "GET $url[path]?$url[query] HTTP/1.0\nUser-Agent: ". variable_get(site_name, "drupal") ."\nHost: $url[host]\nAccept: */*\n\n"); + while(!feof($fp)) $data .= fgets($fp, 128); + + if (strstr($data, "200 OK")) { + if (abs($site[size] - strlen($data)) > 50) { + db_query("UPDATE site SET size = '". strlen($data) ."', timestamp = '". time() ."' WHERE url = '". check_input($site[url]) ."'"); + } + } + } + else { + watchdog("error", "cloud: failed to syndicate from '$site[title]'"); + } +} + + +function cloud_form($edit = array()) { + global $REQUEST_URI; + + $form .= form_textfield("Title", "title", $edit["title"], 50, 64); + $form .= form_textfield("URL", "url", $edit["url"], 50, 64); + + $form .= form_submit("Submit"); + + if ($edit["sid"]) { + $form .= form_submit("Delete"); + $form .= form_hidden("sid", $edit["sid"]); + } + + return form($REQUEST_URI, $form); +} + +function cloud_get_site($sid) { + return db_fetch_array(db_query("SELECT * FROM site WHERE sid = '". check_input($sid) ."'")); +} + +function cloud_save($edit) { + if ($edit["sid"] && $edit["title"]) { + db_query("UPDATE site SET title = '". check_input($edit["title"]) ."', url = '". check_input($edit["url"]) ."' WHERE sid = '". check_input($edit["sid"]) ."'"); + } + else if ($edit["sid"]) { + db_query("DELETE FROM site WHERE sid = '". check_input($edit["sid"]) ."'"); + } + else { + db_query("INSERT INTO site (title, url) VALUES ('". check_input($edit["title"]) ."', '". check_input($edit["url"]) ."')"); + } +} + +function cloud_display() { + $result = db_query("SELECT * FROM site ORDER BY timestamp DESC"); + + $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n"; + $output .= " <tr><th>site</th><th>last update</th><th>operations</th></tr>\n"; + while ($site = db_fetch_object($result)) { + $output .= " <tr><td><a href=\"". check_output($site->url) ."\">". check_output($site->title) ."</a></td><td>". ($site->timestamp ? format_interval(time() - $site->timestamp) ." ago" : "never") ."</td><td><a href=\"admin.php?mod=cloud&op=edit&id=$site->sid\">edit site</a></td></tr>\n"; + } + $output .= "</table>\n"; + + return $output; +} + +function cloud_list() { + $result = db_query("SELECT * FROM site ORDER BY timestamp DESC LIMIT 100"); + + while ($site = db_fetch_object($result)) { + if ($date != date("g A", $site->timestamp)) { + $date = date("g A", $site->timestamp); + $output .= "<p /><b>$date:</b>"; + } + $output .= "<br />". format_url($site->url, $site->title); + } + return $output; +} + +function cloud_page() { + global $theme; + + if (user_access("access site cloud")) { + $theme->header(); + $theme->box(t("Updated sites"), cloud_list()); + $theme->footer(); + } +} + +function cloud_block() { + $block[0]["subject"] = t("Sites"); + $block[0]["content"] = cloud_list(); + $block[0]["info"] = t("Sites"); + return $block; +} + +function cloud_admin() { + global $op, $id, $edit; + + if (user_access("administer site cloud")) { + print "<SMALL><A HREF=\"admin.php?mod=cloud&op=add\">add new site</A> | <A HREF=\"admin.php?mod=cloud\">overview</A> | <A HREF=\"admin.php?mod=cloud&op=help\">help</A></SMALL><HR>\n"; + + switch ($op) { + case "add": + print cloud_form(); + break; + case "edit": + print cloud_form(cloud_get_site($id)); + break; + case "help": + cloud_help(); + break; + case "Delete": + $edit[title] = 0; + // fall through: + case "Submit": + print status(cloud_save($edit)); + // fall through: + default: + print cloud_display(); + } + } + else { + print message_access(); + } +} + +?>
\ No newline at end of file diff --git a/modules/import.module b/modules/import.module index 30f350300..c8afe7c5a 100644 --- a/modules/import.module +++ b/modules/import.module @@ -107,7 +107,7 @@ function import_update($feed) { db_query("UPDATE feed SET timestamp = '". time() ."' WHERE fid = '". $feed[fid] ."'"); } else { - watchdog("error", "failed to syndicate from '$feed[title]'"); + watchdog("error", "import: failed to syndicate from '$feed[title]'"); } } @@ -213,7 +213,7 @@ function import_view_feed() { $output .= "<h3>Feed overview</h3>"; $output .= "<table border=\"1\" cellpadding=\"2\" cellspacing=\"2\">\n"; - $output .= " <tr><th>title</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; + $output .= " <tr><th>site</th><th>attributes</th><th>items</th><th>last update</th><th>next update</th><th colspan=\"3\">operations</th></tr>\n"; while ($feed = db_fetch_object($result)) { $output .= " <tr><td>". check_output($feed->title) ."</td><td>". check_output($feed->attributes) ."</td><td>". format_plural($feed->items, "item", "items") ."</td><td>". ($feed->timestamp ? format_interval(time() - $feed->timestamp) ." ago" : "never") ."</td><td>". ($feed->timestamp ? format_interval($feed->timestamp + $feed->refresh - time()) ." left" : "never") ."</td><td><a href=\"admin.php?mod=import&type=feed&op=edit&id=$feed->fid\">edit feed</a></td><td><a href=\"admin.php?mod=import&type=feed&op=remove&id=$feed->fid\">remove items</a></td><td><a href=\"admin.php?mod=import&type=feed&op=update&id=$feed->fid\">update items</a></td></tr>\n"; } |