* @file * Automatically create a relationship when a new user joins */ /** * Public API for retrieving a default relationship. * * @param $param * The rdid or an associative array of attributes to search for in selecting the * default, such as user_name or name. Attributes must match column names * in the user_relationship_defaults or user_relationship_types table. * * @return * object of the default relationship with the user object and relationship_type object * */ function user_relationship_default_load($param = array()) { $defaults = user_relationship_defaults_load($rdid); if (is_numeric($param)) { return $defaults[$param]; } foreach ($defaults as $default) { $found = TRUE; foreach($param as $column => $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(array('uid' => $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($may_cache) { $items = array(); if ($may_cache) { $items[] = array( 'path' => 'admin/user/relationships/defaults/add', 'title' => t('Add default'), 'callback' => 'drupal_get_form', 'callback arguments' => array('user_relationship_defaults_add_form'), 'access' => user_access('administer user relationships'), 'type' => MENU_LOCAL_TASK, 'weight' => 2 ); } else { $items[] = array( 'path' => 'admin/user/relationships/defaults/delete', 'title' => t('Delete default'), 'callback' => 'drupal_get_form', 'callback arguments' => array('user_relationship_defaults_delete_form', arg(5)), 'access' => user_access('administer user relationships'), 'type' => MENU_CALLBACK, ); } return $items; } /** * Add new default relationship form */ function user_relationship_defaults_add_form() { $form['username'] = array( '#type' => 'textfield', '#title' => t('Username'), '#maxlength' => 255, '#default_value' => $edit['username'], '#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' => $edit['relationship_type_name'], '#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_id, &$form_values) { if(!empty($form_values['username']) && !user_load(array('name' => $form_values['username']))) { form_set_error('username', t("You must enter an existing user's name.")); } if (!empty($form_values['relationship_name'])) { if (!user_relationships_type_load(array('name' => $form_values['relationship_name']))) { form_set_error('relationship_name', t("You must enter an existing relationship's name.")); } } } /** * Process default relationship add form submission. */ function user_relationship_defaults_add_form_submit($form_id, &$form_values) { $user = user_load(array('name' => $form_values['username'])); $relationship_type = user_relationships_type_load(array('name' => $form_values['relationship_type_name'])); db_query( "INSERT INTO {user_relationship_defaults} (rdid, uid, rtid) VALUES (%d, %d, %d)", db_next_id('{user_relationship_defaults}_id'), $user->uid, $relationship_type->rtid ); $message = t('Default relationship %relationship_name of %username has been added.', array( '%username' => $user->name, '%relationship_name' => $relationship_type->name, )); drupal_set_message($message); watchdog('u_relationship', $message, WATCHDOG_NOTICE, l(t('view'), 'admin/user/relationships')); return 'admin/user/relationships'; } /** * Default Relationship delete confirmation. */ function user_relationship_defaults_delete_form($rdid = NULL) { if (isset($rdid) && ($default_relationship = user_relationship_default_load($rdid))) { $form['rdid'] = array( '#type' => 'value', '#value' => $rdid ); $form['user'] = array( '#type' => 'value', '#value' => $default_relationship->user, ); $form['relationship_type'] = array( '#type' => 'value', '#value' => $default_relationship->relationship_type, ); $form = confirm_form( $form, t('Are you sure you want to delete the default relationship %relationship of %name?', array( '%relationship' => $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; } else { drupal_set_message(t('Default relationship not found.'), 'error'); drupal_goto('admin/user/relationships'); } } /** * Process default relationship delete form submission. */ function user_relationship_defaults_delete_form_submit($form_id, &$form_values) { db_query("DELETE FROM {user_relationship_defaults} WHERE rdid = %d", $form_values['rdid']); $message = t('Default relationship %relationship of %name has been deleted.', array( '%name' => $form_values['user']->name, '%relationship' => $form_values['relationship_type']->name, )); drupal_set_message($message); watchdog('u_relationship', $message, WATCHDOG_NOTICE); return 'admin/user/relationships'; } /** * hook_user() */ function user_relationship_defaults_user($type, &$edit, &$account, $cagetory = NULL) { switch($type) { case 'insert': if ($defaults = user_relationship_defaults_load()) { foreach($defaults as $default) { user_relationships_request_relationship($default->user, $account, $default->relationship_type, TRUE); } } break; } } /** * 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/delete/$default->rdid"), ); } 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) { switch ($op) { case 'delete type': db_query("DELETE FROM {user_relationship_defaults} WHERE rtid = %d", $relationship_type->rtid); break; } }