diff --git a/README b/README.md similarity index 50% rename from README rename to README.md index 66f28b1..857bad3 100644 --- a/README +++ b/README.md @@ -2,6 +2,7 @@ Message label plugin for roundcube Attention! Latest version plugin use new roundcube class storage and don't work with version < 0.8. For version < 0.8 use version plugin (1.0) +Require managesieve plugin for the filters. Install ------------------------------------------- @@ -21,10 +22,29 @@ This is plugin for roundcube to add labels like Google labels. * remove label on one click on label in subject * search all labels in all folder on one click (manual select folder search on filter search label) * display label list on left panel under folder list - - -Contact ----------------------------------------- -Comments and suggestions are welcome. - -Email: dns.sobol@gmail.com \ No newline at end of file +* filters implemented with sieve require managesieve plugin to be installed + +

Instructions message_label

+ +Create first label:
+ +

+ +Edit labels:
+ +

+ +Create a filter that sets the label when the email comes in:
+ +
+Note: need to set the w flag for the user in Cyrus for this to work: +
+cyradm --user cyrus-admin localhost
+setacl user/max.mustermann@example.org max^mustermann@example.org w
+
+

+Manually assign labels:
+ +
+You can either use the Mark drop down menu, or drag the message to the label folder on the left side.
+For removing a label from a message, you can just click the label in the message list. diff --git a/doc/01_createFirstLabel.png b/doc/01_createFirstLabel.png new file mode 100644 index 0000000..0d5b98b Binary files /dev/null and b/doc/01_createFirstLabel.png differ diff --git a/doc/02_createLabel.png b/doc/02_createLabel.png new file mode 100644 index 0000000..810cd14 Binary files /dev/null and b/doc/02_createLabel.png differ diff --git a/doc/03_createFilter.png b/doc/03_createFilter.png new file mode 100644 index 0000000..3d5e399 Binary files /dev/null and b/doc/03_createFilter.png differ diff --git a/doc/04_markMessage.png b/doc/04_markMessage.png new file mode 100644 index 0000000..058b161 Binary files /dev/null and b/doc/04_markMessage.png differ diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..251a5cb --- /dev/null +++ b/doc/index.html @@ -0,0 +1,33 @@ + + +message_label Roundcube plugin modified by TBits + + +

Instructions message_label

+ +Create first label:
+ +

+ +Edit labels:
+ +

+ +Create a filter that sets the label when the email comes in:
+ +
+Note: need to set the w flag for the user in Cyrus for this to work: +
+cyradm --user cyrus-admin localhost
+setacl user/max.mustermann@example.org max^mustermann@example.org w
+
+

