$value) { $column = strtolower($column); if ($column == 'name' || $column == 'plural_name') { $value = strtolower($value); $col_val = strtolower($default->$column); } else { $col_val = $default->$column; } // mismatch, move to the next type if ($col_val != $value) { $found = FALSE; break; } } if ($found) { return $type; } } } /** * Public API to retrieve the full list of default relationships * * @return * array of default relationship objects */ function user_relationship_defaults_load($reset = FALSE) { static $defaults = array(); if ($reset || !$defaults) { $results = db_query("SELECT * FROM {user_relationship_defaults}"); while ($default = db_fetch_object($results)) { $default->user = user_load($default->uid); $default->user_name = $default->user->name; $default->relationship_type = user_relationships_type_load($default->rtid); foreach ((array)$default->relationship_type as $column => $value) { $default->$column = $value; } $defaults[$default->rdid] = $default; } } return $defaults; } /** * hook_menu() */ function user_relationship_defaults_menu() { $items = array(); $items['admin/user/relationships/defaults/add'] = array( 'title' => 'Add default', 'access arguments' => array('administer user relationships'), 'page callback' => 'drupal_get_form', 'page arguments' => array('user_relationship_defaults_add_form'), 'type' => MENU_LOCAL_TASK, 'weight' => 2 ); $items['admin/user/relationships/defaults/%user_relationship_default/delete'] = array( 'title' => 'Delete default', 'access arguments' => array('administer user relationships'), 'page callback' => 'drupal_get_form', 'page arguments' => array('user_relationship_defaults_delete_form', 4), 'type' => MENU_CALLBACK, ); return $items; } /** * Add new default relationship form */ function user_relationship_defaults_add_form(&$form_state) { $form['username'] = array( '#type' => 'textfield', '#title' => t('Username'), '#maxlength' => 255, '#default_value' => isset($form_state['username']) ? $form_state['username'] : NULL, '#description' => t('Start typing the name of a user to automatically create a relationship to'), '#required' => TRUE, '#autocomplete_path' => 'user/autocomplete', ); $form['relationship_type_name'] = array( '#type' => 'textfield', '#title' => t('Relationship'), '#maxlength' => 255, '#default_value' => isset($form_state['relationship_type_name']) ? $form_state['relationship_type_name'] : NULL, '#description' => t('Start typing the name of a relationship to use'), '#required' => TRUE, '#autocomplete_path' => 'relationship_types/autocomplete', ); $form['submit'] = array( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } /** * Validate the default relationship add page form submission. */ function user_relationship_defaults_add_form_validate($form, &$form_state) { if (!empty($form_state['values']['username']) && !user_load(array('name' => $form_state['values']['username']))) { form_set_error('username', t("You must enter an existing user's name.")); } if (!empty($form_state['values']['relationship_type_name'])) { if (!user_relationships_type_load(array('name' => $form_state['values']['relationship_type_name']))) { form_set_error('relationship_type_name', t("You must enter an existing relationship's name.")); } } } /** * Process default relationship add form submission. */ function user_relationship_defaults_add_form_submit($form, &$form_state) { $user = user_load(array('name' => $form_state['values']['username'])); $relationship_type = user_relationships_type_load(array('name' => $form_state['values']['relationship_type_name'])); $new_default = array( 'uid' => $user->uid, 'rtid' => $relationship_type->rtid, ); drupal_write_record('user_relationship_defaults', $new_default); $message_p = array( '%username' => $user->name, '%relationship_name' => ur_tt("user_relationships:rtid:$relationship_type->rtid:name", $relationship_type->name), ); drupal_set_message(t('Default relationship %relationship_name of %username has been added.', $message_p)); watchdog('u_relationship', 'Default relationship %relationship_name of %username has been added.', $message_p, WATCHDOG_NOTICE, l(t('view'), 'admin/user/relationships')); $form_state['redirect'] = 'admin/user/relationships'; } /** * Default Relationship delete confirmation. */ function user_relationship_defaults_delete_form(&$form_state, $default_relationship) { $form['rdid'] = array( '#type' => 'value', '#value' => $default_relationship->rdid ); $form = confirm_form( $form, t('Are you sure you want to delete the default relationship %relationship of %name?', array( '%relationship' => ur_tt("user_relationships:rtid:$default_relationship->relationship_type->rtid:name", $default_relationship->relationship_type->name), '%name' => $default_relationship->user->name, )), 'admin/user/relationships', t('This action cannot be undone.'), t('Delete'), t('Cancel') ); return $form; } /** * Process default relationship delete form submission. */ function user_relationship_defaults_delete_form_submit($form, &$form_state) { $default_relationship = user_relationship_default_load($form_state['values']['rdid']); db_query("DELETE FROM {user_relationship_defaults} WHERE rdid = %d", $default_relationship->rdid); $message_p = array( '%name' => $default_relationship->user_name, '%relationship' => ur_tt("user_relationships:rtid:$default_relationship->rtid:name", $default_relationship->name), ); drupal_set_message(t('Default relationship %relationship of %name has been deleted.', $message_p)); watchdog('u_relationship', 'Default relationship %relationship of %name has been deleted.', $message_p, WATCHDOG_NOTICE); user_relationship_defaults_load(TRUE); $form_state['redirect'] = 'admin/user/relationships'; } /** * hook_user() */ function user_relationship_defaults_user($type, &$edit, &$account, $cagetory = NULL) { if ( ($type == 'insert' && $account->status) //if new user is already approved, create relationship || ($type == 'after_update' && $account->status && !$account->login) //#519440 if admin approves a new user account, create relationship ) { //note that if a new account is approved, then blocked and unblocked before the user logged in once, //it'll attempt to create default relationships again (there won't be any errors if they already exist, though) $defaults = user_relationship_defaults_load(); foreach ($defaults as $default) { user_relationships_request_relationship($default->user, $account, $default->relationship_type, TRUE); } } } /** * hook_user_relationships_admin_page_alter() */ function user_relationship_defaults_user_relationships_page_alter($page_id, &$page, &$current_table) { switch ($page_id) { case 'types list': $defaults = user_relationship_defaults_load(); $default_rows = array(); foreach ($defaults as $default) { $default_rows[] = array( theme('username', $default->user), $default->relationship_type->name, l(t('delete'), "admin/user/relationships/defaults/{$default->rdid}/delete"), ); } if (sizeof($default_rows) <= 0) { $default_rows[] = array(array('data' => t('No default relationships available.'), 'colspan' => 3)); } $page['defaults'] = array( '#type' => 'fieldset', '#title' => t('Default Relationships'), '#weight' => 2 ); $page['defaults']['list'] = array( '#value' => theme('table', array(t('User'), t('Relationship'), t('Operations')), $default_rows) ); break; } } /** * hook_user_relationships() */ function user_relationship_defaults_user_relationships($op, &$relationship_type) { if ($op == 'delete type') { db_query("DELETE FROM {user_relationship_defaults} WHERE rtid = %d", $relationship_type->rtid); } }