danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 *
|
danielebarchiesi@0
|
6 * Plugin to provide a node_edit_form context
|
danielebarchiesi@0
|
7 */
|
danielebarchiesi@0
|
8
|
danielebarchiesi@0
|
9 /**
|
danielebarchiesi@0
|
10 * Plugins are described by creating a $plugin array which will be used
|
danielebarchiesi@0
|
11 * by the system that includes this file.
|
danielebarchiesi@0
|
12 */
|
danielebarchiesi@0
|
13 $plugin = array(
|
danielebarchiesi@0
|
14 'title' => t("Node edit form"),
|
danielebarchiesi@0
|
15 'description' => t('A node edit form.'),
|
danielebarchiesi@0
|
16 'context' => 'ctools_context_create_node_edit_form',
|
danielebarchiesi@0
|
17 'edit form' => 'ctools_context_node_edit_form_settings_form',
|
danielebarchiesi@0
|
18 'defaults' => array('nid' => ''),
|
danielebarchiesi@0
|
19 'keyword' => 'node_edit',
|
danielebarchiesi@0
|
20 'context name' => 'node_edit_form',
|
danielebarchiesi@0
|
21 'convert list' => 'ctools_context_node_edit_convert_list',
|
danielebarchiesi@0
|
22 'convert' => 'ctools_context_node_edit_convert',
|
danielebarchiesi@0
|
23 'placeholder form' => array(
|
danielebarchiesi@0
|
24 '#type' => 'textfield',
|
danielebarchiesi@0
|
25 '#description' => t('Enter the node ID of a node for this argument:'),
|
danielebarchiesi@0
|
26 ),
|
danielebarchiesi@0
|
27 );
|
danielebarchiesi@0
|
28
|
danielebarchiesi@0
|
29 /**
|
danielebarchiesi@0
|
30 * It's important to remember that $conf is optional here, because contexts
|
danielebarchiesi@0
|
31 * are not always created from the UI.
|
danielebarchiesi@0
|
32 */
|
danielebarchiesi@0
|
33 function ctools_context_create_node_edit_form($empty, $node = NULL, $conf = FALSE) {
|
danielebarchiesi@0
|
34 static $creating = FALSE;
|
danielebarchiesi@0
|
35 $context = new ctools_context(array('form', 'node_edit', 'node_form', 'node_edit_form', 'node', 'entity:node'));
|
danielebarchiesi@0
|
36 $context->plugin = 'node_edit_form';
|
danielebarchiesi@0
|
37
|
danielebarchiesi@0
|
38 if ($empty || ($creating)) {
|
danielebarchiesi@0
|
39 return $context;
|
danielebarchiesi@0
|
40 }
|
danielebarchiesi@0
|
41 $creating = TRUE;
|
danielebarchiesi@0
|
42
|
danielebarchiesi@0
|
43 if ($conf) {
|
danielebarchiesi@0
|
44 // In this case, $node is actually our $conf array.
|
danielebarchiesi@0
|
45 $nid = is_array($node) && isset($node['nid']) ? $node['nid'] : (is_object($node) ? $node->nid : 0);
|
danielebarchiesi@0
|
46
|
danielebarchiesi@0
|
47 if (module_exists('translation')) {
|
danielebarchiesi@0
|
48 if ($translation = module_invoke('translation', 'node_nid', $nid, $GLOBALS['language']->language)) {
|
danielebarchiesi@0
|
49 $nid = $translation;
|
danielebarchiesi@0
|
50 $reload = TRUE;
|
danielebarchiesi@0
|
51 }
|
danielebarchiesi@0
|
52 }
|
danielebarchiesi@0
|
53
|
danielebarchiesi@0
|
54 if (is_array($node) || !empty($reload)) {
|
danielebarchiesi@0
|
55 $node = node_load($nid);
|
danielebarchiesi@0
|
56 }
|
danielebarchiesi@0
|
57 }
|
danielebarchiesi@0
|
58
|
danielebarchiesi@0
|
59 if (!empty($node)) {
|
danielebarchiesi@0
|
60 $form_id = $node->type . '_node_form';
|
danielebarchiesi@0
|
61
|
danielebarchiesi@0
|
62 $form_state = array('want form' => TRUE, 'build_info' => array('args' => array($node)));
|
danielebarchiesi@0
|
63
|
danielebarchiesi@0
|
64 $file = drupal_get_path('module', 'node') . '/node.pages.inc';
|
danielebarchiesi@0
|
65 require_once DRUPAL_ROOT . '/' . $file;
|
danielebarchiesi@0
|
66 // This piece of information can let other modules know that more files
|
danielebarchiesi@0
|
67 // need to be included if this form is loaded from cache:
|
danielebarchiesi@0
|
68 $form_state['build_info']['files'] = array($file);
|
danielebarchiesi@0
|
69
|
danielebarchiesi@0
|
70 $form = drupal_build_form($form_id, $form_state);
|
danielebarchiesi@0
|
71
|
danielebarchiesi@0
|
72 // Fill in the 'node' portion of the context
|
danielebarchiesi@0
|
73 $context->data = $node;
|
danielebarchiesi@0
|
74 $context->title = isset($node->title) ? $node->title : '';
|
danielebarchiesi@0
|
75 $context->argument = isset($node->nid) ? $node->nid : $node->type;
|
danielebarchiesi@0
|
76
|
danielebarchiesi@0
|
77 $context->form = $form;
|
danielebarchiesi@0
|
78 $context->form_state = &$form_state;
|
danielebarchiesi@0
|
79 $context->form_id = $form_id;
|
danielebarchiesi@0
|
80 $context->form_title = isset($node->title) ? $node->title : '';
|
danielebarchiesi@0
|
81 $context->node_type = $node->type;
|
danielebarchiesi@0
|
82 $context->restrictions['type'] = array($node->type);
|
danielebarchiesi@0
|
83 $context->restrictions['form'] = array('form');
|
danielebarchiesi@0
|
84
|
danielebarchiesi@0
|
85 $creating = FALSE;
|
danielebarchiesi@0
|
86 return $context;
|
danielebarchiesi@0
|
87 }
|
danielebarchiesi@0
|
88 $creating = FALSE;
|
danielebarchiesi@0
|
89 }
|
danielebarchiesi@0
|
90
|
danielebarchiesi@0
|
91 function ctools_context_node_edit_form_settings_form($form, &$form_state) {
|
danielebarchiesi@0
|
92 $conf = &$form_state['conf'];
|
danielebarchiesi@0
|
93
|
danielebarchiesi@0
|
94 $form['node'] = array(
|
danielebarchiesi@0
|
95 '#title' => t('Enter the title or NID of a node'),
|
danielebarchiesi@0
|
96 '#type' => 'textfield',
|
danielebarchiesi@0
|
97 '#maxlength' => 512,
|
danielebarchiesi@0
|
98 '#autocomplete_path' => 'ctools/autocomplete/node',
|
danielebarchiesi@0
|
99 '#weight' => -10,
|
danielebarchiesi@0
|
100 );
|
danielebarchiesi@0
|
101
|
danielebarchiesi@0
|
102 if (!empty($conf['nid'])) {
|
danielebarchiesi@0
|
103 $info = db_query('SELECT * FROM {node} WHERE nid = :nid', array(':nid' => $conf['nid']))->fetchObject();
|
danielebarchiesi@0
|
104 if ($info) {
|
danielebarchiesi@0
|
105 $link = l(t("'%title' [node id %nid]", array('%title' => $info->title, '%nid' => $info->nid)), "node/$info->nid", array('attributes' => array('target' => '_blank', 'title' => t('Open in new window')), 'html' => TRUE));
|
danielebarchiesi@0
|
106 $form['node']['#description'] = t('Currently set to !link', array('!link' => $link));
|
danielebarchiesi@0
|
107 }
|
danielebarchiesi@0
|
108 }
|
danielebarchiesi@0
|
109
|
danielebarchiesi@0
|
110 $form['nid'] = array(
|
danielebarchiesi@0
|
111 '#type' => 'value',
|
danielebarchiesi@0
|
112 '#value' => $conf['nid'],
|
danielebarchiesi@0
|
113 );
|
danielebarchiesi@0
|
114
|
danielebarchiesi@0
|
115 $form['set_identifier'] = array(
|
danielebarchiesi@0
|
116 '#type' => 'checkbox',
|
danielebarchiesi@0
|
117 '#default_value' => FALSE,
|
danielebarchiesi@0
|
118 '#title' => t('Reset identifier to node title'),
|
danielebarchiesi@0
|
119 '#description' => t('If checked, the identifier will be reset to the node title of the selected node.'),
|
danielebarchiesi@0
|
120 );
|
danielebarchiesi@0
|
121
|
danielebarchiesi@0
|
122 return $form;
|
danielebarchiesi@0
|
123 }
|
danielebarchiesi@0
|
124
|
danielebarchiesi@0
|
125 /**
|
danielebarchiesi@0
|
126 * Validate a node.
|
danielebarchiesi@0
|
127 */
|
danielebarchiesi@0
|
128 function ctools_context_node_edit_form_settings_form_validate($form, &$form_state) {
|
danielebarchiesi@0
|
129 // Validate the autocomplete
|
danielebarchiesi@0
|
130 if (empty($form_state['values']['nid']) && empty($form_state['values']['node'])) {
|
danielebarchiesi@0
|
131 form_error($form['node'], t('You must select a node.'));
|
danielebarchiesi@0
|
132 return;
|
danielebarchiesi@0
|
133 }
|
danielebarchiesi@0
|
134
|
danielebarchiesi@0
|
135 if (empty($form_state['values']['node'])) {
|
danielebarchiesi@0
|
136 return;
|
danielebarchiesi@0
|
137 }
|
danielebarchiesi@0
|
138
|
danielebarchiesi@0
|
139 $nid = $form_state['values']['node'];
|
danielebarchiesi@0
|
140 $preg_matches = array();
|
danielebarchiesi@0
|
141 $match = preg_match('/\[id: (\d+)\]/', $nid, $preg_matches);
|
danielebarchiesi@0
|
142 if (!$match) {
|
danielebarchiesi@0
|
143 $match = preg_match('/^id: (\d+)/', $nid, $preg_matches);
|
danielebarchiesi@0
|
144 }
|
danielebarchiesi@0
|
145
|
danielebarchiesi@0
|
146 if ($match) {
|
danielebarchiesi@0
|
147 $nid = $preg_matches[1];
|
danielebarchiesi@0
|
148 }
|
danielebarchiesi@0
|
149 if (is_numeric($nid)) {
|
danielebarchiesi@0
|
150 $node = db_query('SELECT nid, status FROM {node} WHERE nid = :nid', array(':nid' => $nid))->fetchObject();
|
danielebarchiesi@0
|
151 }
|
danielebarchiesi@0
|
152 else {
|
danielebarchiesi@0
|
153 $node = db_query('SELECT nid, status FROM {node} WHERE LOWER(title) = LOWER(:title)', array(':title' => $nid))->fetchObject();
|
danielebarchiesi@0
|
154 }
|
danielebarchiesi@0
|
155
|
danielebarchiesi@0
|
156 // Do not allow unpublished nodes to be selected by unprivileged users
|
danielebarchiesi@0
|
157 if (!$node || (empty($node->status) && !(user_access('administer nodes')))) {
|
danielebarchiesi@0
|
158 form_error($form['node'], t('Invalid node selected.'));
|
danielebarchiesi@0
|
159 }
|
danielebarchiesi@0
|
160 else {
|
danielebarchiesi@0
|
161 form_set_value($form['nid'], $node->nid, $form_state);
|
danielebarchiesi@0
|
162 }
|
danielebarchiesi@0
|
163 }
|
danielebarchiesi@0
|
164
|
danielebarchiesi@0
|
165 function ctools_context_node_edit_form_settings_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
166 if ($form_state['values']['set_identifier']) {
|
danielebarchiesi@0
|
167 $node = node_load($form_state['values']['nid']);
|
danielebarchiesi@0
|
168 $form_state['values']['identifier'] = $node->title;
|
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']['nid'] = $form_state['values']['nid'];
|
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_node_edit_convert_list() {
|
danielebarchiesi@0
|
180 // Pass through to the "node" context convert list.
|
danielebarchiesi@0
|
181 $plugin = ctools_get_context('node');
|
danielebarchiesi@0
|
182 return ctools_context_node_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_node_edit_convert($context, $type) {
|
danielebarchiesi@0
|
189 // Pass through to the "node" context convert list.
|
danielebarchiesi@0
|
190 $plugin = ctools_get_context('node');
|
danielebarchiesi@0
|
191 return ctools_context_node_convert($context, $type);
|
danielebarchiesi@0
|
192 }
|