diff --git a/term_permissions.info b/term_permissions.info
index 7f8ca95..88edcd1 100644
--- a/term_permissions.info
+++ b/term_permissions.info
@@ -1,4 +1,4 @@
name = Taxonomy Term Permissions
description = Allows limiting the selection of specific taxonomy terms by user or role.
-core=6.x
+core = 7.x
dependencies[] = taxonomy
diff --git a/term_permissions.install b/term_permissions.install
index 1e1b991..dc63804 100644
--- a/term_permissions.install
+++ b/term_permissions.install
@@ -1,12 +1,19 @@
array(
- 'tid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
- 'uid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
+ 'tid' => array(
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'uid' => array(
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
),
'primary key' => array(
'tid',
@@ -37,8 +52,16 @@ function term_permissions_schema() {
$schema['term_permissions_role'] = array(
'fields' => array(
- 'tid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
- 'rid' => array('type' => 'int', 'unsigned' => TRUE, 'not null' => TRUE),
+ 'tid' => array(
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
+ 'rid' => array(
+ 'type' => 'int',
+ 'unsigned' => TRUE,
+ 'not null' => TRUE,
+ ),
),
'primary key' => array(
'tid',
@@ -50,8 +73,9 @@ function term_permissions_schema() {
}
/**
- * Implementation of hook_uninstall().
+ * Implements hook_uninstall().
*/
function term_permissions_uninstall() {
- drupal_uninstall_schema('term_permissions');
+ // TODO The drupal_(un)install_schema functions are called automatically in D7.
+ // drupal_uninstall_schema('term_permissions')
}
diff --git a/term_permissions.module b/term_permissions.module
index e6550b6..d481a21 100644
--- a/term_permissions.module
+++ b/term_permissions.module
@@ -1,12 +1,11 @@
fields('term_permissions_user')
+ ->condition('tid', $form['#term']['tid'])
+ ->execute();
+
+ foreach ($result as $row) {
+ $u = user_load($row->uid);
$allowed_users[] = $u->name;
}
}
@@ -82,14 +85,20 @@ function term_permissions_form_alter(&$form, $form_state, $form_id) {
'#weight' => -10,
);
- $allowed_roles = array();
+
+ $allowed_roles = array();
if (!empty($form['tid']['#value'])) {
- $result = db_query("SELECT rid FROM {term_permissions_role} WHERE tid = %d", array($form['tid']['#value']));
- while($rid = db_result($result)) {
- $allowed_roles[] = $rid;
+ $result = db_select('term_permissions_role')
+ ->fields('term_permissions_role')
+ ->condition('tid', $form['#term']['tid'])
+ ->execute();
+
+ foreach ($result as $row) {
+ $allowed_roles[] = $row->rid;
}
}
+
// Now, lets do the Roles table.
$form['access']['role'] = array(
'#type' => 'checkboxes',
@@ -107,35 +116,38 @@ function term_permissions_form_alter(&$form, $form_state, $form_id) {
// This is the node add / edit form. If a different selector is used from
// another contributed module, we do nothing so as to not break the form.
- if (isset($form['type']) && isset($form['#node']) && isset($form['taxonomy']) && (!variable_get('taxonomy_override_selector', FALSE)) && $form['type']['#value'] .'_node_form' == $form_id) {
- foreach($form['taxonomy'] as $vid => $vocabulary) {
- if (!is_array($vocabulary) || !isset($vocabulary['#options'])) {
+ if (isset($form['type']) && isset($form['#node']) && (!variable_get('taxonomy_override_selector', FALSE)) && $form['type']['#value'] .'_node_form' == $form_id) {
+ $types = array('taxonomy_term_reference'); // Field types we are looking for
+
+ foreach($form as $field_name => $field) {
+ if(!$field_info = field_info_field($field_name)) // Should be handled by the field API
+ continue;
+
+ $options = &$form[$field_name][$form[$field_name]['#language']]['#options'];
+ if (!in_array($field_info['type'], $types) || !isset($options)) {
continue;
}
- $total_terms = count($vocabulary['#options']);
- foreach($vocabulary['#options'] as $terms) {
- if (!isset($terms->option)) {
+
+ foreach($options as $tid => $name) {
+ if($tid == "_none")
continue;
+
+ // Now we have the term ID, check to see if the current user has
+ // access to the term.
+ global $user;
+ if (!term_permissions_allowed($tid, $user)) {
+ unset($options[$tid]);
}
- foreach($terms->option as $tid => $term) {
- // Now we have the term ID, check to see if the current user has
- // access to the term.
- global $user;
- if (!term_permissions_allowed($tid, $user)) {
- $total_terms--;
- unset($terms->option[$tid]);
- }
- // If the user doesn't have access to any of the terms in the
- // vocabulary, remove the form item entirely.
- if ($total_terms <= 0) {
- if ($vocabulary['#required']) {
- drupal_set_message(t("Your account doesn't have permission to use any of the terms in the %vocabulary vocabulary. Your account must be given permission to use at least one term in the %vocabulary vocabulary to be able to add or edit the %content-type content type.", array('%vocabulary' => $vocabulary['#title'], '%content-type' => node_get_types('name', $form['type']['#value']))), 'warning');
- watchdog('term_permissions', '%user was blocked from accessing the %content-type form as they do not have permission to use any terms in the %vocabulary vocabulary.', array('%user' => isset($user->name) ? $user->name : variable_get('anonymous', 'Anonymous'), '%content-type' => node_get_types('name', $form['type']['#value']), '@vocabulary-url' => url('admin/content/taxonomy/' . $vid), '%vocabulary' => $vocabulary['#title']), WATCHDOG_WARNING, l(t('edit vocabulary'), 'admin/content/taxonomy/' . $vid));
- drupal_access_denied();
- exit();
- }
- unset($form['taxonomy'][$vid]);
+ // If the user doesn't have access to any of the terms in the
+ // vocabulary, remove the form item entirely.
+ if (count($options) <= 1) {
+ if ($vocabulary['#required']) {
+ drupal_set_message(t("Your account doesn't have permission to use any of the terms in the %vocabulary vocabulary. Your account must be given permission to use at least one term in the %vocabulary vocabulary to be able to add or edit the %content-type content type.", array('%vocabulary' => $vocabulary['#title'], '%content-type' => node_get_types('name', $form['type']['#value']))), 'warning');
+ watchdog('term_permissions', '%user was blocked from accessing the %content-type form as they do not have permission to use any terms in the %vocabulary vocabulary.', array('%user' => isset($user->name) ? $user->name : variable_get('anonymous', 'Anonymous'), '%content-type' => node_get_types('name', $form['type']['#value']), '@vocabulary-url' => url('admin/content/taxonomy/' . $vid), '%vocabulary' => $vocabulary['#title']), WATCHDOG_WARNING, l(t('edit vocabulary'), 'admin/content/taxonomy/' . $vid));
+ drupal_access_denied();
+ exit();
}
+ unset($form[$field_name]);
}
}
}
@@ -154,7 +166,7 @@ function term_permissions_validate($form, &$form_state) {
if (!empty($form_state['values']['access']['user'])) {
$allowed_users = drupal_explode_tags($form_state['values']['access']['user']);
foreach ($allowed_users as $name) {
- if (!(user_load(array('name' => $name)))) {
+ if (!(array_shift(user_load_multiple(array(), array('name' => $name))))) {
form_set_error('search_user', t('The user %name does not exist.', array('%user' => $name)));
}
}
@@ -172,20 +184,42 @@ function term_permissions_validate($form, &$form_state) {
*/
function term_permissions_submit($form, &$form_state) {
// For each user, save the term ID and the user ID.
- db_query("DELETE FROM {term_permissions_user} WHERE tid = %d", $form_state['values']['tid']);
+ // TODO Please review the conversion of this statement to the D7 database API syntax.
+ /* db_query("DELETE FROM {term_permissions_user} WHERE tid = %d", $form_state['values']['tid']) */
+ db_delete('term_permissions_user')
+ ->condition('tid', $form_state['values']['tid'])
+ ->execute();
if (!empty($form_state['values']['access']['user'])) {
$allowed_users = drupal_explode_tags($form_state['values']['access']['user']);
- foreach($allowed_users as $name) {
- $u = user_load(array('name' => $name));
- db_query("INSERT INTO {term_permissions_user} (tid, uid) VALUES (%d, %d)", $form_state['values']['tid'], $u->uid);
+ foreach ($allowed_users as $name) {
+ $u = array_shift(user_load_multiple(array(), array('name' => $name)));
+ // TODO Please review the conversion of this statement to the D7 database API syntax.
+ /* db_query("INSERT INTO {term_permissions_user} (tid, uid) VALUES (%d, %d)", $form_state['values']['tid'], $u->uid) */
+ $id = db_insert('term_permissions_user')
+ ->fields(array(
+ 'tid' => $form_state['values']['tid'],
+ 'uid' => $u->uid,
+ ))
+ ->execute();
}
}
// For each role, save the term ID and the role ID.
- db_query("DELETE FROM {term_permissions_role} WHERE tid = %d", $form_state['values']['tid']);
+ // TODO Please review the conversion of this statement to the D7 database API syntax.
+ /* db_query("DELETE FROM {term_permissions_role} WHERE tid = %d", $form_state['values']['tid']) */
+ db_delete('term_permissions_role')
+ ->condition('tid', $form_state['values']['tid'])
+ ->execute();
if (!empty($form_state['values']['access']['role'])) {
- foreach(array_keys(array_filter($form_state['values']['access']['role'])) as $rid) {
- db_query("INSERT INTO {term_permissions_role} (tid, rid) VALUES (%d, %d)", $form_state['values']['tid'], $rid);
+ foreach (array_keys(array_filter($form_state['values']['access']['role'])) as $rid) {
+ // TODO Please review the conversion of this statement to the D7 database API syntax.
+ /* db_query("INSERT INTO {term_permissions_role} (tid, rid) VALUES (%d, %d)", $form_state['values']['tid'], $rid) */
+ $id = db_insert('term_permissions_role')
+ ->fields(array(
+ 'tid' => $form_state['values']['tid'],
+ 'rid' => $rid,
+ ))
+ ->execute();
}
}
}
@@ -207,38 +241,37 @@ function term_permissions_allowed($tid, $user) {
return TRUE;
}
// Are permissions enabled on this term?
- if (!(db_result(db_query("SELECT COUNT(1) FROM {term_permissions_user} WHERE tid = %d", $tid)) || db_result(db_query("SELECT COUNT(1) FROM {term_permissions_role} WHERE tid = %d", $tid)))) {
+ if (!(db_query("SELECT COUNT(1) FROM {term_permissions_user} WHERE tid = :tid", array(':tid' => $tid))->fetchField() || db_query("SELECT COUNT(1) FROM {term_permissions_role} WHERE tid = :tid", array(':tid' => $tid))->fetchField())) {
return TRUE;
}
// Permissions are enabled, check to see if this user or one of their roles
// is allowed.
- if (db_result(db_query("SELECT uid FROM {term_permissions_user} WHERE tid = %d AND uid = %d", $tid, $user->uid)) || db_result(db_query("SELECT rid FROM {term_permissions_role} WHERE tid = %d AND rid IN (" . implode(', ', array_keys($user->roles)) . ")", $tid))) {
+ // TODO Please convert this statement to the D7 database API syntax.
+ if (db_query("SELECT uid FROM {term_permissions_user} WHERE tid = :tid AND uid = :uid", array(':tid' => $tid, ':uid' => $user->uid))->fetchField() || db_query("SELECT rid FROM {term_permissions_role} WHERE tid = %d AND rid IN (" . implode(', ', array_keys($user->roles)) . ")", $tid)->fetchField()) {
return TRUE;
}
return FALSE;
}
/**
- * Returns JS array for Taxonomy Term Permissions autocomplete fields. Supports
+ * Returns Json array for Taxonomy Term Permissions autocomplete fields. Supports
* multiple entries separated by a comma.
*/
function term_permissions_autocomplete_multiple($string) {
- // The user enters a comma-separated list of users. We only autocomplete the last user.
+ // The user enters a comma-separated list of users.
+ // We only autocomplete the last user.
$array = drupal_explode_tags($string);
- // Fetch last tag
+ // Fetch last user.
$last_string = trim(array_pop($array));
$matches = array();
- $result = db_query_range("SELECT u.name FROM {users} u WHERE LOWER(u.name) LIKE LOWER('%s%%')", $last_string, 0, 10);
+ $result = db_select('users')->fields('users', array('name'))->condition('name', db_like($last_string) . '%', 'LIKE')->range(0, 10)->execute();
- $prefix = count($array) ? implode(', ', $array) .', ' : '';
+ $prefix = count($array) ? implode(', ', $array) . ', ' : '';
- while ($user = db_fetch_object($result)) {
+ foreach ($result as $user) {
$matches[$prefix . $user->name] = check_plain($user->name);
}
- if (module_exists('devel')) {
- $GLOBALS['devel_shutdown'] = FALSE;
- }
- exit(drupal_json($matches));
+ exit(drupal_json_output($matches));
}