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

Revision 1690, 116.5 KB checked in by eduardoalex, 14 years ago (diff)

Ticket #776 - Adicionada verificacao do conteudo da pesquisa para que nao haja caracteres invalidos

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