xmlsitemap_file_nodeapi

Definition

xmlsitemap_file_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL)
contributions/modules/xmlsitemap/xmlsitemap_file/xmlsitemap_file.module, line 106

Description

Implementation of hook_nodeapi().

Related topics

Namesort iconDescription
XML SitemapNotify search engines of site updates.

Code

function xmlsitemap_file_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  if (is_array($node->files)) {
    switch ($op) {
      case 'update':
        foreach ($node->files as $file) {
          if ($file->remove) {
            db_query("DELETE FROM {xmlsitemap_file} WHERE fid = %d", $file->fid);
          }
        }
      case 'insert':
        db_query("
          INSERT INTO {xmlsitemap_file} (fid, nid)
          SELECT f.fid, f.nid FROM {files} f
          LEFT JOIN {xmlsitemap_file} xf ON f.fid = xf.fid
          WHERE xf.fid IS NULL
        ");
        $result = db_query("
          SELECT * FROM {files} f
          INNER JOIN {xmlsitemap_file} xf ON f.fid = xf.fid
          WHERE f.nid = %d
        ", $node->nid);
        while ($file = db_fetch_object($result)) {
          $changed = filemtime($file->filepath);
          if ($changed > $file->changed) {
            db_query("
              UPDATE {xmlsitemap_file}
              SET previously_changed = changed, changed = %d
              WHERE fid = %d
            ", $changed, $file->fid);
          }
          $file = (object) $node->files[$file->fid];
          if ($file->list || $node->xmlsitemap_file_list[$file->fid]) {
            xmlsitemap_update_sitemap();
          }
        }
        break;
      case 'delete':
        db_query("DELETE FROM {xmlsitemap_file} WHERE nid = %d", $node->nid);
        foreach ($node->files as $file) {
          if ($file->list) {
            xmlsitemap_update_sitemap();
            break;
          }
        }
        break;
    }
  }
}