danielebarchiesi@0: t('Operations'), 'colspan' => 2), danielebarchiesi@0: ); danielebarchiesi@0: $rows = array(); danielebarchiesi@0: danielebarchiesi@0: // Get all the contact categories from the database. danielebarchiesi@0: $categories = db_select('contact', 'c') danielebarchiesi@0: ->addTag('translatable') danielebarchiesi@0: ->fields('c', array('cid', 'category', 'recipients', 'selected')) danielebarchiesi@0: ->orderBy('weight') danielebarchiesi@0: ->orderBy('category') danielebarchiesi@0: ->execute() danielebarchiesi@0: ->fetchAll(); danielebarchiesi@0: danielebarchiesi@0: // Loop through the categories and add them to the table. danielebarchiesi@0: foreach ($categories as $category) { danielebarchiesi@0: $rows[] = array( danielebarchiesi@0: check_plain($category->category), danielebarchiesi@0: check_plain($category->recipients), danielebarchiesi@0: ($category->selected ? t('Yes') : t('No')), danielebarchiesi@0: l(t('Edit'), 'admin/structure/contact/edit/' . $category->cid), danielebarchiesi@0: l(t('Delete'), 'admin/structure/contact/delete/' . $category->cid), danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (!$rows) { danielebarchiesi@0: $rows[] = array(array( danielebarchiesi@0: 'data' => t('No categories available.'), danielebarchiesi@0: 'colspan' => 5, danielebarchiesi@0: )); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: $build['category_table'] = array( danielebarchiesi@0: '#theme' => 'table', danielebarchiesi@0: '#header' => $header, danielebarchiesi@0: '#rows' => $rows, danielebarchiesi@0: ); danielebarchiesi@0: return $build; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Form constructor for the category edit form. danielebarchiesi@0: * danielebarchiesi@0: * @param $category danielebarchiesi@0: * An array describing the category to be edited. May be empty for new danielebarchiesi@0: * categories. Recognized array keys are: danielebarchiesi@0: * - category: The name of the category. danielebarchiesi@0: * - recipients: A comma-separated list of recipients. danielebarchiesi@0: * - reply: (optional) The body of the auto-reply message. danielebarchiesi@0: * - weight: The weight of the category. danielebarchiesi@0: * - selected: Boolean indicating whether the category should be selected by danielebarchiesi@0: * default. danielebarchiesi@0: * - cid: The category ID for which the form is to be displayed. danielebarchiesi@0: * danielebarchiesi@0: * @see contact_category_edit_form_validate() danielebarchiesi@0: * @see contact_category_edit_form_submit() danielebarchiesi@0: * @ingroup forms danielebarchiesi@0: */ danielebarchiesi@0: function contact_category_edit_form($form, &$form_state, array $category = array()) { danielebarchiesi@0: // If this is a new category, add the default values. danielebarchiesi@0: $category += array( danielebarchiesi@0: 'category' => '', danielebarchiesi@0: 'recipients' => '', danielebarchiesi@0: 'reply' => '', danielebarchiesi@0: 'weight' => 0, danielebarchiesi@0: 'selected' => 0, danielebarchiesi@0: 'cid' => NULL, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: $form['category'] = array( danielebarchiesi@0: '#type' => 'textfield', danielebarchiesi@0: '#title' => t('Category'), danielebarchiesi@0: '#maxlength' => 255, danielebarchiesi@0: '#default_value' => $category['category'], danielebarchiesi@0: '#description' => t("Example: 'website feedback' or 'product information'."), danielebarchiesi@0: '#required' => TRUE, danielebarchiesi@0: ); danielebarchiesi@0: $form['recipients'] = array( danielebarchiesi@0: '#type' => 'textarea', danielebarchiesi@0: '#title' => t('Recipients'), danielebarchiesi@0: '#default_value' => $category['recipients'], danielebarchiesi@0: '#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: '#required' => TRUE, danielebarchiesi@0: ); danielebarchiesi@0: $form['reply'] = array( danielebarchiesi@0: '#type' => 'textarea', danielebarchiesi@0: '#title' => t('Auto-reply'), danielebarchiesi@0: '#default_value' => $category['reply'], danielebarchiesi@0: '#description' => t('Optional auto-reply. Leave empty if you do not want to send the user an auto-reply message.'), danielebarchiesi@0: ); danielebarchiesi@0: $form['weight'] = array( danielebarchiesi@0: '#type' => 'weight', danielebarchiesi@0: '#title' => t('Weight'), danielebarchiesi@0: '#default_value' => $category['weight'], danielebarchiesi@0: '#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: ); danielebarchiesi@0: $form['selected'] = array( danielebarchiesi@0: '#type' => 'select', danielebarchiesi@0: '#title' => t('Selected'), danielebarchiesi@0: '#options' => array( danielebarchiesi@0: 0 => t('No'), danielebarchiesi@0: 1 => t('Yes'), danielebarchiesi@0: ), danielebarchiesi@0: '#default_value' => $category['selected'], danielebarchiesi@0: '#description' => t('Set this to Yes if you would like this category to be selected by default.'), danielebarchiesi@0: ); danielebarchiesi@0: $form['cid'] = array( danielebarchiesi@0: '#type' => 'value', danielebarchiesi@0: '#value' => $category['cid'], danielebarchiesi@0: ); danielebarchiesi@0: $form['actions'] = array('#type' => 'actions'); danielebarchiesi@0: $form['actions']['submit'] = array( danielebarchiesi@0: '#type' => 'submit', danielebarchiesi@0: '#value' => t('Save'), danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return $form; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Form validation handler for contact_category_edit_form(). danielebarchiesi@0: * danielebarchiesi@0: * @see contact_category_edit_form_submit() danielebarchiesi@0: */ danielebarchiesi@0: function contact_category_edit_form_validate($form, &$form_state) { danielebarchiesi@0: // Validate and each e-mail recipient. danielebarchiesi@0: $recipients = explode(',', $form_state['values']['recipients']); danielebarchiesi@0: danielebarchiesi@0: // When creating a new contact form, or renaming the category on an existing danielebarchiesi@0: // contact form, make sure that the given category is unique. danielebarchiesi@0: $category = $form_state['values']['category']; danielebarchiesi@0: $query = db_select('contact', 'c')->condition('c.category', $category, '='); danielebarchiesi@0: if (!empty($form_state['values']['cid'])) { danielebarchiesi@0: $query->condition('c.cid', $form_state['values']['cid'], '<>'); danielebarchiesi@0: } danielebarchiesi@0: if ($query->countQuery()->execute()->fetchField()) { danielebarchiesi@0: form_set_error('category', t('A contact form with category %category already exists.', array('%category' => $category))); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: foreach ($recipients as &$recipient) { danielebarchiesi@0: $recipient = trim($recipient); danielebarchiesi@0: if (!valid_email_address($recipient)) { danielebarchiesi@0: form_set_error('recipients', t('%recipient is an invalid e-mail address.', array('%recipient' => $recipient))); danielebarchiesi@0: } danielebarchiesi@0: } danielebarchiesi@0: $form_state['values']['recipients'] = implode(',', $recipients); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Form submission handler for contact_category_edit_form(). danielebarchiesi@0: * danielebarchiesi@0: * @see contact_category_edit_form_validate() danielebarchiesi@0: */ danielebarchiesi@0: function contact_category_edit_form_submit($form, &$form_state) { danielebarchiesi@0: if ($form_state['values']['selected']) { danielebarchiesi@0: // Unselect all other contact categories. danielebarchiesi@0: db_update('contact') danielebarchiesi@0: ->fields(array('selected' => '0')) danielebarchiesi@0: ->execute(); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: if (empty($form_state['values']['cid'])) { danielebarchiesi@0: drupal_write_record('contact', $form_state['values']); danielebarchiesi@0: } danielebarchiesi@0: else { danielebarchiesi@0: drupal_write_record('contact', $form_state['values'], array('cid')); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: drupal_set_message(t('Category %category has been saved.', array('%category' => $form_state['values']['category']))); danielebarchiesi@0: 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: $form_state['redirect'] = 'admin/structure/contact'; danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Form constructor for the contact category deletion form. danielebarchiesi@0: * danielebarchiesi@0: * @param $contact danielebarchiesi@0: * Array describing the contact category to be deleted. See the documentation danielebarchiesi@0: * of contact_category_edit_form() for the recognized keys. danielebarchiesi@0: * danielebarchiesi@0: * @see contact_menu() danielebarchiesi@0: * @see contact_category_delete_form_submit() danielebarchiesi@0: */ danielebarchiesi@0: function contact_category_delete_form($form, &$form_state, array $contact) { danielebarchiesi@0: $form['contact'] = array( danielebarchiesi@0: '#type' => 'value', danielebarchiesi@0: '#value' => $contact, danielebarchiesi@0: ); danielebarchiesi@0: danielebarchiesi@0: return confirm_form( danielebarchiesi@0: $form, danielebarchiesi@0: t('Are you sure you want to delete %category?', array('%category' => $contact['category'])), danielebarchiesi@0: 'admin/structure/contact', danielebarchiesi@0: t('This action cannot be undone.'), danielebarchiesi@0: t('Delete'), danielebarchiesi@0: t('Cancel') danielebarchiesi@0: ); danielebarchiesi@0: } danielebarchiesi@0: danielebarchiesi@0: /** danielebarchiesi@0: * Form submission handler for contact_category_delete_form(). danielebarchiesi@0: */ danielebarchiesi@0: function contact_category_delete_form_submit($form, &$form_state) { danielebarchiesi@0: $contact = $form['contact']['#value']; danielebarchiesi@0: danielebarchiesi@0: db_delete('contact') danielebarchiesi@0: ->condition('cid', $contact['cid']) danielebarchiesi@0: ->execute(); danielebarchiesi@0: danielebarchiesi@0: drupal_set_message(t('Category %category has been deleted.', array('%category' => $contact['category']))); danielebarchiesi@0: watchdog('contact', 'Category %category has been deleted.', array('%category' => $contact['category']), WATCHDOG_NOTICE); danielebarchiesi@0: danielebarchiesi@0: $form_state['redirect'] = 'admin/structure/contact'; danielebarchiesi@0: }