From 59478e06c25303a790a0840ab2ac30662c4ef781 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Tue, 5 Aug 2014 16:46:22 +0200 Subject: c'est la merde.. --- plugins/message_highlight/message_highlight.php | 176 ++++++++++++++++++++++++ 1 file changed, 176 insertions(+) create mode 100644 plugins/message_highlight/message_highlight.php (limited to 'plugins/message_highlight/message_highlight.php') diff --git a/plugins/message_highlight/message_highlight.php b/plugins/message_highlight/message_highlight.php new file mode 100644 index 000000000..573257dc0 --- /dev/null +++ b/plugins/message_highlight/message_highlight.php @@ -0,0 +1,176 @@ +add_texts('localization/', array('deleteconfirm')); + $this->add_hook('messages_list', array($this, 'mh_highlight')); + $this->add_hook('preferences_list', array($this, 'mh_preferences')); + $this->add_hook('preferences_save', array($this, 'mh_save')); + $this->add_hook('preferences_sections_list',array($this, 'mh_preferences_section')); + $this->add_hook('storage_init', array($this, 'storage_init')); + + $this->register_action('plugin.mh_add_row', array($this, 'mh_add_row')); + + $this->include_script('message_highlight.js'); + $this->include_script('colorpicker/mColorPicker.js'); + $this->include_stylesheet('message_highlight.css'); + } + + function storage_init($p) + { + $p['fetch_headers'] .= trim($p['fetch_headers']. ' ' . 'CC'); + return($p); + } + + + // add color information for all messages + function mh_highlight($p) + { + $rcmail = rcmail::get_instance(); + $this->prefs = $rcmail->config->get('message_highlight', array()); + + // dont loop over all messages if we dont have any highlights or no msgs + if(!count($this->prefs) or !isset($p['messages']) or !is_array($p['messages'])) return $p; + + // loop over all messages and add highlight color to each message + foreach($p['messages'] as $message) { + if(($color = $this->mh_find_match($message)) !== false ) { + $message->list_flags['extra_flags']['plugin_mh_color'] = $color; + } + } + return($p); + } + + // find a match for this message + function mh_find_match($message) { + foreach($this->prefs as $p) { + if(stristr($message->$p['header'], $p['input'])) { + return($p['color']); + } + } + return false; + } + + // user preferences + function mh_preferences($args) { + if($args['section'] == 'mh_preferences') { + $this->add_texts('localization/', false); + $rcmail = rcmail::get_instance(); + + $args['blocks']['mh_preferences'] = array( + 'options' => array(), + 'name' => Q($this->gettext('mh_title')) + ); + + $i = 1; + $prefs = $rcmail->config->get('message_highlight', array()); + + foreach($prefs as $p) { + $args['blocks']['mh_preferences']['options'][$i++] = array( + 'content' => $this->mh_get_form_row($p['header'], $p['input'], $p['color'], true) + ); + } + + // no rows yet, add 1 empty row + if($i == 1) { + $args['blocks']['mh_preferences']['options'][$i] = array( + 'content' => $this->mh_get_form_row() + ); + } + } + + return($args); + } + + function mh_add_row() { + $rcmail = rcmail::get_instance(); + $rcmail->output->command('plugin.mh_receive_row', array('row' => $this->mh_get_form_row())); + } + + // create a form row + function mh_get_form_row($header = 'from', $input = '', $color = '#ffffff', $delete = false) { + + // header select box + $header_select = new html_select(array('name' => '_mh_header[]', 'class' => 'rcmfd_mh_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'); + + // input field + $input = new html_inputfield(array('name' => '_mh_input[]', 'class' => 'rcmfd_mh_input', 'type' => 'text', 'autocomplete' => 'off', 'value' => $input)); + + // color box + $color = html::tag('input', array('id' => uniqid() ,'name' => '_mh_color[]' ,'type' => 'color' ,'text' => 'hidden', 'class' => 'mh_color_input', 'value' => $color, 'data-hex' => 'true')); + + // delete button + $button = html::tag('input', array('class' => 'button mh_delete mh_button', 'type' => 'button', 'value' => $this->gettext('mh_delete'), 'title' => $this->gettext('mh_delete_description'))); + + // add button + $add_button = html::tag('input', array('class' => 'button mh_add mh_button', 'type' => 'button', 'value' => $this->gettext('mh_add'), 'title' => $this->gettext('mh_add_description'))); + + $content = $header_select->show($header) . + html::span('mh_matches', Q($this->gettext('mh_matches'))) . + $input->show() . + html::span('mh_color', Q($this->gettext('mh_color'))) . + $color . $button . $add_button; + + if(rcmail::get_instance()->config->get('request_saver_compress_html', false)){ + $content = request_saver::html_compress($content); + } + + return($content); + } + + // add a section to the preferences tab + function mh_preferences_section($args) { + $this->add_texts('localization/', false); + $args['list']['mh_preferences'] = array( + 'id' => 'mh_preferences', + 'section' => Q($this->gettext('mh_title')) + ); + return($args); + } + + // save preferences + function mh_save($args) { + if($args['section'] != 'mh_preferences') return; + + $rcmail = rcmail::get_instance(); + + $header = get_input_value('_mh_header', RCUBE_INPUT_POST); + $input = get_input_value('_mh_input', RCUBE_INPUT_POST); + $color = get_input_value('_mh_color', RCUBE_INPUT_POST); + + + for($i=0; $i < count($header); $i++) { + if(!in_array($header[$i], array('subject', 'from', 'to', 'cc'))) { + $rcmail->output->show_message('message_highlight.headererror', 'error'); + return; + } + if(!preg_match('/^#[0-9a-fA-F]{2,6}$/', $color[$i])) { + $rcmail->output->show_message('message_highlight.invalidcolor', 'error'); + return; + } + if($input[$i] == '') { + continue; + } + $prefs[] = array('header' => $header[$i], 'input' => $input[$i], 'color' => $color[$i]); + } + + $args['prefs']['message_highlight'] = $prefs; + return($args); + } +} +?> -- cgit v1.2.3