source: trunk/contactcenter/inc/class.ui_data.inc.php @ 4768

Revision 4768, 145.3 KB checked in by roberto.santosjunior, 13 years ago (diff)

Ticket #1820 - Erro na Navegação por Contatos Pessoais.r4630

  • 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>';
[4768]1223                                        $this->page_info['n_pages'] = $dontPaginate ? 1 : ceil($n_entries/$this->page_info['n_cards']);
[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;
[4768]1293                                        $this->page_info['n_pages'] = $dontPaginate ? 1 : ceil(count($this->page_info['actual_entries'])/$this->page_info['n_cards']);
[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                                );
[4753]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';
[4767]1539                                                                        $final[3][$i][13] = $conn_info['id_connection'];
[2]1540                                                                }
[3795]1541                                                                else if ($conn_info['id_type'] == $this->preferences['personCardPhone'] and !$default_phone_found)
[2]1542                                                                {
[284]1543                                                                        if ($conn_info['connection_is_default'])
1544                                                                        {
1545                                                                                $default_phone_found = true;
1546                                                                        }
[1599]1547
1548/**rev 104**/
1549                                                                        //if ($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['voip_enabled'] && !$external){
1550                                                                        //      $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'ramal')\">".$conn_info['connection_value']."</a>";
1551
[3795]1552                                                                        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]1553                                                                                $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'com')\">".$conn_info['connection_value']."</a>";
[1599]1554                                                                       
1555/*****/
[285]1556                                                                        }
[284]1557                                                                        $final[3][$i][3] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1558                                                                }
[2]1559                                                        }
1560                                                }
[1599]1561
[284]1562                                                if (!$final[3][$i][3])
1563                                                {
1564                                                        $final[3][$i][3] = 'none';
1565                                                }
1566
1567                                                if (!$final[3][$i][4])
1568                                                {
1569                                                        $final[3][$i][4] = 'none';
1570                                                }
1571
[1411]1572                                                $final[3][$i][5] = $contact['alias']? urldecode( $contact['alias'] ):'none';
[284]1573                                                $final[3][$i][6] = $ids[$i];
1574
[1599]1575/**rev 104**/
1576        /*                              //      If contact is a public list, then load the forwarding addresses.
1577                                                if($contact['account_type'][0] == 'l')
1578                                                        $final[3][$i][7] = array();
1579        */
1580
1581                                                //If contact is a public list or a group, then load the forwarding addresses.
[880]1582                                                if($contact['account_type'][0] == 'l' || $contact['account_type'][0] == 'g')
1583                                                        $final[3][$i][7] = ($contact['account_type'][0] == 'l' ? 'list' : 'group');
[503]1584                                                       
[752]1585                                                if($this->page_info['actual_catalog']['class']=='bo_shared_people_manager') {
[1599]1586                                                        $final[3][$i][11] = $perms[$i];
1587                                                        $final[3][$i][12] = lang('Shared').": ".$owner_names[$owners[$i]]['cn'];
[503]1588                                                }
[1599]1589/******/
[284]1590
1591                                                $final[4][$i] = $contact['photo'] ? 1  : 0;
1592                                                $i++;
[2]1593                                        }
[284]1594                                        else
[2]1595                                        {
[284]1596                                                // coloca mensagem de erro no vetor que retorna para o browser
[2]1597                                        }
[284]1598                                }
1599                                $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";
1600                                $final[5] = '<span class="link" onclick="'.$lnk_compose;
[1496]1601                                $final[6] = $prop_names;
1602                                $final[7] = $validos;
1603                                $final[8] = $this->page_info['actual_catalog']['class'];
1604                                $final[9] = $count;
[3970]1605                                $final[11] = $this->bo->catalog_level;
[2]1606
[1599]1607
[2]1608                                $this->page_info['actual_letter'] = $letter;
1609                                $this->page_info['actual_page'] = $page;
[1599]1610
1611                                $this->save_session();
[2]1612                                echo serialize($final);
1613                                return;
1614                        }
[1599]1615
[2]1616                        $this->page_info['actual_letter'] = $letter;
1617                        $this->page_info['actual_page'] = $page;
[1599]1618
[2]1619                        $this->save_session();
[1599]1620
[2]1621                        $final[0] = 0;
1622                        $final[1] = $this -> typeContact;
1623                        echo serialize($final);
1624                }
[3335]1625               
1626               
1627                function get_list_owners_perms_add(){
1628                        $acl = CreateObject('phpgwapi.acl');
1629                        $find_result = $acl->get_rights_and_owners($GLOBALS['phpgw_info']['user']['account_id'],'contactcenter');
1630                        if($find_result){
1631                                $owner_names = array();
1632                                $filter = "(|";
1633                                foreach($find_result as $owner) {
1634                                        if(($owner['acl_rights'] & PHPGW_ACL_ADD) == PHPGW_ACL_ADD){
1635                                                $filter .= "(uidNumber=".$owner['acl_account'].")";
1636                                        }
1637                                }
1638                                if(!$this->bo->catalog->src_info) {
1639                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
1640                                        $this->bo->catalog->src_info = $ldap->srcs[1];
1641                                }
1642                                $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], false);
1643                                $filter .= ")";
1644                                $dn=$this->bo->catalog->src_info['dn'];
1645                                $justThese = array("cn","uidnumber","uid");
1646                                $sr = ldap_search($ds,$dn, $filter,$justThese);
1647                                $info = ldap_get_entries($ds, $sr);
1648                                for($z = 0; $z < $info['count']; $z++) {
1649                                        $owner_names[$info[$z]['uidnumber'][0]] = array("cn" => $info[$z]['cn'][0], "uid" => $info[$z]['uid'][0]);
1650                                }
1651                                ldap_close($ds);
1652                        }
1653                        echo serialize ($owner_names); 
1654                }
[1599]1655
[285]1656                function get_visible_all_ldap()
1657                {
1658                        $bo = CreateObject('contactcenter.bo_ldap_manager');
1659                        $ldap_query = $bo->srcs;
[1599]1660                        return $ldap_query[1]['visible'];
[285]1661                }
[284]1662
[1599]1663
[2]1664                /*!
[1599]1665
[2]1666                        @function get_group_data
1667                        @abstract Returns all the information of a given Group
1668                        @author Nilton Emilio Buhrer Neto
[1599]1669
[2]1670                        @param (integer) $id The id to get information
[1599]1671
1672                */
[1280]1673                function get_group_data($id,$shared_from=null)
[2]1674                {
1675                        $this->bo->catalog = CreateObject('contactcenter.bo_group_manager');
1676                        $fields = $this->bo->catalog->get_fields(true);
1677                        $data = $this->bo->catalog->get_single_entry($id,$fields);
[285]1678                       
1679                        if($id) {                       
[2]1680                                // get All Contacts by group.
[285]1681                                $data['contact_in_list'] = $this->bo->catalog->get_contacts_by_group($id);                                                             
[2]1682                        }
[285]1683                       
[2]1684                        $boGroup = CreateObject('contactcenter.bo_group');
[4753]1685
1686                        $all_contacts = $boGroup->get_all_contacts('only_email',$shared_from);
[285]1687                       
1688                        $contact_options = "";
1689                        if(count($all_contacts)) {                                     
1690                                foreach($all_contacts as $idx => $contact) {                           
[4753]1691                                        $contact_options .= "<OPTION value='".$contact['id_connection']."'>".$contact['names_ordered']." (".$contact['connection_value'].")</OPTION>";
[285]1692                                }
1693                        }
[1599]1694                        $data['contact_list'] = $contact_options;
1695                        $data['result'] = 'ok';                                                         
[285]1696                        echo serialize($data);                 
1697                }               
1698               
[2]1699                /*!
[1599]1700
[2]1701                        @function get_full_data
1702                        @abstract Returns all the information of a given Entry
1703                        @author Raphael Derosso Pereira
[1599]1704
[2]1705                        @param (integer) $id The id to get information
[1599]1706
[2]1707                */
[1599]1708/**rev 104**/
1709                //function get_full_data($id)
[503]1710                function get_full_data($id,$catalog='bo_people_catalog')
[2]1711                {
1712                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]1713/**rev 104**/
1714                        //$this->bo->catalog = CreateObject('contactcenter.bo_people_catalog');
1715                        $this->bo->catalog = CreateObject('contactcenter.'.$catalog);
1716/****/
[2]1717                        $fields = $this->bo->catalog->get_fields(true);
1718                        $fields['photo'] = false;
1719                        $entry = $this->bo->catalog->get_single_entry($id,$fields);
1720
1721                        if (is_bool($entry['given_names']))
1722                        {
1723                                $data['result'] = 'false';
1724                                echo serialize($data);
1725                                return;
1726                        }
1727
1728                        $date = explode('-', $entry['birthdate']);
1729                        $j = 0;
1730                        for ($i = 0; $i < 5; $i+=2)
1731                        {
1732                                switch($dateformat{$i})
1733                                {
1734                                        case 'Y':
1735                                                $birthdate[$j] = $date[0];
1736                                                break;
1737
1738                                        case 'm':
1739                                        case 'M':
1740                                                $birthdate[$j] = $date[1];
1741                                                break;
1742
1743                                        case 'd':
1744                                                $birthdate[$j] = $date[2];
1745                                }
1746                                $j++;
1747                        }
1748                        $datecount = 0;
[1599]1749
[2]1750                        $data['result'] = 'ok';
1751                        $data['cc_full_add_contact_id'] = $id;
1752
1753                        /* Personal Data */
1754                        $data['personal']['cc_pd_photo'] = '../index.php?menuaction=contactcenter.ui_data.data_manager&method=get_photo&id='.$id;
1755                        $data['personal']['cc_pd_alias'] = $entry['alias'];
1756                        $data['personal']['cc_pd_given_names'] = $entry['given_names'];
1757                        $data['personal']['cc_pd_family_names'] = $entry['family_names'];
1758                        $data['personal']['cc_pd_full_name'] = $entry['names_ordered'];
1759                        $data['personal']['cc_pd_suffix'] = $entry['id_suffix'];
1760                        $data['personal']['cc_pd_birthdate_0'] = $birthdate[0];
1761                        $data['personal']['cc_pd_birthdate_1'] = $birthdate[1];
1762                        $data['personal']['cc_pd_birthdate_2'] = $birthdate[2];
1763                        //$data['personal']['cc_pd_sex'] = $entry['sex'] === 'M' ? 1 : ($entry['sex'] === 'F' ? 2 : 0);
1764                        $data['personal']['cc_pd_prefix'] = $entry['id_prefix'];
1765                        $data['personal']['cc_pd_gpg_finger_print'] = $entry['pgp_key'];
1766                        $data['personal']['cc_pd_notes'] = $entry['notes'];
1767
1768                        /* Addresses */
1769                        if (is_array($entry['addresses']))
1770                        {
1771                                $data['addresses'] = $entry['addresses'];
1772                        }
1773
1774                        /* Connections */
1775                        if (is_array($entry['connections']))
1776                        {
1777                                $data['connections'] = array();
1778                                foreach ($entry['connections'] as $connection)
1779                                {
1780                                        $type = $connection['id_type'];
1781                                        $i = count($data['connections'][$type]);
1782                                        $data['connections'][$type][$i]['id'] = $connection['id_connection'];
1783                                        $data['connections'][$type][$i]['name'] = $connection['connection_name'];
1784                                        $data['connections'][$type][$i]['value'] = $connection['connection_value'];
1785                                        $data['connections'][$type][$i]['is_default'] = $connection['connection_is_default'];
1786                                }
1787                        }
[1599]1788//                      print_r($data);
1789//OBSERVAR cc_department
[1517]1790                        /*Corporative*/
[1656]1791                        if($GLOBALS['phpgw_info']['server']['personal_contact_type']=='True'){
1792                                $data['personal']['cc_job_title'] = $entry['job_title'];
1793                                $data['personal']['cc_department'] = $entry['department'];
1794                                $data['personal']['cc_name_corporate'] = $entry['corporate_name'];
1795                                $data['personal']['cc_web_page'] = $entry['web_page'];
1796                        }
1797                       
[1599]1798
1799
[2]1800                        /* Relations */
[4753]1801
[2]1802                        echo serialize($data);
1803                }
1804
1805                /*!
1806
1807                        @function get_contact_full_add_const
1808                        @abstract Returns all the constant fields in Contact Full Add Window to the JS
1809                        @author Raphael Derosso Pereira
1810                */
1811                function get_contact_full_add_const()
1812                {
1813                        $data = array();
1814                        $boPeopleCatalog = CreateObject('contactcenter.bo_people_catalog');
1815                        $predata[] = $boPeopleCatalog -> get_all_prefixes();
1816                        $predata[] = $boPeopleCatalog -> get_all_suffixes();
1817                        $predata[] = $boPeopleCatalog -> get_all_addresses_types();
1818                        $predata[] = $boPeopleCatalog -> get_all_countries();
1819                        $predata[] = $boPeopleCatalog -> get_all_connections_types();
[4753]1820                        //$predata[] = $this->bo->catalog->get_all_relations_types();
[2]1821
1822                        $i = 0;
1823                        foreach($predata as $data_)
1824                        {
1825                                if ($data_)
1826                                {
1827                                        $data[$i] = $data_;
1828                                }
1829
1830                                $i++;
1831                        }
1832
1833                        if (count($data))
1834                        {
1835                                echo serialize($data);
1836                                return;
1837                        }
[1599]1838
[2]1839                        echo 0;
1840                }
[1599]1841
[2]1842                /*!
[1599]1843
[2]1844                        @function quick_add
1845                        @abstract Adds a new Contact using the Quick Add interface
1846                        @author Raphael Derosso Pereira
[1599]1847
[2]1848                        @param string $sdata Serialized data
1849                */
[3970]1850                function quick_add($sdata, $echo=true)
[2]1851                {
[1599]1852
[2]1853                        $sdata = str_replace('\\"', '"', $sdata);
1854                        $new_array = unserialize($sdata);
1855                        $tdata = array();
[1599]1856
[2]1857                        foreach($new_array as $tmp)
1858                                $tdata[] = $tmp;
[1599]1859
[2]1860                        if (!$tdata)
1861                        {
[3970]1862                            if ($echo)
1863                            {
[2]1864                                echo serialize(array(
1865                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1866                                        'status' => 'abort'
1867                                ));
[3970]1868                           
[2]1869                                return;
[3970]1870                            }
1871                            else
1872                                {
1873                                    return serialize(array(
1874                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1875                                        'status' => 'abort'
1876                                    ));
1877                                }
[2]1878                        }
[1599]1879
[3334]1880                        // verifica se email já existe!
[2]1881                        $boGroup = CreateObject('contactcenter.bo_group');
1882                        $contact = $boGroup->verify_contact($tdata[4]);
[1599]1883
[2]1884                        if($contact)
[1599]1885                        {
[2]1886                                $str_contact = "\r\n - ".implode("\r\n - ",$contact);
[1599]1887
[3970]1888                            if ($echo)
1889                            {
[2]1890                                echo serialize(array(
1891                                        'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1892                                        'status' => 'alreadyExists'
1893                                ));
[1599]1894
1895                                return;
[3970]1896                            }
1897                            else
1898                                {
1899                                    return serialize(array(
1900                                        'msg'       => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1901                                        'status'    => 'alreadyExists',
1902                                        'id_connection'  => $contact[1]
1903                                    ));
1904                                }
[2]1905                        }
1906
[3239]1907                        $data['alias'] = addslashes($tdata[0]);
1908                        $data['given_names'] = addslashes($tdata[1]);
1909                        $data['family_names'] = addslashes($tdata[2]);
[2]1910                        $data['connections']['default_phone']['connection_name'] = lang('Main');
1911                        $data['connections']['default_phone']['connection_value'] = $tdata[3];
1912                        $data['connections']['default_email']['connection_name'] = lang('Main');
1913                        $data['connections']['default_email']['connection_value'] = $tdata[4];
[3660]1914                        $data['is_quick_add'] = true;
[2]1915                        $boPeople = CreateObject('contactcenter.bo_people_catalog');
1916
[3970]1917                        $result = $boPeople->quick_add($data);
1918                        if ($result)
[1599]1919                        {
[3970]1920                            $this->page_info['changed'] = true;
[1599]1921
[3970]1922                            if ($echo)
1923                            {
1924                                echo serialize(array(
1925                                    'msg'    => lang('Entry added with success!'),
1926                                    'status' => 'ok'
1927                                ));
1928                            }
1929                            else
1930                                {
1931                                    return serialize(array(
1932                                        'msg'    => lang('Entry added with success!'),
1933                                        'status' => 'ok',
1934                                        'conn'   => $boPeople->get_connections($result)
1935                                    ));
1936                                }
[2]1937                        }
1938                        else
1939                        {
[3970]1940                            if ($echo)
1941                            {
1942                                echo serialize(array(
1943                                    'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1944                                    'status' => 'error'
1945                                ));
1946                            }
1947                            else
1948                                {
1949                                    echo serialize(array(
1950                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1951                                        'status' => 'error'
1952                                    ));
1953                                }
[2]1954                        }
1955
[1599]1956                        $this->save_session();
1957
[2]1958                }
1959
1960                /*!
[1599]1961
[2]1962                        @function add_group
1963                        @abstract Adds a new Group using the Add Group interface
1964                        @author Nilton Emilio Buhrer Neto
[1599]1965
[2]1966                        @param string $sdata Serialized data
1967                */
1968                function add_group($sdata)
1969                {
1970                        $sdata = str_replace('\\"', '"', $sdata);
1971                        $tdata = unserialize($sdata);
1972                        $new_tdata = array();
[1599]1973
[2]1974                        if (!$tdata)
1975                        {
1976                                echo serialize(array(
1977                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1978                                        'status' => 'abort'
1979                                ));
[1599]1980
[2]1981                                return;
1982                        }
[1599]1983
[2]1984                        foreach($tdata as $tmp)
1985                                $new_tdata[] = $tmp;
[1599]1986
1987                        $data['title'] = $new_tdata[0];
[2]1988                        $data['contact_in_list'] = $new_tdata[1];
1989                        $data['id_group'] = $new_tdata[2];
[3970]1990                        $acumulatedErrors = '';
[1599]1991
[3970]1992                        $actualCatalog = $this->get_actual_catalog();
1993                        for ($i = 0; $i < count($data['contact_in_list']); $i++)
1994                        {
1995                            if (preg_match('/ldap:.*:.*/', $data['contact_in_list'][$i])) // from ldap
1996                            {
1997                                list(, $level, $dn) = explode(':', $data['contact_in_list'][$i]);
1998
1999                                // pesquisa os dados, insere no catálogo e modifica
2000                                // a entrada em $data['contact_in_list'][$i]
2001                                $set_catalog = $this->set_catalog($level, false);
2002                                $contact_data = unserialize($this->get_catalog_add_contact($dn, false));
2003                                $tmp_contact[] = $contact_data[0][0];
2004                                $tmp_contact[] = $contact_data[1][0];
2005                                $tmp_contact[] = $contact_data[2][0];
2006                                $tmp_contact[] = $contact_data[3][0];
2007                                $tmp_contact[] = $contact_data[4][0];
2008
2009                                // Determinar o id_connection
2010                                $id_contact = unserialize($this->quick_add(serialize($tmp_contact), false));
2011
2012                                switch ($id_contact['status'])
2013                                {
2014                                    case 'ok' :
2015                                        foreach ($id_contact['conn'] as $connection)
2016                                        {
2017                                            if ($connection['id_type'] == 1)
2018                                            {
2019                                                $data['contact_in_list'][$i] = $connection['id_connection'];
2020                                            }
2021                                        }
2022                                        break;
2023
2024                                    case 'alreadyExists': // if e-mail exists get their id_connection from people_catalog
2025                                        $data['contact_in_list'][$i] = $id_contact['id_connection'];
2026
2027                                    default:
2028                                        $acumulatedErrors += $id_contact['msg']."\n";
2029                                }
2030                                unset($tmp_contact);
2031
2032                            }
2033                        }
2034                        $set_catalog = $this->set_catalog($actualCatalog['data'], false); // retorna ao catálogo original.
[2]2035                        $boGroup = CreateObject('contactcenter.bo_group_manager');
2036                        $id = $boGroup -> add_group($data);
[1599]2037
[2]2038                        if ($id)
2039                        {
2040                                $this->page_info['changed'] = true;
[4753]2041
2042                                echo serialize(array(
2043                                        'msg'    => lang('Entry added with success!'),
2044                                        'status' => 'ok'
2045                                ));
[2]2046                        }
2047                        else
2048                        {
2049                                echo serialize(array(
[4753]2050                                        'msg'    => lang("Problems on adding your Group. Be sure that a group with this name do not exists").
2051                                            "\n".$acumulatedErrors,
[2]2052                                        'status' => 'error'
2053                                ));
2054                        }
2055
2056                        $this->save_session();
2057                }
2058
2059                /*!
[1599]2060
[2]2061                        @function remove_group
2062                        @abstract Removes a group if the user has the right to do it
[1599]2063                        @author Nilton Emilio Buhrer Neto
[2]2064                        @param (integer) $id The id to be removed
[1599]2065
[2]2066                */
2067                function remove_group($id)
[1599]2068                {
2069                                $soGroup = CreateObject('contactcenter.so_group');
[2]2070                                $data = array ('id_group' => $id);
2071                                if($soGroup -> delete($data)) {
2072                                        echo serialize(array(
2073                                                'msg'    => lang('Removed Entry ID '.$id.'!'),
2074                                                'status' => 'ok'
[1599]2075                                        ));
[2]2076                                }
2077                                else {
2078                                        echo serialize(array(
[4753]2079                                                'msg'    => lang("Could\'nt remove group with id: %1", $id),
[2]2080                                                'status' => 'error'
2081                                        ));
2082                                }
2083
[1599]2084                        $this->save_session();
[2]2085                }
2086
2087
2088                function remove_all_entries (){
[1599]2089
[2]2090                        $error = false;
2091                        $this->all_entries = $this->bo->catalog->get_all_entries_ids();
2092
2093                        foreach($this->all_entries as $index => $id) {
2094                                $result = $this->bo->catalog->remove_single_entry($id);
2095                                if(!$result) {
2096                                        $error = true;
[1599]2097                                        break;
[2]2098                                }
2099                        }
2100
2101                        if(!$error) {
2102                                echo serialize(array(
2103                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
2104                                        'status' => 'ok'
2105                                ));
[1599]2106                        }
[2]2107                        else {
2108                                echo serialize(array(
2109                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
2110                                        'status' => 'fail'
2111                                ));
2112                        }
2113
2114                        $this->save_session();
2115                }
2116
2117                /*!
[1599]2118
[2]2119                        @function remove_entry
2120                        @abstract Removes an entry if the user has the right to do it
2121                        @author Raphael Derosso Pereira
[1599]2122
[2]2123                        @param (integer) $id The id to be removed
[1599]2124
[2]2125                */
2126                function remove_entry ($id)
2127                {
2128                        if (!is_int($id))
2129                        {
2130                                echo lang('Couldn\'t remove entry! Problem passing data to the server. Please inform admin!');
2131                                return;
2132                        }
[1599]2133
[2]2134                        $this->page_info['changed'] = true;
2135                        $result = $this->bo->catalog->remove_single_entry($id);
[1599]2136
[2]2137                        if ($result)
2138                        {
2139                                if ($pos = array_search($id, $this->page_info['actual_entries']))
2140                                {
2141                                        unset($this->page_info['actual_entries'][$pos]);
2142                                }
[1599]2143
[2]2144                                $temp = false;
2145                                reset($this->page_info['actual_entries']);
2146                                foreach($this->page_info['actual_entries'] as $t)
2147                                {
2148                                        $temp[] = $t;
2149                                }
[1599]2150
[2]2151                                $this->page_info['actual_entries'] = $temp;
2152
2153                                echo serialize(array(
2154                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
2155                                        'status' => 'ok'
2156                                ));
2157                        }
2158                        else
2159                        {
2160                                echo serialize(array(
2161                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
2162                                        'status' => 'fail'
2163                                ));
2164                        }
[1599]2165
[2]2166                        $this->save_session();
2167                }
2168
[1599]2169
[2]2170                /*!
[1599]2171
[2]2172                        @function post_full_add
2173                        @abstract Saves all the information altered/entered in the Full Add
2174                                window
2175                        @author Raphael Derosso Pereira
2176
2177                */
2178                function post_full_add()
2179                {
[285]2180                        $data =  $_POST['data'];
[1599]2181                        // Exceptions!!! utf8 special chars.
[285]2182                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
2183                        $data = unserialize(str_replace('\\"', '"', $data));
[2]2184                        $this -> bo -> catalog = CreateObject('contactcenter.bo_people_catalog');
2185
2186                        if (!is_array($data))
2187                        {
2188                                echo serialize(array(
2189                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
2190                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
2191                                                          'Sorry for the inconvenient!<br><br>'.
2192                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
2193                                        'status' => 'fatal'
2194                                ));
2195                                return;
2196                        }
2197//                      print_r($data);
2198//                      echo '<br><br>';
2199
2200                        $replacer = $data['commercialAnd'];
2201                        unset($data['commercialAnd']);
2202                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
2203                        {
2204                                echo serialize(array(
2205                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
2206                                        'status' => 'fatal'
2207                                ));
[1599]2208
[2]2209                                return;
2210                        }
2211
2212                        if ($data['id_contact'])
2213                        {
2214                                $id = $data['id_contact'];
2215                                $id_photo = $id;
2216                                unset($data['id_contact']);
2217                        }
2218                        else
2219                        {
2220                                $id_photo = '_new_';
2221                        }
[1599]2222
2223                        /*
2224                         * Process Photo, if available
[2]2225                         */
2226                        $sleep_count = 0;
2227                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2228                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2229                        {
2230                                sleep(1);
2231                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2232                                $sleep_count++;
2233
2234                                if ($sleep_count > 35)
2235                                {
2236                                        // TODO
2237                                        return;
2238                                }
2239                        }
2240                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
[1599]2241
[2]2242                        if (isset($this->page_info['photos'][$id_photo]))
2243                        {
2244                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2245                                {
2246                                        echo serialize(array(
2247                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2248                                                'status' => $this->page_info['photos'][$id_photo]['status']
2249                                        ));
2250
2251                                        return;
2252                                }
2253
2254                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2255                                unset($this->page_info['photos'][$id_photo]);
2256                                $this->save_session();
2257                        }
[1599]2258
[2]2259                        /*
2260                         * Arrange Date so it gets inserted correctly
2261                         */
[1599]2262
[2]2263                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]2264
[2]2265                        $j = 0;
2266                        for ($i = 0; $i < 5; $i+=2)
2267                        {
2268                                switch($dateformat{$i})
2269                                {
2270                                        case 'Y':
2271                                                $date[$j]['size'] = 4;
2272                                                $date[$j]['digit'] = 'Y';
2273                                                break;
2274
2275                                        case 'm':
2276                                        case 'M':
2277                                                $date[$j]['size'] = 2;
2278                                                $date[$j]['digit'] = 'M';
2279                                                break;
2280
2281                                        case 'd':
2282                                                $date[$j]['size'] = 2;
2283                                                $date[$j]['digit'] = 'D';
2284                                }
2285                                $j++;
2286                        }
2287                        $datecount = 0;
2288
2289                        /* Verify Data and performs insertion/update */
[3018]2290                        foreach($data as $field => $value)
[2]2291                        {
[4754]2292                                $dataConn = $data['connections'];
2293                                $aa = count($dataConn);
[1599]2294
[4754]2295                                for($i = 0; $i < $aa; $i++ )
2296                                {
2297                                    if($dataConn['connection'.$i]['connection_is_default'] == "TRUE")
2298                                    {
2299                                        $email = $dataConn['connection'.$i]['connection_value'];
2300                                    }
2301                                }
2302                                // verifica se email já existe!
2303                                $boGroup = CreateObject('contactcenter.bo_group');
2304                                $contact = $boGroup->verify_contact($email);
2305                                if($contact)
2306                                {
2307                                    $str_contact = "\r\n - ".implode("\r\n - ",$contact);
2308                                    echo serialize(array(
2309                                    'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
2310                                    'status' => 'alreadyExists'
2311                                    ));
2312                                    return;
2313                                }
2314
[2]2315                                switch($field)
2316                                {
[3018]2317                                        case 'names_ordered':
[3247]2318                                                $data[$field] = addslashes(rawurldecode($value));
[1517]2319                                        case 'corporate_name':
2320                                        case 'job_title':
2321                                        case 'department':
2322                                        case 'web_page':
[2]2323                                        case 'alias':
2324                                        case 'given_names':
2325                                        case 'family_names':
2326                                        case 'pgp_key':
2327                                        case 'notes':
[3247]2328                                                $data[$field] = addslashes(rawurldecode($data[$field]));
[2]2329                                                break;
[1599]2330
[2]2331                                        case 'id_status':
2332                                        case 'id_prefix':
2333                                        case 'id_suffix':
2334                                                if ($data[$field] == 0)
2335                                                {
2336                                                        unset($data[$field]);
2337                                                }
2338                                                break;
[1599]2339
[2]2340                                        case 'birthdate_0':
2341                                        case 'birthdate_1':
2342                                        case 'birthdate_2':
[3310]2343                                        case 'birthdate':
2344                                       
2345                                                if($field == 'birthdate'){
2346                                                        $array_birth = explode("/",$data[$field]);                                                     
2347                                                        $date['value'][2] = $array_birth[2];
2348                                                        $date['value'][1] = $array_birth[1];
2349                                                        $date['value'][0] = $array_birth[0];                                           
2350                                                }else{                                 
2351                                                        switch($date[$datecount]['digit'])
2352                                                        {
2353                                                                case 'Y':
2354                                                                        $date['value'][2] = (int) $data[$field];
2355                                                                        break;
2356       
2357                                                                case 'M':
2358                                                                        $date['value'][0] = (int) $data[$field];
2359                                                                        break;
2360       
2361                                                                case 'D':
2362                                                                        $date['value'][1] = (int) $data[$field];
2363                                                                        break;
2364                                                        }
2365                                                        unset($data[$field]);
[2]2366                                                }
[3310]2367                                               
[2]2368                                                $datecount++;
2369
2370                                                if ($datecount != 3)
2371                                                {
2372                                                        break;
2373                                                }
[1599]2374
[3310]2375                                                if($date['value'][0] =='' && $date['value'][1] =='' && $date['value'][2] ==''){
2376                                                        $data['birthdate'] = null;
2377                                                        break;
2378                                                }
[2]2379                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2380                                                {
2381                                                        echo serialize(array(
2382                                                                'msg' => lang('Invalid Date'),
2383                                                                'status' => 'invalid_data'
2384                                                        ));
2385                                                        return;
2386                                                }
[3310]2387                                                if( $date['value'][2] != "" && $date['value'][0] != "" && $date['value'][1] != ""){
2388                                                        $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2389                                                }
[2]2390                                                break;
2391
2392                                        case 'sex':
2393                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2394                                                {
2395                                                        echo serialize(array(
2396                                                                'msg' => lang('Invalid Sex'),
2397                                                                'status' => 'invalid_data'
2398                                                        ));
2399                                                        return;
2400                                                }
2401                                                break;
2402
2403
2404                                        case 'addresses':
2405                                                /* Insert new cities/states */
2406                                                if (isset($value['new_states']))
2407                                                {
2408                                                        foreach($value['new_states'] as $type => $state_info)
2409                                                        {
2410                                                                $index = 'address'.$type;
[1599]2411
[2]2412                                                                $id_state = $this->bo->catalog->add_state($state_info);
2413                                                                $data['addresses'][$index]['id_state'] = $id_state;
2414
2415                                                                if ($value['new_cities'][$type])
2416                                                                {
[3018]2417                                                                        $data[$field]['new_cities'][$type]['id_state'] = $id_state;
[2]2418                                                                }
2419                                                        }
2420
2421                                                        unset($data['addresses']['new_states']);
2422                                                }
2423
2424                                                if (isset($value['new_cities']))
2425                                                {
2426                                                        foreach($value['new_cities'] as $type => $city_info)
2427                                                        {
2428                                                                $index = 'address'.$type;
[1599]2429
[2]2430                                                                $id_city = $this->bo->catalog->add_city($city_info);
2431                                                                $data['addresses'][$index]['id_city'] = $id_city;
2432                                                        }
2433
2434                                                        unset($data['addresses']['new_cities']);
2435                                                }
2436
2437                                        break;
2438
[3198]2439                                        case 'birthdate':
[2]2440                                        case 'connections':
[1687]2441                                        case 'photo':
[2]2442                                                /* Does nothing... */
2443                                                break;
2444
2445                                        default:
2446                                                echo serialize(array(
2447                                                        'msg' => lang('Invalid field: ').$field,
2448                                                        'status' => 'invalid_data'
2449                                                ));
2450                                                return;
2451                                }
2452                        }
2453
2454                        if (!is_null($id) and $id !== '')
2455                        {
[4753]2456                                $id = $this->bo->catalog->update_single_info($id, $data);
[2]2457                                $result = array(
2458                                        'msg' => lang('Updated Successfully!'),
2459                                        'status' => 'ok'
2460                                );
2461                        }
2462                        else
2463                        {
[3018]2464                                $id = $this->bo->catalog->add_single_entry($data);
[2]2465                                $result = array(
2466                                        'msg' => lang('Entry Added Successfully!'),
2467                                        'status' => 'ok'
2468                                );
2469                        }
[1599]2470
[2]2471                        if (!($id))
2472                        {
2473                                $result = array(
2474                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2475                                                   'Report the problem to the Administrator.'),
2476                                        'status' => 'fail'
2477                                );
2478                        }
2479
2480                        echo serialize($result);
2481                }
2482
[1496]2483
2484                function post_full_add_shared()
2485                {
2486                        $data =  $_POST['data'];
[1599]2487                        // Exceptions!!! utf8 special chars.
[1496]2488                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
2489                        $data = unserialize(str_replace('\\"', '"', $data));
2490                        $this -> bo -> catalog = CreateObject('contactcenter.bo_shared_people_manager');
2491
2492                        if (!is_array($data))
2493                        {
2494                                echo serialize(array(
2495                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
2496                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
2497                                                          'Sorry for the inconvenient!<br><br>'.
2498                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
2499                                        'status' => 'fatal'
2500                                ));
2501                                return;
2502                        }
2503//                      print_r($data);
2504//                      echo '<br><br>';
2505
2506                        $replacer = $data['commercialAnd'];
2507                        unset($data['commercialAnd']);
2508                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
2509                        {
2510                                echo serialize(array(
2511                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
2512                                        'status' => 'fatal'
2513                                ));
[1599]2514
[1496]2515                                return;
2516                        }
2517
2518                        if ($data['id_contact'])
2519                        {
2520                                $id = $data['id_contact'];
2521                                $id_photo = $id;
2522                                unset($data['id_contact']);
2523                        }
2524                        else
2525                        {
2526                                $id_photo = '_new_';
2527                        }
2528
2529                        if ($data['owner'])
2530                        {
2531                                $owner = $data['owner'];
2532                                unset($data['owner']);
2533                        }
[1599]2534                        /*
2535                         * Process Photo, if available
[1496]2536                         */
2537                        $sleep_count = 0;
2538                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2539                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2540                        {
2541                                sleep(1);
2542                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2543                                $sleep_count++;
2544
2545                                if ($sleep_count > 35)
2546                                {
2547                                        // TODO
2548                                        return;
2549                                }
2550                        }
2551                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
[1599]2552
[1496]2553                        if (isset($this->page_info['photos'][$id_photo]))
2554                        {
2555                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2556                                {
2557                                        echo serialize(array(
2558                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2559                                                'status' => $this->page_info['photos'][$id_photo]['status']
2560                                        ));
2561
2562                                        return;
2563                                }
2564
2565                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2566                                unset($this->page_info['photos'][$id_photo]);
2567                                $this->save_session();
2568                        }
[1599]2569
[1496]2570                        /*
2571                         * Arrange Date so it gets inserted correctly
2572                         */
[1599]2573
[1496]2574                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
[1599]2575
[1496]2576                        $j = 0;
2577                        for ($i = 0; $i < 5; $i+=2)
2578                        {
2579                                switch($dateformat{$i})
2580                                {
2581                                        case 'Y':
2582                                                $date[$j]['size'] = 4;
2583                                                $date[$j]['digit'] = 'Y';
2584                                                break;
2585
2586                                        case 'm':
2587                                        case 'M':
2588                                                $date[$j]['size'] = 2;
2589                                                $date[$j]['digit'] = 'M';
2590                                                break;
2591
2592                                        case 'd':
2593                                                $date[$j]['size'] = 2;
2594                                                $date[$j]['digit'] = 'D';
2595                                }
2596                                $j++;
2597                        }
2598                        $datecount = 0;
2599
2600                        /* Verify Data and performs insertion/update */
2601                        foreach($data as $field => &$value)
2602                        {
[4754]2603
2604                                $dataConn = $data['connections'];
2605                                $aa = count($dataConn);
2606
2607                                for($i = 0; $i < $aa; $i++ )
2608                                {
2609                                    if($dataConn['connection'.$i]['connection_is_default'] == "TRUE")
2610                                    {
2611                                        $email = $dataConn['connection'.$i]['connection_value'];
2612                                    }
2613                                }
2614                                // verifica se email já existe!
2615                                $boGroup = CreateObject('contactcenter.bo_group');
2616                                $contact = $boGroup->verify_shared_contact($owner,$email);
2617                                if($contact)
2618                                {
2619                                    $str_contact = "\r\n - ".implode("\r\n - ",$contact);
2620                                    echo serialize(array(
2621                                    'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
2622                                    'status' => 'alreadyExists'
2623                                    ));
2624                                    return;
2625                                }
2626
[1496]2627                                if ($value == '' or is_null($value))
2628                                {
2629                                        unset($data[$field]);
2630                                        continue;
2631                                }
[1599]2632
[1496]2633                                switch($field)
2634                                {
[3341]2635                                        case 'corporate_name':
2636                                        case 'job_title':
2637                                        case 'department':
2638                                        case 'web_page':
[1496]2639                                        case 'alias':
2640                                        case 'given_names':
2641                                        case 'family_names':
[4717]2642                                        case 'groups':
2643                            $groups = $data['groups'];
2644                            unset($data['groups']);
2645                            break;
[1496]2646                                        case 'names_ordered':
2647                                        case 'pgp_key':
2648                                        case 'notes':
2649                                        case 'photo':
[3018]2650                                                $data[$field] = urldecode( $value );
[1496]2651                                                break;
[1599]2652
[1496]2653                                        case 'id_status':
2654                                        case 'id_prefix':
2655                                        case 'id_suffix':
2656                                                if ($data[$field] == 0)
2657                                                {
2658                                                        unset($data[$field]);
2659                                                }
2660                                                break;
[1599]2661
[1496]2662                                        case 'birthdate_0':
2663                                        case 'birthdate_1':
2664                                        case 'birthdate_2':
[1599]2665
[1496]2666                                                switch($date[$datecount]['digit'])
2667                                                {
2668                                                        case 'Y':
2669                                                                $date['value'][2] = (int) $data[$field];
2670                                                                break;
2671
2672                                                        case 'M':
2673                                                                $date['value'][0] = (int) $data[$field];
2674                                                                break;
2675
2676                                                        case 'D':
2677                                                                $date['value'][1] = (int) $data[$field];
2678                                                                break;
2679                                                }
2680                                                unset($data[$field]);
2681                                                $datecount++;
2682
2683                                                if ($datecount != 3)
2684                                                {
2685                                                        break;
2686                                                }
[1599]2687
[1496]2688                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2689                                                {
2690                                                        echo serialize(array(
2691                                                                'msg' => lang('Invalid Date'),
2692                                                                'status' => 'invalid_data'
2693                                                        ));
2694                                                        return;
2695                                                }
[1599]2696
[1496]2697                                                $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2698                                                break;
2699
2700                                        case 'sex':
2701                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2702                                                {
2703                                                        echo serialize(array(
2704                                                                'msg' => lang('Invalid Sex'),
2705                                                                'status' => 'invalid_data'
2706                                                        ));
2707                                                        return;
2708                                                }
2709                                                break;
2710
2711
2712                                        case 'addresses':
2713                                                /* Insert new cities/states */
2714                                                if (isset($value['new_states']))
2715                                                {
2716                                                        foreach($value['new_states'] as $type => $state_info)
2717                                                        {
2718                                                                $index = 'address'.$type;
[1599]2719
[1496]2720                                                                $id_state = $this->bo->catalog->add_state($state_info);
2721                                                                $data['addresses'][$index]['id_state'] = $id_state;
2722
2723                                                                if ($value['new_cities'][$type])
2724                                                                {
2725                                                                        $value['new_cities'][$type]['id_state'] = $id_state;
2726                                                                }
2727                                                        }
2728
2729                                                        unset($data['addresses']['new_states']);
2730                                                }
2731
2732                                                if (isset($value['new_cities']))
2733                                                {
2734                                                        foreach($value['new_cities'] as $type => $city_info)
2735                                                        {
2736                                                                $index = 'address'.$type;
[1599]2737
[1496]2738                                                                $id_city = $this->bo->catalog->add_city($city_info);
2739                                                                $data['addresses'][$index]['id_city'] = $id_city;
2740                                                        }
2741
2742                                                        unset($data['addresses']['new_cities']);
2743                                                }
2744
2745                                        break;
2746
2747                                        case 'connections':
2748                                                /* Does nothing... */
[4754]2749                                                $aaaa = 1111;
[1496]2750                                                break;
2751
2752                                        default:
2753                                                echo serialize(array(
2754                                                        'msg' => lang('Invalid field: ').$field,
2755                                                        'status' => 'invalid_data'
2756                                                ));
2757                                                return;
2758                                }
2759                        }
2760
2761                        $code = '$id = $this->bo->catalog->';
2762
2763                        if (!is_null($id) and $id !== '')
2764                        {
2765                                $code .= $code.'update_single_info($id, $data);';
2766                                $result = array(
2767                                        'msg' => lang('Updated Successfully!'),
2768                                        'status' => 'ok'
2769                                );
2770                        }
2771                        else
2772                        {
2773                                $code .= 'add_single_entry($data,'.$owner.');';
2774                                $result = array(
2775                                        'msg' => lang('Entry Added Successfully!'),
2776                                        'status' => 'ok'
2777                                );
2778                        }
[1599]2779
[1496]2780                        eval($code);
2781
2782                        if (!($id))
2783                        {
2784                                $result = array(
2785                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2786                                                   'Report the problem to the Administrator.'),
2787                                        'status' => 'fail'
2788                                );
2789                        }
2790
2791                        echo serialize($result);
2792}
[2]2793                /*!
[1599]2794
[2]2795                        @function post_photo
2796                        @abstract Wrapper to post a photo without reload a page.
2797                        @author Raphael Derosso Pereira
2798
2799                */
2800                function post_photo($id)
2801                {
2802                        //print_r($_FILES);
2803                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'y'));
[1599]2804
[2]2805                        if (!is_array($_FILES) and is_array(!$_FILES['cc_pd_photo']))
2806                        {
2807                                $this->page_info['photos'][$id]['status'] = 'no_upload';
2808                                $this->page_info['photos'][$id]['msg'] = lang('No Photos uploaded to Server.');
[1599]2809
[2]2810                                $this->save_session();
2811                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2812                                return;
2813                        }
2814
2815                        if (!function_exists('imagecreate'))
2816                        {
2817                                $this->page_info['photos'][$id]['status'] = 'no_GD_lib';
2818                                $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]2819
[2]2820                                $this->save_session();
2821                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2822                                return;
2823                        }
2824
2825                        // TODO: Get Max Size from preferences!
2826                        if ($_FILES['cc_pd_photo']['size'] > 1000000)
2827                        {
2828                                $this->page_info['photos'][$id]['status'] = 'too_large';
2829                                $this->page_info['photos'][$id]['msg'] = lang('Image too large! ContactCenter limits the image size to 1 Mb');
2830
2831                                $this->save_session();
2832                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2833                                return;
2834                        }
2835
2836                        if ($_FILES['cc_pd_photo']['error'])
2837                        {
2838                                $this->page_info['photos'][$id]['status'] = 'error';
2839                                $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'];
2840
2841                                $this->save_session();
2842                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2843                                return;
2844                        }
[1599]2845
[2]2846                        switch($_FILES['cc_pd_photo']['type'])
2847                        {
2848                                case 'image/jpeg':
2849                                case 'image/pjpeg':
2850                                        $src_img = imagecreatefromjpeg($_FILES['cc_pd_photo']['tmp_name']);
2851                                        if ($src_img == '')
2852                                        {
2853                                                $bogus = true;
2854                                        }
2855                                        break;
2856
2857                                case 'image/png':
2858                                case 'image/x-png':
2859                                        $src_img = imagecreatefrompng($_FILES['cc_pd_photo']['tmp_name']);
2860                                        if ($src_img == '')
2861                                        {
2862                                                $bogus = true;
2863                                        }
2864                                        break;
2865
2866                                case 'image/gif':
2867                                        $src_img = imagecreatefromgif($_FILES['cc_pd_photo']['tmp_name']);
2868                                        if ($src_img == '')
2869                                        {
2870                                                $bogus = true;
2871                                        }
2872                                        break;
2873
2874                                default:
[1599]2875
[2]2876                                        $this->page_info['photos'][$id]['status'] = 'invalid_image';
2877                                        $this->page_info['photos'][$id]['msg'] = lang('The file must be an JPEG, PNG or GIF Image.');
2878
2879                                        $this->save_session();
2880                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2881                                        return;
2882                        }
2883
2884                        if ($bogus)
2885                        {
2886                                        $this->page_info['photos'][$id]['status'] = 'invalid_file';
2887                                        $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
[1599]2888
[2]2889                                        $this->save_session();
2890                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2891                                        return;
2892                        }
[1599]2893
[2]2894                        $img_size = getimagesize($_FILES['cc_pd_photo']['tmp_name']);
2895                        $dst_img = imagecreatetruecolor(60, 80);
[1599]2896
[2]2897                        if (!imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 60, 80, $img_size[0], $img_size[1]))
2898                        {
2899                                $this->page_info['photos'][$id]['status'] = 'invalid_file';
2900                                $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
[1599]2901
[2]2902                                $this->save_session();
2903                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2904                                return;
2905                        }
[1599]2906
[2]2907                        ob_start();
2908                        imagepng($dst_img);
2909                        $this->page_info['photos'][$id]['content'] = ob_get_contents();
2910                        ob_end_clean();
2911
2912                        $this->page_info['photos'][$id]['status'] = 'changed';
2913                        $this->page_info['photos'][$id]['msg'] = lang('Photo Successfully Updated!');
2914
2915                        $this->save_session();
[1599]2916
[2]2917                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2918
2919                        imagedestroy($src_img);
2920                        imagedestroy($dst_img);
2921                        echo 'ok';
2922                        return;
2923                }
2924
2925
2926                /*!
2927
2928                        @function get_photo
2929                        @abstract Returns the photo to the browser
2930                        @author Raphael Derosso Pereira
2931
2932                */
2933                function get_photo($id)
2934                {
2935                        $fields = $this->bo->catalog->get_fields(false);
2936                        $fields['photo'] = true;
[1599]2937
[2]2938                        $contact = $this->bo->catalog->get_single_entry($id, $fields);
2939
2940                        if (!$contact['photo'])
2941                        {
2942                                header('Content-type: image/png');
2943                                echo file_get_contents(PHPGW_INCLUDE_ROOT.'/contactcenter/templates/default/images/photo_celepar.png');
2944                                return;
2945                        }
[1599]2946
[2]2947                        header('Content-type: image/jpeg');
2948                        $photo = imagecreatefromstring ($contact['photo']);
2949                        $width = imagesx($photo);
2950                        $height = imagesy($photo);
[16]2951                        $twidth = 70;
2952                        $theight = 90;
[2]2953                        $small_photo = imagecreatetruecolor ($twidth, $theight);
2954                        imagecopyresampled($small_photo, $photo, 0, 0, 0, 0,$twidth, $theight, $width, $height);
[4753]2955                        imagejpeg($small_photo,"",100);
[2]2956                        return;
2957                }
[1599]2958
[2]2959                /*!
[1599]2960
[2]2961                        @function get_states
2962                        @abstract Echos a serialized array containing all the states for the given country
2963                        @author Raphael Derosso Pereira
2964
2965                        @params $id_country The ID of the Country that contains the requested states
2966
2967                */
2968                function get_states($id_country)
2969                {
2970                        $states = $this->bo->catalog->get_all_states($id_country);
2971
2972                        if (!$states)
2973                        {
2974                                $result = array(
2975                                        'msg'    => lang('No States found for this Country.'),
2976                                        'status' => 'empty'
2977                                );
2978
2979                                echo serialize($result);
2980                                return;
2981                        }
[1599]2982
[2]2983                        $result = array(
2984                                'msg'    => lang('States Successfully retrieved!'),
2985                                'status' => 'ok'
2986                        );
[1599]2987
[2]2988                        foreach ($states as $state_info)
2989                        {
2990                                $result['data'][$state_info['id_state']] = $state_info['name'];
2991
2992                                if ($state_info['symbol'])
2993                                {
2994                                        $result['data'][$state_info['id_state']] .= ', '.$state_info['symbol'];
2995                                }
2996                        }
2997
2998                        echo serialize($result);
2999                }
3000
3001                /*!
3002
3003                        @function get_cities
3004                        @abstract Echos a serialized array containing all the cities of a given state
3005                        @author Raphael Derosso Pereira
3006
3007                        @param $id_country The ID of the Country that has the specified Cities (in case the
3008                                Country doesn't have any States)
3009                        @param $id_state The ID of the State that has the Cities requested
3010
3011                */
3012                function get_cities($id_country, $id_state=false)
3013                {
3014                        $cities = $this->bo->catalog->get_all_cities($id_country, $id_state);
3015
3016                        if (!$cities)
3017                        {
3018                                $result = array(
3019                                        'msg'    => lang('No Cities found for this State.'),
3020                                        'status' => 'empty'
3021                                );
3022
3023                                echo serialize($result);
3024                                return;
3025                        }
[1599]3026
[2]3027                        $result = array(
3028                                'msg'    => lang('Cities Successfully retrieved!'),
3029                                'status' => 'ok'
3030                        );
[1599]3031
[2]3032                        foreach ($cities as $city_info)
3033                        {
3034                                $result['data'][$city_info['id_city']] = $city_info['name'];
3035                        }
[1599]3036
[2]3037                        echo serialize($result);
3038                }
3039
[3282]3040                //Traduz o campo na busca completa por entradas no catálogo do usuário.
3041                function aux_full_search ($field,$isldap) {
3042                        $retorno = '';
3043                        if($isldap) {
3044                                switch($field) {
3045                                        case 'mail':
3046                                                $retorno = 'contact.connection.mail';
3047                                                break;
3048                                        case 'phone':
3049                                                $retorno = 'contact.connection.phone';
3050                                                break;
3051                                }
3052                        }
3053                        else {
3054                                switch($field) {
3055                                        case 'corporate':
3056                                                $retorno = 'contact.corporate_name';
3057                                                break;
3058                                        case 'mail':
3059                                        case 'phone':
3060                                                $retorno = 'contact.contact_connection.connection.connection_value';
3061                                                break;
3062                                }
3063                        }
3064                        return $retorno;
3065                }
[2]3066
3067                /*!
[1599]3068
[2]3069                        @function search
3070                        @abstract Echos a serialized array containing the IDs
3071                                of the entries that matches the search argument
3072                        @author Raphael Derosso Pereira
[3334]3073                        @author Mário César Kolling (external catalogs)
[2]3074
3075                        @param string $str_data A serialized array with two informations:
3076                                $data = array(
3077                                        'search_for' => (string),
3078                                        'recursive'  => (boolean),
3079                                );
3080
3081                */
[285]3082                // SERPRO
[2]3083                function search($str_data)
3084                {
3085                        $data = unserialize($str_data);
[284]3086                        // It's an external catalog?
3087                        $external = $this->bo->is_external($this->page_info['actual_catalog']);
[3282]3088                        $full_search = isset($data['full_search'])?$data['full_search']:false;
3089                       
3090                        if (!is_array($data) || (!$data['search_for'] && !$full_search) || !is_array($data['fields']))
[1599]3091                        {
[4753]3092                                echo serialize(array(
3093                                        'msg'    => lang('Invalid parameters'),
3094                                        'status' => 'abort'
3095                                ));
[1599]3096
[4753]3097                                return array('error' => lang('Invalid parameters'));
[1599]3098                        }
3099
3100
[284]3101                        /*
3102                         * TODO: look into the database to discover the database's encoding and convert the search_for field accordingly
3103                         */
3104                        // Support search parameters with accentuation
3105                        if ($this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
[1599]3106/**rev 104**/
3107                                //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
[503]3108                                $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
[752]3109                                $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
3110                                $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
[1599]3111/****/
[284]3112                        {
3113
[4753]3114                                $data['search_for'] = utf8_encode($data['search_for']);
[284]3115                        }
3116
[1599]3117                        $rules  = array();
3118
3119                        if ($data['search_for'] === '*')
3120                        {
3121                                $rules = array(
3122                                        0 => array(
3123                                                'field' => $data['fields']['search'],
3124                                                'type'  => 'LIKE',
3125                                                'value' => '%'
3126                                        )
3127                                );
3128                        }
3129                        else
3130                        {
[4753]3131                                $names = explode(' ', $data['search_for']);
[1599]3132
[4753]3133                                if (!is_array($names))
3134                                {
3135                                        if(!$full_search) {
3136                                                echo serialize(array(
3137                                                        'msg'    => lang('Invalid Search Parameter'),
3138                                                        'status' => 'abort'
3139                                                ));
3140                                                exit;
3141                                        }
3142                                        else
3143                                                $names = array();
[1599]3144
[4753]3145                                }
[1599]3146
[284]3147                                if (!$external && $this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
[1599]3148/**rev 104**/
3149                                        //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
[503]3150                                        $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
[1599]3151                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
[752]3152                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager' )
[1599]3153/*****/
[284]3154                                {
3155                                        /*
3156                                         * Restrict the returned contacts search to objectClass = phpgwAccount,
[880]3157                                         * must have attibute phpgwAccountStatus, phpgwAccountVisible != -1
[284]3158                                         */
[3282]3159                                       
[284]3160                                        $rules = array(
3161                                                0 => array(
3162                                                        'field' => 'contact.object_class',
3163                                                        'type'  => '=',
3164                                                        'value' => 'phpgwAccount'
3165                                                ),
3166                                                1 => array(
3167                                                        'field' => 'contact.account_status',
3168                                                        'type'  => 'iLIKE',
3169                                                        'value' => '%'
3170                                                ),
[1599]3171/**rev 104**/
3172                                                ///
3173                                                //1 => array(
[284]3174                                                2 => array(
[1599]3175/*****/
[284]3176                                                        'field' => 'contact.account_visible',
3177                                                        'type'  => '!=',
3178                                                        'value' => '-1'
[1599]3179/**rev 104**/
3180        /*                                      ),
3181                                                2 => array(
3182                                                        'field' => 'contact.object_class',
3183                                                        'type'  => '=',
3184                                                        'value' => 'inetOrgPerson'
3185/****/
[284]3186                                                ),
3187                                        );
[3282]3188
[4753]3189                                        if($full_search) {
3190                                            foreach($full_search as $field => $value) {
3191                                                    if(trim($value)!='')
3192                                                            array_push($rules,array(
3193                                                                                            'field' => $this->aux_full_search($field,true),
3194                                                                                            'type' => 'LIKE',
3195                                                                                            'value' => '*'.$value.'*'
3196                                                                                            ));
3197                                            }
3198                                        }
[3282]3199
[284]3200                                }
[4274]3201                                else if(!$external && $full_search) {
[3282]3202                                       
3203                                        foreach($full_search as $field => $value) {
3204                                                if(trim($value)!='')
3205                                                        array_push($rules,array(
3206                                                                                        'field' => $this->aux_full_search($field,false),
[4753]3207                                                                                        'type' => 'iLIKE',
3208                                                                                        'value' => '%'.$value.'%'
[3282]3209                                                                                        ));
[4753]3210                                        }
[3282]3211                               
3212                                }
[284]3213
[1599]3214                                foreach ($names as $name)
3215                                {
3216                                        if ($name != '')
3217                                        {
3218                                                array_push($rules, array(
3219                                                        'field' => $data['fields']['search'],
[4753]3220                                                        'type'  => 'iLIKE',
3221                                                        'value' => '%'.$name.'%'
[1599]3222                                                ));
3223                                        }
3224                                }
3225                        }
3226
[284]3227                        if ($external || $this->page_info['actual_catalog']['class'] == 'bo_people_catalog' ||
[1599]3228/**rev 104**/
3229                                //$this->page_info['actual_catalog']['class'] == 'bo_group_manager')
[503]3230                                $this->page_info['actual_catalog']['class'] == 'bo_group_manager' ||
[752]3231                                $this->page_info['actual_catalog']['class'] == 'bo_shared_people_manager' ||
[1599]3232                                $this->page_info['actual_catalog']['class'] == 'bo_shared_group_manager')
3233
3234
3235/***/
[2]3236                        {
[284]3237                                // Get only this attributes: dn, cn for external catalogs,
3238                                // used to restrict the attributes used in filters
[4753]3239                                $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'), $data['search_for'] != null);
[2]3240                        }
[284]3241                        else
3242                        {
3243                                // Get only this attributes: dn, cn, phpgwAccountType, objectClass, phpgwAccountStatus, phpghAccountVisible
3244                                // for non-external catalogs, used to restrict the attributes used in filters
3245                                $ids = $this->bo->find(array(
3246                                        $data['fields']['id'],
3247                                        $data['fields']['search'],
3248                                        'contact.object_class',
[304]3249                                        //'contact.account_status',
[3282]3250                                        'contact.account_visible',
3251                                        'contact.connection.mail',
3252                                        'contact.connection.phone'
[4753]3253                                        ), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'), $data['search_for_area'], $data['search_for'] != null );
[284]3254                        }
[2]3255
[1599]3256                        if (!is_array($ids) || !count($ids))
3257                        {
[284]3258                                $this->last_search_ids = null;
3259                                $this->save_session();
3260                                return null;
[1599]3261                        }
[2]3262
[1599]3263                        $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
[2]3264
[1599]3265                        $ids_f = array();
3266
3267                        foreach ($ids as $e_info)
3268                        {
3269/**rev 104**/
3270                                //$ids_f[] = $e_info[$id_field];
[752]3271                                if($this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' && $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
[1599]3272                                {
3273                                        $ids_f[] = $e_info[$id_field];
3274                                } else{
[3371]3275                                        $ids_f[] = array(0=>$e_info[$id_field],1=>$e_info['perms'],2=>$e_info['owner']);
[1599]3276                                }
3277/****/
3278                        }
[284]3279
3280                        return $ids_f;
[2]3281                }
[1599]3282
[285]3283                // CELEPAR
3284                /*
3285        function search($str_data)
3286        {
3287            $data = unserialize($str_data);
[2]3288
[285]3289            if (!is_array($data) || !$data['search_for'] || !is_array($data['fields']))
3290            {
3291                echo serialize(array(
3292                    'msg'    => lang('Invalid parameters'),
3293                    'status' => 'abort'
3294                ));
3295
3296                return;
3297            }
3298
3299            $rules  = array();
3300
3301            if ($data['search_for'] === '*')
3302            {
3303                $rules = array(
3304                    0 => array(
3305                        'field' => $data['fields']['search'],
3306                        'type'  => 'LIKE',
3307                        'value' => '%'
3308                    )
3309                );
3310            }
3311            else
3312            {
3313                $names = explode(' ', $data['search_for']);
3314
3315                if (!is_array($names))
3316                {
3317                    echo serialize(array(
3318                        'msg'    => lang('Invalid Search Parameter'),
3319                        'status' => 'abort'
3320                    ));
[1599]3321
[285]3322                    return;
3323                }
[1599]3324
[285]3325                foreach ($names as $name)
3326                {
3327                    if ($name != '')
3328                    {
3329                        array_push($rules, array(
3330                            'field' => $data['fields']['search'],
3331                            'type'  => 'iLIKE',
3332                            'value' => '%'.$name.'%'
3333                        ));
3334                    }
3335                }
3336            }
3337
[1599]3338
3339
[285]3340            //$catalog = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
[1599]3341
[285]3342            //if ($catalog['class'] === 'bo_people_catalog')
3343            //{
3344            //    array_push($rules, array(
3345            //        'field' => 'contact.id_owner',
3346            //        'type'  => '=',
3347            //        'value' => $GLOBALS['phpgw_info']['user']['account_id']
3348            //    ));
3349            //}
[1599]3350
3351
[285]3352            $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'));
3353
3354            if (!is_array($ids) || !count($ids))
3355            {
3356                echo serialize(array(
3357                    'msg'    => lang('No Entries Found!'),
3358                    'status' => 'empty'
3359                ));
3360
3361                return;
3362            }
3363            $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
3364
3365            $ids_f = array();
3366            foreach ($ids as $e_info)
3367            {
3368                $ids_f[] = $e_info[$id_field];
3369            }
3370
3371            echo serialize(array(
3372                'data'   => $ids_f,
3373                'msg'    => lang('Found %1 Entries', count($ids)),
3374                'status' => 'ok'
3375            ));
[1599]3376
[285]3377                        return;
3378        }*/
[2]3379                /*!
3380
3381                        @function get_multiple_entries
3382                        @abstract Returns an array containing the specifiend data in the default
3383                                CC UI format
3384                        @author Raphael Derosso Pereira
3385
[1599]3386                        @param array str_data A serialized array containing the ID's of the entries
[2]3387                                to be taken, the fields to be taken and the rules to be used on the
3388                                retrieval:
3389                                $data = array(
3390                                        'ids'    => array(...),
3391                                        'fields' => array(...),
3392                                        'rules'  => array(...)
3393                                );
3394
3395                */
3396                function get_multiple_entries($str_data)
3397                {
3398                        $data = unserialize($str_data);
[1599]3399
[2]3400                        if (!is_array($data) or !count($data) or !count($data['fields']) or !count($data['ids']))
3401                        {
3402                                return array(
3403                                        'msg'    => lang('Invalid Parameters'),
3404                                        'status' => 'abort'
3405                                );
3406                        }
3407
3408                        $entries = $this->bo->catalog->get_multiple_entries($data['ids'], $data['fields']);
[1599]3409
[2]3410                        if (!is_array($entries) or !count($entries))
3411                        {
3412                                return array(
3413                                        'msg'    => lang('No Entries Found!'),
3414                                        'status' => 'empty'
3415                                );
3416                        }
3417
3418                        return array(
3419                                'msg'    => lang('Found %1 Entries!', count($entries)),
3420                                'status' => 'ok',
3421                                'data'   => $entries
3422                        );
3423                }
3424
3425                /*
3426
3427                        @function get_all_entries
[1599]3428                        @abstract Returns the specified fields for all catalog's entries
[2]3429                                in the default CC UI format
3430                        @author Raphael Derosso Pereira
3431
[1599]3432                        @params array str_data A serialized array containing the fields to
[2]3433                                be grabbed, the maximum number of entries to be returned and a
3434                                boolean specifying if the calls refers to a new grab or to an
3435                                unfinished one.
3436
3437                */
3438                function get_all_entries($str_data)
3439                {
3440                        $data = unserialize($str_data);
[1599]3441
3442                        if (!is_array($data) or
3443                            !count($data) or
3444                                !count($data['fields']) or
[2]3445                                !$data['maxlength'] or
3446                                (!$data['new'] and !$data['offset']))
3447                        {
3448                                return array(
3449                                        'msg'    => lang('Invalid Parameters'),
3450                                        'status' => 'abort'
3451                                );
3452                        }
3453
3454                        if ($data['new'])
3455                        {
3456                                $this->all_entries = $this->bo->catalog->get_all_entries_ids();
3457
3458                                $this->save_session();
3459
3460                                if (!is_array($this->all_entries) or !count($this->all_entries))
3461                                {
3462                                        return array(
3463                                                'msg'    => lang('No Entries Found!'),
3464                                                'status' => 'empty'
3465                                        );
3466                                }
3467
3468                                $data['offset'] = 0;
3469                        }
[1599]3470
[2]3471                        if ($data['maxlength'] != -1)
3472                        {
3473                                $result = $this->bo->catalog->get_multiple_entries(array_slice($this->all_entries, $data['offset'], $data['maxlength']), $data['fields']);
3474                        }
3475                        else
3476                        {
3477                                $result = $this->bo->catalog->get_multiple_entries($this->all_entries, $data['fields']);
3478                        }
3479
3480                        $jsCode = array();
3481                        $count = 0;
3482                        foreach ($result as $each)
3483                        {
3484                                if (!is_array($each))
3485                                {
3486                                        continue;
3487                                }
3488
[1599]3489                                if($this-> typeContact == 'groups') {
3490
[2]3491                                        foreach ($each as $field => $value)     {
[1599]3492
[2]3493                                                if ($field === 'title') {
3494                                                        $optionName = '\\"'.$value.'\\"';
[1599]3495
[2]3496                                                }
3497                                                else if ($field === 'short_name')       {
[1599]3498
[2]3499                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$optionName.' ('.$value.')", "'.$count.'");';
[1599]3500                                                        $count++;
3501                                                }
[2]3502                                        }
3503                                }
[1599]3504
3505                                else  {
[2]3506                                        foreach ($each as $field => $value)     {
3507                                                if ($field === 'names_ordered') {
3508                                                         if(is_array($value))
3509                                $value = $value[0];
3510                                                        $name = '\\"'.$value.'\\"';
3511                                                }
3512                                                else if ($field === 'connections')      {
[1599]3513
[2]3514                                                        foreach ($value as $connection)         {
[3795]3515                                                                if ($connection['id_type'] == $this->preferences['personCardEmail'])    {
[2]3516                                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$name.' <'.$connection['connection_value'].'>", "'.$count.'");';
3517                                                                        $count++;
3518                                                                }
3519                                                        }
3520                                                }
3521                                        }
3522                                }
3523                        }
3524
3525                        $jsCodeFinal = implode("\n", $jsCode);
[1599]3526
[2]3527                        $nEntries = count($result);
[1599]3528
[2]3529                        if (!$nEntries)
3530                        {
3531                                return array(
3532                                        'msg'    => lang('Error while getting user information...'),
3533                                        'status' => 'abort'
3534                                );
3535                        }
3536
3537                        return array(
3538                                'msg'      => lang('Found %1 Entries!', $nEntries),
3539                                'status'   => 'ok',
3540                                'typeContact'   => $this -> typeContact,
3541                                'final'    => $nEntries + $data['offset'] < count($this->all_entries) ? false : true,
3542                                'offset'   => $data['offset'] + $nEntries,
3543                                'data'     => $jsCodeFinal
3544                        );
3545                }
[1599]3546
[2]3547                /*********************************************************************\
3548                 *                      Auxiliar Methods                             *
3549                \*********************************************************************/
3550
3551                /*!
[1599]3552
[2]3553                        @function save_session
3554                        @abstract Saves the data on the session
3555                        @author Raphael Derosso Pereira
[1599]3556
[2]3557                */
3558                function save_session()
3559                {
3560                        $GLOBALS['phpgw']->session->appsession('ui_data.page_info','contactcenter',$this->page_info);
3561                        $GLOBALS['phpgw']->session->appsession('ui_data.all_entries','contactcenter',$this->all_entries);
3562                }
3563
3564                /*!
[1599]3565
[2]3566                        @function convert_tree
3567                        @abstract Converts the tree array in the BO format to a JS tree array compatible
3568                                with the one available in eGW
3569                        @author Raphael Derosso Pereira
[1599]3570
[2]3571                        @param (array)  $tree    The tree in the BO format
3572                        @param (string) $name    The tree name
3573                        @param (string) $iconDir The dir where the icons are
3574                        @param (string) $parent  The parent
3575                */
3576
3577                function convert_tree($tree, &$iconDir, $parent='0')
3578                {
3579//                      echo "Entrou<br>\tPai: $parent <br>";
3580                        $rtree = array();
3581
3582                        if ($parent === '0')
3583                        {
3584//                              echo 'Root!<br>';
3585                                $rtree['0'] = array(
3586                                        'type'       => 'catalog_group',
3587                                        'id'         => '0',
3588                                        'pid'        => 'none',
3589                                        'caption'    => lang('Catalogues'),
3590                                        'class'      => 'bo_catalog_group_catalog',
3591                                        'class_args' => array('_ROOT_', '$this', '$this->get_branch_by_level($this->catalog_level[0])')
3592                                );
3593                        }
3594
3595                        foreach($tree as $id => $value)
3596                        {
3597//                              echo 'ID: '.$id.'<br>';
3598                                $rtree[$parent.'.'.$id] = array(
3599                                        'type'    => $value['type'],
3600                                        'id'      => $parent.'.'.$id,
3601                                        'pid'     => $parent,
3602                                        'caption' => $value['name']
3603                                );
[1599]3604
[2]3605                                switch($value['type'])
3606                                {
3607                                        case 'catalog_group':
3608                                        case 'mixed_catalog_group':
3609                                                $rtree = $rtree + $this->convert_tree($value['sub_branch'],$iconDir,$parent.'.'.$id);
3610                                                break;
3611                                }
3612                        }
3613
3614                        if (count($rtree))
3615                        {
3616                                return $rtree;
3617                        }
3618                }
3619
[3970]3620                function get_catalog_add_contact($id, $echo=true){
[2]3621
3622                        $array_participants = array();
[13]3623                        if(!$this->bo->catalog->src_info) {
3624                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3625                                $this->bo->catalog->src_info = $ldap->srcs[1];
[2]3626                        }
[1599]3627
3628                        $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]3629                        $dn=$this->bo->catalog->src_info['dn'];
3630                        $justThese = array("givenname","givenname","sn","telephonenumber","mail");
[1599]3631                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
3632                        $info = ldap_get_entries($ds, $sr);
[13]3633                        for($z = 0; $z < 5; $z++) {
[1599]3634                                $participant = $info[0][$justThese[$z]];
[13]3635                                array_push($array_participants, $participant);
3636                        }
3637
3638                        ldap_close($ds);
[3970]3639                        if ($echo)
3640                        {
3641                            echo serialize($array_participants);
3642                        }
3643                        else
3644                            {
3645                                return serialize($array_participants);
3646                            }
[1599]3647                }
3648
3649                function get_catalog_participants_group($id)
[880]3650                {
3651                        if(!$this->bo->catalog->src_info) {
3652                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3653                                $this->bo->catalog->src_info = $ldap->srcs[1];
[1599]3654                        }
3655                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
3656                        $justThese = array("description","memberuid");
3657                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
[880]3658                        $info = ldap_get_entries($ds, $sr);
3659                        $member_uids = $info[0]['memberuid'];
3660                        $contact['names_ordered'] = $info[0]['description'];
[1599]3661                        $filter = "";
[880]3662                        for($z = 0; $z < count($member_uids); $z++) {
3663                                if($member_uids[$z])
[1599]3664                                        $filter.="(uid=".$member_uids[$z].")";
[880]3665                        }
3666                        $array_participants = array();
3667                        if($filter) {
[962]3668                                $filter = "(|".$filter.")";
[904]3669                                $valarray = explode(',',$id);
3670                                array_shift($valarray);
3671                                $dn = implode(',',$valarray);
[880]3672                                $justThese = array("cn","mail");
[1599]3673                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3674                                $info = ldap_get_entries($ds, $sr);
[880]3675                                for($z = 0; $z < $info['count']; $z++) {
3676                                        $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]3677                                    $array_emails[$info[$z]['mail'][0]] = null;
3678                                        array_push($array_participants, $participant);
[880]3679                                }
3680                                ldap_close($ds);
[1599]3681                        }
[880]3682                        sort($array_participants);
[1599]3683                        $innerHTML = '';
[880]3684                        foreach($array_participants as $index => $participant){
3685                                $innerHTML .= $participant;
3686                        }
[1599]3687                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
[880]3688                        echo serialize($return);
3689                }
3690
[1599]3691                function get_catalog_participants_list($id)
[2]3692                {
[1599]3693
3694                        $fields = $this->bo->catalog->get_fields(false);
[2]3695                        $fields['names_ordered'] = true;
[1599]3696                        $fields['mail_forwarding_address'] = true;
3697                        $contact = $this->bo->catalog->get_single_entry($id,$fields);
3698
[2]3699                        $array_participants = array();
3700                        $array_emails = array();
[880]3701
[2]3702                        $filter = null;
[1599]3703                        for($z = 0; $z < $contact['mail_forwarding_address']['count']; $z++) {
[2]3704                                        if(strstr($contact['mail_forwarding_address'][$z],'@')) {
3705                                                $filter.="(mail=".$contact['mail_forwarding_address'][$z].")";
3706                                                $array_emails[$contact['mail_forwarding_address'][$z]] = "<font color=black>".$contact['mail_forwarding_address'][$z]."</font>";
[1599]3707                                        }
3708                                        else
[2]3709                                                $array_participants[$z] = "<font color=red>".$contact['mail_forwarding_address'][$z]."</font>";
[1599]3710                        }
3711
[2]3712                        if($filter) {
[1599]3713                                $filter = "(|".$filter.")";
[2]3714                                if(!$this->bo->catalog->src_info) {
3715                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
3716                                        $this->bo->catalog->src_info = $ldap->srcs[1];
3717                                }
[880]3718                                $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]3719                                $dn=$this->bo->catalog->src_info['dn'];
3720                                $justThese = array("cn","mail");
[1599]3721                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3722                                $info = ldap_get_entries($ds, $sr);
[2]3723                                for($z = 0; $z < $info['count']; $z++) {
[24]3724                                        $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]3725                                        $array_emails[$info[$z]['mail'][0]] = null;
3726                                        array_push($array_participants, $participant);
[2]3727                                }
[1599]3728
[2]3729                                foreach($array_emails as $index => $email)
[1599]3730                                        if($email)
3731                                                array_push($array_participants, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$email."<br>");
3732
[2]3733                                ldap_close($ds);
3734                        }
3735                        sort($array_participants);
[1599]3736                        $innerHTML = '';
[24]3737                        foreach($array_participants as $index => $participant){
3738                                $innerHTML .= $participant;
3739                        }
[1599]3740                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
[24]3741                        echo serialize($return);
[1599]3742                }
3743
[2]3744                function export_contacts($typeExport){
3745
3746                        $boGroup = CreateObject('contactcenter.bo_group');
3747                        $contacts = $boGroup->get_all_contacts();
3748                        $streamBuffer = '';
3749
3750                        if(!count($contacts))
3751                                echo null;
[1599]3752
[2]3753                        switch($typeExport) {
3754
3755                                case 'outlook_en':
3756                                        $streamBuffer = "Name;E-mail Address;Notes;Mobile Phone;Pager;Company;".
[3322]3757                                                        "Job Title;Home Phone;Home Fax;Business Phone;Business Fax\r\n";                                                       
[293]3758                                        foreach($contacts as $index => $object){
[3322]3759                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\";"
3760                                                        . "\"".$object[ 'main-mail' ] . "\";"
3761                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\";"
3762                                                        . "\"".$object[ 'mobile' ] . "\";"
3763                                                        . "\"".$object[ 'business-pager' ] . "\";"
3764                                                        . "\"".$object[ 'corporate_name' ] . "\";"
3765                                                        . "\"".$object[ 'job_title' ] . "\";"
3766                                                        . "\"".$object[ 'home-phone' ] . "\";"
3767                                                        . "\"".$object[ 'home-fax' ] . "\";"
3768                                                        . "\"".$object[ 'business-phone' ] . "\";"
3769                                                        . "\"".$object[ 'business-fax' ] . "\"\r\n";
[2]3770                                        }
[3215]3771                                        break;
[1599]3772
[2]3773                                case 'outlook_pt-BR':
[3322]3774                                        $streamBuffer = "Nome;Sobrenome;Segundo nome;Nome;Apelido;End. de email;Endereço residencial;"
3775                                                                        ."Cidade do endereço residencial;CEP do endereço residencial;Estado;País/região do endereço residencial;"
3776                                                                        ."Telefone residencial;Fax residencial;Telefone celular;Página pessoal da Web;Rua do endereço comercial;"
3777                                                                        ."Cidade do endereço comercial;CEP do endereço comercial;Estado do endereço comercial;"
3778                                                                        ."País/região do endereço comercial;Página comercial da Web;Telefone comercial;Fax comercial;Pager;Empresa;"
3779                                                                        ."Cargo;Departamento;End. comercial;Observações\r\n";
[3215]3780
[293]3781                                        foreach($contacts as $index => $object){
[3322]3782                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\";"
3783                                                        .";;;"
3784                                                        . "\"".$object[ 'alias' ] . "\";"
3785                                                        . "\"".$object[ 'main-mail' ] . "\";"
3786                                                        . "\"".$object[ 'home-address' ] . "\";"
3787                                                        . "\"".$object[ 'home-city_name' ] . "\";"
3788                                                        . "\"".$object[ 'home-postal_code' ] . "\";"
3789                                                        . "\"".$object[ 'home-state_name' ] . "\";"
3790                                                        . "\"".$object[ 'home-id_country' ] . "\";"
3791                                                        . "\"".$object[ 'home-phone' ] . "\";"
3792                                                        . "\"".$object[ 'home-fax' ] . "\";"
3793                                                        . "\"".$object[ 'mobile' ] . "\";"
3794                                                        . "\"".$object[ 'web_page' ] . "\";"
3795                                                        . "\"".$object[ 'business-address' ] . "\";"
3796                                                        . "\"".$object[ 'business-city_name' ] . "\";"
3797                                                        . "\"".$object[ 'business-postal_code' ] . "\";"
3798                                                        . "\"".$object[ 'business-state_name' ] . "\";"
3799                                                        . "\"".$object[ 'business-id_country' ] . "\";"
3800                                                        . "\"".$object[ 'web_page' ] . "\";"
3801                                                        . "\"".$object[ 'business-phone' ] . "\";"
3802                                                        . "\"".$object[ 'business-fax' ] . "\";"
3803                                                        . "\"".$object[ 'business-pager' ] . "\";"
3804                                                        . "\"".$object[ 'corporate_name' ] . "\";"
3805                                                        . "\"".$object[ 'job_title' ] . "\";"
3806                                                        . "\"".$object[ 'department' ] . "\";"
3807                                                        .";"
3808                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\"\r\n";
[2]3809                                        }
[3322]3810
[2]3811                                break;
[1599]3812
[15]3813                                case 'outlook2000_pt-BR':
3814                                        $streamBuffer = "\"Tratamento\",\"Nome\",\"Segundo Nome\",\"Sobrenome\",\"Sufixo\",".
[3322]3815                                        "\"Empresa\",\"Departamento\",\"Cargo\",\"Rua do endereço comercial\",\"Rua do endereço comercial 2\",".
3816                                        "\"Rua do endereço comercial 3\",\"Cidade do endereço comercial\",\"Estado do endereço comercial\",".
3817                                        "\"CEP do endereço comercial\",\"País do endereço comercial\",\"Endereço residencial\",\"Rua residencial 2\",".
3818                                        "\"Rua residencial 3\",\"Cidade do endereço residencial\",\"Estado\",\"CEP do endereço residencial\",\"País do endereço residencial\",".
3819                                        "\"Outro endereço\",\"Outro endereço 2\",\"Outro endereço 3\",\"Cidade\",\"Estado\",\"CEP\",\"País\",".
[15]3820                                        "\"Telefone do assistente\",\"Fax comercial\",\"Telefone comercial\",\"Telefone comercial 2\",\"Retorno de chamada\",".
3821                                        "\"Telefone do carro\",\"Telefone principal da empresa\",\"Fax residencial\",\"Telefone residencial\",".
3822                                        "\"Telefone residencial 2\",\"ISDN\",\"Telefone celular\",\"Outro fax\",\"Outro telefone\",\"Pager\",\"Telefone principal\",".
[3322]3823                                        "\"Radiofone\",\"Telefone TTY/TDD\",\"Telex\",\"Aniversário\",\"Anotações\",\"Caixa postal\",\"Categorias\",".
3824                                        "\"Código da empresa\",\"Código do governo\",\"Cônjuge\",\"Conta\",\"Endereço de correio eletrônico\",".
3825                                        "\"Nome de exibição do correio eletr.\",\"Endereço de correio eletrônico 2\",".
3826                                        "\"Nome de exibição do correio eletr.2\",\"Endereço de correio eletrônico 3\",".
3827                                        "\"Nome de exibição do correio eletr.3\",\"Datas especiais\",\"Disponibilidade da Internet\",".
3828                                        "\"Filhos\",\"Hobby\",\"Idioma\",\"Indicação\",\"Informações para cobrança\",\"Iniciais\",\"Local\",".
3829                                        "\"Nome do assistente\",\"Nome do gerenciador\",\"Página da Web\",\"Palavras-chave\",\"Particular\",\"Personalizado 1\",\"Personalizado 2\",".
3830                                        "\"Personalizado 3\",\"Personalizado 4\",\"Prioridade\",\"Profissão\",\"Quilometragem\",\"Sala\",\"Sensibilidade\",\"Servidor de diretório\",".
[15]3831                                        "\"Sexo\"\r\n";
[1599]3832
[3322]3833
3834
[293]3835                                        foreach($contacts as $index => $object){
[3322]3836                                $streamBuffer .= "\"".$object[ 'alias' ] . "\","                                   
3837                                                                . "\"".$object[ 'names_ordered' ] . "\","
3838                                                                .",,,"
3839                                                                . "\"".$object[ 'corporate_name' ] . "\","
3840                                                                . "\"".$object[ 'department' ] . "\","
3841                                                                . "\"".$object[ 'job_title' ] . "\","
3842                                                                . "\"".$object[ 'business-address' ] . "\","
3843                                                                . "\"".$object[ 'business-address-2' ] . "\","
3844                                                                .","
3845                                                                . "\"".$object[ 'business-city_name' ] . "\","
3846                                                                . "\"".$object[ 'business-state' ] . "\","
3847                                                                . "\"".$object[ 'business-postal_code' ] . "\","
3848                                                                . "\"".$object[ 'business-id_country' ] . "\","
3849                                                                . "\"".$object[ 'home-address' ] . "\","
3850                                                                . "\"".$object[ 'home-address-2' ] . "\","
3851                                                                .","
3852                                                                . "\"".$object[ 'home-city_name' ] . "\","
3853                                                                . "\"".$object[ 'home-state_name' ] . "\","
3854                                                                . "\"".$object[ 'home-postal_code' ] . "\","
3855                                                                . "\"".$object[ 'home-id_country' ] . "\","
3856                                                                .",,,,,,,,"
3857                                                                . "\"".$object[ 'business-fax' ] . "\","
3858                                                                . "\"".$object[ 'business-phone' ] . "\","
3859                                                                . "\"".$object[ 'business-mobile' ] . "\","
3860                                                                .",,,"
3861                                                                . "\"".$object[ 'home-fax' ] . "\","
3862                                                                . "\"".$object[ 'home-phone' ] . "\","
3863                                                                .",,"
3864                                                                . "\"".$object[ 'mobile' ] . "\","
3865                                                                .",,"
3866                                                                . "\"".$object[ 'home-pager' ] . "\","
3867                                                                . "\"".$object[ 'business-phone' ] . "\","
3868                                                                .",,,"
3869                                                                . "\"".$object[ 'birthdate' ] . "\","
3870                                                                . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
3871                                                                .",,,,,,"
3872                                                                . "\"".$object[ 'main-mail' ] . "\","
3873                                                                .","
3874                                                                . "\"".$object[ 'alternative-mail' ] . "\","
3875                                                                .",,,,,,,,,,,,,,"
3876                                                                . "\"".$object[ 'web_page' ] . "\","
3877                                                                .",,,,,,,,,,,,"
3878                                                                . "\"".$object[ 'sex' ] . "\"\r\n";                                                             
3879                            }
[15]3880                                break;
[1599]3881
[15]3882                                case 'outlook2000_en':
3883                                        $streamBuffer = "Title,First Name,Middle Name,Last Name,Suffix,Company,Department,Job Title,".
3884                                        "Business Street,Business Street 2,Business Street 3,Business City,Business State,Business Postal Code,".
3885                                        "Business Country,Home Street,Home Street 2,Home Street 3,Home City,Home State,Home Postal Code,Home Country,".
3886                                        "Other Street,Other Street 2,Other Street 3,Other City,Other State,Other Postal Code,Other Country,".
3887                                        "Assistant's Phone,Business Fax,Business Phone,Business Phone 2,Callback,Car Phone,Company Main Phone,Home Fax,".
3888                                        "Home Phone,Home Phone 2,ISDN,Mobile Phone,Other Fax,Other Phone,Pager,Primary Phone,Radio Phone,TTY/TDD Phone,Telex,".
3889                                        "Account,Anniversary,Assistant's Name,Billing Information,Birthday,Categories,Children,Directory Server,E-mail Address,".
3890                                        "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,".
3891                                        "Gender,Government ID Number,Hobby,Initials,Internet Free Busy,Keywords,Language,Location,Manager's Name,Mileage,Notes,".
3892                                        "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]3893
[4753]3894                                foreach($contacts as $index => $object)
3895                                {
3896                                        if( array_key_exists("phone", $object) )
3897                                           $phone = $object['phone'];
3898                                        else
3899                                           $phone = $object['business-phone'];
3900
[3322]3901                                                $streamBuffer.= "\"".$object[ 'alias' ] . "\","
3902                                                        . "\"".$object[ 'names_ordered'] . "\","
3903                                                        .",,,"
3904                                                        . "\"".$object[ 'corporate_name' ] . "\","
3905                                                        . "\"".$object[ 'department' ] . "\","
3906                                                        . "\"".$object[ 'job_title' ] . "\","
3907                                                        . "\"".$object[ 'business-address' ] . "\","
3908                                                        . "\"".$object[ 'business-address-2' ] . "\","
3909                                                        .","
3910                                                        . "\"".$object[ 'business-city_name' ] . "\","
3911                                                        . "\"".$object[ 'business-state' ] . "\","
3912                                                        . "\"".$object[ 'business-postal_code' ] . "\","
3913                                                        . "\"".$object[ 'business-id_country' ] . "\","
3914                                                        . "\"".$object[ 'home-address' ] . "\","
3915                                                        . "\"".$object[ 'home-address-2' ] . "\","
3916                                                        .","
3917                                                        . "\"".$object[ 'home-city_name' ] . "\","
3918                                                        . "\"".$object[ 'home-state_name' ] . "\","
3919                                                        . "\"".$object[ 'home-postal_code' ] . "\","
3920                                                        . "\"".$object[ 'home-id_country' ] . "\","
3921                                                        .",,,,,,,,"
3922                                                        . "\"".$object[ 'business-fax' ] . "\","
[4753]3923                                                        . "\"".$phone . "\","
[3322]3924                                                        . "\"".$object[ 'business-mobile' ] . "\","
3925                                                        .",,,"
3926                                                        . "\"".$object[ 'home-fax' ] . "\","
3927                                                        . "\"".$object[ 'home-phone' ] . "\","
3928                                                        .",,"
3929                                                        . "\"".$object[ 'mobile' ] . "\","
3930                                                        .",,"
3931                                                        . "\"".$object[ 'business-pager' ] . "\","
3932                                                        . "\"".$object[ 'home-pager' ] . "\","
3933                                                        .",,,,,,,,"
3934                                                        . "\"".$object[ 'birthdate' ] . "\","
3935                                                        .",,,"
3936                                                        . "\"".$object[ 'main-mail' ] . "\","
3937                                                        .",,"
3938                                                        . "\"".$object[ 'alternative-mail' ] . "\","
3939                                                        .",,,,,,,,,,,,,,,"
3940                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
3941                                                        .",,,,,,,,,,,,,"
3942                                                        . "\"".$object[ 'web_page' ] . "\"\r\n";
3943
[15]3944                                        }
3945                                break;
[1599]3946
[2]3947                                case 'thunderbird':
[3322]3948                                        $streamBuffer = "First Name,Last Name,Display Name,Nickname,Primary Email,Secondary Email,"
3949                                                ."Screen Name,Work Phone,Home Phone,Fax Number,Pager Number,Mobile Number,Home Address,"
3950                                                ."Home Address 2,Home City,Home State,Home ZipCode,Home Country,Work Address,Work Address 2,"
3951                                                ."Work City,Work State,Work ZipCode,Work Country,Job Title,Department,Organization,Web Page 1,"
3952                                                ."Web Page 2,Birth Year,Birth Month,Birth Day,Custom 1,Custom 2,Custom 3,Custom 4,Notes,\n";
[1599]3953
[293]3954                                        foreach($contacts as $index => $object){
[3322]3955                                                $array_birth = explode("-",$object[ 'birthdate' ]);
3956                                                $streamBuffer.= "\"".$object[ 'names_ordered'] . "\","
3957                                                        .",,"
3958                                                        . "\"".$object[ 'alias' ] . "\","
3959                                                        . "\"".$object[ 'main-mail' ] . "\","
3960                                                        . "\"".$object[ 'alternative-mail' ] . "\","
3961                                                        .","
[4753]3962                                                        . "\"".$phone . "\","
[3322]3963                                                        . "\"".$object[ 'home-phone' ] . "\","
3964                                                        . "\"".$object[ 'business-fax' ] . "\","
3965                                                        . "\"".$object[ 'business-pager' ] . "\","
3966                                                        . "\"".$object[ 'mobile' ] . "\","
3967                                                        . "\"".$object[ 'home-address' ] . "\","
3968                                                        . "\"".$object[ 'home-address-2' ] . "\","
3969                                                        . "\"".$object[ 'home-city_name' ] . "\","
3970                                                        . "\"".$object[ 'home-state_name' ] . "\","
3971                                                        . "\"".$object[ 'home-postal_code' ] . "\","
3972                                                        . "\"".$object[ 'home-id_country' ] . "\","
3973                                                        . "\"".$object[ 'business-address' ] . "\","
3974                                                        . "\"".$object[ 'business-address-2' ] . "\","
3975                                                        . "\"".$object[ 'business-city_name' ] . "\","
3976                                                        . "\"".$object[ 'business-state_name' ] . "\","
3977                                                        . "\"".$object[ 'business-postal_code' ] . "\","
3978                                                        . "\"".$object[ 'business-id_country' ] . "\","
3979                                                        . "\"".$object[ 'job_title' ] . "\","
3980                                                        . "\"".$object[ 'department' ] . "\","
3981                                                        . "\"".$object[ 'corporate_name' ] . "\","
3982                                                        . "\"".$object[ 'web_page' ] . "\","
3983                                                        . "\"".$object[ 'web_page' ] . "\","
3984                                                        . "\"".$array_birth[0] . "\","
3985                                                        . "\"".$array_birth[1] . "\","
3986                                                        . "\"".$array_birth[2] . "\","
3987                                                        .",,,,"
3988                                                        . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\",\r\n";
3989
[2]3990                                        }
3991                                break;
[1599]3992
[285]3993                                case 'expresso':
[3322]3994                            $streamBuffer = 'Nome,Apelido,E-mail Principal,E-mail Alternativo,Celular,'
3995                                . 'Telefone Comercial,Endereço Comercial,Complemento End. Comercial,CEP Comercial,Cidade End. Comercial,Estado End. Comercial,País End. Comercial,'
3996                                . 'Telefone Residencial,Endereço Residencial,Complemento End. Residencial,CEP Residencial,Cidade End. Residencial,Estado End. Residencial,País End. Residencial,'
3997                                . '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'
3998                                                        . "\r\n";
[1599]3999
[3322]4000                            foreach($contacts as $index => $object){
4001                                $streamBuffer .= "\"".$object[ 'names_ordered'] . "\","
4002                                    . "\"".$object[ 'alias' ] . "\","
4003                                    . "\"".$object[ 'main-mail' ] . "\","
4004                                    . "\"".$object[ 'alternative-mail' ] . "\","
4005                                    . "\"".$object[ 'mobile' ] . "\","
4006                                    . "\"".$object[ 'business-phone' ] . "\","
4007                                    . "\"".$object[ 'business-address' ] . "\","
4008                                    . "\"".$object[ 'business-complement' ] . "\","
4009                                    . "\"".$object[ 'business-postal_code' ] . "\","
4010                                    . "\"".$object[ 'business-city_name' ] . "\","
4011                                    . "\"".$object[ 'business-state_name' ] . "\","
4012                                    . "\"".$object[ 'business-id_country' ] . "\","
4013                                    . "\"".$object[ 'home-phone' ] . "\","
4014                                    . "\"".$object[ 'home-address' ] . "\","
4015                                    . "\"".$object[ 'home-complement' ] . "\","
4016                                    . "\"".$object[ 'home-postal_code' ] . "\","
4017                                    . "\"".$object[ 'home-city_name' ] . "\","
4018                                    . "\"".$object[ 'home-state_name' ] . "\","
4019                                    . "\"".$object[ 'home-id_country' ] . "\","
4020                                                                . "\"".$object[ 'birthdate' ] . "\","
4021                                                                . "\"".$object[ 'sex' ] . "\","
4022                                                                . "\"".$object[ 'pgp_key' ] . "\","
4023                                                                . "\"".str_replace("\r\n\x0a","\t",$object[ 'notes' ]) . "\","
4024                                                                . "\"".$object[ 'web_page' ] . "\","
4025                                                                . "\"".$object[ 'corporate_name' ] . "\","
4026                                                                . "\"".$object[ 'job_title' ] . "\","
4027                                                                . "\"".$object[ 'department' ] . "\","
4028                                                                . "\"".$object[ 'business-fax' ] . "\","
4029                                                                . "\"".$object[ 'business-pager' ] . "\","
4030                                                                . "\"".$object[ 'business-mobile' ] . "\","
4031                                                                . "\"".$object[ 'home-fax' ] . "\","
4032                                                                . "\"".$object[ 'home-pager' ] . "\","
4033                                                                . "\"".$object[ 'business-address-2' ] . "\","
4034                                                                . "\"".$object[ 'home-address-2' ] . "\"\r\n";
4035                            }
4036                        break;
[1599]4037
[2]4038                        }
4039
4040                        $file = "contacts_".md5(microtime()).".swp";
[4753]4041                        $tempDir = ini_get("session.save_path");
[2]4042                        $f = fopen($tempDir.'/'.$file,"w");
4043                        if(!$f)
4044                                echo null;
[1599]4045
[2]4046                        fputs($f,$streamBuffer);
4047                        fclose($f);
4048
4049                        echo $tempDir.'/'.$file;
4050                }
4051
[285]4052                // Get the csv field and put into array, from php.net
4053                function parse_line($input_text, $delimiter = ',', $text_qualifier = '"') {
4054                        $text = trim($input_text);
4055                          if(is_string($delimiter) && is_string($text_qualifier)) {
4056                         $re_d = '\x' . dechex(ord($delimiter));            //format for regexp
4057                        $re_tq = '\x' . dechex(ord($text_qualifier));    //format for regexp
[1599]4058
[285]4059                        $fields = array();
4060                        $field_num = 0;
4061                        while(strlen($text) > 0) {
4062                        if($text{0} == $text_qualifier) {
4063                                preg_match('/^' . $re_tq . '((?:[^' . $re_tq . ']|(?<=\x5c)' . $re_tq . ')*)' . $re_tq . $re_d . '?(.*)$/', $text, $matches);
[1599]4064
[285]4065                                $value = str_replace('\\' . $text_qualifier, $text_qualifier, $matches[1]);
4066                                $text = trim($matches[2]);
[1599]4067
[285]4068                                $fields[$field_num++] = $value;
4069                        } else {
4070                                preg_match('/^([^' . $re_d . ']*)' . $re_d . '?(.*)$/', $text, $matches);
[1599]4071
[285]4072                                $value = $matches[1];
4073                                $text = trim($matches[2]);
[1599]4074
[285]4075                                $fields[$field_num++] = $value;
4076                }
4077                }
4078                        return $fields;
4079                    } else
4080                        return false;
4081                }
[16]4082
[1599]4083                //funcao alterada para importar outros campos alem de nome, telefone e email, de arquivo csv (Outlook 2000)
4084                //em 08/04/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
4085                //Foi adicionada uma funcao (escapesheelcmd()) nas variaveis para que caracteres especiais sejam ignorados
4086                //durante a importacao dos contatos; o processo estava travando por causa de caracteres em campos como nome,
4087                //sobrenome, notas e e-mail;
4088                //em 19/06/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
[4753]4089                function import_contacts($typeImport, $id_group=false){
[3334]4090                        $this->so_group = CreateObject('contactcenter.so_group');
[1599]4091                        if($file = $_SESSION['contactcenter']['importCSV']) {
4092                                unset($_SESSION['contactcenter']['importCSV']);
[2]4093                                $len = filesize($file);
4094                                $count = 0;
4095                                $return = array('error' => false, '_new' => 0, '_existing' => 0, '_failure' => 0);
[276]4096                                $handle = @fopen($file, "r") or die(serialize($return['error'] = true));
[1599]4097
[285]4098                                $input_header = fgets($handle);
4099                                if ($typeImport == 'outlook')
4100                                        $delim = ';';
4101                                else if ($typeImport == 'auto')
4102                                $delim = strstr($input_header,',') ? ',' : ';';
[1599]4103                                else
[285]4104                                        $delim = ',';
4105                                $csv_header = $this->parse_line($input_header,$delim);
4106                                $firstContact = fgets($handle);
4107                                preg_match("/\"(.+)\"[,;]/sU",$firstContact,$matches); // yahoo csv
[1599]4108                                rewind($handle);
[285]4109
[2]4110                                $header = @fgetcsv($handle, $len, $delim) or die(serialize($return['error'] = true));
[15]4111                                if(count($header)  < 2 || count($header) > 100) {
[2]4112                                        $return['error'] = true;
4113                                        $return['sizeheader'] = count($header);
4114                                        echo serialize($return);
4115                                        return;
4116                                }
[1599]4117
[285]4118                                if ($matches[0][strlen($matches[0])-1] == ';')
4119                                        $delim = ';';
[1599]4120
[3322]4121                                $boGroup = CreateObject('contactcenter.bo_group');
4122                                $boPeople = CreateObject('contactcenter.bo_people_catalog');
4123                                        switch($typeImport){
4124                                                case 'outlook2000':
4125                                                        $name_pos=1;
4126                                                        $name2_pos=2;
4127                                                        $name3_pos=3;
4128                                                        $corporate_street_pos=8;
4129                                                        $cep_pos=13;
4130                                                        $corporate_street_2_pos=22;
4131                                                        $fax_pos=30;
4132                                                        $phone_pos=31;
4133                                                        $home_phone_pos=37;
4134                                                        $personal_cell_pos=40;
4135                                                        $pager_pos=43;
4136                                                        $birth_pos=48;
4137                                                        $notes_pos=49;
4138                                                        $email_pos=56;
4139                                                        $aditionalEmail_pos=59;
[1599]4140
[3322]4141                                                        break;
4142                                                case 'outlook':
4143                                                        $name_pos=3;
4144                                                        $email_pos=4;
4145                                                        $phone_pos=7;
4146                                                        $home_phone_pos=10;
4147                                                        $personal_cell_pos=12;
4148                                                        $corporate_street_pos=13;
4149                                                        $cep_pos=15;
4150                                                        $phone_pos=18;
4151                                                        $fax_pos=19;
4152                                                        $pager_pos=20;
4153                                                        $notes_pos=25;
4154                                                        break;
4155                                                case 'thunderbird':
4156                                                        $name_pos=2;
4157                                                        $email_pos=4;
4158                                                        $phone_pos=7;
4159                                                        break;
4160                                                case 'expresso':
4161                                                        $name_pos=0;
4162                                                        $alias_pos=1;
4163                                                        $email_pos=2;
4164                                                        $aditionalEmail_pos=3;
4165                                                        $personal_cell_pos=4;
4166                                                        $corporate_phone_pos=5;
4167                                                        $corporate_street_pos=6;
4168                                                        $corporate_comp_pos=7;
4169                                                        $corporate_cep_pos=8;
4170                                                        $corporate_city_pos=9;
4171                                                        $corporate_state_pos=10;
4172                                                        $corporate_country_pos=11;
4173                                                        $home_phone_pos=12;
4174                                                        $street_pos=13;
4175                                                        $comp_pos=14;
4176                                                        $cep_pos=15;
4177                                                        $city_pos=16;
4178                                                        $state_pos=17;
4179                                                        $country_pos=18;
4180                                                        $birth_pos=19;
4181                                                        $sex_pos = 20;
4182                                                        $pgp_key_pos = 21;
4183                                                        $notes_pos=22;
4184                                                        $web_page_pos=23;
4185                                                        $corporate_name_pos=24;
4186                                                        $job_title_pos=25;
4187                                                        $department_pos=26;
4188                                                        $corporate_fax_pos=27;
4189                                                        $corporate_pager_pos=28;
4190                                                        $corporate_cell_pos=29;
4191                                                        $fax_pos=30;
4192                                                        $pager_pos=31;
4193                                                        $corporate_street_2_pos = 32;
4194                                                        $street_2_pos = 33;                                             
4195                                                        break;
[285]4196                                        default:
[3322]4197                                                        foreach($csv_header as $index => $fieldName)
4198                                                        {
4199                                                                switch($fieldName){
4200                                                                case 'Name':
4201                                                                case 'Nome':
4202                                                                case 'First Name':
4203                                                                        $name_pos = $index;
4204                                                                        break;
4205                                                                case 'Second name':
4206                                                                case 'Segundo nome':
4207                                                                        $name2_pos = $index;
4208                                                                        break;
4209                                                                case 'Sobrenome':
4210                                                                case 'Surname':
4211                                                                        $name3_pos = $index;
4212                                                                        break;
4213                                                                case 'Business Street':
4214                                                                case 'Rua do endereço comercial':
4215                                                                        $corporate_street_pos = $index;
4216                                                                        break;
4217                                                                case 'Rua do endereço comercial 2':
4218                                                                case 'Outro endereço':
4219                                                                        $corporate_street_2_pos = $index;
4220                                                                        break;
4221                                                                case 'Business Postal Code':
4222                                                                case 'CEP do endereço comercial':
4223                                                                        $cep_pos = $index;
4224                                                                        break;
4225                                                                case 'Business Fax':
4226                                                                case 'Fax comercial':
4227                                                                case 'Fax':
4228                                                                        $fax_pos = $index;
4229                                                                        break;
4230                                                                case 'Home Phone':
4231                                                                case 'Telefone residencial':
4232                                                                        $home_phone_pos = $index;
4233                                                                        break;
4234                                                                case 'Mobile phone':
4235                                                                case 'Telefone celular':
4236                                                                        $personal_cell_pos = $index;
4237                                                                        break;
4238                                                                case 'Pager':
4239                                                                        $pager_pos = $index;
4240                                                                        break;
4241                                                                case 'Phone':
4242                                                                case 'Business Phone':
4243                                                                case 'Telefone':
4244                                                                case 'Telefone principal':
4245                                                                case 'Telefone comercial':
[4753]4246                                                                case 'Telefone Comercial':                                                                   
[3322]4247                                                                        $phone_pos = $index;
4248                                                                        break;
4249                                                                case 'Aniversário':
4250                                                                case 'Birthdate':
4251                                                                        $birth_pos = $index;
4252                                                                case 'Anotações':
4253                                                                case 'Notes':
4254                                                                        $notes_pos = $index;
4255                                                                case 'E-mail':
4256                                                                case 'Email':
4257                                                                case 'E-mail Address':
4258                                                                case 'Endereço de correio eletrônico':
4259                                                                case 'End. de email':
4260                                                                        $email_pos = $index;
4261                                                                        break;
4262                                                                case 'Endereço de correio eletrônico 2':
4263                                                                        $aditionalEmail_pos = $index;
4264                                                                        break;
4265                                                                }
[285]4266                                                        }
[3322]4267                                                        break;
[15]4268                                }
[276]4269
[2]4270                                while (($data = fgetcsv($handle, $len, $delim))) {
[3322]4271                                        foreach ($header as $key=>$heading)
[2]4272                                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
[1599]4273
[3322]4274                                                $sdata = array();
4275                                                $full_name  = trim($row[$header[$name_pos]]);
4276                                                $email          = trim($row[$header[$email_pos]]);
4277                                                $phone          = trim($row[$header[$phone_pos]]);
4278                                                $name2          = trim($row[$header[$name2_pos]]);
4279                                                $name3          = trim($row[$header[$name3_pos]]);
[1599]4280
[3322]4281                                                $birth          = trim($row[$header[$birth_pos]]);
4282                                                $notes          = trim($row[$header[$notes_pos]]);
4283                                                $altEmail       = trim($row[$header[$altEmail_pos]]);
4284                                                $sdata['alias']                         = trim($row[$header[$alias_pos]]);
4285                                                $sdata['corporate_name']      = trim($row[$header[$corporate_name_pos]]);
4286                                                $sdata['job_title']             = trim($row[$header[$job_title_pos]]);
4287                                                $sdata['department']            = trim($row[$header[$department_pos]]);
4288                                                $sdata['web_page']                      = trim($row[$header[$web_page_pos]]);
4289                                               
4290                                                $sdata['sex']                   = trim($row[$header[$sex_pos]]);
4291                                                $sdata['pgp_key']      = trim($row[$header[$pgp_key_pos]]);
[1599]4292
[3322]4293
4294                                        $full_name = $full_name;
[2]4295                                        $array_name = explode(' ', str_replace('"','',(str_replace('\'','',$full_name))));
[3476]4296                                        $sdata['given_names'] = addslashes($array_name[0]);
[2]4297                                        $array_name[0] = null;
4298                                        $sdata['family_names'] = trim(implode(' ',$array_name));
[1599]4299                                        if($sdata['family_names'] == '')
4300                                        {
[3476]4301                                                $sdata['family_names'] = addslashes($name2) . " " . addslashes($name3);
[1599]4302                                        }
[3476]4303
[3322]4304                                                $sdata['connections']['default_email']['connection_name'] = lang('Main');
[3476]4305                                                $sdata['connections']['default_email']['connection_value'] = addslashes($email);
[3322]4306                                                $sdata['connections']['aditional_email']['connection_name'] = "Alternativo";
4307                                                $sdata['connections']['aditional_email']['connection_value'] = trim($row[$header[$aditionalEmail_pos]]);
[1599]4308
[3322]4309                                                $sdata['connections']['default_phone']['connection_name'] = lang('Main');
[4753]4310                                                $sdata['connections']['default_phone']['connection_value'] = $phone;
[2]4311
[4753]4312                                                if( trim($row[$header[$home_phone_pos]]) != "" )
[4288]4313                                                {
4314                                                    $sdata['connections']['aditional_phone']['home_phone']['connection_name'] = 'Casa';
4315                                                    $sdata['connections']['aditional_phone']['home_phone']['connection_value'] = trim($row[$header[$home_phone_pos]]);
4316                                                }
[1599]4317
[4288]4318                                                if( trim($row[$header[$personal_cell_pos]]) != "" )
4319                                                {
4320                                                    $sdata['connections']['aditional_phone']['cellphone']['connection_name'] = 'Celular';
4321                                                    $sdata['connections']['aditional_phone']['cellphone']['connection_value'] = trim($row[$header[$personal_cell_pos]]);
4322                                                }
4323
4324                                                if( trim($row[$header[$corporate_phone_pos]]) != "")
4325                                                {
4326                                                    $sdata['connections']['aditional_phone']['corporate_phone']['connection_name'] = 'Trabalho';
4327                                                    $sdata['connections']['aditional_phone']['corporate_phone']['connection_value'] = trim($row[$header[$corporate_phone_pos]]);
4328                                                }
4329
4330                                                if( trim($row[$header[$fax_pos]]) != "" )
4331                                                {
4332                                                    $sdata['connections']['aditional_phone']['fax']['connection_name'] = 'Fax';
4333                                                    $sdata['connections']['aditional_phone']['fax']['connection_value'] = trim($row[$header[$fax_pos]]);
4334                                                }
4335
4336                                                if ($GLOBALS['phpgw_info']['server']['personal_contact_type'] == 'True')
4337                                                {
4338                                                    if( trim($row[$header[$pager_pos]]) != "" )
4339                                                    {
4340                                                        $sdata['connections']['aditional_phone']['pager']['connection_name'] = 'Pager';
4341                                                        $sdata['connections']['aditional_phone']['pager']['connection_value'] = trim($row[$header[$pager_pos]]);
4342                                                    }
4343
4344                                                    if( trim($row[$header[$corporate_fax_pos]]) != "" )
4345                                                    {
4346                                                        $sdata['connections']['aditional_phone']['corporate_fax']['connection_name'] = 'Fax Corporativo';
4347                                                        $sdata['connections']['aditional_phone']['corporate_fax']['connection_value'] = trim($row[$header[$corporate_fax_pos]]);
4348                                                    }
4349
4350                                                    if( trim($row[$header[$corporate_cell_pos]]) != "" )
4351                                                    {
4352                                                        $sdata['connections']['aditional_phone']['corporate_cell']['connection_name'] = 'Celular Corporativo';
4353                                                        $sdata['connections']['aditional_phone']['corporate_cell']['connection_value'] = trim($row[$header[$corporate_cell_pos]]);
4354                                                    }
4355
4356                                                    if( trim($row[$header[$corporate_pager_pos]]) != "" )
4357                                                    {
4358                                                        $sdata['connections']['aditional_phone']['corporate_pager']['connection_name'] = 'Pager Corporativo';
4359                                                        $sdata['connections']['aditional_phone']['corporate_pager']['connection_value'] = trim($row[$header[$corporate_pager_pos]]);
4360                                                    }
4361                                                }
[4753]4362
[3322]4363                                                $sdata['addresses']['address_corporative']['address1'] = trim($row[$header[$corporate_street_pos]]);
4364                                                $sdata['addresses']['address_corporative']['address2'] = trim($row[$header[$corporate_street_2_pos]]);
4365                                                $sdata['addresses']['address_corporative']['complement'] = trim($row[$header[$corporate_comp_pos]]);
[4753]4366                                                $sdata['addresses']['address_corporative']['postal_code'] = trim($row[$header[$corporate_cep_pos]]);
[3322]4367                                                $sdata['addresses']['address_corporative']['id_country'] = "BR";
[4753]4368                                                $sdata['addresses']['address_corporative']['id_state'] = trim($row[$header[$corporate_state_pos]]);
[3322]4369                                                $sdata['addresses']['address_corporative']['id_city'] = trim($row[$header[$corporate_city_pos]]);
[4753]4370
4371
[3322]4372                                                $sdata['addresses']['address_personal']['address1'] = trim($row[$header[$street_pos]]);
4373                                                $sdata['addresses']['address_personal']['address2'] = trim($row[$header[$street_2_pos]]);
4374                                                $sdata['addresses']['address_personal']['complement'] = trim($row[$header[$comp_pos]]);
4375                                                $sdata['addresses']['address_personal']['postal_code'] = trim($row[$header[$cep_pos]]);
[4753]4376                                                $sdata['addresses']['address_personal']['id_country'] = "BR";
4377                                                $sdata['addresses']['address_personal']['id_state'] = trim($row[$header[$state_pos]]);
[3322]4378                                                $sdata['addresses']['address_personal']['id_city'] =  trim($row[$header[$city_pos]]);
[1599]4379
[4085]4380                                        if(trim($birth)) {
4381                                                $array_birth = explode("/",trim($birth));
4382                                                $sdata['birthdate'] = date('Y-m-d', mktime(0,0,0,$array_birth[1],$array_birth[0],$array_birth[2]));
4383                                        }
[1599]4384
[3476]4385                                        $sdata['notes'] = addslashes($notes);
[3322]4386                                        //$sdata['is_quick_add'] = true;
[16]4387                                        $sdata['connections']['default_phone']['connection_value'] = $phone;
[1599]4388
[4753]4389                                        //      verifica se email já existe!
[3476]4390                                        $email = addslashes($email);
[4753]4391                                        $contact = $boGroup->verify_contact($email);
[1599]4392
[285]4393                                        if(!$sdata['given_names'] && $email){
4394                                                        $a_email = explode("@",$email);
[3476]4395                                                        $sdata['given_names'] = addslashes($a_email[0]);
[285]4396                                        }
[2]4397
[1599]4398                                        $line_iteration = $return['_failure'] + $return['_existing'] + $return['_new'];
4399
[2]4400                                        if($contact){
4401                                                $return['_existing']++;
[4753]4402                                        }
4403                                        else if((!eregi("^[/_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) && $email) {
[2]4404                                                $return['_failure']++;
[285]4405                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid E-Mail address: " . $email ."<br>";
[16]4406                                        }
[3237]4407                                        else if (!$sdata['given_names'] || !$boPeople ->quick_add($sdata)){
[1599]4408                                                $return['_failure']++;
[285]4409                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid Name: " . $sdata['given_names'] ."<br>";
[2]4410                                        }
[4753]4411                                        else{
4412                                                        if($id_group != 0){
[3334]4413                                                                $this->so_group->add_user_by_name($id_group,$full_name);
[4753]4414                                                        }
[3334]4415                                                        $return['_new']++;
4416                                                }
[1599]4417                        }
[2]4418                                fclose($handle);
[15]4419                                unlink($file);
[2]4420                        }
4421                        else
4422                                $return['error'] = true;
4423
4424                        echo serialize($return);
4425                }
4426        }
4427
4428?>
Note: See TracBrowser for help on using the repository browser.