annotate modules/contact/contact.admin.inc @ 2:b74b41bb73f0

-- Google analytics module
author danieleb <danielebarchiesi@me.com>
date Thu, 22 Aug 2013 17:22:54 +0100
parents ff03f76ab3fe
children
rev   line source
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 }