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.. --- .../compose_addressbook/compose_addressbook.php | 180 +++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 plugins/compose_addressbook/compose_addressbook.php (limited to 'plugins/compose_addressbook/compose_addressbook.php') diff --git a/plugins/compose_addressbook/compose_addressbook.php b/plugins/compose_addressbook/compose_addressbook.php new file mode 100644 index 000000000..b97be7b75 --- /dev/null +++ b/plugins/compose_addressbook/compose_addressbook.php @@ -0,0 +1,180 @@ +config->get('skin'); + if($skin != 'classic') return; + + $this->require_plugin('jqueryui'); + + $this->register_action('plugin.get_addressbook', array($this, 'get_address')); + $this->register_action('plugin.expand_groups', array($this, 'expand_groups')); + + if($rcmail->action == 'compose') { + $this->compose_addressbook_init(); + } + } + + public function compose_addressbook_init() + { + $this->add_texts('localization', true); + + $rcmail = rcmail::get_instance(); + + $skin_path = $this->local_skin_path(); + + // add javascript and stylesheets + $this->include_script('compose_addressbook.js?v=2'); + $this->include_stylesheet("$skin_path/compose_addressbook.css"); + + // html for dialog window + $table = new html_table(array('id' => 'compose_addressbook_table', 'class' => 'records-table', 'cols' => 1, 'cellspacing' => 0)); + + // create div for dialog window + $rcmail->output->add_footer(html::div(array('id' => "compose_addressbook_dialog", 'title' => Q($this->gettext('compose_addressbook_title'))), + html::div(array('id' => "compose_addressbook_quicksearchbar"), + html::img(array('id'=>'compose_addressbook_searchmod','src'=>'/images/icons/glass.png')) . + html::tag('input', array('type' => "text", 'class' => 'compose_addressbook_filter','id'=>'compose_addressbook_filter')). + html::a(array('id' => 'compose_addressbook_searchreset', 'href'=>'#'), + html::img(array('src'=>'/images/icons/reset.gif'))) + ) . + html::div(array('id' => "compose_addressbook_container"), + $table->show() + ) + )); + + // add the addressbook button + $this->add_button(array( + 'command' => 'plugin.compose_addressbook', + 'imagepas' => $skin_path.'/compose_addressbook.png', + 'imageact' => $skin_path.'/compose_addressbook.png', + 'title' => 'compose_addressbook.compose_addressbook_buttontitle', + 'id' => 'rcmbtn_compose_addressbook'), 'toolbar'); + + $this->load_config(); + $rcmail->output->set_env('compose_addressbook_mode', $rcmail->config->get('compose_addressbook_mode', 'full')); + $rcmail->output->add_gui_object('compose_addressbook_list', 'compose_addressbook_table'); + + // add some labels + $rcmail->output->add_label('cc', 'bcc', 'to'); + + // add list functions + $rcmail->output->include_script('list.js'); + + } + + // get the addressbook entries and return them to the UI. + function get_address() { + $contacts = array(); + $this->load_config(); + $rcmail = rcmail::get_instance(); + + $mode = $rcmail->config->get('compose_addressbook_mode', 'full'); + $search_mode = $rcmail->config->get('addressbook_search_mode'); + + // get the addressbooks, or default to all address sources + $book_types = (array) $rcmail->config->get('compose_addressbooks', $rcmail->config->get('autocomplete_addressbooks', array_keys($rcmail->get_address_sources()))); + + foreach ($book_types as $id) { + $abook = $rcmail->get_address_book($id); + $abook->set_pagesize(50000); + + if($mode == 'full') { + $result = $abook->list_records(); + while ($sql_arr = $result->iterate()) { + foreach ((array)$abook->get_col_values('email', $sql_arr, true) as $email) { + $contact = format_email_recipient($email, $sql_arr['name']); + $contacts[] = array('name' => $sql_arr['name'] , 'email' => format_email_recipient($email, $sql_arr['name'])); + } + } + $search = null; + if($abook->groups) { + foreach($abook->list_groups($search) as $group) { + $abook->reset(); + $abook->set_group($group['ID']); + $result = $abook->count(); + if ($result->count) { + $contacts[] = array('name' => $group['name'] . ' (' . intval($result->count) . ')', 'id' => $group['ID'], 'source' => $id); + } + } + } + } else { + $search=trim(get_input_value('_search', RCUBE_INPUT_POST)); + + if(!empty($search)) { + $result = $abook->search(array('name','email'),$search, $search_mode, true, true, 'email'); + while ($sql_arr = $result->iterate()) { + foreach ((array)$abook->get_col_values('email', $sql_arr, true) as $email) { + $contact = format_email_recipient($email, $sql_arr['name']); + $contacts[] = array('name' => $sql_arr['name'] , 'email' => format_email_recipient($email, $sql_arr['name'])); + } + } + if($abook->groups) { + foreach($abook->list_groups($search) as $group) { + $abook->reset(); + $abook->set_group($group['ID']); + $result = $abook->count(); + if ($result->count) { + $contacts[] = array('name' => $group['name'] . ' (' . intval($result->count) . ')', 'id' => $group['ID'], 'source' => $id); + } + } + } + } + } + } + + sort($contacts); + + // send the addressbook back to javascript + $rcmail->output->command('plugin.compose_addressbook_receive', array('addresses' => $contacts)); + } + + // expand all the groups that we added + function expand_groups() { + $rcmail = rcmail::get_instance(); + + $group_ids_input=trim(get_input_value('_groupids', RCUBE_INPUT_GET)); + $group_sources_input=trim(get_input_value('_groupsources', RCUBE_INPUT_GET)); + $target = trim(get_input_value('_target', RCUBE_INPUT_GET)); + + if($group_ids_input == '' || $group_sources_input == '') exit; + + $group_ids = explode(',', $group_ids_input); + $group_sources = explode(',', $group_sources_input); + + // create a list of ids per address source + for($i=0; $i $groups) { + $abook = $rcmail->get_address_book($source); + foreach($groups as $group) { + $abook->set_group($group); + $abook->set_pagesize(1000); + $result = $abook->list_records(array('email','name')); + while ($result && ($sql_arr = $result->iterate())) { + $email = (array)$sql_arr['email']; + $members[] = format_email_recipient($email[0], $sql_arr['name']); + } + } + } + $rcmail->output->command('plugin.compose_addressbook_receive_expand', array('members' => array_unique($members), 'target' => $target)); + } +} +?> -- cgit v1.2.3