summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorhalcyonCorsair2012-03-05 09:16:14 (GMT)
committerhalcyonCorsair2012-03-05 09:16:14 (GMT)
commit15a838dc7d539e951c130d39d4c3ceb441a87036 (patch)
tree0d297a60a851764185bbad750e90d183ccb114af
parenta22023ff46e79eed1744675e1e162dd0bfe61f3e (diff)
Issue #1464030 by halcyonCorsair, jaydub, Stefan Freudenberg, et al.7.x-1.0-alpha1
-rw-r--r--expire.admin.inc47
-rw-r--r--expire.domain.inc74
-rw-r--r--expire.info3
-rw-r--r--expire.install2
-rw-r--r--expire.module406
-rw-r--r--expire.node_reference.inc20
-rw-r--r--expire.votingapi.inc46
7 files changed, 282 insertions, 316 deletions
diff --git a/expire.admin.inc b/expire.admin.inc
index a4c4468..b104251 100644
--- a/expire.admin.inc
+++ b/expire.admin.inc
@@ -14,6 +14,7 @@ function expire_admin_settings_form() {
'#type' => 'fieldset',
'#title' => t('What to expire'),
);
+
$form['expire']['expire_flush_front'] = array(
'#type' => 'checkbox',
'#title' => t('Expire front page'),
@@ -21,31 +22,39 @@ function expire_admin_settings_form() {
'#description' => t('When expiring a node: if promoted to front page, expire front page.'),
);
- $form['expire']['expire_flush_node_terms'] = array(
- '#type' => 'checkbox',
- '#title' => t('Expire node term pages'),
- '#default_value' => variable_get('expire_flush_node_terms', EXPIRE_FLUSH_NODE_TERMS),
- '#description' => t('When expiring a node: expire taxonomy pages for its terms.'),
- );
+ if (module_exists('taxonomy')) {
+ $form['expire']['expire_flush_node_terms'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Expire node term pages'),
+ '#default_value' => variable_get('expire_flush_node_terms', EXPIRE_FLUSH_NODE_TERMS),
+ '#description' => t('When expiring a node: expire taxonomy pages for its terms.'),
+ );
+ }
- $form['expire']['expire_flush_menu_items'] = array(
- '#type' => 'radios',
- '#title' => t('Expire menus'),
- '#options' => array(0 => t('No'), EXPIRE_FLUSH_MENU_ITEMS => t('Family'), 2 => t('Entire menu')),
- '#default_value' => variable_get('expire_flush_menu_items', EXPIRE_FLUSH_MENU_ITEMS),
- '#description' => t('When expiring a node: expire related menu items or entire menu'),
- );
- $form['expire']['expire_flush_cck_references'] = array(
- '#type' => 'checkbox',
- '#title' => t('Expire CCK node references'),
- '#default_value' => variable_get('expire_flush_cck_references', EXPIRE_FLUSH_CCK_REFERENCES),
- '#description' => t('When expiring a node: expire its node references and nodes containing it in their own node references.'),
- );
+ if (module_exists('menu')) {
+ $form['expire']['expire_flush_menu_items'] = array(
+ '#type' => 'radios',
+ '#title' => t('Expire menus'),
+ '#options' => array(0 => t('No'), EXPIRE_FLUSH_MENU_ITEMS => t('Family'), 2 => t('Entire menu')),
+ '#default_value' => variable_get('expire_flush_menu_items', EXPIRE_FLUSH_MENU_ITEMS),
+ '#description' => t('When expiring a node: expire related menu items or entire menu'),
+ );
+ }
+
+ if (module_exists('node_reference')) {
+ $form['expire']['expire_flush_node_references'] = array(
+ '#type' => 'checkbox',
+ '#title' => t('Expire node references'),
+ '#default_value' => variable_get('expire_flush_node_references', EXPIRE_FLUSH_NODE_REFERENCES),
+ '#description' => t('When expiring a node: expire its node references and nodes containing it in their own node references.'),
+ );
+ }
$form['format'] = array(
'#type' => 'fieldset',
'#title' => t('Expire protocol'),
);
+
$form['format']['expire_include_base_url'] = array(
'#type' => 'checkbox',
'#title' => t('Include base URL in expires'),
diff --git a/expire.domain.inc b/expire.domain.inc
new file mode 100644
index 0000000..f690131
--- /dev/null
+++ b/expire.domain.inc
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * Get domains the node is currently published to
+ *
+ * @param $node
+ * node object
+ * @return array
+ * array('$gid' => $gid)
+ */
+function expire_get_domains(&$node) {
+ $domains = array();
+ if ($node->nid) {
+ $result = db_query("SELECT gid FROM {domain_access} WHERE nid = :nid", array(':nid' => $node->nid));
+ while ($row = db_fetch_array($result)) {
+ $gid = $row['gid'];
+ $domains[$gid] = $gid;
+ }
+ }
+ elseif ($node->mail && $node->name) {
+ $result = db_query("SELECT domain_id FROM {domain_editor} WHERE uid = :uid", array(':uid' => $node->uid));
+ while ($row = db_fetch_array($result)) {
+ $gid = $row['domain_id'];
+ $domains[$gid] = $gid;
+ }
+ }
+ return $domains;
+}
+
+/**
+ * Get all base url's where this node can appear.
+ *
+ * @param $node
+ * node object
+ * @return array
+ * array(0 => array($base_url . '/'))
+ */
+function expire_get_base_urls($node) {
+ global $base_url, $base_path;
+
+ // Get list of URL's if using domain access
+ $base_urls = array();
+ $domains = array();
+ // Get domains from node/user object
+ foreach ($node->domains as $key => $domain_id) {
+ if ($key != $domain_id) {
+ continue;
+ }
+ $domains[$domain_id] = $domain_id;
+ }
+ // Get domains from database
+ foreach (expire_get_domains($node) as $domain_id) {
+ $domains[$domain_id] = $domain_id;
+ }
+ // Get aliases and set base url
+ foreach ($domains as $domain_id) {
+ $domain = domain_lookup($domain_id);
+ if ($domain['valid'] == 1) {
+ if (isset($domain['path'])) {
+ $base_urls[$domain_id][] = $domain['path'];
+ }
+ if (is_array($domain['aliases'])) {
+ foreach ($domain['aliases'] as $alias) {
+ if ($alias['redirect'] != 1) {
+ $temp_domain = array('scheme' => $domain['scheme'], 'subdomain' => $alias['pattern']);
+ $base_urls[$domain_id][] = domain_get_path($temp_domain);
+ }
+ }
+ }
+ }
+ }
+ return $base_urls;
+}
+
diff --git a/expire.info b/expire.info
index 3423afd..7f18e25 100644
--- a/expire.info
+++ b/expire.info
@@ -6,6 +6,9 @@ core = 7.x
files[] = expire.module
files[] = expire.admin.inc
+files[] = expire.domain.inc
files[] = expire.drush.inc
+files[] = expire.node_reference.inc
files[] = expire.rules.inc
+files[] = expire.votingapi.inc
configure = admin/config/development/performance/expire
diff --git a/expire.install b/expire.install
index 51101ae..e425154 100644
--- a/expire.install
+++ b/expire.install
@@ -13,7 +13,7 @@ function expire_uninstall() {
'expire_flush_front',
'expire_flush_node_terms',
'expire_flush_menu_items',
- 'expire_flush_cck_references',
+ 'expire_flush_node_references',
'expire_include_base_url',
);
foreach ($vars as $var) {
diff --git a/expire.module b/expire.module
index 67d82a4..3026c3b 100644
--- a/expire.module
+++ b/expire.module
@@ -8,7 +8,7 @@
// Defaults used if variable_get is not set.
define('EXPIRE_FLUSH_NODE_TERMS', TRUE);
define('EXPIRE_FLUSH_MENU_ITEMS', 1);
-define('EXPIRE_FLUSH_CCK_REFERENCES', TRUE);
+define('EXPIRE_FLUSH_NODE_REFERENCES', TRUE);
define('EXPIRE_FLUSH_FRONT', TRUE);
define('EXPIRE_INCLUDE_BASE_URL', TRUE);
@@ -43,15 +43,11 @@ function expire_menu() {
* Acts on new comments.
*/
function expire_comment_insert($comment) {
- // Return if no node id is attached to the comment.
- if (empty($comment->nid)) {
- return;
- }
-
- // Expire the relevant node page from the static page cache to prevent serving stale content.
- $node = node_load($comment->nid);
- if ($node) {
- expire_node($node);
+ if (!empty($comment->nid)) {
+ $node = node_load($comment->nid);
+ if ($node) {
+ expire_node($node);
+ }
}
}
@@ -61,12 +57,11 @@ function expire_comment_insert($comment) {
* Acts on comments updates.
*/
function expire_comment_update($comment) {
- if (empty($comment->nid)) {
- return;
- }
- $node = node_load($comment->nid);
- if ($node) {
- expire_node($node);
+ if (!empty($comment->nid)) {
+ $node = node_load($comment->nid);
+ if ($node) {
+ expire_node($node);
+ }
}
}
@@ -76,12 +71,11 @@ function expire_comment_update($comment) {
* Acts when publishing comments.
*/
function expire_comment_publish($comment) {
- if (empty($comment->nid)) {
- return;
- }
- $node = node_load($comment->nid);
- if ($node) {
- expire_node($node);
+ if (!empty($comment->nid)) {
+ $node = node_load($comment->nid);
+ if ($node) {
+ expire_node($node);
+ }
}
}
@@ -91,12 +85,11 @@ function expire_comment_publish($comment) {
* Acts when unpublishing comments.
*/
function expire_comment_unpublish($comment) {
- if (empty($comment->nid)) {
- return;
- }
- $node = node_load($comment->nid);
- if ($node) {
- expire_node($node);
+ if (!empty($comment->nid)) {
+ $node = node_load($comment->nid);
+ if ($node) {
+ expire_node($node);
+ }
}
}
@@ -107,68 +100,55 @@ function expire_comment_unpublish($comment) {
* Acts when deleting comments.
*/
function expire_comment_delete($comment) {
- if (empty($comment->nid)) {
- return;
- }
- $node = node_load($comment->nid);
- if ($node) {
- expire_node($node);
+ if (!empty($comment->nid)) {
+ $node = node_load($comment->nid);
+ if ($node) {
+ expire_node($node);
+ }
}
}
/**
* Implements hook_node_insert().
- *
+ *
* Acts on new nodes.
*/
function expire_node_insert($node) {
- if (empty($node->nid)) {
- return;
- }
- else {
+ if (!empty($node->nid)) {
expire_node($node);
}
}
/**
* Implements hook_node_update().
- *
+ *
* Acts on node updates.
*/
function expire_node_update($node) {
- if (empty($node->nid)) {
- return;
- }
- else {
+ if (!empty($node->nid)) {
expire_node($node);
}
}
/**
* Implements hook_node_delete().
- *
+ *
* Acts on deletion of nodes.
*/
function expire_node_delete($node) {
- if (empty($node->nid)) {
- return;
- }
- else {
+ if (!empty($node->nid)) {
expire_node($node);
}
}
/**
* Implements hook_node_revision_delete().
- *
+ *
* Acts on deletion of revisions.
*/
function expire_node_revision_delete($node) {
- if (empty($node->nid)) {
- return;
- }
- else {
+ if (!empty($node->nid)) {
expire_node($node);
}
}
@@ -231,50 +211,6 @@ function expire_user_update(&$edit, $account, $category = NULL) {
));
}
-
-/**
- * Implementation of hook_votingapi_insert().
- *
- * @param $votes
- * array of votes
- */
-function expire_votingapi_insert($votes) {
- _expire_votingapi($votes);
-}
-
-/**
- * Implementation of hook_votingapi_delete().
- *
- * @param $votes
- * array of votes
- */
-function expire_votingapi_delete($votes) {
- _expire_votingapi($votes);
-}
-
-/**
- * Common expiry logic for votingapi.
- */
-function _expire_votingapi($votes) {
- foreach ($votes as $vote) {
- if ($vote['content_type'] == 'comment') {
- $nid = db_result(db_query("SELECT nid FROM {comments} WHERE cid = %d", $vote['content_id']));
- if (is_numeric($nid)) {
- $node = node_load($nid);
- if ($node) {
- expire_node($node);
- }
- }
- }
- if ($vote['content_type'] == 'node') {
- $node = node_load($vote['content_id']);
- if ($node) {
- expire_node($node);
- }
- }
- }
-}
-
/**
* Expires a node from the cache; including related pages.
*
@@ -283,7 +219,7 @@ function _expire_votingapi($votes) {
* @param $node
* node object
*/
-function expire_node(&$node) {
+function expire_node($node) {
$paths = array();
// Check node object
@@ -301,36 +237,29 @@ function expire_node(&$node) {
// Get taxonomy terms and flush
if (module_exists('taxonomy') && variable_get('expire_flush_node_terms', EXPIRE_FLUSH_NODE_TERMS)) {
- // Get old terms from DB
- $tids = expire_taxonomy_node_get_tids($node->nid);
- // Get old terms from static variable
- $terms = taxonomy_node_get_terms($node);
- if (!empty($terms)) {
- foreach ($terms as $term) {
- $tids[$term->tid] = $term->tid;
- }
- }
- // Get new terms from node object
- if (!empty($node->taxonomy)) {
- foreach ($node->taxonomy as $vocab) {
- if (is_array($vocab)) {
- foreach ($vocab as $term) {
- $tids[$term] = $term;
- }
+ $terms = array();
+ $info = field_info_fields();
+
+ foreach (field_info_instances('node', $node->type) as $name => $instance) {
+ if ($info[$name]['type'] == 'taxonomy_term_reference') {
+ $new_terms = field_get_items('node', $node, $name);
+ if (is_array($new_terms)) {
+ $terms = array_merge($new_terms, $terms);
+ }
+ $old_terms = isset($node->original) && !empty($node->original) ? field_get_items('node', $node->original, $name) : array();
+ if (is_array($old_terms)) {
+ $terms = array_merge($old_terms, $terms);
}
}
}
- $filenames = array();
- foreach ($tids as $tid) {
- if (is_numeric($tid)) {
- $term = taxonomy_get_term($tid);
- $paths['term' . $tid] = taxonomy_term_path($term);
- }
+
+ foreach ($terms as $term) {
+ $paths['term' . $term['tid']] = 'taxonomy/term/' . $term['tid'];
}
}
// Get menu and flush related items in the menu.
- if (variable_get('expire_flush_menu_items', EXPIRE_FLUSH_MENU_ITEMS) !=0) {
+ if (module_exists('menu') && variable_get('expire_flush_menu_items', EXPIRE_FLUSH_MENU_ITEMS) != 0) {
if (!isset($node->menu['menu_name'])) {
menu_node_prepare($node);
}
@@ -348,48 +277,12 @@ function expire_node(&$node) {
$paths = array_merge($links, $paths);
}
- // Get CCK References and flush.
- if (variable_get('expire_flush_cck_references', EXPIRE_FLUSH_CCK_REFERENCES) && module_exists('nodereference')) {
- $nids = array();
- $type = content_types($node->type);
- if ($type) {
- foreach ($type['fields'] as $field) {
- // Add referenced nodes to nids. This will clean up nodereferrer fields
- // when the referencing node is updated.
- if ($field['type'] == 'nodereference') {
- $node_field = isset($node->$field['field_name']) ? $node->$field['field_name'] : array();
- foreach ($node_field as $delta => $item) {
- if (is_numeric($item['nid'])) {
- $paths['reference' . $item['nid']] = 'node/'. $item['nid'];
- }
- }
-
- // Look for node referers without using nodereferrer
- $info = content_database_info($field);
- $table = $info['table'];
- $column = $info['columns']['nid']['column'];
- $results = db_query("SELECT n.nid
- FROM {%s} nr
- INNER JOIN {node} n USING (vid)
- WHERE nr.%s = %d", $table, $column, $node->nid);
- while ($nid = db_result($results)) {
- if (is_numeric($nid)) {
- $paths['referenceparent' . $nid] = 'node/'. $nid;
- }
- }
- }
- }
- }
-
- // Get CCK references pointing to this node and flush.
- if (module_exists('nodereferrer')) {
- $nids = nodereferrer_referrers($node->nid);
- foreach ($nids as $nid) {
- if (is_numeric($nid['nid'])) {
- $paths['referrer' . $nid['nid']] = 'node/' . $nid['nid'];
- }
- }
- }
+ // Get Node References and flush.
+ if (variable_get('expire_flush_node_references', EXPIRE_FLUSH_NODE_REFERENCES)
+ && module_exists('node_reference')
+ && module_load_include('inc', 'expire', 'expire.node_reference') != FALSE) {
+ $node_references = expire_get_node_references($node);
+ $paths = array_merge($node_references, $paths);
}
// Flush array of paths
@@ -484,22 +377,6 @@ function expire_get_menu_structure($menu, $found, $needle, $first, &$found_globa
}
/**
- * Return taxonomy terms given a nid.
- *
- * Needed because of a weird bug with CCK & node_load()
- * http://drupal.org/node/545922
- */
-function expire_taxonomy_node_get_tids($nid) {
- $vid = db_result(db_query("SELECT vid FROM {node} WHERE nid = %d", $nid));
- $result = db_query(db_rewrite_sql("SELECT t.tid FROM {term_node} r INNER JOIN {term_data} t ON r.tid = t.tid INNER JOIN {vocabulary} v ON t.vid = v.vid WHERE r.vid = %d ORDER BY v.weight, t.weight, t.name", 't', 'tid'), $vid);
- $tids = array();
- while ($term = db_result($result)) {
- $tids[] = $term;
- }
- return $tids;
-}
-
-/**
* Finds all possible paths/redirects/aliases given the root path.
*
* @param $paths
@@ -534,12 +411,12 @@ function expire_cache_derivative($paths, &$node = NULL) {
$expire[] = substr($path_alias, strlen($base_path));
// Path redirects
- if (module_exists('path_redirect')) {
- $path_redirects = expire_path_redirect_load(array('redirect' => $path));
- if (isset($path_redirects)) {
- foreach ($path_redirects as $path_redirect) {
- if (!empty($path_redirect['redirect'])) {
- $expire[] = $path_redirect['redirect'];
+ if (module_exists('redirect')) {
+ $redirects = redirect_load_multiple(array(), array('redirect' => $path));
+ if (isset($redirects) && !empty($redirects)) {
+ foreach ($redirects as $redirect) {
+ if (!empty($redirect->source)) {
+ $expire[] = $redirect->source;
}
}
}
@@ -558,11 +435,14 @@ function expire_cache_derivative($paths, &$node = NULL) {
$urls = array();
global $base_url;
if (variable_get('expire_include_base_url', EXPIRE_INCLUDE_BASE_URL)) {
- foreach (expire_get_base_urls($node) as $domain_id) {
- foreach ($domain_id as $base) {
- foreach ($expire as $path) {
- $urls[] = $base . $path;
- }
+ $base_urls[] = $base_url;
+ if (module_exists('domain')
+ && module_load_include('inc', 'expire', 'expire.domain') != FALSE) {
+ $base_urls = array_merge($base_urls, expire_get_base_urls($node));
+ }
+ foreach ($expire as $path) {
+ foreach ($base_urls as $base) {
+ $urls[] = $base . $path;
}
}
}
@@ -583,39 +463,6 @@ function expire_cache_derivative($paths, &$node = NULL) {
}
/**
- * Retrieve a specific URL redirect from the database.
- * http://drupal.org/node/451790
- *
- * @param $where
- * Array containing 'redirect' => $path
- */
-function expire_path_redirect_load($where = array(), $args = array(), $sort = array()) {
- $redirects = array();
- if (is_numeric($where)) {
- $where = array('rid' => $where);
- }
-
- foreach ($where as $key => $value) {
- if (is_string($key)) {
- $args[] = $value;
- $where[$key] = $key .' = '. (is_numeric($value) ? '%d' : "'%s'");
- }
- }
-
- if ($where && $args) {
- $sql = "SELECT * FROM {path_redirect} WHERE ". implode(' AND ', $where);
- if ($sort) {
- $sql .= ' ORDER BY '. implode(' ,', $sort);
- }
- $result = db_query($sql, $args);
- while ($redirect = db_fetch_array($result)) {
- $redirects[] = $redirect;
- }
- return $redirects;
- }
-}
-
-/**
* Simple print_r to html function
*
* @param $data
@@ -627,88 +474,55 @@ function expire_print_r($data) {
return str_replace(' ', '&nbsp;&nbsp;&nbsp;&nbsp;', nl2br(htmlentities(print_r($data, TRUE))));
}
+function expire_normal_path_check($path) {
+ $original_map = arg(NULL, $path);
+ $parts = array_slice($original_map, 0, MENU_MAX_PARTS);
+ list($ancestors, $placeholders) = menu_get_ancestors($parts);
+
+ $router_item = db_query_range('SELECT path FROM {menu_router} WHERE path IN (:ancestors) ORDER BY fit DESC', 0, 1, array(':ancestors' => $ancestors))->fetchAssoc();
+ return $router_item;
+}
+
/**
- * Get all base url's where this node can appear. Domain access support.
+ * Implementation of hook_votingapi_insert().
*
- * @param $node
- * node object
- * @return array
- * array(0 => array($base_url . '/'))
+ * @param $votes
+ * array of votes
*/
-function expire_get_base_urls(&$node) {
- global $base_url, $base_path;
-
- // Get list of URL's if using domain access
- $base_urls = array();
- $domains = array();
- if (module_exists('domain') && isset($node->domains)) {
- // Get domains from node/user object
- foreach ($node->domains as $key => $domain_id) {
- if ($key != $domain_id) {
- continue;
- }
- $domains[$domain_id] = $domain_id;
- }
- // Get domains from database
- foreach (expire_get_domains($node) as $domain_id) {
- $domains[$domain_id] = $domain_id;
- }
- // Get aliases and set base url
- foreach ($domains as $domain_id) {
- $domain = domain_lookup($domain_id);
- if ($domain['valid'] == 1) {
- if (isset($domain['path'])) {
- $base_urls[$domain_id][] = $domain['path'];
- }
- if (is_array($domain['aliases'])) {
- foreach ($domain['aliases'] as $alias) {
- if ($alias['redirect'] != 1) {
- $temp_domain = array('scheme' => $domain['scheme'], 'subdomain' => $alias['pattern']);
- $base_urls[$domain_id][] = domain_get_path($temp_domain);
- }
- }
- }
- }
- }
- }
- else {
- $base_urls[0][] = $base_url . '/';
- }
- return $base_urls;
+function expire_votingapi_insert($votes) {
+ _expire_votingapi($votes);
}
/**
- * Get domains the node is currently published to
+ * Implementation of hook_votingapi_delete().
*
- * @param $node
- * node object
- * @return array
- * array('$gid' => $gid)
+ * @param $votes
+ * array of votes
+ */
+function expire_votingapi_delete($votes) {
+ _expire_votingapi($votes);
+}
+
+/**
+ * Common expiry logic for votingapi.
*/
-function expire_get_domains(&$node) {
- $domains = array();
- if ($node->nid) {
- $result = db_query("SELECT gid FROM {domain_access} WHERE nid = %d", $node->nid);
- while ($row = db_fetch_array($result)) {
- $gid = $row['gid'];
- $domains[$gid] = $gid;
+function _expire_votingapi($votes) {
+ foreach ($votes as $vote) {
+ if ($vote['entity_type'] == 'comment') {
+ $nid = db_query("SELECT nid FROM {comments} WHERE cid = :cid", array(':cid' => $vote['entity_id']))->fetchField();
+ if (is_numeric($nid)) {
+ $node = node_load($nid);
+ if ($node) {
+ expire_node($node);
+ }
+ }
}
- }
- elseif ($node->mail && $node->name) {
- $result = db_query("SELECT domain_id FROM {domain_editor} WHERE uid = %d", $node->uid);
- while ($row = db_fetch_array($result)) {
- $gid = $row['domain_id'];
- $domains[$gid] = $gid;
+ if ($vote['entity_type'] == 'node') {
+ $node = node_load($vote['entity_id']);
+ if ($node) {
+ expire_node($node);
+ }
}
}
- return $domains;
}
-function expire_normal_path_check($path) {
- $original_map = arg(NULL, $path);
- $parts = array_slice($original_map, 0, MENU_MAX_PARTS);
- list($ancestors, $placeholders) = menu_get_ancestors($parts);
-
- $router_item = db_query_range('SELECT path FROM {menu_router} WHERE path IN (:ancestors) ORDER BY fit DESC', 0, 1, array(':ancestors' => $ancestors))->fetchAssoc();
- return $router_item;
-}
diff --git a/expire.node_reference.inc b/expire.node_reference.inc
new file mode 100644
index 0000000..394d32a
--- /dev/null
+++ b/expire.node_reference.inc
@@ -0,0 +1,20 @@
+<?php
+
+function expire_get_node_references($node) {
+ $paths = array();
+ $fields= field_info_instances('node', $node->type);
+ $field_types = field_info_fields();
+ foreach ($fields as $field) {
+ // Add referenced node paths and expire referenced nodes
+ // when the referencing node is updated.
+ if ($field_types[$field['field_name']]['type'] == 'node_reference') {
+ $node_field = isset($node->$field['field_name']) && !empty($node->$field['field_name']) ? $node->$field['field_name'] : array();
+ foreach($node_field[LANGUAGE_NONE] as $reference) {
+ $paths['reference' . $reference['nid']] = 'node/'. $reference['nid'];
+ }
+
+ $types = entity_load_multiple_by_name('node');
+ }
+ }
+ return $paths;
+}
diff --git a/expire.votingapi.inc b/expire.votingapi.inc
new file mode 100644
index 0000000..bf9ba30
--- /dev/null
+++ b/expire.votingapi.inc
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * Implementation of hook_votingapi_insert().
+ *
+ * @param $votes
+ * array of votes
+ */
+function expire_votingapi_insert($votes) {
+ _expire_votingapi($votes);
+}
+
+/**
+ * Implementation of hook_votingapi_delete().
+ *
+ * @param $votes
+ * array of votes
+ */
+function expire_votingapi_delete($votes) {
+ _expire_votingapi($votes);
+}
+
+/**
+ * Common expiry logic for votingapi.
+ */
+function _expire_votingapi($votes) {
+ foreach ($votes as $vote) {
+ if ($vote['entity_type'] == 'comment') {
+ $nid = db_query("SELECT nid FROM {comments} WHERE cid = :cid", array(':cid' => $vote['entity_id']))->fetchField();
+ if (is_numeric($nid)) {
+ $node = node_load($nid);
+ if ($node) {
+ expire_node($node);
+ }
+ }
+ }
+ if ($vote['entity_type'] == 'node') {
+ $node = node_load($vote['entity_id']);
+ if ($node) {
+ expire_node($node);
+ }
+ }
+ }
+}
+
+