diff options
author | Dries Buytaert <dries@buytaert.net> | 2004-12-07 16:55:38 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2004-12-07 16:55:38 +0000 |
commit | 60352821bfd61c266c6cda5f797cc7036a9499d2 (patch) | |
tree | 9bdf38ec0b9c752caab1397a24a21fff78099151 /modules/queue.module | |
parent | 1365740f6eab386aa16ba39c6f324a3c30adb78d (diff) | |
download | brdo-60352821bfd61c266c6cda5f797cc7036a9499d2.tar.gz brdo-60352821bfd61c266c6cda5f797cc7036a9499d2.tar.bz2 |
- Refactored the queue module: removed the queue module's field from the node table. With help from Gerhard.
- Slight addition to INSTALL.txt with regard to PHP versions.
- Updated/reworded some node type descriptions as per Boris' suggestions.
- Adding missing {} around a table name in update.php.
Diffstat (limited to 'modules/queue.module')
-rw-r--r-- | modules/queue.module | 51 |
1 files changed, 29 insertions, 22 deletions
diff --git a/modules/queue.module b/modules/queue.module index 30c4612b2..fc83af62e 100644 --- a/modules/queue.module +++ b/modules/queue.module @@ -58,20 +58,16 @@ function queue_count() { return ($result) ? db_result($result, 0) : 0; } -function queue_score($id) { - $result = db_query('SELECT score FROM {node} WHERE nid = %d', $id); +function queue_score($nid) { + $result = db_query('SELECT SUM(vote) FROM {queue} WHERE nid = %d', $nid); return ($result) ? db_result($result, 0) : 0; } function queue_vote($node, $vote) { global $user; - if (!field_get($node->users, $user->uid)) { - // Update submission's score- and votes-field: - db_query("UPDATE {node} SET score = score $vote, votes = votes + 1, users = '". field_set($node->users, $user->uid, $vote) ."' WHERE nid = %d", $node->nid); - - // Reload the updated node from the database: - $node = node_load(array('nid' => $node->nid)); + if (!isset($node->voters[$user->uid])) { + db_query("INSERT INTO {queue} (nid, uid, vote) VALUES (%d, %d, %d)", $node->nid, $user->uid, $vote); $terms = module_invoke('taxonomy', 'node_get_terms', $node->nid, 'tid'); foreach ($terms as $term) { @@ -113,6 +109,9 @@ function queue_vote($node, $vote) { drupal_set_message(t('The post has expired.')); } } + + // Reload the updated node from the database: + $node = node_load(array('nid' => $node->nid), NULL, TRUE); } } @@ -124,11 +123,12 @@ function queue_overview() { $header = array(array('data' => t('Subject')), array('data' => t('Author')), array('data' => t('Type')), array('data' => t('Score'))); - $sresult = pager_query('SELECT n.*, u.name, u.uid FROM {node} n INNER JOIN {users} u ON n.uid = u.uid WHERE n.moderate = 1', 10, 0); + $sresult = pager_query('SELECT DISTINCT(n.nid), n.title, n.type, u.name, u.uid, SUM(IF(q.uid=%d,1,0)) AS voted, SUM(q.vote) AS score FROM {node} n '. node_access_join_sql() .' INNER JOIN {users} u ON n.uid = u.uid INNER JOIN {queue} q ON n.nid = q.nid WHERE n.moderate = 1 AND '. node_access_where_sql(), 10, 0, + 'SELECT DISTINCT(n.nid) FROM {node} n '. node_access_join_sql() .' WHERE n.moderate = 1 AND '. node_access_where_sql(), $user->uid); while ($node = db_fetch_object($sresult)) { - if ($user->uid == $node->uid || field_get($node->users, $user->uid)) { - $rows[] = array(array('data' => l($node->title, 'queue/'. $node->nid), 'class' => 'title'), array('data' => format_name($node), 'class' => 'name'), array('data' => module_invoke($node->type, 'node_name', $node), 'class' => 'type'), array('data' => queue_score($node->nid), 'class' => 'score')); + if ($user->uid == $node->uid || $node->voted) { + $rows[] = array(array('data' => l($node->title, 'queue/'. $node->nid), 'class' => 'title'), array('data' => format_name($node), 'class' => 'name'), array('data' => module_invoke($node->type, 'node_name', $node), 'class' => 'type'), array('data' => $node->score, 'class' => 'score')); } else { $rows[] = array(array('data' => l($node->title, 'queue/'. $node->nid), 'class' => 'title'), array('data' => format_name($node), 'class' => 'name'), array('data' => module_invoke($node->type, 'node_name', $node), 'class' => 'type'), array('data' => l(t('vote'), 'queue/'. $node->nid), 'class' => 'score')); @@ -168,7 +168,7 @@ function queue_view($nid) { $node = node_load(array('nid' => $nid, 'moderate' => 1)); if ($node) { - if ($user->uid != $node->uid && !field_get($node->users, $user->uid)) { + if ($user->uid != $node->uid && !isset($node->voters[$user->uid])) { if ($op == t('Vote') && $votes[$edit['vote']]) { // If it is a valid vote, record it. @@ -234,13 +234,10 @@ function queue_block($op = 'list', $delta = 0) { $id = arg(2); } $node = node_load(array('nid' => $id)); - if (($user->uid == $node->uid || field_get($node->users, $user->uid)) && $node->moderate == 1) { - foreach (explode(',', $node->users) as $vote) { - if ($vote) { - $data = explode('=', $vote); - $account = user_load(array('uid' => $data[0])); - $output .= format_name($account) ." voted \"$data[1]\".<br />"; - } + if (($user->uid == $node->uid || isset($node->voters[$user->uid])) && $node->moderate == 1) { + foreach ($node->voters as $uid => $vote) { + $account = user_load(array('uid' => $uid)); + $output .= t('%user voted %vote', array('%user' => format_name($account), '%vote' => $vote)) .'<br />'; } $block['subject'] = t('Moderation results'); @@ -258,17 +255,27 @@ function queue_block($op = 'list', $delta = 0) { */ function queue_nodeapi(&$node, $op) { switch ($op) { - case 'fields': - return array('score', 'users', 'votes'); + case 'load': + $result = db_query("SELECT uid, vote FROM {queue} WHERE nid = %d", $node->nid); + $node->voters = array(); + $node->score = 0; + while ($voter = db_fetch_object($result)) { + $node->voters[$voter->uid] = $voter->vote; + $node->score += $voter->vote; + } + break; case 'validate': if ($node->nid && $node->moderate) { // Reset votes when node is updated: $node->score = 0; - $node->users = ''; + $node->voters = array(); $node->votes = 0; } break; case 'insert': + if ($node->moderate) { + db_query("INSERT INTO {queue} (nid, uid) VALUES (%d, %d)", $node->nid, $node->uid); + } case 'update': if ($node->moderate && user_access('access submission queue')) { drupal_set_message(t('The post is queued for approval. You can check the votes in the <a href="%queue">submission queue</a>.', array('%queue' => url('queue')))); |