+Manually assign labels:
+ +
+You can either use the Mark drop down menu, or drag the message to the label folder on the left side.
+For removing a label from a message, you can just click the label in the message list. + + + + diff --git a/localization/en_US.inc b/localization/en_US.inc index 76f7195..579c0ac 100644 --- a/localization/en_US.inc +++ b/localization/en_US.inc @@ -9,6 +9,8 @@ $labels['label_name'] = 'name'; $labels['label_folder'] = 'search in '; $labels['label_all'] = 'All folder'; $labels['label_pref'] = 'Management of labels'; +$labels['help_filter_caption'] = "Help"; +$labels['label_help_filter'] = 'You can %ssetup filters%s to mark incoming emails with these labels'; $labels['deleteconfirm'] = 'Do you really want to delete this label?'; $labels['add_row'] = 'add'; @@ -32,4 +34,4 @@ $labels['search_info'] = 'Search information'; $labels['display_label_on'] = 'Display labels list on'; $labels['display_label_off'] = 'Display labels list off'; -?> \ No newline at end of file +?> diff --git a/localization/sl_SI.inc b/localization/sl_SI.inc new file mode 100644 index 0000000..68284b9 --- /dev/null +++ b/localization/sl_SI.inc @@ -0,0 +1,48 @@ + diff --git a/message_label.js b/message_label.js index 94e7ca8..7d810b5 100644 --- a/message_label.js +++ b/message_label.js @@ -38,11 +38,11 @@ rcube_webmail.prototype.unlabel_messages = function(row, label, type) { remove = 'tr#'+row+' span.'+label; a_uids[0] = row.replace(/^rcmrow/, ''); if (type == 'filter') { - label_string = 'u'+label; + label_string = 'u_'+label; } else if (type == 'flabel') { label_string = label; } else { - label_string = 'un'+label; + label_string = 'un_'+label; } $(remove).parent().remove(); @@ -51,7 +51,7 @@ rcube_webmail.prototype.unlabel_messages = function(row, label, type) { rcmail.message_list.remove_row(a_uids[0]); } - rcmail.toggle_label_status(label_string, a_uids, type, false); + rcmail.toggle_label_status(label_string, a_uids, type, true); } @@ -246,7 +246,7 @@ if(window.rcmail) { +'' +'' +message.flags.plugin_label[i].text+''; @@ -301,4 +301,4 @@ $(document).ready(function(){ } }); -}); \ No newline at end of file +}); diff --git a/message_label.php b/message_label.php index 45c62f4..e0a0876 100644 --- a/message_label.php +++ b/message_label.php @@ -36,9 +36,7 @@ public function init() { $this->register_action('plugin.message_label_redirect', array($this, 'message_label_redirect')); $this->register_action('plugin.message_label_search', array($this, 'message_label_search')); - $this->register_action('plugin.message_label_mark', array($this, 'message_label_mark')); $this->register_action('plugin.message_label_move', array($this, 'message_label_move')); - $this->register_action('plugin.message_label_delete', array($this, 'message_label_delete')); $this->register_action('plugin.not_label_folder_search', array($this, 'not_label_folder_search')); $this->register_action('plugin.message_label_setlabel', array($this, 'message_label_imap_set')); $this->register_action('plugin.message_label_display_list', array($this, 'display_list_preferences')); @@ -150,55 +148,17 @@ function message_set_label($p) { return $p; foreach ($p['messages'] as $message) { - $type = 'filter'; - $color = ''; $ret_key = array(); - foreach ($prefs as $key => $p) { - if ($p['header'] == 'subject') { - $cont = trim(rcube_mime::decode_header($message->$p['header'], $message->charset)); - } else { - $cont = $message->$p['header']; - } - if (stristr($cont, $p['input'])) { - array_push($ret_key, array('id' => $key, 'type' => $type)); - } - } - if (!empty($message->flags)) + if (!empty($message->flags)) { foreach ($message->flags as $flag => $set_val) { - if (stripos($flag, 'ulabels') === 0) { - $flag_id = str_ireplace('ulabels_', '', $flag); - if (!empty($ret_key)) { - foreach ($ret_key as $key_search => $value) { - $id = $value['id']; - if ($prefs[$id]['id'] == strtolower($flag_id) && $value['type'] == 'filter') - unset($ret_key[$key_search]); - } - } - } - - $type = 'label'; - if (stripos($flag, 'labels') === 0) { - $flag_id = str_ireplace('labels_', '', $flag); - foreach ($prefs as $key => $p) { - if ($p['id'] == strtolower($flag_id)) { - $flabel = false; - if (!empty($ret_key)) { - foreach ($ret_key as $key_filter => $value_filter) { - $searh_filter = array('id' => $key, 'type' => 'filter'); - if ($value_filter == $searh_filter) - $flabel = $key_filter; - } - } - if ($flabel !== false) { - unset($ret_key[$flabel]); - $type = 'flabel'; - } - array_push($ret_key, array('id' => $key, 'type' => $type)); - } + foreach ($prefs as $key => $p) { + if (strtoupper(str_replace(' ', '_', $p['text'])) == $flag) { + array_push($ret_key, array('id' => $key, 'type' => 'label')); } } } + } //write_log('debug', preg_replace('/\r\n$/', '', print_r($ret_key,true))); @@ -227,7 +187,27 @@ function message_set_label($p) { */ function message_label_imap_set() { if (($uids = get_input_value('_uid', RCUBE_INPUT_POST)) && ($flag = get_input_value('_flag', RCUBE_INPUT_POST))) { - $flag = $a_flags_map[$flag] ? $a_flags_map[$flag] : strtoupper($flag); + + $prefs = $this->rc->config->get('message_label', array()); + $unsetFlag = ""; + if (stripos($flag, "UN_") === 0) { + $flag = substr($flag, 3); + $unsetFlag = "UN"; + } + if (stripos($flag, "U_") === 0) { + $flag = substr($flag, 2); + $unsetFlag = "UN"; + } + + $flag = $a_flags_map[$flag] ? $a_flags_map[$flag] : strtoupper(str_replace(" ", "_", $flag)); + + foreach ($prefs as $flagdefinition) { + if (strtoupper($flagdefinition['id']) == $flag) { + $flag = strtoupper(str_replace(" ", "_", $flagdefinition['text'])); + } + } + $flag = $unsetFlag.$flag; + $type = get_input_value('_type', RCUBE_INPUT_POST); $label_search = get_input_value('_label_search', RCUBE_INPUT_POST); @@ -262,8 +242,9 @@ function message_label_imap_set() { $unfiler = 'U' . $flag; $marked = $this->rc->imap->set_flag($uids, $unfiler); } - else + else { $marked = $this->rc->imap->set_flag($uids, $flag); + } if (!$marked) { // send error message @@ -287,8 +268,9 @@ function message_label_imap_set() { } /** - * Serching mail by label id + * Searching mail by label id * js function label_search + * User clicks on label folder, and wants to see all emails labelled with one flag * * @access public */ @@ -323,13 +305,10 @@ function message_label_search() { $prefs = $this->rc->config->get('message_label', array()); // get search string - $str = ''; foreach ($prefs as $p) { if ($p['id'] == $id) { - $str = $p['input']; + $labeltext = $p['text']; $filter = 'ALL'; - $header = $p['header']; - $folders[0] = $p['folder']; } } @@ -337,26 +316,17 @@ function message_label_search() { $search_str = $filter && $filter != 'ALL' ? $filter : ''; $_SESSION['search_filter'] = $filter; - $subject[$header] = 'HEADER ' . $header; - $search = $srch ? trim($srch) : trim($str); - - if ($subject) { - $search_str .= str_repeat(' OR', count($subject) - 1); - foreach ($subject as $sub) - $search_str .= sprintf(" %s {%d}\r\n%s", $sub, strlen($search), $search); - $_SESSION['search_mods'] = $subject; - } - $search_str = trim($search_str); $count = 0; $result_h = Array(); $tmp_page_size = $this->rc->storage->get_pagesize(); //$this->rc->imap->page_size = 500; - if ($use_saved_list && $_SESSION['all_folder_search']['uid_mboxes']) + if ($use_saved_list && $_SESSION['all_folder_search']['uid_mboxes']) { $result_h = $this->get_search_result(); - else - $result_h = $this->perform_search($search_str, $folders, $id); + } else { + $result_h = $this->perform_search($search_str, $folders, $labeltext); + } $this->rc->output->set_env('label_folder_search_active', 1); //$this->rc->imap->page_size = $tmp_page_size; @@ -400,7 +370,7 @@ function message_label_search() { * @return array Indexed array with message header objects * @access private */ - private function perform_search($search_string, $folders, $label_id) { + private function perform_search($search_string, $folders, $label_text) { $result_h = array(); $uid_mboxes = array(); $id = 1; @@ -422,51 +392,19 @@ private function perform_search($search_string, $folders, $label_id) { $this->rc->storage->set_folder($mbox); - $this->rc->storage->search($mbox, $search_string, RCMAIL_CHARSET, $_SESSION['sort_col']); - $result = $this->rc->storage->list_messages($mbox, 1, $_SESSION['sort_col'], $_SESSION['sort_order']); - - $this->rc->storage->search($mbox, $search_string_label, RCMAIL_CHARSET, $_SESSION['sort_col']); - $result_label = $this->rc->storage->list_messages($mbox, 1, $_SESSION['sort_col'], $_SESSION['sort_order']); - - if (!empty($result_label)) - foreach ($result_label as $header_obj) { - $add = true; - foreach ($result as $result_obj) - if ($result_obj->id == $header_obj->id) { - $add = false; - break; - } - if ($add) - array_push($result, $header_obj); - } + if ($label_text) { + $this->rc->storage->search($mbox, $search_string_label, RCMAIL_CHARSET, $_SESSION['sort_col']); + $result = $this->rc->storage->list_messages($mbox, 1, $_SESSION['sort_col'], $_SESSION['sort_order']); + } else { + $this->rc->storage->search($mbox, $search_string, RCMAIL_CHARSET, $_SESSION['sort_col']); + $result = $this->rc->storage->list_messages($mbox, 1, $_SESSION['sort_col'], $_SESSION['sort_order']); + } foreach ($result as $row) { $uid_mboxes[$id] = array('uid' => $row->uid, 'mbox' => $mbox); $row->uid = $id; - $add_res = 1; - $add_labels = 0; - - if (!empty($row->flags)) - foreach ($row->flags as $flag => $set_val) { - if ($flag == strtoupper('ulabels_' . $label_id)) { - $add_res = 0; - break; - } - } - if ($add_res) { - $result_h[] = $row; - $id++; - } else { - foreach ($row->flags as $flag => $set_val) - if ($flag == strtoupper('labels_' . $label_id)) { - $add_labels = 1; - break; - } - if ($add_labels) { - $result_h[] = $row; - $id++; - } - } + $result_h[] = $row; + $id++; } } @@ -498,126 +436,6 @@ function get_paged_result($result_h, $page) { return $result_h; } - /** - * Called when message statuses are modified or they have been flagged - * - * @access public - */ - function message_label_mark() { - - $a_flags_map = array( - 'undelete' => 'UNDELETED', - 'delete' => 'DELETED', - 'read' => 'SEEN', - 'unread' => 'UNSEEN', - 'flagged' => 'FLAGGED', - 'unflagged' => 'UNFLAGGED'); - - if (($uids = get_input_value('_uid', RCUBE_INPUT_POST)) && ($flag = get_input_value('_flag', RCUBE_INPUT_POST))) { - - $flag = $a_flags_map[$flag] ? $a_flags_map[$flag] : strtoupper($flag); - - if ($flag == 'DELETED' && $this->rc->config->get('skip_deleted') && $_POST['_from'] != 'show') { - // count messages before changing anything - $old_count = count($_SESSION['label_folder_search']['uid_mboxes']); - $old_pages = ceil($old_count / $this->rc->storage->get_pagesize()); - $count = sizeof(explode(',', $uids)); - } - - $uids = explode(',', $uids); - - // mark each uid individually because the mailboxes may differ - foreach ($uids as $uid) { - $mbox = $_SESSION['label_folder_search']['uid_mboxes'][$uid]['mbox']; - $this->rc->storage->set_folder($mbox); - $marked = $this->rc->imap->set_flag($_SESSION['label_folder_search']['uid_mboxes'][$uid]['uid'], $flag); - - if (!$marked) { - // send error message - if ($_POST['_from'] != 'show') - $this->rc->output->command('list_mailbox'); - - $this->rc->output->show_message('errormarking', 'error'); - $this->rc->output->send(); - exit; - } - else if (empty($_POST['_quiet'])) { - $this->rc->output->show_message('messagemarked', 'confirmation'); - } - } - - $skip_deleted = $this->rc->config->get('skip_deleted'); - $read_when_deleted = $this->rc->config->get('read_when_deleted'); - - if ($flag == 'DELETED' && $read_when_deleted && !empty($_POST['_ruid'])) { - $uids = get_input_value('_ruid', RCUBE_INPUT_POST); - $uids = explode(',', $uids); - - foreach ($uids as $uid) { - $mbox = $_SESSION['label_folder_search']['uid_mboxes'][$uid]['mbox']; - $this->rc->storage->set_folder($mbox); - $read = $this->rc->imap->set_flag($_SESSION['label_folder_search']['uid_mboxes'][$uid]['uid'], 'SEEN'); - - if ($read != -1 && !$skip_deleted) - $this->rc->output->command('flag_deleted_as_read', $uid); - } - } - - if ($flag == 'SEEN' || $flag == 'UNSEEN' || ($flag == 'DELETED' && !$skip_deleted)) { - // just update unread count for all mailboxes, easier than figuring out which were changed - $mbox_names = $this->rc->storage->list_folders_subscribed(); - - foreach ($mbox_names as $mbox) - $this->rc->output->command('set_unread_count', $mbox, $this->rc->imap->messagecount($mbox, 'UNSEEN'), ($mbox == 'INBOX')); - } else if ($flag == 'DELETED' && $skip_deleted) { - if ($_POST['_from'] == 'show') { - if ($next = get_input_value('_next_uid', RCUBE_INPUT_GPC)) - $this->rc->output->command('show_message', $next); - else - $this->rc->output->command('command', 'list'); - } else { - // refresh saved search set after moving some messages - if (($search_request = get_input_value('_search', RCUBE_INPUT_GPC)) && $_SESSION['label_folder_search']['uid_mboxes']) { - $_SESSION['search'][$search_request] = $this->perform_search($this->rc->imap->search_string); - } - $msg_count = count($_SESSION['label_folder_search']['uid_mboxes']); - $pages = ceil($msg_count / $this->rc->storage->get_pagesize()); - $nextpage_count = $old_count - $this->rc->storage->get_pagesize() * $_SESSION['page']; - $remaining = $msg_count - $this->rc->storage->get_pagesize() * ($_SESSION['page'] - 1); - // jump back one page (user removed the whole last page) - if ($_SESSION['page'] > 1 && $nextpage_count <= 0 && $remaining == 0) { - $this->rc->imap->set_page($_SESSION['page'] - 1); - $_SESSION['page'] = $this->rc->imap->list_page; - $jump_back = true; - } - // update message count display - $this->rc->output->set_env('messagecount', $msg_count); - $this->rc->output->set_env('current_page', $this->rc->imap->list_page); - $this->rc->output->set_env('pagecount', $pages); - // update mailboxlist - foreach ($this->rc->storage->list_folders_subscribed() as $mbox) { - $unseen_count = $msg_count ? $this->rc->imap->messagecount($mbox, 'UNSEEN') : 0; - $this->rc->output->command('set_unread_count', $mbox, $unseen_count, ($mbox == 'INBOX')); - } - $this->rc->output->command('set_rowcount', rcmail_get_messagecount_text($msg_count)); - - // add new rows from next page (if any) - if (($jump_back || $nextpage_count > 0)) { - $sort_col = isset($_SESSION['sort_col']) ? $_SESSION['sort_col'] : $this->rc->config->get('message_sort_col'); - $sort_order = isset($_SESSION['sort_order']) ? $_SESSION['sort_order'] : $this->rc->config->get('message_sort_order'); - - $a_headers = $this->get_search_result(); - $this->sort_search_result($a_headers); - $a_headers = array_slice($a_headers, $sort_order == 'DESC' ? 0 : -$count, $count); - rcmail_js_message_list($a_headers, false, false); - } - } - } - $this->rc->output->send(); - } - exit; - } - /** * Get message header results for the current all folder search * @@ -679,42 +497,6 @@ function message_label_move() { } } - /** - * Called when messages are delete - * - * @access public - */ - function message_label_delete() { - if (!empty($_POST['_uid'])) { - $uids = get_input_value('_uid', RCUBE_INPUT_POST); - $uids = explode(',', $uids); - - foreach ($uids as $uid) { - $mbox = $_SESSION['label_folder_search']['uid_mboxes'][$uid]['mbox']; - $this->rc->storage->set_folder($mbox); - $ruid = $_SESSION['label_folder_search']['uid_mboxes'][$uid]['uid']; - - $del = $this->rc->imap->delete_message($ruid, $mbox); - } - - if (!$del) { - // send error message - if ($_POST['_from'] != 'show') - $this->rc->output->command('list_mailbox'); - - rcmail_display_server_error('errordeleting'); - $this->rc->output->send(); - exit; - } - else { - $this->rc->output->command('list_mailbox'); - $this->rc->output->show_message('messagedeleted', 'confirmation'); - $this->rc->output->send(); - exit; - } - } - } - /** * Nullify label folder search results * @@ -862,14 +644,14 @@ function flag_message_load($p) { $prefs = $this->rc->config->get('message_label', array()); $flags = array(); foreach ($prefs as $prefs_val) { - $flags += array(strtoupper($prefs_val['id']) => '$labels_' . $prefs_val['id']); - $flags += array(strtoupper('u' . $prefs_val['id']) => '$ulabels_' . $prefs_val['id']); + $flags += array(strtoupper(str_replace(" ", "_", $prefs_val['text'])) => str_replace(" ", "_", $prefs_val['text'])); } + $this->rc->imap->conn->flags = array_merge($this->rc->imap->conn->flags, $flags); } /** - * Display label configuratin in user preferences tab + * Display label configuration in user preferences tab * * @access public */ @@ -881,6 +663,10 @@ function label_preferences($args) { $args['blocks']['create_label'] = array('options' => array(), 'name' => Q($this->gettext('label_create'))); $args['blocks']['list_label'] = array('options' => array(), 'name' => Q($this->gettext('label_title'))); + $args['blocks']['help_filter'] = array('options' => array(), 'name' => Q($this->gettext('help_filter_caption'))); + + $args['blocks']['help_filter']['options'][0] = array('title' => + sprintf(Q($this->gettext('label_help_filter')), '', '')); $i = 0; $prefs = $this->rc->config->get('message_label', array()); @@ -891,7 +677,7 @@ function label_preferences($args) { foreach ($prefs as $p) { $args['blocks']['list_label']['options'][$i++] = array( 'title' => ' ', - 'content' => $this->get_form_row($p['id'], $p['header'], $p['folder'], $p['input'], $p['color'], $p['text'], true) + 'content' => $this->get_form_row($p['id'], $p['color'], $p['text'], true) ); } } @@ -903,45 +689,17 @@ function label_preferences($args) { * * @access private */ - private function get_form_row($id = '', $header = 'from', $folder = 'all', $input = '', $color = '#000000', $text = '', $delete = false) { + private function get_form_row($id = '', $color = '#000000', $text = '', $delete = false) { $this->add_texts('localization'); if (!$text) $text = Q($this->gettext('label_name')); - //if (!$input) $input = Q($this->gettext('label_matches')); + if (!$id) $id = uniqid(); - if (!$folder) - $folder = 'all'; - - // header select box - $header_select = new html_select(array('name' => '_label_header[]', 'class' => 'label_header')); - $header_select->add(Q($this->gettext('subject')), 'subject'); - $header_select->add(Q($this->gettext('from')), 'from'); - $header_select->add(Q($this->gettext('to')), 'to'); - $header_select->add(Q($this->gettext('cc')), 'cc'); - - // folder search select - $folder_search = new html_select(array('name' => '_folder_search[]', 'class' => 'folder_search')); - - $p = array('maxlength' => 100, 'realnames' => false); - - // get mailbox list - $a_folders = $this->rc->storage->list_folders_subscribed(); - $delimiter = $this->rc->storage->get_hierarchy_delimiter(); - $a_mailboxes = array(); - - foreach ($a_folders as $folder_list) - rcmail_build_folder_tree($a_mailboxes, $folder_list, $delimiter); - - $folder_search->add(Q($this->gettext('label_all')), 'all'); - - rcmail_render_folder_tree_select($a_mailboxes, $mbox, $p['maxlength'], $folder_search, $p['realnames']); // input field - $search_info_text = $this->gettext('search_info'); - $input = new html_inputfield(array('name' => '_label_input[]', 'type' => 'text', 'autocomplete' => 'off', 'class' => 'watermark linput', 'value' => $input)); $text = html::tag('input', array('name' => '_label_text[]', 'type' => 'text', 'title' => $search_info_text, 'class' => 'watermark linput', 'value' => $text)); $select_color = html::tag('input', array('id' => $id, 'name' => '_label_color[]', 'type' => 'hidden', 'text' => 'hidden', 'class' => 'label_color_input', 'value' => $color)); $id_field = html::tag('input', array('name' => '_label_id[]', 'type' => 'hidden', 'value' => $id)); @@ -954,12 +712,7 @@ private function get_form_row($id = '', $header = 'from', $folder = 'all', $inpu $content = $select_color . " " . $text . " " . - $header_select->show($header) . " " . - $this->gettext('label_matches') . " " . - $input->show() . " " . $id_field . " " . - $this->gettext('label_folder') . " " . - $folder_search->show($folder) . " " . $button; return $content; @@ -990,27 +743,20 @@ function label_save($args) { $rcmail = rcmail::get_instance(); $id = get_input_value('_label_id', RCUBE_INPUT_POST); - $header = get_input_value('_label_header', RCUBE_INPUT_POST); - $folder = get_input_value('_folder_search', RCUBE_INPUT_POST); - $input = get_input_value('_label_input', RCUBE_INPUT_POST); $color = get_input_value('_label_color', RCUBE_INPUT_POST); $text = get_input_value('_label_text', RCUBE_INPUT_POST); //write_log('debug', preg_replace('/\r\n$/', '', print_r($_POST,true))); - for ($i = 0; $i < count($header); $i++) { - if (!in_array($header[$i], array('subject', 'from', 'to', 'cc'))) { - $rcmail->output->show_message('message_label.headererror', 'error'); - return; - } + for ($i = 0; $i < count($id); $i++) { if (!preg_match('/^#[0-9a-fA-F]{2,6}$/', $color[$i])) { $rcmail->output->show_message('message_label.invalidcolor', 'error'); return; } - if ($input[$i] == '') { + if ($text[$i] == Q($this->gettext('label_name'))) { continue; } - $prefs[] = array('id' => $id[$i], 'header' => $header[$i], 'folder' => $folder[$i], 'input' => $input[$i], 'color' => $color[$i], 'text' => $text[$i]); + $prefs[] = array('id' => $id[$i], 'color' => $color[$i], 'text' => $text[$i]); } $args['prefs']['message_label'] = $prefs; diff --git a/screen/scr1.png b/screen/scr1.png deleted file mode 100644 index 4b5757a..0000000 Binary files a/screen/scr1.png and /dev/null differ diff --git a/screen/scr2.png b/screen/scr2.png deleted file mode 100644 index 0e73133..0000000 Binary files a/screen/scr2.png and /dev/null differ diff --git a/screen/scr3.png b/screen/scr3.png deleted file mode 100644 index 87606d6..0000000 Binary files a/screen/scr3.png and /dev/null differ diff --git a/screen/scr4.png b/screen/scr4.png deleted file mode 100644 index 8183ef6..0000000 Binary files a/screen/scr4.png and /dev/null differ diff --git a/screen/scr5.png b/screen/scr5.png deleted file mode 100644 index 452149e..0000000 Binary files a/screen/scr5.png and /dev/null differ diff --git a/skins/larry/message_label.css b/skins/larry/message_label.css index a09b25e..08d1414 100644 --- a/skins/larry/message_label.css +++ b/skins/larry/message_label.css @@ -168,3 +168,7 @@ table.propform input { { background-color: #FFFFA6; } + +#sections-table #rcmrowlabel_preferences td.section { + background-position: 8px -238px; +}