feedenclosure.module 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. /*
  3. * Feed Enclosure
  4. * @description: Stores RSS enclosures and provides a way to access them when browsing aggregated node content
  5. *
  6. * @author: Mike Carter < mike @ www.ixis.co.uk/contact >
  7. */
  8. function feedenclosure_help($section) {
  9. switch ($section) {
  10. case 'admin/help#feedenclosure':
  11. return t('To be written.');
  12. case 'admin/modules#description':
  13. return t('Handle RSS feed enclosures.');
  14. }
  15. }
  16. function feedenclosure_feedapi($feed, $op, $item = NULL) {
  17. switch($op) {
  18. case 'item_save':
  19. $iid = $item->data['iid'];
  20. $enclosures = $item->get_enclosures();
  21. if($enclosures) {
  22. foreach($enclosures as $enclosure) {
  23. $eid = db_next_id('aggregator_enclosure');
  24. db_query("INSERT INTO {aggregator_enclosure} SET eid = %d, iid = %d, link = '%s', fid = '%d', length = %d, type = '%s'", $eid, $iid, $enclosure->get_link(), $feed['fid'], $enclosure->get_length(), $enclosure->get_type());
  25. }
  26. }
  27. break;
  28. case 'remove':
  29. db_query('DELETE FROM {aggregator_enclosure} WHERE fid = %d', $feed['fid']);
  30. break;
  31. }
  32. }
  33. function feedenclosure_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  34. if($node->type == 'aggregator-item' && $op == 'load') {
  35. $enclosure = feedenclosure_get_enclosure($node);
  36. if($enclosure) {
  37. $node->enclosure[] = $enclosure;
  38. }
  39. }
  40. }
  41. function feedenclosure_get_enclosure(&$node) {
  42. return db_fetch_array(db_query("SELECT * FROM {aggregator_enclosure} WHERE fid = %d AND iid = %d", $node->fid, $node->iid));
  43. }
  44. function feedenclosure_link($type, $node = NULL, $teaser = FALSE) {
  45. if($type == 'node' && isset($node->fid) && isset($node->iid)) {
  46. $enclosure = feedenclosure_get_enclosure($node);
  47. if($enclosure) {
  48. $links['feedenclosure'] = theme('feedenclosure_link', $enclosure);
  49. return $links;
  50. }
  51. }
  52. }
  53. function theme_feedenclosure_link($enclosure) {
  54. if (!empty($enclosure['length'])) {
  55. $size = ' (' . round($enclosure['length']/1048576, 2) . ' MB)';
  56. } else {
  57. $size = t('of unknown size');
  58. }
  59. return array(
  60. 'title' => t('download attachment @size', array('@size' => $size)),
  61. 'href' => $enclosure['link'],
  62. 'attributes' => array('class' => 'enclosure'),
  63. );
  64. }