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

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

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

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