diff --git wysiwyg.module wysiwyg.module index 7b30d29..fe49b6d 100644 --- wysiwyg.module +++ wysiwyg.module @@ -610,46 +610,62 @@ function wysiwyg_profile_load_all() { } /** - * Implementation of hook_user(). + * Implements hook_form_FORM_ID_alter(). */ -function wysiwyg_user($type, &$edit, &$user, $category = NULL) { - if ($type == 'form' && $category == 'account') { - // @todo http://drupal.org/node/322433 - $profile = new stdClass; - if (isset($profile->settings['user_choose']) && $profile->settings['user_choose']) { - $form['wysiwyg'] = array( - '#type' => 'fieldset', - '#title' => t('Wysiwyg Editor settings'), - '#weight' => 10, - '#collapsible' => TRUE, - '#collapsed' => TRUE, - ); - $form['wysiwyg']['wysiwyg_status'] = array( - '#type' => 'checkbox', - '#title' => t('Enable editor by default'), - '#default_value' => isset($user->wysiwyg_status) ? $user->wysiwyg_status : (isset($profile->settings['default']) ? $profile->settings['default'] : FALSE), - '#return_value' => 1, - '#description' => t('If enabled, rich-text editing is enabled by default in textarea fields.'), - ); - return array('wysiwyg' => $form); +function wysiwyg_form_user_profile_form_alter(&$form, &$form_state, $form_id) { + $user = $form['#user']; + $user_formats = filter_formats($user); + $options = array(); + $options_default = array(); + foreach (wysiwyg_profile_load_all() as $format => $profile) { + // Only show formats a user has access to use that allow user_choose. + if (!empty($profile->settings['user_choose']) && isset($user_formats[$format])) { + $options[$format] = $user_formats[$format]->name; + if (wysiwyg_user_get_status($profile, $user)) { + $options_default[] = $format; + } } } - elseif ($type == 'validate' && isset($edit['wysiwyg_status'])) { - return array('wysiwyg_status' => $edit['wysiwyg_status']); + if (!empty($options)) { + $form['wysiwyg'] = array( + '#type' => 'fieldset', + '#title' => t('Wysiwyg Editor settings'), + '#weight' => 10, + '#collapsible' => TRUE, + '#collapsed' => TRUE, + ); + $form['wysiwyg']['wysiwyg_status'] = array( + '#type' => 'checkboxes', + '#title' => t('Text formats enabled for rich-text editing'), + '#default_value' => $options_default, + '#options' => $options, + ); } } -function wysiwyg_user_get_status($profile) { +/** + * Implements hook_user_presave(). + */ +function wysiwyg_user_presave(&$edit, $account, $category) { + if (isset($edit['wysiwyg_status'])) { + $edit['data']['wysiwyg_status'] = $edit['wysiwyg_status']; + } +} + +function wysiwyg_user_get_status($profile, $account = NULL) { global $user; - if (!empty($profile->settings['user_choose']) && isset($user->wysiwyg_status)) { - $status = $user->wysiwyg_status; + if (!isset($account)) { + $account = $user; + } + if (!empty($profile->settings['user_choose']) && isset($account->data['wysiwyg_status'][$profile->format])) { + $status = $account->data['wysiwyg_status'][$profile->format]; } else { $status = isset($profile->settings['default']) ? $profile->settings['default'] : TRUE; } - return $status; + return (bool) $status; } /**