summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/aggregator.module4
-rw-r--r--modules/aggregator/aggregator.module4
-rw-r--r--modules/cloud.module163
-rw-r--r--modules/import.module4
-rw-r--r--updates/2.00-to-x.xx.sql12
5 files changed, 181 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";
}
diff --git a/updates/2.00-to-x.xx.sql b/updates/2.00-to-x.xx.sql
index 346ad8d05..05aca61f5 100644
--- a/updates/2.00-to-x.xx.sql
+++ b/updates/2.00-to-x.xx.sql
@@ -299,3 +299,15 @@ CREATE TABLE cache (
timestamp int(11) NOT NULL,
PRIMARY KEY (url)
);
+
+# 08/06/01
+CREATE TABLE site (
+ sid int(10) unsigned DEFAULT '0' NOT NULL auto_increment,
+ title varchar(128) DEFAULT '' NOT NULL,
+ url varchar(255) DEFAULT '' NOT NULL,
+ size text NOT NULL,
+ timestamp int(11) NOT NULL,
+ UNIQUE (title),
+ UNIQUE (url),
+ PRIMARY KEY (sid)
+);