diff options
| -rw-r--r-- | CHANGELOG | 1 | ||||
| -rw-r--r-- | program/steps/settings/edit_identity.inc | 119 | ||||
| -rw-r--r-- | program/steps/settings/func.inc | 26 | 
3 files changed, 85 insertions, 61 deletions
| @@ -17,6 +17,7 @@ CHANGELOG RoundCube Webmail  - Fix "Threaded" checkbox after subfolder creation (#1486928)  - Fix timezone string in sent mail (#1486961)  - Show disabled checkboxes for protected folders instead of dots (#1485498) +- Added fieldsets in Identity form, added 'identity_form' hook  RELEASE 0.4  ----------- diff --git a/program/steps/settings/edit_identity.inc b/program/steps/settings/edit_identity.inc index e46d98eb1..bf2050d97 100644 --- a/program/steps/settings/edit_identity.inc +++ b/program/steps/settings/edit_identity.inc @@ -24,7 +24,7 @@ define('IDENTITIES_LEVEL', intval($RCMAIL->config->get('identities_level', 0)));  // edit-identity  if (($_GET['_iid'] || $_POST['_iid']) && $RCMAIL->action=='edit-identity') {    $IDENTITY_RECORD = $USER->get_identity(get_input_value('_iid', RCUBE_INPUT_GPC)); -   +    if (is_array($IDENTITY_RECORD))      $OUTPUT->set_env('iid', $IDENTITY_RECORD['identity_id']);    else { @@ -48,9 +48,10 @@ else {  function rcube_identity_form($attrib) -  { +{    global $IDENTITY_RECORD, $RCMAIL, $OUTPUT; +  // Add HTML editor script(s)    rcube_html_editor('identity');    // add some labels to client @@ -60,70 +61,88 @@ function rcube_identity_form($attrib)    $t_rows = !empty($attrib['textarearows']) ? $attrib['textarearows'] : 6;    $t_cols = !empty($attrib['textareacols']) ? $attrib['textareacols'] : 40; -  list($form_start, $form_end) = get_form_tags($attrib, 'save-identity', intval($IDENTITY_RECORD['identity_id']), array('name' => '_iid', 'value' => $IDENTITY_RECORD['identity_id'])); -  unset($attrib['form']); -    // list of available cols -  $a_show_cols = array('name'         => array('type' => 'text', 'size' => $i_size), -                       'email'        => array('type' => 'text', 'size' => $i_size), -                       'organization' => array('type' => 'text', 'size' => $i_size), -                       'reply-to'     => array('type' => 'text', 'label' => 'reply-to', 'size' => $i_size), -                       'bcc'          => array('type' => 'text', 'size' => $i_size), -                       'signature'	  => array('type' => 'textarea', 'size' => $t_cols, 'rows' => $t_rows), -                       'html_signature'=>array('type' => 'checkbox', 'label' => 'htmlsignature', 'onclick' => 'return rcmail_toggle_editor(this, \'rcmfd_signature\');'), -                       'standard'     => array('type' => 'checkbox', 'label' => 'setdefault')); +  $form = array( +    'addressing' => array( +      'name'    => rcube_label('settings'), +      'content' => array( +        'name'         => array('type' => 'text', 'size' => $i_size), +        'email'        => array('type' => 'text', 'size' => $i_size), +        'organization' => array('type' => 'text', 'size' => $i_size), +        'reply-to'     => array('type' => 'text', 'size' => $i_size), +        'bcc'          => array('type' => 'text', 'size' => $i_size), +        'standard'       => array('type' => 'checkbox', 'label' => rcube_label('setdefault')), +      )), +    'signature' => array( +      'name' => rcube_label('signature'), +      'content' => array( +        'signature'	     => array('type' => 'textarea', 'size' => $t_cols, 'rows' => $t_rows, +            'spellcheck' => true), +        'html_signature' => array('type' => 'checkbox', 'label' => rcube_label('htmlsignature'), +            'onclick' => 'return rcmail_toggle_editor(this, \'rcmfd_signature\');'), +    )) +  ); + +  // Enable TinyMCE editor +  if ($IDENTITY_RECORD['html_signature']) { +    $form['signature']['content']['signature']['class'] = 'mce_editor'; +  }    // disable some field according to access level    if (IDENTITIES_LEVEL == 1 || IDENTITIES_LEVEL == 3) { -    $a_show_cols['email']['disabled'] = true; -    $a_show_cols['email']['class'] = 'disabled'; +    $form['adressing']['content']['email']['disabled'] = true; +    $form['adressing']['content']['email']['class'] = 'disabled';    } -   -  // a specific part is requested -  if ($attrib['part']) -    { -    $colprop = $a_show_cols[$attrib['part']]; -    if (is_array($colprop)) -      { -      $out = $form_start; -      $out .= rcmail_get_edit_field($attrib['part'], $IDENTITY_RECORD[$attrib['part']], $attrib, $colprop['type']);  -      return $out; -      } -    else -      return ''; -    } +  // Allow plugins to modify identity form content +  $plugin = $RCMAIL->plugins->exec_hook('identity_form', array( +    'form' => $form, 'record' => $IDENTITY_RECORD)); + +  $form = $plugin['form']; +  $IDENTITY_RECORD = $plugin['record']; + +  // Set form tags and hidden fields +  list($form_start, $form_end) = get_form_tags($attrib, 'save-identity', +    intval($IDENTITY_RECORD['identity_id']), +    array('name' => '_iid', 'value' => $IDENTITY_RECORD['identity_id'])); + +  unset($plugin); +  unset($attrib['form']);    // return the complete edit form as table -  $out = "$form_start<table>\n\n"; +  $out = "$form_start\n"; -  foreach ($a_show_cols as $col => $colprop) -    { -    $colprop['id'] = 'rcmfd_'.$col; +  foreach ($form as $fieldset) { +    if (empty($fieldset['content'])) +      continue; -    if ($col == 'signature') -      { -      $colprop['spellcheck'] = true; -      if ($IDENTITY_RECORD['html_signature']) -        { -        $colprop['class'] = 'mce_editor'; -        } -      } +    $content = ''; +    if (is_array($fieldset['content'])) { +      $table = new html_table(array('cols' => 2)); +      foreach ($fieldset['content'] as $col => $colprop) { +        $colprop['id'] = 'rcmfd_'.$col; -    $label = strlen($colprop['label']) ? $colprop['label'] : $col; -    $value = rcmail_get_edit_field($col, $IDENTITY_RECORD[$col], $colprop, $colprop['type']); +        $label = !empty($colprop['label']) ? $colprop['label'] : rcube_label($col); +        $value = !empty($colprop['value']) ? $colprop['value'] : +            rcmail_get_edit_field($col, $IDENTITY_RECORD[$col], $colprop, $colprop['type']); -    $out .= sprintf("<tr><td class=\"title\"><label for=\"%s\">%s</label></td><td>%s</td></tr>\n", -                    $colprop['id'], -                    Q(rcube_label($label)), -                    $value); +        $table->add('title', sprintf('<label for="%s">%s</label>', $colprop['id'], Q($label))); +        $table->add(null, $value); +      } +      $content = $table->show(); +    } +    else { +      $content = $fieldset['content'];      } -  $out .= "\n</table>$form_end"; - -  return $out;   +    $out .= html::tag('fieldset', null, html::tag('legend', null, Q($fieldset['name'])) . $content) ."\n";    } +  $out .= $form_end; + +  return $out; +} +  $OUTPUT->include_script('list.js');  $OUTPUT->add_handler('identityform', 'rcube_identity_form');  $OUTPUT->set_env('identities_level', IDENTITIES_LEVEL); diff --git a/program/steps/settings/func.inc b/program/steps/settings/func.inc index b611e66f9..b07c042b3 100644 --- a/program/steps/settings/func.inc +++ b/program/steps/settings/func.inc @@ -25,7 +25,7 @@ if (!$OUTPUT->ajax_call)  // similar function as /steps/settings/identities.inc::rcmail_identity_frame()  function rcmail_preferences_frame($attrib) -  { +{    global $OUTPUT;    if (!$attrib['id']) @@ -37,11 +37,11 @@ function rcmail_preferences_frame($attrib)    $OUTPUT->set_env('blankpage', $attrib['src'] ? $OUTPUT->abs_url($attrib['src']) : 'program/blank.gif');    return html::iframe($attrib); -  } +}  function rcmail_sections_list($attrib) -  { +{    global $RCMAIL;    // add id to message list table if not specified @@ -58,11 +58,11 @@ function rcmail_sections_list($attrib)    $RCMAIL->output->include_script('list.js');    return $out; -  } +}  function rcmail_identities_list($attrib) -  { +{    global $OUTPUT, $USER, $RCMAIL;    // add id to message list table if not specified @@ -87,12 +87,12 @@ function rcmail_identities_list($attrib)    $OUTPUT->add_gui_object('identitieslist', $attrib['id']);    return $out; -  } +}  // similar function as in /steps/addressbook/edit.inc  function get_form_tags($attrib, $action, $id = null, $hidden = null) -  { +{    global $EDIT_FORM, $RCMAIL;    $form_start = $form_end = ''; @@ -100,9 +100,13 @@ function get_form_tags($attrib, $action, $id = null, $hidden = null)    if (empty($EDIT_FORM)) {      $request_key = $action . (isset($id) ? '.'.$id : '');      $form_start = $RCMAIL->output->request_form(array( -	'name' => 'form', 'method' => 'post', -	'task' => $RCMAIL->task, 'action' => $action, -	'request' => $request_key, 'noclose' => true) + $attrib); +	  'name'    => 'form', +	  'method'  => 'post', +	  'task'    => $RCMAIL->task, +	  'action'  => $action, +	  'request' => $request_key, +	  'noclose' => true +	) + $attrib);      if (is_array($hidden)) {        $hiddenfields = new html_hiddenfield($hidden); @@ -116,7 +120,7 @@ function get_form_tags($attrib, $action, $id = null, $hidden = null)    }    return array($form_start, $form_end); -  } +}  function rcmail_user_prefs($current=null) | 
