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

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

Ticket #896 - Cadastro completo de contatos gera caracteres especiais

  • 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                                                        $contact['names_ordered'][0] = urldecode($contact['names_ordered'][0]);
1399                                                        $final[3][$i][1] = $contact['names_ordered'] ? $contact['names_ordered']  : 'none';
1400                                                }
1401                                                else {
1402                                                        $contact['names_ordered'][0] = urldecode($contact['names_ordered'][0]);
1403                                                        $final[3][$i][1] = $contact['names_ordered'] ? $contact['names_ordered']  : 'none';
1404                                                }
1405
1406/********/
1407
1408                                                $final[3][$i][2] = $contact['companies']['company1']['title']? urldecode( $contact['companies']['company1']['title'] ) :'none';
1409
1410                                                //Para exibir a matricula do empregado
1411                                                $final[3][$i][8] = $contact['companies']['company1']['empNumber']?$contact['companies']['company1']['empNumber']:'none';
1412                                                //Para exibir o setor/lotacao do empregado
1413                                                $final[3][$i][9] = $contact['companies']['company1']['department']?$contact['companies']['company1']['department']:'none';
1414                                                //Para exibir o celular empresarial do empregado
1415                                                $final[3][$i][10] = $contact['companies']['company1']['celPhone']?$contact['companies']['company1']['celPhone']:'none';
1416
1417                                                //Para exibir o celular empresarial do empregado
1418                                                if ($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['voip_enabled'] && !$external && $final[3][$i][10] != 'none')
1419                                                            $final[3][$i][10] = "<a title=\"".lang("Call Mobile")."\" href=\"#\" onclick=\"connectVoip('".$final[3][$i][10]."', 'mob')\">".$final[3][$i][10]."</a>";
1420
1421                                                /* Select the correct Email and Telephone to be shown */
1422                                                $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences');
1423
1424                                                if (!is_array($preferences))
1425                                                {
1426                                                        $preferences['personCardEmail'] = 1;
1427                                                        $preferences['personCardPhone'] = 2;
1428                                                }
1429                                                if ($contact['connections'])
1430                                                {
1431                                                        $default_email_found = false;
1432                                                        $default_phone_found = false;
1433                                                        foreach($contact['connections'] as $conn_info)
1434                                                        {
1435                                                                if ($conn_info['id_type'] == $preferences['personCardEmail'] and !$default_email_found)
1436                                                                {
1437                                                                        if ($conn_info['connection_is_default'])
1438                                                                        {
1439                                                                                $default_email_found = true;
1440                                                                        }
1441                                                                        $final[3][$i][4] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1442                                                                }
1443                                                                else if ($conn_info['id_type'] == $preferences['personCardPhone'] and !$default_phone_found)
1444                                                                {
1445                                                                        if ($conn_info['connection_is_default'])
1446                                                                        {
1447                                                                                $default_phone_found = true;
1448                                                                        }
1449
1450/**rev 104**/
1451                                                                        //if ($_SESSION['phpgw_info']['user']['preferences']['contactcenter']['voip_enabled'] && !$external){
1452                                                                        //      $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'ramal')\">".$conn_info['connection_value']."</a>";
1453
1454                                                                        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){
1455                                                                                $conn_info['connection_value'] = "<a title=\"".lang("Call Extension")."\" href=\"#\" onclick=\"connectVoip('".$conn_info['connection_value']."', 'com')\">".$conn_info['connection_value']."</a>";
1456                                                                       
1457/*****/
1458                                                                        }
1459                                                                        $final[3][$i][3] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1460                                                                }
1461                                                        }
1462                                                }
1463
1464                                                if (!$final[3][$i][3])
1465                                                {
1466                                                        $final[3][$i][3] = 'none';
1467                                                }
1468
1469                                                if (!$final[3][$i][4])
1470                                                {
1471                                                        $final[3][$i][4] = 'none';
1472                                                }
1473
1474                                                $final[3][$i][5] = $contact['alias']? urldecode( $contact['alias'] ):'none';
1475                                                $final[3][$i][6] = $ids[$i];
1476
1477/**rev 104**/
1478        /*                              //      If contact is a public list, then load the forwarding addresses.
1479                                                if($contact['account_type'][0] == 'l')
1480                                                        $final[3][$i][7] = array();
1481        */
1482
1483                                                //If contact is a public list or a group, then load the forwarding addresses.
1484                                                if($contact['account_type'][0] == 'l' || $contact['account_type'][0] == 'g')
1485                                                        $final[3][$i][7] = ($contact['account_type'][0] == 'l' ? 'list' : 'group');
1486                                                       
1487                                                if($this->page_info['actual_catalog']['class']=='bo_shared_people_manager') {
1488                                                        $final[3][$i][11] = $perms[$i];
1489                                                        $final[3][$i][12] = lang('Shared').": ".$owner_names[$owners[$i]]['cn'];
1490                                                }
1491/******/
1492
1493                                                $final[4][$i] = $contact['photo'] ? 1  : 0;
1494                                                $i++;
1495                                        }
1496                                        else
1497                                        {
1498                                                // coloca mensagem de erro no vetor que retorna para o browser
1499                                        }
1500                                }
1501                                $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";
1502                                $final[5] = '<span class="link" onclick="'.$lnk_compose;
1503                                $final[6] = $prop_names;
1504                                $final[7] = $validos;
1505                                $final[8] = $this->page_info['actual_catalog']['class'];
1506                                $final[9] = $count;
1507
1508
1509                                $this->page_info['actual_letter'] = $letter;
1510                                $this->page_info['actual_page'] = $page;
1511
1512                                $this->save_session();
1513                                echo serialize($final);
1514                                return;
1515                        }
1516
1517                        $this->page_info['actual_letter'] = $letter;
1518                        $this->page_info['actual_page'] = $page;
1519
1520                        $this->save_session();
1521
1522                        $final[0] = 0;
1523                        $final[1] = $this -> typeContact;
1524                        echo serialize($final);
1525                }
1526
1527                function get_visible_all_ldap()
1528                {
1529                        $bo = CreateObject('contactcenter.bo_ldap_manager');
1530                        $ldap_query = $bo->srcs;
1531                        return $ldap_query[1]['visible'];
1532                }
1533
1534
1535                /*!
1536
1537                        @function get_group_data
1538                        @abstract Returns all the information of a given Group
1539                        @author Nilton Emilio Buhrer Neto
1540
1541                        @param (integer) $id The id to get information
1542
1543                */
1544                function get_group_data($id,$shared_from=null)
1545                {
1546                        $this->bo->catalog = CreateObject('contactcenter.bo_group_manager');
1547                        $fields = $this->bo->catalog->get_fields(true);
1548                        $data = $this->bo->catalog->get_single_entry($id,$fields);
1549                       
1550                        if($id) {                       
1551                                // get All Contacts by group.
1552                                $data['contact_in_list'] = $this->bo->catalog->get_contacts_by_group($id);                                                             
1553                        }
1554                       
1555                        $boGroup = CreateObject('contactcenter.bo_group');
1556
1557                        $all_contacts = $boGroup->get_all_contacts('only_email',$shared_from);
1558                       
1559                        $contact_options = "";
1560                        if(count($all_contacts)) {                                     
1561                                foreach($all_contacts as $idx => $contact) {                           
1562                                        $contact_options .= "<OPTION value='".$contact['id_connection']."'>".$contact['names_ordered']." (".$contact['connection_value'].")</OPTION>";
1563                                }
1564                        }
1565                        $data['contact_list'] = $contact_options;
1566                        $data['result'] = 'ok';                                                         
1567                        echo serialize($data);                 
1568                }               
1569               
1570                /*!
1571
1572                        @function get_full_data
1573                        @abstract Returns all the information of a given Entry
1574                        @author Raphael Derosso Pereira
1575
1576                        @param (integer) $id The id to get information
1577
1578                */
1579/**rev 104**/
1580                //function get_full_data($id)
1581                function get_full_data($id,$catalog='bo_people_catalog')
1582                {
1583                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
1584/**rev 104**/
1585                        //$this->bo->catalog = CreateObject('contactcenter.bo_people_catalog');
1586                        $this->bo->catalog = CreateObject('contactcenter.'.$catalog);
1587/****/
1588                        $fields = $this->bo->catalog->get_fields(true);
1589                        $fields['photo'] = false;
1590                        $entry = $this->bo->catalog->get_single_entry($id,$fields);
1591
1592                        if (is_bool($entry['given_names']))
1593                        {
1594                                $data['result'] = 'false';
1595                                echo serialize($data);
1596                                return;
1597                        }
1598
1599                        $date = explode('-', $entry['birthdate']);
1600                        $j = 0;
1601                        for ($i = 0; $i < 5; $i+=2)
1602                        {
1603                                switch($dateformat{$i})
1604                                {
1605                                        case 'Y':
1606                                                $birthdate[$j] = $date[0];
1607                                                break;
1608
1609                                        case 'm':
1610                                        case 'M':
1611                                                $birthdate[$j] = $date[1];
1612                                                break;
1613
1614                                        case 'd':
1615                                                $birthdate[$j] = $date[2];
1616                                }
1617                                $j++;
1618                        }
1619                        $datecount = 0;
1620
1621                        $data['result'] = 'ok';
1622                        $data['cc_full_add_contact_id'] = $id;
1623
1624                        /* Personal Data */
1625                        $data['personal']['cc_pd_photo'] = '../index.php?menuaction=contactcenter.ui_data.data_manager&method=get_photo&id='.$id;
1626                        $data['personal']['cc_pd_alias'] = $entry['alias'];
1627                        $data['personal']['cc_pd_given_names'] = $entry['given_names'];
1628                        $data['personal']['cc_pd_family_names'] = $entry['family_names'];
1629                        $data['personal']['cc_pd_full_name'] = $entry['names_ordered'];
1630                        $data['personal']['cc_pd_suffix'] = $entry['id_suffix'];
1631                        $data['personal']['cc_pd_birthdate_0'] = $birthdate[0];
1632                        $data['personal']['cc_pd_birthdate_1'] = $birthdate[1];
1633                        $data['personal']['cc_pd_birthdate_2'] = $birthdate[2];
1634                        //$data['personal']['cc_pd_sex'] = $entry['sex'] === 'M' ? 1 : ($entry['sex'] === 'F' ? 2 : 0);
1635                        $data['personal']['cc_pd_prefix'] = $entry['id_prefix'];
1636                        $data['personal']['cc_pd_gpg_finger_print'] = $entry['pgp_key'];
1637                        $data['personal']['cc_pd_notes'] = $entry['notes'];
1638
1639                        /* Addresses */
1640                        if (is_array($entry['addresses']))
1641                        {
1642                                $data['addresses'] = $entry['addresses'];
1643                        }
1644
1645                        /* Connections */
1646                        if (is_array($entry['connections']))
1647                        {
1648                                $data['connections'] = array();
1649                                foreach ($entry['connections'] as $connection)
1650                                {
1651                                        $type = $connection['id_type'];
1652                                        $i = count($data['connections'][$type]);
1653                                        $data['connections'][$type][$i]['id'] = $connection['id_connection'];
1654                                        $data['connections'][$type][$i]['name'] = $connection['connection_name'];
1655                                        $data['connections'][$type][$i]['value'] = $connection['connection_value'];
1656                                        $data['connections'][$type][$i]['is_default'] = $connection['connection_is_default'];
1657                                }
1658                        }
1659//                      print_r($data);
1660//OBSERVAR cc_department
1661                        /*Corporative*/
1662                        if($GLOBALS['phpgw_info']['server']['personal_contact_type']=='True'){
1663                                $data['personal']['cc_name_corporate'] = $entry['corporate_name'];
1664                                $data['personal']['cc_job_title'] = $entry['job_title'];
1665                                $data['personal']['cc_department'] = $entry['department'];
1666                                $data['personal']['cc_name_corporate'] = $entry['corporate_name'];
1667                                $data['personal']['cc_web_page'] = $entry['web_page'];
1668                        }
1669                       
1670
1671
1672                        /* Relations */
1673
1674                        echo serialize($data);
1675                }
1676
1677                /*!
1678
1679                        @function get_contact_full_add_const
1680                        @abstract Returns all the constant fields in Contact Full Add Window to the JS
1681                        @author Raphael Derosso Pereira
1682                */
1683                function get_contact_full_add_const()
1684                {
1685                        $data = array();
1686                        $boPeopleCatalog = CreateObject('contactcenter.bo_people_catalog');
1687                        $predata[] = $boPeopleCatalog -> get_all_prefixes();
1688                        $predata[] = $boPeopleCatalog -> get_all_suffixes();
1689                        $predata[] = $boPeopleCatalog -> get_all_addresses_types();
1690                        $predata[] = $boPeopleCatalog -> get_all_countries();
1691                        $predata[] = $boPeopleCatalog -> get_all_connections_types();
1692                        //$predata[] = $this->bo->catalog->get_all_relations_types();
1693
1694                        $i = 0;
1695                        foreach($predata as $data_)
1696                        {
1697                                if ($data_)
1698                                {
1699                                        $data[$i] = $data_;
1700                                }
1701
1702                                $i++;
1703                        }
1704
1705                        if (count($data))
1706                        {
1707                                echo serialize($data);
1708                                return;
1709                        }
1710
1711                        echo 0;
1712                }
1713
1714                /*!
1715
1716                        @function quick_add
1717                        @abstract Adds a new Contact using the Quick Add interface
1718                        @author Raphael Derosso Pereira
1719
1720                        @param string $sdata Serialized data
1721                */
1722                function quick_add($sdata)
1723                {
1724
1725                        $sdata = str_replace('\\"', '"', $sdata);
1726                        $new_array = unserialize($sdata);
1727                        $tdata = array();
1728
1729                        foreach($new_array as $tmp)
1730                                $tdata[] = $tmp;
1731
1732                        if (!$tdata)
1733                        {
1734                                echo serialize(array(
1735                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1736                                        'status' => 'abort'
1737                                ));
1738
1739                                return;
1740                        }
1741
1742                        // verifica se email jï¿œ existe!
1743                        $boGroup = CreateObject('contactcenter.bo_group');
1744                        $contact = $boGroup->verify_contact($tdata[4]);
1745
1746                        if($contact)
1747                        {
1748                                $str_contact = "\r\n - ".implode("\r\n - ",$contact);
1749
1750                                echo serialize(array(
1751                                        'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1752                                        'status' => 'alreadyExists'
1753                                ));
1754
1755                                return;
1756                        }
1757
1758                        $data['alias'] = $tdata[0];
1759                        $data['given_names'] = $tdata[1];
1760                        $data['family_names'] = $tdata[2];
1761//                      $data['connections']['default_phone']['id_typeof_connection'] = 1;
1762                        $data['connections']['default_phone']['connection_name'] = lang('Main');
1763                        $data['connections']['default_phone']['connection_value'] = $tdata[3];
1764//                      $data['connections']['default_email']['id_typeof_connection'] = 2;
1765                        $data['connections']['default_email']['connection_name'] = lang('Main');
1766                        $data['connections']['default_email']['connection_value'] = $tdata[4];
1767                        $boPeople = CreateObject('contactcenter.bo_people_catalog');
1768
1769                        if ($boPeople ->quick_add($data))
1770                        {
1771                                $this->page_info['changed'] = true;
1772
1773                                echo serialize(array(
1774                                        'msg'    => lang('Entry added with success!'),
1775                                        'status' => 'ok'
1776                                ));
1777                        }
1778                        else
1779                        {
1780                                echo serialize(array(
1781                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1782                                        'status' => 'error'
1783                                ));
1784                        }
1785
1786                        $this->save_session();
1787
1788                }
1789
1790                /*!
1791
1792                        @function add_group
1793                        @abstract Adds a new Group using the Add Group interface
1794                        @author Nilton Emilio Buhrer Neto
1795
1796                        @param string $sdata Serialized data
1797                */
1798                function add_group($sdata)
1799                {
1800                        $sdata = str_replace('\\"', '"', $sdata);
1801                        $tdata = unserialize($sdata);
1802                        $new_tdata = array();
1803
1804                        if (!$tdata)
1805                        {
1806                                echo serialize(array(
1807                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1808                                        'status' => 'abort'
1809                                ));
1810
1811                                return;
1812                        }
1813
1814                        foreach($tdata as $tmp)
1815                                $new_tdata[] = $tmp;
1816
1817                        $data['title'] = $new_tdata[0];
1818                        $data['contact_in_list'] = $new_tdata[1];
1819                        $data['id_group'] = $new_tdata[2];
1820
1821                        $boGroup = CreateObject('contactcenter.bo_group_manager');
1822                        $id = $boGroup -> add_group($data);
1823
1824                        if ($id)
1825                        {
1826                                $this->page_info['changed'] = true;
1827
1828                                echo serialize(array(
1829                                        'msg'    => lang('Entry added with success!'),
1830                                        'status' => 'ok'
1831                                ));
1832                        }
1833                        else
1834                        {
1835                                echo serialize(array(
1836                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1837                                        'status' => 'error'
1838                                ));
1839                        }
1840
1841                        $this->save_session();
1842                }
1843
1844                /*!
1845
1846                        @function remove_group
1847                        @abstract Removes a group if the user has the right to do it
1848                        @author Nilton Emilio Buhrer Neto
1849                        @param (integer) $id The id to be removed
1850
1851                */
1852                function remove_group($id)
1853                {
1854                                $soGroup = CreateObject('contactcenter.so_group');
1855                                $data = array ('id_group' => $id);
1856                                if($soGroup -> delete($data)) {
1857                                        echo serialize(array(
1858                                                'msg'    => lang('Removed Entry ID '.$id.'!'),
1859                                                'status' => 'ok'
1860                                        ));
1861                                }
1862                                else {
1863                                        echo serialize(array(
1864                                                'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1865                                                'status' => 'error'
1866                                        ));
1867                                }
1868
1869                        $this->save_session();
1870                }
1871
1872
1873                function remove_all_entries (){
1874
1875                        $error = false;
1876                        $this->all_entries = $this->bo->catalog->get_all_entries_ids();
1877
1878                        foreach($this->all_entries as $index => $id) {
1879                                $result = $this->bo->catalog->remove_single_entry($id);
1880                                if(!$result) {
1881                                        $error = true;
1882                                        break;
1883                                }
1884                        }
1885
1886                        if(!$error) {
1887                                echo serialize(array(
1888                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
1889                                        'status' => 'ok'
1890                                ));
1891                        }
1892                        else {
1893                                echo serialize(array(
1894                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
1895                                        'status' => 'fail'
1896                                ));
1897                        }
1898
1899                        $this->save_session();
1900                }
1901
1902                /*!
1903
1904                        @function remove_entry
1905                        @abstract Removes an entry if the user has the right to do it
1906                        @author Raphael Derosso Pereira
1907
1908                        @param (integer) $id The id to be removed
1909
1910                */
1911                function remove_entry ($id)
1912                {
1913                        if (!is_int($id))
1914                        {
1915                                echo lang('Couldn\'t remove entry! Problem passing data to the server. Please inform admin!');
1916                                return;
1917                        }
1918
1919                        $this->page_info['changed'] = true;
1920                        $result = $this->bo->catalog->remove_single_entry($id);
1921
1922                        if ($result)
1923                        {
1924                                if ($pos = array_search($id, $this->page_info['actual_entries']))
1925                                {
1926                                        unset($this->page_info['actual_entries'][$pos]);
1927                                }
1928
1929                                $temp = false;
1930                                reset($this->page_info['actual_entries']);
1931                                foreach($this->page_info['actual_entries'] as $t)
1932                                {
1933                                        $temp[] = $t;
1934                                }
1935
1936                                $this->page_info['actual_entries'] = $temp;
1937
1938                                echo serialize(array(
1939                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
1940                                        'status' => 'ok'
1941                                ));
1942                        }
1943                        else
1944                        {
1945                                echo serialize(array(
1946                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
1947                                        'status' => 'fail'
1948                                ));
1949                        }
1950
1951                        $this->save_session();
1952                }
1953
1954
1955                /*!
1956
1957                        @function post_full_add
1958                        @abstract Saves all the information altered/entered in the Full Add
1959                                window
1960                        @author Raphael Derosso Pereira
1961
1962                */
1963                function post_full_add()
1964                {
1965                        $data =  $_POST['data'];
1966                        // Exceptions!!! utf8 special chars.
1967                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
1968                        $data = unserialize(str_replace('\\"', '"', $data));
1969                        $this -> bo -> catalog = CreateObject('contactcenter.bo_people_catalog');
1970
1971                        if (!is_array($data))
1972                        {
1973                                echo serialize(array(
1974                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
1975                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
1976                                                          'Sorry for the inconvenient!<br><br>'.
1977                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
1978                                        'status' => 'fatal'
1979                                ));
1980                                return;
1981                        }
1982//                      print_r($data);
1983//                      echo '<br><br>';
1984
1985                        $replacer = $data['commercialAnd'];
1986                        unset($data['commercialAnd']);
1987                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
1988                        {
1989                                echo serialize(array(
1990                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
1991                                        'status' => 'fatal'
1992                                ));
1993
1994                                return;
1995                        }
1996
1997                        if ($data['id_contact'])
1998                        {
1999                                $id = $data['id_contact'];
2000                                $id_photo = $id;
2001                                unset($data['id_contact']);
2002                        }
2003                        else
2004                        {
2005                                $id_photo = '_new_';
2006                        }
2007
2008                        /*
2009                         * Process Photo, if available
2010                         */
2011                        $sleep_count = 0;
2012                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2013                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2014                        {
2015                                sleep(1);
2016                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2017                                $sleep_count++;
2018
2019                                if ($sleep_count > 35)
2020                                {
2021                                        // TODO
2022                                        return;
2023                                }
2024                        }
2025                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
2026
2027                        if (isset($this->page_info['photos'][$id_photo]))
2028                        {
2029                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2030                                {
2031                                        echo serialize(array(
2032                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2033                                                'status' => $this->page_info['photos'][$id_photo]['status']
2034                                        ));
2035
2036                                        return;
2037                                }
2038
2039                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2040                                unset($this->page_info['photos'][$id_photo]);
2041                                $this->save_session();
2042                        }
2043
2044                        /*
2045                         * Arrange Date so it gets inserted correctly
2046                         */
2047
2048                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
2049
2050                        $j = 0;
2051                        for ($i = 0; $i < 5; $i+=2)
2052                        {
2053                                switch($dateformat{$i})
2054                                {
2055                                        case 'Y':
2056                                                $date[$j]['size'] = 4;
2057                                                $date[$j]['digit'] = 'Y';
2058                                                break;
2059
2060                                        case 'm':
2061                                        case 'M':
2062                                                $date[$j]['size'] = 2;
2063                                                $date[$j]['digit'] = 'M';
2064                                                break;
2065
2066                                        case 'd':
2067                                                $date[$j]['size'] = 2;
2068                                                $date[$j]['digit'] = 'D';
2069                                }
2070                                $j++;
2071                        }
2072                        $datecount = 0;
2073
2074                        /* Verify Data and performs insertion/update */
2075                        foreach($data as $field => &$value)
2076                        {
2077                                if ($value == '' or is_null($value))
2078                                {
2079                                        unset($data[$field]);
2080                                        continue;
2081                                }
2082
2083                                switch($field)
2084                                {
2085                                        case 'corporate_name':
2086                                        case 'job_title':
2087                                        case 'department':
2088                                        case 'web_page':
2089                                        case 'pgp_key':
2090
2091                                                /* Do Nothing. This is just to make sure no invalid field is passed */
2092                                                break;
2093
2094                                        case 'alias':
2095                                        case 'given_names':
2096                                        case 'family_names':
2097                                        case 'names_ordered':
2098                                        case 'notes':
2099                                                /* Do Nothing. This is just to make sure no invalid field is passed */
2100                                                $data[$field] = rawurldecode($data[$field]);
2101                                                break;
2102
2103                                        case 'id_status':
2104                                        case 'id_prefix':
2105                                        case 'id_suffix':
2106                                                if ($data[$field] == 0)
2107                                                {
2108                                                        unset($data[$field]);
2109                                                }
2110                                                break;
2111
2112                                        case 'birthdate_0':
2113                                        case 'birthdate_1':
2114                                        case 'birthdate_2':
2115
2116                                                switch($date[$datecount]['digit'])
2117                                                {
2118                                                        case 'Y':
2119                                                                $date['value'][2] = (int) $data[$field];
2120                                                                break;
2121
2122                                                        case 'M':
2123                                                                $date['value'][0] = (int) $data[$field];
2124                                                                break;
2125
2126                                                        case 'D':
2127                                                                $date['value'][1] = (int) $data[$field];
2128                                                                break;
2129                                                }
2130                                                unset($data[$field]);
2131                                                $datecount++;
2132
2133                                                if ($datecount != 3)
2134                                                {
2135                                                        break;
2136                                                }
2137
2138                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2139                                                {
2140                                                        echo serialize(array(
2141                                                                'msg' => lang('Invalid Date'),
2142                                                                'status' => 'invalid_data'
2143                                                        ));
2144                                                        return;
2145                                                }
2146
2147                                                $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2148                                                break;
2149
2150                                        case 'sex':
2151                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2152                                                {
2153                                                        echo serialize(array(
2154                                                                'msg' => lang('Invalid Sex'),
2155                                                                'status' => 'invalid_data'
2156                                                        ));
2157                                                        return;
2158                                                }
2159                                                break;
2160
2161
2162                                        case 'addresses':
2163                                                /* Insert new cities/states */
2164                                                if (isset($value['new_states']))
2165                                                {
2166                                                        foreach($value['new_states'] as $type => $state_info)
2167                                                        {
2168                                                                $index = 'address'.$type;
2169
2170                                                                $id_state = $this->bo->catalog->add_state($state_info);
2171                                                                $data['addresses'][$index]['id_state'] = $id_state;
2172
2173                                                                if ($value['new_cities'][$type])
2174                                                                {
2175                                                                        $value['new_cities'][$type]['id_state'] = $id_state;
2176                                                                }
2177                                                        }
2178
2179                                                        unset($data['addresses']['new_states']);
2180                                                }
2181
2182                                                if (isset($value['new_cities']))
2183                                                {
2184                                                        foreach($value['new_cities'] as $type => $city_info)
2185                                                        {
2186                                                                $index = 'address'.$type;
2187
2188                                                                $id_city = $this->bo->catalog->add_city($city_info);
2189                                                                $data['addresses'][$index]['id_city'] = $id_city;
2190                                                        }
2191
2192                                                        unset($data['addresses']['new_cities']);
2193                                                }
2194
2195                                        break;
2196
2197                                        case 'connections':
2198                                        case 'photo':
2199                                                /* Does nothing... */
2200                                                break;
2201
2202                                        default:
2203                                                echo serialize(array(
2204                                                        'msg' => lang('Invalid field: ').$field,
2205                                                        'status' => 'invalid_data'
2206                                                ));
2207                                                return;
2208                                }
2209                        }
2210
2211                        $code = '$id = $this->bo->catalog->';
2212
2213                        if (!is_null($id) and $id !== '')
2214                        {
2215                                $code .= $code.'update_single_info($id, $data);';
2216                                $result = array(
2217                                        'msg' => lang('Updated Successfully!'),
2218                                        'status' => 'ok'
2219                                );
2220                        }
2221                        else
2222                        {
2223                                $code .= 'add_single_entry($data);';
2224                                $result = array(
2225                                        'msg' => lang('Entry Added Successfully!'),
2226                                        'status' => 'ok'
2227                                );
2228                        }
2229
2230                        eval($code);
2231
2232                        if (!($id))
2233                        {
2234                                $result = array(
2235                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2236                                                   'Report the problem to the Administrator.'),
2237                                        'status' => 'fail'
2238                                );
2239                        }
2240
2241                        echo serialize($result);
2242                }
2243
2244
2245                function post_full_add_shared()
2246                {
2247                        $data =  $_POST['data'];
2248                        // Exceptions!!! utf8 special chars.
2249                        $data = preg_replace("/\%u2(\d+)(\d+)(\d+)/","-",$data);
2250                        $data = unserialize(str_replace('\\"', '"', $data));
2251                        $this -> bo -> catalog = CreateObject('contactcenter.bo_shared_people_manager');
2252
2253                        if (!is_array($data))
2254                        {
2255                                echo serialize(array(
2256                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
2257                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
2258                                                          'Sorry for the inconvenient!<br><br>'.
2259                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
2260                                        'status' => 'fatal'
2261                                ));
2262                                return;
2263                        }
2264//                      print_r($data);
2265//                      echo '<br><br>';
2266
2267                        $replacer = $data['commercialAnd'];
2268                        unset($data['commercialAnd']);
2269                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
2270                        {
2271                                echo serialize(array(
2272                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
2273                                        'status' => 'fatal'
2274                                ));
2275
2276                                return;
2277                        }
2278
2279                        if ($data['id_contact'])
2280                        {
2281                                $id = $data['id_contact'];
2282                                $id_photo = $id;
2283                                unset($data['id_contact']);
2284                        }
2285                        else
2286                        {
2287                                $id_photo = '_new_';
2288                        }
2289
2290                        if ($data['owner'])
2291                        {
2292                                $owner = $data['owner'];
2293                                unset($data['owner']);
2294                        }
2295                        /*
2296                         * Process Photo, if available
2297                         */
2298                        $sleep_count = 0;
2299                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2300                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
2301                        {
2302                                sleep(1);
2303                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
2304                                $sleep_count++;
2305
2306                                if ($sleep_count > 35)
2307                                {
2308                                        // TODO
2309                                        return;
2310                                }
2311                        }
2312                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
2313
2314                        if (isset($this->page_info['photos'][$id_photo]))
2315                        {
2316                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
2317                                {
2318                                        echo serialize(array(
2319                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
2320                                                'status' => $this->page_info['photos'][$id_photo]['status']
2321                                        ));
2322
2323                                        return;
2324                                }
2325
2326                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
2327                                unset($this->page_info['photos'][$id_photo]);
2328                                $this->save_session();
2329                        }
2330
2331                        /*
2332                         * Arrange Date so it gets inserted correctly
2333                         */
2334
2335                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
2336
2337                        $j = 0;
2338                        for ($i = 0; $i < 5; $i+=2)
2339                        {
2340                                switch($dateformat{$i})
2341                                {
2342                                        case 'Y':
2343                                                $date[$j]['size'] = 4;
2344                                                $date[$j]['digit'] = 'Y';
2345                                                break;
2346
2347                                        case 'm':
2348                                        case 'M':
2349                                                $date[$j]['size'] = 2;
2350                                                $date[$j]['digit'] = 'M';
2351                                                break;
2352
2353                                        case 'd':
2354                                                $date[$j]['size'] = 2;
2355                                                $date[$j]['digit'] = 'D';
2356                                }
2357                                $j++;
2358                        }
2359                        $datecount = 0;
2360
2361                        /* Verify Data and performs insertion/update */
2362                        foreach($data as $field => &$value)
2363                        {
2364                                if ($value == '' or is_null($value))
2365                                {
2366                                        unset($data[$field]);
2367                                        continue;
2368                                }
2369
2370                                switch($field)
2371                                {
2372                                        case 'alias':
2373                                        case 'given_names':
2374                                        case 'family_names':
2375                                        case 'names_ordered':
2376                                        case 'pgp_key':
2377                                        case 'notes':
2378                                        case 'photo':
2379                                                $value = urldecode( $value );
2380                                                /* Do Nothing. This is just to make sure no invalid field is passed */
2381                                                break;
2382
2383                                        case 'id_status':
2384                                        case 'id_prefix':
2385                                        case 'id_suffix':
2386                                                if ($data[$field] == 0)
2387                                                {
2388                                                        unset($data[$field]);
2389                                                }
2390                                                break;
2391
2392                                        case 'birthdate_0':
2393                                        case 'birthdate_1':
2394                                        case 'birthdate_2':
2395
2396                                                switch($date[$datecount]['digit'])
2397                                                {
2398                                                        case 'Y':
2399                                                                $date['value'][2] = (int) $data[$field];
2400                                                                break;
2401
2402                                                        case 'M':
2403                                                                $date['value'][0] = (int) $data[$field];
2404                                                                break;
2405
2406                                                        case 'D':
2407                                                                $date['value'][1] = (int) $data[$field];
2408                                                                break;
2409                                                }
2410                                                unset($data[$field]);
2411                                                $datecount++;
2412
2413                                                if ($datecount != 3)
2414                                                {
2415                                                        break;
2416                                                }
2417
2418                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
2419                                                {
2420                                                        echo serialize(array(
2421                                                                'msg' => lang('Invalid Date'),
2422                                                                'status' => 'invalid_data'
2423                                                        ));
2424                                                        return;
2425                                                }
2426
2427                                                $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
2428                                                break;
2429
2430                                        case 'sex':
2431                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
2432                                                {
2433                                                        echo serialize(array(
2434                                                                'msg' => lang('Invalid Sex'),
2435                                                                'status' => 'invalid_data'
2436                                                        ));
2437                                                        return;
2438                                                }
2439                                                break;
2440
2441
2442                                        case 'addresses':
2443                                                /* Insert new cities/states */
2444                                                if (isset($value['new_states']))
2445                                                {
2446                                                        foreach($value['new_states'] as $type => $state_info)
2447                                                        {
2448                                                                $index = 'address'.$type;
2449
2450                                                                $id_state = $this->bo->catalog->add_state($state_info);
2451                                                                $data['addresses'][$index]['id_state'] = $id_state;
2452
2453                                                                if ($value['new_cities'][$type])
2454                                                                {
2455                                                                        $value['new_cities'][$type]['id_state'] = $id_state;
2456                                                                }
2457                                                        }
2458
2459                                                        unset($data['addresses']['new_states']);
2460                                                }
2461
2462                                                if (isset($value['new_cities']))
2463                                                {
2464                                                        foreach($value['new_cities'] as $type => $city_info)
2465                                                        {
2466                                                                $index = 'address'.$type;
2467
2468                                                                $id_city = $this->bo->catalog->add_city($city_info);
2469                                                                $data['addresses'][$index]['id_city'] = $id_city;
2470                                                        }
2471
2472                                                        unset($data['addresses']['new_cities']);
2473                                                }
2474
2475                                        break;
2476
2477                                        case 'connections':
2478                                                /* Does nothing... */
2479                                                break;
2480
2481                                        default:
2482                                                echo serialize(array(
2483                                                        'msg' => lang('Invalid field: ').$field,
2484                                                        'status' => 'invalid_data'
2485                                                ));
2486                                                return;
2487                                }
2488                        }
2489
2490                        $code = '$id = $this->bo->catalog->';
2491
2492                        if (!is_null($id) and $id !== '')
2493                        {
2494                                $code .= $code.'update_single_info($id, $data);';
2495                                $result = array(
2496                                        'msg' => lang('Updated Successfully!'),
2497                                        'status' => 'ok'
2498                                );
2499                        }
2500                        else
2501                        {
2502                                $code .= 'add_single_entry($data,'.$owner.');';
2503                                $result = array(
2504                                        'msg' => lang('Entry Added Successfully!'),
2505                                        'status' => 'ok'
2506                                );
2507                        }
2508
2509                        eval($code);
2510
2511                        if (!($id))
2512                        {
2513                                $result = array(
2514                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
2515                                                   'Report the problem to the Administrator.'),
2516                                        'status' => 'fail'
2517                                );
2518                        }
2519
2520                        echo serialize($result);
2521}
2522                /*!
2523
2524                        @function post_photo
2525                        @abstract Wrapper to post a photo without reload a page.
2526                        @author Raphael Derosso Pereira
2527
2528                */
2529                function post_photo($id)
2530                {
2531                        //print_r($_FILES);
2532                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'y'));
2533
2534                        if (!is_array($_FILES) and is_array(!$_FILES['cc_pd_photo']))
2535                        {
2536                                $this->page_info['photos'][$id]['status'] = 'no_upload';
2537                                $this->page_info['photos'][$id]['msg'] = lang('No Photos uploaded to Server.');
2538
2539                                $this->save_session();
2540                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2541                                return;
2542                        }
2543
2544                        if (!function_exists('imagecreate'))
2545                        {
2546                                $this->page_info['photos'][$id]['status'] = 'no_GD_lib';
2547                                $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.');
2548
2549                                $this->save_session();
2550                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2551                                return;
2552                        }
2553
2554                        // TODO: Get Max Size from preferences!
2555                        if ($_FILES['cc_pd_photo']['size'] > 1000000)
2556                        {
2557                                $this->page_info['photos'][$id]['status'] = 'too_large';
2558                                $this->page_info['photos'][$id]['msg'] = lang('Image too large! ContactCenter limits the image size to 1 Mb');
2559
2560                                $this->save_session();
2561                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2562                                return;
2563                        }
2564
2565                        if ($_FILES['cc_pd_photo']['error'])
2566                        {
2567                                $this->page_info['photos'][$id]['status'] = 'error';
2568                                $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'];
2569
2570                                $this->save_session();
2571                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2572                                return;
2573                        }
2574
2575                        switch($_FILES['cc_pd_photo']['type'])
2576                        {
2577                                case 'image/jpeg':
2578                                case 'image/pjpeg':
2579                                        $src_img = imagecreatefromjpeg($_FILES['cc_pd_photo']['tmp_name']);
2580                                        if ($src_img == '')
2581                                        {
2582                                                $bogus = true;
2583                                        }
2584                                        break;
2585
2586                                case 'image/png':
2587                                case 'image/x-png':
2588                                        $src_img = imagecreatefrompng($_FILES['cc_pd_photo']['tmp_name']);
2589                                        if ($src_img == '')
2590                                        {
2591                                                $bogus = true;
2592                                        }
2593                                        break;
2594
2595                                case 'image/gif':
2596                                        $src_img = imagecreatefromgif($_FILES['cc_pd_photo']['tmp_name']);
2597                                        if ($src_img == '')
2598                                        {
2599                                                $bogus = true;
2600                                        }
2601                                        break;
2602
2603                                default:
2604
2605                                        $this->page_info['photos'][$id]['status'] = 'invalid_image';
2606                                        $this->page_info['photos'][$id]['msg'] = lang('The file must be an JPEG, PNG or GIF Image.');
2607
2608                                        $this->save_session();
2609                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2610                                        return;
2611                        }
2612
2613                        if ($bogus)
2614                        {
2615                                        $this->page_info['photos'][$id]['status'] = 'invalid_file';
2616                                        $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
2617
2618                                        $this->save_session();
2619                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2620                                        return;
2621                        }
2622
2623                        $img_size = getimagesize($_FILES['cc_pd_photo']['tmp_name']);
2624                        $dst_img = imagecreatetruecolor(60, 80);
2625
2626                        if (!imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 60, 80, $img_size[0], $img_size[1]))
2627                        {
2628                                $this->page_info['photos'][$id]['status'] = 'invalid_file';
2629                                $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
2630
2631                                $this->save_session();
2632                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2633                                return;
2634                        }
2635
2636                        ob_start();
2637                        imagepng($dst_img);
2638                        $this->page_info['photos'][$id]['content'] = ob_get_contents();
2639                        ob_end_clean();
2640
2641                        $this->page_info['photos'][$id]['status'] = 'changed';
2642                        $this->page_info['photos'][$id]['msg'] = lang('Photo Successfully Updated!');
2643
2644                        $this->save_session();
2645
2646                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
2647
2648                        imagedestroy($src_img);
2649                        imagedestroy($dst_img);
2650                        echo 'ok';
2651                        return;
2652                }
2653
2654
2655                /*!
2656
2657                        @function get_photo
2658                        @abstract Returns the photo to the browser
2659                        @author Raphael Derosso Pereira
2660
2661                */
2662                function get_photo($id)
2663                {
2664                        $fields = $this->bo->catalog->get_fields(false);
2665                        $fields['photo'] = true;
2666
2667                        $contact = $this->bo->catalog->get_single_entry($id, $fields);
2668
2669                        if (!$contact['photo'])
2670                        {
2671                                header('Content-type: image/png');
2672                                echo file_get_contents(PHPGW_INCLUDE_ROOT.'/contactcenter/templates/default/images/photo_celepar.png');
2673                                return;
2674                        }
2675
2676                        header('Content-type: image/jpeg');
2677                        $photo = imagecreatefromstring ($contact['photo']);
2678                        $width = imagesx($photo);
2679                        $height = imagesy($photo);
2680                        $twidth = 70;
2681                        $theight = 90;
2682                        $small_photo = imagecreatetruecolor ($twidth, $theight);
2683                        imagecopyresampled($small_photo, $photo, 0, 0, 0, 0,$twidth, $theight, $width, $height);
2684                        imagejpeg($small_photo,"",100);
2685                        return;
2686                }
2687
2688                /*!
2689
2690                        @function get_states
2691                        @abstract Echos a serialized array containing all the states for the given country
2692                        @author Raphael Derosso Pereira
2693
2694                        @params $id_country The ID of the Country that contains the requested states
2695
2696                */
2697                function get_states($id_country)
2698                {
2699                        $states = $this->bo->catalog->get_all_states($id_country);
2700
2701                        if (!$states)
2702                        {
2703                                $result = array(
2704                                        'msg'    => lang('No States found for this Country.'),
2705                                        'status' => 'empty'
2706                                );
2707
2708                                echo serialize($result);
2709                                return;
2710                        }
2711
2712                        $result = array(
2713                                'msg'    => lang('States Successfully retrieved!'),
2714                                'status' => 'ok'
2715                        );
2716
2717                        foreach ($states as $state_info)
2718                        {
2719                                $result['data'][$state_info['id_state']] = $state_info['name'];
2720
2721                                if ($state_info['symbol'])
2722                                {
2723                                        $result['data'][$state_info['id_state']] .= ', '.$state_info['symbol'];
2724                                }
2725                        }
2726
2727                        echo serialize($result);
2728                }
2729
2730                /*!
2731
2732                        @function get_cities
2733                        @abstract Echos a serialized array containing all the cities of a given state
2734                        @author Raphael Derosso Pereira
2735
2736                        @param $id_country The ID of the Country that has the specified Cities (in case the
2737                                Country doesn't have any States)
2738                        @param $id_state The ID of the State that has the Cities requested
2739
2740                */
2741                function get_cities($id_country, $id_state=false)
2742                {
2743                        $cities = $this->bo->catalog->get_all_cities($id_country, $id_state);
2744
2745                        if (!$cities)
2746                        {
2747                                $result = array(
2748                                        'msg'    => lang('No Cities found for this State.'),
2749                                        'status' => 'empty'
2750                                );
2751
2752                                echo serialize($result);
2753                                return;
2754                        }
2755
2756                        $result = array(
2757                                'msg'    => lang('Cities Successfully retrieved!'),
2758                                'status' => 'ok'
2759                        );
2760
2761                        foreach ($cities as $city_info)
2762                        {
2763                                $result['data'][$city_info['id_city']] = $city_info['name'];
2764                        }
2765
2766                        echo serialize($result);
2767                }
2768
2769
2770                /*!
2771
2772                        @function search
2773                        @abstract Echos a serialized array containing the IDs
2774                                of the entries that matches the search argument
2775                        @author Raphael Derosso Pereira
2776                        @author Mï¿œrio Cï¿œsar Kolling (external catalogs)
2777
2778                        @param string $str_data A serialized array with two informations:
2779                                $data = array(
2780                                        'search_for' => (string),
2781                                        'recursive'  => (boolean),
2782                                );
2783
2784                */
2785                // SERPRO
2786                function search($str_data)
2787                {
2788                        $data = unserialize($str_data);
2789                        // It's an external catalog?
2790                        $external = $this->bo->is_external($this->page_info['actual_catalog']);
2791
2792                        if (!is_array($data) || !$data['search_for'] || !is_array($data['fields']))
2793                        {
2794                                echo serialize(array(
2795                                        'msg'    => lang('Invalid parameters'),
2796                                        'status' => 'abort'
2797                                ));
2798
2799                                return array('error' => lang('Invalid parameters'));
2800                        }
2801
2802
2803                        /*
2804                         * TODO: look into the database to discover the database's encoding and convert the search_for field accordingly
2805                         */
2806                        // Support search parameters with accentuation
2807                        if ($this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
2808/**rev 104**/
2809                                //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
2810                                $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
2811                                $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
2812                                $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
2813/****/
2814                        {
2815
2816                                $data['search_for'] = utf8_encode($data['search_for']);
2817                        }
2818
2819                        $rules  = array();
2820
2821                        if ($data['search_for'] === '*')
2822                        {
2823                                $rules = array(
2824                                        0 => array(
2825                                                'field' => $data['fields']['search'],
2826                                                'type'  => 'LIKE',
2827                                                'value' => '%'
2828                                        )
2829                                );
2830                        }
2831                        else
2832                        {
2833                                $names = explode(' ', $data['search_for']);
2834
2835                                if (!is_array($names))
2836                                {
2837                                        echo serialize(array(
2838                                                'msg'    => lang('Invalid Search Parameter'),
2839                                                'status' => 'abort'
2840                                        ));
2841
2842                                }
2843
2844                                if (!$external && $this->page_info['actual_catalog']['class'] != 'bo_people_catalog' &&
2845/**rev 104**/
2846                                        //$this->page_info['actual_catalog']['class'] != 'bo_group_manager')
2847                                        $this->page_info['actual_catalog']['class'] != 'bo_group_manager' &&
2848                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' &&
2849                                        $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager' )
2850/*****/
2851                                {
2852                                        /*
2853                                         * Restrict the returned contacts search to objectClass = phpgwAccount,
2854                                         * must have attibute phpgwAccountStatus, phpgwAccountVisible != -1
2855                                         */
2856                                        $rules = array(
2857                                                0 => array(
2858                                                        'field' => 'contact.object_class',
2859                                                        'type'  => '=',
2860                                                        'value' => 'phpgwAccount'
2861                                                ),
2862                                                1 => array(
2863                                                        'field' => 'contact.account_status',
2864                                                        'type'  => 'iLIKE',
2865                                                        'value' => '%'
2866                                                ),
2867/**rev 104**/
2868                                                ///
2869                                                //1 => array(
2870                                                2 => array(
2871/*****/
2872                                                        'field' => 'contact.account_visible',
2873                                                        'type'  => '!=',
2874                                                        'value' => '-1'
2875/**rev 104**/
2876        /*                                      ),
2877                                                2 => array(
2878                                                        'field' => 'contact.object_class',
2879                                                        'type'  => '=',
2880                                                        'value' => 'inetOrgPerson'
2881/****/
2882                                                ),
2883                                        );
2884                                }
2885
2886                                foreach ($names as $name)
2887                                {
2888                                        if ($name != '')
2889                                        {
2890                                                array_push($rules, array(
2891                                                        'field' => $data['fields']['search'],
2892                                                        'type'  => 'iLIKE',
2893                                                        'value' => '%'.$name.'%'
2894                                                ));
2895                                        }
2896                                }
2897                        }
2898
2899                        if ($external || $this->page_info['actual_catalog']['class'] == 'bo_people_catalog' ||
2900/**rev 104**/
2901                                //$this->page_info['actual_catalog']['class'] == 'bo_group_manager')
2902                                $this->page_info['actual_catalog']['class'] == 'bo_group_manager' ||
2903                                $this->page_info['actual_catalog']['class'] == 'bo_shared_people_manager' ||
2904                                $this->page_info['actual_catalog']['class'] == 'bo_shared_group_manager')
2905
2906
2907/***/
2908                        {
2909                                // Get only this attributes: dn, cn for external catalogs,
2910                                // used to restrict the attributes used in filters
2911                                $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'));
2912                        }
2913                        else
2914                        {
2915                                // Get only this attributes: dn, cn, phpgwAccountType, objectClass, phpgwAccountStatus, phpghAccountVisible
2916                                // for non-external catalogs, used to restrict the attributes used in filters
2917                                $ids = $this->bo->find(array(
2918                                        $data['fields']['id'],
2919                                        $data['fields']['search'],
2920                                        'contact.object_class',
2921                                        //'contact.account_status',
2922                                        'contact.account_visible'
2923                                        ), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'), $data['search_for_area'] );
2924                        }
2925
2926                        if (!is_array($ids) || !count($ids))
2927                        {
2928                                $this->last_search_ids = null;
2929                                $this->save_session();
2930                                return null;
2931                        }
2932
2933                        $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
2934
2935                        $ids_f = array();
2936
2937                        foreach ($ids as $e_info)
2938                        {
2939/**rev 104**/
2940                                //$ids_f[] = $e_info[$id_field];
2941                                if($this->page_info['actual_catalog']['class'] != 'bo_shared_people_manager' && $this->page_info['actual_catalog']['class'] != 'bo_shared_group_manager')
2942                                {
2943                                        $ids_f[] = $e_info[$id_field];
2944                                } else{
2945                                        $ids_f[] = array(0=>$e_info[$id_field],1=>$e_info['perms']);
2946                                }
2947/****/
2948                        }
2949
2950                        return $ids_f;
2951                }
2952
2953                // CELEPAR
2954                /*
2955        function search($str_data)
2956        {
2957            $data = unserialize($str_data);
2958
2959            if (!is_array($data) || !$data['search_for'] || !is_array($data['fields']))
2960            {
2961                echo serialize(array(
2962                    'msg'    => lang('Invalid parameters'),
2963                    'status' => 'abort'
2964                ));
2965
2966                return;
2967            }
2968
2969            $rules  = array();
2970
2971            if ($data['search_for'] === '*')
2972            {
2973                $rules = array(
2974                    0 => array(
2975                        'field' => $data['fields']['search'],
2976                        'type'  => 'LIKE',
2977                        'value' => '%'
2978                    )
2979                );
2980            }
2981            else
2982            {
2983                $names = explode(' ', $data['search_for']);
2984
2985                if (!is_array($names))
2986                {
2987                    echo serialize(array(
2988                        'msg'    => lang('Invalid Search Parameter'),
2989                        'status' => 'abort'
2990                    ));
2991
2992                    return;
2993                }
2994
2995                foreach ($names as $name)
2996                {
2997                    if ($name != '')
2998                    {
2999                        array_push($rules, array(
3000                            'field' => $data['fields']['search'],
3001                            'type'  => 'iLIKE',
3002                            'value' => '%'.$name.'%'
3003                        ));
3004                    }
3005                }
3006            }
3007
3008
3009
3010            //$catalog = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
3011
3012            //if ($catalog['class'] === 'bo_people_catalog')
3013            //{
3014            //    array_push($rules, array(
3015            //        'field' => 'contact.id_owner',
3016            //        'type'  => '=',
3017            //        'value' => $GLOBALS['phpgw_info']['user']['account_id']
3018            //    ));
3019            //}
3020
3021
3022            $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'));
3023
3024            if (!is_array($ids) || !count($ids))
3025            {
3026                echo serialize(array(
3027                    'msg'    => lang('No Entries Found!'),
3028                    'status' => 'empty'
3029                ));
3030
3031                return;
3032            }
3033            $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
3034
3035            $ids_f = array();
3036            foreach ($ids as $e_info)
3037            {
3038                $ids_f[] = $e_info[$id_field];
3039            }
3040
3041            echo serialize(array(
3042                'data'   => $ids_f,
3043                'msg'    => lang('Found %1 Entries', count($ids)),
3044                'status' => 'ok'
3045            ));
3046
3047                        return;
3048        }*/
3049                /*!
3050
3051                        @function get_multiple_entries
3052                        @abstract Returns an array containing the specifiend data in the default
3053                                CC UI format
3054                        @author Raphael Derosso Pereira
3055
3056                        @param array str_data A serialized array containing the ID's of the entries
3057                                to be taken, the fields to be taken and the rules to be used on the
3058                                retrieval:
3059                                $data = array(
3060                                        'ids'    => array(...),
3061                                        'fields' => array(...),
3062                                        'rules'  => array(...)
3063                                );
3064
3065                */
3066                function get_multiple_entries($str_data)
3067                {
3068                        $data = unserialize($str_data);
3069
3070                        if (!is_array($data) or !count($data) or !count($data['fields']) or !count($data['ids']))
3071                        {
3072                                return array(
3073                                        'msg'    => lang('Invalid Parameters'),
3074                                        'status' => 'abort'
3075                                );
3076                        }
3077
3078                        $entries = $this->bo->catalog->get_multiple_entries($data['ids'], $data['fields']);
3079
3080                        if (!is_array($entries) or !count($entries))
3081                        {
3082                                return array(
3083                                        'msg'    => lang('No Entries Found!'),
3084                                        'status' => 'empty'
3085                                );
3086                        }
3087
3088                        return array(
3089                                'msg'    => lang('Found %1 Entries!', count($entries)),
3090                                'status' => 'ok',
3091                                'data'   => $entries
3092                        );
3093                }
3094
3095                /*
3096
3097                        @function get_all_entries
3098                        @abstract Returns the specified fields for all catalog's entries
3099                                in the default CC UI format
3100                        @author Raphael Derosso Pereira
3101
3102                        @params array str_data A serialized array containing the fields to
3103                                be grabbed, the maximum number of entries to be returned and a
3104                                boolean specifying if the calls refers to a new grab or to an
3105                                unfinished one.
3106
3107                */
3108                function get_all_entries($str_data)
3109                {
3110                        $data = unserialize($str_data);
3111
3112                        if (!is_array($data) or
3113                            !count($data) or
3114                                !count($data['fields']) or
3115                                !$data['maxlength'] or
3116                                (!$data['new'] and !$data['offset']))
3117                        {
3118                                return array(
3119                                        'msg'    => lang('Invalid Parameters'),
3120                                        'status' => 'abort'
3121                                );
3122                        }
3123
3124                        if ($data['new'])
3125                        {
3126                                $this->all_entries = $this->bo->catalog->get_all_entries_ids();
3127
3128                                $this->save_session();
3129
3130                                if (!is_array($this->all_entries) or !count($this->all_entries))
3131                                {
3132                                        return array(
3133                                                'msg'    => lang('No Entries Found!'),
3134                                                'status' => 'empty'
3135                                        );
3136                                }
3137
3138                                $data['offset'] = 0;
3139                        }
3140
3141                        if ($data['maxlength'] != -1)
3142                        {
3143                                $result = $this->bo->catalog->get_multiple_entries(array_slice($this->all_entries, $data['offset'], $data['maxlength']), $data['fields']);
3144                        }
3145                        else
3146                        {
3147                                $result = $this->bo->catalog->get_multiple_entries($this->all_entries, $data['fields']);
3148                        }
3149
3150                        $prefs = ExecMethod('contactcenter.ui_preferences.get_preferences');
3151
3152                        $jsCode = array();
3153                        $count = 0;
3154                        foreach ($result as $each)
3155                        {
3156                                if (!is_array($each))
3157                                {
3158                                        continue;
3159                                }
3160
3161                                if($this-> typeContact == 'groups') {
3162
3163                                        foreach ($each as $field => $value)     {
3164
3165                                                if ($field === 'title') {
3166                                                        $optionName = '\\"'.$value.'\\"';
3167
3168                                                }
3169                                                else if ($field === 'short_name')       {
3170
3171                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$optionName.' ('.$value.')", "'.$count.'");';
3172                                                        $count++;
3173                                                }
3174                                        }
3175                                }
3176
3177                                else  {
3178                                        foreach ($each as $field => $value)     {
3179                                                if ($field === 'names_ordered') {
3180                                                         if(is_array($value))
3181                                $value = $value[0];
3182                                                        $name = '\\"'.$value.'\\"';
3183                                                }
3184                                                else if ($field === 'connections')      {
3185
3186                                                        foreach ($value as $connection)         {
3187                                                                if ($connection['id_type'] == $prefs['personCardEmail'])        {
3188                                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$name.' <'.$connection['connection_value'].'>", "'.$count.'");';
3189                                                                        $count++;
3190                                                                }
3191                                                        }
3192                                                }
3193                                        }
3194                                }
3195                        }
3196
3197                        $jsCodeFinal = implode("\n", $jsCode);
3198
3199                        $nEntries = count($result);
3200
3201                        if (!$nEntries)
3202                        {
3203                                return array(
3204                                        'msg'    => lang('Error while getting user information...'),
3205                                        'status' => 'abort'
3206                                );
3207                        }
3208
3209                        return array(
3210                                'msg'      => lang('Found %1 Entries!', $nEntries),
3211                                'status'   => 'ok',
3212                                'typeContact'   => $this -> typeContact,
3213                                'final'    => $nEntries + $data['offset'] < count($this->all_entries) ? false : true,
3214                                'offset'   => $data['offset'] + $nEntries,
3215                                'data'     => $jsCodeFinal
3216                        );
3217                }
3218
3219                /*********************************************************************\
3220                 *                      Auxiliar Methods                             *
3221                \*********************************************************************/
3222
3223                /*!
3224
3225                        @function save_session
3226                        @abstract Saves the data on the session
3227                        @author Raphael Derosso Pereira
3228
3229                */
3230                function save_session()
3231                {
3232                        $GLOBALS['phpgw']->session->appsession('ui_data.page_info','contactcenter',$this->page_info);
3233                        $GLOBALS['phpgw']->session->appsession('ui_data.all_entries','contactcenter',$this->all_entries);
3234                }
3235
3236                /*!
3237
3238                        @function convert_tree
3239                        @abstract Converts the tree array in the BO format to a JS tree array compatible
3240                                with the one available in eGW
3241                        @author Raphael Derosso Pereira
3242
3243                        @param (array)  $tree    The tree in the BO format
3244                        @param (string) $name    The tree name
3245                        @param (string) $iconDir The dir where the icons are
3246                        @param (string) $parent  The parent
3247                */
3248
3249                function convert_tree($tree, &$iconDir, $parent='0')
3250                {
3251//                      echo "Entrou<br>\tPai: $parent <br>";
3252                        $rtree = array();
3253
3254                        if ($parent === '0')
3255                        {
3256//                              echo 'Root!<br>';
3257                                $rtree['0'] = array(
3258                                        'type'       => 'catalog_group',
3259                                        'id'         => '0',
3260                                        'pid'        => 'none',
3261                                        'caption'    => lang('Catalogues'),
3262                                        'class'      => 'bo_catalog_group_catalog',
3263                                        'class_args' => array('_ROOT_', '$this', '$this->get_branch_by_level($this->catalog_level[0])')
3264                                );
3265                        }
3266
3267                        foreach($tree as $id => $value)
3268                        {
3269//                              echo 'ID: '.$id.'<br>';
3270                                $rtree[$parent.'.'.$id] = array(
3271                                        'type'    => $value['type'],
3272                                        'id'      => $parent.'.'.$id,
3273                                        'pid'     => $parent,
3274                                        'caption' => $value['name']
3275                                );
3276
3277                                switch($value['type'])
3278                                {
3279                                        case 'catalog_group':
3280                                        case 'mixed_catalog_group':
3281                                                $rtree = $rtree + $this->convert_tree($value['sub_branch'],$iconDir,$parent.'.'.$id);
3282                                                break;
3283                                }
3284                        }
3285
3286                        if (count($rtree))
3287                        {
3288                                return $rtree;
3289                        }
3290                }
3291
3292                function get_catalog_add_contact($id){
3293
3294                        $array_participants = array();
3295                        if(!$this->bo->catalog->src_info) {
3296                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3297                                $this->bo->catalog->src_info = $ldap->srcs[1];
3298                        }
3299
3300                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
3301                        $dn=$this->bo->catalog->src_info['dn'];
3302                        $justThese = array("givenname","givenname","sn","telephonenumber","mail");
3303                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
3304                        $info = ldap_get_entries($ds, $sr);
3305                        for($z = 0; $z < 5; $z++) {
3306                                $participant = $info[0][$justThese[$z]];
3307                                array_push($array_participants, $participant);
3308                        }
3309
3310                        ldap_close($ds);
3311                        echo serialize($array_participants);
3312                }
3313
3314                function get_catalog_participants_group($id)
3315                {
3316                        if(!$this->bo->catalog->src_info) {
3317                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
3318                                $this->bo->catalog->src_info = $ldap->srcs[1];
3319                        }
3320                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
3321                        $justThese = array("description","memberuid");
3322                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);
3323                        $info = ldap_get_entries($ds, $sr);
3324                        $member_uids = $info[0]['memberuid'];
3325                        $contact['names_ordered'] = $info[0]['description'];
3326                        $filter = "";
3327                        for($z = 0; $z < count($member_uids); $z++) {
3328                                if($member_uids[$z])
3329                                        $filter.="(uid=".$member_uids[$z].")";
3330                        }
3331                        $array_participants = array();
3332                        if($filter) {
3333                                $filter = "(|".$filter.")";
3334                                $valarray = explode(',',$id);
3335                                array_shift($valarray);
3336                                $dn = implode(',',$valarray);
3337                                $justThese = array("cn","mail");
3338                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3339                                $info = ldap_get_entries($ds, $sr);
3340                                for($z = 0; $z < $info['count']; $z++) {
3341                                        $participant =  '<font color=\'DARKBLUE\'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;'.$info[$z]['cn'][0].'&quot; &lt;'.$info[$z]['mail'][0].'&gt;</font><br>';
3342                                    $array_emails[$info[$z]['mail'][0]] = null;
3343                                        array_push($array_participants, $participant);
3344                                }
3345                                ldap_close($ds);
3346                        }
3347                        sort($array_participants);
3348                        $innerHTML = '';
3349                        foreach($array_participants as $index => $participant){
3350                                $innerHTML .= $participant;
3351                        }
3352                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
3353                        echo serialize($return);
3354                }
3355
3356                function get_catalog_participants_list($id)
3357                {
3358
3359                        $fields = $this->bo->catalog->get_fields(false);
3360                        $fields['names_ordered'] = true;
3361                        $fields['mail_forwarding_address'] = true;
3362                        $contact = $this->bo->catalog->get_single_entry($id,$fields);
3363
3364                        $array_participants = array();
3365                        $array_emails = array();
3366
3367                        $filter = null;
3368                        for($z = 0; $z < $contact['mail_forwarding_address']['count']; $z++) {
3369                                        if(strstr($contact['mail_forwarding_address'][$z],'@')) {
3370                                                $filter.="(mail=".$contact['mail_forwarding_address'][$z].")";
3371                                                $array_emails[$contact['mail_forwarding_address'][$z]] = "<font color=black>".$contact['mail_forwarding_address'][$z]."</font>";
3372                                        }
3373                                        else
3374                                                $array_participants[$z] = "<font color=red>".$contact['mail_forwarding_address'][$z]."</font>";
3375                        }
3376
3377                        if($filter) {
3378                                $filter = "(|".$filter.")";
3379                                if(!$this->bo->catalog->src_info) {
3380                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
3381                                        $this->bo->catalog->src_info = $ldap->srcs[1];
3382                                }
3383                                $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);
3384                                $dn=$this->bo->catalog->src_info['dn'];
3385                                $justThese = array("cn","mail");
3386                                $sr = ldap_search($ds,$dn, $filter,$justThese);
3387                                $info = ldap_get_entries($ds, $sr);
3388                                for($z = 0; $z < $info['count']; $z++) {
3389                                        $participant =  '<font color=\'DARKBLUE\'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&quot;'.$info[$z]['cn'][0].'&quot; &lt;'.$info[$z]['mail'][0].'&gt;</font><br>';
3390                                        $array_emails[$info[$z]['mail'][0]] = null;
3391                                        array_push($array_participants, $participant);
3392                                }
3393
3394                                foreach($array_emails as $index => $email)
3395                                        if($email)
3396                                                array_push($array_participants, "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;".$email."<br>");
3397
3398                                ldap_close($ds);
3399                        }
3400                        sort($array_participants);
3401                        $innerHTML = '';
3402                        foreach($array_participants as $index => $participant){
3403                                $innerHTML .= $participant;
3404                        }
3405                        $return = array('size' => count($array_participants), 'names_ordered'=> $contact['names_ordered'], 'inner_html' => $innerHTML);
3406                        echo serialize($return);
3407                }
3408
3409                function export_contacts($typeExport){
3410
3411                        $boGroup = CreateObject('contactcenter.bo_group');
3412                        $contacts = $boGroup->get_all_contacts();
3413                        $streamBuffer = '';
3414
3415                        if(!count($contacts))
3416                                echo null;
3417
3418/**rev 104**/
3419                        // Essa iteraᅵᅵo transforma uma esturuta com contatos redundantes e separados por email ou tel.
3420                        // em outra com apenas 1 elemento pra cada contato
3421        /*              $i=0;
3422                        foreach($contacts as $object){
3423                                $i=($object['id_contact'] - 1);
3424                                $all_contacts[$i]['name']=$object['names_ordered'];
3425                                if ($object['id_typeof_contact_connection'] == 1)
3426                                        $all_contacts[$i]['email']=$object['connection_value'];
3427                                else
3428                                        $all_contacts[$i]['phone']=$object['connection_value'];
3429                        }
3430        */
3431/*****/
3432
3433                        switch($typeExport) {
3434
3435                                case 'outlook_en':
3436                                        $streamBuffer = "Name;E-mail Address;Notes;Mobile Phone;Pager;Company;".
3437/**rev 104**/
3438        /*                                              "Job Title;Home Phone;Home Fax;Business Phone;Business Fax\r\n";
3439                                        foreach($all_contacts as $index => $object){
3440                                                $streamBuffer.= $object['name'].";".$object['email'].";;;;;;".$object['phone'].";;;\r\n";
3441                                        }
3442        */
3443                                                        "Job Title;Home Phone;Home Fax;Business Phone;Business Fax\r\n";                                                       
3444                                        foreach($contacts as $index => $object){
3445                                                $streamBuffer.= $object['names_ordered'].";".$object['connection_value'].";;;;;;".$object['phone'].";;;\r\n";
3446                                        }
3447/*****/
3448                                break;
3449
3450                                case 'outlook_pt-BR':
3451                                        $streamBuffer = "Nome;End. de email;Endereï¿œo residencial;".
3452                                        "Cidade do endereï¿œo residencial;CEP do endereï¿œo residencial;".
3453                                        "Estado;Paï¿œs/regiï¿œo do endereï¿œo residencial;Telefone residencial;".
3454                                        "Rua do endereï¿œo comercial;Cidade do endereï¿œo comercial;".
3455                                        "CEP do endereï¿œo comercial;Estado do endereï¿œo comercial;".
3456                                        "Paï¿œs/regiï¿œo do endereï¿œo comercial;Telefone comercial;Empresa;Cargo\r\n";
3457/**rev 104**/
3458                                //      foreach($all_contacts as $index => $object){
3459                                //              $streamBuffer.= $object['name'].";".$object['email'].";;;;;;".$object['phone'].";;;;;;;;\r\n";
3460                                        foreach($contacts as $index => $object){
3461                                                $streamBuffer.= $object['names_ordered'].";".$object['connection_value'].";;;;;;".$object['phone'].";;;;;;;;\r\n";
3462/******/
3463                                        }
3464                                break;
3465
3466                                case 'outlook2000_pt-BR':
3467                                        $streamBuffer = "\"Tratamento\",\"Nome\",\"Segundo Nome\",\"Sobrenome\",\"Sufixo\",".
3468                                        "\"Empresa\",\"Departamento\",\"Cargo\",\"Rua do endereï¿œo comercial\",\"Rua do endereï¿œo comercial 2\",".
3469                                        "\"Rua do endereï¿œo comercial 3\",\"Cidade do endereï¿œo comercial\",\"Estado do endereï¿œo comercial\",".
3470                                        "\"CEP do endereï¿œo comercial\",\"Paï¿œs do endereï¿œo comercial\",\"Endereï¿œo residencial\",\"Rua residencial 2\",".
3471                                        "\"Rua residencial 3\",\"Cidade do endereï¿œo residencial\",\"Estado\",\"CEP do endereï¿œo residencial\",\"Paï¿œs do endereï¿œo residencial\",".
3472                                        "\"Outro endereï¿œo\",\"Outro endereï¿œo 2\",\"Outro endereï¿œo 3\",\"Cidade\",\"Estado\",\"CEP\",\"Paï¿œs\",".
3473                                        "\"Telefone do assistente\",\"Fax comercial\",\"Telefone comercial\",\"Telefone comercial 2\",\"Retorno de chamada\",".
3474                                        "\"Telefone do carro\",\"Telefone principal da empresa\",\"Fax residencial\",\"Telefone residencial\",".
3475                                        "\"Telefone residencial 2\",\"ISDN\",\"Telefone celular\",\"Outro fax\",\"Outro telefone\",\"Pager\",\"Telefone principal\",".
3476                                        "\"Radiofone\",\"Telefone TTY/TDD\",\"Telex\",\"Aniversï¿œrio\",\"Anotaᅵᅵes\",\"Caixa postal\",\"Categorias\",".
3477                                        "\"Cï¿œdigo da empresa\",\"Cï¿œdigo do governo\",\"Cï¿œnjuge\",\"Conta\",\"Endereï¿œo de correio eletrï¿œnico\",".
3478                                        "\"Nome de exibiᅵᅵo do correio eletr.\",\"Endereï¿œo de correio eletrï¿œnico 2\",".
3479                                        "\"Nome de exibiᅵᅵo do correio eletr.2\",\"Endereï¿œo de correio eletrï¿œnico 3\",".
3480                                        "\"Nome de exibiᅵᅵo do correio eletr.3\",\"Datas especiais\",\"Disponibilidade da Internet\",".
3481                                        "\"Filhos\",\"Hobby\",\"Idioma\",\"Indicaᅵᅵo\",\"Informaᅵᅵes para cobranï¿œa\",\"Iniciais\",\"Local\",".
3482                                        "\"Nome do assistente\",\"Nome do gerenciador\",\"Pï¿œgina da Web\",\"Palavras-chave\",\"Particular\",\"Personalizado 1\",\"Personalizado 2\",".
3483                                        "\"Personalizado 3\",\"Personalizado 4\",\"Prioridade\",\"Profissï¿œo\",\"Quilometragem\",\"Sala\",\"Sensibilidade\",\"Servidor de diretï¿œrio\",".
3484                                        "\"Sexo\"\r\n";
3485
3486/**rev 104**/
3487                                        //foreach($all_contacts as $index => $object){
3488                                        //      $streamBuffer.= ",\"".$object['name']."\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,".$object['phone'].",,,,,,,,,,,,\"".$object['email']."\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3489                                        foreach($contacts as $index => $object){
3490                                                $streamBuffer.= ",\"".$object['names_ordered']."\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,".$object['phone'].",,,,,,,,,,,,\"".$object['connection_value']."\",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3491/******/
3492                                        }
3493                                break;
3494
3495                                case 'outlook2000_en':
3496                                        $streamBuffer = "Title,First Name,Middle Name,Last Name,Suffix,Company,Department,Job Title,".
3497                                        "Business Street,Business Street 2,Business Street 3,Business City,Business State,Business Postal Code,".
3498                                        "Business Country,Home Street,Home Street 2,Home Street 3,Home City,Home State,Home Postal Code,Home Country,".
3499                                        "Other Street,Other Street 2,Other Street 3,Other City,Other State,Other Postal Code,Other Country,".
3500                                        "Assistant's Phone,Business Fax,Business Phone,Business Phone 2,Callback,Car Phone,Company Main Phone,Home Fax,".
3501                                        "Home Phone,Home Phone 2,ISDN,Mobile Phone,Other Fax,Other Phone,Pager,Primary Phone,Radio Phone,TTY/TDD Phone,Telex,".
3502                                        "Account,Anniversary,Assistant's Name,Billing Information,Birthday,Categories,Children,Directory Server,E-mail Address,".
3503                                        "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,".
3504                                        "Gender,Government ID Number,Hobby,Initials,Internet Free Busy,Keywords,Language,Location,Manager's Name,Mileage,Notes,".
3505                                        "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";
3506
3507/**rev 104**/
3508                                        //foreach($all_contacts as $index => $object){
3509                                        //      $streamBuffer.= ",".$object['name'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,".$object['phone'].",,,,,,,,,,,,".$object['email'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3510                                        foreach($contacts as $index => $object){
3511                                                $streamBuffer.= ",".$object['names_ordered'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,".$object['phone'].",,,,,,,,,,,,".$object['connection_value'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3512/*******/
3513                                        }
3514                                break;
3515
3516                                case 'thunderbird':
3517                                        $streamBuffer = "\n";
3518
3519/**rev 104**/
3520                                        //foreach($all_contacts as $index => $object){
3521                                        //      $streamBuffer.= ",,".$object['name'].",,".$object['email'].",,".$object['phone'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3522                                        foreach($contacts as $index => $object){
3523                                                $streamBuffer.= ",,".$object['names_ordered'].",,".$object['connection_value'].",,".$object['phone'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
3524
3525/******/
3526                                        }
3527                                break;
3528
3529                                case 'expresso':
3530                                        $streamBuffer = "Nome,Email,Telefone\r\n";
3531
3532/**rev 104**/
3533                                        //foreach($all_contacts as $index => $object){
3534                                        //      $streamBuffer.= $object['name'].",".$object['email'].",".$object['phone']."\r\n";
3535                                        foreach($contacts as $index => $object){
3536                                                $streamBuffer.= $object['names_ordered'].",".$object['connection_value'].",".$object['phone']."\r\n";
3537 
3538/******/
3539                                        }
3540                                break;
3541
3542                        }
3543
3544                        $file = "contacts_".md5(microtime()).".swp";
3545                        $tempDir = ini_get("session.save_path");
3546                        $f = fopen($tempDir.'/'.$file,"w");
3547                        if(!$f)
3548                                echo null;
3549
3550                        fputs($f,$streamBuffer);
3551                        fclose($f);
3552
3553                        echo $tempDir.'/'.$file;
3554                }
3555
3556                // Get the csv field and put into array, from php.net
3557                function parse_line($input_text, $delimiter = ',', $text_qualifier = '"') {
3558                        $text = trim($input_text);
3559                          if(is_string($delimiter) && is_string($text_qualifier)) {
3560                         $re_d = '\x' . dechex(ord($delimiter));            //format for regexp
3561                        $re_tq = '\x' . dechex(ord($text_qualifier));    //format for regexp
3562
3563                        $fields = array();
3564                        $field_num = 0;
3565                        while(strlen($text) > 0) {
3566                        if($text{0} == $text_qualifier) {
3567                                preg_match('/^' . $re_tq . '((?:[^' . $re_tq . ']|(?<=\x5c)' . $re_tq . ')*)' . $re_tq . $re_d . '?(.*)$/', $text, $matches);
3568
3569                                $value = str_replace('\\' . $text_qualifier, $text_qualifier, $matches[1]);
3570                                $text = trim($matches[2]);
3571
3572                                $fields[$field_num++] = $value;
3573                        } else {
3574                                preg_match('/^([^' . $re_d . ']*)' . $re_d . '?(.*)$/', $text, $matches);
3575
3576                                $value = $matches[1];
3577                                $text = trim($matches[2]);
3578
3579                                $fields[$field_num++] = $value;
3580                }
3581                }
3582                        return $fields;
3583                    } else
3584                        return false;
3585                }
3586
3587                //funcao alterada para importar outros campos alem de nome, telefone e email, de arquivo csv (Outlook 2000)
3588                //em 08/04/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
3589                //Foi adicionada uma funcao (escapesheelcmd()) nas variaveis para que caracteres especiais sejam ignorados
3590                //durante a importacao dos contatos; o processo estava travando por causa de caracteres em campos como nome,
3591                //sobrenome, notas e e-mail;
3592                //em 19/06/2009 - Rommel Cysne (rommel.cysne@serpro.gov.br);
3593                function import_contacts($typeImport){
3594
3595                        if($file = $_SESSION['contactcenter']['importCSV']) {
3596                                unset($_SESSION['contactcenter']['importCSV']);
3597                                $len = filesize($file);
3598                                $count = 0;
3599                                $return = array('error' => false, '_new' => 0, '_existing' => 0, '_failure' => 0);
3600                                $handle = @fopen($file, "r") or die(serialize($return['error'] = true));
3601
3602                                $input_header = fgets($handle);
3603                                if ($typeImport == 'outlook')
3604                                        $delim = ';';
3605                                else if ($typeImport == 'auto')
3606                                $delim = strstr($input_header,',') ? ',' : ';';
3607                                else
3608                                        $delim = ',';
3609                                $csv_header = $this->parse_line($input_header,$delim);
3610                                $firstContact = fgets($handle);
3611                                preg_match("/\"(.+)\"[,;]/sU",$firstContact,$matches); // yahoo csv
3612                                rewind($handle);
3613
3614                                $header = @fgetcsv($handle, $len, $delim) or die(serialize($return['error'] = true));
3615                                if(count($header)  < 2 || count($header) > 100) {
3616                                        $return['error'] = true;
3617                                        $return['sizeheader'] = count($header);
3618                                        echo serialize($return);
3619                                        return;
3620                                }
3621
3622                                if ($matches[0][strlen($matches[0])-1] == ';')
3623                                        $delim = ';';
3624
3625                        $boGroup = CreateObject('contactcenter.bo_group');
3626                        $boPeople = CreateObject('contactcenter.bo_people_catalog');
3627                                switch($typeImport){
3628                                        case 'outlook2000':
3629                                                $name_pos=1;
3630                                                $name2_pos=2;
3631                                                $name3_pos=3;
3632                                                $addr1_pos=8;
3633                                                $cep_pos=13;
3634                                                $addr2_pos=22;
3635                                                $fax_pos=30;
3636                                                $phone_pos=31;
3637                                                $resPhone_pos=37;
3638                                                $cellPhone_pos=40;
3639                                                $pager_pos=43;
3640                                                $birth_pos=48;
3641                                                $notes_pos=49;
3642                                                $email_pos=56;
3643                                                $altEmail_pos=59;
3644
3645                                                break;
3646                                        case 'outlook':
3647                                                $name_pos=3;
3648                                                $email_pos=4;
3649                                                $phone_pos=7;
3650                                                $resPhone_pos=10;
3651                                                $cellPhone_pos=12;
3652                                                $addr1_pos=13;
3653                                                $cep_pos=15;
3654                                                $phone_pos=18;
3655                                                $fax_pos=19;
3656                                                $pager_pos=20;
3657                                                $notes_pos=25;
3658                                                break;
3659                                        case 'thunderbird':
3660                                                $name_pos=2;
3661                                                $email_pos=4;
3662                                                $phone_pos=7;
3663                                                break;
3664                                        case 'expresso':
3665                                                $name_pos=0;
3666                                                $email_pos=1;
3667                                                $phone_pos=2;
3668                                                break;
3669                                        default:
3670                                                foreach($csv_header as $index => $fieldName)
3671                                                {
3672                                                        switch($fieldName){
3673                                                        case 'Name':
3674                                                        case 'Nome':
3675                                                        case 'First Name':
3676                                                                $name_pos = $index;
3677                                                                break;
3678                                                        case 'Second name':
3679                                                        case 'Segundo nome':
3680                                                                $name2_pos = $index;
3681                                                                break;
3682                                                        case 'Sobrenome':
3683                                                        case 'Surname':
3684                                                                $name3_pos = $index;
3685                                                                break;
3686                                                        case 'Business Street':
3687                                                        case 'Rua do endereço comercial':
3688                                                                $addr1_pos = $index;
3689                                                                break;
3690                                                        case 'Rua do endereço comercial 2':
3691                                                        case 'Outro endereço':
3692                                                                $addr2_pos = $index;
3693                                                                break;
3694                                                        case 'Business Postal Code':
3695                                                        case 'CEP do endereço comercial':
3696                                                                $cep_pos = $index;
3697                                                                break;
3698                                                        case 'Business Fax':
3699                                                        case 'Fax comercial':
3700                                                        case 'Fax':
3701                                                                $fax_pos = $index;
3702                                                                break;
3703                                                        case 'Home Phone':
3704                                                        case 'Telefone residencial':
3705                                                                $resPhone_pos = $index;
3706                                                                break;
3707                                                        case 'Mobile phone':
3708                                                        case 'Telefone celular':
3709                                                                $cellPhone_pos = $index;
3710                                                                break;
3711                                                        case 'Pager':
3712                                                                $pager_pos = $index;
3713                                                                break;
3714                                                        case 'Phone':
3715                                                        case 'Business Phone':
3716                                                        case 'Telefone':
3717                                                        case 'Telefone principal':
3718                                                        case 'Telefone comercial':
3719                                                                $phone_pos = $index;
3720                                                                break;
3721                                                        case 'Aniversário':
3722                                                        case 'Birthdate':
3723                                                                $birth_pos = $index;
3724                                                        case 'Anotações':
3725                                                        case 'Notes':
3726                                                                $notes_pos = $index;
3727                                                        case 'E-mail':
3728                                                        case 'Email':
3729                                                        case 'E-mail Address':
3730                                                        case 'Endereï¿œo de correio eletrï¿œnico':
3731                                                        case 'End. de email':
3732                                                                $email_pos = $index;
3733                                                                break;
3734                                                        case 'Endereï¿œo de correio eletrï¿œnico 2':
3735                                                                $altEmail_pos = $index;
3736                                                                break;
3737                                                        }
3738                                                }
3739                                                break;
3740                                }
3741
3742                                while (($data = fgetcsv($handle, $len, $delim))) {
3743                                foreach ($header as $key=>$heading)
3744                                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
3745
3746                                        $sdata = array();
3747                                        $full_name      = trim($row[$header[$name_pos]]);
3748                                        $email          = trim($row[$header[$email_pos]]);
3749                                        $phone          = trim($row[$header[$phone_pos]]);
3750                                        $name2          = trim($row[$header[$name2_pos]]);
3751                                        $name3          = trim($row[$header[$name3_pos]]);
3752
3753                                        $addr1          = trim($row[$header[$addr1_pos]]);
3754                                        $addr2          = trim($row[$header[$addr2_pos]]);
3755                                        $cep            = trim($row[$header[$cep_pos]]);
3756                                        $fax            = trim($row[$header[$fax_pos]]);
3757                                        $resPhone       = trim($row[$header[$resPhone_pos]]);
3758                                        $cellPhone      = trim($row[$header[$cellPhone_pos]]);
3759                                        $pager          = trim($row[$header[$pager_pos]]);
3760                                        $birth          = trim($row[$header[$birth_pos]]);
3761                                        $notes          = trim($row[$header[$notes_pos]]);
3762                                        $altEmail       = trim($row[$header[$altEmail_pos]]);
3763
3764                                        $full_name = escapeshellcmd($full_name);
3765                                        $array_name = explode(' ', str_replace('"','',(str_replace('\'','',$full_name))));
3766                                        $sdata['given_names'] = escapeshellcmd($array_name[0]);
3767                                        $array_name[0] = null;
3768                                        $sdata['family_names'] = trim(implode(' ',$array_name));
3769                                        if($sdata['family_names'] == '')
3770                                        {
3771                                                $sdata['family_names'] = escapeshellcmd($name2) . " " . escapeshellcmd($name3);
3772                                        }
3773
3774                                        $sdata['connections']['default_email']['connection_name'] = lang('Main');
3775                                        $sdata['connections']['default_email']['connection_value'] = escapeshellcmd($email);
3776
3777                                        $sdata['connections']['default_phone']['connection_name'] = lang('Main');
3778                                        $sdata['connections']['default_phone']['connection_value'] = escapeshellcmd($phone);
3779
3780                                        $sdata['connections']['fax']['connection_name'] = lang('Fax');
3781                                        $sdata['connections']['fax']['connection_value'] = escapeshellcmd($fax);
3782
3783                                        $sdata['connections']['residencial_phone']['connection_name'] = lang('Residencial');
3784                                        $sdata['connections']['residencial_phone']['connection_value'] = escapeshellcmd($resPhone);
3785
3786                                        $sdata['connections']['cellular_phone']['connection_name'] = lang('Cellphone');
3787                                        $sdata['connections']['cellular_phone']['connection_value'] = escapeshellcmd($cellPhone);
3788
3789                                        $sdata['connections']['pager']['connection_name'] = lang('Pager');
3790                                        $sdata['connections']['pager']['connection_value'] = escapeshellcmd($pager);
3791
3792                                        $sdata['connections']['alternative_email']['connection_name'] = lang('Alternative');
3793                                        $sdata['connections']['alternative_email']['connection_value'] = escapeshellcmd($altEmail);
3794
3795                                        $sdata['addresses']['addr1']['address_value'] = escapeshellcmd($addr1);
3796                                        $sdata['addresses']['addr2']['address_value'] = escapeshellcmd($addr2);
3797                                        $sdata['addresses']['cep']['address_value'] = escapeshellcmd($cep);
3798
3799                                        $array_birth = explode("/",$birth);
3800
3801                                        $sdata['birthdate'] = escapeshellcmd(date('Y-m-d', mktime(0,0,0,$array_birth[1],$array_birth[0],$array_birth[2])));
3802
3803                                        $sdata['notes'] = escapeshellcmd($notes);
3804                                        $sdata['is_quick_add'] = true;
3805                                        $sdata['connections']['default_phone']['connection_value'] = $phone;
3806
3807                                        //      verifica se email já existe!
3808                                        $email = escapeshellcmd($email);
3809                                        $contact = $boGroup->verify_contact($email);
3810
3811                                        if(!$sdata['given_names'] && $email){
3812                                                        $a_email = explode("@",$email);
3813                                                        $sdata['given_names'] = escapeshellcmd($a_email[0]);
3814                                        }
3815
3816                                        $line_iteration = $return['_failure'] + $return['_existing'] + $return['_new'];
3817
3818                                        if($contact){
3819                                                $return['_existing']++;
3820                                        }
3821                                        else if(!eregi("^[/_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
3822                                                $return['_failure']++;
3823                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid E-Mail address: " . $email ."<br>";
3824                                        }
3825                                        else if (!$sdata['given_names'] || !$email || !$boPeople ->quick_add($sdata)){
3826                                                $return['_failure']++;
3827                                                $return['_failure_status'] .= "Line: " . ($line_iteration + 2) . ", Invalid Name: " . $sdata['given_names'] ."<br>";
3828                                        }
3829                                        else
3830                                                $return['_new']++;
3831                        }
3832                                fclose($handle);
3833                                unlink($file);
3834                        }
3835                        else
3836                                $return['error'] = true;
3837
3838                        echo serialize($return);
3839                }
3840        }
3841
3842?>
Note: See TracBrowser for help on using the repository browser.