- Added a simple site cloud module.
parent
a382d9ea4a
commit
99d712b636
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
|
@ -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";
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
);
|
||||
|
|
Loading…
Reference in New Issue