Hi, my site runs a Drupal 4.6 and I would like to make Notify work. It hasn't yet been ported to 4.6, so the original plan was to do it myself.
Of course, that ended dead in its tracks when I realised that I could not find anywhere the code idiom to port node_access_join_sql and node_access_where_sql to db_rewrite_sql if the former have parameters.
One example is in the function _notify_send() in the notify.inc file.
// Fetch new comments
$cresult = db_query('SELECT DISTINCT(c.cid), c.nid, c.subject, c.pid, u.name FROM {comments} c '. node_access_join_sql('c') .' INNER JOIN {users} u ON u.uid = c.uid WHERE c.status = 0 AND c.timestamp > %d AND '. node_access_where_sql('view', 'na', $user->uid) .' ORDER BY c.nid, c.timestamp', $period);
I've managed to understand as far as:
#$cresult = db_query_range(db_rewrite_sql('SELECT c.cid, c.nid, c.subject, c.pid, u.name FROM {comments} c INNER JOIN {users} u ON u.uid = c.uid WHERE c.status = 0 AND c.timestamp > %d /* AND '. node_access_where_sql('view', 'na', $user->uid) .'*/ ORDER BY c.nid, c.timestamp', 'c', 'cid'));
before realising that I don't know how to incorporate parameters in node_access_where_sql into the new scheme. The node_access_where_sql normally accepts $user->uid as NULL by default and according to the API, it seems that it checks that the user has permission to access the node (the doc doesn't actually say). How can you get the user parameter passed through? The API docs for db_rewrite_sql are pretty unhelpfun in this respect, and the Module Porting Guide does not provide any advice on how to handle the arguments. This is made more confusing by the fact that nowhere in the API documentation does the "private version" of node_access_where_sql is called with parameters. Do I have to write a comment_db_rewrite_sql hook implemenation or something?