danielebarchiesi@0
|
1 <?php
|
danielebarchiesi@0
|
2
|
danielebarchiesi@0
|
3 /**
|
danielebarchiesi@0
|
4 * @file
|
danielebarchiesi@0
|
5 * Admin page callbacks for the Contact module.
|
danielebarchiesi@0
|
6 */
|
danielebarchiesi@0
|
7
|
danielebarchiesi@0
|
8 /**
|
danielebarchiesi@0
|
9 * Categories/list tab.
|
danielebarchiesi@0
|
10 */
|
danielebarchiesi@0
|
11 function contact_category_list() {
|
danielebarchiesi@0
|
12 $header = array(
|
danielebarchiesi@0
|
13 t('Category'),
|
danielebarchiesi@0
|
14 t('Recipients'),
|
danielebarchiesi@0
|
15 t('Selected'),
|
danielebarchiesi@0
|
16 array('data' => t('Operations'), 'colspan' => 2),
|
danielebarchiesi@0
|
17 );
|
danielebarchiesi@0
|
18 $rows = array();
|
danielebarchiesi@0
|
19
|
danielebarchiesi@0
|
20 // Get all the contact categories from the database.
|
danielebarchiesi@0
|
21 $categories = db_select('contact', 'c')
|
danielebarchiesi@0
|
22 ->addTag('translatable')
|
danielebarchiesi@0
|
23 ->fields('c', array('cid', 'category', 'recipients', 'selected'))
|
danielebarchiesi@0
|
24 ->orderBy('weight')
|
danielebarchiesi@0
|
25 ->orderBy('category')
|
danielebarchiesi@0
|
26 ->execute()
|
danielebarchiesi@0
|
27 ->fetchAll();
|
danielebarchiesi@0
|
28
|
danielebarchiesi@0
|
29 // Loop through the categories and add them to the table.
|
danielebarchiesi@0
|
30 foreach ($categories as $category) {
|
danielebarchiesi@0
|
31 $rows[] = array(
|
danielebarchiesi@0
|
32 check_plain($category->category),
|
danielebarchiesi@0
|
33 check_plain($category->recipients),
|
danielebarchiesi@0
|
34 ($category->selected ? t('Yes') : t('No')),
|
danielebarchiesi@0
|
35 l(t('Edit'), 'admin/structure/contact/edit/' . $category->cid),
|
danielebarchiesi@0
|
36 l(t('Delete'), 'admin/structure/contact/delete/' . $category->cid),
|
danielebarchiesi@0
|
37 );
|
danielebarchiesi@0
|
38 }
|
danielebarchiesi@0
|
39
|
danielebarchiesi@0
|
40 if (!$rows) {
|
danielebarchiesi@0
|
41 $rows[] = array(array(
|
danielebarchiesi@0
|
42 'data' => t('No categories available.'),
|
danielebarchiesi@0
|
43 'colspan' => 5,
|
danielebarchiesi@0
|
44 ));
|
danielebarchiesi@0
|
45 }
|
danielebarchiesi@0
|
46
|
danielebarchiesi@0
|
47 $build['category_table'] = array(
|
danielebarchiesi@0
|
48 '#theme' => 'table',
|
danielebarchiesi@0
|
49 '#header' => $header,
|
danielebarchiesi@0
|
50 '#rows' => $rows,
|
danielebarchiesi@0
|
51 );
|
danielebarchiesi@0
|
52 return $build;
|
danielebarchiesi@0
|
53 }
|
danielebarchiesi@0
|
54
|
danielebarchiesi@0
|
55 /**
|
danielebarchiesi@0
|
56 * Form constructor for the category edit form.
|
danielebarchiesi@0
|
57 *
|
danielebarchiesi@0
|
58 * @param $category
|
danielebarchiesi@0
|
59 * An array describing the category to be edited. May be empty for new
|
danielebarchiesi@0
|
60 * categories. Recognized array keys are:
|
danielebarchiesi@0
|
61 * - category: The name of the category.
|
danielebarchiesi@0
|
62 * - recipients: A comma-separated list of recipients.
|
danielebarchiesi@0
|
63 * - reply: (optional) The body of the auto-reply message.
|
danielebarchiesi@0
|
64 * - weight: The weight of the category.
|
danielebarchiesi@0
|
65 * - selected: Boolean indicating whether the category should be selected by
|
danielebarchiesi@0
|
66 * default.
|
danielebarchiesi@0
|
67 * - cid: The category ID for which the form is to be displayed.
|
danielebarchiesi@0
|
68 *
|
danielebarchiesi@0
|
69 * @see contact_category_edit_form_validate()
|
danielebarchiesi@0
|
70 * @see contact_category_edit_form_submit()
|
danielebarchiesi@0
|
71 * @ingroup forms
|
danielebarchiesi@0
|
72 */
|
danielebarchiesi@0
|
73 function contact_category_edit_form($form, &$form_state, array $category = array()) {
|
danielebarchiesi@0
|
74 // If this is a new category, add the default values.
|
danielebarchiesi@0
|
75 $category += array(
|
danielebarchiesi@0
|
76 'category' => '',
|
danielebarchiesi@0
|
77 'recipients' => '',
|
danielebarchiesi@0
|
78 'reply' => '',
|
danielebarchiesi@0
|
79 'weight' => 0,
|
danielebarchiesi@0
|
80 'selected' => 0,
|
danielebarchiesi@0
|
81 'cid' => NULL,
|
danielebarchiesi@0
|
82 );
|
danielebarchiesi@0
|
83
|
danielebarchiesi@0
|
84 $form['category'] = array(
|
danielebarchiesi@0
|
85 '#type' => 'textfield',
|
danielebarchiesi@0
|
86 '#title' => t('Category'),
|
danielebarchiesi@0
|
87 '#maxlength' => 255,
|
danielebarchiesi@0
|
88 '#default_value' => $category['category'],
|
danielebarchiesi@0
|
89 '#description' => t("Example: 'website feedback' or 'product information'."),
|
danielebarchiesi@0
|
90 '#required' => TRUE,
|
danielebarchiesi@0
|
91 );
|
danielebarchiesi@0
|
92 $form['recipients'] = array(
|
danielebarchiesi@0
|
93 '#type' => 'textarea',
|
danielebarchiesi@0
|
94 '#title' => t('Recipients'),
|
danielebarchiesi@0
|
95 '#default_value' => $category['recipients'],
|
danielebarchiesi@0
|
96 '#description' => t("Example: 'webmaster@example.com' or 'sales@example.com,support@example.com' . To specify multiple recipients, separate each e-mail address with a comma."),
|
danielebarchiesi@0
|
97 '#required' => TRUE,
|
danielebarchiesi@0
|
98 );
|
danielebarchiesi@0
|
99 $form['reply'] = array(
|
danielebarchiesi@0
|
100 '#type' => 'textarea',
|
danielebarchiesi@0
|
101 '#title' => t('Auto-reply'),
|
danielebarchiesi@0
|
102 '#default_value' => $category['reply'],
|
danielebarchiesi@0
|
103 '#description' => t('Optional auto-reply. Leave empty if you do not want to send the user an auto-reply message.'),
|
danielebarchiesi@0
|
104 );
|
danielebarchiesi@0
|
105 $form['weight'] = array(
|
danielebarchiesi@0
|
106 '#type' => 'weight',
|
danielebarchiesi@0
|
107 '#title' => t('Weight'),
|
danielebarchiesi@0
|
108 '#default_value' => $category['weight'],
|
danielebarchiesi@0
|
109 '#description' => t('When listing categories, those with lighter (smaller) weights get listed before categories with heavier (larger) weights. Categories with equal weights are sorted alphabetically.'),
|
danielebarchiesi@0
|
110 );
|
danielebarchiesi@0
|
111 $form['selected'] = array(
|
danielebarchiesi@0
|
112 '#type' => 'select',
|
danielebarchiesi@0
|
113 '#title' => t('Selected'),
|
danielebarchiesi@0
|
114 '#options' => array(
|
danielebarchiesi@0
|
115 0 => t('No'),
|
danielebarchiesi@0
|
116 1 => t('Yes'),
|
danielebarchiesi@0
|
117 ),
|
danielebarchiesi@0
|
118 '#default_value' => $category['selected'],
|
danielebarchiesi@0
|
119 '#description' => t('Set this to <em>Yes</em> if you would like this category to be selected by default.'),
|
danielebarchiesi@0
|
120 );
|
danielebarchiesi@0
|
121 $form['cid'] = array(
|
danielebarchiesi@0
|
122 '#type' => 'value',
|
danielebarchiesi@0
|
123 '#value' => $category['cid'],
|
danielebarchiesi@0
|
124 );
|
danielebarchiesi@0
|
125 $form['actions'] = array('#type' => 'actions');
|
danielebarchiesi@0
|
126 $form['actions']['submit'] = array(
|
danielebarchiesi@0
|
127 '#type' => 'submit',
|
danielebarchiesi@0
|
128 '#value' => t('Save'),
|
danielebarchiesi@0
|
129 );
|
danielebarchiesi@0
|
130
|
danielebarchiesi@0
|
131 return $form;
|
danielebarchiesi@0
|
132 }
|
danielebarchiesi@0
|
133
|
danielebarchiesi@0
|
134 /**
|
danielebarchiesi@0
|
135 * Form validation handler for contact_category_edit_form().
|
danielebarchiesi@0
|
136 *
|
danielebarchiesi@0
|
137 * @see contact_category_edit_form_submit()
|
danielebarchiesi@0
|
138 */
|
danielebarchiesi@0
|
139 function contact_category_edit_form_validate($form, &$form_state) {
|
danielebarchiesi@0
|
140 // Validate and each e-mail recipient.
|
danielebarchiesi@0
|
141 $recipients = explode(',', $form_state['values']['recipients']);
|
danielebarchiesi@0
|
142
|
danielebarchiesi@0
|
143 // When creating a new contact form, or renaming the category on an existing
|
danielebarchiesi@0
|
144 // contact form, make sure that the given category is unique.
|
danielebarchiesi@0
|
145 $category = $form_state['values']['category'];
|
danielebarchiesi@0
|
146 $query = db_select('contact', 'c')->condition('c.category', $category, '=');
|
danielebarchiesi@0
|
147 if (!empty($form_state['values']['cid'])) {
|
danielebarchiesi@0
|
148 $query->condition('c.cid', $form_state['values']['cid'], '<>');
|
danielebarchiesi@0
|
149 }
|
danielebarchiesi@0
|
150 if ($query->countQuery()->execute()->fetchField()) {
|
danielebarchiesi@0
|
151 form_set_error('category', t('A contact form with category %category already exists.', array('%category' => $category)));
|
danielebarchiesi@0
|
152 }
|
danielebarchiesi@0
|
153
|
danielebarchiesi@0
|
154 foreach ($recipients as &$recipient) {
|
danielebarchiesi@0
|
155 $recipient = trim($recipient);
|
danielebarchiesi@0
|
156 if (!valid_email_address($recipient)) {
|
danielebarchiesi@0
|
157 form_set_error('recipients', t('%recipient is an invalid e-mail address.', array('%recipient' => $recipient)));
|
danielebarchiesi@0
|
158 }
|
danielebarchiesi@0
|
159 }
|
danielebarchiesi@0
|
160 $form_state['values']['recipients'] = implode(',', $recipients);
|
danielebarchiesi@0
|
161 }
|
danielebarchiesi@0
|
162
|
danielebarchiesi@0
|
163 /**
|
danielebarchiesi@0
|
164 * Form submission handler for contact_category_edit_form().
|
danielebarchiesi@0
|
165 *
|
danielebarchiesi@0
|
166 * @see contact_category_edit_form_validate()
|
danielebarchiesi@0
|
167 */
|
danielebarchiesi@0
|
168 function contact_category_edit_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
169 if ($form_state['values']['selected']) {
|
danielebarchiesi@0
|
170 // Unselect all other contact categories.
|
danielebarchiesi@0
|
171 db_update('contact')
|
danielebarchiesi@0
|
172 ->fields(array('selected' => '0'))
|
danielebarchiesi@0
|
173 ->execute();
|
danielebarchiesi@0
|
174 }
|
danielebarchiesi@0
|
175
|
danielebarchiesi@0
|
176 if (empty($form_state['values']['cid'])) {
|
danielebarchiesi@0
|
177 drupal_write_record('contact', $form_state['values']);
|
danielebarchiesi@0
|
178 }
|
danielebarchiesi@0
|
179 else {
|
danielebarchiesi@0
|
180 drupal_write_record('contact', $form_state['values'], array('cid'));
|
danielebarchiesi@0
|
181 }
|
danielebarchiesi@0
|
182
|
danielebarchiesi@0
|
183 drupal_set_message(t('Category %category has been saved.', array('%category' => $form_state['values']['category'])));
|
danielebarchiesi@0
|
184 watchdog('contact', 'Category %category has been saved.', array('%category' => $form_state['values']['category']), WATCHDOG_NOTICE, l(t('Edit'), 'admin/structure/contact/edit/' . $form_state['values']['cid']));
|
danielebarchiesi@0
|
185 $form_state['redirect'] = 'admin/structure/contact';
|
danielebarchiesi@0
|
186 }
|
danielebarchiesi@0
|
187
|
danielebarchiesi@0
|
188 /**
|
danielebarchiesi@0
|
189 * Form constructor for the contact category deletion form.
|
danielebarchiesi@0
|
190 *
|
danielebarchiesi@0
|
191 * @param $contact
|
danielebarchiesi@0
|
192 * Array describing the contact category to be deleted. See the documentation
|
danielebarchiesi@0
|
193 * of contact_category_edit_form() for the recognized keys.
|
danielebarchiesi@0
|
194 *
|
danielebarchiesi@0
|
195 * @see contact_menu()
|
danielebarchiesi@0
|
196 * @see contact_category_delete_form_submit()
|
danielebarchiesi@0
|
197 */
|
danielebarchiesi@0
|
198 function contact_category_delete_form($form, &$form_state, array $contact) {
|
danielebarchiesi@0
|
199 $form['contact'] = array(
|
danielebarchiesi@0
|
200 '#type' => 'value',
|
danielebarchiesi@0
|
201 '#value' => $contact,
|
danielebarchiesi@0
|
202 );
|
danielebarchiesi@0
|
203
|
danielebarchiesi@0
|
204 return confirm_form(
|
danielebarchiesi@0
|
205 $form,
|
danielebarchiesi@0
|
206 t('Are you sure you want to delete %category?', array('%category' => $contact['category'])),
|
danielebarchiesi@0
|
207 'admin/structure/contact',
|
danielebarchiesi@0
|
208 t('This action cannot be undone.'),
|
danielebarchiesi@0
|
209 t('Delete'),
|
danielebarchiesi@0
|
210 t('Cancel')
|
danielebarchiesi@0
|
211 );
|
danielebarchiesi@0
|
212 }
|
danielebarchiesi@0
|
213
|
danielebarchiesi@0
|
214 /**
|
danielebarchiesi@0
|
215 * Form submission handler for contact_category_delete_form().
|
danielebarchiesi@0
|
216 */
|
danielebarchiesi@0
|
217 function contact_category_delete_form_submit($form, &$form_state) {
|
danielebarchiesi@0
|
218 $contact = $form['contact']['#value'];
|
danielebarchiesi@0
|
219
|
danielebarchiesi@0
|
220 db_delete('contact')
|
danielebarchiesi@0
|
221 ->condition('cid', $contact['cid'])
|
danielebarchiesi@0
|
222 ->execute();
|
danielebarchiesi@0
|
223
|
danielebarchiesi@0
|
224 drupal_set_message(t('Category %category has been deleted.', array('%category' => $contact['category'])));
|
danielebarchiesi@0
|
225 watchdog('contact', 'Category %category has been deleted.', array('%category' => $contact['category']), WATCHDOG_NOTICE);
|
danielebarchiesi@0
|
226
|
danielebarchiesi@0
|
227 $form_state['redirect'] = 'admin/structure/contact';
|
danielebarchiesi@0
|
228 }
|