? nodequeue-taxonomy-fixes.patch Index: nodequeue.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/nodequeue.module,v retrieving revision 1.39.2.28.2.22 diff -u -p -r1.39.2.28.2.22 nodequeue.module --- nodequeue.module 10 Oct 2007 23:07:37 -0000 1.39.2.28.2.22 +++ nodequeue.module 3 Dec 2007 16:50:12 -0000 @@ -1759,13 +1759,14 @@ function nodequeue_add_subqueue(&$queue, * reflect updates in taxonomy term names, for example. */ function nodequeue_subqueue_update_title($sqid, $title) { - db_query("UPDATE {nodequeue_subqueue} SET title = '%s' WHERE $sqid = %d", $title, $sqid); + db_query("UPDATE {nodequeue_subqueue} SET title = '%s' WHERE sqid = %d", $title, $sqid); } /** - * Remove an a subqueue. + * Remove a subqueue. */ function nodequeue_remove_subqueue($sqid) { + nodequeue_queue_clear($sqid); db_query("DELETE FROM {nodequeue_subqueue} WHERE sqid = %d", $sqid); } Index: smartqueue.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/nodequeue/Attic/smartqueue.module,v retrieving revision 1.1.2.4 diff -u -p -r1.1.2.4 smartqueue.module --- smartqueue.module 16 Aug 2007 00:06:04 -0000 1.1.2.4 +++ smartqueue.module 3 Dec 2007 16:50:12 -0000 @@ -161,9 +161,50 @@ function smartqueue_taxonomy_get_terms($ // TODO: -// Implement hook_taxonomy to delete subqueues when terms are deleted. -// And to update titles when taxonomy terms are changed. -function smartqueue_taxonomy_taxonomy($op, $type, $array = NULL) { - // Since this is a relatively rare operation, and I'm out of time for this - // project, I'm leaving this for some enterprising developer who needs this. +// * Automatically add subqueues when terms are created. +// * Handle vocabulary changes (maybe?) +/** + * Implementation of hook_taxonomy. + */ +function smartqueue_taxonomy($op, $type, $array = NULL) { + switch ($type) { + case 'term': + switch ($op){ + // If a term was updated, we need to update any relevant nodequeue titles. + case 'update': + $tid = $array['tid']; + // Find subqueues that contain this term. + $result = db_query( + "SELECT nq.reference AS reference, sq.reference AS sqref, sq.sqid + FROM {nodequeue_queue} nq + INNER JOIN {nodequeue_subqueue} sq ON nq.qid = sq.qid + WHERE sq.reference = '%d' OR sq.reference LIKE '%%-%d' + OR sq.reference LIKE '%d-%%' OR sq.reference LIKE '%%-%d-%%'", + $tid, $tid, $tid, $tid + ); + while ($row = db_fetch_object($result)) { + // Note that $row already contains the needed $row->reference. + $title = smartqueue_taxonomy_nodequeue_subqueue_title($row, $row->sqref); + nodequeue_subqueue_update_title($row->sqid, $title); + } + break; + + // If a term was deleted, we need to delete any subqueues containing it. + case 'delete': + $tid = $array['tid']; + // Find subqueues that contain this term. + $result = db_query( + "SELECT sqid FROM {nodequeue_subqueue} + WHERE reference = '%d' OR reference LIKE '%%-%d' + OR reference LIKE '%d-%%' OR reference LIKE '%%-%d-%%'", + $tid, $tid, $tid, $tid + ); + while ($row = db_fetch_object($result)) { + nodequeue_remove_subqueue($row->sqid); + } + break; + } + case 'vocabulary': + break; + } }