/**
  * Build a form tag with a unique request token
  *
  * @param array Named tag parameters including 'action' and 'task' values which will be put into hidden fields
  * @param string Form content
  * @return string HTML code for the form
  */
 public function request_form($attrib, $content = '')
 {
     $hidden = new html_hiddenfield();
     if ($attrib['task']) {
         $hidden->add(array('name' => '_task', 'value' => $attrib['task']));
     }
     if ($attrib['action']) {
         $hidden->add(array('name' => '_action', 'value' => $attrib['action']));
     }
     unset($attrib['task'], $attrib['request']);
     $attrib['action'] = './';
     // we already have a <form> tag
     if ($attrib['form']) {
         if ($this->framed || !empty($_REQUEST['_framed'])) {
             $hidden->add(array('name' => '_framed', 'value' => '1'));
         }
         return $hidden->show() . $content;
     } else {
         return $this->form_tag($attrib, $hidden->show() . $content);
     }
 }
 function filter_form($attrib)
 {
     if (!$attrib['id']) {
         $attrib['id'] = 'rcmfilterform';
     }
     $fid = rcube_utils::get_input_value('_fid', rcube_utils::INPUT_GPC);
     $scr = isset($this->form) ? $this->form : $this->script[$fid];
     $hiddenfields = new html_hiddenfield(array('name' => '_task', 'value' => $this->rc->task));
     $hiddenfields->add(array('name' => '_action', 'value' => 'plugin.managesieve-save'));
     $hiddenfields->add(array('name' => '_framed', 'value' => $_POST['_framed'] || $_GET['_framed'] ? 1 : 0));
     $hiddenfields->add(array('name' => '_fid', 'value' => $fid));
     $out = '<form name="filterform" action="./" method="post">' . "\n";
     $out .= $hiddenfields->show();
     // 'any' flag
     if (sizeof($scr['tests']) == 1 && $scr['tests'][0]['test'] == 'true' && !$scr['tests'][0]['not']) {
         $any = true;
     }
     // filter name input
     $field_id = '_name';
     $input_name = new html_inputfield(array('name' => '_name', 'id' => $field_id, 'size' => 30, 'class' => $this->errors['name'] ? 'error' : ''));
     if ($this->errors['name']) {
         $this->add_tip($field_id, $this->errors['name'], true);
     }
     if (isset($scr)) {
         $input_name = $input_name->show($scr['name']);
     } else {
         $input_name = $input_name->show();
     }
     $out .= sprintf("\n<label for=\"%s\"><b>%s:</b></label> %s\n", $field_id, rcube::Q($this->plugin->gettext('filtername')), $input_name);
     // filter set selector
     if ($this->rc->task == 'mail') {
         $out .= sprintf("\n&nbsp;<label for=\"%s\"><b>%s:</b></label> %s\n", $field_id, rcube::Q($this->plugin->gettext('filterset')), $this->filtersets_list(array('id' => 'sievescriptname'), true));
     }
     $out .= '<br /><br /><fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesrules')) . "</legend>\n";
     // any, allof, anyof radio buttons
     $field_id = '_allof';
     $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'allof', 'onclick' => 'rule_join_radio(\'allof\')', 'class' => 'radio'));
     if (isset($scr) && !$any) {
         $input_join = $input_join->show($scr['join'] ? 'allof' : '');
     } else {
         $input_join = $input_join->show();
     }
     $out .= sprintf("%s<label for=\"%s\">%s</label>&nbsp;\n", $input_join, $field_id, rcube::Q($this->plugin->gettext('filterallof')));
     $field_id = '_anyof';
     $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'anyof', 'onclick' => 'rule_join_radio(\'anyof\')', 'class' => 'radio'));
     if (isset($scr) && !$any) {
         $input_join = $input_join->show($scr['join'] ? '' : 'anyof');
     } else {
         $input_join = $input_join->show('anyof');
     }
     // default
     $out .= sprintf("%s<label for=\"%s\">%s</label>\n", $input_join, $field_id, rcube::Q($this->plugin->gettext('filteranyof')));
     $field_id = '_any';
     $input_join = new html_radiobutton(array('name' => '_join', 'id' => $field_id, 'value' => 'any', 'onclick' => 'rule_join_radio(\'any\')', 'class' => 'radio'));
     $input_join = $input_join->show($any ? 'any' : '');
     $out .= sprintf("%s<label for=\"%s\">%s</label>\n", $input_join, $field_id, rcube::Q($this->plugin->gettext('filterany')));
     $rows_num = isset($scr) ? sizeof($scr['tests']) : 1;
     $out .= '<div id="rules"' . ($any ? ' style="display: none"' : '') . '>';
     for ($x = 0; $x < $rows_num; $x++) {
         $out .= $this->rule_div($fid, $x);
     }
     $out .= "</div>\n";
     $out .= "</fieldset>\n";
     // actions
     $out .= '<fieldset><legend>' . rcube::Q($this->plugin->gettext('messagesactions')) . "</legend>\n";
     $rows_num = isset($scr) ? sizeof($scr['actions']) : 1;
     $out .= '<div id="actions">';
     for ($x = 0; $x < $rows_num; $x++) {
         $out .= $this->action_div($fid, $x);
     }
     $out .= "</div>\n";
     $out .= "</fieldset>\n";
     $this->print_tips();
     if ($scr['disabled']) {
         $this->rc->output->set_env('rule_disabled', true);
     }
     $this->rc->output->add_label('managesieve.ruledeleteconfirm', 'managesieve.actiondeleteconfirm');
     $this->rc->output->add_gui_object('sieveform', 'filterform');
     return $out;
 }