action == 'print')
return;
$this->include_script('tb_label.js');
$this->add_texts('localization/', true);
$this->add_hook('messages_list', array($this, 'read_flags'));
$this->add_hook('message_load', array($this, 'read_single_flags'));
$this->add_hook('template_object_messageheaders', array($this, 'color_headers'));
$this->add_hook('render_page', array($this, 'tb_label_popup'));
$this->include_stylesheet($this->local_skin_path() . '/tb_label.css');
$this->name = get_class($this);
$this->prefs = array('show_labels' => true);
# -- additional TB flags
$this->add_tb_flags = array(
'LABEL1' => '$Label1',
'LABEL2' => '$Label2',
'LABEL3' => '$Label3',
'LABEL4' => '$Label4',
'LABEL5' => '$Label5',
);
$this->message_tb_labels = array();
$this->add_button(
array(
'command' => 'plugin.thunderbird_labels.rcm_tb_label_submenu',
'id' => 'tb_label_popuplink',
'title' => 'label', # gets translated
'domain' => $this->ID,
'type' => 'link',
'content' => ' ', # maybe put translated version of "Labels" here?
'class' => ($rcmail->config->get('skin') == 'larry') ? 'button' : 'tb_noclass',
),
'toolbar'
);
$this->register_action('plugin.thunderbird_labels.set_flags', array($this, 'set_flags'));
if (method_exists($this, 'require_plugin')
&& in_array('contextmenu', $rcmail->config->get('plugins'))
&& $this->require_plugin('contextmenu'))
{
if ($rcmail->action == '')
$this->add_hook('render_mailboxlist', array($this, 'show_tb_label_contextmenu'));
}
}
public function show_tb_label_contextmenu($args)
{
$rcmail = rcmail::get_instance();
$this->add_texts('localization/');
#$this->api->output->add_label('copymessage.copyingmessage');
$li = html::tag('li', array('class' => 'submenu'), Q($this->gettext('label')) . $this->_gen_label_submenu($args, 'tb_label_ctxm_submenu'));
$out .= html::tag('ul', array('id' => 'tb_label_ctxm_mainmenu'), $li);
$this->api->output->add_footer(html::div(array('style' => 'display: none;'), $out));
}
private function _gen_label_submenu($args, $id)
{
$rcmail = rcmail::get_instance();
$out = '';
for ($i = 0; $i < 6; $i++)
{
$separator = ($i == 0)? ' separator_below' :'';
$out .= '
'.$i.' '.$this->gettext('label'.$i).'';
}
$out = html::tag('ul', array('class' => 'popupmenu toolbarmenu folders', 'id' => $id), $out);
return $out;
}
public function read_single_flags($args)
{
#write_log($this->name, print_r(($args['object']), true));
if (!count($this->prefs)
or !isset($args['object'])
)
return;
if (is_array($args['object']->headers->flags))
{
$this->message_tb_labels = array();
foreach ($args['object']->headers->flags as $flagname => $flagvalue)
{
$flag = is_numeric("$flagvalue")? $flagname:$flagvalue;// for compatibility with < 0.5.4
$flag = strtolower($flag);
if (preg_match('/^\$?label/', $flag))
{
$flag_no = preg_replace('/^\$?label/', '', $flag);
#write_log($this->name, "Single message Flag: ".$flag." Flag_no:".$flag_no);
$this->message_tb_labels[] = (int)$flag_no;
}
}
}
# -- no return value for this hook
}
/**
* Writes labelnumbers for single message display
* Coloring of Message header table happens via Javascript
*/
public function color_headers($p)
{
#write_log($this->name, print_r($p, true));
# -- always write array, even when empty
$p['content'] .= '';
return $p;
}
public function read_flags($args)
{
#write_log($this->name, print_r($args, true));
// add color information for all messages
#$rcmail = rcmail::get_instance();
#$this->prefs = $rcmail->config->get('thunderbird_labels', array());
// dont loop over all messages if we dont have any highlights or no msgs
if (!count($this->prefs)
or !isset($args['messages'])
or !is_array($args['messages']))
return $args;
// loop over all messages and add $LabelX info to the extra_flags
foreach($args['messages'] as $message)
{
#write_log($this->name, print_r($message->flags, true));
$message->list_flags['extra_flags']['tb_labels'] = array(); # always set extra_flags, needed for javascript later!
if (is_array($message->flags))
foreach ($message->flags as $flagname => $flagvalue)
{
$flag = is_numeric("$flagvalue")? $flagname:$flagvalue;// for compatibility with < 0.5.4
$flag = strtolower($flag);
if (preg_match('/^\$?label/', $flag))
{
$flag_no = preg_replace('/^\$?label/', '', $flag);
#write_log($this->name, "Flag:".$flag." Flag_no:".$flag_no);
$message->list_flags['extra_flags']['tb_labels'][] = (int)$flag_no;
}
}
}
return($args);
}
function set_flags()
{
#write_log($this->name, print_r($_GET, true));
$rcmail = rcmail::get_instance();
$imap = $rcmail->imap;
$cbox = get_input_value('_cur', RCUBE_INPUT_GET);
$mbox = get_input_value('_mbox', RCUBE_INPUT_GET);
$toggle_label = get_input_value('_toggle_label', RCUBE_INPUT_GET);
$flag_uids = get_input_value('_flag_uids', RCUBE_INPUT_GET);
$flag_uids = explode(',', $flag_uids);
$unflag_uids = get_input_value('_unflag_uids', RCUBE_INPUT_GET);
$unflag_uids = explode(',', $unflag_uids);
$imap->conn->flags = array_merge($imap->conn->flags, $this->add_tb_flags);
#write_log($this->name, print_r($flag_uids, true));
#write_log($this->name, print_r($unflag_uids, true));
if (!is_array($unflag_uids)
|| !is_array($flag_uids))
return false;
$imap->set_flag($flag_uids, $toggle_label, $mbox);
$imap->set_flag($unflag_uids, "UN$toggle_label", $mbox);
$this->api->output->send();
}
function tb_label_popup()
{
$rcmail = rcmail::get_instance();
$out = '';
$rcmail->output->add_gui_object('tb_label_popup_obj', 'tb_label_popup');
$rcmail->output->add_footer($out);
}
}
?>