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

Revision 2895, 116.7 KB checked in by amuller, 14 years ago (diff)

Ticket #820 - Remoção %%20 das strings

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