diff --git a/acl.admin.inc b/acl.admin.inc index 9d657cc..7199d8a 100644 --- a/acl.admin.inc +++ b/acl.admin.inc @@ -12,13 +12,20 @@ function _acl_edit_form($acl_id, $label = NULL, $new_acl = FALSE) { $users = array(); if (!$new_acl) { // Ensure the ACL in question even exists. - if (!($record = db_query("SELECT name, number FROM {acl} WHERE acl_id = :acl_id", array( - 'acl_id' => $acl_id, - ))->fetchAssoc())) { + $record = db_select('acl', 'a') + ->fields('a', array('name', 'number')) + ->condition('a.acl_id', $acl_id) + ->execute() + ->fetchAssoc(); + if (!$record) { return array(); } - $result = db_query("SELECT u.uid, u.name FROM {users} u LEFT JOIN {acl_user} aclu ON aclu.uid = u.uid WHERE acl_id = :acl_id", array( - 'acl_id' => $acl_id)); + $query = db_select('users', 'u'); + $query->leftJoin('acl_user', 'aclu', 'aclu.uid = u.uid'); + $result = $query + ->fields('u', array('uid', 'name')) + ->condition('aclu.acl_id', $acl_id) + ->execute(); foreach ($result as $user) { $users[$user->uid] = $user->name; } @@ -92,9 +99,11 @@ function _acl_edit_form_after_build($form, &$form_state) { } } elseif (isset($form_state['triggering_element']) && $form_state['triggering_element']['#value'] == $form['add_button']['#value'] && !empty($form['add']['#value'])) { - $user = db_query("SELECT uid, name FROM {users} WHERE name = :name", array( - 'name' => $form['add']['#value'], - ))->fetchObject(); + $user = db_select('users', 'u') + ->fields('u', array('uid', 'name')) + ->condition('u.name', $form['add']['#value']) + ->execute() + ->fetchObject(); if (!$user || !$user->uid) { form_error($form['add'], t("Invalid user specified.")); } @@ -146,4 +155,3 @@ function acl_save_form($form, $priority = NULL) { ->execute(); } } - diff --git a/acl.module b/acl.module index 97c2c15..9a6ede0 100644 --- a/acl.module +++ b/acl.module @@ -63,10 +63,12 @@ function acl_delete_acl($acl_id) { * Add the specified UID to an ACL. */ function acl_add_user($acl_id, $uid) { - $test_uid = db_query("SELECT uid FROM {acl_user} WHERE acl_id = :acl_id AND uid = :uid", array( - 'acl_id' => $acl_id, - 'uid' => $uid, - ))->fetchField(); + $test_uid = db_select('acl_user', 'aclu') + ->fields('aclu', array('uid')) + ->condition('aclu.acl_id', $acl_id) + ->condition('aclu.uid', $uid) + ->execute() + ->fetchField(); if (!$test_uid) { db_insert('acl_user') ->fields(array( @@ -196,19 +198,25 @@ function acl_get_id_by_number($module, $number) { * Determine whether an ACL has some assigned users. */ function acl_has_users($acl_id) { - return db_query("SELECT COUNT(uid) FROM {acl_user} WHERE acl_id = :acl_id", array( - 'acl_id' => $acl_id, - ))->fetchField(); + return db_select('acl_user', 'aclu') + ->fields('aclu', array('uid')) + ->condition('aclu.acl_id', $acl_id) + ->countQuery() + ->execute() + ->fetchField(); } /** * Determine whether an ACL has a specific assigned user. */ function acl_has_user($acl_id, $uid) { - return db_query("SELECT COUNT(uid) FROM {acl_user} WHERE acl_id = :acl_id AND uid = :uid", array( - 'acl_id' => $acl_id, - 'uid' => $uid, - ))->fetchField(); + return db_select('acl_user', 'aclu') + ->fields('aclu', array('uid')) + ->condition('aclu.acl_id', $acl_id) + ->condition('aclu.uid', $uid) + ->countQuery() + ->execute() + ->fetchField(); } /** @@ -235,9 +243,11 @@ function acl_get_ids_by_user($module, $uid, $name = NULL, $number = NULL) { * Get the uids of an ACL. */ function acl_get_uids($acl_id) { - $uids = db_query("SELECT uid FROM {acl_user} WHERE acl_id = :acl_id", array( - 'acl_id' => $acl_id, - ))->fetchCol(); + $uids = db_select('acl_user', 'aclu') + ->fields('aclu', array('uid')) + ->condition('aclu.acl_id', $acl_id) + ->execute() + ->fetchCol(); return $uids; } @@ -248,9 +258,15 @@ function acl_node_access_records($node) { if (!$node->nid) { return; } - $result = db_query("SELECT n.*, 'acl' AS realm, n.acl_id AS gid, a.module FROM {acl_node} n INNER JOIN {acl} a ON n.acl_id = a.acl_id WHERE nid = :nid", array( - 'nid' => $node->nid, - ), array('fetch' => PDO::FETCH_ASSOC)); + $query = db_select('acl_node', 'n', array('fetch' => PDO::FETCH_ASSOC)); + $query->join('acl', 'a', 'n.acl_id = a.acl_id'); + $query->addField('n', 'acl_id', 'gid'); + $query->addField('a', 'module'); + $query->addExpression("'acl'", 'realm'); + $result = $query + ->fields('n') + ->condition('n.nid', $node->nid) + ->execute(); $grants = array(); foreach ($result as $grant) { if (module_invoke($grant['module'], 'enabled')) { @@ -277,9 +293,13 @@ function acl_node_access_records($node) { * Implements hook_node_grants(). */ function acl_node_grants($account, $op) { - $acl_ids = db_query("SELECT acl_id FROM {acl_user} WHERE uid = :uid", array( - 'uid' => $account->uid, - ))->fetchCol(); + + $acl_ids = db_select('acl_user', 'u') + ->fields('u', array('acl_id')) + ->condition('u.uid', $account->uid) + ->execute() + ->fetchCol(); + return (!empty($acl_ids) ? array('acl' => $acl_ids) : NULL); } @@ -321,9 +341,11 @@ function acl_node_access_explain($row) { static $interpretations = array(); if ($row->realm == 'acl') { if (!isset($interpretations[$row->gid])) { - $acl = db_query("SELECT * FROM {acl} WHERE acl_id = :acl_id", array( - 'acl_id' => $row->gid, - ))->fetchObject(); + $acl = db_select('acl', 'a') + ->fields('a') + ->condition('a.acl_id', $row->gid) + ->execute() + ->fetchObject(); $acl->tag = '?'; if (!isset($acl->name)) { $acl->tag = $acl->number; @@ -334,9 +356,13 @@ function acl_node_access_explain($row) { else { $acl->tag = $acl->name . '-' . $acl->number; } - $result = db_query("SELECT u.name FROM {acl_user} au, {users} u WHERE au.acl_id = :acl_id AND au.uid = u.uid", array( - 'acl_id' => $row->gid, - )); + $query = db_select('acl_user', 'au'); + $query->join('users', 'u', 'au.uid = u.uid'); + $query + ->fields('u', array('name')) + ->condition('au.acl_id', $row->gid); + $result = $query->execute(); + foreach ($result as $user) { $users[] = $user->name; } @@ -345,9 +371,17 @@ function acl_node_access_explain($row) { $interpretations[$row->gid] = _acl_get_explanation("$acl->module/$acl->tag: $users", $acl->acl_id, $acl->module, $acl->name, $acl->number, $users); } elseif ($row->gid == 0) { - $result = db_query("SELECT an.acl_id, a.module, a.name FROM {acl_node} an JOIN {acl} a ON an.acl_id = a.acl_id LEFT JOIN {acl_user} au ON a.acl_id = au.acl_id WHERE an.nid = :nid AND au.uid IS NULL", array( - 'nid' => $row->nid, - )); + + $query = db_select('acl_node', 'an'); + $query->join('acl', 'a', 'an.acl_id = a.acl_id'); + $query->leftJoin('acl_user', 'au', 'a.acl_id = au.acl_id'); + $query + ->fields('an', array('acl_id')) + ->fields('a', array('module', 'name')) + ->condition('an.nid', $row->nid) + ->isNull('au.uid'); + $result = $query->execute(); + foreach ($result as $acl) { $rows[] = _acl_get_explanation("$acl->acl_id: $acl->module/$acl->tag", $acl->acl_id, $acl->module, $acl->name, $acl->number); } @@ -375,4 +409,3 @@ function _acl_get_explanation($text, $acl_id, $module, $name, $number, $users = } return $text; } - diff --git a/tests/acl.test b/tests/acl.test index 9bce916..ac2e2a9 100644 --- a/tests/acl.test +++ b/tests/acl.test @@ -35,13 +35,21 @@ class AclWebTestCase extends DrupalWebTestCase { acl_create_acl('test1', $node1->title); $acl_id = acl_get_id_by_name('test1', $node1->title); $this->assertNotNull($acl_id, t('ACL ID was succesfully found.'), $group = 'ACL'); - $records = db_query('SELECT acl_id, name FROM {acl} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id))->fetchAll(); + $records = db_select('acl', 'a') + ->fields('a', array('acl_id', 'name')) + ->condition('a.acl_id', $acl_id) + ->execute() + ->fetchAll(); $this->assertEqual(count($records), 1, t('ACL was succesfully created.'), $group = 'ACL'); acl_delete_acl($records[0]->acl_id); - $records = db_query('SELECT acl_id, name FROM {acl} WHERE acl_id = :acl_id', array(':acl_id' => $records[0]->acl_id))->fetchAll(); - $this->pass(var_export($records, TRUE)); - $this->assertEqual(count($records), 0, t('ACL was succesfully removed.'), $group = 'ACL'); + $count = db_select('acl', 'a') + ->fields('a', array('acl_id', 'name')) + ->condition('a.acl_id', $records[0]->acl_id) + ->countQuery() + ->execute() + ->fetchField(); + $this->assertEqual($count, 0, t('ACL was succesfully removed.'), $group = 'ACL'); } /** @@ -58,22 +66,37 @@ class AclWebTestCase extends DrupalWebTestCase { // made it in. $acl_id = acl_get_id_by_name('test2', $node1->title); $this->assertNotNull($acl_id, t('ACL ID was succesfully found.'), $group = 'ACL'); - $records = db_query('SELECT acl_id, name FROM {acl} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id))->fetchAll(); - $this->assertEqual(count($records), 1, t('ACL was succesfully created.'), $group = 'ACL'); + $count = db_select('acl', 'a') + ->fields('a', array('acl_id', 'name')) + ->condition('a.acl_id', $acl_id) + ->countQuery() + ->execute() + ->fetchField(); + $this->assertEqual($count, 1, t('ACL was succesfully created.'), $group = 'ACL'); // Add user (can't we use the user created in setup?). $web_user_1 = $this->drupalCreateUser(); //$this->drupalLogin($web_user); acl_add_user($acl_id, $web_user_1->uid); - $records = db_query('SELECT acl_id, uid FROM {acl_user} WHERE uid = :uid', array(':uid' => $web_user_1->uid))->fetchAll(); + $count = db_select('acl_user', 'u') + ->fields('u', array('acl_id', 'uid')) + ->condition('u.uid', $web_user_1->uid) + ->countQuery() + ->execute() + ->fetchField(); // Verify user is added. - $this->assertEqual(count($records), 1, t('User was succesfully added.'), $group = 'ACL'); + $this->assertEqual($count, 1, t('User was succesfully added.'), $group = 'ACL'); // Remove user. acl_remove_user($acl_id, $web_user_1->uid); - $records = db_query('SELECT acl_id, uid FROM {acl_user} WHERE uid = :uid', array(':uid' => $web_user_1->uid))->fetchAll(); + $count = db_select('acl_user', 'u') + ->fields('u', array('acl_id', 'uid')) + ->condition('u.uid', $web_user_1->uid) + ->countQuery() + ->execute() + ->fetchField(); // Verify user is removed. - $this->assertEqual(count($records), 0, t('User was succesfully removed.'), $group = 'ACL'); + $this->assertEqual($count, 0, t('User was succesfully removed.'), $group = 'ACL'); } /** @@ -94,26 +117,51 @@ class AclWebTestCase extends DrupalWebTestCase { // Add two nodes. $query = db_select('node', 'n') ->fields('n', array('nid')) - ->condition('nid', array($node1->nid, $node2->nid), 'IN'); + ->condition('n.nid', array($node1->nid, $node2->nid), 'IN'); acl_add_nodes($query, $acl_id1, 1, 1, 1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 2, t("2 nodes under control ($count)."), $group = 'ACL'); // Add a third node. acl_node_add_acl($node3->nid, $acl_id1, 1, 1, 1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 3, t('3 nodes under control.'), $group = 'ACL'); // Add the second node again. acl_node_add_acl($node2->nid, $acl_id1, 1, 1, 1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 3, t('Still only 3 nodes under control.'), $group = 'ACL'); // Remove the second node again. acl_node_remove_acl($node2->nid, $acl_id1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 2, t('2 nodes left under control.'), $group = 'ACL'); // Remove the second node again. acl_node_remove_acl($node2->nid, $acl_id1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 2, t('Still 2 nodes left under control.'), $group = 'ACL'); // Create another ACL and add nodes. @@ -121,13 +169,28 @@ class AclWebTestCase extends DrupalWebTestCase { $this->assertNotNull($acl_id2, t('ACL ID was created.'), $group = 'ACL'); acl_node_add_acl($node1->nid, $acl_id2, 1, 1, 1); acl_node_add_acl($node2->nid, $acl_id2, 1, 1, 1); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id2))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id2) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 2, t('2 nodes under control.'), $group = 'ACL'); // Remove a node (which has two ACLs). acl_node_clear_acls($node1->nid, 'test3'); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id1))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id1) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 1, t('1 node left under control.'), $group = 'ACL'); - $count = db_query('SELECT COUNT(nid) FROM {acl_node} WHERE acl_id = :acl_id', array(':acl_id' => $acl_id2))->fetchField(); + $count = db_select('acl_node', 'n') + ->fields('n', array('nid')) + ->condition('n.acl_id', $acl_id2) + ->countQuery() + ->execute() + ->fetchField(); $this->assertEqual($count, 1, t('1 node left under control.'), $group = 'ACL'); }