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

Revision 575, 97.7 KB checked in by niltonneto, 12 years ago (diff)

Melhorando tratamento de csv automático.
Resolve também #250

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