TODO - anyone?

link) ."\">". check_output($item->title) .""; } return "$output"; } } function import_view_bundle() { $result = db_query("SELECT * FROM bundle ORDER BY title"); while ($bundle = db_fetch_object($result)) { $output .= "$bundle->title"; } return $output; } function import_block() { $result = db_query("SELECT * FROM bundle ORDER BY title"); while ($bundle = db_fetch_object($result)) { $i++; $blocks[$i][subject] = $bundle->title; $blocks[$i][content] = import_bundle($bundle->attribute, 10); $blocks[$i][info] = "$bundle->title bundle"; } return $blocks; } function import_update($feed) { // open socket: $url = parse_url($feed[link]); $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")) { eregi("", $data, $data); foreach (explode("", $data[0]) as $item) { $l = eregi("(.*)", $item, $link); $t = eregi("(.*)", $item, $title); $a = eregi("(.*)", $item, $author); $d = eregi("(.*)", $item, $description); if ($l || $t || $a || $d) { import_save_item(array(fid => $feed[fid], title => $title[0], link => $link[0], author => $author[0], description => $description[0], attribute => $feed[attribute])); } } db_query("UPDATE feed SET timestamp = '". time() ."' WHERE fid = '". $feed[fid] ."'"); } else { watchdog("error", "failed to syndicate from '$feed[title]'"); } } } function import_save_item($edit) { if ($edit[iid] && $edit[title]) { db_query("UPDATE item SET title = '". check_input($edit[title]) ."', link = '". check_input($edit[link]) ."', author = '". check_input($edit[author]) ."', description = '". check_input($edit[description]) ."', attribute = '". check_input($edit[attribute]) ."' WHERE iid = '$edit[iid]'"); } else if ($edit[iid]) { db_query("DELETE FROM item WHERE iid = '". check_input($edit[iid]) ."'"); } else { if (!db_fetch_object(db_query("SELECT iid FROM item WHERE link = '". check_input($edit[link]) ."'"))) { db_query("INSERT INTO item (fid, title, link, author, description, attribute, timestamp) VALUES ('". check_input($edit[fid]) ."', '". check_input($edit[title]) ."', '". check_input($edit[link]) ."', '". check_input($edit[author]) ."', '". check_input($edit[description]) ."', '". check_input($edit[attribute]) ."', '". time() ."')"); } } } function import_form_bundle($edit = array()) { global $REQUEST_URI; $form .= form_textfield("Title", "title", $edit[title], 50, 64, "The name of the bundle."); $form .= form_textfield("Attributes", "attribute", $edit[attribute], 50, 128, "A comma-seperated list of keywords describing the bundle."); $form .= form_submit("Submit"); if ($edit[bid]) { $form .= form_submit(t("Delete")); $form .= form_hidden("bid", $edit[bid]); } return form($REQUEST_URI, $form); } function import_save_bundle($edit) { if ($edit[bid] && $edit[title]) { db_query("UPDATE bundle SET title = '". check_input($edit[title]) ."', attribute = '". check_input($edit[attribute]) ."' WHERE bid = '". check_input($edit[bid]) ."'"); } else if ($edit[bid]) { db_query("DELETE FROM bundle WHERE bid = '". check_input($edit[bid]) ."'"); } else { db_query("INSERT INTO bundle (title, attribute) VALUES ('". check_input($edit[title]) ."', '". check_input($edit[attribute]) ."')"); } module_rehash_blocks("import"); } function import_form_feed($edit = array()) { global $REQUEST_URI; $period = array(900 => format_interval(900), 1800 => format_interval(1800), 3600 => format_interval(3600), 7200 => format_interval(7200), 10800 => format_interval(10800), 21600 => format_interval(21600), 32400 => format_interval(32400), 43200 => format_interval(43200), 64800 => format_interval(64800), 86400 => format_interval(86400), 172800 => format_interval(172800), 259200 => format_interval(259200), 604800 => format_interval(604800), 1209600 => format_interval(1209600), 2419200 => format_interval(2419200)); $form .= form_textfield("Title", "title", $edit[title], 50, 64, "The name of the feed; typically the name of the website you syndicate content from."); $form .= form_textfield("Link", "link", $edit[link], 50, 128, "The fully-qualified URL of the feed."); $form .= form_textfield("Attributes", "attribute", $edit[attribute], 50, 128, "A comma-seperated list of keywords describing the feed."); $form .= form_select("Update interval", "refresh", $edit[refresh], $period, "The refresh interval indicating how often you want to update this feed. Requires crontab."); $form .= form_select("Expiration time", "uncache", $edit[uncache], $period, "The time cached items should be kept. Older items will be automatically discarded. Requires crontab."); $form .= form_submit("Submit"); if ($edit[fid]) { $form .= form_submit(t("Delete")); $form .= form_hidden("fid", $edit[fid]); } return form($REQUEST_URI, $form); } function import_save_feed($edit) { if ($edit[fid] && $edit[title]) { db_query("UPDATE feed SET title = '". check_input($edit[title]) ."', link = '". check_input($edit[link]) ."', attribute = '". check_input($edit[attribute]) ."', refresh = '". check_input($edit[refresh]) ."', uncache = '". check_input($edit[uncache]) ."' WHERE fid = '". check_input($edit[fid]) ."'"); db_query("DELETE FROM item WHERE fid = '". check_input($edit[fid]) ."'"); } else if ($edit[fid]) { db_query("DELETE FROM feed WHERE fid = '". check_input($edit[fid]) ."'"); db_query("DELETE FROM item WHERE fid = '". check_input($edit[fid]) ."'"); } else { db_query("INSERT INTO feed (title, link, attribute, refresh, uncache) VALUES ('". check_input($edit[title]) ."', '". check_input($edit[link]) ."', '". check_input($edit[attribute]) ."', '". check_input($edit[refresh]) ."', '". check_input($edit[uncache]) ."')"); } } function import_save_attributes($edit) { foreach($edit as $iid => $value) { db_query("UPDATE item SET attribute = '". check_input($value) ."' WHERE iid = '". check_input($iid) ."'"); } return "attributes has been saved"; } function import_get_feed($fid) { return db_fetch_array(db_query("SELECT * FROM feed WHERE fid = '". check_input($fid) ."'")); } function import_get_bundle($bid) { return db_fetch_array(db_query("SELECT * FROM bundle WHERE bid = '". check_input($bid) ."'")); } function import_view_feed() { $result = db_query("SELECT f.*, COUNT(i.iid) AS items FROM feed f LEFT JOIN item i ON f.fid = i.fid GROUP BY f.fid ORDER BY f.title"); $output .= "

Feed overview

"; $output .= "\n"; $output .= " \n"; while ($feed = db_fetch_object($result)) { $output .= " \n"; } $output .= "
titleattributesitemslast updatenext updateoperations
". check_output($feed->title) ."". check_output($feed->attribute) ."". format_plural($feed->items, "item", "items") ."". ($feed->timestamp ? format_interval(time() - $feed->timestamp) ." ago" : "never") ."". ($feed->timestamp ? format_interval($feed->timestamp + $feed->refresh - time()) ." left" : "never") ."fid\">edit feedfid\">update items
\n"; $result = db_query("SELECT * FROM bundle ORDER BY title"); $output .= "

Bundle overview

"; $output .= "\n"; $output .= " \n"; while ($bundle = db_fetch_object($result)) { $output .= " \n"; } $output .= "
titleattributesoperations
". check_output($bundle->title) ."". check_output($bundle->attribute) ."bid\">edit bundle
\n"; return $output; } function import_view_item() { global $REQUEST_URI; $result = db_query("SELECT i.*, f.title AS feed FROM item i LEFT JOIN feed f ON i.fid = f.fid ORDER BY i.timestamp DESC LIMIT 50"); $output .= "
\n"; $output .= "\n"; $output .= " \n"; while ($item = db_fetch_object($result)) { $output .= " \n"; } $output .= "
timefeeditem
". format_date($item->timestamp, "custom", "m/d/y") ."
".format_date($item->timestamp, "custom", "H:i") ."
fid\">". check_output($item->feed) ."link) ."\">". check_output($item->title) ."". ($item->description ? "
". check_output($item->description) ."" : "") ."
iid]\" VALUE=\"". check_form($item->attribute) ."\" SIZE=\"50\">
\n"; $output .= "\n"; $output .= "
\n"; return $output; } function import_admin() { global $op, $id, $type, $edit; print "add new bundle | add new feed | available bundles | available items | overview | help
"; switch($op) { case "help": print import_help(); break; case "add": if ($type == "bundle") print import_form_bundle(); else print import_form_feed(); break; case "edit": if ($type == "bundle") print import_form_bundle(import_get_bundle($id)); else print import_form_feed(import_get_feed($id)); break; case "update": print import_update(import_get_feed($id)); print import_view_feed(); break; case "Save attributes": print status(import_save_attributes($edit)); print import_view_item(); break; case "Delete": $edit[title] = 0; // fall through: case "Submit": if ($type == "bundle") print status(import_save_bundle($edit)); else print status(import_save_feed($edit)); // fall through: default: if ($type == "bundle") print import_view_bundle(); else if ($type == "item") print import_view_item(); else print import_view_feed(); } } ?>