summaryrefslogtreecommitdiff
path: root/modules/cloud.module
diff options
context:
space:
mode:
Diffstat (limited to 'modules/cloud.module')
-rw-r--r--modules/cloud.module163
1 files changed, 163 insertions, 0 deletions
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