annotate sites/all/modules/ctools/plugins/contexts/user_edit_form.inc @ 0:ff03f76ab3fe

initial version
author danieleb <danielebarchiesi@me.com>
date Wed, 21 Aug 2013 18:51:11 +0100
parents
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2 /**
danielebarchiesi@0 3 * @file
danielebarchiesi@0 4 *
danielebarchiesi@0 5 * Plugin to provide a user_edit_form context
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Plugins are described by creating a $plugin array which will be used
danielebarchiesi@0 10 * by the system that includes this file.
danielebarchiesi@0 11 */
danielebarchiesi@0 12 $plugin = array(
danielebarchiesi@0 13 'title' => t('User edit form'),
danielebarchiesi@0 14 'description' => t('A user edit form.'),
danielebarchiesi@0 15 'context' => 'ctools_context_create_user_edit_form',
danielebarchiesi@0 16 'edit form' => 'ctools_context_user_edit_form_settings_form',
danielebarchiesi@0 17 'defaults' => array('uid' => ''),
danielebarchiesi@0 18 'keyword' => 'user_edit',
danielebarchiesi@0 19 'context name' => 'user_edit_form',
danielebarchiesi@0 20 'convert list' => 'ctools_context_user_edit_convert_list',
danielebarchiesi@0 21 'convert' => 'ctools_context_user_edit_convert',
danielebarchiesi@0 22 'placeholder form' => array(
danielebarchiesi@0 23 '#type' => 'textfield',
danielebarchiesi@0 24 '#description' => t('Enter the user ID of a user for this argument:'),
danielebarchiesi@0 25 ),
danielebarchiesi@0 26 );
danielebarchiesi@0 27
danielebarchiesi@0 28 /**
danielebarchiesi@0 29 * It's important to remember that $conf is optional here, because contexts
danielebarchiesi@0 30 * are not always created from the UI.
danielebarchiesi@0 31 */
danielebarchiesi@0 32 function ctools_context_create_user_edit_form($empty, $user = NULL, $conf = FALSE) {
danielebarchiesi@0 33 // Determine the user category.
danielebarchiesi@0 34 $category = !empty($conf['category']) ? $conf['category'] : FALSE;
danielebarchiesi@0 35 unset($conf['category']);
danielebarchiesi@0 36
danielebarchiesi@0 37 // Return previously created contexts, per category.
danielebarchiesi@0 38 static $created = array();
danielebarchiesi@0 39 if (!empty($created[$category])) {
danielebarchiesi@0 40 return $created[$category];
danielebarchiesi@0 41 }
danielebarchiesi@0 42 // If no category was specified, use the default 'account'.
danielebarchiesi@0 43 if (!$category) {
danielebarchiesi@0 44 $category = 'account';
danielebarchiesi@0 45 }
danielebarchiesi@0 46
danielebarchiesi@0 47 $context = new ctools_context(array('form', 'user_edit', 'user_form', 'user_edit_form', 'user', 'entity:user'));
danielebarchiesi@0 48 // Store this context for later.
danielebarchiesi@0 49 $created[$category] = $context;
danielebarchiesi@0 50 $context->plugin = 'user_edit_form';
danielebarchiesi@0 51 if ($empty) {
danielebarchiesi@0 52 return $context;
danielebarchiesi@0 53 }
danielebarchiesi@0 54
danielebarchiesi@0 55 if (!empty($conf)) {
danielebarchiesi@0 56 // In this case, $user is actually our $conf array.
danielebarchiesi@0 57 $uid = is_array($user) && isset($user['uid']) ? $user['uid'] : (is_object($user) ? $user->uid : 0);
danielebarchiesi@0 58
danielebarchiesi@0 59 if (module_exists('translation')) {
danielebarchiesi@0 60 if ($translation = module_invoke('translation', 'user_uid', $uid, $GLOBALS['language']->language)) {
danielebarchiesi@0 61 $uid = $translation;
danielebarchiesi@0 62 $reload = TRUE;
danielebarchiesi@0 63 }
danielebarchiesi@0 64 }
danielebarchiesi@0 65
danielebarchiesi@0 66 if (is_array($user) || !empty($reload)) {
danielebarchiesi@0 67 $user = user_load($uid);
danielebarchiesi@0 68 }
danielebarchiesi@0 69 }
danielebarchiesi@0 70
danielebarchiesi@0 71 if (!empty($user)) {
danielebarchiesi@0 72 $form_id = 'user_profile_form';
danielebarchiesi@0 73
danielebarchiesi@0 74 $form_state = array('want form' => TRUE, 'build_info' => array('args' => array($user, $category)));
danielebarchiesi@0 75
danielebarchiesi@0 76 $file = drupal_get_path('module', 'user') . '/user.pages.inc';
danielebarchiesi@0 77 require_once DRUPAL_ROOT . '/' . $file;
danielebarchiesi@0 78 // This piece of information can let other modules know that more files
danielebarchiesi@0 79 // need to be included if this form is loaded from cache:
danielebarchiesi@0 80 $form_state['build_info']['files'] = array($file);
danielebarchiesi@0 81
danielebarchiesi@0 82 $form = drupal_build_form($form_id, $form_state);
danielebarchiesi@0 83
danielebarchiesi@0 84 // Fill in the 'node' portion of the context
danielebarchiesi@0 85 $context->data = $user;
danielebarchiesi@0 86 $context->title = isset($user->name) ? $user->name : '';
danielebarchiesi@0 87 $context->argument = $user->uid;
danielebarchiesi@0 88
danielebarchiesi@0 89 $context->form = $form;
danielebarchiesi@0 90 $context->form_state = &$form_state;
danielebarchiesi@0 91 $context->form_id = $form_id;
danielebarchiesi@0 92 $context->form_title = isset($user->name) ? $user->name : '';
danielebarchiesi@0 93 $context->restrictions['form'] = array('form');
danielebarchiesi@0 94 return $context;
danielebarchiesi@0 95 }
danielebarchiesi@0 96 }
danielebarchiesi@0 97
danielebarchiesi@0 98 function ctools_context_user_edit_form_settings_form($form, &$form_state) {
danielebarchiesi@0 99 $conf = &$form_state['conf'];
danielebarchiesi@0 100
danielebarchiesi@0 101 $form['user'] = array(
danielebarchiesi@0 102 '#title' => t('Enter the name or UID of a node'),
danielebarchiesi@0 103 '#type' => 'textfield',
danielebarchiesi@0 104 '#maxlength' => 512,
danielebarchiesi@0 105 '#autocomplete_path' => 'ctools/autocomplete/user',
danielebarchiesi@0 106 '#weight' => -10,
danielebarchiesi@0 107 );
danielebarchiesi@0 108
danielebarchiesi@0 109 if (!empty($conf['uid'])) {
danielebarchiesi@0 110 $info = db_query('SELECT * FROM {user} WHERE uid = :uid', array(':uid' => $conf['uid']))->fetchObject();
danielebarchiesi@0 111 if ($info) {
danielebarchiesi@0 112 $link = l(t("'%name' [user id %uid]", array('%name' => $info->name, '%uid' => $info->uid)), "user/$info->uid", array('attributes' => array('target' => '_blank', 'title' => t('Open in new window')), 'html' => TRUE));
danielebarchiesi@0 113 $form['user']['#description'] = t('Currently set to !link', array('!link' => $link));
danielebarchiesi@0 114 }
danielebarchiesi@0 115 }
danielebarchiesi@0 116
danielebarchiesi@0 117 $form['uid'] = array(
danielebarchiesi@0 118 '#type' => 'value',
danielebarchiesi@0 119 '#value' => $conf['uid'],
danielebarchiesi@0 120 );
danielebarchiesi@0 121
danielebarchiesi@0 122 $form['set_identifier'] = array(
danielebarchiesi@0 123 '#type' => 'checkbox',
danielebarchiesi@0 124 '#default_value' => FALSE,
danielebarchiesi@0 125 '#title' => t('Reset identifier to user name'),
danielebarchiesi@0 126 '#description' => t('If checked, the identifier will be reset to the user name of the selected user.'),
danielebarchiesi@0 127 );
danielebarchiesi@0 128
danielebarchiesi@0 129 return $form;
danielebarchiesi@0 130 }
danielebarchiesi@0 131
danielebarchiesi@0 132 /**
danielebarchiesi@0 133 * Validate a node.
danielebarchiesi@0 134 */
danielebarchiesi@0 135 function ctools_context_user_edit_form_settings_form_validate($form, &$form_state) {
danielebarchiesi@0 136 // Validate the autocomplete
danielebarchiesi@0 137 if (empty($form_state['values']['uid']) && empty($form_state['values']['user'])) {
danielebarchiesi@0 138 form_error($form['user'], t('You must select a user.'));
danielebarchiesi@0 139 return;
danielebarchiesi@0 140 }
danielebarchiesi@0 141
danielebarchiesi@0 142 if (empty($form_state['values']['user'])) {
danielebarchiesi@0 143 return;
danielebarchiesi@0 144 }
danielebarchiesi@0 145
danielebarchiesi@0 146 $uid = $form_state['values']['user'];
danielebarchiesi@0 147 $preg_matches = array();
danielebarchiesi@0 148 $match = preg_match('/\[id: (\d+)\]/', $uid, $preg_matches);
danielebarchiesi@0 149 if (!$match) {
danielebarchiesi@0 150 $match = preg_match('/^id: (\d+)/', $uid, $preg_matches);
danielebarchiesi@0 151 }
danielebarchiesi@0 152
danielebarchiesi@0 153 if ($match) {
danielebarchiesi@0 154 $uid = $preg_matches[1];
danielebarchiesi@0 155 }
danielebarchiesi@0 156 if (is_numeric($uid)) {
danielebarchiesi@0 157 $user = db_query('SELECT uid FROM {user} WHEREuid = :uid', array(':uid' => $uid))->fetchObject();
danielebarchiesi@0 158 }
danielebarchiesi@0 159 else {
danielebarchiesi@0 160 $user = db_query('SELECT uid FROM {user} WHERE LOWER(name) = LOWER(:name)', array(':name' => $uid))->fetchObject();
danielebarchiesi@0 161 }
danielebarchiesi@0 162
danielebarchiesi@0 163 form_set_value($form['uid'], $user->uid, $form_state);
danielebarchiesi@0 164 }
danielebarchiesi@0 165 function ctools_context_user_edit_form_settings_form_submit($form, &$form_state) {
danielebarchiesi@0 166 if ($form_state['values']['set_identifier']) {
danielebarchiesi@0 167 $user = user_load($form_state['values']['uid']);
danielebarchiesi@0 168 $form_state['values']['identifier'] = $user->name;
danielebarchiesi@0 169 }
danielebarchiesi@0 170
danielebarchiesi@0 171 // This will either be the value set previously or a value set by the
danielebarchiesi@0 172 // validator.
danielebarchiesi@0 173 $form_state['conf']['uid'] = $form_state['values']['uid'];
danielebarchiesi@0 174 }
danielebarchiesi@0 175
danielebarchiesi@0 176 /**
danielebarchiesi@0 177 * Provide a list of ways that this context can be converted to a string.
danielebarchiesi@0 178 */
danielebarchiesi@0 179 function ctools_context_user_edit_convert_list() {
danielebarchiesi@0 180 // Pass through to the "node" context convert list.
danielebarchiesi@0 181 $plugin = ctools_get_context('user');
danielebarchiesi@0 182 return ctools_context_user_convert_list();
danielebarchiesi@0 183 }
danielebarchiesi@0 184
danielebarchiesi@0 185 /**
danielebarchiesi@0 186 * Convert a context into a string.
danielebarchiesi@0 187 */
danielebarchiesi@0 188 function ctools_context_user_edit_convert($context, $type) {
danielebarchiesi@0 189 // Pass through to the "node" context convert list.
danielebarchiesi@0 190 $plugin = ctools_get_context('user');
danielebarchiesi@0 191 return ctools_context_user_convert($context, $type);
danielebarchiesi@0 192 }