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 }
|