diff --git a/domain.drush.inc b/domain.drush.inc index d17605c..ce8dca0 100644 --- a/domain.drush.inc +++ b/domain.drush.inc @@ -97,6 +97,44 @@ function domain_drush_command() { 'drush domain-repair', ), ); + $items['domain-user-domains'] = array( + 'description' => 'List the domains assigned to a user.', + 'examples' => array( + 'drush domain-user-domains john.doe', + ), + 'arguments' => array( + 'user' => 'The username or email of the user', + ), + ); + $items['domain-user-users'] = array( + 'description' => 'List the users assigned to a domain.', + 'examples' => array( + 'drush domain-user-users', + ), + 'arguments' => array( + 'domain' => 'The domain id or name', + ), + ); + $items['domain-user-assign'] = array( + 'description' => 'Assign a user to a domain.', + 'examples' => array( + 'drush domain-user-assign example.com john.doe', + ), + 'arguments' => array( + 'domain' => 'The domain to which the user shall be assigned.', + 'user' => 'The user (username or email) to assign to the domain.', + ), + ); + $items['domain-user-unassign'] = array( + 'description' => 'Unassign a user from a domain.', + 'examples' => array( + 'drush domain-user-unassign example.com john.doe', + ), + 'arguments' => array( + 'domain' => 'The domain from which the user shall be unassigned.', + 'user' => 'The (username or email) user to unassign.', + ), + ); return $items; } @@ -421,7 +459,7 @@ function drush_domain_default($argument) { function drush_domain_get_from_argument($argument) { $domain = domain_lookup($argument); if ($domain == -1) { - $domain = domain_lookup(NULL, $argument); + $domain = domain_lookup(NULL, $argument, true); } if ($domain == -1) { drush_set_error('domain', dt('Domain record not found.')); @@ -454,3 +492,156 @@ function drush_domain_repair() { } } } + +/** + * Assign a user to a domain + * + * @param $domain_search + * The domain name + * + * @param $user_search + * The user name or email + * + * @return + * Void or error + */ +function drush_domain_user_assign($domain_argument, $user_argument) { + // get domain_id + if ($domain = drush_domain_get_from_argument($domain_argument)) { + $domain_id = $domain['domain_id']; + } + else { + return drush_set_error('domain', dt('Domain record not found.')); + } + // get uid + $uid = _drush_user_get_uid($user_argument); + + // check that this user isn't already assigned to this domain + $user_domains = domain_get_user_domains(user_load($uid)); + if (! in_array($domain_id, $user_domains)) { + // perform assignation + db_insert('domain_editor') + ->fields(array('uid', 'domain_id')) + ->values(array('uid' => $uid, 'domain_id' => $domain_id)) + ->execute(); + + drush_print(dt('User !user assigned to domain !domain.', array('!user' => $user_argument, '!domain' => $domain_argument))); + } +} + +/** + * Unssign a user from a domain + * + * @param $domain_search + * The domain name + * + * @param $user_search + * The user name or email + * + * @return + * Void or error + */ +function drush_domain_user_unassign($domain_argument, $user_argument) { + // get domain_id + if ($domain = drush_domain_get_from_argument($domain_argument)) { + $domain_id = $domain['domain_id']; + } + else { + return drush_set_error('domain', dt('Domain record not found.')); + } + // get uid + $uid = _drush_user_get_uid($user_argument); + + // check that this user is assigned to this domain + $user_domains = domain_get_user_domains(user_load($uid)); + if (in_array($domain_id, $user_domains)) { + // perform unassignation + db_delete('domain_editor') + ->condition('uid', $uid) + ->condition('domain_id', $domain_id) + ->execute(); + + drush_print(dt('User !user unassigned from domain !domain.', array('!user' => $user_argument, '!domain' => $domain_argument))); + } +} + +/** + * List the domains assigned to a user + * + * @return + * Void + */ +function drush_domain_user_domains($argument) { + // get uid + $uid = _drush_user_get_uid($argument); + + $domains = domain_domains(); + $user_domains = domain_get_user_domains(user_load($uid)); + foreach (array_keys($user_domains) as $domain_id) { + $user_domains[$domain_id] = $domains[$domain_id]; + } + + $header = array( + 'weight' => dt('weight'), + 'sitename' => dt('sitename'), + 'subdomain' => dt('domain'), + 'scheme' => dt('scheme'), + 'valid' => dt('active'), + 'is_default' => dt('is_default'), + 'domain_id' => dt('domain_id'), + 'machine_name' => dt('machine_name'), + ); + $rows = array(array_values($header)); + foreach ($user_domains as $domain) { + $row = array(); + foreach ($header as $key => $name) { + $row[] = check_plain($domain[$key]); + } + $rows[] = $row; + } + drush_print_table($rows, TRUE); +} + +/** + * List the users assigned to a domain + * + * @return + * Void + */ +function drush_domain_user_users($argument) { + if ($domain = drush_domain_get_from_argument($argument)) { + $domain_id = $domain['domain_id']; + } + else { + return drush_set_error('domain', dt('Domain record not found.')); + } + + $uids = db_select('domain_editor', 'de') + ->fields('de', array('uid')) + ->condition('domain_id', $domain_id) + ->execute() + ->fetchAll(); + + $header = array( + 'uid' => dt('uid'), + 'name' => dt('name'), + 'mail' => dt('mail'), + 'roles' => dt('roles'), + 'status' => dt('status'), + ); + $rows = array(array_values($header)); + foreach ($uids as $uid) { + $user = user_load($uid->uid); + var_dump($user); + $row = array(); + foreach ($header as $key => $name) { + $value = $user->$key; + if (is_array($value)) { + $value = implode(", ", $value); + } + $row[] = check_plain($value); + } + $rows[] = $row; + } + drush_print_table($rows, TRUE); +}