source: branches/2.2.0.1/contactcenter/inc/class.ui_data.inc.php @ 4471

Revision 4471, 143.6 KB checked in by rafaelraymundo, 13 years ago (diff)

Ticket #1882 - Contatos Não são Associados a um Grupo no Momento da Importação.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
RevLine 
[2]1<?php
2  /***************************************************************************\
3  * eGroupWare - Contacts Center                                              *
4  * http://www.egroupware.org                                                 *
5  * Written by:                                                               *
6  *  - Raphael Derosso Pereira <raphaelpereira@users.sourceforge.net>         *
7  *  - Jonas Goes <jqhcb@users.sourceforge.net>                               *
8  *  sponsored by Thyamad - http://www.thyamad.com                            *
9  * ------------------------------------------------------------------------- *
10  *  This program is free software; you can redistribute it and/or modify it  *
11  *  under the terms of the GNU General Public License as published by the    *
12  *  Free Software Foundation; either version 2 of the License, or (at your   *
13  *  option) any later version.                                               *
14  \***************************************************************************/
15
[1599]16
[2]17        class ui_data
18        {
19                var $public_functions = array(
20                        'data_manager' => true,
21                );
[1599]22
[2]23                var $bo;
[3334]24                var $so_group;
[2]25                var $typeContact;
[3795]26                var $preferences;
[1599]27
[2]28                var $page_info = array(
29                        'n_cards'          => 20,
30                        'n_pages'          => false,
31                        'actual_letter'    => 'A',
32                        'actual_page'      => 1,
33                        'actual_entries'   => false,
34                        'changed'          => false,
35                        'catalogs'         => false,
36                        'actual_catalog'   => false
37                );
[1599]38
[2]39                /*!
[1599]40
[2]41                        @function ui_data
42                        @abstract The constructor. Sets the initial parameters and loads
43                                the data saved in the session
44                        @author Raphael Derosso Pereira
[1599]45
[2]46                */
47                function ui_data()
48                {
49                        $temp = $GLOBALS['phpgw']->session->appsession('ui_data.page_info','contactcenter');
50                        $temp2 = $GLOBALS['phpgw']->session->appsession('ui_data.all_entries','contactcenter');
[1599]51
[2]52                        $this->bo = CreateObject('contactcenter.bo_contactcenter');
[1599]53
[2]54                        if ($temp)
55                        {
56                                $this->page_info = $temp;
57                        }
58
59                        if ($temp2)
60                        {
61                                $this->all_entries = $temp2;
62                        }
[1599]63
[2]64                        if (!$this->page_info['actual_catalog'])
65                        {
66                                $catalogs = $this->bo->get_catalog_tree();
67                                $this->page_info['actual_catalog'] = $catalogs[0];
68                        }
[1599]69
70                        $this->page_info['actual_catalog'] =& $this->bo->set_catalog($this->page_info['actual_catalog']);
71
72
[2]73                        if($this->page_info['actual_catalog']['class'] == 'bo_group_manager')
74                                $this -> typeContact = 'groups';
[1599]75/**rev 104**/
[752]76                        else if($this->page_info['actual_catalog']['class'] == 'bo_shared_group_manager')
77                                $this -> typeContact = 'shared_groups';
78                        else if($this->page_info['actual_catalog']['class'] == 'bo_shared_people_manager')
79                                $this -> typeContact = 'shared_contacts';
[1599]80/******/
[2]81                        else
82                                $this -> typeContact = 'contacts';
[3795]83                        $this->preferences = $_SESSION['phpgw_info']['user']['preferences']['contactcenter'];
[2]84                }
85
86                /*!
[1599]87
[2]88                        @function index
89                        @abstract Builds the Main Page
90                        @author Raphael Derosso Pereira
91                        @author Jonas Goes
[1599]92
93                */
[2]94                function index()
[1599]95                {
[2]96                        if(!@is_object($GLOBALS['phpgw']->js))
97                        {
98                                $GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
99                        }
100                        $GLOBALS['phpgw']->js->validate_file('venus','table');
101                        $GLOBALS['phpgw']->js->validate_file('venus','shapes');
102                        $GLOBALS['phpgw']->js->validate_file('venus','jsStructUtil');
103                        $GLOBALS['phpgw']->js->validate_file('venus','cssUtil');
[1599]104
[2]105//                      $GLOBALS['phpgw']->js->set_onload('setTimeout(\'updateCards()\',1000)');
106                        $GLOBALS['phpgw']->common->phpgw_header();
[1599]107
[2]108                        $GLOBALS['phpgw']->template->set_file(array('index' => 'index.tpl'));
109                        $GLOBALS['phpgw']->template->set_var('cc_root_dir', $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/');
[1599]110
[2]111                        /* Quick Add */
112                        $GLOBALS['phpgw']->template->set_var('cc_qa_alias',lang('Alias').':');
113                        $GLOBALS['phpgw']->template->set_var('cc_qa_given_names',lang('Given Names').':');
114                        $GLOBALS['phpgw']->template->set_var('cc_qa_family_names',lang('Family Names').':');
115                        $GLOBALS['phpgw']->template->set_var('cc_qa_phone',lang('Phone').':');
116                        $GLOBALS['phpgw']->template->set_var('cc_qa_email',lang('Email').':');
117                        $GLOBALS['phpgw']->template->set_var('cc_qa_save',lang('Save'));
118                        $GLOBALS['phpgw']->template->set_var('cc_qa_clear',lang('Clear'));
[285]119                        $GLOBALS['phpgw']->template->set_var('cc_qa_close',lang('Close'));
[2]120                        /* End Quick Add */
[1599]121
[3282]122                        /* Advanced Search */
123                       
124                        $GLOBALS['phpgw']->template->set_var('cc_corporate',lang('Corporate'));
125                        $GLOBALS['phpgw']->template->set_var('cc_cs_title',lang('Advanced Search'));
126                        $GLOBALS['phpgw']->template->set_var('cc_catalogues',lang('Catalogues'));
127                       
128                       
129                       
130                        /* End of Advanced Search*/
131
[2]132                        $cc_css_file = $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/styles/cc.css';
133                        $cc_card_image_file = $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/templates/default/images/card.png';
134                        $GLOBALS['phpgw']->template->set_var('cc_css',$cc_css_file);
135                        $GLOBALS['phpgw']->template->set_var('cc_dtree_css', $cc_dtree_file);
136                        $GLOBALS['phpgw']->template->set_var('cc_card_image',$cc_card_image_file);
[1599]137
[2]138                        $GLOBALS['phpgw']->template->set_var('cc_personal',lang('Personal'));
[1599]139
140/***rev 104***/
141                        //$GLOBALS['phpgw']->template->set_var('cc_full_add',lang('Full Add'));
[575]142                        $GLOBALS['phpgw']->template->set_var('cc_full_add_button',lang('Full Add'));
[1599]143/******/
144                        $GLOBALS['phpgw']->template->set_var('cc_full_add_button_sh',lang('Full Add Shared'));
[2]145                        $GLOBALS['phpgw']->template->set_var('cc_reset',lang('Reset'));
[1599]146
[2]147                        $GLOBALS['phpgw']->template->set_var('cc_personal_data',lang('Personal Data'));
148                        $GLOBALS['phpgw']->template->set_var('cc_addresses',lang('Addresses'));
149                        $GLOBALS['phpgw']->template->set_var('cc_connections',lang('Connections'));
150                        $GLOBALS['phpgw']->template->set_var('cc_relations',lang('Relations'));
151
152                        $GLOBALS['phpgw']->template->set_var('cc_quick_add',lang('Quick Add'));
153                        $GLOBALS['phpgw']->template->set_var('cc_catalogs',lang('Catalogues'));
154                        $GLOBALS['phpgw']->template->set_var('cc_group_add',lang('Group Add'));
[1599]155
[2]156                        /* Panel */
157                        $GLOBALS['phpgw']->template->set_var('cc_panel_new',lang('New').'...');
158                        $GLOBALS['phpgw']->template->set_var('cc_panel_search',lang('Search').'...');
159                        $GLOBALS['phpgw']->template->set_var('cc_panel_table',lang('Table View'));
160                        $GLOBALS['phpgw']->template->set_var('cc_panel_cards',lang('Cards View'));
[285]161                        $GLOBALS['phpgw']->template->set_var('cc_btn_import_export', lang('Import/Export'));
162                        $GLOBALS['phpgw']->template->set_var('cc_btn_new', lang("New..."));
[1599]163
[2]164                        $GLOBALS['phpgw']->template->set_var('cc_panel_search_found',lang('Showing found entries'));
165                        $GLOBALS['phpgw']->template->set_var('cc_panel_first_page',lang('First Page'));
166                        $GLOBALS['phpgw']->template->set_var('cc_panel_previous_page',lang('Previous Page'));
167                        $GLOBALS['phpgw']->template->set_var('cc_panel_next_page',lang('Next Page'));
168                        $GLOBALS['phpgw']->template->set_var('cc_panel_last_page',lang('Last Page'));
169                        $GLOBALS['phpgw']->template->set_var('cc_all',lang('all'));
170                        /* End Panel */
[1599]171
[2]172                        /* Messages */
[1599]173/**rev 104**/
[503]174                        $GLOBALS['phpgw']->template->set_var('cc_msg_not_allowed',lang('Not Allowed'));
[1599]175                        $GLOBALS['phpgw']->template->set_var('cc_msg_unavailable',lang('Unavailable function'));
176/*****/
[1682]177
178
179                        $GLOBALS['phpgw']->template->set_var('cc_msg_name_mandatory',lang('Name is mandatory'));
[1690]180                        $GLOBALS['phpgw']->template->set_var('cc_msg_err_invalid_serch',lang('The query should not have the characters {%,?}'));
[1682]181                        $GLOBALS['phpgw']->template->set_var('cc_msg_tel_or_mail_required',lang('Tel or email is required'));
182
[2]183                        $GLOBALS['phpgw']->template->set_var('cc_msg_no_cards',lang('No Cards'));
184                        $GLOBALS['phpgw']->template->set_var('cc_msg_err_no_room',lang('No Room for Cards! Increase your browser area.'));
185                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_new',lang('New from same Company'));
186                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_edit',lang('Edit Contact'));
187                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_remove',lang('Remove Contact'));
188                        $GLOBALS['phpgw']->template->set_var('cc_send_mail',lang('Send Mail'));
189                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_edit',lang('Edit Group'));
190                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_remove',lang('Remove Group'));
191                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_remove_confirm',lang('Confirm Removal of this Group?'));
192                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_remove_confirm',lang('Confirm Removal of this Contact?'));
193                        $GLOBALS['phpgw']->template->set_var('cc_participants',lang('Participants'));
194                        $GLOBALS['phpgw']->template->set_var('cc_empty',lang('Empty'));
195                        /* End Messages */
[1599]196
[2]197                        $GLOBALS['phpgw']->template->set_var('cc_results',lang('Results'));
198                        $GLOBALS['phpgw']->template->set_var('cc_is_my',lang('Is My'));
[285]199                        $GLOBALS['phpgw']->template->set_var('cc_ie_personal',lang('Import/Export pesonal contacts'));
[2]200                        $GLOBALS['phpgw']->template->set_var('cc_btn_search',lang('Search'));
201                        $GLOBALS['phpgw']->template->set_var('cc_add_relation',lang('Add Relation'));
[1599]202                        $GLOBALS['phpgw']->template->set_var('cc_del_relation',lang('Remove Selected Relations'));
[38]203                        $GLOBALS['phpgw']->template->set_var('cc_msg_group',lang('Group'));
204                        $GLOBALS['phpgw']->template->set_var('cc_msg_contact_full',lang('Contact [Full]'));
[1496]205                        $GLOBALS['phpgw']->template->set_var('cc_msg_contact_sh',lang('Contact [Shared]'));
[38]206                        $GLOBALS['phpgw']->template->set_var('cc_msg_contact_qa',lang('Contact [Quick Add]'));
[2]207                        $GLOBALS['phpgw']->template->set_var('cc_contact_title',lang('Contact Center').' - '.lang('Contacts'));
208                        $GLOBALS['phpgw']->template->set_var('cc_window_views_title',lang('Contact Center').' - '.lang('Views'));
209                        $GLOBALS['phpgw']->template->set_var('phpgw_img_dir', $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/images');
[118]210
[285]211                        $GLOBALS['phpgw']->template->set_var('cc_msg_import_contacts', lang('Import Contacts'));
212                        $GLOBALS['phpgw']->template->set_var('cc_msg_export_contacts', lang('Export Contacts'));
213                        $GLOBALS['phpgw']->template->set_var('cc_msg_expresso_info_csv', lang('The Expresso supports the contacts importation in the CSV file format.'));
214                        $GLOBALS['phpgw']->template->set_var('cc_msg_choose_file_type', lang('Select the file type'));
215                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook_express', lang('Outlook Express'));
216                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook2k', lang('Outlook 2000'));
217                        $GLOBALS['phpgw']->template->set_var('cc_msg_expresso_default', lang('Expresso (default)'));
218                        $GLOBALS['phpgw']->template->set_var('cc_msg_choose_contacts_file', lang('Select the file that contains the contacts to be imported:'));
219                        $GLOBALS['phpgw']->template->set_var('cc_msg_close_win', lang('Close'));
220                        $GLOBALS['phpgw']->template->set_var('cc_msg_close', lang('Close'));
221                        $GLOBALS['phpgw']->template->set_var('cc_msg_ie_personal', lang('Import / Export personal Contacts'));
222                        $GLOBALS['phpgw']->template->set_var('cc_msg_import_fail', lang('The importation has failed. Verify the file format.'));
223                        $GLOBALS['phpgw']->template->set_var('cc_msg_importing_contacts', lang('Importing Contacts...'));
224                        $GLOBALS['phpgw']->template->set_var('cc_msg_import_finished', lang('The importation has finished.'));
225                        $GLOBALS['phpgw']->template->set_var('cc_msg_new', lang(' new'));
226                        $GLOBALS['phpgw']->template->set_var('cc_msg_failure', lang(' failed'));
227                        $GLOBALS['phpgw']->template->set_var('cc_msg_exists', lang(' were existent'));
228                        $GLOBALS['phpgw']->template->set_var('cc_msg_show_more_info', lang('show more info'));
229                        $GLOBALS['phpgw']->template->set_var('cc_msg_clean', lang('Clean'));
230                        $GLOBALS['phpgw']->template->set_var('cc_msg_invalid_csv', lang('Select a valid CSV file to import your contacts'));
231                        $GLOBALS['phpgw']->template->set_var('cc_msg_export_csv', lang('Select the format type that you want to export your contacts'));
232                        $GLOBALS['phpgw']->template->set_var('cc_msg_automatic', lang('Automatic'));
233                        $GLOBALS['phpgw']->template->set_var('cc_msg_export_error', lang('An error has occurred while the exportation.'));
234                        $GLOBALS['phpgw']->template->set_var('cc_msg_new_email', lang('New Email'));
235                        $GLOBALS['phpgw']->template->set_var('cc_msg_main', lang('Main'));
236                        $GLOBALS['phpgw']->template->set_var('cc_msg_alternative', lang('Alternative'));
237                        $GLOBALS['phpgw']->template->set_var('cc_msg_select_email', lang('Select E-Mail'));
238                        $GLOBALS['phpgw']->template->set_var('cc_msg_new_phone', lang('New Telephone'));
[3549]239                        $GLOBALS['phpgw']->template->set_var('cc_msg_home', lang('Home Phone'));
[285]240                        $GLOBALS['phpgw']->template->set_var('cc_msg_cellphone', lang('Cellphone'));
[1517]241                        $GLOBALS['phpgw']->template->set_var('cc_msg_corporative_cellphone', lang('Corporative Cellphone'));
242                        $GLOBALS['phpgw']->template->set_var('cc_msg_corporative_fax', lang('Corporative Fax'));
[1599]243                        $GLOBALS['phpgw']->template->set_var('cc_msg_corporative_pager', lang('Corporative Pager'));
[285]244                        $GLOBALS['phpgw']->template->set_var('cc_msg_work', lang('Work'));
245                        $GLOBALS['phpgw']->template->set_var('cc_msg_fax', lang('Fax'));
246                        $GLOBALS['phpgw']->template->set_var('cc_msg_pager', lang('Pager'));
247                        $GLOBALS['phpgw']->template->set_var('cc_msg_choose_phone', lang('Select the telephone'));
248                        $GLOBALS['phpgw']->template->set_var('cc_msg_warn_firefox', lang('Warning: Too old version of Firefox'));
249                        $GLOBALS['phpgw']->template->set_var('cc_msg_firefox_half1', lang('For this application work correctly</u>'));
250                        $GLOBALS['phpgw']->template->set_var('cc_msg_firefox_half2', lang('it\'s necessary to update your Firefox Browser for a new version (version > 1.5) Install now clicking in the link bellow, or if you want to update it later'));
251                        $GLOBALS['phpgw']->template->set_var('cc_msg_click_close', lang('click Close'));
252                        $GLOBALS['phpgw']->template->set_var('cc_msg_install_now', lang('Install Now'));
253                        $GLOBALS['phpgw']->template->set_var('cc_msg_install_new_firefox', lang('Install a new Firefox version'));
254                        $GLOBALS['phpgw']->template->set_var('cc_msg_moz_thunderbird', lang('Export as Mozilla Thunderbird CSV.'));
255                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook_express_pt', lang('Export as Outlook Express (Portuguese) CSV.'));
256                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook_express_en', lang('Export as Outlook Express (English) CSV.'));
257                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook_2k_pt', lang('Export as Outlook 2000 (Portuguese) CSV.'));
258                        $GLOBALS['phpgw']->template->set_var('cc_msg_outlook_2k_en', lang('Export as Outlook 2000 (English) CSV.'));
259                        $GLOBALS['phpgw']->template->set_var('cc_msg_expresso_default_csv', lang('Export as Expresso (Default) CSV.'));
260                        $GLOBALS['phpgw']->template->set_var('cc_msg_copy_to_catalog', lang('Copy to personal catalog.'));
261                        $GLOBALS['phpgw']->template->set_var('cc_msg_add_contact_to_group', lang('You did not add any contact for this group.'));
262                        $GLOBALS['phpgw']->template->set_var('cc_msg_fill_field_name', lang('Fill the field Full Name'));
[1599]263
[3334]264                        $select_groups = '';
265                       
266                        $this->so_group = CreateObject('contactcenter.so_group');
267                       
268                        $array_groups = $this->so_group->selectGroupsOwnerCanImportContacts($GLOBALS['phpgw_info']['user']['account_id']);
269                       
270                        $select_groups = "<select id='id_group'>";//<option value=0>Selecione um grupo...</option></select>";
271                        $select_groups .= "<option value=0 selected>Nenhum...</option>";
272                        foreach ($array_groups as $group){
273                                $select_groups .= "<option value='".$group['id_group']."'>".$group['title']."</option>";                                               
274                        }                                       
275                        $select_groups .= "</select>";
276                       
277                        $GLOBALS['phpgw']->template->set_var('cc_select_groups',$select_groups);
278                       
[1517]279                        if($GLOBALS['phpgw_info']['server']['personal_contact_type']=='True'){
280                                $GLOBALS['phpgw']->template->set_var('cc_contact_type', 'advanced');
281                        }else{
282                                $GLOBALS['phpgw']->template->set_var('cc_contact_type', 'default');
283                        }
[2]284                        $GLOBALS['phpgw']->template->parse('out','index');
[1599]285
[2]286                        $api = CreateObject('contactcenter.ui_api');
287                        $main = $api->get_full_add();
288                        $main .= $api->get_search_obj();
289                        $main .= $api->get_quick_add_plugin();
290                        $main .= $api->get_add_group();
291                        $main .= $GLOBALS['phpgw']->template->get_var('out');
292
293                        echo $main;
294                }
295
[1599]296
[2]297                /*!
[1599]298
[2]299                        @function data_manager
[1599]300                        @abstract Calls the right method and passes to it the right
[2]301                                parameters
302                        @author Raphael Derosso Pereira
[1599]303
[2]304                */
305                function data_manager()
306                {
307                        switch($_GET['method'])
308                        {
309                                /* Cards Methods */
310                                case 'set_n_cards':
311                                        return $this->set_n_cards((int)$_GET['ncards']);
[1599]312
313                                case 'get_cards_data':
[3303]314
[284]315                                        $ids = false;
316                                        // To support ldap catalogs using accentuation
317                                        if ($_POST['letter'] == 'search' && isset($_POST['data']))
318                                        {
[285]319                                                $ids = utf8_decode($this->search($_POST['data']));
[284]320                                        }
[1599]321
[285]322                                        if(isset($_SESSION['ids']))
323                                                $ids = $_SESSION['ids'];
[1599]324
325                                        return $this->get_cards_data($_POST['letter'], $_POST['page'], $ids);
326
[2]327                                case 'get_cards_data_get':
328                                        return $this->get_cards_data($_GET['letter'], $_GET['page'], unserialize(str_replace('\\"','"',$_GET['ids'])));
329
330
331                                case 'get_photo':
332                                        return $this->get_photo($_GET['id']);
333
[3795]334                                case 'get_init_values':
335                                        echo serialize(array("visible_all_ldap" => $this->get_visible_all_ldap(), "preferences" => $this->preferences));
[285]336                                        return;
[1599]337
[2]338                                /* Catalog Methods */
339                                case 'set_catalog':
340                                        return $this->set_catalog($_GET['catalog']);
[1599]341
[2]342                                case 'get_catalog_tree':
343                                        echo serialize($this->get_catalog_tree($_GET['level']));
344                                        return;
345
346                                case 'get_actual_catalog':
347                                        echo serialize($this->get_actual_catalog());
348                                        return;
349
350                                case 'get_catalog_participants_list':
351                                        echo serialize($this->get_catalog_participants_list($_POST['id']));
352                                        return;
[1599]353/**rev 104**/
[880]354                                case 'get_catalog_participants_group':
355                                        echo serialize($this->get_catalog_participants_group($_POST['id']));
356                                        return;
[1599]357/***/
[2]358                                case 'get_catalog_add_contact':
[284]359                                        // To support ldap catalogs with accentuation
360                                        echo serialize($this->get_catalog_add_contact(utf8_decode($_POST['id'])));
[2]361                                        return;
[1599]362
[2]363                                /* Full Add Methods */
364                                case 'get_full_data':
[1599]365                                        //return $this->get_full_data($_GET['id']);
366/**rev 104**/
[503]367                                        return $this->get_full_data($_GET['id'],$_GET['catalog']);
[1599]368/****/
369
[2]370                                case 'get_group':
[1280]371                                        return $this->get_group_data($_GET['id'],isset($_GET['shared_from'])?$_GET['shared_from']:null);
[1599]372
[2]373                                case 'get_contact_full_add_const':
374                                        return $this->get_contact_full_add_const();
375
376                                case 'post_full_add':
377                                        return $this->post_full_add();
378
[1496]379                                case 'post_full_add_shared' :
380                                        return $this->post_full_add_shared();
381
[2]382                                case 'post_photo':
383                                        return $this->post_photo((int) $_GET['id'] ? (int) $_GET['id'] : '_new_');
384
385                                case 'get_states':
386                                        return $this->get_states($_GET['country']);
[1599]387
[2]388                                case 'get_cities':
389                                        return $this->get_cities($_GET['country'], $_GET['state'] ? $_GET['state'] : null);
[1599]390
391
[2]392                                /* Other Methods */
[1599]393                                case 'quick_add':
[2]394                                        return $this->quick_add($_POST['add']);
[1599]395
396                                case 'add_group':
[2]397                                        return $this->add_group($_POST['add']);
[1599]398
[2]399                                case 'remove_entry':
400                                        return $this->remove_entry((int)$_GET['remove']);
[1599]401
[2]402                                case 'remove_all_entries':
403                                        return $this->remove_all_entries();
404
405                                case 'remove_group':
406
[1599]407                                        return $this->remove_group((int)$_GET['remove']);
408
[2]409                                case 'search':
[285]410                                        $ids = false;
411                                        $ids = $this->search($_GET['data']);
[3970]412                                        $data = unserialize($_GET['data']);
413                                        $dontPaginate = false;
414                                        if (isset($data['ccAddGroup'])){
415                                            $dontPaginate = true;
416                                        }
417                                        return $this->get_cards_data('search', '1', $ids, $dontPaginate);
[2]418
419                                case 'email_win':
420                                        $GLOBALS['phpgw']->common->phpgw_header();
421                                        $api = CreateObject('contactcenter.ui_api');
422                                        $win = $api->get_email_win();
423                                        $win .= $api->get_quick_add_plugin();
424                                        $win .= '<input id="QAbutton" type="button" value="QuickAdd" />'
425                                                .'<br><input type="button" value="EmailWin" onclick="ccEmailWin.open()" />'
426                                                .'<script type="text/javascript">'
427                                                .'      ccQuickAdd.associateAsButton(Element("QAbutton"));'
428                                                .'</script>';
429                                        echo $win;
430                                        return;
431
432                                /* Information Gathering */
433                                case 'get_multiple_entries':
434                                        echo serialize($this->get_multiple_entries(str_replace('\\"','"',$_POST['data'])));
435                                        return;
436
437                                case 'get_all_entries':
438                                        echo serialize($this->get_all_entries(str_replace('\\"','"',$_POST['data'])));
439                                        return;
440
441                                case 'import_contacts':
[3334]442                                        return $this->import_contacts($_GET['typeImport'],$_GET['id_group']);
[2]443
444                                case 'export_contacts':
445                                        return $this->export_contacts($_POST['typeExport']);
[3313]446                               
447                                case 'get_qtds_compartilhado':
448                                        return $this->get_qtds_compartilhado();
[3335]449                                case 'get_list_owners_perms_add':
450                                        echo $this->get_list_owners_perms_add();
451                                        return;
[2]452
453                        }
454                }
455
456                /*!
[1599]457
[2]458                        @function set_n_cards
459                        @abstract Informs the class the number of cards the page can show
460                        @author Raphael Derosso Pereira
[1599]461
[2]462                        @param integer $n_cards The number of cards
[1599]463
[2]464                */
465                function set_n_cards($n_cards)
466                {
467                        if (is_int($n_cards))
468                        {
469                                $this->page_info['n_cards'] = $n_cards;
470                                echo 1;
471                        }
[1599]472
[2]473                        $this->save_session();
474                }
[1599]475
[2]476                /*!
[1599]477
[2]478                        @function set_catalog
479                        @abstract Sets the current catalog selected by the user
480                        @author Raphael Derosso Pereira
[1599]481
[2]482                        @param string $id_catalog The sequence of IDs to reach the catalog
483                                separated by commas
[1599]484
[2]485                */
[3970]486                function set_catalog($id_catalog, $echo=true)
[2]487                {
488                        $id_catalog = str_replace('\\"', '"', $id_catalog);
489                        $temp =& $this->bo->set_catalog($id_catalog);
[1599]490
[3333]491                        if(!$this->bo->catalog->src_info) {
492                            $ldap = CreateObject('contactcenter.bo_ldap_manager');
493                            $this->bo->catalog->src_info = $ldap->srcs[1];
494                        }
495
496                        $resetCC_actual_letter = 0;
497                        if($this->bo->catalog->src_info['visible'] == "false")
498                        {
499                            $resetCC_actual_letter = 1;
500                        }
501
[2]502                        if ($temp)
503                        {
[3333]504                                unset($this->page_info['actual_letter']);
[2]505                                $this->page_info['changed'] = true;
506                                $this->page_info['actual_entries'] = false;
507                                $this->page_info['actual_catalog'] =& $temp;
508                                $this->save_session();
[1599]509
[2]510                                $catalog_info = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
[1599]511
[2]512                                if ($catalog_info['class'] === 'bo_global_ldap_catalog' ||
513                                    $catalog_info['class'] === 'bo_catalog_group_catalog')
514                                {
515                                        $perms = 1;
516                                }
517                                else
518                                {
519                                        $perms = 15;
520                                }
[1599]521
[3970]522                                if ($echo)
523                                {
524                                    echo serialize(array(
525                                            'status' => 'ok',
526                                            'catalog' => $catalog_info['class'],
527                                            'external' => $catalog_info['external']?true:false,
528                                            'resetCC_actual_letter' => $resetCC_actual_letter,
529                                            'perms'  => $perms
530                                    ));
531                                }
532                                else
533                                    {
534                                        return serialize(array(
535                                            'status' => 'ok',
536                                            'catalog' => $catalog_info['class'],
537                                            'external' => $catalog_info['external']?true:false,
538                                            'resetCC_actual_letter' => $resetCC_actual_letter,
539                                            'perms'  => $perms
540                                        ));
541                                    }
[2]542
543                                return;
544                        }
[1599]545
[2]546                        echo serialize(array(
547                                'status' => 'ok',
[3333]548                                'resetCC_actual_letter' => $resetCC_actual_letter,
[2]549                                'perms'  => 0
550                        ));
551                }
[1599]552
553
[2]554                /*!
[1599]555
[2]556                        @function get_catalog_tree
557                        @abstract Returns the JS serialized array to used as the tree
558                                level
559                        @author Raphael Derosso Pereira
[3334]560            @author Mário César Kolling (error messages and timeout)
[1599]561
562                        @param (string) $level The level to be taken
563
[2]564                */
565                function get_catalog_tree($level)
566                {
567                        if ($level === '0')
568                        {
569                                $folderImageDir = $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/dftree/images/';
570
571                                $parent = '0';
[1599]572
[2]573                                if (!($tree = $this->bo->get_catalog_tree($level)))
574                                {
575                                        return array(
576                                                'msg'    => lang('Couldn\'t get the Catalogue Tree. Please contact the Administrator.'),
577                                                'status' => 'fatal'
578                                        );
579                                }
580                        }
581                        else
582                        {
583                                $last_dot = strrpos($level,'.');
584                                $parent = substr($level, 0, $last_dot);
585                                $child = substr($level, $last_dot+1, strlen($level));
586                                if (!($tree[$child] = $this->bo->get_catalog_tree($level)))
587                                {
588                                        return array(
589                                                'msg'    => lang('Couldn\'t get the Catalogue Tree. Please contact the Administrator.'),
590                                                'status' => 'fatal'
591                                        );
592                                }
[284]593                                // Deals with timeout and returns the generated message to the browser
594                                else if (!empty($tree[$child]['timeout']) && !empty($tree[$child]['msg']))
595                                {
596                                        $tmp = array(
597                                                'msg'    => $tree[$child]['msg'],
598                                                'status' => 'fatal'
599                                        );
600                                        unset($tree[$child]);
601                                        return $tmp;
602                                }
[2]603                        }
[1599]604
[2]605                        $folderImageDir = $GLOBALS['phpgw']->common->image('contactcenter','globalcatalog-mini.png');
606                        $folderImageDir = substr($folderImageDir, 0, strpos($folderImageDir, 'globalcatalog-mini.png'));
[1599]607
[284]608                        // Deals with error messages from the server and returns them to the browser
609                        if ($tree['msg'])
610                        {
611                                $msg = $tree['msg'];
612                                unset($tree['msg']);
613                        }
614
[2]615                        $tree_js = $this->convert_tree($tree, $folderImageDir, $parent);
[284]616
617                        // Return status = ok, or else return generated message to the browser
618                        if (!$msg)
619                        {
620                                return array(
621                                        'data' => $tree_js,
622                                        'msg'  => lang('Catalog Tree Successfully taken!'),
623                                        'status' => 'ok'
624                                );
625                        }
626                        else
627                        {
628                                return array(
629                                        'data' => $tree_js,
630                                        'msg'  => $msg,
631                                        'status' => 'error'
632                                );
633                        }
[2]634                }
[1599]635
[2]636                /*!
[1599]637
[2]638                        @function get_actual_catalog
639                        @abstract Returns the actual selected Catalog
640                        @author Raphael Derosso Pereira
641
642                */
643                function get_actual_catalog()
[1599]644                {
[2]645                        $level = $this->bo->get_level_by_branch($this->bo->get_actual_catalog(), $this->bo->tree['branches'], '0');
[1599]646
[2]647                        if ($level)
648                        {
649                                return array(
650                                        'status' => 'ok',
651                                        'data'   => $level
652                                );
653                        }
654
655                        return array(
656                                'status' => 'fatal',
657                                'msg'    => lang('Couldn\'t get the actual catalog.'),
658                        );
659                }
[1599]660
[3313]661                function get_qtds_compartilhado() {
662                        $so_contact = CreateObject('contactcenter.so_contact',  $GLOBALS['phpgw_info']['user']['account_id']);
663            $relacionados = $so_contact->get_relations();
664
665                        $perms_relacao = array();
666
667                foreach($relacionados as $uid_relacionado => $tipo_relacionamento) {
668                                $aclTemp = CreateObject("phpgwapi.acl",$uid_relacionado);
669                $aclTemp->read();
670                $perms_relacao[$uid_relacionado] = $aclTemp->get_specific_rights($GLOBALS['phpgw_info']['user']['account_id'],'contactcenter'); //Preciso verificar as permissões que o contato relacionado deu para o atual
671                        }
672
673                        $validos = array();
674                        $count = 0;
675                        foreach($perms_relacao as $uid_relacionado => $val){
676                                if ($perms_relacao[$uid_relacionado]&2)
677                                {
678                                        $validos[$uid_relacionado] = $perms_relacao[$uid_relacionado];
679                                        $count++;
680                                }
681                        }
682                        echo serialize(array(0=>$count));
683                }
684
[2]685                /*!
[1599]686
[2]687                        @function get_cards_data
688                        @abstract Returns the information that is placed on the cards
689                        @author Raphael Derosso Pereira
[1599]690
[2]691                        @param string $letter The first letter to be searched
[1599]692                        @param (int)  $page The page to be taken
[2]693                        @param (str)  $ids The ids to be taken in case of search
694
695                        TODO: This function is not well done. It must be rewritten
696                                using the new array 'msg','status','data' schema.
697                */
[3970]698                function get_cards_data($letter, $page, $ids, $dontPaginate = false)
[2]699                {
[285]700                        if( $ids )
[1599]701                                $_SESSION['ids'] = $ids;
[284]702
703                        // It's an external catalog?
704                        $external = $this->bo->is_external($this->page_info['actual_catalog']);
[2]705                        //echo $page."\n";
706                        if ($letter !== 'search' and ($letter != $this->page_info['actual_letter'] or
[1599]707                            ($letter == $this->page_info['actual_letter'] and $page == $this->page_info['actual_page']) or
[2]708                            $this->page_info['changed']))
709                        {
710                                unset($ids);
711                                $this->page_info['changed'] = false;
[1599]712
[2]713                                switch ($this->page_info['actual_catalog']['class'])
714                                {
[1599]715/**rev 104**/
[752]716                                        case 'bo_shared_people_manager':
[1599]717/****/
[752]718                                        case 'bo_people_catalog':
[503]719                                                $field_name = 'id_contact';
[1599]720
[503]721                                                if ($letter !== 'number')
722                                                {
723                                                        $find_restric[0] = array(
724                                                                0 => array(
725                                                                        'field' => 'contact.names_ordered',
726                                                                        'type'  => 'iLIKE',
727                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
[1599]728/**rev 104**/
729        /*                                                      ),
730                                                                1 => array(
731                                                                        'field' => 'contact.id_owner',
732                                                                        'type'  => '=',
733                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
734        */
735                                                                )
[503]736                                                        );
[1496]737
738                                                        //Tratamento de permissão de escrita no compartilhamento de catalogo
739                                                        $so_contact = CreateObject('contactcenter.so_contact',  $GLOBALS['phpgw_info']['user']['account_id']);
740                                                        $relacionados = $so_contact->get_relations();
741
[1599]742                                                        $perms_relacao = array();
743
[1496]744                                                        foreach($relacionados as $uid_relacionado => $tipo_relacionamento) {
745                                                                $aclTemp = CreateObject("phpgwapi.acl",$uid_relacionado);
746                                                                $aclTemp->read();
747                                                                $perms_relacao[$uid_relacionado] = $aclTemp->get_specific_rights($GLOBALS['phpgw_info']['user']['account_id'],'contactcenter'); //Preciso verificar as permissões que o contato relacionado deu para o atual
748                                                        }
749
750                                                        $validos = array();
751                                                        $count = 0;
752                                                        foreach($perms_relacao as $uid_relacionado => $val){
753                                                                if ($perms_relacao[$uid_relacionado]&2)
754                                                                {
755                                                                        $validos[$uid_relacionado] = $perms_relacao[$uid_relacionado];
756                                                                        $count++;
757                                                                }
758                                                        }
759                                                        $prop_names = array();
760                                                        if($validos) {
761                                                                $filtro = "(|";
762                                                                foreach($validos as $i => $prop) {
763                                                                        $filtro .= "(uidNumber=".$i.")";
764                                                                }
765                                                                $filtro .= ")";
766
767                                                                if(!$this->bo->catalog->src_info) {
768                                                                        $ldaps = CreateObject('contactcenter.bo_ldap_manager');
769                                                                        $this->bo->catalog->src_info = $ldaps->srcs[1];
770                                                                }
771                                                                $s = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], false);
772                                                                $n=$this->bo->catalog->src_info['dn'];
773                                                                $apenasThese = array("cn","uidnumber","uid");
[1599]774                                                                $r = ldap_search($s,$n, $filtro,$apenasThese);
[1496]775                                                                $infos = ldap_get_entries($s, $r);
[1599]776                                                                ldap_close($s);
[1496]777                                                                for($z = 0; $z < $infos['count']; $z++) {
778                                                                        $prop_names[$infos[$z]['uidnumber'][0]] = array("cn" => $infos[$z]['cn'][0], "uid" => $infos[$z]['uid'][0]);
779                                                                }
780                                                        }
781                                                        //--------------------------------------------------------------------------------
782                                                        if($this->page_info['actual_catalog']['class'] == 'bo_people_catalog')
783                                                        {
[752]784                                                                $find_restric[0][1] = array(
785                                                                                'field' => 'contact.id_owner',
786                                                                                'type'  => '=',
787                                                                                'value' => $GLOBALS['phpgw_info']['user']['account_id']
788                                                                );
789                                                        }
[1599]790/****/
791
[503]792                                                }
793                                                else
794                                                {
795                                                        $find_restric[0] = array(
796                                                                0 => array(
797                                                                        'type'  => 'branch',
798                                                                        'value' => 'OR',
799                                                                        'sub_branch' => array(
800                                                                                0 => array(
801                                                                                        'field' => 'contact.names_ordered',
802                                                                                        'type'  => 'LIKE',
803                                                                                        'value' => '0%'
804                                                                                ),
805                                                                                1 => array(
806                                                                                        'field' => 'contact.names_ordered',
807                                                                                        'type'  => 'LIKE',
808                                                                                        'value' => '1%'
809                                                                                ),
810                                                                                2 => array(
811                                                                                        'field' => 'contact.names_ordered',
812                                                                                        'type'  => 'LIKE',
813                                                                                        'value' => '2%'
814                                                                                ),
815                                                                                3 => array(
816                                                                                        'field' => 'contact.names_ordered',
817                                                                                        'type'  => 'LIKE',
818                                                                                        'value' => '3%'
819                                                                                ),
820                                                                                4 => array(
821                                                                                        'field' => 'contact.names_ordered',
822                                                                                        'type'  => 'LIKE',
823                                                                                        'value' => '4%'
824                                                                                ),
825                                                                                5 => array(
826                                                                                        'field' => 'contact.names_ordered',
827                                                                                        'type'  => 'LIKE',
828                                                                                        'value' => '5%'
829                                                                                ),
830                                                                                6 => array(
831                                                                                        'field' => 'contact.names_ordered',
832                                                                                        'type'  => 'LIKE',
833                                                                                        'value' => '6%'
834                                                                                ),
835                                                                                7 => array(
836                                                                                        'field' => 'contact.names_ordered',
837                                                                                        'type'  => 'LIKE',
838                                                                                        'value' => '7%'
839                                                                                ),
840                                                                                8 => array(
841                                                                                        'field' => 'contact.names_ordered',
842                                                                                        'type'  => 'LIKE',
843                                                                                        'value' => '8%'
844                                                                                ),
845                                                                                9 => array(
846                                                                                        'field' => 'contact.names_ordered',
847                                                                                        'type'  => 'LIKE',
848                                                                                        'value' => '9%'
[752]849                                                                                ),
850                                                                        ),
[1599]851/**rev 104**/
852/*                                                              ),
853                                                                1 => array(
854                                                                        'field' => 'contact.id_owner',
855                                                                        'type'  => '=',
856                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
857                                                                ),
858*/
[503]859                                                                )
860                                                        );
861                                                }
[2]862
[752]863                                                if($this->page_info['actual_catalog']['class'] == 'bo_people_catalog'){                                                         
864                                                        $find_restric[0][1]     = array(
865                                                                'field' => 'contact.id_owner',
866                                                                'type'  => '=',
867                                                                'value' => $GLOBALS['phpgw_info']['user']['account_id']
[2]868                                                        );
869                                                }
[1599]870/*****/
871
[2]872                                                $find_field[0] = array('contact.id_contact','contact.names_ordered');
[1599]873
[2]874                                                $find_other[0] = array(
[1599]875/**rev 104**/
876                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
877                                                        //'limit'  => $this->page_info['n_cards'],
878/*****/
[2]879                                                        'order'  => 'contact.names_ordered'
880                                                );
[1599]881
[2]882                                                break;
[1599]883
[3420]884                                        case 'bo_catalog_group_catalog':
[2]885                                        case 'bo_global_ldap_catalog':
[1599]886
[2]887                                                $field_name = 'id_contact';
888
889                                                if ($letter !== 'number')
890                                                {
891                                                        $find_restric[0] = array(
892                                                                0 => array(
893                                                                        'field' => 'contact.names_ordered',
894                                                                        'type'  => 'iLIKE',
[3333]895                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
[284]896                                                                ),
897                                                                /*
898                                                                 * Restrict the returned contacts in a "first letter" search
[1599]899/**rev 104
[284]900                                                                 * to objectClass = phpgwAccount, must have attibute phpgwAccountStatus,
[880]901                                                                 * phpgwAccountVisible != -1
[284]902                                                                 */
903                                                                1 => array(
904                                                                        'field' => 'contact.object_class',
905                                                                        'type'  => '=',
906                                                                        'value' => 'phpgwAccount'
[1599]907/**rev 104**/
908                                                                //),/*
[284]909                                                                ),
[1599]910/****/
[284]911                                                                2 => array(
912                                                                        'field' => 'contact.account_status',
913                                                                        'type'  => 'iLIKE',
914                                                                        'value' => '%'
[1599]915/**rev 104**/
916                                                                //),*/
917                                                                //2 => array(
[284]918                                                                ),
919                                                                3 => array(
[1599]920/*****/
[284]921                                                                        'field' => 'contact.account_visible',
922                                                                        'type'  => '!=',
923                                                                        'value' => '-1'
[1599]924/**rev 104**/
925        /*                                                      ),
926                                                                3 => array(
927                                                                        'field' => 'contact.object_class',
928                                                                        'type'  => '=',
929                                                                        'value' => 'inetOrgPerson'
930                                                                ),
931        */
[880]932                                                                )
[1599]933/*****/
934
[2]935                                                        );
[284]936                                                        // If not external catalog get only phpgwAccountType = u ou l
937                                                        if (!$external)
938                                                        {
939                                                                $find_restric[0][5] =  array(
940                                                                                'type'  => 'branch',
941                                                                                'value' => 'OR',
942                                                                                'sub_branch' => array(
943                                                                                        0 => array(
944                                                                                        'field' => 'contact.account_type',
945                                                                                        'type'  => '=',
946                                                                                        'value' => 'u'
947                                                                                        ),
[285]948                                                                                        1 => array(
[284]949                                                                                        'field' => 'contact.account_type',
950                                                                                        'type'  => '=',
[418]951                                                                                        'value' => 'i'
[1599]952/**rev 104**/
[418]953                                                                                        ),
954                                                                                        2 => array(
955                                                                                        'field' => 'contact.account_type',
956                                                                                        'type'  => '=',
[1599]957/****/
[284]958                                                                                        'value' => 'l'
[1599]959/**rev 104**/
[880]960                                                                                        ),
961                                                                                        3 => array(
962                                                                                        'field' => 'contact.account_type',
963                                                                                        'type'  => '=',
964                                                                                        'value' => 'g'
[1599]965/***/
[3688]966                                                                                        ),
967                                                                                        4 => array(
968                                                                                        'field' => 'contact.account_type',
969                                                                                        'type'  => '=',
970                                                                                        'value' => 's'
[284]971                                                                                        )
[2]972                                                                                )
[3688]973                                                                        );
[284]974                                                        }
[2]975                                                }
976                                                else
977                                                {
978                                                        $find_restric[0] = array(
[284]979                                                                /*
980                                                                 * Restrict the returned contacts in a "first number" search
[1599]981/**rev 104
[284]982                                                                 * to objectClass = phpgwAccount, must have attibute phpgwAccountStatus,
[880]983                                                                 * phpgwAccountVisible != -1
[284]984                                                                 */
[2]985                                                                0 => array(
[284]986                                                                        'field' => 'contact.object_class',
987                                                                        'type'  => '=',
988                                                                        'value' => 'phpgwAccount'
[1599]989/**rev 104**/
990                                                                //),/*
[284]991                                                                ),
[1599]992/****/
[284]993                                                                1 => array(
994                                                                        'field' => 'contact.account_status',
995                                                                        'type'  => 'iLIKE',
996                                                                        'value' => '%'
[1599]997/**rev 104**/
998                                                                //),*/
999                                                                //1 => array(
[284]1000                                                                ),
1001                                                                2 => array(
[1599]1002/*****/
[284]1003                                                                        'field' => 'contact.account_visible',
1004                                                                        'type'  => '!=',
1005                                                                        'value' => '-1'
1006                                                                ),
[1599]1007/**rev 104**/
1008        /*                                                      2 => array(
1009                                                                        'field' => 'contact.object_class',
1010                                                                        'type'  => '=',
1011                                                                        'value' => 'inetOrgPerson'
1012                                                                ),
1013        */
1014/****/
[284]1015                                                                3 => array(
[2]1016                                                                        'type'  => 'branch',
1017                                                                        'value' => 'OR',
1018                                                                        'sub_branch' => array(
1019                                                                                0 => array(
1020                                                                                        'field' => 'contact.names_ordered',
1021                                                                                        'type'  => 'LIKE',
1022                                                                                        'value' => '0%'
1023                                                                                ),
1024                                                                                1 => array(
1025                                                                                        'field' => 'contact.names_ordered',
1026                                                                                        'type'  => 'LIKE',
1027                                                                                        'value' => '1%'
1028                                                                                ),
1029                                                                                2 => array(
1030                                                                                        'field' => 'contact.names_ordered',
1031                                                                                        'type'  => 'LIKE',
1032                                                                                        'value' => '2%'
1033                                                                                ),
1034                                                                                3 => array(
1035                                                                                        'field' => 'contact.names_ordered',
1036                                                                                        'type'  => 'LIKE',
1037                                                                                        'value' => '3%'
1038                                                                                ),
1039                                                                                4 => array(
1040                                                                                        'field' => 'contact.names_ordered',
1041                                                                                        'type'  => 'LIKE',
1042                                                                                        'value' => '4%'
1043                                                                                ),
1044                                                                                5 => array(
1045                                                                                        'field' => 'contact.names_ordered',
1046                                                                                        'type'  => 'LIKE',
1047                                                                                        'value' => '5%'
1048                                                                                ),
1049                                                                                6 => array(
1050                                                                                        'field' => 'contact.names_ordered',
1051                                                                                        'type'  => 'LIKE',
1052                                                                                        'value' => '6%'
1053                                                                                ),
1054                                                                                7 => array(
1055                                                                                        'field' => 'contact.names_ordered',
1056                                                                                        'type'  => 'LIKE',
1057                                                                                        'value' => '7%'
1058                                                                                ),
1059                                                                                8 => array(
1060                                                                                        'field' => 'contact.names_ordered',
1061                                                                                        'type'  => 'LIKE',
1062                                                                                        'value' => '8%'
1063                                                                                ),
1064                                                                                9 => array(
1065                                                                                        'field' => 'contact.names_ordered',
1066                                                                                        'type'  => 'LIKE',
1067                                                                                        'value' => '9%'
1068                                                                                ),
1069                                                                        ),
1070                                                                ),
1071                                                        );
[284]1072                                                        // If not external catalog get only phpgwAccountType = u ou l
1073                                                        if (!$external)
1074                                                        {
1075                                                                $find_restric[0][5] =  array(
1076                                                                        'type'  => 'branch',
1077                                                                        'value' => 'OR',
1078                                                                        'sub_branch' => array(
1079                                                                                0 => array(
1080                                                                                'field' => 'contact.account_type',
1081                                                                                'type'  => '=',
1082                                                                                'value' => 'u'
1083                                                                                ),
[418]1084                                                                                1 => array(
1085                                                                                'field' => 'contact.account_type',
1086                                                                                'type'  => '=',
[1599]1087/**rev 104**/
1088                                                                                //'value' => 'g'
1089                                                                                //);
1090                                                                                //1 => array(
[418]1091                                                                                'value' => 'i'
1092                                                                                ),
[880]1093                                                                                2 => array(
[1599]1094/****/
[284]1095                                                                                'field' => 'contact.account_type',
1096                                                                                'type'  => '=',
[880]1097                                                                                'value' => 'l'
[1599]1098/**rev 104**/
[880]1099                                                                                ),
1100                                                                                3 => array(
[284]1101                                                                                'field' => 'contact.account_type',
1102                                                                                'type'  => '=',
[880]1103                                                                                'value' => 'g'
[3688]1104                                                                                ),
1105/****/
1106                                                                                4 => array(
1107                                                                                'field' => 'contact.account_type',
1108                                                                                'type'  => '=',
1109                                                                                'value' => 's'
[284]1110                                                                                )
[2]1111                                                                        )
[284]1112                                                                );
1113                                                        }
[2]1114                                                }
[284]1115
1116                                                if (!$external)
1117                                                {
1118                                                        // Get only this attributes: dn, cn, phpgwAccountType, objectClass, phpgwAccountStatus, phpghAccountVisible
1119                                                        // for non-external catalogs, used to restrict the attributes used in filters
1120                                                        $find_field[0] = array('contact.id_contact','contact.names_ordered','contact.account_type',
[1599]1121                                                                'contact.object_class','contact.account_visible');
[284]1122                                                }
1123                                                else
1124                                                {
1125                                                        // Get only this attributes: dn, cn for external catalogs,
1126                                                        // used to restrict the attributes used in filters
1127                                                        $find_field[0] = array('contact.id_contact','contact.names_ordered');
1128                                                }
[1599]1129
[2]1130                                                $find_other[0] = array(
1131                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
1132                                                        //'limit'  => $this->page_info['n_cards'],
1133                                                        'order'  => 'contact.names_ordered'
1134                                                );
[1599]1135
[2]1136                                                break;
[1599]1137
[2]1138                                        case 'bo_company_manager':
1139                                                $field_name = 'id_company';
[1599]1140
[2]1141                                                $find_field[0] = array('company.id_company','company.company_name');
[1599]1142
[2]1143                                                $find_other[0] = array(
1144                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
1145                                                        //'limit'  => $this->page_info['n_cards'],
1146                                                        'order'  => 'company.company_name'
1147                                                );
[1599]1148
[2]1149                                                $find_restric[0] = array(
1150                                                        0 => array(
1151                                                                'field' => 'company.company_name',
1152                                                                'type'  => 'iLIKE',
1153                                                                'value' => $letter !== 'all' ? $letter.'%' : '%'
1154                                                        )
1155                                                );
[1599]1156
[2]1157                                                break;
1158
1159                                        case 'bo_group_manager':
[1599]1160/**rev 104**/
[752]1161                                        case 'bo_shared_group_manager':
[1599]1162/****/
1163
[2]1164                                                $field_name = 'id_group';
[1599]1165
[2]1166                                                if ($letter !== 'number')       {
[1599]1167
[2]1168                                                        $find_restric[0] = array(
1169                                                                0 => array(
1170                                                                        'field' => 'group.title',
1171                                                                        'type'  => 'iLIKE',
1172                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
1173                                                                )
1174                                                        );
1175                                                }
1176                                                 else {
[1599]1177
[2]1178                                                        $find_restric[0] = array(
1179                                                                0 => array(
1180                                                                                        'field' => 'group.title',
1181                                                                                        'type'  => 'LIKE',
[1599]1182                                                                                        'value' => '0%'
[2]1183                                                                )
[1599]1184                                                        );
[2]1185                                                }
[1599]1186/**rev 104**/
[752]1187                                                if($this->page_info['actual_catalog']['class'] == 'bo_group_manager'){
[1599]1188/****/
[752]1189                                                        array_push($find_restric[0],  array(
[2]1190                                                                                        'field' => 'group.owner',
1191                                                                                        'type'  => '=',
[1599]1192                                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
[752]1193                                                                        )
1194                                                        );
1195                                                }
[1599]1196
1197                                                $find_field[0] = array('group.id_group','group.title','group.short_name');
[2]1198                                                $find_other[0] = array(
1199                                                        'order'  => 'group.title'
[1599]1200                                                );
[2]1201                                                break;
[1599]1202
[3420]1203                                        /*case 'bo_catalog_group_catalog':
[2]1204                                                $this->page_info['actual_entries'] = false;
[1599]1205
[2]1206                                                $this->page_info['actual_letter'] = $letter;
1207                                                $this->page_info['actual_page'] = 0;
[1599]1208
[2]1209                                                $this->save_session();
1210                                                $final[0] = 0;
[285]1211                                                $final[1] = $this->typeContact;
[1599]1212                                                echo serialize($final);
[3420]1213                                                return;*/
[2]1214
1215                                }
[1496]1216
[2]1217                                $result = $this->bo->find($find_field[0],$find_restric[0],$find_other[0]);
1218                                $n_entries = count($result);
[1599]1219
[2]1220                                if ($n_entries)
1221                                {
1222                                        //echo 'N_entries: '.$n_entries.'<br>';
[3970]1223                                        $this->page_info['n_pages'] = ceil(($n_entries/($this->page_info['n_cards']) && !$dontPaginate ? $this->page_info['n_cards'] : 1));
[2]1224                                }
1225                                else
1226                                {
1227                                        $this->page_info['n_pages'] = 0;
1228                                }
1229
1230                                if (!$result)
1231                                {
1232                                        $this->page_info['actual_entries'] = false;
[1599]1233
[2]1234                                        $this->page_info['actual_letter'] = $letter;
1235                                        $this->page_info['actual_page'] = 0;
[1599]1236
1237                                        $this->save_session();
[2]1238                                        $final[0] = 0;
[285]1239                                        $final[1] = $this->typeContact;
[1599]1240                                        echo serialize($final);
[2]1241                                        return;
1242                                }
1243                                else
1244                                {
1245                                        unset($this->page_info['actual_entries']);
[3180]1246                                        if(is_array($result)) {
1247                                                foreach ($result as $id => $value)
1248                                                {
1249                                                        if($this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' && $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
1250                                                                $this->page_info['actual_entries'][] = $value[$field_name];
1251                                                        else
1252                                                                $this->page_info['actual_entries'][] = array(0=>$value[$field_name],1=>$value['perms'],2=>$value['owner']);
1253                                                }
[1599]1254                                        }
[2]1255                                }
1256                        }
1257                        else if ($letter === 'search')
1258                        {
[284]1259                                //if (!$ids and $this->page_info['actual_letter'] !== 'search')
[285]1260                                if (!$ids)
[2]1261                                {
[1599]1262/**rev 104**/
[315]1263                                        //error_log('!$ids e $this->page_info[\'actual_letter\'] != search');
[1599]1264/*****/
[2]1265                                        $this->page_info['actual_entries'] = false;
[1599]1266
[2]1267                                        $this->page_info['actual_letter'] = $letter;
1268                                        $this->page_info['actual_page'] = 0;
[1599]1269
[2]1270                                        $this->save_session();
1271                                        $final[0] = 0;
1272                                        $final[1] = $this -> typeContact;
[1599]1273                                        echo serialize($final);
[2]1274                                        return;
1275                                }
[284]1276                                else if ($ids['error'])
1277                                {
1278                                        $this->page_info['actual_entries'] = false;
1279                                        $this->page_info['actual_letter'] = $letter;
1280                                        $this->page_info['actual_page'] = 0;
1281
1282                                        $this->save_session();
1283                                        $final[0] = 0;
1284                                        $final[1] = $this -> typeContact;
1285                                        $final['error'] = $ids['error'];
1286                                        echo serialize($final);
1287                                        return;
1288                                }
[285]1289                                else if ($ids)
[1599]1290                                {
[2]1291                                        $this->page_info['actual_letter']  = $letter;
1292                                        $this->page_info['actual_entries'] = $ids;
[3970]1293                                        $this->page_info['n_pages'] = ceil((count($ids)/($this->page_info['n_cards']) && !$dontPaginate ? $this->page_info['n_cards'] : 1));
[2]1294                                }
1295                        }
1296                        else
1297                        {
1298                                unset($ids);
1299                        }
1300
1301                        if ($this->page_info['actual_entries'])
1302                        {
1303                                if ($page >= $this->page_info['n_pages'])
1304                                {
1305                                        $page = $this->page_info['n_pages'];
1306                                }
[1599]1307
[2]1308                                $final = array(
1309                                        0 => (int)$this->page_info['n_pages'],
1310                                        1 => (int)$page,
1311                                        2 => array(
1312                                                0 => 'cc_company',
1313                                                1 => 'cc_name',
1314                                                2 => 'cc_title',
1315                                                3 => 'cc_phone',
1316                                                4 => 'cc_mail',
1317                                                5 => 'cc_alias',
1318                                                6 => 'cc_id',
[1599]1319                                                7 => 'cc_forwarding_address',
1320                                                8 => 'cc_empNumber',
1321                                                9 => 'cc_department',
1322                                                10 => 'cc_mobile'
[2]1323                                        )
1324                                );
[1599]1325
[2]1326                                //echo 'Page: '.$page.'<br>';
1327                                $n_entries = count($this->page_info['actual_entries']);
[3970]1328                                $n_cards = $dontPaginate? $n_entries : $this->page_info['n_cards'];
1329                                $id_i = (($page-1)*$n_cards);
1330                                $id_f = $id_i + $n_cards;
[1599]1331
[2]1332                                //echo 'ID_I: '.$id_i.'<br>';
1333                                //echo 'ID_F: '.$id_f.'<br>';
[3334]1334                                ///---------------- Correção Temporária PHP5 -----------------------///
[2]1335                                $ids = array();
[1599]1336/**rev 104**/
[503]1337                                $perms = array();
[752]1338                                $owners = array();
[1599]1339/****/
1340                                $array_temp = array();
1341
[2]1342                                foreach($this->page_info['actual_entries'] as $key=>$tmp){
[1599]1343                                        $array_temp[] = $tmp;
[1496]1344                                }
[1599]1345
[2]1346                                for($i = $id_i; $i < $id_f and $i < $n_entries; $i++)
1347                                {
[1599]1348/**rev 104**/
[752]1349                                        if($this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' && $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
[1599]1350                                        {
1351/****/
[503]1352                                                $ids[] = $array_temp[$i];
[1599]1353/**rev 104**/
1354                                        }else {
[503]1355                                                $ids[] = $array_temp[$i][0];
1356                                                $perms[] = $array_temp[$i][1];
[752]1357                                                $owners[] = $array_temp[$i][2];
[1599]1358/****/
[503]1359                                        }
[2]1360                                }
[1599]1361
1362/**rev 104**/
[752]1363                                // Carrega o nome completo dos donos dos objetos (contatos e grupos);
1364                                $owner_names = array();
[1599]1365
[752]1366                                if($owners) {
1367                                        $filter = "(|";
1368                                        foreach($owners as $i => $owner) {
1369                                                $filter .= "(uidNumber=".$owner.")";
1370                                        }
1371                                        $filter .= ")";
[1496]1372
[752]1373                                        if(!$this->bo->catalog->src_info) {
1374                                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
1375                                                $this->bo->catalog->src_info = $ldap->srcs[1];
1376                                        }
[1599]1377                                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], false);
[752]1378                                        $dn=$this->bo->catalog->src_info['dn'];
1379                                        $justThese = array("cn","uidnumber","uid");
[1599]1380                                        $sr = ldap_search($ds,$dn, $filter,$justThese);
[752]1381                                        $info = ldap_get_entries($ds, $sr);
[1599]1382                                        ldap_close($ds);
[752]1383                                        for($z = 0; $z < $info['count']; $z++) {
1384                                                $owner_names[$info[$z]['uidnumber'][0]] = array("cn" => $info[$z]['cn'][0], "uid" => $info[$z]['uid'][0]);
[1599]1385                                        }
[752]1386                                }
[1599]1387
1388/*****/
1389
1390
[2]1391                                /// Original
1392                                //for($i = $id_i; $i < $id_f and $i < $n_entries; $i++)
1393                                //{
1394                                //      $ids[] = $this->page_info['actual_entries'][$i];
1395                                //}
1396                                ///
[1599]1397
[2]1398                                $fields = $this->bo->catalog->get_fields(false);
[1599]1399/**rev 104**/
1400                                //if( $this->typeContact == 'groups') {
[752]1401                                if( $this->typeContact == 'groups' || $this->typeContact == 'shared_groups') {
[1599]1402/****/
[2]1403                                        $final = array(
1404                                                0 => (int)$this->page_info['n_pages'],
1405                                                1 => (int)$page,
1406                                                2 => array(
1407                                                        0 => 'cc_title',
1408                                                        1 => 'cc_short_name',
1409                                                        2 => 'cc_id',
1410                                                        3 => 'cc_contacts'
[1599]1411                                                )
1412                                        );
1413
[2]1414                                        $groups =& $this->bo->catalog->get_multiple_entries($ids,$fields);
[1599]1415
[2]1416                                        $i = 0;
1417                                        // contatos do grupo
[1599]1418                                        $boGroups = CreateObject('contactcenter.bo_group');
[2]1419                                        $contacts = array();
[1599]1420                                        foreach($groups as $group)              {
1421
[2]1422                                                $final[3][$i][0] = $group['title'] ? $group['title'] : 'none';
[1599]1423                                                $final[3][$i][1] = $group['short_name'] ? $group['short_name'] : 'none';
[2]1424                                                $final[3][$i][2] = $group['id_group'] ? $group['id_group'] : 'none';
1425                                                $contacts = $boGroups -> get_contacts_by_group($group['id_group']);
1426                                                $final[3][$i][3] = $contacts;
[752]1427                                                $final[3][$i][4] = $perms[$i];
1428                                                if($this->typeContact == 'shared_groups'){
1429                                                        $final[3][$i][5] = lang('Shared').": ".$owner_names[$owners[$i]]['cn'];
1430                                                        $final[3][$i][6] = $owner_names[$owners[$i]]['uid'];
[1280]1431                                                        $final[3][$i][7] = $owners[$i]; //uidNumber
[752]1432                                                }                                               
[285]1433                                                $i++;                                                   
[2]1434                                        }
[1599]1435
[2]1436                                        $this->page_info['actual_letter'] = $letter;
[1599]1437                                        $this->page_info['actual_page'] = $page;
1438
1439
[2]1440                                        $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";
[1599]1441
1442                                        $final[5] = '<span class="link"  onclick="'.$lnk_compose;
1443/**rev 104**/
1444                                        //$final[10] = 'groups';
1445                                        $final[10] = $this->typeContact;
1446/******/
1447                                        $this->save_session();
[2]1448                                        echo serialize($final);
[1599]1449                                        return;
[2]1450                                }
[1599]1451/**rev 104**/
[503]1452                                $final[10] = $this -> typeContact;
[1599]1453/*****/
1454
[2]1455                                $fields['photo'] = true;
1456                                $fields['names_ordered'] = true;
1457                                $fields['alias'] = true;
1458                                $fields['account_type'] = true;
1459                                $fields['companies'] = 'default';
1460                                $fields['connections'] = 'default';
[1599]1461
1462/**rev 104**/
[3334]1463                                // ?aqui alterar a chamada desse método para receber o base dn?
[1599]1464                                //$contacts = &$this->bo->catalog->get_multiple_entries($ids,$fields);
1465
[285]1466                                // ?aqui alterar a chamada desse método para receber o base dn?
[1419]1467                                if($external)
[1599]1468                                {
[1419]1469                                        $contacts = &$this->bo->catalog->get_multiple_entries($ids,$fields,false,true);
[1599]1470                                } else{
[1419]1471                                        $contacts = &$this->bo->catalog->get_multiple_entries($ids,$fields);
[1599]1472                                }
1473
1474/*******/
1475
1476
[2]1477                                if (!is_array($contacts) or !count($contacts))
1478                                {
1479                                        $final[0] = 0;
1480                                        $final[1] = $this -> typeContact;
1481                                        echo serialize($final);
1482                                        return;
1483                                }
[1599]1484
[2]1485                                $i = 0;
[3795]1486                                if (!is_array($this->preferences))
1487                                {
1488                                        $this->preferences['personCardEmail'] = 1;
1489                                        $this->preferences['personCardPhone'] = 2;
1490                                }
[284]1491                                foreach($contacts as $index => $contact)
[2]1492                                {
[284]1493                                        /*
[3334]1494                                         * TODO: Os timeouts de conexão foram retirados, ver se será necessário retornar essa funcionalidade, e,
1495                                         * neste caso, terminar a implementação das mensagens de retorno.
[284]1496                                         */
1497                                        if ($index !== 'error'){
1498                                                $final[3][$i][0] = $contact['companies']['company1']['company_name']?$contact['companies']['company1']['company_name']:'none';
[1599]1499
1500/**rev 104**/
1501                                                //$final[3][$i][1] = $contact['names_ordered'] ? $contact['names_ordered'] : 'none';
1502
[1419]1503                                                if($this->page_info['actual_catalog']['class']!='bo_global_ldap_catalog'){
[3211]1504                                                        $final[3][$i][1] = $contact['names_ordered'] ? urldecode(is_array($contact['names_ordered']) ? $contact['names_ordered'][0] : $contact['names_ordered'])  : 'none';
[1419]1505                                                }
1506                                                else {
1507                                                        $contact['names_ordered'][0] = urldecode($contact['names_ordered'][0]);
1508                                                        $final[3][$i][1] = $contact['names_ordered'] ? $contact['names_ordered']  : 'none';
1509                                                }
[1599]1510
1511/********/
1512
[1411]1513                                                $final[3][$i][2] = $contact['companies']['company1']['title']? urldecode( $contact['companies']['company1']['title'] ) :'none';
[2]1514
[1599]1515                                                //Para exibir a matricula do empregado
1516                                                $final[3][$i][8] = $contact['companies']['company1']['empNumber']?$contact['companies']['company1']['empNumber']:'none';
1517                                                //Para exibir o setor/lotacao do empregado
1518                                                $final[3][$i][9] = $contact['companies']['company1']['department']?$contact['companies']['company1']['department']:'none';
1519                                                //Para exibir o celular empresarial do empregado
1520                                                $final[3][$i][10] = $contact['companies']['company1']['celPhone']?$contact['companies']['company1']['celPhone']:'none';
1521
1522                                                //Para exibir o celular empresarial do empregado
[3795]1523                                                if ($this->preferences['voip_enabled'] && !$external && $final[3][$i][10] != 'none')
[1599]1524                                                            $final[3][$i][10] = "<a title=\"".lang("Call Mobile")."\" href=\"#\" onclick=\"connectVoip('".$final[3][$i][10]."', 'mob')\">".$final[3][$i][10]."</a>";
1525
[284]1526                                                if ($contact['connections'])
1527                                                {
1528                                                        $default_email_found = false;
1529                                                        $default_phone_found = false;
1530                                                        foreach($contact['connections'] as $conn_info)
[2]1531                                                        {
[3795]1532                                                                if ($conn_info['id_type'] == $this->preferences['personCardEmail'] and !$default_email_found)
[2]1533                                                                {
[284]1534                                                                        if ($conn_info['connection_is_default'])
1535                                                                        {
1536                                                                                $default_email_found = true;
1537                                                                        }
1538                                                                        $final[3][$i][4] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
[2]1539                                                                }
[3795]1540                                                                else if ($conn_info['id_type'] == $this->preferences['personCardPhone'] and !$default_phone_found)
[2]1541                                                                {
[284]1542                                                                        if ($conn_info['connection_is_default'])
1543                                                                        {
1544                                                                                $default_phone_found = true;
1545                                                                        }
[1599]1546
1547/**rev 104**/
1548                                                                        //if ($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['voip_enabled'] && !$external){
1549                                                                        //      $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'ramal')\">".$conn_info['connection_value']."</a>";
1550
[3795]1551                                                                        if (!($this->preferences['telephone_number'] == $conn_info['connection_value']) && $this->preferences['contactcenter']['voip_enabled'] && $conn_info['connection_value'] && preg_match('/^\([0-9]{2}\)[0-9]{4}\-[0-9]{4}$/',$conn_info['connection_value'])==1 && !$external){
[284]1552                                                                                $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'com')\">".$conn_info['connection_value']."</a>";
[1599]1553                                                                       
1554/*****/
[285]1555                                                                        }
[284]1556                                                                        $final[3][$i][3] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1557                                                                }
[2]1558                                                        }
1559                                                }
[1599]1560
[284]1561                                                if (!$final[3][$i][3])
1562                                                {
1563                                                        $final[3][$i][3] = 'none';
1564                                                }
1565
1566                                                if (!$final[3][$i][4])
1567                                                {
1568                                                        $final[3][$i][4] = 'none';
1569                                                }
1570
[1411]1571                                                $final[3][$i][5] = $contact['alias']? urldecode( $contact['alias'] ):'none';
[284]1572                                                $final[3][$i][6] = $ids[$i];
1573
[1599]1574/**rev 104**/
1575        /*                              //      If contact is a public list, then load the forwarding addresses.
1576                                                if($contact['account_type'][0] == 'l')
1577                                                        $final[3][$i][7] = array();
1578        */
1579
1580                                                //If contact is a public list or a group, then load the forwarding addresses.
[880]1581                                                if($contact['account_type'][0] == 'l' || $contact['account_type'][0] == 'g')
1582                                                        $final[3][$i][7] = ($contact['account_type'][0] == 'l' ? 'list' : 'group');
[503]1583                                                       
[752]1584                                                if($this->page_info['actual_catalog']['class']=='bo_shared_people_manager') {
[1599]1585                                                        $final[3][$i][11] = $perms[$i];
1586                                                        $final[3][$i][12] = lang('Shared').": ".$owner_names[$owners[$i]]['cn'];
[503]1587                                                }
[1599]1588/******/
[284]1589
1590                                                $final[4][$i] = $contact['photo'] ? 1  : 0;
1591                                                $i++;
[2]1592                                        }
[284]1593                                        else
[2]1594                                        {
[284]1595                                                // coloca mensagem de erro no vetor que retorna para o browser
[2]1596                                        }
[284]1597                                }
1598                                $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";
1599                                $final[5] = '<span class="link" onclick="'.$lnk_compose;
[1496]1600                                $final[6] = $prop_names;
1601                                $final[7] = $validos;
1602                                $final[8] = $this->page_info['actual_catalog']['class'];
1603                                $final[9] = $count;
[3970]1604                                $final[11] = $this->bo->catalog_level;
[2]1605
[1599]1606
[2]1607                                $this->page_info['actual_letter'] = $letter;
1608                                $this->page_info['actual_page'] = $page;
[1599]1609
1610                                $this->save_session();
[2]1611                                echo serialize($final);
1612                                return;
1613                        }
[1599]1614
[2]1615                        $this->page_info['actual_letter'] = $letter;
1616                        $this->page_info['actual_page'] = $page;
[1599]1617
[2]1618                        $this->save_session();
[1599]1619
[2]1620                        $final[0] = 0;
1621                        $final[1] = $this -> typeContact;
1622                        echo serialize($final);
1623                }
[3335]1624               
1625               
1626                function get_list_owners_perms_add(){
1627                        $acl = CreateObject('phpgwapi.acl');
1628                        $find_result = $acl->get_rights_and_owners($GLOBALS['phpgw_info']['user']['account_id'],'contactcenter');
1629                        if($find_result){
1630                                $owner_names = array();
1631                                $filter = "(|";
1632                                foreach($find_result as $owner) {
1633                                        if(($owner['acl_rights'] & PHPGW_ACL_ADD) == PHPGW_ACL_ADD){
1634                                                $filter .= "(uidNumber=".$owner['acl_account'].")";
1635                                        }
1636                                }
1637                                if(!$this->bo->catalog->src_info) {
1638                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
1639                                        $this->bo->catalog->src_info = $ldap->srcs[1];
1640                                }
1641                                $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], false);
1642                                $filter .= ")";
1643                                $dn=$this->bo->catalog->src_info['dn'];
1644                                $justThese = array("cn","uidnumber","uid");
1645                                $sr = ldap_search($ds,$dn, $filter,$justThese);
1646                                $info = ldap_get_entries($ds, $sr);
1647                                for($z = 0; $z < $info['count']; $z++) {
1648                                        $owner_names[$info[$z]['uidnumber'][0]] = array("cn" => $info[$z]['cn'][0], "uid" => $info[$z]['uid'][0]);
1649                                }
1650                                ldap_close($ds);
1651                        }
1652                        echo serialize ($owner_names); 
1653                }
[1599]1654
[285]1655                function get_visible_all_ldap()
1656                {
1657                        $bo = CreateObject('contactcenter.bo_ldap_manager');
1658                        $ldap_query = $bo->srcs;
[1599]1659                        return $ldap_query[1]['visible'];
[285]1660                }
[284]1661
[1599]1662
[2]1663                /*!
[1599]1664
[2]1665                        @function get_group_data
1666                        @abstract Returns all the information of a given Group
1667                        @author Nilton Emilio Buhrer Neto
[1599]1668
[2]1669                        @param (integer) $id The id to get information
[1599]1670
1671                */
[1280]1672                function get_group_data($id,$shared_from=null)
[2]1673                {
1674                        $this->bo->catalog = CreateObject('contactcenter.bo_group_manager');
1675                        $fields = $this->bo->catalog->get_fields(true);
1676                        $data = $this->bo->catalog->get_single_entry($id,$fields);
[285]1677                       
1678                        if($id) {                       
[2]1679                                // get All Contacts by group.
[285]1680                                $data['contact_in_list'] = $this->bo->catalog->get_contacts_by_group($id);                                                             
[2]1681                        }
[285]1682                       
[2]1683                        $boGroup = CreateObject('contactcenter.bo_group');
[1599]1684
[1280]1685                        $all_contacts = $boGroup->get_all_contacts('only_email',$shared_from);
[285]1686                       
1687                        $contact_options = "";
1688                        if(count($all_contacts)) {                                     
1689                                foreach($all_contacts as $idx => $contact) {                           
1690                                        $contact_options .= "<OPTION value='".$contact['id_connection']."'>".$contact['names_ordered']." (".$contact['connection_value'].")</OPTION>";
1691                                }
1692                        }
[1599]1693                        $data['contact_list'] = $contact_options;
1694                        $data['result'] = 'ok';                                                         
[285]1695                        echo serialize($data);                 
1696                }               
1697               
[2]1698                /*!
[1599]1699
[2]1700                        @function get_full_data
1701                        @abstract Returns all the information of a given Entry
1702                        @author Raphael Derosso Pereira
[1599]1703
[2]1704                        @param (integer) $id The id to get information
[1599]1705
[2]1706                */
[1599]1707/**rev 104**/
1708                //function get_full_data($id)
[503]1709                function get_full_data($id,$catalog='bo_people_catalog')
[2]1710                {
1711                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]1712/**rev 104**/
1713                        //$this->bo->catalog = CreateObject('contactcenter.bo_people_catalog');
1714                        $this->bo->catalog = CreateObject('contactcenter.'.$catalog);
1715/****/
[2]1716                        $fields = $this->bo->catalog->get_fields(true);
1717                        $fields['photo'] = false;
1718                        $entry = $this->bo->catalog->get_single_entry($id,$fields);
1719
1720                        if (is_bool($entry['given_names']))
1721                        {
1722                                $data['result'] = 'false';
1723                                echo serialize($data);
1724                                return;
1725                        }
1726
1727                        $date = explode('-', $entry['birthdate']);
1728                        $j = 0;
1729                        for ($i = 0; $i < 5; $i+=2)
1730                        {
1731                                switch($dateformat{$i})
1732                                {
1733                                        case 'Y':
1734                                                $birthdate[$j] = $date[0];
1735                                                break;
1736
1737                                        case 'm':
1738                                        case 'M':
1739                                                $birthdate[$j] = $date[1];
1740                                                break;
1741
1742                                        case 'd':
1743                                                $birthdate[$j] = $date[2];
1744                                }
1745                                $j++;
1746                        }
1747                        $datecount = 0;
[1599]1748
[2]1749                        $data['result'] = 'ok';
1750                        $data['cc_full_add_contact_id'] = $id;
1751
1752                        /* Personal Data */
1753                        $data['personal']['cc_pd_photo'] = '../index.php?menuaction=contactcenter.ui_data.data_manager&method=get_photo&id='.$id;
1754                        $data['personal']['cc_pd_alias'] = $entry['alias'];
1755                        $data['personal']['cc_pd_given_names'] = $entry['given_names'];
1756                        $data['personal']['cc_pd_family_names'] = $entry['family_names'];
1757                        $data['personal']['cc_pd_full_name'] = $entry['names_ordered'];
1758                        $data['personal']['cc_pd_suffix'] = $entry['id_suffix'];
1759                        $data['personal']['cc_pd_birthdate_0'] = $birthdate[0];
1760                        $data['personal']['cc_pd_birthdate_1'] = $birthdate[1];
1761                        $data['personal']['cc_pd_birthdate_2'] = $birthdate[2];
1762                        //$data['personal']['cc_pd_sex'] = $entry['sex'] === 'M' ? 1 : ($entry['sex'] === 'F' ? 2 : 0);
1763                        $data['personal']['cc_pd_prefix'] = $entry['id_prefix'];
1764                        $data['personal']['cc_pd_gpg_finger_print'] = $entry['pgp_key'];
1765                        $data['personal']['cc_pd_notes'] = $entry['notes'];
1766
1767                        /* Addresses */
1768                        if (is_array($entry['addresses']))
1769                        {
1770                                $data['addresses'] = $entry['addresses'];
1771                        }
1772
1773                        /* Connections */
1774                        if (is_array($entry['connections']))
1775                        {
1776                                $data['connections'] = array();
1777                                foreach ($entry['connections'] as $connection)
1778                                {
1779                                        $type = $connection['id_type'];
1780                                        $i = count($data['connections'][$type]);
1781                                        $data['connections'][$type][$i]['id'] = $connection['id_connection'];
1782                                        $data['connections'][$type][$i]['name'] = $connection['connection_name'];
1783                                        $data['connections'][$type][$i]['value'] = $connection['connection_value'];
1784                                        $data['connections'][$type][$i]['is_default'] = $connection['connection_is_default'];
1785                                }
1786                        }
[1599]1787//                      print_r($data);
1788//OBSERVAR cc_department
[1517]1789                        /*Corporative*/
[1656]1790                        if($GLOBALS['phpgw_info']['server']['personal_contact_type']=='True'){
1791                                $data['personal']['cc_job_title'] = $entry['job_title'];
1792                                $data['personal']['cc_department'] = $entry['department'];
1793                                $data['personal']['cc_name_corporate'] = $entry['corporate_name'];
1794                                $data['personal']['cc_web_page'] = $entry['web_page'];
1795                        }
1796                       
[1599]1797
1798
[2]1799                        /* Relations */
[1599]1800
[2]1801                        echo serialize($data);
1802                }
1803
1804                /*!
1805
1806                        @function get_contact_full_add_const
1807                        @abstract Returns all the constant fields in Contact Full Add Window to the JS
1808                        @author Raphael Derosso Pereira
1809                */
1810                function get_contact_full_add_const()
1811                {
1812                        $data = array();
1813                        $boPeopleCatalog = CreateObject('contactcenter.bo_people_catalog');
1814                        $predata[] = $boPeopleCatalog -> get_all_prefixes();
1815                        $predata[] = $boPeopleCatalog -> get_all_suffixes();
1816                        $predata[] = $boPeopleCatalog -> get_all_addresses_types();
1817                        $predata[] = $boPeopleCatalog -> get_all_countries();
1818                        $predata[] = $boPeopleCatalog -> get_all_connections_types();
1819                        //$predata[] = $this->bo->catalog->get_all_relations_types();
1820
1821                        $i = 0;
1822                        foreach($predata as $data_)
1823                        {
1824                                if ($data_)
1825                                {
1826                                        $data[$i] = $data_;
1827                                }
1828
1829                                $i++;
1830                        }
1831
1832                        if (count($data))
1833                        {
1834                                echo serialize($data);
1835                                return;
1836                        }
[1599]1837
[2]1838                        echo 0;
1839                }
[1599]1840
[2]1841                /*!
[1599]1842
[2]1843                        @function quick_add
1844                        @abstract Adds a new Contact using the Quick Add interface
1845                        @author Raphael Derosso Pereira
[1599]1846
[2]1847                        @param string $sdata Serialized data
1848                */
[3970]1849                function quick_add($sdata, $echo=true)
[2]1850                {
[1599]1851
[2]1852                        $sdata = str_replace('\\"', '"', $sdata);
1853                        $new_array = unserialize($sdata);
1854                        $tdata = array();
[1599]1855
[2]1856                        foreach($new_array as $tmp)
1857                                $tdata[] = $tmp;
[1599]1858
[2]1859                        if (!$tdata)
1860                        {
[3970]1861                            if ($echo)
1862                            {
[2]1863                                echo serialize(array(
1864                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1865                                        'status' => 'abort'
1866                                ));
[3970]1867                           
[2]1868                                return;
[3970]1869                            }
1870                            else
1871                                {
1872                                    return serialize(array(
1873                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1874                                        'status' => 'abort'
1875                                    ));
1876                                }
[2]1877                        }
[1599]1878
[3334]1879                        // verifica se email já existe!
[2]1880                        $boGroup = CreateObject('contactcenter.bo_group');
1881                        $contact = $boGroup->verify_contact($tdata[4]);
[1599]1882
[2]1883                        if($contact)
[1599]1884                        {
[2]1885                                $str_contact = "\r\n - ".implode("\r\n - ",$contact);
[1599]1886
[3970]1887                            if ($echo)
1888                            {
[2]1889                                echo serialize(array(
1890                                        'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1891                                        'status' => 'alreadyExists'
1892                                ));
[1599]1893
1894                                return;
[3970]1895                            }
1896                            else
1897                                {
1898                                    return serialize(array(
1899                                        'msg'       => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1900                                        'status'    => 'alreadyExists',
1901                                        'id_connection'  => $contact[1]
1902                                    ));
1903                                }
[2]1904                        }
1905
[3239]1906                        $data['alias'] = addslashes($tdata[0]);
1907                        $data['given_names'] = addslashes($tdata[1]);
1908                        $data['family_names'] = addslashes($tdata[2]);
[2]1909                        $data['connections']['default_phone']['connection_name'] = lang('Main');
1910                        $data['connections']['default_phone']['connection_value'] = $tdata[3];
1911                        $data['connections']['default_email']['connection_name'] = lang('Main');
1912                        $data['connections']['default_email']['connection_value'] = $tdata[4];
[3660]1913                        $data['is_quick_add'] = true;
[2]1914                        $boPeople = CreateObject('contactcenter.bo_people_catalog');
1915
[3970]1916                        $result = $boPeople->quick_add($data);
1917                        if ($result)
[1599]1918                        {
[3970]1919                            $this->page_info['changed'] = true;
[1599]1920
[3970]1921                            if ($echo)
1922                            {
1923                                echo serialize(array(
1924                                    'msg'    => lang('Entry added with success!'),
1925                                    'status' => 'ok'
1926                                ));
1927                            }
1928                            else
1929                                {
1930                                    return serialize(array(
1931                                        'msg'    => lang('Entry added with success!'),
1932                                        'status' => 'ok',
1933                                        'conn'   => $boPeople->get_connections($result)
1934                                    ));
1935                                }
[2]1936                        }
1937                        else
1938                        {
[3970]1939                            if ($echo)
1940                            {
1941                                echo serialize(array(
1942                                    'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1943                                    'status' => 'error'
1944                                ));
1945                            }
1946                            else
1947                                {
1948                                    echo serialize(array(
1949                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1950                                        'status' => 'error'
1951                                    ));
1952                                }
[2]1953                        }
1954
[1599]1955                        $this->save_session();
1956
[2]1957                }
1958
1959                /*!
[1599]1960
[2]1961                        @function add_group
1962                        @abstract Adds a new Group using the Add Group interface
1963                        @author Nilton Emilio Buhrer Neto
[1599]1964
[2]1965                        @param string $sdata Serialized data
1966                */
1967                function add_group($sdata)
1968                {
1969                        $sdata = str_replace('\\"', '"', $sdata);
1970                        $tdata = unserialize($sdata);
1971                        $new_tdata = array();
[1599]1972
[2]1973                        if (!$tdata)
1974                        {
1975                                echo serialize(array(
1976                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1977                                        'status' => 'abort'
1978                                ));
[1599]1979
[2]1980                                return;
1981                        }
[1599]1982
[2]1983                        foreach($tdata as $tmp)
1984                                $new_tdata[] = $tmp;
[1599]1985
1986                        $data['title'] = $new_tdata[0];
[2]1987                        $data['contact_in_list'] = $new_tdata[1];
1988                        $data['id_group'] = $new_tdata[2];
[3970]1989                        $acumulatedErrors = '';
[1599]1990
[3970]1991                        $actualCatalog = $this->get_actual_catalog();
1992                        for ($i = 0; $i < count($data['contact_in_list']); $i++)
1993                        {
1994                            if (preg_match('/ldap:.*:.*/', $data['contact_in_list'][$i])) // from ldap
1995                            {
1996                                list(, $level, $dn) = explode(':', $data['contact_in_list'][$i]);
1997
1998                                // pesquisa os dados, insere no catálogo e modifica
1999                                // a entrada em $data['contact_in_list'][$i]
2000                                $set_catalog = $this->set_catalog($level, false);
2001                                $contact_data = unserialize($this->get_catalog_add_contact($dn, false));
2002                                $tmp_contact[] = $contact_data[0][0];
2003                                $tmp_contact[] = $contact_data[1][0];
2004                                $tmp_contact[] = $contact_data[2][0];
2005                                $tmp_contact[] = $contact_data[3][0];
2006                                $tmp_contact[] = $contact_data[4][0];
2007
2008                                // Determinar o id_connection
2009                                $id_contact = unserialize($this->quick_add(serialize($tmp_contact), false));
2010
2011                                switch ($id_contact['status'])
2012                                {
2013                                    case 'ok' :
2014                                        foreach ($id_contact['conn'] as $connection)
2015                                        {
2016                                            if ($connection['id_type'] == 1)
2017                                            {
2018                                                $data['contact_in_list'][$i] = $connection['id_connection'];
2019                                            }
2020                                        }
2021                                        break;
2022
2023                                    case 'alreadyExists': // if e-mail exists get their id_connection from people_catalog
2024                                        $data['contact_in_list'][$i] = $id_contact['id_connection'];
2025
2026                                    default:
2027                                        $acumulatedErrors += $id_contact['msg']."\n";
2028                                }
2029                                unset($tmp_contact);
2030
2031                            }
2032                        }
2033                        $set_catalog = $this->set_catalog($actualCatalog['data'], false); // retorna ao catálogo original.
[2]2034                        $boGroup = CreateObject('contactcenter.bo_group_manager');
2035                        $id = $boGroup -> add_group($data);
[1599]2036
[2]2037                        if ($id)
2038                        {
2039                                $this->page_info['changed'] = true;
[1599]2040
[2]2041                                echo serialize(array(
2042                                        'msg'    => lang('Entry added with success!'),
2043                                        'status' => 'ok'
2044                                ));
2045                        }
2046                        else
2047                        {
2048                                echo serialize(array(
[3970]2049                                        'msg'    => lang('Problems on adding your Contact. No Contact added!').
2050                                            "\n".$acumulatedErrors,
[2]2051                                        'status' => 'error'
2052                                ));
2053                        }
2054
2055                        $this->save_session();
2056                }
2057
2058                /*!
[1599]2059
[2]2060                        @function remove_group
2061                        @abstract Removes a group if the user has the right to do it
[1599]2062                        @author Nilton Emilio Buhrer Neto
[2]2063                        @param (integer) $id The id to be removed
[1599]2064
[2]2065                */
2066                function remove_group($id)
[1599]2067                {
2068                                $soGroup = CreateObject('contactcenter.so_group');
[2]2069                                $data = array ('id_group' => $id);
2070                                if($soGroup -> delete($data)) {
2071                                        echo serialize(array(
2072                                                'msg'    => lang('Removed Entry ID '.$id.'!'),
2073                                                'status' => 'ok'
[1599]2074                                        ));
[2]2075                                }
2076                                else {
2077                                        echo serialize(array(
2078                                                'msg'    => lang('Problems on adding your Contact. No Contact added!'),
2079                                                'status' => 'error'
2080                                        ));
2081                                }
2082
[1599]2083                        $this->save_session();
[2]2084                }
2085
2086
2087                function remove_all_entries (){
[1599]2088
[2]2089                        $error = false;
2090                        $this->all_entries = $this->bo->catalog->get_all_entries_ids();
2091
2092                        foreach($this->all_entries as $index => $id) {
2093                                $result = $this->bo->catalog->remove_single_entry($id);
2094                                if(!$result) {
2095                                        $error = true;
[1599]2096                                        break;
[2]2097                                }
2098                        }
2099
2100                        if(!$error) {
2101                                echo serialize(array(
2102                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
2103                                        'status' => 'ok'
2104                                ));
[1599]2105                        }
[2]2106                        else {
2107                                echo serialize(array(
2108                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
2109                                        'status' => 'fail'
2110                                ));
2111                        }
2112
2113                        $this->save_session();
2114                }
2115
2116                /*!
[1599]2117
[2]2118                        @function remove_entry
2119                        @abstract Removes an entry if the user has the right to do it
2120                        @author Raphael Derosso Pereira
[1599]2121
[2]2122                        @param (integer) $id The id to be removed
[1599]2123
[2]2124                */
2125                function remove_entry ($id)
2126                {
2127                        if (!is_int($id))
2128                        {
2129                                echo lang('Couldn\'t remove entry! Problem passing data to the server. Please inform admin!');
2130                                return;
2131                        }
[1599]2132
[2]2133                        $this->page_info['changed'] = true;
2134                        $result = $this->bo->catalog->remove_single_entry($id);
[1599]2135
[2]2136                        if ($result)
2137                        {
2138                                if ($pos = array_search($id, $this->page_info['actual_entries']))
2139                                {
2140                                        unset($this->page_info['actual_entries'][$pos]);
2141                                }
[1599]2142
[2]2143                                $temp = false;
2144                                reset($this->page_info['actual_entries']);
2145                                foreach($this->page_info['actual_entries'] as $t)
2146                                {
2147                                        $temp[] = $t;
2148                                }
[1599]2149
[2]2150                                $this->page_info['actual_entries'] = $temp;
2151
2152                                echo serialize(array(
2153                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
2154                                        'status' => 'ok'
2155                                ));
2156                        }
2157                        else
2158                        {
2159                                echo serialize(array(
2160                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
2161                                        'status' => 'fail'
2162                                ));
2163                        }
[1599]2164
[2]2165                        $this->save_session();
2166                }
2167
[1599]2168
[2]2169                /*!
[1599]2170
[2]2171                        @function post_full_add
2172                        @abstract Saves all the information altered/entered in the Full Add
2173                                window
2174                        @author Raphael Derosso Pereira
2175
2176                */
2177                function post_full_add()
2178                {
[285]2179                        $data =  $_POST['data'];
[1599]2180                        // Exceptions!!! utf8 special chars.
[285]2181                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
2182                        $data = unserialize(str_replace('\\"', '"', $data));
[2]2183                        $this -> bo -> catalog = CreateObject('contactcenter.bo_people_catalog');
2184
2185                        if (!is_array($data))
2186                        {
2187                                echo serialize(array(
2188                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
2189                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
2190                                                          'Sorry for the inconvenient!<br><br>'.
2191                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
2192                                        'status' => 'fatal'
2193                                ));
2194                                return;
2195                        }
2196//                      print_r($data);
2197//                      echo '<br><br>';
2198
2199                        $replacer = $data['commercialAnd'];
2200                        unset($data['commercialAnd']);
2201                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
2202                        {
2203                                echo serialize(array(
2204                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
2205                                        'status' => 'fatal'
2206                                ));
[1599]2207
[2]2208                                return;
2209                        }
2210
2211                        if ($data['id_contact'])
2212                        {
2213                                $id = $data['id_contact'];
2214                                $id_photo = $id;
2215                                unset($data['id_contact']);
2216                        }
2217                        else
2218                        {
2219                                $id_photo = '_new_';
2220                        }
[1599]2221
2222                        /*
2223                         * Process Photo, if available
[2]2224                         */
2225                        $sleep_count = 0;
2226                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2227                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2228                        {
2229                                sleep(1);
2230                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2231                                $sleep_count++;
2232
2233                                if ($sleep_count > 35)
2234                                {
2235                                        // TODO
2236                                        return;
2237                                }
2238                        }
2239                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
[1599]2240
[2]2241                        if (isset($this->page_info['photos'][$id_photo]))
2242                        {
2243                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2244                                {
2245                                        echo serialize(array(
2246                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2247                                                'status' => $this->page_info['photos'][$id_photo]['status']
2248                                        ));
2249
2250                                        return;
2251                                }
2252
2253                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2254                                unset($this->page_info['photos'][$id_photo]);
2255                                $this->save_session();
2256                        }
[1599]2257
[2]2258                        /*
2259                         * Arrange Date so it gets inserted correctly
2260                         */
[1599]2261
[2]2262                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]2263
[2]2264                        $j = 0;
2265                        for ($i = 0; $i < 5; $i+=2)
2266                        {
2267                                switch($dateformat{$i})
2268                                {
2269                                        case 'Y':
2270                                                $date[$j]['size'] = 4;
2271                                                $date[$j]['digit'] = 'Y';
2272                                                break;
2273
2274                                        case 'm':
2275                                        case 'M':
2276                                                $date[$j]['size'] = 2;
2277                                                $date[$j]['digit'] = 'M';
2278                                                break;
2279
2280                                        case 'd':
2281                                                $date[$j]['size'] = 2;
2282                                                $date[$j]['digit'] = 'D';
2283                                }
2284                                $j++;
2285                        }
2286                        $datecount = 0;
2287
2288                        /* Verify Data and performs insertion/update */
[3018]2289                        foreach($data as $field => $value)
[2]2290                        {
[1599]2291
[2]2292                                switch($field)
2293                                {
[3018]2294                                        case 'names_ordered':
[3247]2295                                                $data[$field] = addslashes(rawurldecode($value));
[1517]2296                                        case 'corporate_name':
2297                                        case 'job_title':
2298                                        case 'department':
2299                                        case 'web_page':
[2]2300                                        case 'alias':
2301                                        case 'given_names':
2302                                        case 'family_names':
2303                                        case 'pgp_key':
2304                                        case 'notes':
[3247]2305                                                $data[$field] = addslashes(rawurldecode($data[$field]));
[2]2306                                                break;
[1599]2307
[2]2308                                        case 'id_status':
2309                                        case 'id_prefix':
2310                                        case 'id_suffix':
2311                                                if ($data[$field] == 0)
2312                                                {
2313                                                        unset($data[$field]);
2314                                                }
2315                                                break;
[1599]2316
[2]2317                                        case 'birthdate_0':
2318                                        case 'birthdate_1':
2319                                        case 'birthdate_2':
[3310]2320                                        case 'birthdate':
2321                                       
2322                                                if($field == 'birthdate'){
2323                                                        $array_birth = explode("/",$data[$field]);                                                     
2324                                                        $date['value'][2] = $array_birth[2];
2325                                                        $date['value'][1] = $array_birth[1];
2326                                                        $date['value'][0] = $array_birth[0];                                           
2327                                                }else{                                 
2328                                                        switch($date[$datecount]['digit'])
2329                                                        {
2330                                                                case 'Y':
2331                                                                        $date['value'][2] = (int) $data[$field];
2332                                                                        break;
2333       
2334                                                                case 'M':
2335                                                                        $date['value'][0] = (int) $data[$field];
2336                                                                        break;
2337       
2338                                                                case 'D':
2339                                                                        $date['value'][1] = (int) $data[$field];
2340                                                                        break;
2341                                                        }
2342                                                        unset($data[$field]);
[2]2343                                                }
[3310]2344                                               
[2]2345                                                $datecount++;
2346
2347                                                if ($datecount != 3)
2348                                                {
2349                                                        break;
2350                                                }
[1599]2351
[3310]2352                                                if($date['value'][0] =='' && $date['value'][1] =='' && $date['value'][2] ==''){
2353                                                        $data['birthdate'] = null;
2354                                                        break;
2355                                                }
[2]2356                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2357                                                {
2358                                                        echo serialize(array(
2359                                                                'msg' => lang('Invalid Date'),
2360                                                                'status' => 'invalid_data'
2361                                                        ));
2362                                                        return;
2363                                                }
[3310]2364                                                if( $date['value'][2] != "" && $date['value'][0] != "" && $date['value'][1] != ""){
2365                                                        $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2366                                                }
[2]2367                                                break;
2368
2369                                        case 'sex':
2370                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2371                                                {
2372                                                        echo serialize(array(
2373                                                                'msg' => lang('Invalid Sex'),
2374                                                                'status' => 'invalid_data'
2375                                                        ));
2376                                                        return;
2377                                                }
2378                                                break;
2379
2380
2381                                        case 'addresses':
2382                                                /* Insert new cities/states */
2383                                                if (isset($value['new_states']))
2384                                                {
2385                                                        foreach($value['new_states'] as $type => $state_info)
2386                                                        {
2387                                                                $index = 'address'.$type;
[1599]2388
[2]2389                                                                $id_state = $this->bo->catalog->add_state($state_info);
2390                                                                $data['addresses'][$index]['id_state'] = $id_state;
2391
2392                                                                if ($value['new_cities'][$type])
2393                                                                {
[3018]2394                                                                        $data[$field]['new_cities'][$type]['id_state'] = $id_state;
[2]2395                                                                }
2396                                                        }
2397
2398                                                        unset($data['addresses']['new_states']);
2399                                                }
2400
2401                                                if (isset($value['new_cities']))
2402                                                {
2403                                                        foreach($value['new_cities'] as $type => $city_info)
2404                                                        {
2405                                                                $index = 'address'.$type;
[1599]2406
[2]2407                                                                $id_city = $this->bo->catalog->add_city($city_info);
2408                                                                $data['addresses'][$index]['id_city'] = $id_city;
2409                                                        }
2410
2411                                                        unset($data['addresses']['new_cities']);
2412                                                }
2413
2414                                        break;
2415
[3198]2416                                        case 'birthdate':
[2]2417                                        case 'connections':
[1687]2418                                        case 'photo':
[2]2419                                                /* Does nothing... */
2420                                                break;
2421
2422                                        default:
2423                                                echo serialize(array(
2424                                                        'msg' => lang('Invalid field: ').$field,
2425                                                        'status' => 'invalid_data'
2426                                                ));
2427                                                return;
2428                                }
2429                        }
2430
2431                        if (!is_null($id) and $id !== '')
2432                        {
[3018]2433                                $id = $this->bo->catalog->update_single_info($id, $data);
[2]2434                                $result = array(
2435                                        'msg' => lang('Updated Successfully!'),
2436                                        'status' => 'ok'
2437                                );
2438                        }
2439                        else
2440                        {
[3018]2441                                $id = $this->bo->catalog->add_single_entry($data);
[2]2442                                $result = array(
2443                                        'msg' => lang('Entry Added Successfully!'),
2444                                        'status' => 'ok'
2445                                );
2446                        }
[1599]2447
[2]2448                        if (!($id))
2449                        {
2450                                $result = array(
2451                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2452                                                   'Report the problem to the Administrator.'),
2453                                        'status' => 'fail'
2454                                );
2455                        }
2456
2457                        echo serialize($result);
2458                }
2459
[1496]2460
2461                function post_full_add_shared()
2462                {
2463                        $data =  $_POST['data'];
[1599]2464                        // Exceptions!!! utf8 special chars.
[1496]2465                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
2466                        $data = unserialize(str_replace('\\"', '"', $data));
2467                        $this -> bo -> catalog = CreateObject('contactcenter.bo_shared_people_manager');
2468
2469                        if (!is_array($data))
2470                        {
2471                                echo serialize(array(
2472                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
2473                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
2474                                                          'Sorry for the inconvenient!<br><br>'.
2475                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
2476                                        'status' => 'fatal'
2477                                ));
2478                                return;
2479                        }
2480//                      print_r($data);
2481//                      echo '<br><br>';
2482
2483                        $replacer = $data['commercialAnd'];
2484                        unset($data['commercialAnd']);
2485                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
2486                        {
2487                                echo serialize(array(
2488                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
2489                                        'status' => 'fatal'
2490                                ));
[1599]2491
[1496]2492                                return;
2493                        }
2494
2495                        if ($data['id_contact'])
2496                        {
2497                                $id = $data['id_contact'];
2498                                $id_photo = $id;
2499                                unset($data['id_contact']);
2500                        }
2501                        else
2502                        {
2503                                $id_photo = '_new_';
2504                        }
2505
2506                        if ($data['owner'])
2507                        {
2508                                $owner = $data['owner'];
2509                                unset($data['owner']);
2510                        }
[1599]2511                        /*
2512                         * Process Photo, if available
[1496]2513                         */
2514                        $sleep_count = 0;
2515                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2516                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2517                        {
2518                                sleep(1);
2519                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2520                                $sleep_count++;
2521
2522                                if ($sleep_count > 35)
2523                                {
2524                                        // TODO
2525                                        return;
2526                                }
2527                        }
2528                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
[1599]2529
[1496]2530                        if (isset($this->page_info['photos'][$id_photo]))
2531                        {
2532                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2533                                {
2534                                        echo serialize(array(
2535                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2536                                                'status' => $this->page_info['photos'][$id_photo]['status']
2537                                        ));
2538
2539                                        return;
2540                                }
2541
2542                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2543                                unset($this->page_info['photos'][$id_photo]);
2544                                $this->save_session();
2545                        }
[1599]2546
[1496]2547                        /*
2548                         * Arrange Date so it gets inserted correctly
2549                         */
[1599]2550
[1496]2551                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]2552
[1496]2553                        $j = 0;
2554                        for ($i = 0; $i < 5; $i+=2)
2555                        {
2556                                switch($dateformat{$i})
2557                                {
2558                                        case 'Y':
2559                                                $date[$j]['size'] = 4;
2560                                                $date[$j]['digit'] = 'Y';
2561                                                break;
2562
2563                                        case 'm':
2564                                        case 'M':
2565                                                $date[$j]['size'] = 2;
2566                                                $date[$j]['digit'] = 'M';
2567                                                break;
2568
2569                                        case 'd':
2570                                                $date[$j]['size'] = 2;
2571                                                $date[$j]['digit'] = 'D';
2572                                }
2573                                $j++;
2574                        }
2575                        $datecount = 0;
2576
2577                        /* Verify Data and performs insertion/update */
2578                        foreach($data as $field => &$value)
2579                        {
2580                                if ($value == '' or is_null($value))
2581                                {
2582                                        unset($data[$field]);
2583                                        continue;
2584                                }
[1599]2585
[1496]2586                                switch($field)
2587                                {
[3341]2588                                        case 'corporate_name':
2589                                        case 'job_title':
2590                                        case 'department':
2591                                        case 'web_page':
[1496]2592                                        case 'alias':
2593                                        case 'given_names':
2594                                        case 'family_names':
2595                                        case 'names_ordered':
2596                                        case 'pgp_key':
2597                                        case 'notes':
2598                                        case 'photo':
[3018]2599                                                $data[$field] = urldecode( $value );
[1496]2600                                                break;
[1599]2601
[1496]2602                                        case 'id_status':
2603                                        case 'id_prefix':
2604                                        case 'id_suffix':
2605                                                if ($data[$field] == 0)
2606                                                {
2607                                                        unset($data[$field]);
2608                                                }
2609                                                break;
[1599]2610
[1496]2611                                        case 'birthdate_0':
2612                                        case 'birthdate_1':
2613                                        case 'birthdate_2':
[1599]2614
[1496]2615                                                switch($date[$datecount]['digit'])
2616                                                {
2617                                                        case 'Y':
2618                                                                $date['value'][2] = (int) $data[$field];
2619                                                                break;
2620
2621                                                        case 'M':
2622                                                                $date['value'][0] = (int) $data[$field];
2623                                                                break;
2624
2625                                                        case 'D':
2626                                                                $date['value'][1] = (int) $data[$field];
2627                                                                break;
2628                                                }
2629                                                unset($data[$field]);
2630                                                $datecount++;
2631
2632                                                if ($datecount != 3)
2633                                                {
2634                                                        break;
2635                                                }
[1599]2636
[1496]2637                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2638                                                {
2639                                                        echo serialize(array(
2640                                                                'msg' => lang('Invalid Date'),
2641                                                                'status' => 'invalid_data'
2642                                                        ));
2643                                                        return;
2644                                                }
[1599]2645
[1496]2646                                                $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2647                                                break;
2648
2649                                        case 'sex':
2650                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2651                                                {
2652                                                        echo serialize(array(
2653                                                                'msg' => lang('Invalid Sex'),
2654                                                                'status' => 'invalid_data'
2655                                                        ));
2656                                                        return;
2657                                                }
2658                                                break;
2659
2660
2661                                        case 'addresses':
2662                                                /* Insert new cities/states */
2663                                                if (isset($value['new_states']))
2664                                                {
2665                                                        foreach($value['new_states'] as $type => $state_info)
2666                                                        {
2667                                                                $index = 'address'.$type;
[1599]2668
[1496]2669                                                                $id_state = $this->bo->catalog->add_state($state_info);
2670                                                                $data['addresses'][$index]['id_state'] = $id_state;
2671
2672                                                                if ($value['new_cities'][$type])
2673                                                                {
2674                                                                        $value['new_cities'][$type]['id_state'] = $id_state;
2675                                                                }
2676                                                        }
2677
2678                                                        unset($data['addresses']['new_states']);
2679                                                }
2680
2681                                                if (isset($value['new_cities']))
2682                                                {
2683                                                        foreach($value['new_cities'] as $type => $city_info)
2684                                                        {
2685                                                                $index = 'address'.$type;
[1599]2686
[1496]2687                                                                $id_city = $this->bo->catalog->add_city($city_info);
2688                                                                $data['addresses'][$index]['id_city'] = $id_city;
2689                                                        }
2690
2691                                                        unset($data['addresses']['new_cities']);
2692                                                }
2693
2694                                        break;
2695
2696                                        case 'connections':
2697                                                /* Does nothing... */
2698                                                break;
2699
2700                                        default:
2701                                                echo serialize(array(
2702                                                        'msg' => lang('Invalid field: ').$field,
2703                                                        'status' => 'invalid_data'
2704                                                ));
2705                                                return;
2706                                }
2707                        }
2708
2709                        $code = '$id = $this->bo->catalog->';
2710
2711                        if (!is_null($id) and $id !== '')
2712                        {
2713                                $code .= $code.'update_single_info($id, $data);';
2714                                $result = array(
2715                                        'msg' => lang('Updated Successfully!'),
2716                                        'status' => 'ok'
2717                                );
2718                        }
2719                        else
2720                        {
2721                                $code .= 'add_single_entry($data,'.$owner.');';
2722                                $result = array(
2723                                        'msg' => lang('Entry Added Successfully!'),
2724                                        'status' => 'ok'
2725                                );
2726                        }
[1599]2727
[1496]2728                        eval($code);
2729
2730                        if (!($id))
2731                        {
2732                                $result = array(
2733                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2734                                                   'Report the problem to the Administrator.'),
2735                                        'status' => 'fail'
2736                                );
2737                        }
2738
2739                        echo serialize($result);
2740}
[2]2741                /*!
[1599]2742
[2]2743                        @function post_photo
2744                        @abstract Wrapper to post a photo without reload a page.
2745                        @author Raphael Derosso Pereira
2746
2747                */
2748                function post_photo($id)
2749                {
2750                        //print_r($_FILES);
2751                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'y'));
[1599]2752
[2]2753                        if (!is_array($_FILES) and is_array(!$_FILES['cc_pd_photo']))
2754                        {
2755                                $this->page_info['photos'][$id]['status'] = 'no_upload';
2756                                $this->page_info['photos'][$id]['msg'] = lang('No Photos uploaded to Server.');
[1599]2757
[2]2758                                $this->save_session();
2759                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2760                                return;
2761                        }
2762
2763                        if (!function_exists('imagecreate'))
2764                        {
2765                                $this->page_info['photos'][$id]['status'] = 'no_GD_lib';
2766                                $this->page_info['photos'][$id]['msg'] = lang('Cannot manipulate Image. No Image added. Please, if you want to use images, ask the Administrator to install GD library.');
[1599]2767
[2]2768                                $this->save_session();
2769                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2770                                return;
2771                        }
2772
2773                        // TODO: Get Max Size from preferences!
2774                        if ($_FILES['cc_pd_photo']['size'] > 1000000)
2775                        {
2776                                $this->page_info['photos'][$id]['status'] = 'too_large';
2777                                $this->page_info['photos'][$id]['msg'] = lang('Image too large! ContactCenter limits the image size to 1 Mb');
2778
2779                                $this->save_session();
2780                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2781                                return;
2782                        }
2783
2784                        if ($_FILES['cc_pd_photo']['error'])
2785                        {
2786                                $this->page_info['photos'][$id]['status'] = 'error';
2787                                $this->page_info['photos'][$id]['msg'] = lang('Some Error occured while processed the Image. Contact the Administrator. The error code was: ').$_FILES['cc_pd_photo']['error'];
2788
2789                                $this->save_session();
2790                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2791                                return;
2792                        }
[1599]2793
[2]2794                        switch($_FILES['cc_pd_photo']['type'])
2795                        {
2796                                case 'image/jpeg':
2797                                case 'image/pjpeg':
2798                                        $src_img = imagecreatefromjpeg($_FILES['cc_pd_photo']['tmp_name']);
2799                                        if ($src_img == '')
2800                                        {
2801                                                $bogus = true;
2802                                        }
2803                                        break;
2804
2805                                case 'image/png':
2806                                case 'image/x-png':
2807                                        $src_img = imagecreatefrompng($_FILES['cc_pd_photo']['tmp_name']);
2808                                        if ($src_img == '')
2809                                        {
2810                                                $bogus = true;
2811                                        }
2812                                        break;
2813
2814                                case 'image/gif':
2815                                        $src_img = imagecreatefromgif($_FILES['cc_pd_photo']['tmp_name']);
2816                                        if ($src_img == '')
2817                                        {
2818                                                $bogus = true;
2819                                        }
2820                                        break;
2821
2822                                default:
[1599]2823
[2]2824                                        $this->page_info['photos'][$id]['status'] = 'invalid_image';
2825                                        $this->page_info['photos'][$id]['msg'] = lang('The file must be an JPEG, PNG or GIF Image.');
2826
2827                                        $this->save_session();
2828                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2829                                        return;
2830                        }
2831
2832                        if ($bogus)
2833                        {
2834                                        $this->page_info['photos'][$id]['status'] = 'invalid_file';
2835                                        $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
[1599]2836
[2]2837                                        $this->save_session();
2838                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2839                                        return;
2840                        }
[1599]2841
[2]2842                        $img_size = getimagesize($_FILES['cc_pd_photo']['tmp_name']);
2843                        $dst_img = imagecreatetruecolor(60, 80);
[1599]2844
[2]2845                        if (!imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 60, 80, $img_size[0], $img_size[1]))
2846                        {
2847                                $this->page_info['photos'][$id]['status'] = 'invalid_file';
2848                                $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
[1599]2849
[2]2850                                $this->save_session();
2851                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2852                                return;
2853                        }
[1599]2854
[2]2855                        ob_start();
2856                        imagepng($dst_img);
2857                        $this->page_info['photos'][$id]['content'] = ob_get_contents();
2858                        ob_end_clean();
2859
2860                        $this->page_info['photos'][$id]['status'] = 'changed';
2861                        $this->page_info['photos'][$id]['msg'] = lang('Photo Successfully Updated!');
2862
2863                        $this->save_session();
[1599]2864
[2]2865                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2866
2867                        imagedestroy($src_img);
2868                        imagedestroy($dst_img);
2869                        echo 'ok';
2870                        return;
2871                }
2872
2873
2874                /*!
2875
2876                        @function get_photo
2877                        @abstract Returns the photo to the browser
2878                        @author Raphael Derosso Pereira
2879
2880                */
2881                function get_photo($id)
2882                {
2883                        $fields = $this->bo->catalog->get_fields(false);
2884                        $fields['photo'] = true;
[1599]2885
[2]2886                        $contact = $this->bo->catalog->get_single_entry($id, $fields);
2887
2888                        if (!$contact['photo'])
2889                        {
2890                                header('Content-type: image/png');
2891                                echo file_get_contents(PHPGW_INCLUDE_ROOT.'/contactcenter/templates/default/images/photo_celepar.png');
2892                                return;
2893                        }
[1599]2894
[2]2895                        header('Content-type: image/jpeg');
2896                        $photo = imagecreatefromstring ($contact['photo']);
2897                        $width = imagesx($photo);
2898                        $height = imagesy($photo);
[16]2899                        $twidth = 70;
2900                        $theight = 90;
[2]2901                        $small_photo = imagecreatetruecolor ($twidth, $theight);
2902                        imagecopyresampled($small_photo, $photo, 0, 0, 0, 0,$twidth, $theight, $width, $height);
2903                        imagejpeg($small_photo,"",100);
2904                        return;
2905                }
[1599]2906
[2]2907                /*!
[1599]2908
[2]2909                        @function get_states
2910                        @abstract Echos a serialized array containing all the states for the given country
2911                        @author Raphael Derosso Pereira
2912
2913                        @params $id_country The ID of the Country that contains the requested states
2914
2915                */
2916                function get_states($id_country)
2917                {
2918                        $states = $this->bo->catalog->get_all_states($id_country);
2919
2920                        if (!$states)
2921                        {
2922                                $result = array(
2923                                        'msg'    => lang('No States found for this Country.'),
2924                                        'status' => 'empty'
2925                                );
2926
2927                                echo serialize($result);
2928                                return;
2929                        }
[1599]2930
[2]2931                        $result = array(
2932                                'msg'    => lang('States Successfully retrieved!'),
2933                                'status' => 'ok'
2934                        );
[1599]2935
[2]2936                        foreach ($states as $state_info)
2937                        {
2938                                $result['data'][$state_info['id_state']] = $state_info['name'];
2939
2940                                if ($state_info['symbol'])
2941                                {
2942                                        $result['data'][$state_info['id_state']] .= ', '.$state_info['symbol'];
2943                                }
2944                        }
2945
2946                        echo serialize($result);
2947                }
2948
2949                /*!
2950
2951                        @function get_cities
2952                        @abstract Echos a serialized array containing all the cities of a given state
2953                        @author Raphael Derosso Pereira
2954
2955                        @param $id_country The ID of the Country that has the specified Cities (in case the
2956                                Country doesn't have any States)
2957                        @param $id_state The ID of the State that has the Cities requested
2958
2959                */
2960                function get_cities($id_country, $id_state=false)
2961                {
2962                        $cities = $this->bo->catalog->get_all_cities($id_country, $id_state);
2963
2964                        if (!$cities)
2965                        {
2966                                $result = array(
2967                                        'msg'    => lang('No Cities found for this State.'),
2968                                        'status' => 'empty'
2969                                );
2970
2971                                echo serialize($result);
2972                                return;
2973                        }
[1599]2974
[2]2975                        $result = array(
2976                                'msg'    => lang('Cities Successfully retrieved!'),
2977                                'status' => 'ok'
2978                        );
[1599]2979
[2]2980                        foreach ($cities as $city_info)
2981                        {
2982                                $result['data'][$city_info['id_city']] = $city_info['name'];
2983                        }
[1599]2984
[2]2985                        echo serialize($result);
2986                }
2987
[3282]2988                //Traduz o campo na busca completa por entradas no catálogo do usuário.
2989                function aux_full_search ($field,$isldap) {
2990                        $retorno = '';
2991                        if($isldap) {
2992                                switch($field) {
2993                                        case 'mail':
2994                                                $retorno = 'contact.connection.mail';
2995                                                break;
2996                                        case 'phone':
2997                                                $retorno = 'contact.connection.phone';
2998                                                break;
2999                                }
3000                        }
3001                        else {
3002                                switch($field) {
3003                                        case 'corporate':
3004                                                $retorno = 'contact.corporate_name';
3005                                                break;
3006                                        case 'mail':
3007                                        case 'phone':
3008                                                $retorno = 'contact.contact_connection.connection.connection_value';
3009                                                break;
3010                                }
3011                        }
3012                        return $retorno;
3013                }
[2]3014
3015                /*!
[1599]3016
[2]3017                        @function search
3018                        @abstract Echos a serialized array containing the IDs
3019                                of the entries that matches the search argument
3020                        @author Raphael Derosso Pereira
[3334]3021                        @author Mário César Kolling (external catalogs)
[2]3022
3023                        @param string $str_data A serialized array with two informations:
3024                                $data = array(
3025                                        'search_for' => (string),
3026                                        'recursive'  => (boolean),
3027                                );
3028
3029                */
[285]3030                // SERPRO
[2]3031                function search($str_data)
3032                {
3033                        $data = unserialize($str_data);
[284]3034                        // It's an external catalog?
3035                        $external = $this->bo->is_external($this->page_info['actual_catalog']);
[3282]3036                        $full_search = isset($data['full_search'])?$data['full_search']:false;
3037                       
3038                        if (!is_array($data) || (!$data['search_for'] && !$full_search) || !is_array($data['fields']))
[1599]3039                        {
3040                                echo serialize(array(
3041                                        'msg'    => lang('Invalid parameters'),
3042                                        'status' => 'abort'
3043                                ));
3044
3045                                return array('error' => lang('Invalid parameters'));
3046                        }
3047
3048
[284]3049                        /*
3050                         * TODO: look into the database to discover the database's encoding and convert the search_for field accordingly
3051                         */
3052                        // Support search parameters with accentuation
3053                        if ($this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
[1599]3054/**rev 104**/
3055                                //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
[503]3056                                $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
[752]3057                                $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
3058                                $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
[1599]3059/****/
[284]3060                        {
3061
3062                                $data['search_for'] = utf8_encode($data['search_for']);
3063                        }
3064
[1599]3065                        $rules  = array();
3066
3067                        if ($data['search_for'] === '*')
3068                        {
3069                                $rules = array(
3070                                        0 => array(
3071                                                'field' => $data['fields']['search'],
3072                                                'type'  => 'LIKE',
3073                                                'value' => '%'
3074                                        )
3075                                );
3076                        }
3077                        else
3078                        {
3079                                $names = explode(' ', $data['search_for']);
3080
3081                                if (!is_array($names))
3082                                {
[3282]3083                                        if(!$full_search) {
3084                                                echo serialize(array(
3085                                                        'msg'    => lang('Invalid Search Parameter'),
3086                                                        'status' => 'abort'
3087                                                ));
3088                                                exit;
3089                                        }
3090                                        else
3091                                                $names = array();
[1599]3092
3093                                }
3094
[284]3095                                if (!$external && $this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
[1599]3096/**rev 104**/
3097                                        //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
[503]3098                                        $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
[1599]3099                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
[752]3100                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager' )
[1599]3101/*****/
[284]3102                                {
3103                                        /*
3104                                         * Restrict the returned contacts search to objectClass = phpgwAccount,
[880]3105                                         * must have attibute phpgwAccountStatus, phpgwAccountVisible != -1
[284]3106                                         */
[3282]3107                                       
[284]3108                                        $rules = array(
3109                                                0 => array(
3110                                                        'field' => 'contact.object_class',
3111                                                        'type'  => '=',
3112                                                        'value' => 'phpgwAccount'
3113                                                ),
3114                                                1 => array(
3115                                                        'field' => 'contact.account_status',
3116                                                        'type'  => 'iLIKE',
3117                                                        'value' => '%'
3118                                                ),
[1599]3119/**rev 104**/
3120                                                ///
3121                                                //1 => array(
[284]3122                                                2 => array(
[1599]3123/*****/
[284]3124                                                        'field' => 'contact.account_visible',
3125                                                        'type'  => '!=',
3126                                                        'value' => '-1'
[1599]3127/**rev 104**/
3128        /*                                      ),
3129                                                2 => array(
3130                                                        'field' => 'contact.object_class',
3131                                                        'type'  => '=',
3132                                                        'value' => 'inetOrgPerson'
3133/****/
[284]3134                                                ),
3135                                        );
[3282]3136
[4254]3137                                        if($full_search) {
3138                                            foreach($full_search as $field => $value) {
3139                                                    if(trim($value)!='')
3140                                                            array_push($rules,array(
3141                                                                                            'field' => $this->aux_full_search($field,true),
3142                                                                                            'type' => 'LIKE',
3143                                                                                            'value' => '*'.$value.'*'
3144                                                                                            ));
3145                                            }
3146                                        }
[3282]3147
[284]3148                                }
[4254]3149                                else if(!$external && $full_search) {
[3282]3150                                       
3151                                        foreach($full_search as $field => $value) {
3152                                                if(trim($value)!='')
3153                                                        array_push($rules,array(
3154                                                                                        'field' => $this->aux_full_search($field,false),
3155                                                                                        'type' => 'iLIKE',
3156                                                                                        'value' => '%'.$value.'%'
3157                                                                                        ));
3158                                        }
3159                               
3160                                }
[284]3161
[1599]3162                                foreach ($names as $name)
3163                                {
3164                                        if ($name != '')
3165                                        {
3166                                                array_push($rules, array(
3167                                                        'field' => $data['fields']['search'],
3168                                                        'type'  => 'iLIKE',
3169                                                        'value' => '%'.$name.'%'
3170                                                ));
3171                                        }
3172                                }
3173                        }
3174
[284]3175                        if ($external || $this->page_info['actual_catalog']['class'] == 'bo_people_catalog' ||
[1599]3176/**rev 104**/
3177                                //$this->page_info['actual_catalog']['class'] == 'bo_group_manager')
[503]3178                                $this->page_info['actual_catalog']['class'] == 'bo_group_manager' ||
[752]3179                                $this->page_info['actual_catalog']['class'] == 'bo_shared_people_manager' ||
[1599]3180                                $this->page_info['actual_catalog']['class'] == 'bo_shared_group_manager')
3181
3182
3183/***/
[2]3184                        {
[284]3185                                // Get only this attributes: dn, cn for external catalogs,
3186                                // used to restrict the attributes used in filters
[3211]3187                                $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'), $data['search_for'] != null);
[2]3188                        }
[284]3189                        else
3190                        {
3191                                // Get only this attributes: dn, cn, phpgwAccountType, objectClass, phpgwAccountStatus, phpghAccountVisible
3192                                // for non-external catalogs, used to restrict the attributes used in filters
3193                                $ids = $this->bo->find(array(
3194                                        $data['fields']['id'],
3195                                        $data['fields']['search'],
3196                                        'contact.object_class',
[304]3197                                        //'contact.account_status',
[3282]3198                                        'contact.account_visible',
3199                                        'contact.connection.mail',
3200                                        'contact.connection.phone'
[3211]3201                                        ), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'), $data['search_for_area'], $data['search_for'] != null );
[284]3202                        }
[2]3203
[1599]3204                        if (!is_array($ids) || !count($ids))
3205                        {
[284]3206                                $this->last_search_ids = null;
3207                                $this->save_session();
3208                                return null;
[1599]3209                        }
[2]3210
[1599]3211                        $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
[2]3212
[1599]3213                        $ids_f = array();
3214
3215                        foreach ($ids as $e_info)
3216                        {
3217/**rev 104**/
3218                                //$ids_f[] = $e_info[$id_field];
[752]3219                                if($this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' && $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
[1599]3220                                {
3221                                        $ids_f[] = $e_info[$id_field];
3222                                } else{
[3371]3223                                        $ids_f[] = array(0=>$e_info[$id_field],1=>$e_info['perms'],2=>$e_info['owner']);
[1599]3224                                }
3225/****/
3226                        }
[284]3227
3228                        return $ids_f;
[2]3229                }
[1599]3230
[285]3231                // CELEPAR
3232                /*
3233        function search($str_data)
3234        {
3235            $data = unserialize($str_data);
[2]3236
[285]3237            if (!is_array($data) || !$data['search_for'] || !is_array($data['fields']))
3238            {
3239                echo serialize(array(
3240                    'msg'    => lang('Invalid parameters'),
3241                    'status' => 'abort'
3242                ));
3243
3244                return;
3245            }
3246
3247            $rules  = array();
3248
3249            if ($data['search_for'] === '*')
3250            {
3251                $rules = array(
3252                    0 => array(
3253                        'field' => $data['fields']['search'],
3254                        'type'  => 'LIKE',
3255                        'value' => '%'
3256                    )
3257                );
3258            }
3259            else
3260            {
3261                $names = explode(' ', $data['search_for']);
3262
3263                if (!is_array($names))
3264                {
3265                    echo serialize(array(
3266                        'msg'    => lang('Invalid Search Parameter'),
3267                        'status' => 'abort'
3268                    ));
[1599]3269
[285]3270                    return;
3271                }
[1599]3272
[285]3273                foreach ($names as $name)
3274                {
3275                    if ($name != '')
3276                    {
3277                        array_push($rules, array(
3278                            'field' => $data['fields']['search'],
3279                            'type'  => 'iLIKE',
3280                            'value' => '%'.$name.'%'
3281                        ));
3282                    }
3283                }
3284            }
3285
[1599]3286
3287
[285]3288            //$catalog = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
[1599]3289
[285]3290            //if ($catalog['class'] === 'bo_people_catalog')
3291            //{
3292            //    array_push($rules, array(
3293            //        'field' => 'contact.id_owner',
3294            //        'type'  => '=',
3295            //        'value' => $GLOBALS['phpgw_info']['user']['account_id']
3296            //    ));
3297            //}
[1599]3298
3299
[285]3300            $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'));
3301
3302            if (!is_array($ids) || !count($ids))
3303            {
3304                echo serialize(array(
3305                    'msg'    => lang('No Entries Found!'),
3306                    'status' => 'empty'
3307                ));
3308
3309                return;
3310            }
3311            $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
3312
3313            $ids_f = array();
3314            foreach ($ids as $e_info)
3315            {
3316                $ids_f[] = $e_info[$id_field];
3317            }
3318
3319            echo serialize(array(
3320                'data'   => $ids_f,
3321                'msg'    => lang('Found %1 Entries', count($ids)),
3322                'status' => 'ok'
3323            ));
[1599]3324
[285]3325                        return;
3326        }*/
[2]3327                /*!
3328
3329                        @function get_multiple_entries
3330                        @abstract Returns an array containing the specifiend data in the default
3331                                CC UI format
3332                        @author Raphael Derosso Pereira
3333
[1599]3334                        @param array str_data A serialized array containing the ID's of the entries
[2]3335                                to be taken, the fields to be taken and the rules to be used on the
3336                                retrieval:
3337                                $data = array(
3338                                        'ids'    => array(...),
3339                                        'fields' => array(...),
3340                                        'rules'  => array(...)
3341                                );
3342
3343                */
3344                function get_multiple_entries($str_data)
3345                {
3346                        $data = unserialize($str_data);
[1599]3347
[2]3348                        if (!is_array($data) or !count($data) or !count($data['fields']) or !count($data['ids']))
3349                        {
3350                                return array(
3351                                        'msg'    => lang('Invalid Parameters'),
3352                                        'status' => 'abort'
3353                                );
3354                        }
3355
3356                        $entries = $this->bo->catalog->get_multiple_entries($data['ids'], $data['fields']);
[1599]3357
[2]3358                        if (!is_array($entries) or !count($entries))
3359                        {
3360                                return array(
3361                                        'msg'    => lang('No Entries Found!'),
3362                                        'status' => 'empty'
3363                                );
3364                        }
3365
3366                        return array(
3367                                'msg'    => lang('Found %1 Entries!', count($entries)),
3368                                'status' => 'ok',
3369                                'data'   => $entries
3370                        );
3371                }
3372
3373                /*
3374
3375                        @function get_all_entries
[1599]3376                        @abstract Returns the specified fields for all catalog's entries
[2]3377                                in the default CC UI format
3378                        @author Raphael Derosso Pereira
3379
[1599]3380                        @params array str_data A serialized array containing the fields to
[2]3381                                be grabbed, the maximum number of entries to be returned and a
3382                                boolean specifying if the calls refers to a new grab or to an
3383                                unfinished one.
3384
3385                */
3386                function get_all_entries($str_data)
3387                {
3388                        $data = unserialize($str_data);
[1599]3389
3390                        if (!is_array($data) or
3391                            !count($data) or
3392                                !count($data['fields']) or
[2]3393                                !$data['maxlength'] or
3394                                (!$data['new'] and !$data['offset']))
3395                        {
3396                                return array(
3397                                        'msg'    => lang('Invalid Parameters'),
3398                                        'status' => 'abort'
3399                                );
3400                        }
3401
3402                        if ($data['new'])
3403                        {
3404                                $this->all_entries = $this->bo->catalog->get_all_entries_ids();
3405
3406                                $this->save_session();
3407
3408                                if (!is_array($this->all_entries) or !count($this->all_entries))
3409                                {
3410                                        return array(
3411                                                'msg'    => lang('No Entries Found!'),
3412                                                'status' => 'empty'
3413                                        );
3414                                }
3415
3416                                $data['offset'] = 0;
3417                        }
[1599]3418
[2]3419                        if ($data['maxlength'] != -1)
3420                        {
3421                                $result = $this->bo->catalog->get_multiple_entries(array_slice($this->all_entries, $data['offset'], $data['maxlength']), $data['fields']);
3422                        }
3423                        else
3424                        {
3425                                $result = $this->bo->catalog->get_multiple_entries($this->all_entries, $data['fields']);
3426                        }
3427
3428                        $jsCode = array();
3429                        $count = 0;
3430                        foreach ($result as $each)
3431                        {
3432                                if (!is_array($each))
3433                                {
3434                                        continue;
3435                                }
3436
[1599]3437                                if($this-> typeContact == 'groups') {
3438
[2]3439                                        foreach ($each as $field => $value)     {
[1599]3440
[2]3441                                                if ($field === 'title') {
3442                                                        $optionName = '\\"'.$value.'\\"';
[1599]3443
[2]3444                                                }
3445                                                else if ($field === 'short_name')       {
[1599]3446
[2]3447                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$optionName.' ('.$value.')", "'.$count.'");';
[1599]3448                                                        $count++;
3449                                                }
[2]3450                                        }
3451                                }
[1599]3452
3453                                else  {
[2]3454                                        foreach ($each as $field => $value)     {
3455                                                if ($field === 'names_ordered') {
3456                                                         if(is_array($value))
3457                                $value = $value[0];
3458                                                        $name = '\\"'.$value.'\\"';
3459                                                }
3460                                                else if ($field === 'connections')      {
[1599]3461
[2]3462                                                        foreach ($value as $connection)         {
[3795]3463                                                                if ($connection['id_type'] == $this->preferences['personCardEmail'])    {
[2]3464                                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$name.' <'.$connection['connection_value'].'>", "'.$count.'");';
3465                                                                        $count++;
3466                                                                }
3467                                                        }
3468                                                }
3469                                        }
3470                                }
3471                        }
3472
3473                        $jsCodeFinal = implode("\n", $jsCode);
[1599]3474
[2]3475                        $nEntries = count($result);
[1599]3476
[2]3477                        if (!$nEntries)
3478                        {
3479                                return array(
3480                                        'msg'    => lang('Error while getting user information...'),
3481                                        'status' => 'abort'
3482                                );
3483                        }
3484
3485                        return array(
3486                                'msg'      => lang('Found %1 Entries!', $nEntries),
3487                                'status'   => 'ok',
3488                                'typeContact'   => $this -> typeContact,
3489                                'final'    => $nEntries + $data['offset'] < count($this->all_entries) ? false : true,
3490                                'offset'   => $data['offset'] + $nEntries,
3491                                'data'     => $jsCodeFinal
3492                        );
3493                }
[1599]3494
[2]3495                /*********************************************************************\
3496                 *                      Auxiliar Methods                             *
3497                \*********************************************************************/
3498
3499                /*!
[1599]3500
[2]3501                        @function save_session
3502                        @abstract Saves the data on the session
3503                        @author Raphael Derosso Pereira
[1599]3504
[2]3505                */
3506                function save_session()
3507                {
3508                        $GLOBALS['phpgw']->session->appsession('ui_data.page_info','contactcenter',$this->page_info);
3509                        $GLOBALS['phpgw']->session->appsession('ui_data.all_entries','contactcenter',$this->all_entries);
3510                }
3511
3512                /*!
[1599]3513
[2]3514                        @function convert_tree
3515                        @abstract Converts the tree array in the BO format to a JS tree array compatible
3516                                with the one available in eGW
3517                        @author Raphael Derosso Pereira
[1599]3518
[2]3519                        @param (array)  $tree    The tree in the BO format
3520                        @param (string) $name    The tree name
3521                        @param (string) $iconDir The dir where the icons are
3522                        @param (string) $parent  The parent
3523                */
3524
3525                function convert_tree($tree, &$iconDir, $parent='0')
3526                {
3527//                      echo "Entrou<br>\tPai: $parent <br>";
3528                        $rtree = array();
3529
3530                        if ($parent === '0')
3531                        {
3532//                              echo 'Root!<br>';
3533                                $rtree['0'] = array(
3534                                        'type'       => 'catalog_group',
3535                                        'id'         => '0',
3536                                        'pid'        => 'none',
3537                                        'caption'    => lang('Catalogues'),
3538                                        'class'      => 'bo_catalog_group_catalog',
3539                                        'class_args' => array('_ROOT_', '$this', '$this->get_branch_by_level($this->catalog_level[0])')
3540                                );
3541                        }
3542
3543                        foreach($tree as $id => $value)
3544                        {
3545//                              echo 'ID: '.$id.'<br>';
3546                                $rtree[$parent.'.'.$id] = array(
3547                                        'type'    => $value['type'],
3548                                        'id'      => $parent.'.'.$id,
3549                                        'pid'     => $parent,
3550                                        'caption' => $value['name']
3551                                );
[1599]3552
[2]3553                                switch($value['type'])
3554                                {
3555                                        case 'catalog_group':
3556                                        case 'mixed_catalog_group':
3557                                                $rtree = $rtree + $this->convert_tree($value['sub_branch'],$iconDir,$parent.'.'.$id);
3558                                                break;
3559                                }
3560                        }
3561
3562                        if (count($rtree))
3563                        {
3564                                return $rtree;
3565                        }
3566                }
3567
[3970]3568                function get_catalog_add_contact($id, $echo=true){
[2]3569
3570                        $array_participants = array();
[13]3571                        if(!$this->bo->catalog->src_info) {
3572                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3573                                $this->bo->catalog->src_info = $ldap->srcs[1];
[2]3574                        }
[1599]3575
3576                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
[13]3577                        $dn=$this->bo->catalog->src_info['dn'];
3578                        $justThese = array("givenname","givenname","sn","telephonenumber","mail");
[1599]3579                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
3580                        $info = ldap_get_entries($ds, $sr);
[13]3581                        for($z = 0; $z < 5; $z++) {
[1599]3582                                $participant = $info[0][$justThese[$z]];
[13]3583                                array_push($array_participants, $participant);
3584                        }
3585
3586                        ldap_close($ds);
[3970]3587                        if ($echo)
3588                        {
3589                            echo serialize($array_participants);
3590                        }
3591                        else
3592                            {
3593                                return serialize($array_participants);
3594                            }
[1599]3595                }
3596
3597                function get_catalog_participants_group($id)
[880]3598                {
3599                        if(!$this->bo->catalog->src_info) {
3600                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3601                                $this->bo->catalog->src_info = $ldap->srcs[1];
[1599]3602                        }
3603                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
3604                        $justThese = array("description","memberuid");
3605                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
[880]3606                        $info = ldap_get_entries($ds, $sr);
3607                        $member_uids = $info[0]['memberuid'];
3608                        $contact['names_ordered'] = $info[0]['description'];
[1599]3609                        $filter = "";
[880]3610                        for($z = 0; $z < count($member_uids); $z++) {
3611                                if($member_uids[$z])
[1599]3612                                        $filter.="(uid=".$member_uids[$z].")";
[880]3613                        }
3614                        $array_participants = array();
3615                        if($filter) {
[962]3616                                $filter = "(|".$filter.")";
[904]3617                                $valarray = explode(',',$id);
3618                                array_shift($valarray);
3619                                $dn = implode(',',$valarray);
[880]3620                                $justThese = array("cn","mail");
[1599]3621                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3622                                $info = ldap_get_entries($ds, $sr);
[880]3623                                for($z = 0; $z < $info['count']; $z++) {
3624                                        $participant =  '<font color=\'DARKBLUE\'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;'.$info[$z]['cn'][0].'&quot; &lt;'.$info[$z]['mail'][0].'&gt;</font><br>';
[1599]3625                                    $array_emails[$info[$z]['mail'][0]] = null;
3626                                        array_push($array_participants, $participant);
[880]3627                                }
3628                                ldap_close($ds);
[1599]3629                        }
[880]3630                        sort($array_participants);
[1599]3631                        $innerHTML = '';
[880]3632                        foreach($array_participants as $index => $participant){
3633                                $innerHTML .= $participant;
3634                        }
[1599]3635                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
[880]3636                        echo serialize($return);
3637                }
3638
[1599]3639                function get_catalog_participants_list($id)
[2]3640                {
[1599]3641
3642                        $fields = $this->bo->catalog->get_fields(false);
[2]3643                        $fields['names_ordered'] = true;
[1599]3644                        $fields['mail_forwarding_address'] = true;
3645                        $contact = $this->bo->catalog->get_single_entry($id,$fields);
3646
[2]3647                        $array_participants = array();
3648                        $array_emails = array();
[880]3649
[2]3650                        $filter = null;
[1599]3651                        for($z = 0; $z < $contact['mail_forwarding_address']['count']; $z++) {
[2]3652                                        if(strstr($contact['mail_forwarding_address'][$z],'@')) {
3653                                                $filter.="(mail=".$contact['mail_forwarding_address'][$z].")";
3654                                                $array_emails[$contact['mail_forwarding_address'][$z]] = "<font color=black>".$contact['mail_forwarding_address'][$z]."</font>";
[1599]3655                                        }
3656                                        else
[2]3657                                                $array_participants[$z] = "<font color=red>".$contact['mail_forwarding_address'][$z]."</font>";
[1599]3658                        }
3659
[2]3660                        if($filter) {
[1599]3661                                $filter = "(|".$filter.")";
[2]3662                                if(!$this->bo->catalog->src_info) {
3663                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
3664                                        $this->bo->catalog->src_info = $ldap->srcs[1];
3665                                }
[880]3666                                $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
[2]3667                                $dn=$this->bo->catalog->src_info['dn'];
3668                                $justThese = array("cn","mail");
[1599]3669                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3670                                $info = ldap_get_entries($ds, $sr);
[2]3671                                for($z = 0; $z < $info['count']; $z++) {
[24]3672                                        $participant =  '<font color=\'DARKBLUE\'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;'.$info[$z]['cn'][0].'&quot; &lt;'.$info[$z]['mail'][0].'&gt;</font><br>';
[1599]3673                                        $array_emails[$info[$z]['mail'][0]] = null;
3674                                        array_push($array_participants, $participant);
[2]3675                                }
[1599]3676
[2]3677                                foreach($array_emails as $index => $email)
[1599]3678                                        if($email)
3679                                                array_push($array_participants, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$email."<br>");
3680
[2]3681                                ldap_close($ds);
3682                        }
3683                        sort($array_participants);
[1599]3684                        $innerHTML = '';
[24]3685                        foreach($array_participants as $index => $participant){
3686                                $innerHTML .= $participant;
3687                        }
[1599]3688                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
[24]3689                        echo serialize($return);
[1599]3690                }
3691
[2]3692                function export_contacts($typeExport){
3693
3694                        $boGroup = CreateObject('contactcenter.bo_group');
3695                        $contacts = $boGroup->get_all_contacts();
3696                        $streamBuffer = '';
3697
3698                        if(!count($contacts))
3699                                echo null;
[1599]3700
[2]3701                        switch($typeExport) {
3702
3703                                case 'outlook_en':
3704                                        $streamBuffer = "Name;E-mail Address;Notes;Mobile Phone;Pager;Company;".
[3322]3705                                                        "Job Title;Home Phone;Home Fax;Business Phone;Business Fax\r\n";                                                       
[293]3706                                        foreach($contacts as $index => $object){
[3322]3707                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\";"
3708                                                        . "\"".$object[ 'main-mail' ] . "\";"
3709                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\";"
3710                                                        . "\"".$object[ 'mobile' ] . "\";"
3711                                                        . "\"".$object[ 'business-pager' ] . "\";"
3712                                                        . "\"".$object[ 'corporate_name' ] . "\";"
3713                                                        . "\"".$object[ 'job_title' ] . "\";"
3714                                                        . "\"".$object[ 'home-phone' ] . "\";"
3715                                                        . "\"".$object[ 'home-fax' ] . "\";"
3716                                                        . "\"".$object[ 'business-phone' ] . "\";"
3717                                                        . "\"".$object[ 'business-fax' ] . "\"\r\n";
[2]3718                                        }
[3215]3719                                        break;
[1599]3720
[2]3721                                case 'outlook_pt-BR':
[3322]3722                                        $streamBuffer = "Nome;Sobrenome;Segundo nome;Nome;Apelido;End. de email;Endereço residencial;"
3723                                                                        ."Cidade do endereço residencial;CEP do endereço residencial;Estado;País/região do endereço residencial;"
3724                                                                        ."Telefone residencial;Fax residencial;Telefone celular;Página pessoal da Web;Rua do endereço comercial;"
3725                                                                        ."Cidade do endereço comercial;CEP do endereço comercial;Estado do endereço comercial;"
3726                                                                        ."País/região do endereço comercial;Página comercial da Web;Telefone comercial;Fax comercial;Pager;Empresa;"
3727                                                                        ."Cargo;Departamento;End. comercial;Observações\r\n";
[3215]3728
[293]3729                                        foreach($contacts as $index => $object){
[3322]3730                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\";"
3731                                                        .";;;"
3732                                                        . "\"".$object[ 'alias' ] . "\";"
3733                                                        . "\"".$object[ 'main-mail' ] . "\";"
3734                                                        . "\"".$object[ 'home-address' ] . "\";"
3735                                                        . "\"".$object[ 'home-city_name' ] . "\";"
3736                                                        . "\"".$object[ 'home-postal_code' ] . "\";"
3737                                                        . "\"".$object[ 'home-state_name' ] . "\";"
3738                                                        . "\"".$object[ 'home-id_country' ] . "\";"
3739                                                        . "\"".$object[ 'home-phone' ] . "\";"
3740                                                        . "\"".$object[ 'home-fax' ] . "\";"
3741                                                        . "\"".$object[ 'mobile' ] . "\";"
3742                                                        . "\"".$object[ 'web_page' ] . "\";"
3743                                                        . "\"".$object[ 'business-address' ] . "\";"
3744                                                        . "\"".$object[ 'business-city_name' ] . "\";"
3745                                                        . "\"".$object[ 'business-postal_code' ] . "\";"
3746                                                        . "\"".$object[ 'business-state_name' ] . "\";"
3747                                                        . "\"".$object[ 'business-id_country' ] . "\";"
3748                                                        . "\"".$object[ 'web_page' ] . "\";"
3749                                                        . "\"".$object[ 'business-phone' ] . "\";"
3750                                                        . "\"".$object[ 'business-fax' ] . "\";"
3751                                                        . "\"".$object[ 'business-pager' ] . "\";"
3752                                                        . "\"".$object[ 'corporate_name' ] . "\";"
3753                                                        . "\"".$object[ 'job_title' ] . "\";"
3754                                                        . "\"".$object[ 'department' ] . "\";"
3755                                                        .";"
3756                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\"\r\n";
[2]3757                                        }
[3322]3758
[2]3759                                break;
[1599]3760
[15]3761                                case 'outlook2000_pt-BR':
3762                                        $streamBuffer = "\"Tratamento\",\"Nome\",\"Segundo Nome\",\"Sobrenome\",\"Sufixo\",".
[3322]3763                                        "\"Empresa\",\"Departamento\",\"Cargo\",\"Rua do endereço comercial\",\"Rua do endereço comercial 2\",".
3764                                        "\"Rua do endereço comercial 3\",\"Cidade do endereço comercial\",\"Estado do endereço comercial\",".
3765                                        "\"CEP do endereço comercial\",\"País do endereço comercial\",\"Endereço residencial\",\"Rua residencial 2\",".
3766                                        "\"Rua residencial 3\",\"Cidade do endereço residencial\",\"Estado\",\"CEP do endereço residencial\",\"País do endereço residencial\",".
3767                                        "\"Outro endereço\",\"Outro endereço 2\",\"Outro endereço 3\",\"Cidade\",\"Estado\",\"CEP\",\"País\",".
[15]3768                                        "\"Telefone do assistente\",\"Fax comercial\",\"Telefone comercial\",\"Telefone comercial 2\",\"Retorno de chamada\",".
3769                                        "\"Telefone do carro\",\"Telefone principal da empresa\",\"Fax residencial\",\"Telefone residencial\",".
3770                                        "\"Telefone residencial 2\",\"ISDN\",\"Telefone celular\",\"Outro fax\",\"Outro telefone\",\"Pager\",\"Telefone principal\",".
[3322]3771                                        "\"Radiofone\",\"Telefone TTY/TDD\",\"Telex\",\"Aniversário\",\"Anotações\",\"Caixa postal\",\"Categorias\",".
3772                                        "\"Código da empresa\",\"Código do governo\",\"Cônjuge\",\"Conta\",\"Endereço de correio eletrônico\",".
3773                                        "\"Nome de exibição do correio eletr.\",\"Endereço de correio eletrônico 2\",".
3774                                        "\"Nome de exibição do correio eletr.2\",\"Endereço de correio eletrônico 3\",".
3775                                        "\"Nome de exibição do correio eletr.3\",\"Datas especiais\",\"Disponibilidade da Internet\",".
3776                                        "\"Filhos\",\"Hobby\",\"Idioma\",\"Indicação\",\"Informações para cobrança\",\"Iniciais\",\"Local\",".
3777                                        "\"Nome do assistente\",\"Nome do gerenciador\",\"Página da Web\",\"Palavras-chave\",\"Particular\",\"Personalizado 1\",\"Personalizado 2\",".
3778                                        "\"Personalizado 3\",\"Personalizado 4\",\"Prioridade\",\"Profissão\",\"Quilometragem\",\"Sala\",\"Sensibilidade\",\"Servidor de diretório\",".
[15]3779                                        "\"Sexo\"\r\n";
[1599]3780
[3322]3781
3782
[293]3783                                        foreach($contacts as $index => $object){
[3322]3784                                $streamBuffer .= "\"".$object[ 'alias' ] . "\","                                   
3785                                                                . "\"".$object[ 'names_ordered' ] . "\","
3786                                                                .",,,"
3787                                                                . "\"".$object[ 'corporate_name' ] . "\","
3788                                                                . "\"".$object[ 'department' ] . "\","
3789                                                                . "\"".$object[ 'job_title' ] . "\","
3790                                                                . "\"".$object[ 'business-address' ] . "\","
3791                                                                . "\"".$object[ 'business-address-2' ] . "\","
3792                                                                .","
3793                                                                . "\"".$object[ 'business-city_name' ] . "\","
3794                                                                . "\"".$object[ 'business-state' ] . "\","
3795                                                                . "\"".$object[ 'business-postal_code' ] . "\","
3796                                                                . "\"".$object[ 'business-id_country' ] . "\","
3797                                                                . "\"".$object[ 'home-address' ] . "\","
3798                                                                . "\"".$object[ 'home-address-2' ] . "\","
3799                                                                .","
3800                                                                . "\"".$object[ 'home-city_name' ] . "\","
3801                                                                . "\"".$object[ 'home-state_name' ] . "\","
3802                                                                . "\"".$object[ 'home-postal_code' ] . "\","
3803                                                                . "\"".$object[ 'home-id_country' ] . "\","
3804                                                                .",,,,,,,,"
3805                                                                . "\"".$object[ 'business-fax' ] . "\","
3806                                                                . "\"".$object[ 'business-phone' ] . "\","
3807                                                                . "\"".$object[ 'business-mobile' ] . "\","
3808                                                                .",,,"
3809                                                                . "\"".$object[ 'home-fax' ] . "\","
3810                                                                . "\"".$object[ 'home-phone' ] . "\","
3811                                                                .",,"
3812                                                                . "\"".$object[ 'mobile' ] . "\","
3813                                                                .",,"
3814                                                                . "\"".$object[ 'home-pager' ] . "\","
3815                                                                . "\"".$object[ 'business-phone' ] . "\","
3816                                                                .",,,"
3817                                                                . "\"".$object[ 'birthdate' ] . "\","
3818                                                                . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
3819                                                                .",,,,,,"
3820                                                                . "\"".$object[ 'main-mail' ] . "\","
3821                                                                .","
3822                                                                . "\"".$object[ 'alternative-mail' ] . "\","
3823                                                                .",,,,,,,,,,,,,,"
3824                                                                . "\"".$object[ 'web_page' ] . "\","
3825                                                                .",,,,,,,,,,,,"
3826                                                                . "\"".$object[ 'sex' ] . "\"\r\n";                                                             
3827                            }
[15]3828                                break;
[1599]3829
[15]3830                                case 'outlook2000_en':
3831                                        $streamBuffer = "Title,First Name,Middle Name,Last Name,Suffix,Company,Department,Job Title,".
3832                                        "Business Street,Business Street 2,Business Street 3,Business City,Business State,Business Postal Code,".
3833                                        "Business Country,Home Street,Home Street 2,Home Street 3,Home City,Home State,Home Postal Code,Home Country,".
3834                                        "Other Street,Other Street 2,Other Street 3,Other City,Other State,Other Postal Code,Other Country,".
3835                                        "Assistant's Phone,Business Fax,Business Phone,Business Phone 2,Callback,Car Phone,Company Main Phone,Home Fax,".
3836                                        "Home Phone,Home Phone 2,ISDN,Mobile Phone,Other Fax,Other Phone,Pager,Primary Phone,Radio Phone,TTY/TDD Phone,Telex,".
3837                                        "Account,Anniversary,Assistant's Name,Billing Information,Birthday,Categories,Children,Directory Server,E-mail Address,".
3838                                        "E-mail Type,E-mail Display Name,E-mail 2 Address,E-mail 2 Type,E-mail 2 Display Name,E-mail 3 Address,E-mail 3 Type,E-mail 3 Display Name,".
3839                                        "Gender,Government ID Number,Hobby,Initials,Internet Free Busy,Keywords,Language,Location,Manager's Name,Mileage,Notes,".
3840                                        "Office Location,Organizational ID Number,PO Box,Priority,Private,Profession,Referred By,Sensitivity,Spouse,User 1,User 2,User 3,User 4,Web Page\r\n";
[1599]3841
[4264]3842                                foreach($contacts as $index => $object)
3843                                {
3844                                        if( array_key_exists("phone", $object) )
3845                                           $phone = $object['phone'];
3846                                        else
3847                                           $phone = $object['business-phone'];
3848
[3322]3849                                                $streamBuffer.= "\"".$object[ 'alias' ] . "\","
3850                                                        . "\"".$object[ 'names_ordered'] . "\","
3851                                                        .",,,"
3852                                                        . "\"".$object[ 'corporate_name' ] . "\","
3853                                                        . "\"".$object[ 'department' ] . "\","
3854                                                        . "\"".$object[ 'job_title' ] . "\","
3855                                                        . "\"".$object[ 'business-address' ] . "\","
3856                                                        . "\"".$object[ 'business-address-2' ] . "\","
3857                                                        .","
3858                                                        . "\"".$object[ 'business-city_name' ] . "\","
3859                                                        . "\"".$object[ 'business-state' ] . "\","
3860                                                        . "\"".$object[ 'business-postal_code' ] . "\","
3861                                                        . "\"".$object[ 'business-id_country' ] . "\","
3862                                                        . "\"".$object[ 'home-address' ] . "\","
3863                                                        . "\"".$object[ 'home-address-2' ] . "\","
3864                                                        .","
3865                                                        . "\"".$object[ 'home-city_name' ] . "\","
3866                                                        . "\"".$object[ 'home-state_name' ] . "\","
3867                                                        . "\"".$object[ 'home-postal_code' ] . "\","
3868                                                        . "\"".$object[ 'home-id_country' ] . "\","
3869                                                        .",,,,,,,,"
3870                                                        . "\"".$object[ 'business-fax' ] . "\","
[4264]3871                                                        . "\"".$phone . "\","
[3322]3872                                                        . "\"".$object[ 'business-mobile' ] . "\","
3873                                                        .",,,"
3874                                                        . "\"".$object[ 'home-fax' ] . "\","
3875                                                        . "\"".$object[ 'home-phone' ] . "\","
3876                                                        .",,"
3877                                                        . "\"".$object[ 'mobile' ] . "\","
3878                                                        .",,"
3879                                                        . "\"".$object[ 'business-pager' ] . "\","
3880                                                        . "\"".$object[ 'home-pager' ] . "\","
3881                                                        .",,,,,,,,"
3882                                                        . "\"".$object[ 'birthdate' ] . "\","
3883                                                        .",,,"
3884                                                        . "\"".$object[ 'main-mail' ] . "\","
3885                                                        .",,"
3886                                                        . "\"".$object[ 'alternative-mail' ] . "\","
3887                                                        .",,,,,,,,,,,,,,,"
3888                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
3889                                                        .",,,,,,,,,,,,,"
3890                                                        . "\"".$object[ 'web_page' ] . "\"\r\n";
3891
[15]3892                                        }
3893                                break;
[1599]3894
[2]3895                                case 'thunderbird':
[3322]3896                                        $streamBuffer = "First Name,Last Name,Display Name,Nickname,Primary Email,Secondary Email,"
3897                                                ."Screen Name,Work Phone,Home Phone,Fax Number,Pager Number,Mobile Number,Home Address,"
3898                                                ."Home Address 2,Home City,Home State,Home ZipCode,Home Country,Work Address,Work Address 2,"
3899                                                ."Work City,Work State,Work ZipCode,Work Country,Job Title,Department,Organization,Web Page 1,"
3900                                                ."Web Page 2,Birth Year,Birth Month,Birth Day,Custom 1,Custom 2,Custom 3,Custom 4,Notes,\n";
[1599]3901
[293]3902                                        foreach($contacts as $index => $object){
[3322]3903                                                $array_birth = explode("-",$object[ 'birthdate' ]);
3904                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\","
3905                                                        .",,"
3906                                                        . "\"".$object[ 'alias' ] . "\","
3907                                                        . "\"".$object[ 'main-mail' ] . "\","
3908                                                        . "\"".$object[ 'alternative-mail' ] . "\","
3909                                                        .","
[4264]3910                                                        . "\"".$phone . "\","
[3322]3911                                                        . "\"".$object[ 'home-phone' ] . "\","
3912                                                        . "\"".$object[ 'business-fax' ] . "\","
3913                                                        . "\"".$object[ 'business-pager' ] . "\","
3914                                                        . "\"".$object[ 'mobile' ] . "\","
3915                                                        . "\"".$object[ 'home-address' ] . "\","
3916                                                        . "\"".$object[ 'home-address-2' ] . "\","
3917                                                        . "\"".$object[ 'home-city_name' ] . "\","
3918                                                        . "\"".$object[ 'home-state_name' ] . "\","
3919                                                        . "\"".$object[ 'home-postal_code' ] . "\","
3920                                                        . "\"".$object[ 'home-id_country' ] . "\","
3921                                                        . "\"".$object[ 'business-address' ] . "\","
3922                                                        . "\"".$object[ 'business-address-2' ] . "\","
3923                                                        . "\"".$object[ 'business-city_name' ] . "\","
3924                                                        . "\"".$object[ 'business-state_name' ] . "\","
3925                                                        . "\"".$object[ 'business-postal_code' ] . "\","
3926                                                        . "\"".$object[ 'business-id_country' ] . "\","
3927                                                        . "\"".$object[ 'job_title' ] . "\","
3928                                                        . "\"".$object[ 'department' ] . "\","
3929                                                        . "\"".$object[ 'corporate_name' ] . "\","
3930                                                        . "\"".$object[ 'web_page' ] . "\","
3931                                                        . "\"".$object[ 'web_page' ] . "\","
3932                                                        . "\"".$array_birth[0] . "\","
3933                                                        . "\"".$array_birth[1] . "\","
3934                                                        . "\"".$array_birth[2] . "\","
3935                                                        .",,,,"
3936                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\",\r\n";
3937
[2]3938                                        }
3939                                break;
[1599]3940
[285]3941                                case 'expresso':
[3322]3942                            $streamBuffer = 'Nome,Apelido,E-mail Principal,E-mail Alternativo,Celular,'
3943                                . 'Telefone Comercial,Endereço Comercial,Complemento End. Comercial,CEP Comercial,Cidade End. Comercial,Estado End. Comercial,País End. Comercial,'
3944                                . 'Telefone Residencial,Endereço Residencial,Complemento End. Residencial,CEP Residencial,Cidade End. Residencial,Estado End. Residencial,País End. Residencial,'
3945                                . 'Aniversário,Sexo,Assinatura GPG,Notas,Página Web,Empresa,Cargo,Departamento,Fax Comercial,Pager Comercial,Celular Comercial,Fax,Pager,Endereço Comercial 2,Endereço Residencial 2'
3946                                                        . "\r\n";
[1599]3947
[3322]3948                            foreach($contacts as $index => $object){
3949                                $streamBuffer .= "\"".$object[ 'names_ordered'] . "\","
3950                                    . "\"".$object[ 'alias' ] . "\","
3951                                    . "\"".$object[ 'main-mail' ] . "\","
3952                                    . "\"".$object[ 'alternative-mail' ] . "\","
3953                                    . "\"".$object[ 'mobile' ] . "\","
3954                                    . "\"".$object[ 'business-phone' ] . "\","
3955                                    . "\"".$object[ 'business-address' ] . "\","
3956                                    . "\"".$object[ 'business-complement' ] . "\","
3957                                    . "\"".$object[ 'business-postal_code' ] . "\","
3958                                    . "\"".$object[ 'business-city_name' ] . "\","
3959                                    . "\"".$object[ 'business-state_name' ] . "\","
3960                                    . "\"".$object[ 'business-id_country' ] . "\","
3961                                    . "\"".$object[ 'home-phone' ] . "\","
3962                                    . "\"".$object[ 'home-address' ] . "\","
3963                                    . "\"".$object[ 'home-complement' ] . "\","
3964                                    . "\"".$object[ 'home-postal_code' ] . "\","
3965                                    . "\"".$object[ 'home-city_name' ] . "\","
3966                                    . "\"".$object[ 'home-state_name' ] . "\","
3967                                    . "\"".$object[ 'home-id_country' ] . "\","
3968                                                                . "\"".$object[ 'birthdate' ] . "\","
3969                                                                . "\"".$object[ 'sex' ] . "\","
3970                                                                . "\"".$object[ 'pgp_key' ] . "\","
3971                                                                . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
3972                                                                . "\"".$object[ 'web_page' ] . "\","
3973                                                                . "\"".$object[ 'corporate_name' ] . "\","
3974                                                                . "\"".$object[ 'job_title' ] . "\","
3975                                                                . "\"".$object[ 'department' ] . "\","
3976                                                                . "\"".$object[ 'business-fax' ] . "\","
3977                                                                . "\"".$object[ 'business-pager' ] . "\","
3978                                                                . "\"".$object[ 'business-mobile' ] . "\","
3979                                                                . "\"".$object[ 'home-fax' ] . "\","
3980                                                                . "\"".$object[ 'home-pager' ] . "\","
3981                                                                . "\"".$object[ 'business-address-2' ] . "\","
3982                                                                . "\"".$object[ 'home-address-2' ] . "\"\r\n";
3983                            }
3984                        break;
[1599]3985
[2]3986                        }
3987
3988                        $file = "contacts_".md5(microtime()).".swp";
3989                        $tempDir = ini_get("session.save_path");
3990                        $f = fopen($tempDir.'/'.$file,"w");
3991                        if(!$f)
3992                                echo null;
[1599]3993
[2]3994                        fputs($f,$streamBuffer);
3995                        fclose($f);
3996
3997                        echo $tempDir.'/'.$file;
3998                }
3999
[285]4000                // Get the csv field and put into array, from php.net
4001                function parse_line($input_text, $delimiter = ',', $text_qualifier = '"') {
4002                        $text = trim($input_text);
4003                          if(is_string($delimiter) && is_string($text_qualifier)) {
4004                         $re_d = '\x' . dechex(ord($delimiter));            //format for regexp
4005                        $re_tq = '\x' . dechex(ord($text_qualifier));    //format for regexp
[1599]4006
[285]4007                        $fields = array();
4008                        $field_num = 0;
4009                        while(strlen($text) > 0) {
4010                        if($text{0} == $text_qualifier) {
4011                                preg_match('/^' . $re_tq . '((?:[^' . $re_tq . ']|(?<=\x5c)' . $re_tq . ')*)' . $re_tq . $re_d . '?(.*)$/', $text, $matches);
[1599]4012
[285]4013                                $value = str_replace('\\' . $text_qualifier, $text_qualifier, $matches[1]);
4014                                $text = trim($matches[2]);
[1599]4015
[285]4016                                $fields[$field_num++] = $value;
4017                        } else {
4018                                preg_match('/^([^' . $re_d . ']*)' . $re_d . '?(.*)$/', $text, $matches);
[1599]4019
[285]4020                                $value = $matches[1];
4021                                $text = trim($matches[2]);
[1599]4022
[285]4023                                $fields[$field_num++] = $value;
4024                }
4025                }
4026                        return $fields;
4027                    } else
4028                        return false;
4029                }
[16]4030
[1599]4031                //funcao alterada para importar outros campos alem de nome, telefone e email, de arquivo csv (Outlook 2000)
4032                //em 08/04/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
4033                //Foi adicionada uma funcao (escapesheelcmd()) nas variaveis para que caracteres especiais sejam ignorados
4034                //durante a importacao dos contatos; o processo estava travando por causa de caracteres em campos como nome,
4035                //sobrenome, notas e e-mail;
4036                //em 19/06/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
[4471]4037                function import_contacts($typeImport, $id_group=false){
[3334]4038                        $this->so_group = CreateObject('contactcenter.so_group');
[1599]4039                        if($file = $_SESSION['contactcenter']['importCSV']) {
4040                                unset($_SESSION['contactcenter']['importCSV']);
[2]4041                                $len = filesize($file);
4042                                $count = 0;
4043                                $return = array('error' => false, '_new' => 0, '_existing' => 0, '_failure' => 0);
[276]4044                                $handle = @fopen($file, "r") or die(serialize($return['error'] = true));
[1599]4045
[285]4046                                $input_header = fgets($handle);
4047                                if ($typeImport == 'outlook')
4048                                        $delim = ';';
4049                                else if ($typeImport == 'auto')
4050                                $delim = strstr($input_header,',') ? ',' : ';';
[1599]4051                                else
[285]4052                                        $delim = ',';
4053                                $csv_header = $this->parse_line($input_header,$delim);
4054                                $firstContact = fgets($handle);
4055                                preg_match("/\"(.+)\"[,;]/sU",$firstContact,$matches); // yahoo csv
[1599]4056                                rewind($handle);
[285]4057
[2]4058                                $header = @fgetcsv($handle, $len, $delim) or die(serialize($return['error'] = true));
[15]4059                                if(count($header)  < 2 || count($header) > 100) {
[2]4060                                        $return['error'] = true;
4061                                        $return['sizeheader'] = count($header);
4062                                        echo serialize($return);
4063                                        return;
4064                                }
[1599]4065
[285]4066                                if ($matches[0][strlen($matches[0])-1] == ';')
4067                                        $delim = ';';
[1599]4068
[3322]4069                                $boGroup = CreateObject('contactcenter.bo_group');
4070                                $boPeople = CreateObject('contactcenter.bo_people_catalog');
4071                                        switch($typeImport){
4072                                                case 'outlook2000':
4073                                                        $name_pos=1;
4074                                                        $name2_pos=2;
4075                                                        $name3_pos=3;
4076                                                        $corporate_street_pos=8;
4077                                                        $cep_pos=13;
4078                                                        $corporate_street_2_pos=22;
4079                                                        $fax_pos=30;
4080                                                        $phone_pos=31;
4081                                                        $home_phone_pos=37;
4082                                                        $personal_cell_pos=40;
4083                                                        $pager_pos=43;
4084                                                        $birth_pos=48;
4085                                                        $notes_pos=49;
4086                                                        $email_pos=56;
4087                                                        $aditionalEmail_pos=59;
[1599]4088
[3322]4089                                                        break;
4090                                                case 'outlook':
4091                                                        $name_pos=3;
4092                                                        $email_pos=4;
4093                                                        $phone_pos=7;
4094                                                        $home_phone_pos=10;
4095                                                        $personal_cell_pos=12;
4096                                                        $corporate_street_pos=13;
4097                                                        $cep_pos=15;
4098                                                        $phone_pos=18;
4099                                                        $fax_pos=19;
4100                                                        $pager_pos=20;
4101                                                        $notes_pos=25;
4102                                                        break;
4103                                                case 'thunderbird':
4104                                                        $name_pos=2;
4105                                                        $email_pos=4;
4106                                                        $phone_pos=7;
4107                                                        break;
4108                                                case 'expresso':
4109                                                        $name_pos=0;
4110                                                        $alias_pos=1;
4111                                                        $email_pos=2;
4112                                                        $aditionalEmail_pos=3;
4113                                                        $personal_cell_pos=4;
4114                                                        $corporate_phone_pos=5;
4115                                                        $corporate_street_pos=6;
4116                                                        $corporate_comp_pos=7;
4117                                                        $corporate_cep_pos=8;
4118                                                        $corporate_city_pos=9;
4119                                                        $corporate_state_pos=10;
4120                                                        $corporate_country_pos=11;
4121                                                        $home_phone_pos=12;
4122                                                        $street_pos=13;
4123                                                        $comp_pos=14;
4124                                                        $cep_pos=15;
4125                                                        $city_pos=16;
4126                                                        $state_pos=17;
4127                                                        $country_pos=18;
4128                                                        $birth_pos=19;
4129                                                        $sex_pos = 20;
4130                                                        $pgp_key_pos = 21;
4131                                                        $notes_pos=22;
4132                                                        $web_page_pos=23;
4133                                                        $corporate_name_pos=24;
4134                                                        $job_title_pos=25;
4135                                                        $department_pos=26;
4136                                                        $corporate_fax_pos=27;
4137                                                        $corporate_pager_pos=28;
4138                                                        $corporate_cell_pos=29;
4139                                                        $fax_pos=30;
4140                                                        $pager_pos=31;
4141                                                        $corporate_street_2_pos = 32;
4142                                                        $street_2_pos = 33;                                             
4143                                                        break;
[285]4144                                        default:
[3322]4145                                                        foreach($csv_header as $index => $fieldName)
4146                                                        {
4147                                                                switch($fieldName){
4148                                                                case 'Name':
4149                                                                case 'Nome':
4150                                                                case 'First Name':
4151                                                                        $name_pos = $index;
4152                                                                        break;
4153                                                                case 'Second name':
4154                                                                case 'Segundo nome':
4155                                                                        $name2_pos = $index;
4156                                                                        break;
4157                                                                case 'Sobrenome':
4158                                                                case 'Surname':
4159                                                                        $name3_pos = $index;
4160                                                                        break;
4161                                                                case 'Business Street':
4162                                                                case 'Rua do endereço comercial':
4163                                                                        $corporate_street_pos = $index;
4164                                                                        break;
4165                                                                case 'Rua do endereço comercial 2':
4166                                                                case 'Outro endereço':
4167                                                                        $corporate_street_2_pos = $index;
4168                                                                        break;
4169                                                                case 'Business Postal Code':
4170                                                                case 'CEP do endereço comercial':
4171                                                                        $cep_pos = $index;
4172                                                                        break;
4173                                                                case 'Business Fax':
4174                                                                case 'Fax comercial':
4175                                                                case 'Fax':
4176                                                                        $fax_pos = $index;
4177                                                                        break;
4178                                                                case 'Home Phone':
4179                                                                case 'Telefone residencial':
4180                                                                        $home_phone_pos = $index;
4181                                                                        break;
4182                                                                case 'Mobile phone':
4183                                                                case 'Telefone celular':
4184                                                                        $personal_cell_pos = $index;
4185                                                                        break;
4186                                                                case 'Pager':
4187                                                                        $pager_pos = $index;
4188                                                                        break;
4189                                                                case 'Phone':
4190                                                                case 'Business Phone':
4191                                                                case 'Telefone':
4192                                                                case 'Telefone principal':
4193                                                                case 'Telefone comercial':
[4264]4194                                                                case 'Telefone Comercial':                                                                   
[3322]4195                                                                        $phone_pos = $index;
4196                                                                        break;
4197                                                                case 'Aniversário':
4198                                                                case 'Birthdate':
4199                                                                        $birth_pos = $index;
4200                                                                case 'Anotações':
4201                                                                case 'Notes':
4202                                                                        $notes_pos = $index;
4203                                                                case 'E-mail':
4204                                                                case 'Email':
4205                                                                case 'E-mail Address':
4206                                                                case 'Endereço de correio eletrônico':
4207                                                                case 'End. de email':
4208                                                                        $email_pos = $index;
4209                                                                        break;
4210                                                                case 'Endereço de correio eletrônico 2':
4211                                                                        $aditionalEmail_pos = $index;
4212                                                                        break;
4213                                                                }
[285]4214                                                        }
[3322]4215                                                        break;
[15]4216                                }
[276]4217
[2]4218                                while (($data = fgetcsv($handle, $len, $delim))) {
[3322]4219                                        foreach ($header as $key=>$heading)
[2]4220                                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
[1599]4221
[3322]4222                                                $sdata = array();
4223                                                $full_name  = trim($row[$header[$name_pos]]);
4224                                                $email          = trim($row[$header[$email_pos]]);
4225                                                $phone          = trim($row[$header[$phone_pos]]);
4226                                                $name2          = trim($row[$header[$name2_pos]]);
4227                                                $name3          = trim($row[$header[$name3_pos]]);
[1599]4228
[3322]4229                                                $birth          = trim($row[$header[$birth_pos]]);
4230                                                $notes          = trim($row[$header[$notes_pos]]);
4231                                                $altEmail       = trim($row[$header[$altEmail_pos]]);
4232                                                $sdata['alias']                         = trim($row[$header[$alias_pos]]);
4233                                                $sdata['corporate_name']      = trim($row[$header[$corporate_name_pos]]);
4234                                                $sdata['job_title']             = trim($row[$header[$job_title_pos]]);
4235                                                $sdata['department']            = trim($row[$header[$department_pos]]);
4236                                                $sdata['web_page']                      = trim($row[$header[$web_page_pos]]);
4237                                               
4238                                                $sdata['sex']                   = trim($row[$header[$sex_pos]]);
4239                                                $sdata['pgp_key']      = trim($row[$header[$pgp_key_pos]]);
[1599]4240
[3322]4241
4242                                        $full_name = $full_name;
[2]4243                                        $array_name = explode(' ', str_replace('"','',(str_replace('\'','',$full_name))));
[3476]4244                                        $sdata['given_names'] = addslashes($array_name[0]);
[2]4245                                        $array_name[0] = null;
4246                                        $sdata['family_names'] = trim(implode(' ',$array_name));
[1599]4247                                        if($sdata['family_names'] == '')
4248                                        {
[3476]4249                                                $sdata['family_names'] = addslashes($name2) . " " . addslashes($name3);
[1599]4250                                        }
[3476]4251
[3322]4252                                                $sdata['connections']['default_email']['connection_name'] = lang('Main');
[3476]4253                                                $sdata['connections']['default_email']['connection_value'] = addslashes($email);
[3322]4254                                                $sdata['connections']['aditional_email']['connection_name'] = "Alternativo";
4255                                                $sdata['connections']['aditional_email']['connection_value'] = trim($row[$header[$aditionalEmail_pos]]);
[1599]4256
[3322]4257                                                $sdata['connections']['default_phone']['connection_name'] = lang('Main');
[4262]4258                                                $sdata['connections']['default_phone']['connection_value'] = $phone;
[2]4259
[4262]4260                                                if( trim($row[$header[$home_phone_pos]]) != "" )
4261                                                {
4262                                                    $sdata['connections']['aditional_phone']['home_phone']['connection_name'] = 'Casa';
4263                                                    $sdata['connections']['aditional_phone']['home_phone']['connection_value'] = trim($row[$header[$home_phone_pos]]);
4264                                                }
[1599]4265
[4262]4266                                                if( trim($row[$header[$personal_cell_pos]]) != "" )
4267                                                {
4268                                                    $sdata['connections']['aditional_phone']['cellphone']['connection_name'] = 'Celular';
4269                                                    $sdata['connections']['aditional_phone']['cellphone']['connection_value'] = trim($row[$header[$personal_cell_pos]]);
4270                                                }
4271
4272                                                if( trim($row[$header[$corporate_phone_pos]]) != "")
4273                                                {
4274                                                    $sdata['connections']['aditional_phone']['corporate_phone']['connection_name'] = 'Trabalho';
4275                                                    $sdata['connections']['aditional_phone']['corporate_phone']['connection_value'] = trim($row[$header[$corporate_phone_pos]]);
4276                                                }
4277
4278                                                if( trim($row[$header[$fax_pos]]) != "" )
4279                                                {
4280                                                    $sdata['connections']['aditional_phone']['fax']['connection_name'] = 'Fax';
4281                                                    $sdata['connections']['aditional_phone']['fax']['connection_value'] = trim($row[$header[$fax_pos]]);
4282                                                }
4283
4284                                                if ($GLOBALS['phpgw_info']['server']['personal_contact_type'] == 'True')
4285                                                {
4286                                                    if( trim($row[$header[$pager_pos]]) != "" )
4287                                                    {
4288                                                        $sdata['connections']['aditional_phone']['pager']['connection_name'] = 'Pager';
4289                                                        $sdata['connections']['aditional_phone']['pager']['connection_value'] = trim($row[$header[$pager_pos]]);
4290                                                    }
4291
4292                                                    if( trim($row[$header[$corporate_fax_pos]]) != "" )
4293                                                    {
4294                                                        $sdata['connections']['aditional_phone']['corporate_fax']['connection_name'] = 'Fax Corporativo';
4295                                                        $sdata['connections']['aditional_phone']['corporate_fax']['connection_value'] = trim($row[$header[$corporate_fax_pos]]);
4296                                                    }
4297
4298                                                    if( trim($row[$header[$corporate_cell_pos]]) != "" )
4299                                                    {
4300                                                        $sdata['connections']['aditional_phone']['corporate_cell']['connection_name'] = 'Celular Corporativo';
4301                                                        $sdata['connections']['aditional_phone']['corporate_cell']['connection_value'] = trim($row[$header[$corporate_cell_pos]]);
4302                                                    }
4303
4304                                                    if( trim($row[$header[$corporate_pager_pos]]) != "" )
4305                                                    {
4306                                                        $sdata['connections']['aditional_phone']['corporate_pager']['connection_name'] = 'Pager Corporativo';
4307                                                        $sdata['connections']['aditional_phone']['corporate_pager']['connection_value'] = trim($row[$header[$corporate_pager_pos]]);
4308                                                    }
4309                                                }
4310
[3322]4311                                                $sdata['addresses']['address_corporative']['address1'] = trim($row[$header[$corporate_street_pos]]);
4312                                                $sdata['addresses']['address_corporative']['address2'] = trim($row[$header[$corporate_street_2_pos]]);
4313                                                $sdata['addresses']['address_corporative']['complement'] = trim($row[$header[$corporate_comp_pos]]);
[4262]4314                                                $sdata['addresses']['address_corporative']['postal_code'] = trim($row[$header[$corporate_cep_pos]]);
[3322]4315                                                $sdata['addresses']['address_corporative']['id_country'] = "BR";
[4262]4316                                                $sdata['addresses']['address_corporative']['id_state'] = trim($row[$header[$corporate_state_pos]]);
[3322]4317                                                $sdata['addresses']['address_corporative']['id_city'] = trim($row[$header[$corporate_city_pos]]);
[4262]4318
4319
[3322]4320                                                $sdata['addresses']['address_personal']['address1'] = trim($row[$header[$street_pos]]);
4321                                                $sdata['addresses']['address_personal']['address2'] = trim($row[$header[$street_2_pos]]);
4322                                                $sdata['addresses']['address_personal']['complement'] = trim($row[$header[$comp_pos]]);
4323                                                $sdata['addresses']['address_personal']['postal_code'] = trim($row[$header[$cep_pos]]);
[4262]4324                                                $sdata['addresses']['address_personal']['id_country'] = "BR";
4325                                                $sdata['addresses']['address_personal']['id_state'] = trim($row[$header[$state_pos]]);
[3322]4326                                                $sdata['addresses']['address_personal']['id_city'] =  trim($row[$header[$city_pos]]);
[1599]4327
[4085]4328                                        if(trim($birth)) {
4329                                                $array_birth = explode("/",trim($birth));
4330                                                $sdata['birthdate'] = date('Y-m-d', mktime(0,0,0,$array_birth[1],$array_birth[0],$array_birth[2]));
4331                                        }
[1599]4332
[3476]4333                                        $sdata['notes'] = addslashes($notes);
[3322]4334                                        //$sdata['is_quick_add'] = true;
[16]4335                                        $sdata['connections']['default_phone']['connection_value'] = $phone;
[1599]4336
[285]4337                                        //      verifica se email já existe!
[3476]4338                                        $email = addslashes($email);
[2]4339                                        $contact = $boGroup->verify_contact($email);
[1599]4340
[285]4341                                        if(!$sdata['given_names'] && $email){
4342                                                        $a_email = explode("@",$email);
[3476]4343                                                        $sdata['given_names'] = addslashes($a_email[0]);
[285]4344                                        }
[2]4345
[1599]4346                                        $line_iteration = $return['_failure'] + $return['_existing'] + $return['_new'];
4347
[2]4348                                        if($contact){
4349                                                $return['_existing']++;
[1599]4350                                        }
[3237]4351                                        else if((!eregi("^[/_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) && $email) {
[2]4352                                                $return['_failure']++;
[285]4353                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid E-Mail address: " . $email ."<br>";
[16]4354                                        }
[3237]4355                                        else if (!$sdata['given_names'] || !$boPeople ->quick_add($sdata)){
[1599]4356                                                $return['_failure']++;
[285]4357                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid Name: " . $sdata['given_names'] ."<br>";
[2]4358                                        }
[4262]4359                                        else{
4360                                                        if($id_group != 0){
[3334]4361                                                                $this->so_group->add_user_by_name($id_group,$full_name);
[4262]4362                                                        }
[3334]4363                                                        $return['_new']++;
4364                                                }
[1599]4365                        }
[2]4366                                fclose($handle);
[15]4367                                unlink($file);
[2]4368                        }
4369                        else
4370                                $return['error'] = true;
4371
4372                        echo serialize($return);
4373                }
4374        }
4375
4376?>
Note: See TracBrowser for help on using the repository browser.