diff --git a/classes/WhatDidTheySayAdmin.inc b/classes/WhatDidTheySayAdmin.inc index 40f8c53..e078f28 100644 --- a/classes/WhatDidTheySayAdmin.inc +++ b/classes/WhatDidTheySayAdmin.inc @@ -452,7 +452,9 @@ class WhatDidTheySayAdmin { * @param object $capability_name * @return array The list of capabilities this user now has. */ - function user_has_cap($capabilities, $requested_capabilities, $capability_name) { + function user_has_cap($capabilities, $requested_capabilities, $args) { + list($capability_name, $user_id) = $args; + $options = get_option('what-did-they-say-options'); if (is_array($options)) { $role_cascade = array('subscriber', 'contributor', 'author', 'editor', 'administrator'); @@ -471,6 +473,16 @@ class WhatDidTheySayAdmin { } } + $user_capabilities = get_usermeta($user_id, 'transcript_capabilities'); + + if (is_array($user_capabilities)) { + foreach ($requested_capabilities as $requested_capability) { + if (isset($user_capabilities[$requested_capability])) { + $capabilities[$requested_capability] = true; + } + } + } + return $capabilities; } @@ -788,6 +800,39 @@ class WhatDidTheySayAdmin { return $updated; } + /** + * Update per-user capabilities. + */ + function handle_update_user_capabilities($info) { + global $wpdb; + + $updated = false; + if (current_user_can('edit_users')) { + $users = $wpdb->get_results("SELECT ID, user_login from $wpdb->users ORDER BY user_login"); + + foreach ((array)$users as $user) { + $user_capabilities = array(); + + foreach (array_keys($this->capabilities) as $key) { + if (isset($info['user_capabilities'][$user->ID])) { + if (isset($info['user_capabilities'][$user->ID][$key])) { + $user_capabilities[$key] = true; + } + } + } + + if (!empty($user_capabilities)) { + update_usermeta($user->ID, 'transcript_capabilities', $user_capabilities); + } else { + delete_usermeta($user->ID, 'transcript_capabilities'); + } + } + + $updated = __('Per-user permissions updated.', 'what-did-they-say'); + } + return $updated; + } + /** * Handle resettings what-did-they-say-options. * @param array $info The part of the $_POST array for What Did They Say?!? diff --git a/classes/partials/_capabilities.inc b/classes/partials/_capabilities.inc index 16f1e77..db1e75e 100644 --- a/classes/partials/_capabilities.inc +++ b/classes/partials/_capabilities.inc @@ -47,11 +47,18 @@ if (!is_array($user_capabilities)) { $user_capabilities = array(); } ?>