source: branches/2.1/contactcenter/inc/class.ui_data.inc.php @ 2389

Revision 2389, 116.7 KB checked in by rafaelraymundo, 14 years ago (diff)

Ticket #1012 - Tratamento para gravar contatos com apóstrofo.

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